软件开发工程师的面试应该考察哪些素质如何做权衡精Word下载.docx
《软件开发工程师的面试应该考察哪些素质如何做权衡精Word下载.docx》由会员分享,可在线阅读,更多相关《软件开发工程师的面试应该考察哪些素质如何做权衡精Word下载.docx(9页珍藏版)》请在冰豆网上搜索。
2,好,现在record已经在数据里面了。
我跑一句select*fromemployeewherelast_name='
Smith'
。
你觉得数据库具体做了哪些事情把这一条数据给返回的?
它是怎么从文件系统中把这一条记录给找出来的?
3,假设我的employee表里已经有一些数据了,这时候我加了一个新的column,会发生什么事情?
文件系统中需要做哪些改动?
4,假设我的employee表里已经有一些数据了,这时候加了一个index,又会发生什么事情?
要写入哪些文件,具备什么特性的数据结构?
5,好,现在已经有index了,那么同样的查询select*fromemployeewherelast_name='
在执行的过程中会有什么区别?
看能不能具体展开解释
6,如果你来设计数据库,你会怎么实现join呢?
如果两个表都建了索引是怎么做的?
如果两个都没有呢?
如果一个表有索引?
7,等等等等。
案例2,我用Spring用得最熟
1,singleton到底有什么用?
我用staticmethod为什么不能做同样的事情?
什么情况下会用staticmethod更好一些?
2,dependencyinjection到底有什么用?
interface在这里的作用到底是什么?
3,好,这么看来,spring确实可能在某些情况下有点用,那么如果你来改善spring的话,你会改进哪些点呢?
4,能不能大致讲讲,你觉得autowire具体是怎么实现的?
实际使用中会有哪些问题呢?
5,constructorinjection和methodinjection的优劣比较?
什么情况下用哪一个?
6,spring在unittest中起到什么作用,哪些情况下可以不用spring,给一下具体的例子?
7,如果有一天Oracle想在语言层面支持DI,你会怎么设计syntax?
为什么?
8,等等等等。
注意:
这里主要考察的是思维能力,看看他有没有想过这些问题,而不要纠结于Sybase或者Spring是否真的是这么实现的。
我再重复一遍,不要纠结回答的准确性,关键是这个人的思路怎么样,是不是能自圆其说。
这一部分一般持续20分钟到30分钟,取决于candidate的素质和话题本身能不能聊出东西来。
可能因为我的这个面试方式比较少见,感觉许多candidate一开始会比较紧张。
这时候作为面试官需要不断地给于正面回馈,让他觉得自己还不错,以便放松下来。
当然,如果实在是太差的基本就直接“doyouhaveanyquestionsforus”了。
2-经验
这个经验不但包括过去公司里从事过哪些项目,也包括平时都做些什么。
因为我的行业关系,我感觉纯大公司流或者纯互联网公司流的都有缺憾。
前者过于保守死板沉闷,后者过于激进缺乏质量意识,都比较极端。
最理想的是在大公司工作一段时间,同时业余维护一个github项目之类的。
这种人一般既比较积极主动,又能理解并遵守历史遗留问题。
属于兼容并包的好队友。
这一块一般10分钟,取决于有没有东西聊。
3-算法
这个可能会引起争议,算法上只要不是太差就行,毕竟我们日常工作牵涉算法的部分不是特别多。
由于一般我们第三面会有别的同时做pairprogramming,所以我这边都是大概问一个简单的但是实际的问题。
举个例子,给你一列区间,如何把它合并起来?
defmerge(ranges:
List[Int,Int]:
List[(Int,Int]=?
?
伪代码写在纸上就行了。
就是看看基本的排序递归的使用。
具体排序算法也不是非得写出来。
这一块一般15到20分钟。
4-对新技术的热情
最近有关注什么新技术吗?
angularjs啊,好在哪儿呢?
akka啊,解释解释什么是SoftwareTransactionalMemory啊?
之类的。
因为很多人很喜欢聊这些,也算是给自己充充电。
可能是我个人经历的关系,对新技术的热情是一个必要条件,但并不单独构成一个加分项,我见过很多对新技术很有热情,完全只是因为好奇,想尝鲜的想法。
对于组和公司的利益却不怎么放在心上。
把组里的项目当成试验场,这样的人最后往往需要其他组员帮他擦屁股。
这一块基本就是闲聊,当是收尾了,5到10分钟吧。
vczh的回答你就这么想把,这个人进来了,要跟你一起做同一个项目。
你愿不愿意?
在我们这,愿意就给hire,不愿意就给nohire,然后经过了一整天的面试这个人就有了很多hire和nohire,到时候一看便知。
李运华的回答谢@忻尚魁的回答我这边招人的话普遍是如下
1.满足该岗位的技术能力(不扯细节代码,从一些技术实现方式上即可快速了解其程度)
2.喜欢编程(从自己做的非公司项目看)
3.可塑造(比如够年轻,可弥补技术能力问题)
4.交流能力好(说话听不清或者解释的东西让人很难理解,基本没戏)
5.有一定产品意识(能对产品提出质疑或从技术角度纠正产品的问题,而非像机器一样只干活)
我觉得技术方面不需要牵扯太深。
多年工作经验的话技术还是一般,是我的话就不会考虑的,不如去选一个刚毕业底子还不错的。
MiloYip的回答這個問題是和公司和工作性質相關的。
以我所在的部門而言,較偏向於技術研發多於純粹軟件開發,所以會比較看重基礎。
但由於國內一般比較不看重技術研發方面,而是重於產品製作,所以較難找到合適的有經驗的人材。
在這個情況下,通常比較希望慢慢培養基礎好的畢業生,讓他們養成良好的技術研究及軟件開發習慣,包括做實驗驗證想法、寫單元測試、寫各種文檔、嘗試做一些軟件設計、與客戶溝通分析需求等等。
這需要長時間的投入,不斷討論、檢查代碼文檔、給予建議等等。
當然,程序員總不會100%時間做高大上的事情,總要做一些較簡單、枯燥的工作,這也是一種訓練。
或許有時候可能用不著全部基礎,但有良好基礎的人往往有更好的潛力,在未來可以做更深入的事情。
侯天资的回答可能刚出校门的人或跨了领域的人,基础很好但没有职位所需的领域知识,需要从头学起。
也有一些人有多年工作经验,但基础一般,领域知识的掌握深度也一般,但可能可以解决公司或项目组面临的人手不够的迫切问题。
像这种情况,如何做权衡?
有闲钱就人才储备,没闲钱就项目优先,公司能够存活下去是第一位的,其次才是发展。
面试中,基础方面的考察,数学,数据结构与算法,写程序的功底,掌握到什么程度会认为是合适的人选?
再有,算法和数学题可能相对容易设计,但软件抽象的领域则不是三两句话就说得清的,如何在面试中考察一个人抽象的能力,和设计易于维护易于测试代码的能力?
有项目经验,以考察项目经验优先,从面试人员对其在项目中所做工作的描述就可以对其代码能力,业务熟悉程度以及人际沟通等各方面了解个七七八八。
再深入问一下做项目的时候遇到过什么问题,怎么解决的?
这时候侧重要了解的就是解决问题的能力,会包括数学,数据结构与算法的深入讨论。
没有项目经验,场景测试吧。
从一个已有项目中的实际问题聊起,看看面试人有何反应,以及能够提出怎样的解决方案。
一言概之,从实际项目出发,逐层深入,从架构到模块到技术难点,以开放式场景代替固定答案的算法与数学题,重点观察/考察的是思考的过程,而非结果。
不过这种方式对面试官的能力要求很高,不是所有的面试官都能以这种方式考察被面试对象的
有很多日常的dirtywork,以及很多业务逻辑性的代码,事实上并不需要太多数学以及算法方面的知识也能解决。
那么招人标准抬得很高,让超水平的人来解决这些问题,是否又有浪费之嫌?
真正高水平的人都是聪明的懒人。
像这样的dirtywork或者重复性劳动,本身就可以通过跑脚本或者流程优化的方式大大提高效率。
你会发现当你真正雇佣到一个超水平的人去做这种事情的时候,他的效率会比死脑筋做这些dirtywork的人高很多倍,然后这些dirtywork就被他们打理得不那么dirty了,再然后他们所采用的工作流程和脚本就可以推广到整个Team乃至部门使用,再再然后他们就被晋升了(或者跳槽)然后你又开始招聘新人补他们的坑。
成隽的回答1.有洁癖
各类元素的命名、包名字空间划分,代码自解释
这些素质能很快区分出“高-中低”两个层次。
2.对“为什么”感兴趣,热衷并善于动手解决“怎么干”
3.懂取舍,懂平衡
“趋势-性能-成本-维护”这些方面懂审时度势,趋利避害。
1是好员工,搞定多且平凡的琐事
2是能手,搞定难点
3是牛人,给个方向目标,带着1、2就能把事了了。
考察1,百行代码的基础逻辑试题足够。
考察2,面试官可无意曝露或伪造自身项目架构烂点,或表达含糊不清。
好奇心强爱刨根问底的应聘者会追问、提疑虑、给建议。
太傲的不屑的放弃。
考察3,暴露一堆烂尾,面试者能总结出失败点很好,给出整改方案更好,还能敏感准确预计改造点风险和技术/非技术阻力,有靠谱成本估算,收吧
国内IT偏项目,较少偏学术。
多数情况三分靠琢磨、三分靠经验,三分靠偏执,一分靠天赋,九十分看脸。
学历,忽略吧。
在一个错综复杂的利益环境里能理清然后解决一堆mess的,在任何环境都是强人。
所以挑这类人可能最简单的方式就是有针对性的给出一堆mess,然后看对方的应变、心态和思维缜密度。
TomZhu的回答手机作答,写一下要点。
首先我们确定,要招的是开发工程师,不是产品经理,不是项目经理,不是架构师,不是cto。
那么,招进来就要立刻产生直接的生产力。
以此为前提:
一面,主持者:
hr
1,候选者期望薪酬是多少,是否超预算。
2,从聊天中判断候选者的心理状况,筛除奇葩。
3,了解候选者前任工作状况,必要时会打电话给前任公司了解情况。
4,介绍公司情况。
二面,主持者:
项目带头人
1,了解候选者技术背景,过往的成就。
2,根据项目所需的技术,在候选者的技术背景范围之内,选择一个问题,现场作答。
3,根据项目所需的技术,但超出候选者的技术背景,选择一个问题,现场作答。
三面,主持者:
cto
1,了解候选者的技术偏好。
2,了解候选者的技术积累以及感悟。
3,介绍候选者预计要分配的项目和岗位。
SiLao的回答
首先说一下自己:
在读大四本科生,现为国际某软件公司实习生
在今年3月份开始,和其他大三的码农一样,参加了一些公司的实习生招聘,有的进入了最终面,拿了offer,也有的笔试就被刷了T_T,因此下面说的都是基于实习生面试来说
1.基础知识非常重要(基础知识包括数据结构和算法,计算机网络,操作系统,数据库,编程语言大多会问C/C++等。
基础知识贯穿整个笔试面试,建议面试前好好复习,平时也要牢固掌握。
2.项目经历。
感觉项目经历反应了你做过哪些事情,具有哪些能力,所以面试官都很喜欢问。
一方面是了解整个项目的规模以及难度,还有就是看你是不是真的有参与,是否知道其中的细节。
这些问题都了解后,会根据项目的细节问你当时是怎么实现的,或者有没有遇到困难怎么解决,或者有没有优化的方法等。
在这里还是考察个人的能力。
3.不同公司不同职位要求不同,建议根据相关职位准备相应的知识。
4.沟通能力和解决问题能力。
现场可能会有一些问题你不能马上回答出来,面试官会尝试引导你一步步地解决,给你提示,因此需要有一个好的沟通和解决问题的能力,在和面试官交流中,让他看到你的实际能力到了哪里。
以上是自己在面了那么多公司后的一些心得,希望能对你有帮助。
AF知识网用户的回答我面试技术人员主要看三点:
1基础及相关知识的掌握程度,就算没有掌握的很全,也应该有那种基础很重要的觉悟,并且一直在学习。
2对待技术的态度,是出于兴趣,还是为了那份薪水,区别是不同的。
3沟通、性格、责任感、团队精神,这几点很重要,将来会直接影响到你的工作。
技术相关问题可以直接了解,沟通和性格的问题,需要多了解一下他生活或者对待某些事情的看法去侧面了解,更多的是面试时候是看直觉。
举个例子,前段时间面试一个android工程师,面谈了10分钟,觉得不错,就让他做上机测试题,测试题其实很简单的,获取一个接口的数据,显示到listview上就可以了,但是这人突然表现的很生气,摔门而出,我不知道他为什么这样,也许是因为我给的题太简单了,但是不管怎么说,他的性格、态度、行为,已经出卖了他,假如让他到了团队工作,那他也是一个定时炸弹。
AF知识网用户的回答这要从公司的规模、现状以及你本人的需求来决定。
如果公司规模大,资金充沛。
那把两个人都招进来也无妨,一个作为技术人材储备,一个作为解决现有问题。
如果公司刚刚成立,资金有限,同时急需产品盈利,那肯定只能把那位有多年经验的留下来以解决当下之急。
上述两种为基本状况,招人对于面试者而言也有主观的部分。
假如公司规模小,但成立时间较长。
而你作为核心元老,为了公司的长远发展,同时也为了惜才,也可以把那位有潜力的新人招进来。
一方面你可以自已加班加点的工作来弥补新人的工作量。
另一方面,既然是有潜力,那么这位新人对于工作也必定能够快速上手。
而且你不用怀疑新人对于工作的热情,年青人可是干劲十足。
赵小熊的回答泻药。
做过一段时间的面试官,最后总结就是有眼缘,会说话。
有眼缘不解释。
会说话的表现在几个方面:
用术语回答问题。
不拐弯抹角。
不罗嗦。
说话的态度。
其他的都不是问题。
现在的软件开发,只要不是一个人自己做,有同事、有XX、有谷歌什么问题都可以解决,解决不了的是沟通还有你愿不愿意跟他合作这两个问题。
马骏的回答要能装一桶的知识来应对工作单位要的那一"
盆"
如果可以的话你应该准备的知识还有些满益出来了,那样的会给老板惊喜.
首先要准备好各种编程知识,知道怎么完成一件事情,具体怎么做.
而且还不能局限于这样,你应该还要知道作为软件来说最重要的是质量测试,和用户体检,自己处在技术位置,那么单位看重哪一点,目前还缺那些,能说的上来.
这样不但技术过关,还具备一定的管理能力,还具备眼界,这样的人到哪会找不上工作呢.看到别人不能所看,做别人不能所做.月光下的涂鸦的回答不同类型的公司需要的人才类型不一样,面试考察的标准也就不一样。
一般讲,创业型的公司或小公司需要一个人干多个人的事,需要的是通才,应该什么都用过会一点,能跟着公司的快速变化迅速转向的人;
创业或小公司招两种人,一种是便宜的,另一种是有足够的经验能直接上手做事的。
大公司或成熟公司需要的是专才,需要的是产品相关的技术领域有足够造诣的人。
倒不是说平时做的事需要多么高的算法/编程技能。
只是公司人才积累多了,招一个低于平均标准的人进来很难和其他人竞争。
另外大公司每个人负责的范围相对窄但深入,没有一定技术深度也很难胜任。
这些年在中国和美国大大小小面试过几百号人,感觉我公司的招人主要围绕以下几方面:
1。
对技术的热情;
2。
在面试时间内独立思考,解决问题的能力;
3。
把头脑中的解决方案快速转换成代码的能力;
4。
对CS基本概念的理解,这主要在解决问题时从侧面考察;
5。
沟通能力;
一般毫不犹豫给Hire的是感觉很聪明,写程序又快又好的人;
很犹豫的是那些写程序一般,但对技术很有热情,且年轻的人;
很确定给NoHire是别的不管怎样但最后写不出程序的人;
建议转PM或测试的是那些别的很一般,但感觉对技术有热情且沟通能力很好的人。
海涛的回答只说其它考察之外的一个特别方法:
设身处地
请对方假设他自己在面试别人,会出一个什么样的面试题,并附加自认为较佳的答案以及为什么。
范围可以根据你自己公司、产品、项目的特点而增加约束条件,以免针对性不强而浪费
根据他的选题和答案,可以了解他对约束条件之下的可选范围内的侧重点(知识面)、分析方法(业务+逻辑)、判断选择(喜好、倾向性)王敏慎的回答这么个性化的问题,作为旁观者给你的意见仅供参考:
基础好,有潜力VS技术一般,经验丰富:
作为职位提供方,你肯定对这个/些职位需要哪些能力才能胜任很了然。
而能够满足你基本需求的情况下,要经验还是要潜力需要看你的用人需求是不是很迫切啦。
如果不是很着急,那我建议你找一个好感度更高的、沟通能力更强的、更主动的那个。
毕竟技术再强一个人也解决不了所有问题。
什么样的基本功才够用:
基本功当然是越扎实越好啦,遇到极端点的情况就能体现出我们苦练这么多年基本功的用处了。
当然越扎实也就越贵,所以酌情考虑性价比吧;
如果你们有着自己的编码规范的话,那么维护性好的代码其实也没那么难写;
至于抽象能力这种没法在短短几轮面试中体现的能力,请见仁见智吧……
其实最好的办法还是提供足够有吸引力的环境/待遇,你肯定能找到基础好、能力强、经验丰富的工程师的。
谢丹丹的回答首先我提个问题,招聘官希望找到什么样的人?
假如新员工不是期望的那样,该怎么应对?
是否有能里应对?
考察的素质需要考虑到公司能提供给员工的职位变动灵活性,因为当你发现某个员工并不适合其在的职位,能否提供其他职位更加充分利用资源?
灵活度大的公司,考察的技术基础和兴趣比重大些;
而灵活性小的公司,考察的方面则需要定制化。
根据具体公司来情况,还要看招聘的职位在公司中是处于什么位置,特别是那些部分或者小组成分不容易流动的公司中,进入什么定位基本上就处于那个定位了。
因为没有足够的空间来调整,招聘到不合适的工程师代价会很大。
贺路的回答蟹約。
技术上可行,聊天上实在。
杨杰的回答(知识+能力)*态度。
记住,知识和技能只是加法关系,真正决定的是态度。
能力强知识牢固,只能决定他的起点比别人高一些,真正重视的是态度。
一个好的态度你能愿意教会他很多。
你招来的是一个工程师,不是给你洗两天碗就走人的大妈,所以不要太重视知识,不会的可以培训嘛。
当然,这些适用于应届生或者刚工作一两年的人AstralRoad的回答有人邀请是很奇怪的事情嘛。
学习别人:
谢@邀请
我这看起来和轮子大说的差不多,作为非管理人员偶尔面过几次别人,主要关注点在于,聊天聊起来是否顺畅,三观接近,行业八卦知晓,聊聊怎么黑语言,黑平台,黑一个区要500台服务器什么服务端,聊聊以前做过的东西,最多就是找个目前项目里一些地方提出来看看有什么看法。
因为低端翻译工作,也就不要做那些奇怪的题目什么的,然后问下这个加班很多还没加班工资大丈夫?
我这里薪水低,没前途什么的,就没楼主想的那么多啦。
领域知识方面的,这个无解,愿意花时间培养就是了,不愿意就去挖别人家的,一般不至于要养好多个月才能用。
至于领域知识和技术能力的选择取舍问题,勉强可以说这两点并不相干吧,或者是看实际项目侧重点。
如果人手真那么不够,又立即招不到,再不好也只能捏着鼻子认了呗。
算法什么的,没什么要求的话,常见算法说得出差不多情况;
有要求就看具体公司项目了。
再考察一些以前项目代码的组织结构,测试部署相关的东西。
至于脏活嘛,总是得干的。
在可控的交流成本下可以分给小朋友啦,阿三啦,策划啦,经理啦,美术啦,闲的蛋疼的队友啦。
但是一般还是自己搞定自己负责范围内的好。
有些情况,有些脏活需要工具,需要良好的支持,速度还是很快的,刚好就当休息了。
招人要求基本都大大超过填简单逻辑的程度的主要问题是,怎么把需要做的东西拆成只要高手完成的部分,和只要无脑填逻辑的部分。
找队友还是很欢乐的事情啦。
============================================
500台服务器什么的那谁千万别看到。