3可以说下SpringBoot对项目的帮助
候选人在Java核心,数据库和框架方面的基础技能达标;
1如何达到负载均衡
用少量篇幅列出自己的兴趣和自我总结
结合若干案例,讲述你分析和解决bug的技能;
商业项目是指能挣钱的项目,和它对应的就是些不以挣钱为目的的学习项目或毕业设计项目。正因为客户付了钱,所以商业项目的要求要远远高于学习或毕业设计项目,这也是为什么招聘公司会看重商业项目而会主动过滤学习项目的原因。
1别害怕,因为面试官什么都不知道
1结合配置文件等,说明怎么用的
1让招聘方了解候选人的基本信息。
从面试官角度来看,除了学历等硬件条件外,如果简历满足如下的4点要求,就一般能有面试机会了。
可以说的亮点
通过这类问题,核实候选人是否真的有过项目经验
我们发现大多数初级程序员的水平其实也差不多,这时就得看谁的商业项目经验丰富了。比如有次我们无法从两位候选人中权衡,因为他们的综合条件和面试情况都差不多,但其中有一位在大三阶段有段为期6个月的商业项目实习经验,另一位没有,这种情况下我们就录用了有实习经验的候选人了。
对你以前的项目和技能
2该如何描述公司的工作情况
如果找不出漏洞,就只能算你以前做过
你可以出错,但别出关键性的错误
其实准备的底层代码未必要多,而且也不限于在哪个方面,比如集合里基于红黑树的TreeSet,基于NIO的开源框架,甚至分布式组件的Dubbo,都可以准备。而且准备时未必要背出所有的底层,你只要能结合一些重要的类和方法,讲清楚思路即可。
Stringa=“123”;Stringb=“123”;a==b的结果是什么?这包含了内存,String存储方式等诸多知识点;HashMap里的hashcode方法和equal方法什么时候需要重写?如果不重写会有什么后果?对此大家可以进一步了解HashMap的底层实现;ArrayList和LinkedList底层实现有什么差别?它们各自适用于哪些场合?对此大家也可以了解下相关底层代码;volatile关键字有什么作用?由此展开,大家可以了解下线程内存和堆内存的差别;CompletableFuture,这个是JDK8里的新特性,通过它怎么实现多线程并发控制?JVM里,new出来的对象是在哪个区?再深入一下,问下如何查看和优化JVM虚拟机内存;Java的静态代理和动态代理有什么差别?最好结合底层代码来说。
在面试过程中的职责
最近半年的项目经历和JD匹配度很高;
3数据库方面,别就知道增删改查,得了解性能优化
对于这个问题,我不在乎听到什么回答,我只关心回答符不符逻辑。一般只要答对,我就会给出“在框架层面有自己的体会,有一定的了解”,否则,我就只会给出“只能在项目经理带领下编写框架代码,对框架本身了解不多”。
还是验证你是否做过项目,同时看你是否了解这些技术,为进一步提问做准备
提问方式
表分布式组件方面可以准备的亮点
2以便招聘方通过手机等方式能联系到候选人。
在面试现场,没法让面试官全面了解你的技术亮点。
我们见过不少简历,在描述项目时,也能像上文一样,能根据招聘职位的具体要求展示出自己的匹配点,这种简历属于“达标”,即可以纳入考虑范围。在这个基础上,如果大家在项目里有下表列出的亮点,一定请写上,这就是大家优于别人的地方。
5Linux方面,至少了解如何看日志排查问题
1可以说下JDBC或Spring里是如何管理事务的。
下面以Netty为例,给出相关技巧。
准备时间
能通过微调简历,得到更多的面试机会;
1可以通过MyCAT进行分库分表,从而减轻对单表访问所需要的代价。
既然面试官无法了解你的底细,那么他们怎么来验证你的项目经验和技术?下面总结了一些常用的提问方式。
1可以说下Spring的IOC和AOP是如何优化项目结构的。
总结,面试准备后,结果可能就大不同
一般这些总结点是和职务需求是一致的,这样能让招聘方直接地感受到该候选人的匹配度。
可以说的亮点
如果候选人能证明自己有“排查问题”和“解决问题”的能力,这绝对是个加分项,但怎么证明?目前大多数的互联网项目,都是部署在Linux上,也就是说,日志都是在Linux,下面归纳些实际的Linux操作。
2能在合适的场合选用WeakHashMap。
1如何通过分析log定位问题
不是刺头,团队合作没问题,没有其它大问题。
一般说到了这里,面试官就不怎么问了,哪怕你后面再被问倒,面试官也会感觉你MyCat很熟悉。
健康检查和线上监控
下面给出准备问题的技巧。
2可以说下拦截器等Spring组件对项目的帮助。
哪怕你在前三点表现一般,那么至少也能超越将近一般的候选人,尤其当你在SQL优化方面表现非常好,那么你在面试高级开发时,数据库层面一定是达标的,如果你连第四点也回答非常好,那么恭喜你,你在数据库方面的能力甚至达到了初级架构的级别。
面试官
针对某技术,问些项目里一定会遇到的问题,比如候选人说做过数据库,那么就会问索引方面的问题
没有过长职业空白期或不稳定等情况;
实在不行,你也可以说“我除了做开发,也做了了解需求,测试和部署的工作,因为这个项目人手比较少,压力比较大”,这样你也能展示你有过独挡一面的经历。
分布式数据库
5在简历中描述项目时可以添加的亮点
使用这种ORM技术时,如何优化访问和操作数据库的性能。
简历中应包含的要素
2结合业务,说下具体的效果,比如限流后有什么好处。
技术方面
表数据库方面可以准备的亮点
3举例说明该如何准备面试问题
其实这里仅仅是抛砖引玉,或者提到的技术比较高深,但可以讲述的技术还可以是线程池,MyBatis组件,Redis,甚至是虚拟机优化等。哪怕是初级开发,也能多少抓住一两个点,按上述思路说明。
由此大家能看到,其实很多事先可以准备的点,其实是你没有想到,但你项目里一定用过。你据此准备,在通过上述技巧在面试中合理地找机会说出来,你面试成功的可能性一定会大大增加。
2以Netty为例,讲述引出值钱话题的技巧
能通过less命令打开文件,通过Shift+G到达文件底部,再通过+关键字的方式来根据关键来搜索信息;能通过grep的方式查关键字,具体用法是,grep关键字文件名,如果要两次在结果里查找的话,就用grep关键字1文件名|关键字2--color。最后–color是高亮关键字;能通过vi来编辑文件;能通过chmod来设置文件的权限。
第应当引导面试官问些“框架”和“性能调优”等值钱方面的技能,这样才能最大程度地展示你的能力,同样,此类问题需要面试前准备。
异常处理方面
通过上述的问题点,我其实不仅仅停留在“会用”级别,比如我不会问如何在ArrayList里放元素。大家可以看到,上述问题包含了“多线程并发”,“JVM优化”,“数据结构对象底层代码”等细节,大家也可以举一反通过看一些高级知识,多准备些其它类似面试题。
2面试官提问的方式
1能根据项目的需求选用合适的集合对象,比如知道ArrayList和LinkedList的差异,并能合理选用。
这些属于加分项,同等情况下能优先录用
3尽量把学习培训项目和毕业设计项目往商业项目上靠
能通过挖掘项目经验,证明自己的技能和JD契合;
3可以通过建索引,建分区等手段来优化SQL性能。
又如一个JD里说要用到微服务技术,那么就可以说,项目里用到了SpringCloud框架,用到了Ribbon,Eureka等组件,容器是Docker。用好以后,在发布时会发现,各模块之间的调用耦合性大大降低。
在面试过程中,如果候选人出现如下的表现,那么很有可能过不了面试,请大家注意。
Java集合对象
第还是要准备必要的基础问题,还是要刷题,还是要准备各种说辞,因为面试前的全面准备,是引导的基础。
这个外汇交易系统包括挂盘撮合成交、实盘成交、反洗钱和数据批处理等模块,我主要负责了挂盘撮合成交模块,其中用到了SpringMVC架构,数据库是Oracle,用Mybatis实现的ORM,该系统是运行发布在Weblogic服务器上,我们还用了Nginx来实现负载均衡,用Redis来缓存数据。在这个项目里,我还用到了JS实现了一些前台页面。
先从面试官的角度看下,哪些人能面试成功?
SQL高级方面,比如groupby,having,左连接,子查询,行转列等高级用法;建表方面,你可以考虑下,你项目是用三范式还是反范式,理由是什么?尤其是优化,你可以准备下如何通过执行计划查看SQL语句改进点的方式,或者其它能改善SQL性能的方式;如果你感觉有能力,还可以准备些MySQL集群,MyCAT分库分表的技能。比如通过LVS+Keepalived实现MySQL负载均衡,MyCAT的配置方式。同样,如果可以,也看些相关的底层代码。
面试时如何不被面试官牵着鼻子,自我把控面试的走向?
6哪些简历可以通过筛选
你理解的框架底层代码;
能在finally从句里写释放资源的代码
问题列表可以是,项目里你用到哪些组件?用到哪些通讯协议?如何进行模块间的交互等等,然后先回答问题本身,再扩展到Netty。但请记住,别自说自话,因为过犹不及,其它技术照此办理
第这里可以结合职位的需求,描述JD里要求的技术在项目里是如何用的。同样这里也应围绕技术,而别多写业务细节
简历未必能过筛选,甚至没有面试机会;
3以案例说明,在回答问题时引出准备过话题的技巧
2出了问题,如何发出警告
再给大家举个例子,比如Java虚拟机内存管理和数据库优化是绝大多数项目都要遇到的两大问题,大家都可以在叙述项目经验时说,在这个项目里,我们需要考虑内存因素,因为我们的代码只允许在2G内存环境中运行,而且对数据库性能要求比较高,所以我们经常要监控优化内存和数据库里的SQL语句。这样当面试官深入提问时,就能抛出自己准备好的虚拟机内存优化和数据库优化方面的说辞。
第大致描述项目的需求和包含哪些模块,然后简要说下你做了哪些模块,同时说下在这个项目用到的开发工具和主要技术点,这部分的描述如下所述。
Java面试者该准备哪些加分项技能
可以说的亮点
2015年11月到2017年10月,在xx公司,职务是Java高级开发。离职理由是想进一步发展。
多线程方面
可以讲下整合框架的细节,并可以举例说明整合后的框架能很好地适应需求的变更。
沟通过程
这两个本身就是个亮点,如果大家用过,可以结合项目来说明。
面试前你有充足的时间准备
合理的离职理由可以是,想为自己提供一个更大的发展空间,或想通过升级来独当一面,以此进一步提升自己的能力,或公司因资金等方面的原因倒闭了。总之,这不是我主观上不稳定,而是由于客观原因导致我不得不换工作。
3熟悉各种并发组件
看你是否真的做过这些项目
项目里用到的设计模式;
但如果大家面试前不准备,或者准备不到位,那么就会面临如下的后果了:
其实这就是我们写简历的方向,在针对具体公司投递简历时,还可以以此为目标,微调简历。
定位排查和解决问题
根据这个原则,大家可以按次序在简历中列出如下表所给出的要素。
1如何通过健康检查确定系统正常运行
技术方面
无法证明项目里用到的技术和JD高度契合;
2可以说下Spring里的声明式事务的做法和优点。
表JavaCore方面可以准备的亮点
在描述项目里框架技术时,最好你再带些分布式的技术。下面我列些大家可以准备的分布式技术。
组件应用
这里推荐的做法是,不要合并公司,但可以写明理由,比如当时小王是被外派公司A以人力派遣的形式外派到B公司,但没过多久A公司因某种原因不再具备人力派遣的资质了,这时小王就不得不终止与A公司的合同转而和B公司签约,这样虽然看上去小王是换了公司,但实际上没有。通过类似的合理解释,招聘方就不再会质疑小王的工作能力和稳定性了。
能事先尽可能多地挖掘亮点,并在面试时展示。
2如何进行失效转移
技术方面
第可以写上合适的离职理由,尤其当你短时间里换工作比较多,可能引起招聘方的质疑的情况里,更该考虑些合适的理由。
可以说的亮点
所以这时你可以一笔带过,比如你可以说,“我们的项目对数据要求比较大,忙的时候平均每小时要处理几十万条数据”,这样就可以把面试官引入“大数据”的方向。
技术方面
总之,在描述公司情况时,一旦出现会让招聘方感觉你能力不强或不稳定时,一定得醒目地写上足以信服的理由,这样你的简历才会有机会被继续被读下去,进而你才会有技术面试的机会。
3可以适当讲一些集合的JDK底层实现代码。
在实际项目里,大多数程序员用到的可能仅仅是增删改查,当我们用Mybatis时,这个情况更普遍。不过如果你面试时也这样表现,估计你的能力就和其它竞争者差不多了。
第三步,结合业务讲用到的技术,但别展开:
4描述项目的技巧
1框架是重点,但别让人感觉你只会山寨别人的代码
我听到的回答有:增加了Redis缓存,以避免频繁调用一些不变的数据。或者,在MyBitas的xml里,select语句where条件有isnull,即这个值有就增加一个where条件,对此,会对任何一个where增加一个不带isnull的查询条件,以免该语句当传入参数都是null时,做全表扫描。或者,干脆说,后端异步返回的数据量很大,时间很长,我在项目里就调大了异步返回的最大时间,或者对返回信息做了压缩处理,以增加网络传输性能。
你有足够的技巧,也可以从网上找到足够多的面试题
按此格式写之前的公司情况
JDBC方面
其实就问些通用的有规律的问题
如果单纯使用SSM框架,大多数项目都会有痛点。比如数据库性能差,或者业务模块比较复杂,并发量比较高,用SpringMVC里的Controller无法满足跳转的需求。所以我一般还会主动问:你除了依照现有框架写业务代码时,还做了哪些改动?
1哪些问题面试中大概率会被问到
表JavaWeb框架方面可以准备的亮点
只能听你说,只能根据你说的内容做出判断
以上仅仅是用3个组件举例,大家还可以看下Redis缓存,日志框架,MyCAT分库分表等。准备的方式有两大类,第一是要会说怎么用,这比较简单,能通过配置文件搭建成一个功能模块即可,第二是可以适当读些底层代码,以此了解下协议,集群和失效转移之类的高级知识点。
4Java核心方面,围绕数据结构和性能优化准备面试题
2能通过批处理来提升操作性能。
第工作情况可以和项目经验分开写,一般会在后继的项目经验里写具体用到的技术框架以及所做过项目的细节,在这里的工作情况描述里,可以不用过于复杂,让招聘方看到你之前的公司情况即可。
通过面试,JD上的技能候选人大多能掌握;
2面试时的错误表现
对于提到的技术,连最基本的问题也回答不上,这就说明候选人这项技术没掌握;
项目管理和部署工具;
按倒叙列出工作过的公司,并列出在这些公司里的项目经验,这部分的技能下文会详细描述。
3可以举例说明事务隔离级别和事务传播机制的用法。
比如面试官问你Spring相关问题,假设问到,你对Spring依赖注入了解多少,在说好Spring相关问题后再提一句,我们同时用Spring,以低耦合的方式整合了MyCAT组件,从而达到了分库分表的效果,这样就引出了分库分表的话题。
让招聘公司进一步了解候选人
不会太为难你,除非你太差
SQL调优
2问题的根源和解决方法
深入核实你的项目细节
ORM,比如Mybatis
如何证明自己对一个知识点非常了解莫过于能通过底层代码来说明。我在和不少工作经验在5年之内的程序员沟通时,不少人认为这很难?确实,如果要通过阅读底层代码了解分布式组件,那难度不小,但如果如下部分的底层代码,并不难懂。
能知道哪些属于值钱技能,并能结合业务准值钱技能和调优技能的说辞,而且能不露痕迹地展示;
如何应对高并发的场景
反向代理方面,nginx的基本配置,比如如何通过lua语言设置规则,如何设置session粘滞。如果可以,再看些nginx的底层,比如协议,集群设置,失效转移等;远程调用dubbo方面,可以看下dubbo和zookeeper整合的知识点,再深一步,了解下dubbo底层的传输协议和序列化方式;消息队列方面,可以看下kafka或任意一种组件的使用方式,简单点可以看下配置,工作组的设置,再深入点,可以看下Kafka集群,持久化的方式,以及发送消息是用长连接还是短拦截。
很了解
Spring和Mybatis等的整合
建表时需要根据项目的数据情况,考虑是采用三范式或是反范式。
总结性地列出自己所掌握的技能。比如:
在这基础上,可以适当列些能成功帮到自己的总结点。
这方面,你可以准备如下的技能:
一般工作在3年内的候选人,大多仅仅是能“山寨”别人的代码,也就是说能在现有框架的基础上,照着别人写的流程,扩展出新的功能模块。比如要写个股票挂单的功能模块,是会模仿现有的下单流程,然后从前端到后端再到数据库,依样画葫芦写一遍,最多把功能相关的代码点改掉。
在面试里,不管如何引导面试官,其实如下方面的问题很大可能会被问到,所以在面试前可以提前准备。
可以列出和应聘岗位相关的培训经历和得到过的奖励
1能通过PreparedStatement的预处理方法来防止SQL注入。
预估面试题,准备对应的回答
ArrayList,LinkedList的底层代码里,包含着基于数组和链表的实现方式,如果大家能以此讲清楚扩容,“通过枚举器遍历“等方式,绝对能证明自己;HashMap直接对应着Hash表这个数据结构,在HashMap的底层代码里,包含着hashcode的put,get等的操作,甚至在ConcurrentHashMap里,还包含着Lock的逻辑。我相信,如果大家在面试中,看看而言ConcurrentHashMap,再结合在纸上边说边画,那一定能征服面试官;可以看下静态代理和动态代理的实现方式,再深入一下,可以看下SpringAOP里的实现代码;或许SpirngIOC和MVC的底层实现代码比较难看懂,但大家可以说些关键的类,根据关键流程说下它们的实现方式。
数据库和JVM调优;
1会结合项目使用线程池
面试时该如何讲解技术项目赢得面试官好感
比如小张在大三时帮计算机系的王老师所在的ABC软件公司干了半年的活,如果小张在简历上写:“在校期间,从x年x月到x年x月完成了xx系统,用到了xx技术”,那么这多半会被当成类似于课程设计的学习经验,但如果再加上如下关键性的描述:“这个系统是属于xx公司的xx商业项目里的一部分,我和另外三位开发人员做了半年,最终这个系统成功上线并在客户xx公司的环境里投入运营”,那这样小张的商业项目总年限里就能加上这半年时间了。
结合业务需求点,说下为什么要用这个技术,怎么用的,以及用了有什么好处?比如为了优化网络通讯协议,所以用基于TCP协议的Netty,业务模块里的xxx功能是用到netty;准备下踩到的坑,比如在某业务场景里,我遇到了半包粘包问题,我是通过调试底层代码解决的;用了Netty对项目的帮助。比如Netty是基于TCP协议的,它要比Http协议要轻,所以通讯性能高,且Netty内部的Reactor线程模型对系统的IO帮助很大;基于零拷贝、读写索引和异步处理机制,准备些底层代码,在面试里说明;顺带再准备下Netty的组件,工作流程等问题,这能搜到问题和相关说辞。
我们可以根据职位需求,从如下几个方面来描述项目经验。
2别单纯看单机版的框架,适当了解些分布式
2可以通过执行计划查看SQL的所消耗的代价,并据此调优。
在如下的一些表格里,归纳的加分项甚至初级开发多少也能准备,其中涵盖了诸多方面。
让你描述工作经验和项目,看看你说的是否和简历上一致
可以这样说,这个项目是xx产品的xx模块的,有xx和xx模块,我做了xx模块,用了半年,我的组里一共有5个人。这里可以谈下业务,但别深入,因为面试官不熟悉,也不想熟悉候选人的业务,这块时间控制在1分钟之内。
2有3年Oracle经验,有2年Oracle调优经验。
2012年2月到2015年11月,在xx公司,职务是Java初级开发。离职理由是想进一步发展。
问用法,比如直接提问,项目里你netty怎么用的?这块大家可以结合项目准备说辞;问流程,比如结合业务,讲下nginx负载均衡的用法?这也可以结合项目和网上搜到的资料准备说辞;问原因,比如为什么要用netty?这块就要结合项目说明了;问技术点,比如netty里零拷贝怎么回事?对此,需要对简历上提到的每个技术点,以及面试过程中将要提到的每个技术点,搜相关面试问题,并结合业务说明;问基础知识,比如finally从句的用途,这就可以通过刷题来获取了。
那么在面试时,如何找到个好机会说出你准备好的上述底层代码?在面试时,总会被问到集合,SpringMVC框架等相关知识点,你在回答时,顺便说一句,“我还了解这块的底层实现”,那么面试官一定会追问,那么你就可以说出来了。
一般在面试前用30分钟阅读你的简历
下面列些我一般会问的部分问题:
在项目经验描述里,能通过项目用到的技术经验等,具体地给出自己“匹配”该岗位的证明。
1有3年Java经验,有2年SpringMVC经验。
在准备面试时,归纳框架里的要点并不难,我就不信所有人在做项目时一点积累也没,只要你说出来,可以说,这方面你就碾压了将近7成的竞争者。
针对某个项目,不断深入地问一些技术上的问题,或者从不同侧面问一些技术实现,看你前后回答里面是否有矛盾
又如小李在做毕业设计时,花了7个月的时间参与了导师的一个电商商业项目,他主要的工作是设计一个调度算法,但也参与了一些诸如订单管理模块的工作。如果他就平淡地写一句,毕业设计是xx,毕业论文是xx,那么招聘方看过就算了,也不会认为小李在做毕业设计时还有过商业项目经验,这样小李未免有些吃亏。
还有更多更实用的Linux命令,但在实际面试过程中,不少候选人连一条linux命令也不知道。还是这句话,你哪怕知道些很基本的,也比一般人强了。
2能通过锁或信号量等手段正确地处理多线程并发时的数据一致性。
但在引导的时候,请注意如下的三点。
一定请记住,公司只能通过简历认识到你,简历上没写清楚等同于你不行。
看你简历上项目里用到的技术,比如框架、数据库,然后针对这些技术提些基本问题
3能通过实例讲述事务隔离级别的含义
说得太流利或太磕磕巴巴,这就说明在背词或者是表达有问题。
本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。
这部分的内容应当尽量靠前,在罗列公司情况时,请大家注意如下的四个要点。
而可能会导致没面试机会的离职原因是,待遇问题,或无法承受大压力,或同事领导排挤。这类理由往往会暴露出候选人的缺点,所以不建议大家采用。从这意义上来讲,“合同期满”也不是一个好的离职原因,因为如果候选人能力强,那么为什么原公司不和你续约呢?
基本信息,比如姓名,性别,年龄,目前所在城市,是否在职,手机和电邮等。
但如果按照上述方法准备,大家很大程度上能得到如下的收获。
不知道将会问哪些问题,所有问题都现场想;
其它能帮助到你的加分项,比如工期紧,用到新技术等。
2可以通过集群等方式来承担对数据库的过量的访问请求。
不仅限于coding,更能展示项目管理,linux,项目部署等方面的技能;
第面试官不接口的,应当立即停止,再说下去就属于自说自话了。
1可以通过查看日志等方式看哪些SQL需要调优。
从x年x月到现在,我参与某外汇交易系统,客户是xx银行,这个项目组的构成是,1位项目经理外加10位开发,总共的规模大概在80个人月左右。
这部分一般是按时间倒叙描述,比如可以按如下的格式写:
Java程序员准备和投递简历的实战技巧
6通读一段底层代码,作为加分项
1简历中应包含的要素,一个都别落下
第尽量别出现长时间的“空白期”,比如上份工作是2月份结束的,而下份工作是6月开始的。如果出现持续三个月以上的“不在职状态”,需要在简历中说明情况,比如这段时间你是换城市发展了,或辞职复习考研或复习考公务员,总之得找个能说得过去的理由。
在很短的时间内防守成功即可
4你可以引导的加分项
文章为作者独立观点,不代表股票交易接口观点