Java程序员面试笔试宝典(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-23 09:01:40

点击下载

作者:何昊

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Java程序员面试笔试宝典

Java程序员面试笔试宝典试读:

前言

很多朋友问我为什么编写《Java程序员面试笔试宝典》,它与我先前编写的《程序员面试笔试宝典》究竟有何不同?其实,我之所以创作本书,就是希望通过本书能够为主攻Java方向的求职者提供一些帮助。《程序员面试笔试宝典》一书面市后,在学生群中反响不错。很多读者反映,通过阅读本书,他(她)们找到了自己比较满意的工作,但不足之处在于该书偏重于C/C++语言,而很多招聘岗位考查的却是Java语言的相关内容。此外,根据前程无忧、智联招聘和中华英才三大专业招聘网站的就业数据调查分析可以看出,在目前的就业市场上,Java工程师的市场需求量非常大,丝毫不亚于C/C++工程师,所以,他(她)们希望能够看到一本专门针对Java语言面试笔试的书。

于是,我萌发了编写一本有关Java程序员面试笔试之书的想法。近些年来,无论是传统的互联网应用,还是当前发展迅猛的云计算、海量数据处理以及移动互联网,都离不开Java语言。Java语言始终在信息技术浪潮中扮演着极其重要的角色。从历次编程语言排行榜不难看出,Java语言的应用与C语言不分伯仲,它们都可以称得上是计算机历史上重要的编程语言。鉴于此,很多IT企业(例如门户网站、即时通信、电子商务、搜索引擎等)、手机应用开发企业等都使用Java语言作为开发语言,因此自然希望求职者熟悉Java语言的基本原理,并能够熟练使用Java语言从事实际的项目研发,所以,也会将Java作为面试笔试环节的主要考查内容。

作为《程序员面试笔试宝典》的姊妹篇,本书一方面延续并继承了其中诸如面试官箴言、面试心得交流、企业面试笔试攻略、海量数据处理等深受读者好评的经典内容;另一方面,编者结合当前的实际情况,对面试笔试中常涉及的Java语言基础知识进行了庖丁解牛式的深度剖析。此外,本书还针对各大IT名企的笔试考题,总结出了适用于应试的方法与思路,可以帮助读者轻松应对Java面试笔试中的各类问题。

本书由何昊、薛鹏、叶向阳共同编著。在本书的编写过程中,董西成、邵帅、王震、伍文明、李超、曹润涛、郭晶晶、阎贝、林方超、廖兰新、李志强、厉孙德、褚艳利、丁志浩、卢山、梁敏、回永利等为本书的编写提供了非常宝贵的材料。软件工程中心武方方主任、张向虎主任、鲁昊鹏研究员、张剑研究员、张玉博高工、屈华敏研究员、苏媚高工、杨黎高工、李靖高工、张敏高工、赵亮高工、辛航高工、徐建军高工、郑小宁高工等领导对我的工作给予了无微不至的帮助。何四为律师为本书提供了一些有关版权的法律援助。机械工业出版社计算机分社的时静编辑给了我大力的支持与通力的配合。除此之外,我的父母、亲人、同事、朋友、同学,无论我遇到了多大的挫折与困难,他们都一如既往地支持与帮助我,使我能够开开心心地度过每一天。在此对以上所有人一并致以最衷心的感谢。

创作的过程是一个自我斗争、自我救赎的过程。无数个节假日,无数个深夜,当其他人沉浸在欢歌笑语中时,我需要安静地坐在计算机前,对所编写的内容仔细推敲,力求简单明了;将实例代码一一验证,力求准确无误。尽管弧独,但我觉得只要自己所做的事情、所付出的辛苦能为读者们增添几分求职成功的把握,我就心满意足了。

由于本人水平有限,书中不足之处在所难免,还望读者见谅。读者如果发现问题或是有此方面的困惑,可以通过邮箱xdhehao@foxmail.com或者xdxuepeng@foxmail.com与我们联系。

何昊

于古都西安

上篇 面试笔试经验技巧篇

第1章 面试官箴言

第2章 面试心得交流

第3章 企业面试笔试攻略第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,需要权衡哪些内容。我不是一名职业规划师,所以不能告诉他们如何做选择,我只能告诉他们,当初我在选择offer的时候,考虑了哪些内容,以供他们参考。但总的来说,我觉得应该参考以下5点内容:

1)兴趣点。兴趣是最好的老师,如果没有兴趣,你很难在工作岗位上有所作为。

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

3)薪酬福利。“钱不是万能的,没有钱是万万不能的”。一个企业再好,如果不给工资,同样没人会去,因为人要吃饭穿衣,所以必须仔细考虑薪酬福利。

4)个人成长点。每个企业对人才的定位都不一样,所以在选择offer时,尽量选择一些企业的核心研发部门,在这样的部门里面,个人成长、个人机会都会非常好。

5)城市。什么样的城市是自己希望的,是政治中心北京,还是东方明珠上海;是人间天堂杭州,还是千年古都西安;是天府之国成都,还是千湖之城武汉。各个城市有各个城市的优劣,所以没有谁能够告诉你哪个城市好哪个城市不好,关键需要你自己拿主意。

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

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

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

作为一名一线的技术研发人员,我结合自己这么多年在工作中的经历,分享一些经验给即将走入职场的毕业生,希望能帮助他们在求职的路上少走一些弯路。

(1)行业选择

我个人觉得应届毕业生择业时,选择适合自己的行业是非常重要的。对于计算机类专业的毕业生,可供选择的行业很多,例如商业银行类、国企、央企、传统的软件公司、新兴的互联网公司等。而这些行业又各有各的特点,对求职者能力的要求迥异。例如国企的工作相对轻松、薪资一般(体制内)、福利很好,对技术要求不是太高,对项目进度的要求一般不紧迫;互联网公司工作一般比较辛苦,对项目进度要求非常紧迫,技术研发能力也要求高,而企业文化一般较为自由,其薪资待遇也相对较高。所以,求职者应该根据自己的兴趣爱好以及能力特点选择合适的行业。

(2)技术领域选择

随着现代化管理技术的不断发展,IT企业中的技术分工也越来越明显。俗话说:“隔行如隔山”同样是计算机科学技术,不同技术领域的人在技术上也是非常迥异的,例如互联网企业与芯片企业关注的重心就不一样。毕业生一般也很难做到“通才”。所以,在求职时,求职者应尽量选择自己喜欢或擅长的专业领域,这些会决定你今后职业生涯的主要工作内容,而且一般也不会轻易更换。

(3)雇主选择

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

但总的来说,创业型公司更能全方位地激发个人潜能,多角度地发展个人能力,而大型科技公司可以集中锻炼某项专业技能。当然,上述说法也不是绝对的,比如某些小型高科技公司也聚集了业内的人才,完全具备大企业的“高精尖”特点,而一些大公司的某些部门在初创阶段可能也会像创业公司一样艰苦。如果难于抉择,那你就尽量去一家已步入正轨的大公司吧。

(4)求职建议

因为企业需要,我曾经担任过一段时间的面试官,帮助企业招聘新人。我们确实非常希望招聘到优秀的人才,但在招聘过程遇到了很多令人遗憾的事情。例如有的人在面试时因为紧张或是其他原因,发挥不出真实水平;有的人水平一般,却夸夸其谈,不脚踏实地,真正让他设计算法时,一头雾水。在此,我想说明一点,企业在招聘新人时,需要这样的人才:对人对事有信心、掌握多项技能、基础扎实、有冲劲、愿拼搏。所以,我建议毕业生在平时的学习中,一定要脚踏实地地学好专业知识,适当地扩展专业技能。

(5)能力培养

进入工作岗位之后,很多毕业生颇感迷茫,很难快速从学生的角色向职业人的角色转变。我觉得IT行业的职业人应注重培养自身的3种能力:技术能力、管理能力和领导能力。职场新人往往要靠技术能力进入职场,最初的晋升也主要依靠技术能力,它可以让你成为一名优秀的单兵或一名称职的经理,但很难让你成为优秀的经理人,因为它的杠杆效应非常有限,这时就需要第二种能力:管理能力。管理其实是对资源的管理和利用,以有效、可靠地生产产品或提供服务。管理能力一般可以通过学习得到,教育、经验、培训都是提高管理能力的手段。当然,个人的悟性也很重要,能够从表面现象中分析出规律,对管理能力来说很重要。管理能力主要是释放物的能力,它可给你一定的杠杆力量,能让你在小范围内有所贡献,但不会让你“走”很远。这时就需要第三种能力:领导能力。领导能力是释放别人的能力,再通过别人来释放个人或物的能力。领导能力作用可谓巨大,因为它有二级杠杆的效用。就领导而言,技术能力的重要性非常有限,管理能力次之,领导能力最为重要。职业道路不是单行道,而是可以从技术职位向管理职位过渡,再由管理向领导职位过渡的。

1.4 保持空杯心态

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

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

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

至于经典的数据结构、算法,无论是前端研发还是后台研发都会有所涉及,即便是更深入的掌握一般也只在较专业的算法密集型领域,比如搜索、GIS等。而对于你、对于面试官更注重什么,则看你们更侧重哪方面的内容了。

如果是已经入行的程序员应聘新的企业,经验及能力通常是面试官考查的重头戏。说得更直白一点,作为利益链条上的一环,你具备什么资本,能为公司创造什么价值,才是面试官关注的焦点所在,这也是你需要真正搞清楚并且为之准备的内容。做过什么项目,取得了什么样的成就,既说明了你的过往表现,也能将你的潜在价值表露一二。

进入工作岗位,我相信,不管是刚入职的毕业生还是已打拼多年的程序员,以“空杯心态”去融入当前企业文化,绝对不是件坏事。只有认可了企业的文化,工作时,你才能积极主动,才能上进、才能得到提升。就职业发展而言,一般公司都会有量化的绩效指标,完成这个指标即是一种自我提升,而在任务指标之外,结合自身情况制定出半年或全年个人发展规划,可以说是对自己短期能力提升的督促和目标实现的指引,有助于自己向着更明确的方向发展。

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

1.5 职场是能者的舞台

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

关于毕业生如何求职这个问题,老实说,我的“经验”并不是很多,若干年以前,因为应聘前准备得比较充分,所以命中率比较高,虽然也拿到了几个不错的offer,但最终还是选择了现在这家企业。这么多年过去了,回过头来想想,也是感悟颇深。

我认为一个非常有针对性的准备工作,包括心理准备与知识准备,这对计算机相关专业的毕业生求职非常有用。

首先,求职者应当找准自己的位置,即通常所说的职位。一个对职位有着准确预期、对自己有着准确定位的人,在个人简历、面试中都能够表达出更准确、更吸引人的信息,而不至于投递完简历之后就没了下文。而找准一个方向、找准一个行业或是锁定一个企业,不仅可以缩小求职的范围,而且还可以让你在有限的精力、有限的时间内将准备的内容进一步深入、细化。如果做到了这一点,不管是大企业的招聘还是小企业的招聘,也不管是在笔试还是面试,你很快就能发现,真正能够与你竞争的人、能够把你PK掉的人真的是屈指可数,此时你就成了求职大军中“笑到最后的人”(插入一个感悟:时下往往被人普遍提及的流行技术,反而是陈词滥调,只有真正理解其中思想者才能脱颖而出,如果没有十成的把握,我宁可绝口不提)。

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

介绍再多的理论和方法,也只是“纸上谈兵”,是否可行还需要用行动来验证,只有行动了才能体会到其中的价值。如果成功拿到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(Inte-grated Development Environment,集成开发环境),在纸上编写程序就与在计算机上非常不一样了。这里没有自动提示,没有语法高亮,没有拼写纠正,没有自动编译、链接与运行,全凭求职者平时的积累。但是在笔试和面试中,常常要当场“纸上谈兵”,如果不熟练就要吃亏,所以这一关必须要过。

1.7 小结

尽管每一个面试官的工作背景不一样,个人能力也不一样,而且面试套路也可能各不相同,但是,他们的目的只有一个,那就是发掘最适合企业的优秀人才。对于求职者而言,面试官的判定往往决定了求职者的去留,所以,求职者应该好好斟酌面试官的意见与建议,认真体会,进而不断地提升自己,努力让自己成为企业青睐的“千里马”。

第2章 面试心得交流

“前车之鉴,后事之师”,本章以各大名牌高校、研究所的毕业生的亲身求职经历与体会为蓝本,对当前程序员面试、笔试相关准备工作、时间计划、书籍阅读、面试技巧、offer(录取通知)选择等多个方面的内容进行了独到的分析,对于即将踏入职场的毕业生有着很好的指引作用。

2.1 心态决定一切

董哥,男,中国科学院计算技术研究所2012届硕士研究生,现就职于北京腾讯搜搜。

1.抛砖引玉

找工作的过程是较量综合实力的过程,一个好的offer凝聚着无数辛勤的汗水,需要勤奋、坚持、积累和付出。我在这里介绍一下我自己找工作的经验,希望对师弟师妹们有所启发。需要注意的是,完全做到了这里提到的几点并不意味着一定可以拿到一流的offer,这仅是抛砖引玉,如果想在找工作时得心应手,你还需要平时不断积累和总结,领悟其中的真谛。

2.心态决定一切

对于找工作,心态很重要,找工作之前,求职者一定要端正心态。20年寒窗苦读,最重要的一个目的就是找一份理想的工作,从而实现自身的价值,因而我觉得,求职者至少应该像准备高考那样,全身心地投入到找工作的准备中,将之前所学知识重新温习整理,以便将自己的所有能力最大限度地发挥出来,向面试官充分展示自己。

3.冰冻三尺非一日之寒

关于找工作前的准备,有两个因素直接决定求职者是否能最终被录用:一个是项目;另一个是基础知识。这两者中的任何一个被面试官所认可,求职者均可能拿到offer。

对于项目,不在多而在精。一般的项目,如普通的管理系统、网站等,面试官几乎不用耗费脑力,一眼就能看到底,没有什么好讲的。最切合也最能引起面试官兴趣的项目往往是与他现在所从事的领域相同或相近,解决的问题的确具有一定的难度,且提出的解决方案具有一定的创新点。但遗憾的是,大部分毕业生所做过的项目的深度往往不够,毕竟想在短短两三年时间里成为这方面的专家,还是比较有难度的,所以这个时候就全靠求职者的基础知识了。

基础知识大致可分为以下几个部分:编程语言、数据结构与算法、操作系统和其他小知识点。就编程语言而言,个人认为C语言是必须掌握的,很多公司把C语言作为必考项。另外,要在C++和Java两种面向对象的编程语言中选一个,主要知识点是面向对象编程中的一些基本概念,如虚函数、构造函数、析构函数、拷贝构造函数等。有一些题目已经成为经典,是必须、一定要掌握的,例如(C++语言)虚函数是怎么实现的?构造函数可以是虚函数吗?为什么鼓励将析构函数设计成虚函数?数据结构和算法是面试的重点,很多公司基本上只考数据结构与算法,这就需要求职者平时多积累、多练习。尤其对一些基本数据结构和算法,要非常清楚,例如单链表反转、Trie树、两个数组交并差集等。就操作系统而言,求职者应主要掌握Linux里的一些基本概念,如线程、进程、内存管理、文件管理等(这些也会在面试中出现,求职者一定要好好复习)。最后是一些其他知识点,如设计模式(单例、工厂模式等)、编译原理(程序从编译到运行要经历的几个过程)等。

4.修炼程序员之“葵花宝典”

找工作过程中,求职者一定要反复推敲一些经典的题目。这些题目大多来自固定的几本参考书,求职者应该好好琢磨一下这几本书中的题目。(1)《编程之美》

这是一本实战书,从事程序员一职的人都知道,很多笔试、面试题直接来自该书,值得各位认真阅读。该书中有些题目对于初入职场的求职者难度过大,从找工作角度考虑,可暂时不看。(2)《编程珠玑》

该书主要介绍软件设计思想,书中的例子已经成为百考不厌的经典题目,如数组循环移位、随机采样算法等。(3)《算法导论》

该书对各种常见算法进行了深入的讲解和详尽的证明,并对每个算法的起源、动机和求解过程有较多的涉及。(4)《深入理解计算机系统》

该书从程序员的视角介绍了计算机系统,几乎囊括了计算机的各个技术,包括数据表示、C程序的机器级表示、处理器结构、程序优化、存储器层次结构、链接、异常控制流、虚拟存储器和存储器管理、系统级I/O、网络编程和并发编程等。该书中提到的一些知识点,常作为面试题目出现,比如Linux信号量、虚拟内存管理等。

5.八面玲珑

关于找工作的技巧,这里主要介绍两点:一是回答问题的技巧,对于项目,主要回答点应该是遇到的挑战和解决问题的思路;对于算法问题,要从复杂度高的算法逐步向复杂度低的算法过渡,第一眼见2到题目,求职者可先将自己想到的思路说出来(比如O(n)复杂度),然后不断优化(比如O(nlogn)复杂度),最后尽量得到一个最优的算法(比如O(n)复杂度),这时候可能要在纸上写出来,一旦没有了思路,应该主动要求面试官加以提示;二是交流技巧,这里指的是求职者之间的交流,这一点非常重要,当前一位求职者面试完后,你应该主动跟他交流,主要询问一些个人收获、心得以及失误,因为面试官一天之中要面试众多的求职者,很可能会对不同的求职者提出相同的问题。

6.多多益善

最后是offer的选择。求职者应尽量多拿一些offer,以便给自己留一些选择的余地,至于怎么选择offer,这是个人的问题,每个人侧重点不一样,因人而异,但我觉得适合自己的就是最好的,没必要和别人进行比较。

2.2 假话全不说,真话不全说

萧叶,中山大学2012届硕士研究生,现就职于睿初科技(深圳)有限公司。

1.万事趁早

我大概是研究生三年级新学期开学后开始准备找工作的,从后来的情况来看,我已经准备得很晚了,因为校园招聘的时间好像提前了半个多月。这也给了我一个教训——万事趁早。因为我们不能预知公司什么时候来招聘,只能自己提前做准备。准备太晚的结果就是,我没能赶上9月中下旬的阿里巴巴、淘宝等公司的招聘。

2.不经一事,不长一智

虽然我很早就确定了找工作的两条原则——去外企和搞技术,但是当校园招聘开始时,我几乎还是逢公司必投简历(当然得是软件研发类的),一来是因为自己手头无offer,心里总是有些没底,不知道自己是否能够找到满意的工作,特别是看到周围同学暑假实习回来就拿到了offer,心里不免更加担心,紧迫感更加强烈;二来是因为本科毕业就直接读研了,没有真正找过工作,对找工作还是很陌生。

所以我认为,“海投”也没有什么错,虽然“海投”的这些公司并不都是自己非常想去的,但是如果不趁早积累和总结点属于自己的找工作心得,等到心仪的公司来时胜算有多大就很难说了。

3.读书破万卷,面试如有神

因为准备得比较晚(个人觉得从暑假开始准备算比较合适的),所以我基本上是一边找工作一边准备面试笔试,而准备的方式主要就是看书。对于大多数没有项目经验或项目经验较少的研究生和本科生而言,看书是投入产出比最高的准备方式。因为笔试面试最常见的内容不外乎语言、数据结构与算法、操作系统、软件工程等内容。语言类靠编程指南之类的书籍即可,对于其他专业知识点,我认为比较有帮助的书籍有《(more)Effective C++》《(more)Exceptional C++》《C++Com-mon Knowledge》《算法导论》等。语言类书籍给出的都是语言规范等确定性的知识(告诉你是什么),非常适合应对笔试;而后一类书则好比内功心法(给出一个场景,分析各种方案的优缺点,告诉你为什么是这样),看这类书的收获,与编写的C++代码量正相关,面试时专业能力较强的面试官喜欢问这类问题。这个系列的书,无论读者水平是高是低(当然基本语言知识得懂),总能从中领悟到一些东西,而且每次再读,又会有新的体会,不仅适合找工作时读,平时读也有助于提高自己的业务水平。至于算法方面,我认为这不是看看书突击一下就能显著提高的,就算把那些常被问到的排序算法硬背下来,面试时也不太管用,这个还是要靠平时的积累和领悟。

4.人性化的简历

在简历的制作上,排版可以讲究些,这样做的目的是让筛选者快速、准确地找到他所关注的内容(如技能、项目经验、成绩等),以两页为宜(有人说最好一页,但个人感觉一页根本写不下,也容易让筛选者觉得材料有点单薄)。至于打印,我觉得最好选稍厚一些的纸,至少不能很清晰地看到背面。总之,要让简历的筛选者拿着、看着觉得舒服,彩打就不必了(明确要求的除外)。

5.假话全不说,真话不全说

面试到了尾声时,面试官(通常是技术主管、人力资源或经理)有时会问求职者有关职业规划、家庭背景、已经拿到了哪些offer等情况。尽管在此之前,很多师兄师姐给我传授了相关技巧,但是我还是按照自己的真实想法做了回答,也许正是因为自己太“老实”,最终与几个公司擦肩而过。华为、爱立信都问了我拿了哪些公司的offer,我如实回答了,还有一家公司问到,如果给我offer我是否签约,我说要考虑一下。我觉得实话实说并没有什么不当,一个对自己负责的毕业生找工作时“货比三家”,最终选择自己最满意的工作是无可厚非的,企业应该能够理解这一点。但实话实说也并非一定要回答面试官的所有问题,例如有一位面试官对我家里的情况问得过于详细,还有两位面试官问到了其他公司给的待遇问题,我都没有正面回答。当然,拒绝回答问题就要靠技巧了,求职者要尽量委婉地拒绝,不要太过直接。

6.豆腐白菜,各有所爱

对于offer的选择,这是一个见仁见智的问题,我个人觉得,自己最满意的就是对自己来说最好的。我找工作主要遵循两条原则:第一,以外企为重点,希望将来能有机会到国外工作,但也并不是非外企不去;第二,非技术类的工作不做,因为我知道自己不适合也不太喜欢做售后、策划等工作。结果,拿到的几个offer中,爱立信和深圳睿初科技都是符合这两条要求的。这两家公司中,爱立信给予的是带附加条件的offer,要求现在能够过去实习至少两个月,人力资源和项目经理先后打电话问了两次,看得出来对方确实急缺人手,但是我的导师不同意实习,所以我只好作罢。而深圳睿初科技是我找工作以来遇到的所有公司中流程最严格(1轮笔试,1轮电话面试,4轮现场面试,两轮总部的电话面试)却又最人性化的一家公司,我对它的期望和好感就是在一轮又一轮的面试和沟通中不断提升的,以至于它最终给我offer时,我毫不犹豫地签了约。

其实,我觉得求职者先得确定自己找工作的原则,明白什么是自己最为看重的,然后重点准备符合自己原则的那些公司的笔试面试。

2.3 走自己的路,让别人去说吧

小郭,女,西安电子科技大学2012届硕士研究生,现在计算机网络与信息安全教育部重点实验室攻读博士学位。

时间过得飞快,转眼间,找工作大潮已经过去了一段时间,这是我第一次找工作,现在把自己找工作的一些情况以及心得整理出来,一来对自己的经历是一个总结,二来可以为以后找工作的师弟师妹们提供一些信息。我本科期间读的是计算机科学与技术,毕业后被直接保送到本校的计算机软件与理论专业读研,研究生阶段从事的基本都是软件类研发工作。

1.无悔的选择

在研二时,我就开始在找工作还是继续念博士之间犹豫不决,但紧迫感不够。到了研三,不能再犹豫了,我决定先找工作。最后,我真正拿到了4个offer:华为的软件研发、阿里云的无线平台开发、百度的客户端研发和腾讯的后台研发。尽管我最终选择了攻读博士学位,但这一阶段的经历还是让我积累了一定的经验。

2.出师未捷身先死

我是从研二放暑假回学校后开始着手找工作的,应该算比较晚的,复习的内容其实就是《面试指南》《编程之美》和各种专业课书(比如数据结构、操作系统、计算机网络等)。近年来,校招的时间越来越早,当第一批公司来的时候,我还很多内容没有复习。

最早来的是联发科。毕竟是第一次找工作,当时我心里还是很紧张的,笔试题不算难,我顺利过关了。接着就是一面了,大概半个小时的样子,主要问的就是实验室做的项目;一面结束后等待二面消息,可是当身边很多同学都收到二面通知时,我却没有收到。第一次找工作就碰壁,当时对我打击还是挺大的。后来我静下心来总结了这次面试失败的原因,其实联发科的面试问题并不是特别高深,都是一些基础知识,失败的主要原因我觉得在于两点:第一,面试太紧张;第二,准备不充分,尤其是项目部分,与面试官的沟通不是很好,面试官对我做的项目应该没有什么了解,而我所说的又没有提起面试官的兴趣,因此我说的话面试官不懂,面试官提的问题我也没有清楚明了地回答。

3.过五关斩六将

九月下旬,华为、中兴等公司陆续开始了校园招聘。华为面试的场面非常壮观,每天参加面试的学生数以千计,4轮面试不停,我是从下午1点开始面试的,第一天直到晚上9点才面试了3轮,而第4轮面试要等到第二天,于是我拖着疲惫的身体返回了学校。华为的面试一共分为4轮,分别是技术面试、上机测试(上机编程)、性格测试和HR(人力资源)面试。技术面试的面试官就问了一下实验室项目,然后让我写了个简单的程序,接着是上机测试与性格测试,上机测试并不是要求编写的程序完全正确,而是面试官根据写的程序进行打分,然后参照同一批人的水平来决定是否通过。而最关键的就是性格测试了,很多人都在性格测试这一关止步了。我一个同学就因为性格测试的时候仔细斟酌,害怕回答得不好,最后没有通过性格测试。对于性格测试,我的心得就是不要太紧张,放轻松点,做题前后要保持一致,尽量不要前后矛盾,按自己的真实想法耐心回答即可。第二天进行的第4轮面试其实也只是随便聊聊天,面试官询问了我的家庭背景以及与一些与技术无关的问题,就直接发给我口头offer了。

之后是百度、腾讯和阿里云3家互联网公司,我感觉百度最注重算法,面试时间也最长。其实能拿到这3个offer,我个人觉得很重要的一点就是心态,我去面试这3家公司的时候心里很放松,没有一丝紧张,权当是去锻炼锻炼,这样效果反而不错。当然也不是只要不紧张就可以了,面试成功的因素是多方面的,与求职者所遇到的面试官、当年的就业形势都有一定的关系。但是在自身方面,除了心态好,还要有充分的准备,尽量把自己会的、面试官也感兴趣的东西表达出来。在项目方面,因为有了之前面试的经验,我与面试官讨论项目越来越熟练,对项目的理解与总结也越来越好,这无疑为我求职的成功打下了良好的基础。此外,我个人认为不仅要对自己做过的每一个项目做充分准备,而且一定要实话实说,因为每家公司注重与感兴趣的内容不同,或许他们会对你没有准备的项目很有兴趣,如果这时候你显得很生疏,那么就很不利了。例如面试期间,阿里云对于我曾经参与过的编译器有关的项目感兴趣,而百度则对网络安全中的身份认证感兴趣。当然,实话实说的意思是不能说假话,但是并不意味着要把所有实话都说出来。如果说假话被面试官拆穿了,那么求职就彻底没戏了。有时候可能有人会抱着侥幸心理,不过我碰到的这3家公司的面试官对我简历上写的项目总有一个会很熟悉,有的甚至不止熟悉一个,因此我建议求职者还是踏踏实实、实话实说。这3家公司的面试题与华为、中兴的区别甚大,他们更注重的是求职者的能力和反应,面试官可能会就一个问题与你讨论很长时间,如果很顺利地回答好了,那么面试官会将这个问题延伸;如果回答不出来,面试官会给你提示并与你讨论。总之,和面试官交流的过程就是把自己的能力展示给面试官看的过程,就算回答不出来或者答得不完美其实也没什么关系。

4.成绩第一

除了心态好、对项目熟悉之外,最关键的就是技术了。在面试过程中,我虽然没有把面试官问的问题全部回答出来,但是也回答得八九不离十,因为有很多面试题所涉及的知识都是我以前在实践中或者在技术书籍中看到过的。在研究生阶段,我利用课余时间看了不少专业书籍,如《编程之美》《编程珠玑》《计算机程序设计艺术》《Windows程序设计》《C陷进与缺陷》《C专家编程》和《深度探索C++对象模型》等。这些书籍对我找工作的帮助非常大,不仅足以应对笔试,面试,还让我从中学到不少考虑问题的思路和方法。

在面试过程中,笔试成绩高还是很有优势的,我在阿里云面试时,因为笔试成绩很高(后来面试的时候看到的,接近满分),面试官也对我很有信心,尤其是第3轮面试的时候,部门负责人直接说已经可以确定我通过了,整个过程中都说我的笔试成绩很好,因此没有问什么技术问题,而是给我介绍他们的工作情况。

拒绝我的Marvell(美满)上海研发中心是一家全球领先的半导体厂商,因为是外企,因此他们对英语有较高的要求。我很早就向这家公司投了简历,过了很久之后才接到了他们的面试通知。一面结束后我才了解到,让我去面试是因为我有参加ACM竞赛的经历,所以在这里插一句,有机会的话一定要尽量多参加一些竞赛,一来可以锻炼自己的能力,二来可以增加一些经验,而且有可能会让你拥有比别人更多的机会。Marvell的面试一共有3轮,3个面试官全都问技术,3面下来花了四五个小时,面试官不同于上面提到的那3家互联网公司那种随和的感觉,每个人都很严肃。第一个面试官主要问我算法,让我设计一个两部电梯的调度算法,主要从人性化的角度去考虑,我设计了几个方案之后面试官都不太满意,算法题结束之后又用英语交谈了一下;第二个面试官主要问的是与项目有关的内容,还有一个与专业无关的测试,问项目的时候问得非常细致,幸亏我面试之前有所准备。这些结束之后他让我说说如果让我测试一款手机我会怎么测试,越完整越好,由于在此之前我曾去中兴西安研究所参观过手机测试部门,因此就说了一些自己见到的,面试官对我的回答应该还算满意。第三个面试官的问题包罗万象,软硬件都有所涉及,软件我还能应付,硬件就有些力不从心了,因为研究生阶段我没有接触过硬件。当天面试完毕之后,我感觉希望不大,不料过了一段时间,我收到了Marvell美国总部的邮件,叫我把GPA和英语简历发给他们,当时我已经决定攻读博士,还在准备英语考试,所以就没在意,随随便便发了一下,之后就没回音了,我感觉后来没能收到Marvell的offer很有可能是因为英语简历不过关,那份英语简历是我在暑假的时候草草做的,没有修改,很多地方都不完善(甚至有语句不通的可能)。虽然没能收到Marvell的offer,不过我的收获还是很大的,这次面试让我知道了自己的知识和水平还有很大的提升空间,进而为我后来的学习提供了动力。

5.走自己的路,让别人去说吧

最后我拒绝了所有offer,继续攻读博士学位,这里有一些主观原因,也有客观原因。总之,选择了就要走下去。其实每个人都会在生活中遇到很多选择,我觉得不管你选择了什么,只要是自己选择的,就不要后悔,踏踏实实地走下去,坚持是最重要的。

2.4 夯实基础谋出路

Jololee,男,浙江大学2012届硕士研究生,现就职于杭州网易游戏。

我目前就职于网易游戏(杭州),以下是我对求职的一些感悟。求职时,我申请的职位是服务端研发工程师,现在从事的是在游戏部门做后端研发工作。

1.万事不备

我是从7月份开始准备找工作的,刚开始并不算太努力,断断续续,自己也比较松懈,而且中间还得给导师做项目,所以只是零零散散地进行复习,对知识点的掌握也并不是非常精深。直到9月份,重心才完全投入到找工作中,我开始看一些专业书籍,如《算法导论》《C专家编程》等。

2.夯实基础谋出路

对于面试笔试的准备,我觉得基础是根本,所以需要多学习一些基础知识,参考的图书有《算法导论》《数据结构》《深入Java虚拟机》《Java多线程模式》等,其他内容由于时间紧迫,看得比较匆忙,如《编程之美》《编程珠玑》,另外,编程指南类速成书籍我也看过,不过感觉一般,仅可以应付小公司的面试。所以我的经验是如果时间允许,“多读书,读好书,夯实基础”才是“王道”。

3.字字珠玑

我找工作的过程真是几多坎坷,现在分析关键原因还是自己准备得太晚。9月份第一波招聘潮到来的时候,我还没有看过《编程之美》等书籍,这也导致我与一些好公司失之交臂。

简历制作要区分国企、私企、外企,国企考查求职者的综合素质,他们一般更注重综合素养,而不仅仅是技术细节;而私企一般会深入考查,需要把求职者简历上的每个项目都弄清楚,要求技术扎实、深入;外企需要求职者能够用英语讲述自己的经历、说清楚一个项目的工作以及具备良好的表达能力。

不准备算法,错过一半公司;不准备项目经验和技术,错过另一半公司。如果想去外企,英语好是必需的。

4.多方询问

应届毕业生可以从师兄师姐那里得到一些关于企业的详细资料,也可以从学校BBS(水木清华、饮水思源、飘渺水云间、西电好网、北邮人等)上的帖子获取相关信息,还可以广泛征求同学或朋友的意见和建议。一般实验室应届生毕业每年去的公司都差不多,要善于与毕业的前辈联系,多询问他们的建议,他们一般也会毫无保留地给予非常善意的回答。

5.忠言也顺耳

找工作过程中的坎坷让我身心疲惫,但同时也受益匪浅。最后得到的结论就是应届生的水平一般不会差距太大,如果想把工作找好,就要下真功夫、下苦功夫,就跟高考冲刺一样,方能水到渠成。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载