免费移动网站模板下载,dw怎么制作网页教程,wordpress重定向地址不匹配,公司建设网站流程转载自 面试了 N 个候选人后#xff0c;我总结出这份 Java 面试准备技巧
目录#xff1a; 框架是重点#xff0c;但别让人感觉你只会山寨别人的代码 别只看单机版的框架#xff0c;分布式也需要了解 对于数据库#xff0c;别只知道增删改查#xff0c;得了解性能优化…转载自 面试了 N 个候选人后我总结出这份 Java 面试准备技巧
目录 框架是重点但别让人感觉你只会山寨别人的代码 别只看单机版的框架分布式也需要了解 对于数据库别只知道增删改查得了解性能优化 Java核心围绕数据结构和性能优化准备面试题 Linux方面至少了解如何看日志排查问题 通读一段底层代码作为加分项 切记切记把上述技能嵌入到你的项目里 小结本文更多讲述的准备面试的方法 在上周我密集面试了若干位Java后端的候选人工作经验在3到5年间。 我的标准其实不复杂 第一能干活 第二Java基础要好 第三最好熟悉些分布式框架 相信其它公司招初级开发时应该也照着这个标准来面的。 我也知道不少候选人能力其实不差但面试时没准备或不会说这样的人可能进团队干活后确实能达到期望但可能无法通过面试面试官只根据面试情况来判断。 要知道我们平时干活更偏重于业务不可能大量接触到算法数据结构底层代码这类面试必问的问题点。 换句话说面试准备点和平时工作要点匹配度很小。 作为面试官我只能根据候选人的回答来决定面试结果。不过与人方便自己方便。 所以我在本文里将通过一些常用的问题来介绍面试的准备技巧。 大家在看后一定会感叹只要方法得当准备面试第一不难第二用的时间也不会太多。 1、框架是重点但别让人感觉你只会山寨别人的代码
在面试前我会阅读简历以查看候选人在框架方面的项目经验在候选人的项目介绍的环节我也会着重关注候选人最近的框架经验目前比较热门的是SSM。 不过一般工作在5年内的候选人大多仅仅是能“山寨”别人的代码也就是说能在现有框架的基础上照着别人写的流程扩展出新的功能模块。 比如要写个股票挂单的功能模块是会模仿现有的下单流程然后从前端到后端再到数据库依样画葫芦写一遍最多把功能相关的代码点改掉。 其实我们每个人都这样过来的但在面试时如果你仅仅表现出这样的能力就和大多数人的水平差不多了在这点就没法体现出你的优势了。 我们知道如果单纯使用SSM框架大多数项目都会有痛点。比如数据库性能差或者业务模块比较复杂并发量比较高用Spring MVC里的Controller无法满足跳转的需求。 所以我一般还会主动问你除了依照现有框架写业务代码时还做了哪些改动 我听到的回答有
增加了Redis缓存以避免频繁调用一些不变的数据。 或者在MyBitas的xml里select语句where条件有isnull即这个值有就增加一个where条件对此会对任何一个where增加一个不带isnull的查询条件以免该语句当传入参数都是null时做全表扫描。 或者干脆说后端异步返回的数据量很大时间很长我在项目里就调大了异步返回的最大时间或者对返回信息做了压缩处理以增加网络传输性能。 对于这个问题我不在乎听到什么回答我只关心回答符不符逻辑。一般只要答对我就会给出“在框架层面有自己的体会有一定的了解”的面试评价。 否则我就只会给出“只能在项目经理带领下编写框架代码对框架本身了解不多”。 其实在准备面试时归纳框架里的要点并不难我就不信所有人在做项目时一点积累也没只要你说出来可以说这方面你就碾压了将近7成的竞争者。 2、别只看单机版的框架分布式也要了解
此外在描述项目里框架技术时最好你再带些分布式的技术。下面我列些大家可以准备的分布式技术。 反向代理方面nginx的基本配置比如如何通过lua语言设置规则如何设置session粘滞。如果可以再看些nginx的底层比如协议集群设置失效转移等。 远程调用dubbo方面可以看下dubbo和zookeeper整合的知识点再深一步了解下dubbo底层的传输协议和序列化方式。 消息队列方面可以看下kafka或任意一种组件的使用方式简单点可以看下配置工作组的设置再深入点可以看下Kafka集群持久化的方式以及发送消息是用长连接还是短拦截。 以上仅仅是用3个组件举例大家还可以看下Redis缓存日志框架MyCAT分库分表等。 准备的方式有两大类 第一是要会说怎么用这比较简单能通过配置文件搭建成一个功能模块即可 第二是可以适当读些底层代码以此了解下协议集群和失效转移之类的高级知识点。 如果能在面试中侃侃而谈分布式组件的底层那么得到的评价就会比较好了比如“深入了解框架底层”或“框架经验丰富”这样就算去面试架构师也行了更何况是高级开发。 3、对于数据库别只知道增删改查得了解性能优化
在实际项目里大多数程序员用到的可能仅仅是增删改查当我们用Mybatis时这个情况更普遍。 不过如果你面试时也这样表现估计你的能力就和其它竞争者差不多了。 这方面你可以准备如下的技能。 SQL高级方面比如group by, having左连接子查询带in行转列等高级用法。 建表方面你可以考虑下你项目是用三范式还是反范式理由是什么 尤其是优化你可以准备下如何通过执行计划查看SQL语句改进点的方式或者其它能改善SQL性能的方式比如建索引等。 如果你感觉有能力还可以准备些MySQL集群MyCAT分库分表的技能。比如通过LVSKeepalived实现MySQL负载均衡MyCAT的配置方式。同样如果可以也看些相关的底层代码。 哪怕你在前三点表现一般那么至少也能超越将近一半的候选人尤其当你在SQL优化方面表现非常好那么你在面试高级开发时数据库层面一定是达标的。 如果你连第四点也回答非常好那么恭喜你你在数据库方面的能力甚至达到了初级架构的级别。 4、Java核心围绕数据结构和性能优化准备面试题
Java核心这块网上的面试题很多不过在此之外大家还应当着重关注集合即数据结构和多线程并发这两块 在此基础上大家可以准备些设计模式和虚拟机的说辞。 下面列些我一般会问的部分问题 String a 123; String b 123; ab的结果是什么这包含了内存String存储方式等诸多知识点 HashMap里的hashcode方法和equal方法什么时候需要重写如果不重写会有什么后果对此大家可以进一步了解HashMap甚至ConcurrentHashMap的底层实现 ArrayList和LinkedList底层实现有什么差别它们各自适用于哪些场合对此大家也可以了解下相关底层代码。 volatile关键字有什么作用由此展开大家可以了解下线程内存和堆内存的差别。 CompletableFuture这个是JDK1.8里的新特性通过它怎么实现多线程并发控制 JVM里new出来的对象是在哪个区再深入一下问下如何查看和优化JVM虚拟机内存。 Java的静态代理和动态代理有什么差别最好结合底层代码来说。 通过上述的问题点我其实不仅仅停留在“会用”级别比如我不会问如何在ArrayList里放元素。 大家可以看到上述问题包含了“多线程并发”“JVM优化”“数据结构对象底层代码”等细节大家也可以举一反三通过看一些高级知识多准备些其它类似面试题。 我们知道目前Java开发是以Web框架为主那么为什么还要问Java核心知识点呢我这个是有切身体会的。 之前在我团队里我见过两个人一个是就会干活具体表现是会用Java核心基本的API而且也没有深入了解的意愿估计不知道该怎么深入了解另一位平时专门会看些Java并发虚拟机等的高级知识。 过了半年以后后者的能力快速升级到高级开发由于对JAVA核心知识点了解很透彻所以看一些分布式组件的底层实现没什么大问题。而前者一直在重复劳动能力也只一直停留在“会干活”的层面。 而在现实的面试中如果不熟悉Java核心知识点估计升高级开发都难更别说是面试架构师级别的岗位了。 5、Linux方面至少了解如何看日志排查问题
如果候选人能证明自己有“排查问题”和“解决问题”的能力这绝对是个加分项但怎么证明 目前大多数的互联网项目都是部署在Linux上也就是说日志都是在Linux下面归纳些实际的Linux操作。 能通过less命令打开文件通过ShiftG到达文件底部再通过?关键字的方式来根据关键来搜索信息 能通过grep的方式查关键字具体用法是, grep 关键字 文件名如果要两次在结果里查找的话就用grep 关键字1 文件名 | 关键字2 --color。最后--color是高亮关键字 能通过vi来编辑文件 能通过chmod来设置文件的权限 当然还有更多更实用的Linux命令但在实际面试过程中不少候选人连一条linux命令也不知道。还是这句话你哪怕知道些很基本的也比一般人强了。 6、通读一段底层代码作为加分项
如何证明自己对一个知识点非常了解?莫过于能通过底层代码来说明。 我在和不少工作经验在5年之内的程序员沟通时不少人认为这很难确实如果要通过阅读底层代码了解分布式组件那难度不小但如果如下部分的底层代码并不难懂。 ArrayList,LinkedList的底层代码里包含着基于数组和链表的实现方式如果大家能以此讲清楚扩容“通过枚举器遍历“等方式绝对能证明自己。 HashMap直接对应着Hash表这个数据结构在HashMap的底层代码里包含着hashcode的putget等的操作甚至在ConcurrentHashMap里还包含着Lock的逻辑。如果大家在面试中看看而言ConcurrentHashMap再结合在纸上边说边画那一定能征服面试官。 可以看下静态代理和动态代理的实现方式再深入一下可以看下Spring AOP里的实现代码。 或许Spirng IOC和MVC的底层实现代码比较难看懂但大家可以说些关键的类根据关键流程说下它们的实现方式。 其实准备的底层代码未必要多而且也不限于在哪个方面比如集合里基于红黑树的TreeSet基于NIO的开源框架甚至分布式组件的Dubbo都可以准备。 而且准备时未必要背出所有的底层事实上很难做到你只要能结合一些重要的类和方法讲清楚思路即可比如讲清楚HashMap如何通过hashCode快速定位。 那么在面试时如何找到个好机会说出你准备好的上述底层代码 在面试时总会被问到集合Spring MVC框架等相关知识点你在回答时顺便说一句“我还了解这块的底层实现”那么面试官一定会追问那么你就可以说出来了。 不要小看这个对候选人的帮助一旦你讲了只要意思到位那么最少能得到个“积极专业“的评价如果描述很清楚那么评价就会升级到“熟悉Java核心技能或Spring MVC且基本功扎实”。 要知道面试中很少有人能讲清楚底层代码所以你抛出了这个话题哪怕最后没达到预期效果面试官也不会由此对你降低评价。 所以说准备这块绝对是“有百利而无一害”的挣钱买卖。 7、切记切记把上述技能嵌入到你的项目里
在面试过程中我经常会听到一些比较遗憾的回答比如候选人对SQL优化技能讲得头头是道但最后得知这是他平时自学时掌握的并没用在实际项目里。 当然这总比不说要好所以我会写下“在平时自学过SQL优化技能”但如果在项目里实践过那么我就会写下“有实际数据库SQL优化的技能”。 大家可以对比下两者的差别一个是偏重理论一个是直接能干活了。 其实很多场景里我就不信在实际项目里一定没有实践过SQL优化技能。 从这个案例中我想告诉大家的是你之前费了千辛万苦其实方法方向得到也不用费太大精力准备的很多技能和说辞最后应该落实到你的实际项目里。 比如你有过在Linux日志里查询关键字排查问题的经验在描述时你可以带一句在之前的项目里我就这样干的。 又如你通过看底层代码了解了TreeSet和HashSet的差别以及它们的适用范围那么你可以回想你之前做的项目是否有个场景仅仅适用于TreeSet 如果有那么你就可以适当描述下项目的需求然后说通过读底层代码我了解了两者的差别而且在这个实际需求里我就用了TreeSet而且我还专门做了对比性试验发现用TreeSet比HashSet要高xx个百分点。 请记得“实践经验”一定比“理论经验”值钱而且大多数你知道的理论上的经验一定在你的项目里用过。 所以如果你仅仅让面试官感觉你只有“理论经验”那就太亏了。 8、小结本文更多讲述的准备面试的方法
本文给出的面试题并不多但本文并没有打算给出太多的面试题。从本文里大家更多看到的是面试官发现的诸多候选人的痛点。 本文的用意是让大家别再重蹈别人的覆辙因此给出了不少准备面试的方法。 你的能力或许比别人出众但如果你准备面试的方式和别人差不多或者就拿你在项目里干的活来说事而没有归纳出你在项目中的亮点那么面试官还真的会看扁你。
作者hsm_computer
来源
https://www.cnblogs.com/JavaArchitect/p/10011253.html
本文版权归作者所有
面试专场 Redis面试题2020最新版 Spring Boot面试题2020最新版 Tomcat面试题2020最新版 Java虚拟机(JVM)面试题2020最新版 Spring Cloud面试题2020最新版 MySQL数据库面试题2020最新版 消息中间件MQ与RabbitMQ面试题2020最新版 Java并发编程面试题2020最新版 Netty面试题2020最新版 Zookeeper超详细的面试题 Java经典面试题整理及答案详解一 面试官问为什么需要消息队列使用消息队列有什么好处 BAT大厂招聘Java 程序员的技术标准你达到要求了吗 别再说你不会分布式了面试官能问的都在这了 Spring MVC 面经 Java面试----2018年MyBatis常见实用面试题整理 《图解HTTP》面试知道这些就差不多了 Spring经典面试题总结 面试史上最全多线程面试题