网易Java后端开发面试心得

Java后端面试标准其实不复杂:第一能干活,第二Java基础要好,第三最好熟悉些分布式框架。

其实,很多面试者能力其实不差,但面试时没准备或不会说,这样的人可能在进团队干活后确实能达到期望,但可能就无法通过面试,但面试官总是只根据面试情况来判断。

但现实情况是,大多数人可能面试前没准备,或准备方法不得当。要知道,我们平时干活更偏重于业务,不可能大量接触到算法,数据结构,底层代码这类面试必问的问题点,换句话说,面试准备点和平时工作要点匹配度很小。

在本文里,将通过一些常用的问题来介绍面试的准备技巧。大家在看后一定会感叹:只要方法得当,准备面试第一不难,第二用的时间也不会太多。

1. 框架是重点,但别让人感觉你只会山寨别人的代码

在面试前,面试官会阅读简历以查看面试者在框架方面的项目经验,在面试者的项目介绍的环节,面试官也会着重关注面试者最近的框架经验,目前比较热门的是SSM。

其实我们每个人都这样过来的,但在面试时,如果你仅仅表现出这样的能力,就和大多数人的水平差不多了,在这点就没法体现出你的优势了。

我们知道,如果单纯使用SSM框架,大多数项目都会有痛点。比如数据库性能差,或者业务模块比较复杂,并发量比较高,用Spring MVC里的Controller无法满足跳转的需求。所以面试官一般还会主动问:你除了依照现有框架写业务代码时,还做了哪些改动?

对于这个问题,面试官不在乎听到什么回答,面试官只关心回答符不符逻辑。一般只要答对,面试官就会给出“在框架层面有自己的体会,有一定的了解”,否则,面试官就只会给出“只能在项目经理带领下编写框架代码,对框架本身了解不多”。

其实,在准备面试时,归纳框架里的要点并不难,我就不信所有人在做项目时一点积累也没,只要你说出来,可以说,这方面你就碾压了将近7成的竞争者。

2. 别单纯看单机版的框架,适当了解些分布式

此外,在描述项目里框架技术时,最好你再带些分布式的技术。

  1. 反向代理方面,nginx的基本配置,比如如何通过lua语言设置规则,如何设置session粘滞。如果可以,再看些nginx的底层,比如协议,集群设置,失效转移等。
  2. 远程调用dubbo方面,可以看下dubbo和zookeeper整合的知识点,再深一步,了解下dubbo底层的传输协议和序列化方式。
  3. 消息队列方面,可以看下kafka或任意一种组件的使用方式,简单点可以看下配置,工作组的设置,再深入点,可以看下Kafka集群,持久化的方式,以及发送消息是用长连接还是短拦截。

以上仅仅是用3个组件举例,大家还可以看下Redis缓存,日志框架,MyCAT分库分表等。准备的方式有两大类,第一是要会说怎么用,这比较简单,能通过配置文件搭建成一个功能模块即可,第二是可以适当读些底层代码,以此了解下协议,集群和失效转移之类的高级知识点。

如果能在面试中侃侃而谈分布式组件的底层,那么得到的评价就会比较好了,比如“深入了解框架底层”,或“框架经验丰富”,这样就算去面试架构师也行了,更何况是高级开发。

3. Java核心方面,围绕数据结构和性能优化准备面试题

Java核心这块,网上的面试题很多,不过在此之外,大家还应当着重关注集合(即数据结构)和多线程并发这两块,在此基础上,大家可以准备些设计模式和虚拟机的说辞。

  1. String a = "123"; String b = "123"; a==b的结果是什么? 这包含了内存,String存储方式等诸多知识点。
  2. HashMap里的hashcode方法和equal方法什么时候需要重写?如果不重写会有什么后果?对此大家可以进一步了解HashMap(甚至ConcurrentHashMap)的底层实现。
  3. ArrayList和LinkedList底层实现有什么差别?它们各自适用于哪些场合?对此大家也可以了解下相关底层代码。
  4. volatile关键字有什么作用?由此展开,大家可以了解下线程内存和堆内存的差别。
  5. CompletableFuture,这个是JDK1.8里的新特性,通过它怎么实现多线程并发控制?
  6. JVM里,new出来的对象是在哪个区?再深入一下,问下如何查看和优化JVM虚拟机内存。
  7. Java的静态代理和动态代理有什么差别?最好结合底层代码来说。

上述的问题,其实不仅仅只停留在“会用”级别,比如面试官不会问如何在ArrayList里放元素。大家可以看到,上述问题包含了“多线程并发”,“JVM优化”,“数据结构对象底层代码”等细节,大家也可以举一反三,通过看一些高级知识,多准备些其它类似面试题。

4. 通读一段底层代码,作为加分项

如何证明自己对一个知识点非常了解?莫过于能通过底层代码来说明。

  • ArrayList,LinkedList的底层代码里,包含着基于数组和链表的实现方式,如果大家能以此讲清楚扩容,“通过枚举器遍历“等方式,绝对能证明自己。
  • HashMap直接对应着Hash表这个数据结构,在HashMap的底层代码里,包含着hashcode的put,get等的操作,甚至在ConcurrentHashMap里,还包含着Lock的逻辑。我相信,如果大家在面试中,看看而言ConcurrentHashMap,再结合在纸上边说边画,那一定能征服面试官。
  • 可以看下静态代理和动态代理的实现方式,再深入一下,可以看下Spring AOP里的实现代码。
  • 或许Spirng IOC和MVC的底层实现代码比较难看懂,但大家可以说些关键的类,根据关键流程说下它们的实现方式。

不要小看这个,一旦你讲了,只要意思到位,那么最少能得到个“肯积极专业“的评价,如果描述很清楚,那么评价就会升级到“熟悉Java核心技能(或Spring MVC),且基本功扎实”。要知道,面试中,很少有人能讲清楚底层代码,所以你抛出了这个话题,哪怕最后没达到预期效果,面试官也不会由此对你降低评价。所以说,准备这块绝对是“有百利而无一害”的挣钱买卖。

5. 一切的一切,把上述技能嵌入到你做过的项目里

你之前费了千辛万苦(其实方法方向得到,也不用费太大精力)准备的很多技能和说辞,最后应该落实到你的实际项目里。

请记得,“实践经验”一定比“理论经验”值钱,而且大多数你知道的理论上的经验,一定在你的项目里用过。所以,如果你仅仅让面试官感觉你只有“理论经验”,那就太亏了。

小结

本文给出的面试题并不多,但本文并没有打算给出太多的面试题。从本文里,大家更多看到的是面试官发现的诸多面试者的痛点。

你的能力或许比别人出众,但如果你准备面试的方式和别人差不多,或者就拿你在项目里干的活来说事,而没有归纳出你在项目中的亮点,那么面试官还真的会看扁你。

【文章彩蛋】

为了解决小伙伴们的燃眉之急,小编特地为大家整理了一些Java相关的面试题,可以加小编的QQ群:937053620,获取!后期也会不断更新添加新的面试题,希望可以帮助到大家。

原文地址:http://blog.51cto.com/14169218/2346947

时间: 2024-08-04 12:50:33

网易Java后端开发面试心得的相关文章

Java后端开发从初学者玩成大牛的学习路线

如果你是在校学生,务必要在学好基础(比如计算机系统.算法.编译原理等等)的前提下,再考虑去进行下面的学习.第一部分:对于尚未做过Java工作的同学,包括一些在校生以及刚准备转行Java的同学. 一.Java基础首先去找一个Java的基础教程学一下,这里可以推荐一个地址,或者你也可以参照这个地址上去找相应的视频.学习Java基础的时候,应该尽量多动手,很多时候,你想当然的事情,等你写出来运行一下,你就会发现不是这么回事儿,不信你就试试.学完以上内容以后,你应该对Java有一个基本的了解了,你可以用

面试大厂回来后,有一些话想对 Java 后端开发说一说

在上周,我密集面试了若干位Java后端的候选人,工作经验在3到5年间.我的标准其实不复杂:第一能干活,第二Java基础要好,第三最好熟悉些分布式框架,我相信其它公司招初级开发时,应该也照着这个标准来面的. 我也知道,不少候选人能力其实不差,但面试时没准备或不会说,这样的人可能在进团队干活后确实能达到期望,但可能就无法通过面试,但面试官总是只根据面试情况来判断. 但现实情况是,大多数人可能面试前没准备,或准备方法不得当.要知道,我们平时干活更偏重于业务,不可能大量接触到算法,数据结构,底层代码这类

Java后端开发工作 - 写接口

我在公司的工作内容是,对于一个BS应用,负责服务器端开发工作,Java语言.与前端开发人员合作,最终提供给前端RESTFUL接口,保证页面正常响应. 经验之谈 一个接口可以理解为一个业务逻辑,一个业务逻辑可以由1-n个SQL组成.一个优质的接口,应该是通用的接口,一旦需求变了,给过来的参数有变化,那我尽量做到接口不变,你多给我一个参数或者某个参数变化一下,我就可以给出你要的结果. 后端提供给前端的接口,要尽量少.最好我给你一个接口,你可以用这一个接口做很多事,拿很多数据.这样对前端开发人员比较友

浅谈Java后端开发工程师腾讯面试经历分享总结

最近一段时间考虑到换工作,打算整理一下网络上曾经面试者分享的的面试经历并结合自己以往的面试经历和经验,帮助大家获取到互联网大厂的入职通知书,也就是入职offer. 本文整理网络面试者和本人的面试经历和面试经验分享给大家,主要出于个人层面上做个自我总结.沉淀一下面试经历以及让一些有能力的面试者了解一些互联网大厂企业面试过程,如果有人向往这些大厂企业,告知面试者需要做哪些准备从而能够如愿以偿的获取到互联网大厂企业的入职通知书. 面试做好提前准备 一谈到面试这个问题,很多人都会心里一紧,尤其是一些生性

2016年Java服务器端开发面试总结

因为一些个人原因,陆陆续续参加了一些校招补招.社招的笔试和面试(BAT),也包括一些国外公司(Spotify, Google, Ericsson),最后有幸被网易收入麾下,拿到了S.下面罗列一些我复习中的要点,如果能以此为一个参考,做好充足的准备,国内BAT这些公司的基础技术笔试和面试应该没什么问题.当然对于一些大公司,基础知识可能不是最被看重的,关键是学习能力,独立解决问题的能力,是否是一个"灵性"的人,我一直觉得我们程序员是在创造一个新的世界. 当然有一些技术老人,也可以看看这个,

JAVA高级开发面试一(ZX)

笔试: 1.正则表达式,第一个字符为字母其他为字母数字下划线,最大长度为5-20范围内:^[a-zA-Z]\w{4,19} 2.代码块加载顺序:父静态属性->父静态代码块->子静态属性->子静态代码块->父代码块->父构造方法->子代码块->子构造方法 父代码块->父构造方法->子代码块->子构造方法 每次new子对象时都会加载一次,而静态只会加载一次 3.排序算法通过java实现: 4.对称判断(123321): 5.JavaScript的基本

Java后端开发三年,你不得不了解的JVM

JAVA程序员,三年是个坎,如果过了三年你还没有去研究JVM的话,那么你这个程序员只能是板砖的工具了.下面来个JVM的解析可好? JVM是Java Virtual Machine(Java虚拟机)的缩写,也就是指的JVM虚拟机,属于是一种虚构出来的计算机,在我们实际的电脑上来进行模拟各种计算机的功能的这么个东西. 因为有了JVM的存在,搞JAVA的不再需要去关心什么时候去释放内存,也不会像C++程序员那样为了一点点内存而惆怅,对就是你,JVM虚拟机帮你把这些东西都完成了,那么我们来说说JAVA的

自学 Java开发(Java后台开发|Java后端开发)的书籍推荐

java编程思想java并发编程实战深入理解java虚拟机函数式编程思维tcp/ip详解鸟哥的linux私房菜spring mvc +mybatis开发从入门到精通spring技术内幕elasticsearch服务器开发 有坑 直接看文档redis入门指南 (redis开发与运维  设计与实现) 分布式.集群.SOA.RPC.微服务.容器化.Docker 0基础,有人能推荐一下java编程思想的前置书籍/视频吗 java核心技术 今天去读书馆借了一本java 并发编程实战.结果直接看懵圈.建议还

(java web后端方向)如何让你的简历为你争取到更多的面试机会,内容来自java web轻量级开发面试教程

我们在做培训时,会发现一个不合理的情况,一些程序员能力不错,在公司里也是技术牛人,但发出去的简历往往会石沉大海,没有回复.对于刚毕业的大学生或工作年限在2年之内的程序员,这个情况会更严重. 这种情况下,其实不是你的能力有问题,而是简历筛选人(往往是人事或技术面试官)无法从简历上看出你很牛,或者即使能从简历上感觉到你能力很强,但会感觉到你的能力和公司的需求不匹配.不管是哪种情况,结果都一个,你甚至得不到技术面试的机会. 笔者在这里,将根据面试多个候选人(至今有100以上)的经验,来向大家展示准备简