【好书推荐】《剑指Offer》之软技能
俗话说,对于程序员来讲,每年都应该出去面试一下,看看自己的技术能力在外面处于什么水平。程序员在一个公司一个环境一个业务干得太久,很容易丧失学习的动力,获得的仅仅是从新手到熟手。当然,我相信在各行各业均是如此。但是,恰好,计算机的技术层出不穷,每年都有新的框架新的技术出现,甚至会要求程序员在一个项目中立刻上马一个全新的技术。
《剑指offer》这本书的作者来自于微软,书中第1章主要介绍面试的常见流程,以及在简历的准备以及面试过程中的一些软技能。后面6个章节则介绍了面试时所具备的一些硬技能,也就是专业知识的掌握程度,以及编码动手能力,解决问题时的一些思路等等。
【好书推荐】是我一直以来想增设的一个主题,但由于本身工作经历的原因,看完一本书和对一本书进行概括总结以及思考的能力还有待进步,便一直搁浅迟迟没有展开。所以我尝试用一种另一种方式来开展这个主题,边读边写,更希望读者能和我一起读这本书交流这本书。
《剑指offer》这本书,我打算用两个大的主题:一、结合书中作者的经验聊聊面试中的一些软技能;二、逐一通过java编写书中提及到的编程面试题,并在题中给出几种不同的解法和思路过程。
本文先谈谈第一个主题——面试软技能。
简历
面试的第一步是写简历,简历如何写确实是个学问,一味的想去填满美化自己的简历,把不该写的写在了简历上反而得不偿失,把自己应该大写特写的部分一笔带过也是一种重大失误。我第一次跳槽的简历不完全统计我改了8个版本。
这是我存储在onedrive上的简历版本,通过修改时间能看到,从第一版到第八版经历了6个月。
简历是面试的第0步,千万不能随意对待,当然如果你的背景强大,学历背景、哪个大厂的背景或者是职位背景,那可能只需要和boss喝两杯咖啡就能拿到offer。言归正传,我们先来看看《剑指offer》的作者是如何建议我们书写简历的。
-
项目经验
作者建议面试者在简历中按照star法则描述项目经验。
situation:简短的项目背景。
task:自己的任务。
action:为完成任务自己做了哪些工作,是怎么做的。
result:自己的贡献。
很多人不知道如何描述自己的项目经验,不少人通常会这么写:该项目是用于xx的后台管理系统,使用了ssm框架,采用了mvc结构,应用了xx技术等,我负责了xx模块、xx模块的开发。然后就不知道该怎么写下去了,觉得这个后台系统没什么可写的,草草地描述。这个描述对于面试管来说基本没有什么信息,这样的简历很有可能面试的机会都没有。作者在书中结合star法则描述了自己在微软winforms项目组的经历。我们来通过star法则来看看如何描述自己做了一个看起来没有什么技术含量的后台管理系统。
该项目是xx的后台管理系统(situation)。本人的工作是独立开发了xx模块、xx模块(task)。在做xx模块时,发现在和前台交互过程需要写大量的分页代码,于是本人通过查阅资料将mybatis的分页插件pagehelper引入到了系统中,解决了分页代码重复编写且比较容易出错的问题。另外在做xx模块时,因为要实时获取后台数据,并且数据有变化时需要将数据推送到前台,并没有采用轮训ajax的方式获取,而是引入了websocket(action)。在这个系统的开发过程中,一直保持较低的bug率,一共完成了xx个功能模块,占整个系统x%,在性能提升方面分析业务,将一些同步任务改为了线程池异步的方式大大提高了性能(result)。
-
专业技能
这一块在简历中也是比较重要的部分,作者解释了“了解”、“熟悉”、“精通”的区别。
“了解”指对某项技术只是上过课或者看过书,但没有做过实际的项目。
“熟悉”指如果在实际项目中使用某项技术已经有较长时间,通过查阅相关的文档可以独立解决大部分问题。
“精通”对一项技术得心应手,当有其他人向你请教这个问题时,有信心也有能力去解决。
对于我们简历关于专业技能的描述应该大部分是“熟悉”,敢把精通往简历上写的,那是真正的勇士。了解可以分情况来讨论,按作者的观点,如果你去一家做图形图像的公司面试,在此之前你没做过图形图像相关的项目,只是大学上过这么课程或者业余时间看过书,那么可以写了解图形图像,但如果你去一家电商企业面试此时你写了解图形图像就没什么意义。
对于很多人来讲,简历最大的问题是没什么可写的,“我做的大部分都是一些后台管理系统,涉及到的技术就只有spring、mybatis这些,什么redis、elasticsearch、zookeeper根本就用不上这怎么办”。如果你真的是这种情况,那我的建议只能是,再等等跳槽吧。那又有人说,我自己学,没有做过项目,那不也是了解某项技术了吗?那得看你怎么学。如果你学redis只是跑起来,写了个main方法set和get了一下就认为自己已经学了没什么好学的了;如果学elasticsearch、zookeeper同样也是跑了起来,就认为已经学好了。那这和精通八种编程语言打印“helloword”有什么区别呢?
*说,没有条件创造条件。我们说,没有项目创造项目。redis不仅仅是个缓存,你可以用它做分布式锁,可以用它做注册中心,可以用它做配置管理,找一找github上关于redis的项目,不妨重新造个*;zookeeper不妨也做个后台管理,不妨也做一个配置中心,这些做完不也是完成项目熟悉了吗?面试的时候,实话实话自己的项目大部分是后台管理,对于redis、zookeeper是自己业余学习的,自己也写了几个相关的项目,面试官大多会理解你的,甚至觉得你是一个不可多得的人才,没有做过相关项目经验不足是因为客观因素,但主观来讲你是一个非常热爱技术热爱学习的人才,这几乎成为了你的加分项。
3. 其他
简历上的就只剩下其他个人信息了,姓名、联系方式、毕业院校等等。
简历是面试之路的第0步,做完这步就是投递简历静等翻牌。假设现在有公司翻牌,此时就正式进入面试流程。
书中提到了面试常见的三个流程“电话面试->共享桌面远程面试->现场面试”。“共享桌面远程面试”我相信大部分没有经历过,我自己也没有经历过,所以我们跳过这个过程。
面试
1.电话面试
这个流程也并不是所有的公司都会有,也并不是大厂才会有。电话面试最关键的就是,找一个信号佳且比较隐蔽的地方。我曾在楼梯间接一个公司的电话面试,不料撞上了leader,场面一度非常尴尬。我电话面试有一个习惯,会做电话录音。目前大多数安卓手机都有电话录音的功能,主要是为了自己在电话面试后能对自己的面试情况做一个复盘,哪些知识点没有做好,是因为没掌握还是说话技巧的问题等等。
2.现场面试
书中作者说的很详细,谈到了面试公司的距离提前规划路线,当天的着装,以及注意面试邀约中的细节,包括提前准备几个需要向面试官提问的问题。
面试过程中作者介绍得非常详细,从需要掌握的基础知识到面试考察解决问题的思路等等。
在最后一个“向面试官提问的问题”时,有几个问题尽量不要出现:询问面试官的面试情况,询问薪水状况,而是尽量询问和面试岗位相关的问题。例如:这个岗位和xx业务相关,公司是否会有相关的培训等等。回想我以前的面试,在最后向面试官提问时,我认为,这是一个很好的机会,面试官是优秀的人,他经验比较丰富,这是一个很好的交流机会,所以我通常会向面试官询问针对自己的情况对自己未来的发展有什么意见或者建议等等,有的面试官真的会很耐心分析你的情况给你做一个分析和解答,这的确是一个不可多得的机会。当然你如果实在想不出问题,不问也比乱问好。
书中的第一章节,作者主要是谈到面试前以及面试的流程性问题,不要犯非技术性问题,低级错误,更多在于软技能。本文关于《剑指offer》的第一部分也介绍到这里,后面部分,我也会将面试的硬技能分享给大家,也希望大家关注公众号(coderbuff)和我一起阅读这本书。
这是一个能给程序员加buff的公众号 (coderbuff)