关于技术面试思考
Posted 春夜喜雨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于技术面试思考相关的知识,希望对你有一定的参考价值。
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)
1. 引言
最近参与技术面试,作为技术面试官;
面试之后自己思考:
哪种情况属于职位匹配度比较高?哪种情况是面试者理想的职位?哪种情况是职位的合适人选?
2. 思考
因为是做的技术面试,也仅从技术面试角度考虑;
从这次面试来看:技术面试可能考虑两个方面
- 岗位需要一个哪种类型技术积累的人,是积累技术深度的人,还是一个积累技术广度的人?
- 岗位要找一个什么技术方向的人?属于哪个业务领域,需要哪种底层支撑技术?
通常技术人员的积累有两种情况,一种是积累知识广度的人,一种是积累知识深度的人;
技术广度与深度
技术广度的人适合做售前咨询,咨询师(Consultant),全栈,需求工程师,设计工程师,项目经理类型;
技术深度的人适合做开发、研究、预研、技术突破、科研,技术攻关。
如果面试的岗位与个人的积累错位,就会感觉好像没有那么适合。
技术深度的要求是,在某个领域研究到代码库的最底层,达到一个精通的程度,甚至在国内或业界对该处的理解达到一个顶尖的程度。
技术广度的要求是,对于某个方案架构,如果实现,借助哪些不同组件的对接清楚,通过不同组件的搭配形成一个有竞争力的实现方案,一个可行的实现的方案解决某类需求或问题。
业务领域与技术方向
再一方面技术方向的积累,不同的业务领域、研发领域,会积累不同的技术方向:分别一种是业务领域积累,一种是底层支撑技术积累。
业务领域与底层支撑技术是两个不同的方面,例如 会计记账的流程 与 开发记账软件用到的开发技术;
例如图形领域:业务积累的建模、图形、颜色基础、显卡硬件特点;技术积累的矩阵变换、渲染等相关的知识;
例如电信领域:业务积累的通信、账单知识;技术积累的设备管理,后台开发技术,高并发,数据库、linux等相关知识;
例如银行领域:业务积累的账务、安全知识;技术积累的前后台开发技术,高并发,数据库、linux等相关知识;
这块是一个知识匹配度的问题,所积累的业务领域与底层技术方向是否和岗位需求是否一致,如果一致就学习成本最低,匹配度也有利于快速在岗位上发挥作用。
通常业务领域一致的,底层支撑技术也相似;
通常业务领域不一致的,底层支撑技术可能一致,也可能不一致;
区分来看:
业务领域一致,底层支撑技术一致的属于少数情况,相当于完全是别人培养好的送过来,这种情况一般也就竞争对手过来,并且处于同一研发部门的人才有可能满足;岗位匹配度极高,属于较为少见的情况。
业务领域一致,底层支撑技术不一致的,这种情况的话,属于同行过来的人员,这种情况适合类似业务专家,需求分析师类型岗位,业务要求高,技术要求低的岗位,也或者培养下上手技术要求高的岗位。
业务领域不一致,底层支撑技术一致的,这种情况,应该属于大多数情况,例如C++/java/c#/js某一技能优秀,数据库技能优秀,linux调测技能优秀,网络socket、多线程多进程通信、高并发这些技能,都是比较通用的技能,在各个业务领域一般都会用到一种到多种,这种情况下业务领域稍加培养,就可以上手工作,并且也能迅速的发挥总用,是大多数岗位的目标人选。
业务领域不一致,底层支撑技术不一致的,这种情况,就属于相对较大了,通常的话需要双方都意愿强烈,或者一方做出较大的妥协,否则较难达成一致。
3. 对号入座
基于上面的分析对号入座;
我们也可以评估自身是属于哪种类型的:是期望成为积累技术深度的人?还是期望于积累技术广度的人?也需要我们在就业时做一定规划。
我们也可以基于业务领域与底层支撑技术积累,来找寻适合自己的岗位?要不要进入一个新的业务领域?要不要学习一种新的技术?自己的优势在哪?
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)
关于野生程序员面试的故事与思考
在招聘前端工程师的时候,我们对应聘者的要求是,在掌握基本前端技术的前提下,最好有更为全面的技术。这样,即使我们的项目人力结构、平台和方向发生变化的时候,他也能够更加灵活地转移到其他角色中。而且技术的全面更能表现一个人对技术的热情以及较强的学习能力。从团队多样性来讲,多一些技术种类的话,大家在一起也能碰撞出新的火花。
有一次,我在 QQ 群发布了一条简单的信息:“招聘前端工程师,全栈更佳。”随后有一个“全栈工程师”A君向我自荐。
我问他:“我们的职位是前端工程师,那么您有哪些前端方面的技能呢?”他回答:“我擅长 HTML、CSS 和 JavaScript。”
“对于 Web 性能优化,您有哪些了解和经验吗?”他思索了一阵答道:“我们在发布项目之前压缩 CSS 和 JavaScript 源代码,这样文件体积就变小了,用户加载必要资源所花的时间也就更短了。”我继续说道,很好,还有吗?他想了半天,答不上来了。
其实关于 Web 性能优化,有非常多的方面可以去做,我希望应聘者能尽量多回答一些。
我想既然他对 Web 性能优化方面不太熟悉,可能他是一个偏后台的程序员,因而就又问道:“关于服务器端 MVC 架构的技术实现,您是怎样理解的?”他说:“是数据模型、视图、控制器的分离。”
我更进一步问道:“这种架构方式有什么好处?您在项目中是如何应用这一架构的?”他回答说:“MVC 的架构方式会让项目可维护性更高,所有涉及界面的代码都在视图(View)里面,所有涉及核心逻辑的代码都在模型(Model)里面,URL 路由之类的代码都在控制器(Controller)里面。我在项目中使用了 MVC 架构的 PHP 框架——CodeIgniter。”
好吧,我想这是一个典型的“知易行难”的开发者,他知道采用 MVC 架构的项目的可维护性更高,可是在分离样式与结构上面还没有达到最基本的要求,甚至把 CSS 写在 HTML 中。至于他说的在本地环境上发现 CSS 文件经常缓存,可能要看看本地服务器的缓存设置是否有问题,然后再做调试。稍微了解一点 HTTP 的浏览器端缓存,这就不是难事了。我更欣赏在开发流程上花工夫去理解和优化的应聘者,而不是马马虎虎,只是以完成需求为目标的人。
我突然想到他说的“所有需求他都能完成,且只有他能完成”,于是就想问问他代码版本管理方面的问题。我说:“您们团队现在加入了两个新人,那么您们如何进行代码版本管理?”他回答:“我们有一台测试服务器,用 FTP 来测试代码,如果在测试机上没有问题的话,我们就会发布到生产环境。”
我说:“等等,我不是问您们代码部署的问题,是平时您们如何管理代码版本,如何分工协作的?”他说:“我们把代码从测试服务器上拷下来,修改完了之后再传上去。”
到这里,我终于明白为什么他们团队的新人无法快速融入项目了,因为项目没有使用 SVN 或者 Git 这样的版本管理工具。团队只有一个人在写代码的时候,缺乏版本管理工具的问题可能还不会暴露出来,但是当更多成员加入时,整个项目就会寸步难行,大家都要花大量的时间合并代码,以及找回丢失的代码。万一出现了外网 bug,版本工具也能帮我们把站点状态快速恢复到之前的时间点。
最后我抱着几乎绝望的心情,问了下关系数据库设计原则方面的问题,他的回答也不是很理想。
我知道,我又遭遇了“野生程序员”。
什么是“野生程序员”
所谓“野生程序员”,就是没有计算机基础知识和相关教育经历,靠着对计算机开发的兴趣进入这个行业,虽然知识面比较广,但是各方面都一知半解的开发者。
这几年我从一个求职者,转变成一个招聘者,有一个感受就是,中国高等教育与市场需求不接轨。学校不了解市场究竟需要什么样的人才,其设立的课程和技术往往比市场技术现状落后了 5 年以上。我在大学学习用 ASP 建站,但是现在已经几乎没有人用 ASP 建站了。一个直接的后果是,很多高校毕业生不能满足企业的要求。
与此同时,中国互联网市场蓬勃发展,特别是移动互联网的发力,让中国跳过“WAP 时代”,直接进入“App 时代”。市场的热钱都投入到互联网行业,“BAT”等大公司不断扩张,创业公司也如雨后春笋,整个市场对软件工程师的需求缺口巨大,所以很多公司在招人的时候,没法招聘到“专业”的计算机专业毕业生。
在美国,因为教育与市场稳定发展了很多年,供求关系相对平衡,计算机相关专业本科已经成为基本要求。举例而言,美国的硅谷公司(如 Google)绝大部分前端开发招聘岗位都有一个最低要求——本科学历,计算机相关专业。
相比而言,从中国的大公司(如腾讯)的招聘网站上可以看出,有一些前端开发岗位没有对学历的要求,也有一些要求“本科及以上学历”,少数才会要求“本科学历,计算机相关专业”。我们的团队中就有一些成员是大专学历。许多企业在招聘的时候往往放松了对学历的要求,只看重项目和经验,而不看重学历。这是一件好事,代表市场在高等教育的规模和质量都跟不上市场要求的情况下,给予更多有兴趣和能力的年轻人进入 IT 领域的机会,也填补了人才市场的空缺。
美国硅谷,是世界互联网公司的中心,是所有求职者梦寐以求的圣地。在最开始,硅谷之所以名字当中有一个“硅”字,是因为当地企业多数是从事加工制造高浓度硅的半导体行业和电脑工业。随后,互联网公司和软件公司渐渐取代传统的硬件公司,让硅谷获得了新的生命,但硅谷这个名字保留了下来。在硅谷从诞生到发展壮大的整个生命周期中,斯坦福大学起到了很大的作用,我认为称之为硅谷的母亲也不为过。
在中国,由于政策、环境、历史原因,还有大学教育投入上的差异,导致大学在整个互联网发展中起的作用没那么大。中美两国 IT 人才市场供求关系上的这些差别,也反映在整个行业文化中。
一个直观的反映就是软件工程师的“草根”化。其实很多软件工程师的收入都很高,处于中上层水平,相比金融行业的白领也毫不逊色,但是一谈起程序员,大家的印象还是“一年四季的T恤(在行业展会上免费拿的)牛仔裤,平时也喜欢宅在家里,不会像同样收入的金融白领,平时爱好听歌剧打高尔夫球”。这种差异一方面是外部人士对软件工程师职业的偏见,另一方面也是程序员行业的自惯。在招聘时岗位要求就已经放到最低:不要求学历、上班不要求着装、上下班时间灵活,这样才好更方便地招聘。而金融行业有意识地塑造一种“精英”文化,从学历就设置高门槛,即使有些工作根本不需要那么高的学历。
以上是关于关于技术面试思考的主要内容,如果未能解决你的问题,请参考以下文章