近期在换工作中,参加了形形色色的公司的面试,现在将聚焦到面试的具体内容上。在这里需要强调的是,我参与的面试是面向中高级开发的工程师;对于某一个问题的展开往往都是由浅到深,以及个人在领域中的应用的理解。这里我没有给出答案。当然面试的时候面试官处理固定的会提问的一些东西外,简历中的技能栏可能会是提问的重点区域。
以下是我总结的可能会问到的问题,但是每一个问题都可以继续深挖三到四层,所以,如果你想拿到高薪和去大厂,那么你必须静下心去研究这些东西。网上百度到的答案估计只能让你成为一个初中级的工程师。所以,想换工作的朋友可以先去准备一下。
java基础部分:
数据结构与算法:
- 在这一部分中除了要了解常用的java数据结构和原理外,还需要知道java集合框架原理。
- 并且这一部分需要结合并发来回答,确保线程安全以及原子性操作等。常会提问到的如:队列和栈的相互实现;树的遍历(前序遍历和后序遍历),这里不一定是二叉树;HashMap的原理等。在数据结构中需要尤为注意的是哈希表。
- 在算法部分:往往需要考虑到时间复杂度或者空间复杂度,面试官往往要求你将复杂度降到最低,有事什么需要让你考虑内存空间问题;比如考察排序算法、以及排序算法的变形(去数组中最大的前n个值、奇偶分别放在数组的左右两侧等)
java并发编程:(java.util.concurrent;java.util.concurrent.atomic;java.util.concurrent.locks)
- java并发编程开发有很多规范和实现方式,最基础的要知道如何自定义多线程。如何编写线程安全的单例模式。
- 需要熟悉java并发编程中java提供的工具类。如上所示。
- 并发编程中如何加锁、死锁问题的解决,都是考察的范围。
- 线程间通信、原子类、线程同步。
- 线程的内存模型。
- 线程池的使用
java8新特性:
流、lambda表达式、函数式编程等新特性需要熟悉。
其他基础问题:
- 涉及到“==”与equal()的区别
- 代码块、静态块、构造块、静态变量的执行顺序问题
- 运行时异常与一般异常的异同
- jdk的代理
JVM:
java的内存模型、回收机制和算法、内存管理以及调试工具等。这一部分建议不要轻易去说自己熟悉;因为jvm调优问题是一个很高大上的问题。
数据库:
数据库部分的话,问题并不会太深入;因为作为一个java程序员并不太需要关注DB上的问题,但是你需要知道数据库的索引、视图、以及SQL调优的一些方法。
javaweb框架:
- spring3/4/5的异同,新增功能;
- AOP实现原理、IOC实现原理;
- 设计模式
- 有没有研读过框架源码
- hibernate与mybatis的异同;
- 什么是JPA/SPRINGJPA /Hibernate的区别;
- mybatis的实现原理及源码
- 聊一个自己最熟悉或者擅长的框架,从原理源码分析、到跟其他相同框架的比较、到实际应用中遇到的问题的分析。
- 微服务框架和分布式技术。
- 中间件技术和缓存技术。
相关文章
暂无评论...