这次面试最大的收获就是深刻认识到项目经历的重要性。知道是网上的开源项目后面试官就对你的项目没有兴趣了,后面的问题也不涉及项目里的东西。面试阶段的问题我几乎是全中的,然后算法题也ok,但是第二天面试官回复,还是因为项目实际经验有欠缺面试未通过。
所以接下来项目会是准备的重头戏。
老规矩,上题!
1.接口有什么作用?
接口是一种规范,可以快速分离工作内容,比如你需要实现某个功能,但精力又不允许自己去写底层,那就可以写一个接口交给其他成员去实现。
2.遇见过哪些异常?
IO、空指针、数组越界、栈溢出、Arithmetic、ClassNotFound、ClassCast…balabala
3.这些异常有什么区别吗?
聊了聊异常的体系架构。
4.如何处理异常?
在方法签名处声明可能抛出的异常;try-catch捕获异常;throw手动抛出异常。
5.对Throwable类的理解?
所有异常类的超类,子类包括Error和Exception。(然后我觉得他可能想让我自己说出下面那个问题?)
6.什么情况下捕获Throwable?
尽量不要捕获 Throwable 类,如果在catch中使用它,不仅会捕获异常,还会捕获错误。
7.使用过哪些集合?(果然集合很重要)
ArrayList、HashSet、HashMap一定要说的,其他的看你想怎么引导面试官吧。
8.ArrayList和LinkedList的区别?
ArrayList:底层是数组;随机访问效率更高。
LinkedList:底层是双向链表;非首尾的增删操作效率更高;要存取前驱和后继,更占内存。
9.ArrayList实际应用举例?
(自己想的也不知道对不对)读取文件的时候,可以把每一行读成一个字符串,因为我们不知道总共要读几行,所以使用ArrayList进行存储。
10.想要快速地查找,又希望是有序的,使用哪种集合?
LinkedHashMap,默认为插入顺序,可以设置为访问顺序;TreeMap,默认为升序,可以定制排序。
11.聊一聊HashMap、HashTable、ConcurrentHashMap?
线程安全的角度、效率的角度、null值的角度、底层和扩容的角度(内容太多就不写了)
12.用过线程池吗?
又一次被问到了线程池,感觉确实得看一下了。
这里只简单说了下池化技术的优势。
13.什么时候会进行垃圾回收?
垃圾回收是在内存中存在没有引用的对象或超过作用域的对象时进行的。
14.聊一聊Java的内存区域?
堆:存对象;
栈:存方法和局部变量;
方法区:类加载信息、常量、静态变量,1.8以后转移到元空间;
常量池:字面量、符号引用,1.7以后从方法区移到堆中。
15.实际开发中使用AOP的场景?为什么要用AOP?
比如事务;可以将非业务代码与业务逻辑代码分离开,降低耦合,实现代码的重用,减少代码量。
16.哪些注解可以将类封装到Spring的bean中?
@Component、@Depository、@Service、@Controller
17.注入bean的方式?
setter方法注入、构造方法注入、静态工厂注入、实例工厂注入
18.算法题:给你一个int数组和一个int类型值,判断数组中是否存在两个数的和为该值?
非常简单的一道算法题,为了求稳我先用两层for循环写了一个O(n²)的解法,然后又用双指针写了另一种。
欢迎关注公众号“哦哼李”,这里不仅有程序员,还有程序员写的故事~