3 年工作教训的 Java 程序员应该具备哪些技术能力,这可能是 Java 程序员们比较关心的内容。我这里要阐明一下,以下列举的内容不是都要会的货色,然而你把握得越多,最终能失去的评估、拿到的薪水势必也越高。
1、根本语法
这包含 static、final、transient 等关键字的作用,foreach 循环的原理等等。明天面试我问你 static 关键字有哪些作 用,如果你答出 static 润饰变量、润饰办法我会认为你合格,答出动态块,我会认为你不错,答出动态外部类我会认为你很好,答出动态导包我会对你很满 意,因为能看出你十分热衷钻研技术。
最深刻的一次,我记得面试官间接问到了我 Volatile 关 键字的底层实现原理 (顺便插一句,面试和被面试自身就是绝对的,面试官能问这个问题同时也让面试者感觉到面试官也是一个青睐钻研技术的人,减少了面试者对 公司的好感,我最终抉择的就是问了这个问题的公司),不要感觉这太求全责备了—- 越简略的问题越能看出一个人的程度,他人对你技术的考量绝大多数都是以深度优先、广度次之为规范的,切记。
2、汇合
十分重要,也是必问的内容。基本上就是 List、Map、Set,问的是各种实现类的底层实现原理,实现类的优缺点。
汇合要把握的是 ArrayList、LinkedList、Hashtable、HashMap、ConcurrentHashMap、HashSet 的实现原理,能流畅作答,当然能把握 CopyOnWrite 容器和 Queue 是再好不过的了。另外多说一 句,ConcurrentHashMap 的问题在面试中问得特地多,大略是因为这个类能够衍生出十分多的问题,对于 ConcurrentHashMap,我给网友敌人们提供三点答复或者是钻研方向:
(1)ConcurrentHashMap 的锁分段技术。
(2)ConcurrentHashMap 的读是否要加锁,为什么。
(3)ConcurrentHashMap 的迭代器是强一致性的迭代器还是弱一致性的迭代器。
3、框架
陈词滥调,面试必问的货色。一般来说会问你一下你们我的项目中应用的框架,而后给你一些场景问你用框架怎么做,比方我想要在 Spring 初始化 bean 的时候做一些事件该怎么做、想要在 bean 销毁的时候做一些事件该怎么做、MyBatis 中 $ 和 #的区别等等,这些都比拟理论了,平时积攒得好、有多学习 框架的应用细节天然都不成问题。
如果下面你的问题答得好,面试官往往会深刻地问一些框架的实现原理。问得最多的就是 Spring AOP 的实现原理,当然这个很简略啦,两句话就搞定的的事儿,即便你不会筹备一下就好了。我遇到的最变态的是让我画一下 Spring 的 Bean 工厂实 现的 UML 图,当然面对这样一个有深度的问题,我是相对答不进去的 /(ㄒ o ㄒ)/~~
4、数据库
数据库十有八九也都会问到。一些根本的像和 all 的区别、left join、几种索引及其区别就不谈了,比拟重要的就是数据库性能的优化,如果对于数据库的性能优化无所不通,那么有工夫,还是倡议你在面试前花一两天专门 把 SQL 根底和 SQL 优化的内容筹备一下。
不过数据库倒是不必放心,一家公司往往有很多部门,如果你对数据库不相熟而根本技术又十分好,九成都是会要你的,预计会先把你放到对数据库应用不是要求十分高的部门锤炼一下。
5、Web 方面的一些问题
Java 次要面向 Web 端,因而 Web 的一些问题也是必问的。
我碰到过问得最多的两个问题是:
谈谈分布式 Session 的几种实现形式。
罕用的四种能答出来天然是让面试官十分称心的。
另外一个常问的问题是:讲一下 Session 和 Cookie 的区别和分割以及 Session 的实现原理。这两个问题之外,web.xml 外面的内容是重点,Filter、Servlet、Listener,不说对它们的实现原理一清二楚吧,至多能对它们的应用知根知底。另外,一些细节的方面比方 get/post 的区别、forward/ 重定向的区别、HTTPS 的实现原理也都可能会被考查到。
6、数据结构和算法剖析
数据结构和算法剖析,对于一名程序员来说,会比不会好而且在工作中相对能派上用场。数组、链表是根底,栈和队列深刻一些但也不难,树挺重要的,比拟 重要的树 AVL 树、红黑树,能够不理解它们的具体实现,然而要晓得什么是二叉查找树、什么是均衡树,AVL 树和红黑树的区别。记得某次面试,某个面试官和 我聊到了数据库的索引,他问我:你晓得索引应用的是哪种数据结构实现吗?
我答到用的 Hash 表吧,答错。他又问,你晓得为什么要应用树吗? 我答到因为 Hash 表可能会呈现比拟多的抵触,在千万甚至是上亿级别的数据面 前,会大大增加查找的工夫复杂度。而树比较稳定,根本保障最多二三十次就能找到想要的数据,对方说不齐全对,最初咱们还是交换了一下这个问题,我也明确了 为什么要应用树,这里不说,网友敌人们感觉索引为什么要应用树来实现呢?
至于算法剖析,不会、不想钻研就算了,记得某次面试对方问我,Collections.sort 办法应用的是哪种排序办法,额,吐血三升。当然为了 显示我的博学,对算法剖析也有肯定的钻研 (⊙﹏⊙)b,我还是硬着头皮说了一句可能是冒泡排序吧。当然答案必定不是,有趣味的网友敌人们能够去看一下 Collections.sort 办法的源代码,用的是一种叫做 TimSort 的排序法,也就是增强型的归并排序法。
7、Java 虚拟机
出乎我的预料,Java 虚拟机应该是很重要的一块内容,后果在这几家公司中被问到的概率简直为 0。要晓得,我去年可是花了大量的工夫去钻研 Java 虚拟机的,光周志明老师的《深刻了解 Java 虚拟机:JVM 高级个性与最佳实际》,我就读了不下五遍。
言归正传,尽管 Java 虚拟机没问到,但我感觉还是有必要钻研的,我就简略地列一个提纲吧,谈谈 Java 虚拟机中比拟重要的内容:
(1)Java 虚拟机的内存布局
(2)GC 算法及几种垃圾收集器
(3) 类加载机制,也就是双亲委派模型
(4)Java 内存模型
(5)happens-before 规定
(6)volatile 关键字应用规定
兴许面试无用,但在走向大牛的路上,不可不会。
8、设计模式
原本认为蛮重要的一块内容,后果只在阿里巴巴 B2B 事业部面试的时候被问了一次,过后问的是装璜器模式。
当然咱们不能这么功利,为了面试而学习,设计模式在工作中还是十分重要、十分有用的,23 种设计模式中重点钻研罕用的十来种就能够了,面试中对于设计模式的问答次要是三个方向:
(1) 你的我的项目中用到了哪些设计模式,如何应用。
(2) 晓得罕用设计模式的优缺点。
(3) 能画出罕用设计模式的 UML 图。
9、多线程
这也是必问的一块了。因为三年工作教训,所以基本上不会再问你怎么实现多线程了,会问得深刻一些比如说 Thread 和 Runnable 的区别和联 系、屡次 start 一个线程会怎么样、线程有哪些状态。当然这只是最根本的,出其不意地,几次面试简直都被同时问到了一个问题,问法不尽相同。
总结起来是 这么一个意思:
如果有 Thread1、Thread2、ThreaD3、Thread4 四条线程别离统计 C、D、E、F 四个盘的大小,所有线程都统计结束交给 Thread5 线程去做汇总,该当如何实现?
聪慧的网友们对这个问题是否有答案呢? 不难,java.util.concurrent 下就有现成的类能够应用。
另外,线程池也是比拟常问的一块,罕用的线程池有几种? 这几种线程池之间有什么区别和分割? 线程池的实现原理是怎么样的? 理论一些的,会给你一些具体的场景,让你答复这种场景该应用什么样的线程池比拟适合。
最初,尽管这次面试问得不多,然而多线程同步、锁这块也是重点。synchronized 和 ReentrantLock 的区别、synchronized 锁一般办法和锁静态方法、死锁的原理及排查办法等等。
10、JDK 源码
要想拿高工资,JDK 源码不可不读。下面的内容可能还和具体场景分割起来,JDK 源码就是实打实地看你平时是不是爱钻研了。我面试过程中被问了不 少 JDK 源码的问题,其中最刁钻的一个问了我,String 的 hashCode() 办法是怎么实现的,幸好我平时 String 源代码看得多,答了个大 概。
JDK 源码其实没什么好总结的,纯正看集体,总结一下比拟重要的源码:
(1)List、Map、Set 实现类的源代码
(2)ReentrantLock、AQS 的源代码
(3)AtomicInteger 的实现原理,次要能说分明 CAS 机制并且 AtomicInteger 是如何利用 CAS 机制实现的
(4) 线程池的实现原理
(5)Object 类中的办法以及每个办法的作用
这些其实要求蛮高的,我去年一整年根本把 JDK 中重要类的源代码钻研了个遍,真的破费工夫、破费精力,当然回头看,是值得的—- 不仅仅是为了应酬面试。
最初,如果有趣味有工夫,倡议学习、钻研一下 SOA 和 RPC,面向服务体系,大型分布式架构必备,救命良方、包治百病、屡试不爽。
11、倡议
每个阶段都应该有每个阶段的指标,无论生存上,学习上或工作上,咱们都须要定指标,这样做起事件来才有方向才有能源哦;而且做起事件来有节奏,不乱套。如果不设定指标,你会感觉本人每天不知要干些什么;不知先做什么,后做什么;人也会感觉懒惰。
感觉本文的内容对你有帮忙的话,能够关注我一下,另外顺便给大家举荐一个 java 交流学习群:3907814,外面会分享一些零根底根底到资深架构师录制的视频录像:有 Spring,MyBatis,Netty 源码剖析,高并发、高性能、分布式、微服务架构的原理,JVM 性能优化这些成为架构师必备的常识体系。还能支付收费的学习资源,文章中列出的这些常识脑图也是从群里分享整理出来的。