2023年6月20日发(作者:)
5年经验Java程序员⾯试20天,拿下数个offer,总结出的经验感想!写在前⾯ 今天分享的是⼀位5年⼯作经验的Java⼯程师在帝都的⾯试经验总结,看看这些互联⽹公司都爱问些什么题,希望对⼤家的⾯试有指导意义。
从事Java开发也有5年经验了,4⽉初⾃⼰的开启⾯试经历之旅,前后20天左右,主⾯互联⽹公司,⼀⼆线⼤公司或者是融资中的创业公司都⾯试过,拿了⼀些offer,其中包括奇虎360等⾸先不同⾯试官⾯试风格⼀定不同,这⾥是我总结这些天⾯试Java开发过程中的⼤多数问题,综合分类有Java基础,框架,多线程,⽹络通信,数据库以及设计模式,算法等⼏个模块。⼀名3年⼯作经验的Java程序员应该具备的技能,这可能是Java程序员们⽐较关⼼的内容。我这⾥要说明⼀下,以下列举的内容不是都要会的东西----但是如果你掌握得越多,最终能得到的评价、拿到的薪⽔势必也越⾼。⼀、Java基础1. String类为什么是final的。2. HashMap的源码,实现原理,底层结构。3. 反射中,e和classloader的区别4. session和cookie的区别和联系,session的⽣命周期,多个服务部署时session管理。5. Java中的队列都有哪些,有什么区别。6. Java的内存模型以及GC算法7. Java数组和链表两种结构的操作效率,在哪些情况下(从开头开始,从结尾开始,从中间开始),哪些操作(插⼊,查找,删除)的效率⾼8. Java内存泄露的问题调查定位:jmap,jstack的使⽤等等⼆、多线程这也是必问的⼀块了。因为三年⼯作经验,所以基本上不会再问你怎么实现多线程了,会问得深⼊⼀些⽐如说Thread和Runnable的区别和联系、多次start⼀个线程会怎么样、线程有哪些状态。当然这只是最基本的,出乎意料地,⼏次⾯试⼏乎都被同时问到了⼀个问题,问法不尽相同,总结起来是这么⼀个意思:假如有Thread1、Thread2、Thread3、Thread4四条线程分别统计C、D、E、F四个盘的⼤⼩,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?聪明的⽹友们对这个问题是否有答案呢?不难,rent下就有现成的类可以使⽤。另外,线程池也是⽐较常问的⼀块,常⽤的线程池有⼏种?这⼏种线程池之间有什么区别和联系?线程池的实现原理是怎么样的?实际⼀些的,会给你⼀些具体的场景,让你回答这种场景该使⽤什么样的线程池⽐较合适。最后,虽然这次⾯试问得不多,但是多线程同步、锁这块也是重点。synchronized和ReentrantLock的区别、synchronized锁普通⽅法和锁静态⽅法、死锁的原理及排查⽅法等等,关于多线程,我在之前有些过⽂章总结过多线程,并发编程的⾯试问题!三、IOIO分为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源码其实没什么好总结的,纯粹看个⼈,总结⼀下⽐较重要的源码:1. List、Map、Set实现类的源代码2. ReentrantLock、AQS的源代码3. AtomicInteger的实现原理,主要能说清楚CAS机制并且AtomicInteger是如何利⽤CAS机制实现的4. 线程池的实现原理5. Object类中的⽅法以及每个⽅法的作⽤这些其实要求蛮⾼的,去年⼀整年基本把JDK中重要类的源代码研究了个遍,真的花费时间、花费精⼒,当然回头看,是值得的----不仅仅是为了应付⾯试。五、框架1. spring框架中需要引⽤哪些jar包,以及这些jar包的⽤途2. srpingMVC的原理3. springMVC注解的意思4. spring中beanFactory和ApplicationContext的联系和区别5. spring注⼊的⼏种⽅式6. spring如何实现事物管理的7. springIOC和AOP的原理8. spring中循环注⼊的⽅式六、数据库数据库⼗有⼋九也都会问到。⼀些基本的像union和union all的区别、left join、⼏种索引及其区别就不谈了,⽐较重要的就是数据库性能的优化,如果对于数据库的性能优化⼀窍不通,那么有时间,还是建议你在⾯试前花⼀两天专门把SQL基础和SQL优化的内容准备⼀下。不过数据库倒是不⽤担⼼,⼀家公司往往有很多部门,如果你对数据库不熟悉⽽基本技术⼜⾮常好,九成都是会要你的,估计会先把你放到对数据库使⽤不是要求⾮常⾼的部门锻炼⼀下。七、数据结构和算法分析数据结构和算法分析,对于⼀名程序员来说,会⽐不会好,⽽且在⼯作中绝对能派上⽤场。数组、链表是基础,栈和队列深⼊⼀些但也不难,树挺重要的,⽐较重要的树AVL树、红⿊树,可以不了解它们的具体实现,但是要知道什么是⼆叉查找树、什么是平衡树,AVL树和红⿊树的区别。记得某次⾯试,某个⾯试官和我聊到了数据库的索引,他问我:你知道索引使⽤的是哪种数据结构实现吗?答到⽤的Hash表吧,答错。他⼜问,你知道为什么要使⽤树吗?答到因为Hash表可能会出现⽐较多的冲突,在千万甚⾄是上亿级别的数据⾯前,会⼤⼤增加查找的时间复杂度。⽽树⽐较稳定,基本保证最多⼆三⼗次就能找到想要的数据,对⽅说不完全对,最后我们还是交流了⼀下这个问题,我也明⽩了为什么要使⽤树。⼋、JVM出乎意料,Java虚拟机应该是很重要的⼀块内容,结果在这⼏家公司中被问到的概率⼏乎为0。要知道,去年可是花了⼤量的时间去研究Java虚拟机的,光周志明⽼师的《深⼊理解Java虚拟机:JVM⾼级特性与最佳实践》,就读了不下五遍。⾔归正传,虽然Java虚拟机没问到,但我觉得还是有必要研究的,就简单地列⼀个提纲吧,谈谈Java虚拟机中⽐较重要的内容:1. Java虚拟机的内存布局2. GC算法及⼏种垃圾收集器3. 类加载机制,也就是双亲委派模型4. Java内存模型5. happens-before规则6. volatile关键字使⽤规则也许⾯试⽆⽤,但在⾛向⼤⽜的路上,不可不会,这个是⾯试了⼏家公司最后经过整合写出了这些⾯试题,⾯试就决定了你的薪资,⼀定要好好对待,这些问题可能不会问到,但是程序员技多不压⾝,最后收到了百度的offer,薪资还不错,把这些⾯试题分享出来希望能帮助那些打算跳槽的⼈~~
2023年6月20日发(作者:)
5年经验Java程序员⾯试20天,拿下数个offer,总结出的经验感想!写在前⾯ 今天分享的是⼀位5年⼯作经验的Java⼯程师在帝都的⾯试经验总结,看看这些互联⽹公司都爱问些什么题,希望对⼤家的⾯试有指导意义。
从事Java开发也有5年经验了,4⽉初⾃⼰的开启⾯试经历之旅,前后20天左右,主⾯互联⽹公司,⼀⼆线⼤公司或者是融资中的创业公司都⾯试过,拿了⼀些offer,其中包括奇虎360等⾸先不同⾯试官⾯试风格⼀定不同,这⾥是我总结这些天⾯试Java开发过程中的⼤多数问题,综合分类有Java基础,框架,多线程,⽹络通信,数据库以及设计模式,算法等⼏个模块。⼀名3年⼯作经验的Java程序员应该具备的技能,这可能是Java程序员们⽐较关⼼的内容。我这⾥要说明⼀下,以下列举的内容不是都要会的东西----但是如果你掌握得越多,最终能得到的评价、拿到的薪⽔势必也越⾼。⼀、Java基础1. String类为什么是final的。2. HashMap的源码,实现原理,底层结构。3. 反射中,e和classloader的区别4. session和cookie的区别和联系,session的⽣命周期,多个服务部署时session管理。5. Java中的队列都有哪些,有什么区别。6. Java的内存模型以及GC算法7. Java数组和链表两种结构的操作效率,在哪些情况下(从开头开始,从结尾开始,从中间开始),哪些操作(插⼊,查找,删除)的效率⾼8. Java内存泄露的问题调查定位:jmap,jstack的使⽤等等⼆、多线程这也是必问的⼀块了。因为三年⼯作经验,所以基本上不会再问你怎么实现多线程了,会问得深⼊⼀些⽐如说Thread和Runnable的区别和联系、多次start⼀个线程会怎么样、线程有哪些状态。当然这只是最基本的,出乎意料地,⼏次⾯试⼏乎都被同时问到了⼀个问题,问法不尽相同,总结起来是这么⼀个意思:假如有Thread1、Thread2、Thread3、Thread4四条线程分别统计C、D、E、F四个盘的⼤⼩,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?聪明的⽹友们对这个问题是否有答案呢?不难,rent下就有现成的类可以使⽤。另外,线程池也是⽐较常问的⼀块,常⽤的线程池有⼏种?这⼏种线程池之间有什么区别和联系?线程池的实现原理是怎么样的?实际⼀些的,会给你⼀些具体的场景,让你回答这种场景该使⽤什么样的线程池⽐较合适。最后,虽然这次⾯试问得不多,但是多线程同步、锁这块也是重点。synchronized和ReentrantLock的区别、synchronized锁普通⽅法和锁静态⽅法、死锁的原理及排查⽅法等等,关于多线程,我在之前有些过⽂章总结过多线程,并发编程的⾯试问题!三、IOIO分为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源码其实没什么好总结的,纯粹看个⼈,总结⼀下⽐较重要的源码:1. List、Map、Set实现类的源代码2. ReentrantLock、AQS的源代码3. AtomicInteger的实现原理,主要能说清楚CAS机制并且AtomicInteger是如何利⽤CAS机制实现的4. 线程池的实现原理5. Object类中的⽅法以及每个⽅法的作⽤这些其实要求蛮⾼的,去年⼀整年基本把JDK中重要类的源代码研究了个遍,真的花费时间、花费精⼒,当然回头看,是值得的----不仅仅是为了应付⾯试。五、框架1. spring框架中需要引⽤哪些jar包,以及这些jar包的⽤途2. srpingMVC的原理3. springMVC注解的意思4. spring中beanFactory和ApplicationContext的联系和区别5. spring注⼊的⼏种⽅式6. spring如何实现事物管理的7. springIOC和AOP的原理8. spring中循环注⼊的⽅式六、数据库数据库⼗有⼋九也都会问到。⼀些基本的像union和union all的区别、left join、⼏种索引及其区别就不谈了,⽐较重要的就是数据库性能的优化,如果对于数据库的性能优化⼀窍不通,那么有时间,还是建议你在⾯试前花⼀两天专门把SQL基础和SQL优化的内容准备⼀下。不过数据库倒是不⽤担⼼,⼀家公司往往有很多部门,如果你对数据库不熟悉⽽基本技术⼜⾮常好,九成都是会要你的,估计会先把你放到对数据库使⽤不是要求⾮常⾼的部门锻炼⼀下。七、数据结构和算法分析数据结构和算法分析,对于⼀名程序员来说,会⽐不会好,⽽且在⼯作中绝对能派上⽤场。数组、链表是基础,栈和队列深⼊⼀些但也不难,树挺重要的,⽐较重要的树AVL树、红⿊树,可以不了解它们的具体实现,但是要知道什么是⼆叉查找树、什么是平衡树,AVL树和红⿊树的区别。记得某次⾯试,某个⾯试官和我聊到了数据库的索引,他问我:你知道索引使⽤的是哪种数据结构实现吗?答到⽤的Hash表吧,答错。他⼜问,你知道为什么要使⽤树吗?答到因为Hash表可能会出现⽐较多的冲突,在千万甚⾄是上亿级别的数据⾯前,会⼤⼤增加查找的时间复杂度。⽽树⽐较稳定,基本保证最多⼆三⼗次就能找到想要的数据,对⽅说不完全对,最后我们还是交流了⼀下这个问题,我也明⽩了为什么要使⽤树。⼋、JVM出乎意料,Java虚拟机应该是很重要的⼀块内容,结果在这⼏家公司中被问到的概率⼏乎为0。要知道,去年可是花了⼤量的时间去研究Java虚拟机的,光周志明⽼师的《深⼊理解Java虚拟机:JVM⾼级特性与最佳实践》,就读了不下五遍。⾔归正传,虽然Java虚拟机没问到,但我觉得还是有必要研究的,就简单地列⼀个提纲吧,谈谈Java虚拟机中⽐较重要的内容:1. Java虚拟机的内存布局2. GC算法及⼏种垃圾收集器3. 类加载机制,也就是双亲委派模型4. Java内存模型5. happens-before规则6. volatile关键字使⽤规则也许⾯试⽆⽤,但在⾛向⼤⽜的路上,不可不会,这个是⾯试了⼏家公司最后经过整合写出了这些⾯试题,⾯试就决定了你的薪资,⼀定要好好对待,这些问题可能不会问到,但是程序员技多不压⾝,最后收到了百度的offer,薪资还不错,把这些⾯试题分享出来希望能帮助那些打算跳槽的⼈~~
发布评论