Java⾯试时,该如何准备亮点?
我说个观点,对于在校⽣,也对于想通过社招跳槽的朋友,准备java项⽬的亮点不能光靠做业务,⼀定得通过事先定制、植⼊项⽬业务、准备说辞和准备相关问题等⽅式准备亮点。
先说下可能被⼤多数求职者写⼊简历并在⾯试时当亮点准备,但其实不是亮点的要素。
1 做了很多的业务模块。其实这些都是属于增删改查的操作,可能业务细节有差别,但从层⾯来上看,其实差别不⼤。业务开发多了,顶多是熟练初级开发和新⼿初级开发的差别。
2 同时做了前端和后端,或者前端界⾯很好看,或者在前端引⼊了多种效果和框架。其实java主要是负责后端,讲具体点就负责从(控制器层)收到请求开始处理的⼀系列动作。如果求职者有前端开发经验,这是个加分项,但⾯试官⼀定不会因为前端做好但后端不熟⽽录⽤这位求职者,相反哪怕求职者只熟悉后端开发,前端⼀点不懂,这也照样有机会应聘成功。
3 实现了⼀些较为复杂的功能,⽐如对⽇期进⾏特殊处理的能⼒,或者能实现很复杂的业务逻辑。上⽂也说了,能处理较为复杂的业务,依然属于开发项⽬的能⼒,有这项技能,顶多能证明求职者属于熟练的初级开发。
况且,上述要点在⾯试中还未必能很好地展⽰,⽐如你说你前端界⾯做的好看,你不⼤可能当场演⽰吧,
⽐如你说你做的业务模块数量多,功能复杂,在⾯试时也未必能很好地说明,但如下给出的亮点,⼀⽅⾯难度不⾼,对初级开发也适⽤,另⼀⽅⾯准备起来也不难,⾯试前只要⽅法得当,只要花费少量时间就能达到能侃侃⽽谈的地步。
亮点1,我熟悉项⽬开发、测试和部署等流程。
其实这个亮点是⽩送的,只要是做过项⽬,那⼀定经历过这个流程,但⾯试中很少有⼈能把这当成亮点说。这块你可以说,在这个项⽬⾥,我们是⽤Maven管理项⽬,⽤jenkins部署项⽬,⽤git来管理代码。我在这个项⽬⾥,除了写代码外,还参与了单元测试和联调。我们代码发布时,最终会把java代码打成jar包并部署到linux服务器上。
说实在,不少⾯试官也不会认为此项亮点有多值钱,但你这样会给⾯试官留下“有项⽬测试、部署和管理等⽅⾯的综合能⼒”的印象。⽽且,我知道有些求职者,尤其是在校应届⽣,他们在简历上的的项⽬可能是学习项⽬,但如果你在项⽬⾥加上这个亮点,那么如果⾯试官不细问,就会认为这是更加值钱的商业项⽬。
亮点2,我有过数据性能调优⽅⾯的经验。
如果你就说,我⽤过索引和redis缓存,也有数据库调优经验,那么听起来太空洞,⽽且⾯试可能会通
过问相关的底层细节来确认。要知道redis和数据库底层细节太繁琐,求职者,尤其是初级开发的求职者被问倒的可能性很⼤,但如果你按如下的⽅式植⼊项⽬后再说,就能最⼤程度展现该亮点。
1 我们项⽬在部署后,会对MySQL数据库进⾏监控,这块的监控软件有CAT、newrelic或Zabbix等,⼀旦数据库SQL语句执⾏时间超过5秒(或其它时间),我们就会收到告警邮件。
对于初级开发来说,你甚⾄不⽤说监控的细节,因为这不是初级开发的职责范围,你就说这套监控是运维或项⽬经理搭建的。不过总是先得知道哪些SQL需要调优,才能继续往下说吧,你说出这套说辞,就能让⾯试官感觉你的数据库调优经验来⾃项⽬。
2 你得把分析过程讲出来,遇到长SQL以后,我们会⽤执⾏计划(Execute Plan)分析该sql,这⾥⼤家可以去了解下执⾏计划的知识,⽐如如何运⾏,其中包含哪些内容。同时,我们会通过⽇志,去看当时做了什么业务。
3 经过分析,通过看执⾏计划和看⽇志后,我们知道了原因,原因最常见的是索引,或者是存在多张⼤表关联,或者是同类sql太多,对数据库压⼒太⼤,没建Redis缓存。
在准备亮点前,需要看下索引和Redis缓存的概念,⽐如索引的数据结构,哪些情况下该建索引,复合索引是什么,Redis的数据结构是什么?Spring Boot项⽬是怎么使⽤Redis缓存的。
但这⾥,为了增加可信度,你更要结合项⽬需求说。⽐如你说,对此我们建了索引,这样就很笼统,但你如果说,经过看执⾏计划后发现,是因为在从订单明细表⾥根据⽤户名去搜索时,对⽤户名字段没建索引,或者说,在下订单的过程中,需要根据⽤户ID多次到风控表⾥去查数据,这块没⽤缓存,所以导致性能慢。 这样结合业务说,就⼀定能在潜移默化过程中,向⾯试官灌输“你调优经验来⾃项⽬”的事实。
4 同时再讲下怎么解决的,有始有终。解决⽅法⽆⾮是建索引、建复合索引或引⼊缓存。
5 你在说好上述整套说辞后,⾯试官可能会问⼀些细节,⽐如索引和Redis的概念等,这块你⼀定得需要刷⼋股⽂来准备。这块如果你⼼有余⼒的话,甚⾄可以准备些值钱技能,⽐如Redis缓存穿透、Redis缓存的超时时间,或者是Redis持久化技能,或者你还可以再准备,通过Redis集或MyCAT分库分表组件来提升数据库性能。
其实⾯试官对性能慢的原因以及解决⽅法不怎么关注,更关注⼀整套分析和解决数据库性能问题的步骤和思路。⽽且上述说辞和准备要点所涉及到的技能初级开发都能准备到位。⽽且,哪怕简历上的项⽬是学习项⽬,或者来⾃培训班(当然应当尽量让⾯试官确信是商业项⽬),照样可以套上上述数据库调优⽅⾯的说辞。
亮点3,我有过JVM调优⽅⾯的经验。
这⾥就直接展开说明了。
1 还是先说监控,我们项⽬在部署后,会对JVM内存进⾏监控,CAT、newrelic或Zabbix等同样能监控JVM内存,⼀旦内存⽤量超过80%,且持续时间超过5分钟,我们就会收到告警邮件。
这⾥额外说下,为了确保项⽬的⾼可⽤,⼀般代码是会被部署到多个linux服务器上,⽐如把spring boot项⽬打成jar包,再通过jenkins,或⼲脆⼿动复制,部署到多个linux服务器上。每台部署项⽬的服务器,都会部署这套监控系统。
2 再说排查流程。收到告警邮件后,我们会看该服务器的dump⽂件,其中能看到当时的内存对象,同时会看业务⽇志,看当时是什么业务导致了内存⽤量⼤增。
这⾥⼤家可以去看下dump⽂件的结构,同时可以操作下通过jmat⼯具打开dump⽂件的步骤,因为你⼀旦说了,⾯试官可能会细问。
3 再结合业务说原因,⽐如可以说,在导⼊客户数据的过程中,我们是会从多个⽂件⾥读取数据再导⼊,在导⼊后,没有关闭IO对象,所以导致内存⽤量⼤增。
同样能导致内存⽤量⼤增的原因还有,⽤好HashMap等没有不关掉,或者是缓存Redis数据时没设置超时时间,这就导致缓存对象⼀直占内存。如果⼤家要说其它原因,最好也得结合业务说。
java零基础该怎么学4 再说下怎么解决,⽆⾮是关掉⽂件或对象。不过这⾥,请⼤家同时要准备下Java虚拟机结构、垃圾回收流程和垃圾回收算法等细节,有可能⾯试官会进⼀步提问。
亮点4,我有过通过看linux⽇志分析和解决问题的能⼒
这个亮点有哪些值钱点呢?⼤多数初级开发是只会在windows上做业务,不知道项⽬是部署在linux服务器上,⽽且缺乏linux的操作经验。这个亮点所涉及的linux技能⽐较简单,初级开发也能说,但你⼀旦说出这个亮点,就不仅能进⼀步证明该项⽬是商业项⽬,⽽且还能说明你有linux开发经验,更不要说你还具有分析和排查问题的能⼒了。这⽅⾯的亮点该怎么说呢?⽼规矩结合项⽬说。
1 先说下问题的表现形式。你可以说,在⼀些下订单的流程中,经常会出现500服务器错误。
2 再说怎么排查。发现问题后,你登录到linux服务器上,⽤vi命令打开⽇志⽂件,再⽤根据错误关键字和时间,搜索到上下⽂,再根据该⽇志的线程ID去看在该⽇志⽂件的其它 ⽇志,如果涉及到其它业务模块,可以⽤traceID去。
3 再说下问题原因和怎么解决。原因你怎么说都⾏,⽐如价格参数不符规范,或请求类型应该是POST但发GET,往深了说可以说是因⾼并发导致的问题。怎么解决就⼀句话的事情,⽐如发现问题后,我们加了异常处理机制。
4 同时再去看下项⽬⾥通过logback输出⽇志的⽅式,和linux打开⽂件搜索关键字等命令,以便⾯试官细问。
亮点5,我有过通过看底层源码排查问题的能⼒
对于初级开发,可以说个简单点的,⽐如在库存盘点的业务流程⾥,我们是要通过迭代器遍历ArrayList类型的库存信息。在遍历时,我们同时做了修改,所以就导致了“快速失效”的问题。
快速失效的底层源码不难,⽹上⼀搜⼀⼤堆,⽽且解决⽅法也简单,就别边遍历边修改了。
关于底层源码,哪怕是初级开发也可以准备ConcurrentHashMap的,因为其中不仅包含了红⿊树等数据结构,还包含了transient和violate等关键字,还包含了线程同步等细节,⽽且底层源码不难,⽹上资料很多。
当然⾯试中可以准备的亮点不⽌这些,还可以有分布式组件和集等,不过上⽂提到的亮点,哪怕是零基础的,准备起来也不难。再啰嗦下,准备时需要注意如下的要点。
1 别单写在简历上,更要按上⽂给出的思路准备说辞,⾯试时⼀定会被问。
2 我知道,哪怕是不少正规项⽬,也未必能有上述亮点的实践机会,更别提学习项⽬了。所以在准备时,⼀⽅⾯需要掌握技能,另⼀⽅⾯更得结合项⽬需求和业务说。
3 得按监控、发现、排查和解决的流程说,同时更要准备相关细节,⽐如数据库调优⽅⾯需要准备Redis和索引等⼋股⽂。当然,准备亮点的同时,⼋股⽂和算法这类功夫不能少。
4 有时候⾯试官会质疑,或者细问,⽐如会问,这么简单的问题为什么你们之前的测试没发现?你或者可以说是在测试环境上发现这个问题的,或者就⼲脆咬定,是在⽣产环境上发现。⾄于为什么之前没测出来,你就说你不知道,毕竟你才是⼀个初级开发。
或者会问,你说了通过jenkins部署,说了通过new relic监控,你说下细节。或者问些⽐较深的问题。这些事情其实是资深开发或架构做的,你⼀个初级开发能知道就不错了,你可以⼲脆说,这些是我们架构或项⽬经理做的,⾯试官听了也就不会再问了。
5 更重要的是,你得会引导。⽐如你在⾯试中介绍项⽬时,你说,在这个项⽬⾥,我有过数据库性能调优的经验,有过排查内存性能的经验,有通过看linux⽇志解决线上问题的经验,有通过看底层源码解决实际问题的经验。这样⾯试官就会继续问了,你就能借机说出来。
或者你可以在回答到相关问题后再提⼀句,⽐如你回答到JPA等数据库问题后,你就说,我除了会⽤JPA连数据,还解决过数据库性能调优⽅⾯的问题,然后⾯试官问了就再展开。
通过上⽂给出的步骤,⼤家能发现其实Java项⽬的亮点不是来⾃业务,⽽是来⾃技术,⽽且你有亮点的实践经验不会说,这也没⽤。
但如果你按上⽂给出的步骤,把这些亮点写⼊简历,⾯试前好好准备,⾯试时全⾯抛出。这时哪怕你是零项⽬经验的,⾯试官也能认为第⼀你的项⽬是商业项⽬,第⼆你有资深的项⽬开发经验,这就达到了你准备和抛出亮点的⽬的了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论