《程序员面试笔试宝典》样章试读

 第1章 前端

面试官箴言

什么样的求职者可以得到面试官的青睐?求职者须要准备哪些内容来面对形形色色的面试官?什么样的企业适合本身发展?在新的工做岗位上,如何努力才能在人才辈出的企业里面脱颖而出?在本章,几位资深软件工程师将现身说法,为您一一解答上述问题。 程序员

1.1  有道无术,术可求;有术无道,止于术

 
 

丁志浩,男,硕士,某知名芯片公司软件工程师。 面试

 

 

 

如下这些内容是写给即将成为职业人的在校学生的,但愿可以对他们的求职与之后的工做有必定的参考做用。 算法

在介绍求职以前,我想先说一些与具体技术无关但却比技术更加剧要的东西,主要有如下两个方面的内容:第一点,认清自我;第二点,保持强烈的求知欲。之因此说起这两点,而且认为它们是最重要的东西,是由于结合个人亲身经历,我认为一我的最重要的是认清自我,只有认清了自我,你才会知道本身想要作什么、适合作什么、能作什么。在某种程度上来讲,这比所学的知识、技术更加剧要。只有方向正确了,才会有前进的动力;有了前进的动力,才会为目标不断努力;只有朝着正确的方向不断努力了才可能会有收获。其次,要有强烈的求知欲,随着年龄的增大、我的阅历的增加,生活、家庭、工做会慢慢消磨掉你的雄心壮志,而能保持强烈的求知欲实在是难能难得,世界上不多有学不会的东西,就看你是否用心去作了,是否愿意花时间、动脑筋、投入精力去作,万事就怕认真,只要你认真作了,一般是能够学会的。 数据库

切入正题,做为一名以程序员为职业目标的求职者,关注的领域主要仍是以技术为主,IT企业在面试的时候主要关注求职者什么方面的内容呢?以我这些年的工做经从来看,大企业看道,小企业看术。有道无术,术可求;有术无道,止于术。具体来讲,大企业更加看重的是你的基础知识以及你解决问题的能力。通常而言,大企业都会有比较完备的培训机制,它能够在较短的时间内把一个什么都不会的员工塑形成一个它想要的人;而小企业则否则,他们更加注重求职者的实用性,求职者当前会什么,能给企业带来什么。这种思惟方式的不一样其实也是由企业的性质决定的,没有对错之分。固然这也无可厚非,因此我的建议求职者最好夯实计算机基础知识,操做系统、编译原理、算法等这些基础知识就是重中之重了,须要重点掌握。万变不离其宗,当你达到了必定程度,对你而言只是形式上的差别而已。 编程

求职者须要如何准备才能更好地得到面试官的青睐,我以为IT企业通常须要的大多数都是技术性人才,因此具备如下3个优势的人,通常更能受到面试官的青睐:① 基本功扎实的人,基础扎实了,之后后劲就足,发展前景就更好;② 具备强烈的求知欲、对未知领域比较感兴趣、可以接受新事物的人;③ 在某个领域有比较深刻的研究的人。例如,当前好多企业都在搞云计算,若是求职者对Hadoop这种架构有比较深刻的理解,固然就比不懂Hadoop的求职者成功率更高。 设计模式

有了录用通知书(offer)之后,在挑选offer的时候,求职者每每也很纠结,其实我在这里也不是告诉你是该选择互联网仍是芯片公司,或者是其余类型企业,由于对这个问题,仁者见仁智者见智,每一个人考虑的侧重点都不同,因此在此我不给求职者说到底该选什么企业,以避免误导你们,但我能够给求职者一个建议:往大的方面讲,首先是选择行业,而后选择企业,最后是选择职业。最好可以结合本身的兴趣爱好,由于兴趣是最好的老师。 性能优化

入职以后,应届毕业生如何才能适应新的工做岗位,完成从学生到职业人的华丽转变呢?通常而言,刚毕业时,新人都是雄心壮志、意气风发,想在新的工做岗位上大展拳脚、有所做为,虽然这是一件很是好的事情,可是因为现代社会企业分工很明确,尤为是对于企业的新员工,刚工做时,颇有可能接触的东西都是些没有技术含量或是相对边缘的东西,只是充当企业的一颗小螺丝钉而已。因此在此,我建议求职者在刚入职时,最好可以放低姿态,当将军的人,都是从小兵一步步作起的。刚毕业时的态度最重要,切记不要成天怨天尤人,不然会给人一种浮躁的感受,对你未来的发展确定不利。 服务器

1.2  求精不求全

褚艳利,女,硕士,某知名电子商务公司软件工程师。 网络

时光荏苒,我已经成为IT业一名所谓的“老鸟”了,但我曾经也只是一名普通的求职者,在求职的路上历经风雨,但我但愿个人一些经历和感悟,能为朋友们提供些许帮助。

对于应届生求职,我以为每一场面试都是从“闻味儿”开始的。看似是一场简单的聊天,但其实求职者的各方面已经在被面试官考查了。例如,在沟经过程中,从求职者的谈吐、穿着、眼神,或多或少就能闻出不少层味道了(求职者的性格、处事态度、表达能力、沟通能力、团队合做能力)。常常会听到求职者说:“面试官今天一道技术题都没问我。”这可能是面试官对求职者综合素质的一种确定(前提是成绩单上的成绩不能太差)。若是是求取技术类职位,那么求职者的技术水平仍是要积累的。

对于技术的积累,我以为是“求精不求全”,如今的大学一般都会开设“C语言”、“C++”、“Java”、“网络”、“数据库”、“编译原理”、“软件工程”等课程,但因为精力有限,毕竟不是每一个人均可以作到门门精、样样通,因此我建议从兴趣出发,深刻学习几门课程(固然,其余的课程也要学,毕竟是在技术领域,一些概念和基本原理不知晓是不行的)。例如,我我的比较钟爱数据结构、算法、C语言、操做系统等专业知识,对这些下足工夫作足功课,曾经它们也陪着我打赢了不少场艰难战役。固然,在面试别人的过程当中,我也会问到一些可能他们不太擅长的知识,如设计模式,其实我并非但愿为难他,挑他的刺,只要他能讲出本身的理解,并坦白本身这方面知识的欠缺,我也不以为丢人,这种坦白比不懂装懂来的更真实、更有力量。因此,做为一名过来人,我以为大部分面试官在面试时,会更加侧重于考查求职者擅长的方面,试试水究竟有多深,从这点能看到求职者将来的发展和潜力。

做为一名职场新手,在求职的准备过程当中,应该根据职位要求,略做筹备。虽说万变不离其宗,但根据职位要求,有针对性地准备一下,效果会更好。例如,面试数据库开发的求职者,DB(数据库)知识就须要好好补一下,这样不至于气氛太尴尬,也能够得到后续面试机会。对于普通的软件开发类职位,我认为求职者必备如下知识:数据结构、某类编程语言、操做系统、基本DB知识。

曾经我也对新人进行过面试,我认为要想得到面试官们的青睐,求职者须要注意如下几个方面的内容:

(1)衣着装扮。对于技术类职位,衣着装扮虽然不作要求,但毕竟不能过于邋遢。女孩子画一点淡妆更好,清新怡人。

(2)眼神交流。记着,你对面坐着的是面试官,不是墙壁,你须要跟他有眼神交流。不要怕,试着抬起头来,面试官的笑容能够缓解咱们的紧张情绪,以及答不上题的尴尬气氛。惧怕,实际上是本身吓倒了本身。

(3)气氛把握。语速不要太快,太快容易将本身置于紧张的状态之中。回答问题不管会与不会,都要放慢节奏,你的状态直接影响面试官的身心感觉以及判断。

(4)背景了解。若是你参加一家公司的面试,最好是你真心喜欢的,而且对公司多少应该有所了解。例如,公司理念、制度、规划,谈谈你喜欢的、你认为能够改善的(这一点上要注意“度”),若是你是真的用了心,面试官每每会给予更多机会的。

(5)轻松话题。若是谈得比较愉快,能够本身制造些轻松话题,如小吃、旅游、业界话题等。

不少时候,都有师弟、师妹们问我,挑选offer的时候该怎么办,须要权衡哪些内容。我不是一名职业规划师,因此不能告诉他们如何作选择,我只能告诉他们,当初我在进行选择的时候,考虑了哪些内容,以供他们参考。但总的来讲,我以为应该参考如下5点内容:

(1)兴趣点。兴趣是最好的老师,若是没有兴趣,很难在工做岗位上有所做为。

(2)公司将来的发展空间和路线。不少时候不能只盯住眼前的利益,要从长远看,一个企业的发展空间和路线、对将来市场的认知与把握都会决定你将来的发展方向,因此最好可以对企业的将来发展空间与路线有一个较清醒的认识。

(3)薪酬福利。“钱不是万能的,没有钱是万万不能的”。一个企业再好,若是不给工资,一样没人会去,由于人要吃饭、要穿衣,因此必须仔细考虑薪酬福利。

(4)我的成长点。每一个企业对人才的定位都不同,因此在选择职位的时候,尽可能选择一些企业的核心研发部门,在这样的部门里面我的成长、我的机会都会很是好。

(5)城市。什么样的城市是本身但愿去的,是政治中心北京,仍是东方之珠上海;是人间天堂杭州,仍是千年古都西安;是天府之国成都,仍是千湖之城武汉。各个城市有各个城市的优劣,因此没有人可以告诉你哪一个城市好哪一个城市很差,关键须要你本身拿主意。

其实,选完了offer以后,就面临着一个从学生到职业人身份的转换了。如何转换角色,我我的以为新人初入职,最重要的就是练就基本功,这个阶段犹如蚕蜕,痛苦但倒是美丽的变身。例如,咱们作的是线上一级系统,承载着每秒数万笔交易的建立及支付,那么系统的架构、稳定性、容量、可扩展性、各类底层技术实现,方方面面要学的有好多,任务紧、压力大、面对着无数个不可能,这个过程看似痛苦但却让咱们成长得很是之快。尤为是在项目真正上线运转起来的时候,那些你原先认为不可能作的事情如今都作到了,还作得很是漂亮,那种成就感真的是无以言表。并且作每件事情的时候,必定要把姿态降下来、心态静下来、自信提上去,与你的团队一块儿合做,把不可能当作为历史,把可能写在今天。经历一段时间的洗礼以后,仔细思考一下,问一问本身是否能够独当一面,是否在业界,至少在公司部门内,能够听到你的声音,能够看到你的建议。若是能够,那么恭喜你,你应该能够升职了。

1.3  脚踏实地,培养多种技能

廖兰新,男,硕士,某创新型企业高级研发工程师、开发经理。

做为一名一线的技术研发人员,结合本身多年在技术上的经历,在此分享一些经验给即将走入职场的应届毕业生,帮助他们在人生的路上少走一些弯路。

(1)行业选择。在应届毕业生进行择业的时候,我我的以为选择适合本身的行业是很是重要的。对于计算机类专业的毕业生,可供选择的行业不少,如商业银行类、国企、央企、传统的软件公司、新兴的互联网公司等。而这些行业又各有各的特色,对能力的要求迥异。例如,国企广泛工做轻松、薪资通常(体制内)、福利很好,对技术要求不是过高,对项目进度的要求通常不紧迫;互联网公司工做通常比较辛苦,对项目进度要求很是紧,技术研发能力也要求高,而企业文化通常较为自由,其薪资待遇通常比较高。因此,求职者应该根据本身的兴趣爱好以及能力特色选择合适的行业。

(2)技术领域选择。随着现代化管理技术的不断发展,IT企业中的技术分工也愈来愈明显。俗话说:“隔行如隔山”。一样是计算机科学技术,不一样技术领域的人在技术上也是很是迥异的,如互联网企业与芯片企业关注的重点就不同。对于应届毕业生,通常也很难作到“通才”。因此,在求职的时候,尽可能选择本身喜欢的专业领域或者本身擅长的专业领域,这些会决定你后面的职业生涯的主要工做内容,并且通常也不会轻易更换。

(3)雇主选择。不一样的雇主对求职者的要求也不同,以科技巨头公司与创业型科技公司为例加以比较。创业公司通常研发人员相对较少,每一个研发人员都须要可以独当一面,对整个产品的核心代码都了如指掌,上至前端开发、Web界面,下至后台底层实现、操做系统,因此这对于我的成长是很是好的锻炼机会,但一样,创业公司也有其自身的局限性,因为工做的须要,员工通常身兼数职,常常加班,并且在专业技能上都不够规范,相比大型科技公司完善的团队、严格的规章制度等,相对欠缺。

但总的来讲,在创业公司,更可以全方位地激发我的潜能,多角度地发展我的能力,大公司能够小而精地锻炼某项专业技能。固然以上的说法也不是绝对的,好比某些小型高科技公司也汇集了业内的人才,彻底具有大企业的“高精尖”特色,而一些大公司的某些部门在初创阶段可能也会像创业公司同样艰苦。若是你决定不了,那你就尽可能去一家步入正轨的大公司。

(4)求职建议。由于企业须要,我曾经担任过一段时间的面试官,帮助招聘企业新人。咱们确实很是但愿招到优秀的人才,但在招聘的过程当中也遇到了不少很遗憾的事情。例如,有的人在面试的时候由于紧张或是其余缘由,真实才能发挥不出来;有的人水平通常,却夸夸其谈,不脚踏实地,真的让设计算法时,一头雾水。在此,我想说明一点,企业在招聘的时候,须要这样的人才:对人对事有信心、掌握多项技能、基础扎实、有冲劲、愿拼搏。因此,我建议应届毕业生在平时的学习中,必定要脚踏实地地学好专业知识,适当地扩展专业技能。

(5)能力培养。进入工做岗位以后,不少应届毕业生迷茫了,很难从学生的角色向职业人的角色转变,我以为计算机职业人应该注重培养自身的3种能力:技术能力、管理能力、领导力。职业新人每每依赖技术能力进入职场,最初的晋升也主要来自技术能力,它可让你成为一个优秀的单兵和一个称职的经理,但很难成为优秀的经理人,由于它的杠杆效应很是有限,这就须要第二种能力:管理能力。管理实际上是对资源的管理和利用,以有效、可靠地生产产品或提供服务。人的大多管理能力均可以学习到,教育、经验、培训均可以提升管理能力。固然人的悟性也很重要,可以从表面现象中分析出规律,对管理能力来讲很重要。管理能力主要是释放物的能力。它能够给你必定的杠杆力量,能让你在小范围内有所贡献,但不会让你走很远。这时候就须要第三种能力:领导力。领导力是释放别人的能力,再经过别人来释放我的或物的能力。领导力巨大,是由于它有二级杠杆的效用。对于领导,技术能力的重要性很是有限,管理能力次之,领导能力最重要。不要认为职业道路是单行道,即从技术职位向管理职位过渡,再由管理职位向领导职位过渡。

1.4  保持空杯心态

王震,男,硕士,某知名互联网企业研发工程师。

好友何昊拜托我一件事情,就是给当前程序员写一些关于求职的意见与建议,这着实有些为难我,并不是我不肯意去作这件事情,而是由于本人入行虽然比较早,但入职却不过久,与一些资深的IT们相比,也只能算是初出茅庐,因此不敢妄自尊大,不过能够分享一下本人这些年来的几点粗浅体会,以起到抛砖引玉的效果。

程序员,做为以技术主打的IT专业从业者,对于我的的发展,扎实的基本功将更有利于在行业里站稳脚跟,走得更远,发展前景也更加明朗。“术业有专攻”,所谓专业,在于求深而不在于求广。固然,话也不能绝对,更广的知识面能够帮助你对整个大行业背景有一个比较清晰的认识,知道本身处在产业链中一个什么样的位置,可以作出多大的成就,可以有多大的发展空间。结合我本身的经历,以软件类研发为例,具体而言,后台开发方向,系统、网络的底层好比操做系统事件机制(如Windows消息机制、Linux epoll等)、TCP/IP协议栈、C/C++ STL等,这些是服务器开发的主战场,对这里每项技术须要了解的程度就如同战场上你对手中所握兵器须要熟悉的程度同样,也许对小规模服务器程序开发而言,谈论这些内容可能有些夸大其词、危言耸听的感受,但确实存在不少须要如此考虑的状况。例如,当前不少网上订票系统的性能就很难知足实际应用的须要,引发用户的极大反感。而在前端方面,因为技术更迭较快,对于程序员而言,快速学习能力就显得尤其重要,紧跟时代潮流就要看准当前的形势,了解站在时代前沿的人有哪些,他们作了什么,即他们的研究成果有哪些。

至于经典的数据结构、算法,其实不管是前端研发仍是后台研发都会有所涉及,不过更深刻的掌握通常也只在较专业的算法密集型领域,如搜索、GIS等。而对于你、对于面试官更注重什么,则看大家更侧重哪方面的内容了。

对于已经入行的程序员应聘新的企业,即一般所说的跳槽,经验及能力一般是面试官考查的重头戏。不像刚毕业的学生,白纸一张,面试官还会考查一下你的学习能力或我的发展潜力。说得再直白一点,做为利益链条上的一环,你具有什么资本,能为公司创造什么价值,才是面试官关注的焦点所在,这也是你须要真正搞清楚而且为之准备的内容。因此作过什么项目,取得什么样的成就,既说明了你的过往表现,也能对你的潜在价值表露一二。

进入工做岗位,我相信,无论是刚入职的毕业生仍是已打拼多年的程序员,以空杯心态去融入当前企业文化,绝对不是件坏事。只有承认了你的雇主,工做之时,你才能积极主动,才能上进、才能提高。职业发展方面,通常公司都会有量化的绩效指标,在完成这个指标的同时也是对本身的一种提高,而在任务指标以外,结合自身状况制定出半年或整年我的发展规划,能够说是对本身短时间能力提高的督促和目标实现的指引,有助于本身向着更明确的方向发展。

以上愚见,称不上是成功的经验,只是我这么多年对程序员这个行业一点浅薄的理解而已。

1.5  职场是能者的舞台

林方超,学士,北京某上市公司软件工程师。

关于应届毕业生如何求职这个问题,老实说,个人“经验”并非不少,若干年之前,由于应聘前准备的比较充分,因此命中率比较高,虽然也拿到了几个不错的offer,但最终仍是选择了如今这家企业。这么多年过去了,一路走来,感悟颇深,回过头来看当初求职这件事情,也是耐人寻味。我认为一个很是有针对性的准备工做,包括心理准备与知识准备,对于计算机相关专业应届毕业生求职很是有用。

首先,做为求职者,应当找准本身的位置,即一般咱们所说的职位。一个对职位有着准确预期、对本身有着准肯定位的人,在我的简历、面试中都可以表达出更准确、更吸引人的信息,而不至于投递完简历以后就杳无音讯。而找准一个方向,找准一个行业或是锁定一个企业,不只能够缩小求职的范围,并且还可让你在有限的精力、有限的时间内将准备的内容进一步深刻,进一步细化。若是你作到了这一点,无论是大企业的招聘仍是小企业的招聘,也无论是在笔试仍是面试的时候,你很快就能发现一件事情,就是真正可以与你竞争的人、可以把你比下去的人真的是屈指可数,此时你就成为了求职大军中笑到最后的人(插入一个感悟:时下流行的技术每每被人广泛说起,反而是陈词滥调,只有真正理解其中思想的人才能脱颖而出,若是没有十成的把握,我宁肯绝口不提)。

经过一些有针对性的准备工做后,笔试通常就不会存在问题了。而紧接着须要面对的就是面试这一关,每一次求职的机会都很宝贵,每一次面试的机会也很可贵,而成功随时就会降临,做为求职者,不该当将机会随意浪费掉,将成功拒之门外。因此,不要总觉得本身运气好,能够“裸装上阵”赌一把。由于做为求职者,在与企业的博弈中,咱们是弱势的。所以,你须要对求职的企业以及岗位有必定的认识与看法,固然,你一般在此以前对其可能一无所知,很迷茫,若是此时稀里糊涂去了,也天然是稀里糊涂回来。其实,只要提早作好功课,这些问题都称不上是问题,由于稍微有点名气的企业都会有本身的宣传网站,在这里面会详细地介绍企业的发展历程和现状,此外很多网站在校园招聘的同时也会列出详细的招聘信息,这些内容均可以好好看看。至于对这些内容须要了解到什么程度,就看这家企业在你心中的地位了。想象一下,在面试的时候,当你谈到许多他们公司的一些信息的时候,面试官会想要给你介绍更多,甚至想带你去实地参观一下,那么接下来基本就能够直接谈待遇、谈工做了。

介绍了再多的理论和方法,也只能说是“纸上谈兵”,是否可行还须要行动来验证,只有行动了才能体会到其中的价值。若是成功地拿到offer,那是最理想的;若是没成功,最好要让面试官给你些建议,遇到说不出来或闪烁其词的状况,说明面试官是凭我的喜爱做出的判断,大可没必要理会;而一针见血的评价以及善意的建议都会对你将来的求职、成长有很大的帮助,因此不能被一根绳子绊倒两次,不管是成功了仍是失败了,都要有启发,成功能够收获经验,失败一样能够获得教训。

挑选offer也是一件比较艰难的事情。我的建议,最好按照本身的职业规划进行比较,但若是本身确实没有很明确的职业规划,或是历来没有想过职业规划这个问题,你能够优先挑选有发展潜力的工做,这样的工做会给你带来许多意外的收获,最终推动你造成本身的职业路线,构建你的职业规划。

最后,我想说的是职场是能者的舞台,真正比拼的是各类能力。技术是一种能力、交际是一种能力,发挥好任何一种能力都能使你的工做如鱼得水、锦上添花。所以进入工做岗位后该如何发展,并不是我一两句话可以回答的了的,关键仍是看各位本身,“八仙过海各显神通”了。

1.6  学会“纸上谈兵”

卢山,硕士,某知名搜索类公司软件工程师。

2009年硕士毕业于中国科学院计算技术研究所,到目前为止换过两次工做,最终选择了如今的这家企业。做为一个职场的过来人,经历了不少事情,有初出茅庐时的意气风发,也有历经沧桑后的冷静思索,在这里我谈谈技术类职位面试应该怎样准备的问题。其中有一些建议,也是与产品类面试相通的。

在谈论面试笔试如何准备前,首先我想说一些求职者在应聘的过程当中的常见误区。一是认为GPA(成绩)越高,则面试成绩越好;二是认为编程的技术越好面试成绩越好;三是认为在纸上写代码与在计算机上编程是同样的,不用准备或是不用特殊准备。我我的以为,这些理解都是片面的。事实上,虽说面试是一种主观行为,但它也是一种考试,准备的因素占了50%以上。但它又不一样于高校中的考试,所以与GPA关系很是小。

既然准备如此重要,那么求职者就要作好读技术面试书这个环节的准备了。此类书籍很是多,每本又很厚,要怎样在有限的时间内在众多的考点中识别出面试官常问的那些问题呢?规律是有的,由于面试官们精力有限,不多去凭空想象一些题目,不少都是套用现成的知识点,因此不论你应聘什么职位,考点总会以这样的规律出现,复习中遇到就要记住。通常状况下,须要注意如下几个方面的内容:

(1)列举处常考。在复习时看到一个知识点分红几个项目列出来的,就极可能是要考的。例如,“在网页中使用CSS有3种方式,inline、internal和external”。

(2)比较处常考。例如,“C中的auto, static, register和extern的区别是什么?”、“const与define有什么区别?”、“C++中struct与class有什么区别”等。

(3)性能优化常考。例如,“怎样提升网页加载速度”,“如何提升数据库查询效率”,内存泄漏的缘由、识别及防范等。在C语言、Java语言和算法方面也会常常考到相似的问题。

(4)算法设计与实现常考。常常会针对某些特定的算法对求职者进行考察,同时时间复杂度也很容易考,因此求职者要在掌握好算法原理、代码实现的同时,记住它们的复杂度。

除掌握常考的考点外,你还要练习在纸上写程序。脱离了功能强大的IDE(Integrated Development Environment,集成开发环境),在纸上写程序就与在计算机上很是不同了。这里没有自动提示,没有语法高亮,没有拼写纠正,没有自动编译、连接与运行,全凭你平时写代码的积累了。可是在笔试和面试中,经常要当场“纸上谈兵”,若是不熟练就要吃亏,因此这一关必需要过。

1.7  小结

尽管每个面试官的工做背景不同,我的能力也不同,并且面试套路也可能独具匠心、别具一格,可是,他们的目的只有一个,发掘最适合企业的优秀人才。对于求职者而言,面试官的喜爱每每决定了求职者的去留,因此面试官的意见与建议,求职者应该好好斟酌,认真体会,从而不断地提高本身,成为每个企业争抢的“千里马”。

相关文章
相关标签/搜索