考察点:
1.基本概念和基本原理
2.实现方式与使用场景
3.经常用到的知识点
4.实际应用中容易犯错的点
5.与面试的岗位相关的知识点
加分项:
1.知识点与具体业务场景结合
2.以反例来描述实际场景中误用的危害
3.与知识点相关的优化点
4.与知识点相关的最新技术趋势
5.如果很了解某个知识点,可以尽量回答得深入
1.关于面向对象
Java面向对象编程是一种思想,是现实生活中实际事务的一个抽象化的模型。这个模型包含了该事务的具体属性。
三大特性:封装、继承、多态。(这里不具体介绍,网上很多相关的文章自行搜索)
延伸问题:
- 不同的访问权限控制符表示的访问权限
- super和this关键字的用法
- 介绍一下final关键字
- 介绍一下override(重写)和overload(重载)区别,为什么不能从返回值区分是否是重载方法
- 重载发生在同一个类中,重写发生在子类中。
- B继承A,并重写test方法,A a = new B(); a.test()是调用A的实现还是B的实现
- 方法调用优先级:子类构造函数(O) > 父类构造函数(O) > 子类重写的函数A > 父类函数A
- 父类引用变量指向子类实例对象时,通过该引用变量只能调用父类中已经存在的方法或变量,否则只能通过强制转化为子类才能调用子类中独有的变量和方法
- 是否可以继承多个类,是否可以实现多个接口
2.什么是变量和常量?成员变量和局部变量?介绍一下静态变量和实例变量
3.八种基本数据类型
整型:byte、short、int、long,浮点型:float、double,字符型:char,布尔型:boolean
延伸问题:
- 范围从小到大:byte->short->int->long->float->double
- 介绍类型转换:自动转换和强制转换,表达式类型的自动提升
- 强制转换的情况:范围小>范围大,子类>父类
- 浮点类型是否可以直接用"=="比较,如果不能,应该怎么进行比较
- char类型是否可以储存汉字
- 对应的包装类型
- 介绍一下自动装箱与拆箱
- Integer和int在自动装箱拆箱时,使用"=="比较会出现的问题。包装类的缓存。
- 为什么对象比较相同时,使用equals方法,不用"=="
4.常用字符串类 String、StringBuilder、StringBuffer
- 执行速度方面,StringBuilder大于StringBuffer大于String ,String最慢的原因:String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦被创建后该对象是不可更改的,但后两者的对象是变量,是可以更改的
- 线程安全:StringBuilder是线程不安全的,而StringBuffer是线程安全的(StringBuffer中很多方法带有synchronized关键字)–同步关键字
5.Java程序初始化的顺序是什么样子的?
一般遵循三个原则:
- 1.静态优先于非静态
- 2.父类优先于子类
- 3.字段优先于代码块,代码块优先于构造函数
父类静态字段初始化
父类静态代码块
子类静态字段初始化
子类静态代码块
父类普通字段初始化
父类构造代码块({//代码}) –优先于构造函数执行
父类构造函数
子类普通字段初始化
子类构造代码块
子类构造函数
很明显的看出,static字段,代码块的在执行顺序优先于非static、代码块,这是因为静态域是属于类的,在类加载后就一直存在,而普通域则需要创建对象才能访问。而在创建对象时,要先加载父类,然后再加载子类,因此父类的静态字段初始化和静态代码块执行优先于子类
6.Java中值的传递方式,传递基本类型参数和传递对象参数的不同
7.在不知道某个类的类型的情况下,将类强制转化为另一个类,即:(type)entity,将entity强制转化为type类型,怎样才能保证entity本来就是type类型避免转化发生异常?
在强制转化前使用instanceof判断entity是否是type类型。如果是再继续强制转化。用法:boolean result = object instanceof class
8.使用abstract修饰类、方法。
延伸问题
- 接口和抽象类对比
9.内部类、匿名内部类、静态内部类、内部接口
10.强引用、弱引用、软引用、虚引用,https://www.cnblogs.com/yw-ah/p/5830458.html
11.Java常见的集合
基于List接口的有:ArrayList、LinkedList、Vector(子类Stack)
基于Set接口的有:HashSet、LinkedHashSet、TreeSet
基于Map的有:HashMap、LinkedHashMap、TreeMap、Hashtable(子类Properties经常使用)
延伸问题:
- 集合中的元素可以使用工具类Collections.sort()方法进行比较,sort方法是重载的方法,一种要求比较的元素实现了Comparable接口,另一种是要求传入实现了Comparator接口的比较器类
- 比较深入的集合问题:https://www.jianshu.com/p/939b8a672070
12. Java泛型是什么?
- Java是通过什么方式实现泛型的?什么是类型擦除?
- Java中泛型有哪几种使用方式?泛型类、泛型接口、泛型方法,写一下他们各自怎么实现?
- 什么是限定通配符和非限定通配符?说一下泛型中上下边界是什么意思换句话说List<? extends T>和List <? super T>之间有什么区别 ?
- 可以把List<String>传递给一个接受List<Object>参数的方法吗?
- Java中List<Object>和原始类型List之间的区别?List<String>和原始类型List之间的区别?
13. IO流的分类,根据流向分为输入流和输出流,根据类型分为字节流和字符流
- 经常使用的输入流和输出流(字节流和字符流)有哪些
14.通过try-catch语法来抓取异常和处理异常
- 异常分为运行时异常和编译异常?常见的运行时异常有空指针异常,数组越界异常,非法参数异常等等,运行时异常根据具体程序运行时的情况,有可能会出现,有可能不会出现
- 介绍finally关键字
15.多线程
16.反射是什么?
- 反射可以用来做动态代理
- 通过反射是否可以拿到私有属性和方法?可以,通过getDeclaredField和getDeclaredMethod