当前位置: 首页 > 科技观察

如何准备Java初级和高级技术面试

时间:2023-03-23 10:28:48 科技观察

我这几年一直在做Java后端技术面试官,这两周集中面试了一些Java初级和高级开发的应聘者。面试过程中,我觉得自己比较谨慎。当我遇到回答不好的候选人时,我总是会从不同方面提出问题。只有在反复确认自己能力不行的时候才会下结论,我也会多角度去衡量,不至于招来会说话不会工作的“大笨蛋”。其实并不是我故意刁难考生。毕竟入职后是同事,只是面试官的职责使然,有经验的面试官也是如此。写到这里,恐怕有些想面试的朋友会被吓到。强弱的能力都会被问的比较多,怎么办?这就是本文的主题:如何准备Java初级和高级技术面试。1.换个角度想,如果你是面试官,你会怎么做1.只能通过简历和面试来衡量,没有别的办法。如果一个大牛确认自己的能力很好,但是在面试的时候不能完全证明自己的能力,那对不起,他过不了,现实就是这样。2.如果面试官因为无能招了个大傻子,估计会被领导骂。并且再也不会被要求面试,更不会给领导留下好印象。因此,主观印象无法判断,但会有一些客观标准。具体来说,就是从多个方面来问一些问题,回答的好坏取决于候选人。其实有些问题是相似的,但是不同能力的面试官会有不同的切入点和提问的循序渐进的程度,有经验的面试官会挖掘候选人的优点,从候选人的花言巧语中判断候选人是否真的听懂了还是瞎扯.2.总的来说,说说准备面试的几个方面。我记得我以前参加过政治考试。某大题10分5分。每个点的标准答案不多,就一两句话。比较棘手的做法是覆盖所有点,每个点不用多说,但一定要说到点上。反之,如果你在某个点做多了,其他点都没有覆盖到,你只能为这个点拿分。同理,面试的时候要综合准备javaCore、数据库、框架、分布等方面的问题。根据我的面试结果,我发现很多应聘者走了弯路。他们可能根本就没有准备,也可能准备的方法不到位,只准备了一方面。比如只准备了算法题,这方面答的很好,其他方面一窍不通。因此,没有所谓的一定能成功的面试秘诀,但有一些准备方法可以帮助提高成功率。记住,面试前一定要做好准备,否则成功的可能性很低。准备的时候一定要综合看各个方面。至于每个点的范围,我们以后再说。3.架构方面需要准备的点初级开发,面试官需要感受以下几点。1、熟悉SSM架构,至少在项目中。这个说法是在介绍项目的时候,用一个业务流程来描述springmvc是怎么做的。2.了解SpringMVC中的细节,比如@Autowired的用法,如何将url映射到Controller,ModelAndView对象的返回方式等。3.***结合项目的用法,说说如何使用AOP和拦截器,比如可以通过拦截器拦截非法请求,如何使用AOP输出日志等。4.关于ORM,不限于你用过哪一种,但你必须知道用法一对一、一对多、多对多等,以及级联和逆的用法。5.***了解声明式交易的做法。如果想申请高级开发,在以上的基础上,最好了解以下知识点:SpringBean循环***通过阅读源码,谈谈IOC、AOP和SpringMVC的工作流程***可以结合反思,说说IOC的实现原理等,SpringBoot和SpringCloud4的一些知识点。很多考生都需要准备数据库。很多考生会看很多SQL技巧,比如select怎么写,insert怎么写,但是就是这样,其他什么都不准备。这是一个劣势,因为面试官会认为即使是初级开发,也要写SQL语句,所以这块不会问太多问题,会问下面几个问题。1.索引是如何建立和使用的?比如我建了一个索引,如果我在where语句中写namelike'123%',它会不会去索引?.2、除了索引,你在SQL优化方面有什么经验,比如分库分表,或者通过执行计划查看SQL优化点。就您正在进行的项目的实际情况而言,这是最好的。在这里,经过我的面试,大约70%的应聘者只会写基本的SQL,所以即使你只有理论经验,能说说一些优化点也是非常有益的。对于高级开发,这块需要更好地理解优化技巧。5.JavaCore需要准备的点这是基础。其实,项目中问的很多问题,考生肯定会用到,但能面面俱到的很少见。这块会主要从集合、多线程、异常处理流程、JVM虚拟机等方面进行提问。收藏方面:1.hashcode是否改写了?在什么场景下需要重写。可能的话,结合哈希表的算法,说说hashmap的实现原理。进阶开发,***使用ConcurrentHashMap来说明并发的底层实现代码。2.ArrayList和LinkedList的区别,比如一个基于数组的和一个基于链表的,两者都不是线程安全的,ArrayList的扩展方法等等,进阶的最好看下底层代码。3、Set是如何实现防重复的,比如TreeSet、HashSet等4、Collection的一些方法,比如比较方法,被封装成线程安全的方法等5、可能有面试官会问,如何实现通过ArrayList一个队列或者栈,这个可以准备。多线程方面,其实在项目中并不经常用到,但是会问到以下问题:1.synchronized和reentrantlocks的区别,然后可能会问到信号量等反并发机制.2.线程中如何返回值其实就是callable和runnable的区别。3.一定要使用ThreadLocal或者volatile关键字来描述线程的内存模型。4.在线程池方面,可以使用。了解一些常用参数。线程方面,你可能会问更多关于并发机制的问题。如果是高级开发,你可能会问更深层次的问题。虚拟机方面1.结构图和过程可以大致描述一下。2.必须了解堆的垃圾回收机制。具体可以画个图说说年轻一代和老一代。3.说说垃圾回收过程,再说说代码中如何优化内存性能。4、告诉你OOM异常怎么排查?如何查看转储文件。5.可以准备一些GC的概念,比如强弱软引用,finalize方法等。6、算法、设计模式等其实都是很好的准备,但是这些即使没有很好的回答,能证明相关技能的项目经验一般也会pass。然而,在这方面,很多考生本末倒置。比如他们准备了算法,设计模式,刚才说的框架,没有准备数据库和JavaCore。这是很不利的,就像参加政治考试只复习一分,其他的都不准备一样。七、我对面试的感受&听到什么样的回答可以证明候选人更有经验1.大部分候选人(约70%)没有任何准备就直接来了。要知道,面试和项目其实有点脱节。项目再好,不准备也过不去。只要确定这种人真的达不到标准,我就没有心理负担拒绝他们。谁叫他们不要准备的?2、也有一些考生态度很好,明明准备充分,但准备不充分。比如前面说的,他们只准备算法,或者JavaCore方面,他们只看集合类的面试题。对于这些学生,即使他们通过了,我也会感到遗憾。毕竟面试好的话,薪水可以高一些。至于过不去的,我敢说,如果有准备,估计也不是这个结果。其实我也知道没有人是完美的。就算我一个人去面试,也不可能面面俱到。因此,我不会要求考生回答所有问题。可面试。我也和很多面试官交流过。根据我们的经验,如果应聘者能说出以下知识点,就可以证明他在这方面比较有经验。在这方面,我可能不会问太多问题。问题。架构1.能够证明自己可以工作(不难),同时能够结合底层代码说出IOC、AOP或者SpringMVC的流程,只要能说出一个即可。或者能说出拦截器、Controllers等的高级用法。2.能证明自己有SpringBoot或SpringCloud的经验,比如能说出一些SpringCloud组件的用法。3.如果能证明自己有分布式开发经验,那就完美了。其实不难证明。讲如何部署,如何通过nginx实现负载均衡等。在数据库方面,搞清楚一个问题就够了:如何进行SQL调优,比如通过索引,看执行计划。如果还有其他优化点,说明清楚即可。JavaCore方面,这里有一些小技巧:1.可以结合ConcurrentHashMap的源码,讲一下final、volatile、transient的用法,以及如何使用Lock对象来防止并发写入。2.结合一个项目的实际,谈谈设计模式的实践。3、多线程方面,能说出Lock或volatile等高级知识点的用法。4.这一块是最棘手的:说说GC过程,以及如何通过日志和dump文件排查OOM异常。如果再高级一点,在代码中讲讲内存代码如何优化。