如题,所谓面试官的自我救赎,旨在从面试官的角度,寄渺茫希望于通过分享一些推销自己的个人经验谈,影响一些需要被影响的同行,进而未来自己能见到更多拎得清的候选人(膨胀了,呵呵)。
有价值的表达&表达的有价值
面试是一场自我推销的演绎,核心在于 商品本身价值 和 语言技巧 的有效结合,谓之待价而沽。
所谓有价值的表达,说白了就是要紧扣商品价值这一核心展开话题——因为你在推销你的 【能力】,而非你的【故事】(划重点)。而要说到语言技巧并非要高明的脱口秀能力,而只是要脑子清醒一些,不管是自我介绍还是回答问题,都尽量往自身价值上靠,多少不论都是好的,切忌无边际的蔓延展开,其实讲故事最让人反感。
练习小技巧:
话题多以“我做过的一个OOXX..” 以及 “我看过一个技术贴说OOXX...”作为开头,三五句话之内联系上当前要说明的主题。所谓表达的有价值,这个就需要实战经验和眼界的积累了,比较容易上手的方法是多向具体开发场景上靠,例如回答一些的技术问题或业务领域的话题,尽量从实用和实操的角度去举例说明,高端点的可以罗列业内知名的思想和落地方案,最好知其特质和差异,总之尽量不要背书。所谓知易行难,说的对不如做过事踩过坑实实在在。即使在知识点和专业术语表达上搞不准或不透,但是实际上的参与程度,才是你真正的价值和潜质。
个人能力与潜力的自我认知
此处重点在于【自我认知】,比如让你对自己的编码水平或设计水平进行自我评价。这个问题的潜在考评在于三方面:
- 大体的知道自己的编码能力在初、中、高、资深哪个档次,而前提是当你评价为高级时,要能明确区分出和初级、中级、高级水平之间的差距。若不知道怎样写更好,试问怎么能写出更好的代码。
- 人贵有自知之明,自知又是建立在“知众”和自省基础之上,不自知则不善于它山之石以攻玉,你我又皆是凡夫俗子,若不自知自省,因能力成长缓慢,能力和成就都有限。
- 潜力和成熟度的考量。结合工作年限,基本可以初步衡量应聘者的逻辑思维能力,归纳总结能力,以及是否勤于思考,是否有非口头上的追求,以及是否具备与工作年限相符的广度和厚度。有人年纪轻轻知识和能力体系就有骨有肉,有人时光荏苒匆匆多年仍是那几板斧头。
技巧:
别只盯着编码规范和注释,起码能说说使用设计模式,以及实际开发中必须注意的问题,例如有没有思考过返回值与异常码搭配使用,例如从平台规划角度考虑日志体系注意事项。
另外不需要过度神话如并发编程以及虚拟机的内存模型之类,非日常研发需要经常面对的边缘尖端课题,除非你能说清楚在基于业务需要的情况下,并发实现在事物处理方面有哪些考虑。另外在可预估业务量级的情况下,怎么把线程池参数配置化,将性能日志阈值参数化,在压测环节通过调整参数来掌控平衡性能上限,把安全隐患消弭于爆发之前。
当然,对于面对对象语言来说,在代码设计方面,抽象能力才最能体现代码设计功力。比较直接的就是设计模式的使用。很多人知道并且能够描述出各种设计原则和设计模式,但并不代表善于用设计模式 简化问题 。所以如果还不懂设计模式和抽象之间关联,那么建议在面试前复盘一下自己曾经在解决具体问题时(采用或暗合某种设计模式)的“灵机一动”或时参与项目中的一些相关的“奇思妙想”,在面试中直接分享一下收获和启发,作为面试官的我会很愿意认可你并期待被启发。
知识体系的下层基础和上层建筑
- 下层基础:知识点
- 上层建筑:解决方案
这里并不展开具体知识点,也不分享我浅陋的知识图谱,只是项捋一捋我对 知识点 与 解决方案 两个“代称”(划重点)之间的平衡观念。
知识点 的累计可以作为你的个人追求并将被我崇拜,但想要和你一起工作的我,其实要的是你的 解决方案 。两者并不矛盾,从目标导向和过程管理角度来说,个人学习,是为了在工作中的实际输出,正应该相辅相成,但我确实经常见到喜欢追求和炫耀自以为可屠龙之技。对 解决方案 这个词我强调一下,值得时未来面对不同的业务场景和需求,设计和规划两个维度,结合起来的方案。
经常遇见候选人不太理解我的 【编码水平】 这个概念,愚以为 “架构设计能力” 应属于“编码水平” 范畴,设计的本质目的是除了解决业务问题,但设计的根基则是可实现,所以架构设计应该是一种更体系化,逻辑更严谨,范围更广的“随机应变”的编码能力。
另外,为了让这部分不那么空洞,再来补充一些自己在招聘时,重点考核得几方面内容,算作一个初略的程序员能力评估模型,一共分五个维度:
不管时平时工作学习,还是准备面试,希望你在这五个方面都有一些准备,如果没有实操做铺垫,起码要有思考。关键字:【what】and【why】,最好知道【how】
望山还是爬山
大家都已是身在山中人,但作为面试官,我更欣赏在山中并确实在攀爬的人,不喜欢口头说热爱学习,说看XX源码,但【思想方面毫无见解】的人。因为我们都知道,不同的高度看到的风景和内心的感悟都不同,面试中并不难于鉴别。所以越早开始关注个人的成长程度,并开始思考,开始寻找方向,开始行动,并已经在向上进行时,你的表象,你传达的内容,都显而易见。
不论你是否认可或立志做"作"到老学到老的程序员,软件行业都在不断的创新,行业增长将我等凡人远抛身后,但为了工作的延续必然要不断提高自己。但是什么支撑你上升的曲线能保证一定的仰角而不是浑浑噩噩,如何已经浑浑噩噩但已经开始浪子回头,那么想清楚并在这方面有所准备在来面试。毕竟面试官希望你是为了提升和实现个人价值而来。
形而上学与形而下学
业务架构设计规划以及平台架构设计与落地规划,讲究Topdown,也就是先规划战略布局,在想好关键步骤和节点的战术打法,再开始局部的架构设计和编码。而局部的设计和实现过程,又需要Bottom-up 的一种形而下到形而上的抽象。具体不展开,名词不了解请百度下。这部分直接分享一下我个人对抽象能力评估的简单阶梯模型,也是我在面试中是衡量程序员和架构师设计和编码能力的等级划分。
后记
回顾本文所言,有些地方语焉不详,有些地方又思维跳跃,难免有些主观让一些读者难以认同,先容本人小小滴任性一下,然后再更任性的为自己辩解一二。
按我的用人标准,更看重软实力而不是具体技能。也是基于一种寻找“靠谱”的人公事,让团队越来越靠谱的打法。虽知天下熙熙皆为利来,天下攘攘皆为利往,但我更希望做人做事越做越明白。
我本身不赞成“听话”大于“能力”的这一“狭隘”的用人观,内持一点风法意气,同类异类皆可聚义江湖。兵无常势水无常形,与善变的需求战斗似乎已是程序员的使命召唤。而遗憾又无奈的现实,总想着把程序员逼迫成“人有远虑必有近优”的挖坑填坑双料高手,而要与这一现实抗争,必须真正逐渐强大起来。
六州歌头·少年侠气
宋.贺铸
少年侠气,交结五都雄。肝胆洞。毛发耸。立谈中。死生同。一诺千金重。推翘勇。矜豪纵。轻盖拥。联飞鞚。斗城东。轰饮酒垆,春色浮寒瓮。吸海垂虹。闲呼鹰嗾犬,白羽摘雕弓。狡穴俄空。乐匆匆。
似黄粱梦。辞丹凤。明月共。漾孤篷。官冗從。怀倥偬。落尘笼。簿书丛。鹖弁如云众。供粗用。忽奇功。笳鼓动。渔阳弄。思悲翁。不请长缨,系取天骄种。剑吼西风。恨登山临水,手寄七弦桐。目送归鸿。