第01天 求职与面试

对于想进入C++软件研发岗位的朋友来说,肯定非常迫切地希望知道究竟怎样才能顺利地通过入职面试并拿到Offer。而对于大多数软件研发企业来说,他们最希望找到的是符合自身需求的软件研发人员。因此,企业会结合自身特点进行招聘。那么,企业会从哪些方面考察求职者呢?一般情况下,企业会从以下几个方面对求职者进行考察。

  • 沟通表达能力。这涉及口头表达和书面表达能力。企业通过求职者的简历可以在一定程度上考察其书面表达能力,通过面试可以考察求职者的沟通能力和口头表达能力。沟通能力与口头表达能力并不完全一样。口头表达能力指的是完整、准确地表述自己意思的能力;而沟通能力一般指的是在双方想法不一致时通过沟通来消除这种不一致的能力。沟通表达能力在日常工作中非常重要,良好的沟通可以有效提升工作效率、营造顺畅的交流环境,而较差的沟通可能对工作带来严重不良影响,甚至导致工作任务失败。
  • 软件系统的分析、设计能力。是否拥有软件项目的分析、设计能力对于求职者非常重要。一般来说,求职者在过往项目的表现可以在一定程度上反映其能力和技术素养。面试官也可能抛出相关问题考察求职者的临场分析与设计能力。这时候,拥有深厚的分析、设计功底就相当重要了。当然了,对于应届毕业生来说,这些能力并不容易获得。因为只有真正参与过项目(尤其是大中型项目)的设计、研发过程的人才会积累相关经验,从书上是无法真正获得这些经验的。因此,应该多参与实战型项目。
  • 编程能力。不同企业对具体软件开发技术的需求有所不同。但是,在对计算机科学基础知识的掌握程度、使用编程语言进行开发的能力要求方面,各企业应该是一致的。一般情况下,针对基础理论知识与编程能力的考察会分别进行。企业会通过答卷的方式考察求职者是否掌握扎实的计算机软件开发以及相关编程语言的基础理论知识,另外,企业还可能要求求职者现场编写代码,以考察求职者通过编程解决实际问题的动手能力。如果一名求职者在碰到面试官提出的问题时手足无措,不知道该如何下手,那么他应聘成功的希望就很渺茫。
  • 个性特质。对于企业来说,求职者将来是否能顺利融入集体并适应企业文化也非常重要,这决定了求职者在未来团队中是带来积极的正能量还是拖团队后腿。而这在很大程度上取决于求职者的个性特质。比如求职者是谦卑还是高傲,是充满自信还是没有主见,是积极乐观还是脆弱敏感,这些个性特质将对求职者能否在团队中发挥积极作用以及是否能顺利完成工作产生重大影响。

从以上可以看出,求职者只有具备较为全面的综合素质才能在求职时有较高胜算,而应聘成功的要诀就是“不打无准备之仗”。事实上,如果想进入某些知名IT(Information Technology,信息技术)企业,有些求职者可能需要花费数年时间进行准备。这意味着,如果准求职者是大学生,那么他可能从大三开始就要着手做准备了。对于求职者来说,应该做怎样的准备呢?针对上述各项能力要求,现在给出如下建议供参考。

1.为软件开发打下坚实的理论基础

俗话说,艺高人胆大、艺多不压身。求职者只有提高自身的水平,才能在众多求职者中脱颖而出,才能在面试官面前自由发挥、自信表现。那么,怎样才能打好理论基础呢?

工欲善其事必先利其器,好的书籍能让学习事半功倍,我们要选择一些C++软件开发的基础理论书籍进行学习。选择书籍时可以考虑从以下三个层级进行选择。

(1)入门级图书。要从事软件开发行业,就要先从入门学起,这时可以选择计算机组成原理、操作系统、C++程序设计、数据结构等方面的入门书籍。选择这类书籍的原则是能否用深入浅出、通俗易懂的语言把知识讲清楚。比如《C++Primier》《C++编程思想》等,这些书籍属于经典款,内容系统、全面、深入。其实,这两本书也可以作为入门级图书进行学习,但是这种书毕竟是大部头著作,一般人读起来会感觉压力很大。阅读这类书籍,需要制定详细的阅读计划并严格执行,而且需要针对书中的知识点多做些编程练习才能熟练掌握相关内容。随着Linux在软件开发工作中的普及,熟悉Linux系统常用命令也成了软件研发人员的必备技能。在软件工程方面,敏捷过程开发被越来越多的软件开发组织认可并在实际的软件研发项目中得到应用,因此,熟悉、掌握敏捷开发过程也是一项必备技能。

(2)提高级图书。在入门之后,软件开发人员需要在系统分析能力、设计能力方面进行提升。需求分析、设计模式方面的书籍可以提升研发人员在这两个方面的技能水平。而只有大量的软件项目开发实践的积累才能慢慢提升这些能力。另外,数据库开发在各种软件开发中占有重要位置,因此掌握各种SQL语句、商用数据库、开源数据库的使用也是必不可少的。在关系型数据库开发中,尤其重要的是数据库、数据表的设计能力。另外,对于界面开发人员来说,用户交互体验方面的设计能力是非常重要的,这在很大程度上决定了软件产品的市场价值。

(3)实用级图书。这类书籍不太容易选择,因为这类书籍应该以贴近工作实战为主,讲解真实的商业化软件产品的开发技能、设计方案等,主要介绍软件开发工作中的常见设计、经典方案、常犯的错误及预防手段等,一般会以功能相对完整的可运行软件为例进行讲解。

知识的积累不是一蹴而就的,技能也不是一朝一夕就可以掌握的。知识和技能需要日积月累、勤加练习才能掌握。机会只会留给有准备的人,越早开始准备,胜算越大。优秀的书籍、教学视频会大大提升学习效率,而寻找、甄别它们则需要花费大量的时间、精力。所以,选择软件开发方面的畅销书籍是个不错的方法。另外,网上有很多免费的教学视频,而且质量也不错,这也是一个很好的学习途径。

注意:关于C++跨平台研发领域更多的推荐教材或资料,请参考配套资源中【附录.pdf】中的【附录A】。

2.参加软考并争取拿到证书

计算机技术与软件专业技术资格(水平)考试是原中国计算机软件专业技术资格和水平考试的完善与发展。这是由国家人力资源和社会保障部(原人事部)、工业和信息化部(原信息产业部)主办的国家级考试,其目的是科学、公正地对全国计算机与软件专业技术人员进行职业资格、专业技术资格认定和专业技术水平测试。该考试分为5个专业类别,各专业类别中分设了高、中、初级专业资格考试,囊括了共28个资格的考核。通过考试获得证书的人员,表明其已具备从事相应专业岗位工作的水平和能力,用人单位可根据工作需要从获得证书的人员中择优聘任相应专业技术职务(技术员、助理工程师、工程师、高级工程师)。计算机技术与软件专业技术资格(水平)实施全国统一考试后,不再进行计算机技术与软件相应专业和级别的专业技术职务任职资格评审工作。同时,它还具有水平考试的性质,报考任何级别不需要学历、资历条件,只要达到相应的技术水平就可以报考相应的级别。

计算机技术与软件专业技术资格(水平)考试简称软考。如果IT系统集成商想获得某种等级的系统集成资质,那么该集成商的员工中持有软考证书的员工人数就要满足规定的数量要求。因此持有软考证书为求职者的求职成功增加了砝码。目前,有很多专业培训机构针对软考提供培训课程,其中不乏经验丰富的讲师。另外,有些网站上有软考的“每日一练”功能,这可以用来学习、巩固参与者自身的相关知识。相比初级、中级来说,软考的高级考试更难。因为软考的初级、中级考试只要把基础知识掌握牢固就可以了,而软考的高级考试则多了论文题目。虽然论文的写作有一定套路和方法,但是对于一个没有实际项目管理经验的人来说还是很难的。关于推荐网站,请见本书配套资源中【资源下载.pdf】中的【软考学习网站】。

3.在算法网站刷题

绝大多数软件工程师对于在国内一线互联网大厂工作充满憧憬,而对于一线互联网大厂或者众多创业公司来说,求职者对算法和数据结构的掌握与运用能力变得越来越重要。树、图、链表、排序等经常会在工作中出现,所以应该掌握这些知识。在实际的软件开发过程中,算法、数据结构的运用无处不在。试想一下,如果一名研发人员连二叉搜索树都没听说过,又怎么指望他能正确使用它解决问题呢?因此,求职者首先应打好数据结构与算法的理论基础。而除了看书学习之外,在算法网站刷题将有助于软件研发人员打下更为坚实的算法基础。推荐的网站请见本书配套资源中【资源下载.pdf】中的【算法刷题网站】。

4.荣誉、资质是加分项

在求职时,如果能够提供一些荣誉证书、获奖证书,或者提供自己在著名刊物上发表的论文,也能很好地证明自己的能力。在如今的扁平化营销时代,如果能提供自己的网站、公众号并且能够证明有很好的访问量,或者拿出自己发表过的有超大阅读量的技术类帖子或文章,也是加分项。需要说明的是,访问量或阅读量是靠日积月累地敲键盘、发帖子攒起来的,并非一日之功。

5.增加实践经验、提升技能

在求职时,有实际软件项目的开发经验也是加分项,尤其当求职者在该项目中担任项目管理角色或分析、设计角色时更是如此。一般情况下,企业希望员工入职后能够马上进入工作状态并且能独立完成工作,因为这会大大降低企业的运营成本。所以,如果求职者有相关行业的项目经验,就能很容易完成入职后的工作衔接。需要注意的是,在求职前做项目材料准备时,应当以自己主导的或者参与设计的内容为主。另外需要准备的是,项目在设计、开发过程中碰到哪些问题,这些问题是怎么解决的,自己有什么收获等。

6.确定目标

在应聘之前,首先应该确定目标(如目标行业、目标企业),并做好相应准备,做到有的放矢。

1)确定细分行业

IT有很多细分行业,如果想进入某个细分行业,除了掌握基本的开发知识和技巧外,还要有行业背景。比如大数据、人工智能、音视频、区块链、自动驾驶等,这些都是特定的细分行业,求职者可以提前选择自己感兴趣的行业进行切入。可以学习相关知识,也可以寻求相关企业的实习机会。

2)接受定向培训

有时因为条件所限,求职者并没有相关行业的实习经验,这该怎么办呢?别急,现在国内的培训产业发展得很好,有很多培训机构提供定向、专业培训,而且网上也有很多在线培训课程。如果求职者下定决心进入某个行业,可以提前接受这方面的培训。

3)对心仪的企业进行跟踪调研

如果对某个公司非常心仪,可以对该公司持续跟踪。比如,对该公司主营业务、经营状况、对外公布的研发项目进展情况等进行了解与掌握,甚至包括投资人及其背景也有必要了解。另外,求职者可以看看有没有朋友、同学在这家公司工作,在招聘网站上看看有哪些猎头服务于这些公司,甚至跟这些公司的HR(人力资源)交朋友,这样就会获取非常多有用的信息。当然了,如果能获得该公司内部人员推荐就更好了。另外,还要关注该公司的应聘筛选条件。比如,有的公司对于有创业经历、频繁跳槽经历的求职者比较介意,甚至有些公司会列出黑名单,在黑名单中的人员可能会被筛选掉。

7.面试注意事项

对于求职者来说,面试时的表现也非常重要。下面列出一些参考的注意事项。

  • 着装得体、举止大方。着装不应太前卫,要体现一定的专业性。建议着正装,衣服要整洁大方。最好提前查一下应聘企业在着装方面的要求。企业需要的是一名有专业素养、可靠的开发人员,如果有任何因素让对方觉得求职者不可靠,这对求职者是非常不利的。
  • 阳光、自信的精神面貌会给面试官带来好感。
  • 回答问题时应确保答案完整。要确保自己弄清楚面试官的问题再回答,避免因为回答不完整而让面试官一再追问。不要回避面试官的问题。
  • 对于自己做过的项目做好充分准备,在介绍项目时应把项目内容、人员分工、项目工期、出现的问题及解决过程进行总结性陈述。陈述时条理清楚、声音洪亮。需要注意的是,一定要把项目设计方案讲清楚,避免浮于表面,否则会让人感觉做事不严谨、缺乏说服力。
  • 技术面试讲究实事求是。不要吹牛,也不要不懂装懂。对于懂的内容尽量抓住要点进行陈述。
  • 对应聘企业提前做好功课,在面试时对应聘企业的某些项目表现出自己的深入了解与浓厚兴趣,这会让面试官对求职者有好感。比如,“我知道你们在处理X问题时采用了Y技术,但是你们为什么不考虑Z技术呢。”
  • 对于自己关注的个人发展空间、办公环境等内容,应该同面试官充分交流。

如果看过上面这些后,仍然感觉心里没底,或者希望了解更多关于面试的事情,可以参阅《程序员面试金典》。这本书是原谷歌面试官的经验之作,针对程序员面试的每一个环节,全面、详尽地介绍了程序员应当如何应对面试才能脱颖而出。其内容涉及面试前的准备工作、面试流程、面试官的幕后决策及可能提出的问题,以及出自微软、苹果、谷歌等多家知名公司的编程面试题及详细解决方案。

前面内容讲述的是入职前的情况,下面开始介绍入职后的准备工作,首先从C++跨平台相关的知识说起。