MyBatis面试感悟—-一叫做3年工作经验的程序员应该享有的艺

初稿地址http://www.cnblogs.com/xrq730/p/5260294.html,转载请注明出处,谢谢!

 

前言

以跟共事发生约定再增长LZ自己吗爱不释手做了一件事之后进展总结,因此有了立首稿子。这篇稿子大部分情节还是面向全程序员群体之,当然为LZ本身是做Java开发之,因此产生有情也是专程面向咱们Java程序员的。

简简单单先说一下,LZ坐标杭州,13到本科毕业,算上年前于阿里巴巴B2B事业部的面试,一共发面试了发出6小庄(因为LZ不思请假,因此只是每个晚上错过另铺面面试,所以面试的铺比较少),其中成之发生4贱,另外两寒破产的由来在:

1、阿里巴巴B2B事业部的面试,两轮技术面试都过了,最后一车轮面试是对方的牵头,由于听说技术面试了了差不多90%都面试成功了,所以LZ在和主持的攀谈着为是放荡,说得天花乱坠,很多祥和在乎知道和不晓得之物都一直脱口而出了,结果往往为对方一反问就咨询得哑口无言。事后想,模棱两可的答案是面试中尽忌讳的,这次的挫折为深受LZ认真地对待后的每一样次等面试

2、另外一下破产的是同小有些商店,也不怕20来个人吧,整个集体是支付宝出创业之,非常了得。面试结束LZ多方了解了一下,对方以为我基本功什么的且没错,但是事实上项目更或者欠缺一些,因为对方是创业型公司,需要人上亲手即可知干活,因此我在这上还无是特别适合他们组织

关于其它成功的季下企业,给LZ的面试评价还分外高之形似,但LZ也无思量记流水账,因此尽管不一一列举每家店铺的面试过程了,下面LZ主要讨论作同一叫工作三年左右之Java程序员应该有的有技巧与个人的局部别感悟。

 

至于程序员的几个等级

每个程序员、或者说每个工作者都应生出谈得来的职业规划,如果见到此的情侣莫协调的职业规划,希望你得考虑一下融洽的将来。

LZ常常想自己之未来,也从友好的思想中总出了一些东西,作为第一有来讨论。LZ认为相同名叫程序员应该生出几只号(以下时还算是上实习期):

首先路—-三年

  • 我看三年对程序员来说是首先单诀窍,这个路将会见淘汰掉一批判不入写代码的人。这同一阶段,我们倒来校园,迈入社会,成为同名程序员,正式从书册及之内容迈向真正的铺面级支。我们知道怎么样组织合作、如何使类管理工具、项目版本如何决定、我们描绘的代码如何测试如何在线上运行等等,积累了自然之支付经历,也本着代码来矣一定深入的认识,是一个于纯粹的Coder的流

第二品级—-五年

  • 五年而是别程序员的第二只门槛。有些人当三年里,除了就工作,在空闲时间基本不会见研究别的东西,这些口世世代代就是是个Coder,年纪很组成部分必将让再年轻的丁给代表;有些人当三年里,除了写代码之外,还热衷让钻研各种技能实现细节、看了N多好题、写一些博客、在Github上享受技术,这些人于五年后肯定有在技术上独当一面之能力并且了解自己前途底腾飞大方向,从一个Coder逐步走向系统分析师或是架构师,成为项目组中不可或缺的人

其三号—-十年

  • 十年以是另外一个窍门了,转行或是继续召开同称作程序员就当这节点上。如果当前几乎年就抱定不转行的思路并且为之不竭吧,那么以十年的这个节点上,有些人必成长为同一叫对行业有深深认识、对技术有深深认识、能从零开始对一个成品进行剖析的程序员,这样的口在商家骨干担任的还是CTO、技术专家、首席架构师等极端重大之岗位,这对于好绝对是同一码荣耀的从,当然老板在经济上也绝不会亏待你

率先片段总结一下,我觉得,随着你办事时限的增高、对生存对生认识的深透,应当不断揣摩三个问题:

  1. 自我究竟适不抱当一叫做程序员?
  2. 自到底应不应该一辈子缘程序员为职业?
  3. 自家对编程到底持有的是同等种什么的神态,是够用便哼吧还是绵绵研究?

末尾,明确好的职业规划,对自己之计划性负责并为底努力。

 

关于路更

LZ以网上经常看看部分别的朋友发提出项目更的问题,依照LZ面试的发吧,面试重点关押几乎接触:型阅+基本技术+个人潜力(也即是值不值得培养)。

关于路更,我认为出现编程网的开山方腾飞老师说的同样段落话很好:

介绍产品时面试官会考察应聘者的沟通能力和思考能力,我们大部分情况都是做产品的一个功能或一个模块,但是即使是这样,自己有没有把整个系统架构或产品搞清楚,并能介绍清楚,为什么做这个系统?这个系统的价值是什么?这个系统有哪些功能?优缺点有哪些?如果让你重新设计这个系统你会如何设计?

我觉着这虽已经好概括了。也许你一味工作同样年,也许你开的是路蒙开玩笑的模块,当然这些自然是您的劣势且无法改观,但是什么弥补这劣势,从方先生的语被本人总几沾:

  1. 不言而喻而的项目到底是举行什么的,有怎样功效
  2. 显著而的种的整架构,在面试的时段会解地描绘于面试官看并且亮地指出从哪里调用到哪里、使用啊办法调用
  3. 明白而的模块于整整项目受到所处的职与作用
  4. 显而易见而的模块用到了怎样技术,更好一些底得再了解一下不折不扣项目用到了如何技术

于公无法更改自己的工作时限、自己之无那么有说服力的门类更的情形下(这自然是看分项),可以透过这种艺术来定水平上地弥补并且提高面试官对君的好感度。

补偿某些,在面试中聊你的档次的时候,有一个题目90%凡绕不了的:开口一下若以路面临解决过之比较复杂的问题。这得在工作中不断去发现同追究,不需要多,在您自己时之种类中设你找到一两个能够说的题目不怕尽。一个粗技巧是,即使问题无是公解决之而是别人解决的,但是若将这个题材打明白、搞透了,在面试的早晚你平可以把这题目看作是您协调解决的吧—-毕竟,谁来随便这题目立即究竟是匪是您解决的吧?

 

有关专业技能

写了路随着写写一叫作3年工作经历的Java程序员应该具备的技艺,这或是Java程序员们比较关心的内容。我这边而证实一下,以下列举的始末未是还要会的事物—-但是如果你掌握得更多,最终会获取的评论、拿到之薪金势必也愈强。

1、基本语法

即包static、final、transient等要害字的企图,foreach循环的规律等等。今天面试我问问你static关键字来哪作用,如果你答出static修饰变量、修饰方法我会觉得你合格,答出静态块,我会觉得你不错,答出静态内部类我会觉得你充分好,答出静态导包我会对而可怜乐意,因为会见到你很热爱研究技术。

极透彻之一律不良,LZ记得面试官直接问到了自己volatile关键字之最底层实现原理(顺便插一句,面试及被面试本身就是是对立的,面试官能问是题目还要也让面试者感觉到面试官也是一个疼研究技术之丁,增加了面试者对商家之好感,LZ最终摘取的便是问了之问题之号),不要认为就最吹毛求疵了—-越简单的问题越会观看一个口之档次,别人对而技术之考量绝大多数且是为深优先、广度糟糕的为规范的,切记。

2、集合

颇主要,也是必问的情。基本上就是List、Map、Set,问底凡各种实现类似的根实现原理,实现类似的优缺点。

汇聚要控制的凡ArrayList、LinkedList、Hashtable、HashMap、ConcurrentHashMap、HashSet的兑现原理,能通回答,当然会控制CopyOnWrite容器和Queue是再好不过的了。另外多说一样句子,ConcurrentHashMap的题目在面试中问得专程多,大概是因这个仿佛可衍生出异常多的问题,关于ConcurrentHashMap,我给网友朋友等提供三碰对还是是研讨方向:

(1)ConcurrentHashMap的锁分段技术

(2)ConcurrentHashMap的读是否要加锁,为什么

(3)ConcurrentHashMap的迭代器是高一致性的迭代器还是死一致性的迭代器

3、设计模式

当认为生重要的一模一样块内容,结果只当阿里巴巴B2B事业部面试的时段给咨询了平次于,当时咨询的是装饰器模式。

本来我们不能够这么便宜,为了面试而上学,设计模式在工作中还是大关键、非常有效之,23种设计模式中要研究常用之十来种植就是可以了,面试中有关设计模式的问答主要是三只趋势:

(1)你的类别遭到因故到了争设计模式,如何用

(2)知道常用设计模式的得失

(3)能画生时因此设计模式的UML图

4、多线程

当即吗是必问的如出一辙片了。因为三年工作更,所以多不见面再次问问您怎么落实多线程了,会咨询得深入一些准说Thread和Runnable的别及沟通、多次start一个线程会怎样、线程有什么样状态。当然这不过是最好基本的,出乎意料地,几不成面试几乎都受以咨询到了一个题材,问法不尽相同,总结起来是这么一个意:

假如有Thread1、Thread2、Thread3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?

明白之网友们对之题目是否发答案也?不难,java.util.concurrent下就是闹成的近乎可用。

除此以外,线程池也是于常问的平片,常用之线程池有几栽?这几乎栽线程池之间来啊区别与联系?线程池的兑现原理是什么的?实际有之,会受您有切实的情景,让您回复这种光景该采取什么的线程池比较确切。

说到底,虽然这次面试问得无多,但是多线程同步、锁这块也是生死攸关。synchronized和ReentrantLock的区分、synchronized锁普通方法以及沿静态方法、死锁的原理和排查方法等等,关于多线程,我当前面有几了章总结了多线程的40单问题,可以参照40独Java多线程问题总。

5、IO

更上IO的内容,之前忘了写了。

IO分为File IO和Socket IO,File
IO基本上是匪会问的,问为问问不有什么来,平时会见因此就哼了,另外记得File
IO都是死IO。

Socket
IO是于重要的如出一辙片,要动手懂的是阻塞/非阻塞的别、同步/异步的界别,借这个理解阻塞IO、非阻塞IO、多路复用IO、异步IO这四栽IO模型,Socket
IO如何和就四种植模型相关联。这是着力有底,深入部分来说,就见面问NIO的法则、NIO属于哪种IO模型、NIO的老三雅整合等等,这来几不便,当时自我啊是研讨了酷长远才为懂NIO。提一句子,NIO并无是严格意义上的非阻塞IO而相应属于多路复用IO,面试回答的时段如果小心是细节,讲到NIO会阻塞在Selector的select方法齐会见追加面试官对君的好感。

若是就此了Netty,可能会见咨询有Netty的物,毕竟是框架基本属于即最好的NIO框架了(Mina其实也无可非议,不过整体来说还是低Netty的),大多数互联网商家也还当就此Netty。

6、JDK源码

若果惦记以大工资,JDK源码不可不读。上面的情或还跟现实状况联系起来,JDK源码就是诚心诚意地扣押您平常凡免是便于钻研了。LZ面试过程被被问了许多JDK源码的题目,其中最刁钻的一个讯问了LZ,String的hashCode()方法是怎么落实之,幸好LZ平时String源代码看得多,答了只盖。JDK源码其实没什么好总结的,纯粹看个人,总结一下较根本之源码:

(1)List、Map、Set实现类似的源代码

(2)ReentrantLock、AQS的源代码

(3)AtomicInteger的实现原理,主要会说清楚CAS机制而AtomicInteger是什么利用CAS机制落实之

(4)线程池的兑现原理

(5)Object类中的措施以及每个方法的作用

这些实际上要求非常高之,LZ去年一整年主导将JDK中重大类的源代码研究了单不折不扣,真的花费时间、花费精力,当然回头看,是值得的—-不仅仅是为应付面试。

7、框架

外常谈,面试必问的事物。一般的话会咨询你瞬间你们项目遭到采取的框架,然后被你有些状况问您用框架怎么开,比如自己怀念要于Spring初始化bean的当儿召开片事情该怎么开、想只要在bean销毁的时做片作业该怎么开、MyBatis中$和#的别等等,这些都比较实际了,平时积攒得好、有差不多读书框架的用细节自然且不成问题。

如点你的问题答得好,面试官往往会深入地发问有框架的兑现原理。问得无比多之饶是Spring
AOP的实现原理,当然这老简单啦,两词话就折腾定的底政,即使你不见面准备一下即便吓了。LZ遇到的不过变态的是为LZ画一下Spring的Bean工厂实现的UML图,当然对这么一个起深度的题目,LZ是绝答不出的/(ㄒoㄒ)/~~

8、数据库

数据库十有八九吧都见面咨询到。一些骨干的诸如union和union all的分、left
join、几种索引及其区别就非摆了,比较根本的虽是数据库性能的优化,如果对数据库的属性优化一窍不通,那么闹时光,还是建议您以面试前消费一两上特别把SQL基础与SQL优化的情节准备一下。

然数据库也不用顾虑,一贱庄一再时有发生为数不少部门,如果你针对数据库不熟悉而基本技术并且老好,九成都大凡碰头使而的,估计会先将您坐对数据库使用无是讲求大强之部门锻炼一下。

9、数据结构和算法分析

数据结构和算法分析,对于同一号称程序员来说,会比不见面吓又在工作中绝对能派上用场。数组、链表是基础,栈和行深入部分而为不碍事,树大重要的,比较关键的树AVL树、红黑树,可以无打听它的切实实现,但是要知啊是二叉查找树、什么是平衡树,AVL树和红黑树的区分。记得某次面试,某个面试官与我聊及了数据库的目,他咨询我:

你知道索引使用的是哪种数据结构实现吗?

LZ答到用之Hash表吧,答错。他而咨询,你知为什么要利用树为?LZ答到以Hash表可能会见起比较多之闯,在切甚至是上亿级别之多少面前,会大大增加查找的日子复杂度。而培养比较稳定,基本保证最好多二三十涂鸦就会找到想使的数码,对方说勿完全对,最后咱们还是交流了一晃之问题,我哉知道了为何而动用树,这里不说,网友朋友等看索引为什么要用树来兑现为?

关于算法分析,不会见、不思量研究就终于了,记得某次面试对方问我,Collections.sort方法以的是啦种排序方法,额,吐血三升高。当然为显示LZ的宏达,对算法分析也闹一定的钻(⊙﹏⊙)b,LZ还是硬在头皮说了相同句可能是冒泡排序吧。当然答案自然不是,有趣味之网友朋友等好去看一下Collections.sort方法的源代码,用的凡如出一辙种名叫TimSort的排序法,也就算是增强型的联合排序法。

10、Java虚拟机

出乎LZ的料想,Java虚拟机应该是殊重大的一致片内容,结果以即时几乎小商家受到于提问到之票房价值几乎为0。要明了,LZ去年不过花了汪洋底流年去研究Java虚拟机的,光周志明先生的《深入理解Java虚拟机:JVM高级特性以及超级实践》,LZ就读了非生五全副。

言归正传,虽然Java虚拟机没问到,但自以为还是生必不可少研究之,LZ就大概地排列一个纲领吧,谈谈Java虚拟机中比较重大的情:

  1. Java虚拟机的内存布局
  2. GC算法及几乎种植垃圾收集器
  3. 仿佛加载机制,也尽管是大人委派模型
  4. Java内存模型
  5. happens-before规则
  6. volatile关键字下规则

恐面试无用,但于走向大牛的中途,不可不会。

11、Web方面的组成部分题目

Java主要面向Web端,因此Web的有些题目呢是必问的。LZ碰到过问得最多之点滴个问题是:

谈谈分布式Session的几种实现方式

常用之季种植能够报答出来自然是叫当试官非常满意的,另外一个常问的题材是:

讲一下Session和Cookie的区别和联系以及Session的实现原理

立点儿只问题外,web.xml里面的始末是关键,Filter、Servlet、Listener,不说对她的兑现原理一清二楚咔嚓,至少能够对它们的采用深谙。另外,一些细节之点仍get/post的别、forward/重定向的界别、HTTPS的落实原理为还或会见吃考察到。

啊,想起来了,一致性Hash算法貌似也于提问到了几乎糟,这个LZ以前专门深入钻研过同时写了一定量篇博文,因此问到之题目LZ自然是答得毫不费力。文章是MemCache详细解读和对一致性Hash算法,Java代码贯彻的深透钻研,特别说明,LZ真的未是于啊自曾以前写的稿子由广告啊什么什么什么什么什么。

末,如果起趣味来日,建议学习、研究一下SOA和RPC,面向服务体系,大型分布式架构必备,救命良方、包治百身患、屡试不爽。

 

关于HR面试

假如您过五关斩六拿,成功地经了具备的技术面,那么恭喜你,你离开升职加薪、出任CEO、迎娶白富美、走向人生巅峰又向前了同一步。但是还没到谈薪资待遇之时节,最后还有一个考验:HR面试。基本享有的不行企业还发这同一轮子的面试,不要小看HR面试,很多公司之HR对于面试者都发出一票否决权的—-即使前面的面试对您的评更胜。

之所以,这轮的面试吗亟须强调起,HR面试主要问的凡几乎碰:

  1. 简历中描写的仙逝劳作经历之离任原因
  2. 手上供销社薪资待遇
  3. 盼能到怎样的均等寒商家
  4. 村办前程底升华趋势

自身特别取一下第2沾。可能有人比排斥也不思量说这,我个人倒持开放状态,问了就说了,当然有之夸大或者必不可少之,当前局薪资待遇多报个一千块钱全无问题(毕竟是一律寒互联网商家到底多小少出头补贴啊什么的呗)。因为马上同你于新公司会拿到之薪水干非殊,新庄会用到之薪饷的支配因素是整套企业之薪资情况跟因你的面试情况在店之定位,都是起固定的薪资范围的。HR问这个重要也就算是心里发生个数并且看而是否诚信—-有些企业入职时会见要求您提供最近同寒单位的银行流水号。

HR面试就说交此了,总结起来实在就算是四独字:滴水未渗透。整个面试过程态度积极,不要发生外悲观消极的千姿百态(尤其当说到先公司情况的当儿,即使发生重复多之遗憾),就不见面发问题。

 

关于面试心态

斯嘛,LZ其实当店吧面试了几个人,一半以上的面试者回答问题之时光都属那种双腿发抖、声音颤抖的种。在LZ看来这大可不必并且立即还是圈分项,回答问题的时候最好极致基本的少单要求:

  1. 不紧不慢,平心静气
  2. 条理清晰

表达能力绝对是面试的上根本之洞察项目。咱们开的是程序员这同样实行,讲究的凡组织协作,不是编写、画画,一出笔、一个总人口就是实行了,一个表达能力不行的程序员,要来以闹什么用啊?

除,就是保持良好的心态。古语说得好,只要功夫深,铁杵磨成针,面试的中标与否,在于平时底积淀,临时抱抱佛脚,看少志面试题是尚未就此底,只要平时足努力,成功是次至渠道成的作业,平时不怎么研究技术的,那呢不怕是个听天由命的事情,只要充分地展示平时温馨的所法就得了。

之所以在我看来,不要将面试当作面试,当做一次于技术交流,把面试的情绪从我只要找到同样卖工作变动吗自身如果通过面试去发现不足、提升自己,这样便会见和多矣,即使失败呢不见面来无比多失望之感觉。

除此以外,如果平常自己疼爱让钻研技术之心上人,真的如发自信,不要当别人面试你别人就是较你决定。面试官未必比你优质,他问的题目频都是他平生研究得比多之题材,你同样发生很多谈得来之钻研面试官未必知道。

 

关于Java

网上经常来看同一种植说法:Java比较简单。某种程度上随即会打击Java程序员的自信心—-原来我们平时所以的是这种小儿科的玩意儿啊,在我看来这种想法大可不必,这等同有自来讲说对这话题之眼光。

这种说法有些片面,得分开两部分来拘禁,我于是四只从总结一下便是:轻学难精

1、易学部分

Java易学我觉得有少数组成部分的缘故:

  • 无数培育局包大四底学习者找工作还见面念Java,绝大多数凡为易学。Java于C/C++发展使来,感谢前人的智慧,它脱了C/C++中尽复杂与为人口疑惑的语法、它消除了平台的差异性、它不欲用户手动释放内存空间、它避免了Java程序员和本土语言的相,让程序员只需要小心于语法层面与采用范围
  • Java作同样家面向对象的语言,在店级支中体现出了它不管与伦比的表征,整个开发流程比较固定化、模块化,需求分析起来呢相对容易。我推个温馨先的例证吧,我以那个一念C语言的时,用C语言写了一个书本管理体系描绘了2000尽+的代码,大四模仿了C++之后,用面向对象的言语C++取代面向过程的语言C语言重新勾了一个功能相似的书籍管理网,只写了1100履的范,这就是面向对象的优势

2、难精部分

继咱们聊聊难精的组成部分。

Java语言的设计者帮助Java程序员做了这么多工作,这有利于也来坏处。有利之一部分前面早已说了了,让Java易学,不过有弊的组成部分雷同明显。假如在用运行过程遭到遇到了语法层面与动规模之外的谬误,应当怎样处理?比如线上环境出现内存溢出怎么惩罚?GC时间了长怎么收拾?IO长时间尚未影响怎么惩罚?方法抛来莫名其妙的可怜怎么收拾?

凡此种种,绝不是千篇一律誉为特见面写几个if…else…的Java程序员就可以解决的,这要大量之阅历、大量底履行、大量针对性Java底层实现细节的研究,而这往往是极端难以、最考验Java程序员的有的,一些人口常有就不思量向好去研究,另外有丁研究了一点点虽钻不下了。

Java为什么难以精?就是这原因。除非你水平特别大,否则五年工作经历以下的Java程序员在简历及勾”精通Java”绝对是一致宗很愚蠢的作业。

 

结语

章写及此,感觉微微像鸡汤文了,那即便因为最后的鸡汤作为最后吧。

每当此前博客园的同样首文章被,讲到了奔三程序员的疑惑,大致说的是三十夏以后程序员要转行之类的那样,LZ在博文中留下了如下的品:

就盖这段话自勉、共勉吧。越努力、越幸运,如果你莫是官二替、富二代表、红二代表,那么请牢记:身体力行才是改而命之绝无仅有捷径

**================================================================================== 

本身未能够管写的每个地方还是指向之,但是至少能够担保不复制、不黏贴,保证每一样句话、每一行代码都经过了认真的琢磨、仔细的锤炼。每一样首文章的暗中,希望都能顾好于技术、对于生之情态。

自家深信不疑乔布斯说的,只有那些疯狂到看好可以转世界之丁才能当真地改世界。面对压力,我得以挑灯夜战、不眠不休;面对困难,我乐意迎难而上、永不退缩。

**其实我想说的凡,我只是一个程序员,这就算是自己现纯人生之百分之百。

==================================================================================**

网站地图xml地图