【面经】中兴java一面凉经

中兴面经

1、出示身份证
2、自我介绍
3、本科成绩排名、硕士成绩排名
4、java的代码量

5、抽象类和接口的差别,使用场景
  抽象类要被子类继承,接口要被类实现。
  接口只能做方法声明,抽象类中可以作方法声明,也可以做方法实现。
  接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
  接口是设计的结果,抽象类是重构的结果。
  抽象类和接口都是用来抽象具体对象的,但是接口的抽象级别最高。
  抽象类可以有具体的方法和属性,接口只能有抽象方法和不可变常量。
  抽象类主要用来抽象类别,接口主要用来抽象功能。

6、扩展都是用父类来做吗

7、为了避免类太臃肿,用聚合和组合,这两个方式怎么用?
  聚合(整体和部分可以分开)
  组合(整体和部分不能分开)
  聚合是一种弱关联关系;组合是一种强关联关系。
  在聚合关系中的两个类(或实体)的生命周期是不同步;但,在组合关系中的两个类(或实体)的生命周期是同步的。

8、wait和sleep的差异
  两者都可以暂停线程的执行。
  sleep() 方法没有释放锁,而 wait() 方法释放了锁 。
  wait() 通常被用于线程间交互/通信,sleep()通常被用于暂停执行。
  sleep() 是 Thread 类的静态本地方法,wait() 则是 Object 类的本地方法。
  wait() 方法被调用后,线程不会自动苏醒,需要别的线程调用同一个对象上的 notify()或者 notifyAll() 方法。sleep()方法执行完成后,线程会自动苏醒,或者也可以使用 wait(long timeout) 超时后线程会自动苏醒。

9、线程自己写过线程池吗
  使用线程池的好处:
  降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
  提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。
  提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。
  execute()方法用于提交不需要返回值的任务,所以无法判断任务是否被线程池执行成功与否;
  submit()方法用于提交需要返回值的任务。线程池会返回一个 Future 类型的对象,通过这个 Future 对象可以判断任务是否执行成功。

10、final和abstract能一起用吗
  abstract与final不能同时使用,因为abstract的作用是定义抽象方法让子类继承重写的,而final修饰的方法是可以被子类继承但是不能重写。

11、这俩关键字都是啥
12、初始化字符串用字面量还是new String()
13、差异在哪
  String 类中使用 final 关键字修饰字符数组来保存字符串
14、字面量的String存在什么问题?

15、字面量String存在哪个空间?
  字符串常量池

16、里式替换、依赖倒置
  里式替换:派生类(子类)对象可以在程式中代替其基类(超类)对象
  依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。

17、框架为什么要设置ioc?目的是什么
18、框架是怎么实现ioc?
19、框架的底层实现依赖的是什么?
20、高度是k的二叉树最多有多少节点?最少k,最多 2^(k-1)

21、数组和链表的区别?
22、这俩在内存开销上的差异?
  链表存储了指针,开销更大

23、普通的线性搜索和二分查找的优势?
  线性查找可以针对任何数组,将数组中的每项依次遍历出来之后,与所要查找项对比。消耗时间也是不规律的,可能查找项处于数组的第一位,也可能处于数组的最后一位。还有可能数组中完全不存在需要查找的项目。O(n)
  二分查找法,针对有序数组使用。因为数组已经有序排列,可以通过将数组从中间分割,将中间项与所需查找项对比;然后再根据对比结果,再次向上或者向下,寻找中间项对比,直至完成查找。O(logN)

24、有什么offer?
25、找工作看重什么?
26、有对象没?对象工作定了吗?同一级吗?
27、获取稳定和开发的工作会优先考虑吗?
28、目标薪资?
29、反问
(20分钟 结束)

posted @ 2022-09-07 12:42  快乐男孩小王  阅读(82)  评论(0编辑  收藏  举报