2017JAVA面试总结

2017JAVA面试总结

这里是总结我这个月到2017的面试情况。

概率高

1. 代码的加载顺序

static: 肯定要加载的,从父类开始,只到运行就会加载。无论有没有用到都会运行

class PLoad {
    {
        System.out.println("PLoad class");
    }
    static {
        System.out.println("PLoad static");
    }
    public PLoad() {
        System.out.println("PLoad Construtor");
    }
}

public class MethodLoad extends PLoad {
    {
        System.out.println("MethodLoad class");
    }
    static {
        System.out.println("MethodLoad static ");
    }
    public MethodLoad() {
        System.out.println("MethodLoad Construtor");
    }
    public static void main(String[] args) {
        //分情况
    }
}

1).创建父类

main()方法

public static void main(String[] args) {
    PLoad pLoad = new PLoad();
}

输出结果

PLoad static
MethodLoad static 
PLoad class
PLoad Construtor

2). 创建子类

main()方法

public static void main(String[] args) {
    MethodLoad pLoad = new MethodLoad();
}

输出结果

PLoad static
MethodLoad static 
PLoad class
PLoad Construtor
MethodLoad class
MethodLoad Construtor

2. ArrayList、LinkedList、Vector、Stack

ArrayList、Vector :底层用数组, 如果数据多为取数据,遍历数据就用

  • ArrayList: 线程不安全,适用于单线程,效率更高
  • Vector: 线程安全,一般用于多线程,效率比 ArrayList 低
  • 时间复杂度
    • 取、遍历:O(1)
    • 插入或者删除:O(N)

LinkedList: 底层用链表实现,如果数据多为添加、删除、更改就采用

  • 时间复杂度
    • 取、遍历:O(N)
    • 插入或者删除:O(1)

Stack: 先进后出

  • FIFO

3.线程的创建方式?

  1. 继承Thread
  2. 实现Runnable
    1. 一般来说这种比较好
  3. 线程池中取

4. 什么是线程池?为什么要使用线程池?线程池的原理和作用?

对象的创建和销毁比较耗时间,所以就通过池的技术,使得线程对象一早被创建好,用完就入回线程池,省时间.

**在什么情况下使用线程池? **

  1. 单个任务处理的时间比较短
  2. 将需处理的任务的数量大

**使用线程池的好处: **

  1. 减少在创建和销毁线程上所花的时间以及系统资源的开销
  2. 如不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存以及”过度切换”。

线程池原理

JAVA

1. i++,++i 问题

public class ChangeI {
    public static void main(String[] args) {
        int i = 0;
        fun(i);
        i = i++;
        System.out.println(i);      //0
    }
    static void fun(int i) {
        i++;
    }
}

2. String,StringBuffer,StringBuilder区别、应用场景

String: String 是不可变的对象,每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象。经常改变内容的字符串最好不要用 String。

StringBuffer: 字符串缓冲,字符串的字符追加或插入到字符串缓冲区中,线程安全,多线程使用

StringBuilder: 字符串缓冲,字符串的字符追加或插入到字符串缓冲区中,线程不安全,单线程使用,效率更高

3. 什么是数组、链表?原理、时间复杂度、什么时候用?

4. 单例模式有哪几种?为什么要用?

单例模式有几种,可以看这里

  • 资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如上述中的日志文件,应用配置。
  • 控制资源的情况下,方便资源之间的互相通信。如线程池等。
  • 能避免实例重复创建、较节约内存
  • 应用于避免存在多个实例引起程序逻辑错误的场合

5. volatile 关键字的作用?

6. HashMap ,HashSet 底层结构和其原理

7.HashMap与HashSet区别、HashMap与TreeMap区别

8.ConcurrentHashMap 是做什么的?为什么要用这个而不是HashMap?

并发的HashMap

9. Overload、Override、Hide的区别?

10. 接口,抽象类的区别

  1. 抽象类可以有构造方法,接口中不能有构造方法。
  2. 抽象类中可以有普通成员变量,接口中没有普通成员变量。
  3. 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
  4. 一个类可以实现多个接口,但只能继承一个抽象类。

11. try-catch-finally, return 顺序

    //result = 2
    static int post() {
        int i = 0;
        try {
            int j = 1 / 0;
            return ++i;
        } catch (Exception e) {
            return ++i;
        } finally {
            return ++i;
        }
    }

12. Object的hash()、equal()重写

13. Java的NIO跟BIO是什么? 有什么用?

Java Web

1. 什么是 J2EE?

J2EE是一套不同于传统开发的技术构造,包涵了很多组件,用来简化开发和部署,提高可移植性、安全性。

2. JSTL有哪些标签

  • c
  • fmt

3. JSP有哪些内置对象

  • request: 客户端请求,来自POST、GET请求的参数都通过它
  • response: 响应客户端请求
  • session: 客户端与服务器的一次会话,从客户端连接到服务器开始,到断开连接结束
  • out : 向客户端输出内容
  • page : JSP页面本身,当前页面
  • application : 用于用户间数据共享,全局唯一,从服务器启动到关闭
  • exception : 服务器的异常信息
  • pageContext : JSP页面内的所有对象和名字空间的访问
  • config : Servlet配置信息

4.MVC、SpringMVC的了解,使用Spring的原因?

5.用到哪些Spring的技术

6.AOP是做什么的?怎么理解切入点?你在哪些在地方用到了AOP?通知Advice等

7.AOP怎么实现日志监控的?

8.Hibernate怎么样批量插入,你这样做的优点和缺点是什么?

对于这个问题,如果数据量很大,用Hibernate框架插入不仅慢,而且还可能内存不够.所以我还是直接使用JDBC直接操作数据库了.
优点: 快
缺点:麻烦,要用SQL.

Configuration configure = new Configuration().configure();
SessionFactory sessionFactory = configure.buildSessionFactory();
Session session= sessionFactory.openSession();
Transaction tran= session.beginTransaction();
session.setCacheMode(CacheMode.IGNORE);
PreparedStatement stmt; 
try { 
    stmt = session.connection()
                .prepareStatement("INSERT INTO EVENTS(EVENT_DATE, title) VALUES(?,?)"); 
    for (int i = 0; i < 200000; i++) { 
    stmt.setTimestamp(1, new Timestamp(new Date().getTime())); 
    stmt.setString(2, "Title["+i+"]"); 
    stmt.addBatch(); 
} 
stmt.executeBatch(); 
} catch (SQLException e) { 
    e.printStackTrace(); 
    tran.rollback(); 
} 
tran.commit(); 
session.close(); 

9.Hibernate的一级缓存和二级缓存的区别?

  1. 作用域不同
    一级缓存: session(线程)缓存,只能在当前session前用,同一个session里缓存才起作用。当这个session关闭后这个缓存就不存在了
    二级缓存:SessionFactory(进程或集群)缓存,同一个SessionFactory生产出来的session都有效。单例的形式存在,所以在整个应用程序的生命周期里,sessionfactory会一直存在。既二级缓存也一直存在直到关闭应用程序。

使用情况
很少被修改的数据
不是很重要的数据,允许出现偶尔并发的数据
不会被并发访问的数据

二级缓存分为4种

  • 类缓存
  • 集合缓存
  • 查询缓存
  • 时间戳缓存

关于一级缓存和二级缓存的更多详情请看

10.Mybatis的#和$的区别

JAVA 内存

1.内存模型,堆、栈、静态方法区

2. 什么是垃圾回收?回收什么对象?什么时候回收?回收算法是什么?

算法

1. 手写快速排序法

/**
 * 递归与分冶
 */
private void quickSort(int[] arr, int left, int right) {
  if (left < right) {
    int pos = findQuickSortPosition(arr, left, right);
    quickSort(arr, left, pos - 1);
    quickSort(arr, pos + 1, right);
  }
}

private int findQuickSortPosition(int[] arr, int left, int right) {
  int tem = arr[left];
  while (left < right) {
    while (left < right && arr[right] >= tem)
      right--;
    arr[left] = arr[right];
    while (left < right && arr[left] <= tem)
      left++;
    arr[right] = arr[left];
  }
  arr[left] = tem;
  return left;
}

2.数据结构有哪些?

  • 数组
  • 链表
  • 队列

3.图的最短路径怎么算?

4. 树有什么特点?平衡二叉树的特点是什么?

数据库

1.什么是事务?

事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元

2. MySQL事务跟Oracle事物有什么区别?

Oracle事务: 隐式开启事务

MySQL事物: 必须显式开启,要用 start transaction 开启

3. MySQL的存储引擎有哪些?它们的区别是什么?

innoDB:

  • 支持数据库事务和外键等
  • 不扶持FULLTEXT类型
  • 不保存表的具体行数
  • 写、修改、删除 操作多时用

MyiSam:

  • 不支持数据库事务
  • 支持FULLTEXT类型
  • 保存表的具体行数,用的时候直接读就可以
  • 强调性能,速度更快
  • 读,查询 操作多用

4. MySQL数据库跟Oracle数据库有什么区别?

  1. Oracle是大型数据库,MySQL是中小型数据库。
  2. Oracle支持大并发,在访问量
  3. MySQL有AUTO_INCREAMENT,Oracle没有这个属性,但是有ROWNUM
  4. Oracle是提供了非常丰富的功能,而MySQL只提供了基本的关系型数据库的功

5. Oracle中函数与过程的区别?还有包

函数

  • 只有一个返回值
  • 可在SQL语句中直接调用

过程

  • 没有返回值,通过参数指定返回值,in, out , inout,类型,out类型相当于返回值,可以有多个
  • 不能在SQL运行,只能通过 call 命令调用

  • 包可以封装过程函数,包类似JAVA中实现接口的类。

6.Oracle的热备份与冷备份,有多少种备份模式?

JavaScript

1. JavaScript怎么体现封装、多态、继承

这里可以理解更多

封装 : 闭包就是函数里面包函数,由于prototype是通过函数名,指到其他内存空间独立的函数体,因此没法取得闭包的作用域变量。

多态 : JS 天生支持多态

继承: 原型,功能是将对象的属性延续下去通过call()方法

2. Jquery 有哪些选择器

1. $("*"),所有元素
2. $("#abc"),ID选择器
3. $(".abc"),类选择器
4. $("p"),标签名选择器,所有的p

3. 画表格

<table>
  <tr>
    <td rowspan=2 colspan=4></td>
  </tr>
</table>

4. ajax请求网络数据

ajax请求网络很少用,下面写一种我常用的JavaScript网络请求

fetch('http://localhost/?id=1')
.then(function(res){
  return res.json();
})
.then(function(res){
  console.log(res);
})
.catch(function(err){
  console.log(err);
});

网络

1. TCP/UDP区别,TCP/IP的3次握手,4次分手

图片来源网络

操作系统

1. 什么是线程?什么是进程?

BLOG

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,841评论 5 472
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,415评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,904评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,051评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,055评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,255评论 1 278
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,729评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,377评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,517评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,420评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,467评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,144评论 3 317
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,735评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,812评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,029评论 1 256
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,528评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,126评论 2 341

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,537评论 18 399
  • 一. Java基础部分.................................................
    wy_sure阅读 3,784评论 0 11
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,161评论 11 349
  • 坚持原创分享第120天 小画书全是儿时的回忆 那一捶一凿,那一车一石,难以想象是怎样的艰难。 我和你形影不离 一片...
    我是一只没有脚的鸟阅读 168评论 0 0
  • 鸿宾哥比我大十七岁,过了年就五十多岁了,我们两个是忘年交。已经想不起来怎么就成了好朋友了,反正是只要我回老家我们...
    舜子的简单日记阅读 558评论 0 2