写在后面
明天分享的是一位5年工作教训的Java工程师在帝都的面试经验总结,看看这些互联网公司都爱问些什么题,心愿对大家的面试有指导意义。
从事Java开发也有5年教训了,4月初本人的开启面试经验之旅,前后20天左右,主面互联网公司,一二线大公司或者是融资中的守业公司都面试过,拿了一些offer,其中包含奇虎360等
首先不同面试官面试格调肯定不同,这里是我总结这些天面试Java开发过程中的大多数问题,综合分类有Java根底,框架,多线程,网络通信,数据库以及设计模式,算法等几个模块。
一名3年工作教训的Java程序员应该具备的技能,这可能是Java程序员们比较关心的内容。我这里要阐明一下,以下列举的内容不是都要会的货色----然而如果你把握得越多,最终能失去的评估、拿到的薪水势必也越高。
一、Java根底
- String类为什么是final的。
- HashMap的源码,实现原理,底层构造。
- 反射中,Class.forName和classloader的区别
- session和cookie的区别和分割,session的生命周期,多个服务部署时session治理。
- Java中的队列都有哪些,有什么区别。
- Java的内存模型以及GC算法
- Java数组和链表两种构造的操作效率,在哪些状况下(从结尾开始,从结尾开始,从两头开始),哪些操作(插入,查找,删除)的效率高
- Java内存泄露的问题考察定位:jmap,jstack的应用等等
二、多线程
这也是必问的一块了。因为三年工作教训,所以基本上不会再问你怎么实现多线程了,会问得深刻一些比如说Thread和Runnable的区别和分割、屡次start一个线程会怎么样、线程有哪些状态。当然这只是最根本的,出其不意地,几次面试简直都被同时问到了一个问题,问法不尽相同,总结起来是这么一个意思:
如果有Thread1、Thread2、Thread3、Thread4四条线程别离统计C、D、E、F四个盘的大小,所有线程都统计结束交给Thread5线程去做汇总,该当如何实现?
聪慧的网友们对这个问题是否有答案呢?不难,java.util.concurrent下就有现成的类能够应用。
另外,线程池也是比拟常问的一块,罕用的线程池有几种?这几种线程池之间有什么区别和分割?线程池的实现原理是怎么样的?理论一些的,会给你一些具体的场景,让你答复这种场景该应用什么样的线程池比拟适合。
最初,尽管这次面试问得不多,然而多线程同步、锁这块也是重点。
synchronized和ReentrantLock的区别、synchronized锁一般办法和锁静态方法、死锁的原理及排查办法等等,对于多线程,我在之前有些过文章总结过多线程,并发编程的面试问题!
三、IO
IO分为File IO和Socket IO,File IO基本上是不会问的,问也问不出什么来,平时会用就好了,另外记得File IO都是阻塞IO。
Socket IO是比拟重要的一块,要搞懂的是阻塞/非阻塞的区别、同步/异步的区别,借此了解阻塞IO、非阻塞IO、多路复用IO、异步IO这四种IO模型,Socket IO如何和这四种模型相关联。
这是根本一些的,深刻一些的话,就会问NIO的原理、NIO属于哪种IO模型、NIO的三大组成等等,这有些难,过后我也是钻研了很久才搞懂NIO。提一句,NIO并不是严格意义上的非阻塞IO而应该属于多路复用IO,面试答复的时候要留神这个细节,讲到NIO会阻塞在Selector的select办法上会减少面试官对你的好感。
如果用过Netty,可能会问一些Netty的货色,毕竟这个框架根本属于以后最好的NIO框架了(Mina其实也不错,不过总体来说还是比不上Netty的),大多数互联网公司也都在用Netty。
四、JDK源码
要想拿高工资,JDK源码不可不读。下面的内容可能还和具体场景分割起来,JDK源码就是实打实地看你平时是不是爱钻研了。过程中被问了不少JDK源码的问题,其中最刁钻的一个问了,String的hashCode()办法是怎么实现的,幸好平时String源代码看得多,答了个大略。JDK源码其实没什么好总结的,纯正看集体,总结一下比拟重要的源码:
- List、Map、Set实现类的源代码
- ReentrantLock、AQS的源代码
- AtomicInteger的实现原理,次要能说分明CAS机制并且AtomicInteger是如何利用CAS机制实现的
- 线程池的实现原理
- Object类中的办法以及每个办法的作用
这些其实要求蛮高的,去年一整年根本把JDK中重要类的源代码钻研了个遍,真的破费工夫、破费精力,当然回头看,是值得的----不仅仅是为了应酬面试。
五、框架
- spring框架中须要援用哪些jar包,以及这些jar包的用处
- srpingMVC的原理
- springMVC注解的意思
- spring中beanFactory和ApplicationContext的分割和区别
- spring注入的几种形式
- spring如何实现事物治理的
- springIOC和AOP的原理
- spring中循环注入的形式
六、数据库
数据库十有八九也都会问到。一些根本的像union和union all的区别、left join、几种索引及其区别就不谈了,比拟重要的就是数据库性能的优化,如果对于数据库的性能优化无所不通,那么有工夫,还是倡议你在面试前花一两天专门把SQL根底和SQL优化的内容筹备一下。
不过数据库倒是不必放心,一家公司往往有很多部门,如果你对数据库不相熟而根本技术又十分好,九成都是会要你的,预计会先把你放到对数据库应用不是要求十分高的部门锤炼一下。
七、数据结构和算法剖析
数据结构和算法剖析,对于一名程序员来说,会比不会好,而且在工作中相对能派上用场。数组、链表是根底,栈和队列深刻一些但也不难,树挺重要的,比拟重要的树AVL树、红黑树,能够不理解它们的具体实现,然而要晓得什么是二叉查找树、什么是均衡树,AVL树和红黑树的区别。记得某次面试,某个面试官和我聊到了数据库的索引,他问我:
你晓得索引应用的是哪种数据结构实现吗?
答到用的Hash表吧,答错。他又问,你晓得为什么要应用树吗?答到因为Hash表可能会呈现比拟多的抵触,在千万甚至是上亿级别的数据背后,会大大增加查找的工夫复杂度。而树比较稳定,根本保障最多二三十次就能找到想要的数据,对方说不齐全对,最初咱们还是交换了一下这个问题,我也明确了为什么要应用树。
八、JVM
出其不意,Java虚拟机应该是很重要的一块内容,后果在这几家公司中被问到的概率简直为0。要晓得,去年可是花了大量的工夫去钻研Java虚拟机的,光周志明老师的《深刻了解Java虚拟机:JVM高级个性与最佳实际》,就读了不下五遍。
言归正传,尽管Java虚拟机没问到,但我感觉还是有必要钻研的,就简略地列一个提纲吧,谈谈Java虚拟机中比拟重要的内容:
- Java虚拟机的内存布局
- GC算法及几种垃圾收集器
- 类加载机制,也就是双亲委派模型
- Java内存模型
- happens-before规定
- volatile关键字应用规定
兴许面试无用,但在走向大牛的路上,不可不会,这个是面试了几家公司最初通过整合写出了这些面试题,面试就决定了你的薪资,肯定要好好看待,这些问题可能不会问到,然而程序员技多不压身,最初收到了百度的offer,薪资还不错,把这些面试题分享进去心愿能帮忙那些打算跳槽的人~~
20道精选JVM重点面试问题!
学习共勉
金九银十曾经过半,就目前国内的面试模式来讲,在面试前踊跃的筹备面试,温习整个 Java 常识体系将变得十分重要,能够很负责任的说一句,温习筹备的是否充沛,将间接影响你入职的成功率。但很多小伙伴却苦于没有适合的材料来回顾整个 Java 常识体系,或者有的小伙伴可能都不晓得该从哪里开始温习。我偶尔失去一份整顿的材料,不论是从整个 Java 常识体系,还是从面试的角度来看,都是一份含技术量很高的材料(PDF版)。
材料收费支付形式【戳此处】
更多架构专题及视频材料展现如下:
材料收费支付形式【戳此处】