程序员成长的路

前言

以同共事发生约定再加上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在博文中留给了如下的评头品足:

图片 1

纵然因为即时段话自勉、共勉吧。越努力、越幸运,如果您莫是集体二替、富二代表、红二代表,那么请牢记:身体力行才是改变您命之绝无仅有捷径

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

自身无可知担保写的每个地方都是本着之,但是起码能保证不复制、不黏贴,保证各级一样句子话、每一行代码都经了认真的琢磨、仔细的琢磨。每一样首文章的偷,希望都能看好于技术、对于生活的态势。

本人相信乔布斯说的,只有那些疯狂到觉得自己可转移世界之总人口才能确实地改变世界。面对压力,我可挑灯夜战、不眠不休;面对困难,我愿意迎难而上、永不退缩。

实际上自己眷恋说之是,我只是一个程序员,这便是本身现纯粹人生之整整。**

网站地图xml地图