论文交了没事分享一下去年的面经
参加了中兴捧月免笔试
一面凉经:
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分钟 结束)
#中兴#