Java基础

考察点:

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章