程序员面试笔试宝典最重要注意哪些

&人参与 | 时间:日 11:40
前一阵子和一位长辈聊大学生就业,她说其实这个问题无解,更多的问题和劳动力供求平衡无关,更多的问题是大家自身的问题,如果他们自己是上进的,怎么都能找到工作,如果这个人就是伸手党,难道你要喂他到老么?几句话让我哑然,也开始迷茫,说实话,我越来越不清楚大家最最需要的是什么,如果你有心,也许愿意留言给我。————————————————主页菌亲笔自从自己入职稳定以后,就一直在整理自己这一段时间自己的经历,想要写下来。今天是周末,刚好觉得整理的也差不多了就开始写。开始之前,我想要写四件事情,因为我感觉非常的有必要。第一,就是自己很久没有更新博客了,也就是说自己的大三下学期没有更新任何的技术和生活文章。还是给自己一个原因吧,有时候确实有很多的东西,而且自己也有重点整理,但是当自己去写的时候,就是没有写下去的动力,最后就是在自己的博客草稿箱里多了几篇没有完成的文章,还有就是环境问题吧。第二,关于。跟我在一起比较近或者我的大学同学,都知道我是要去北京的。是的,这是我的信念,我从来没有动摇过。但是当我在面对现实面前还是区服了。在考完试放假以后自己一直在联系,不是公司(因为在放假前自己已经接到两个公司的电话面试),主要是住处,最后也没有联系到。自己也给自己下过决心,好男儿的路都是自己走出来的,关键是要有勇气迈出去第一步,自己也做出了到外面吃苦的准备。试想一下,到北京人生地不熟,下火车后,如果没有一个落脚点,或者一个暂住处,那会怎么样。还有就是房价问题,一般的住宿条件都在一千左右,这次去外边实习,自己也不想花费家里太多,最后考虑再三还是暂时放弃了。想到了去深圳(因为在深圳我联系到一个学长,我下火车后可以在他那里暂住一下)。第三,为什么没有去“深圳”。当决定自己去深圳以后,自己就在最快的时间内买了火车票。是晚上九点的火车,从郑州出发,历时25个小时到达深圳。这个时候自己是下定决心去深圳的,没有动摇。走的当天自己在火车站等火车,给个学长聊,他给我的一些建议最终又使自己放弃了去深圳的想法。主要就是大四的上学期可能学校还有很多的事情需要处理,如果去北京的话,可能一个晚上就可以回到学校,但是深圳的话一天一夜可能还需要更长。与学长结束聊天后自己越想越是,最后也就放弃了去深圳,决定留在郑州(原因就是离学校近,一天可以两个来回,反正自己也不是抱着挣钱的心态出来的,主要是学技术,工资低也就算了)。第四,关于简历问题。我在这里还是要吐槽一下大学的某些老师。这些老师就是喜欢看表面工作。大三下学期上了一门《大学生就业指导》的一门课,结课后的作业就是自己做一份自己的简历。怎么说呢,可能她评成绩主要是看你做的简历好不好看,看看你在校期间参加的活动多不多。。。其实,在我所有面试的公司里面,HR主要面试的生活性格方面的问题,部门主管主要面试的是项目经验和一些技术细节。简历主要是要表现出自己的技术特长和项目经历,让HR和项目主管可以很快的对自己有一个直观的了解,他们不会关心你在校学习过什么课程,参见加过什么活动等等(我这里仅是指的是做技术这一行,其他行业不了解)(不同的人立场不同,对待同一件事情的期望就不同,作为即将从学生角色过渡到职场人角色的你来说,尤其要注意这方面的问题,例如,写简历的目的是为了就业,那么就应该多考虑HR以及的立场和所需,并依此来指导自己的简历写作)。大学里面没有竞争,没有压力,我们很可能会迷失自己的双眼,高估自己的能力。不知道还没有毕业的,和想要找实习的同学看到这里会对“实习生”怎么看。不管你们怎么看,我还是先谈一下我的感受吧。第一就是你做的是什么技术。这个跟你找实习生是否能够找到和难易程度还是有很大的关系的。因为我对.NET和JAVA比较了解还是谈谈这两者的区别吧(这里我还是想要声明一下,我没有任何黑.NET的意思,,我也是做.NET,仅仅把两者比较一下发表一下自己的意见)。外面的公司无可否认的还是使用JAVA的多,PHP次之,特别是互联网公司。因为JAVA赶上了现在的。而.NET却是赶上一个尾巴,几乎与现在的互联网创业不搭边。如果对互联网稍微了解一点的,也可以很容易看到,.NET是否能赶上现在的互联网创业浪潮很大的依赖于windows phone,如果windows phone歇菜的话,只能说.NET与移动互联网差距更大。事实上到现在windows phone在智能手机系统领域占得比例一直很小,而且应用商店的应用少,质量低(用过win8的朋友应该有体会,也是我的个人体会)。所以做java的可以加入很多的创业公司,而.NET的更多的是进公司。到这里就要说到重点了,如果加入创业公司的话,只要技术基本过关,对工资要求不高的话,一般都是可以加入的。但是进公司就难度有点大了。这就要谈到大公司和小公司招实习生的区别了。大家有没有发现一个问题,就是招实习生一般都是大公司而小公司几乎没有,特别是做技术的公司。我先分析一下这个问题的答案:首先,公司培养一个实习生需要花费时间和精力的,还有就是可能会面对人才流失的问题(自己培养的人才最后去了对手的公司)。对于大公司来说,有资本有精力去培养实习生,更有品牌影响力在这里吸引着优秀实习生实习完留在公司。而小公司呢,做出自己的产品才是最重要的,品牌影响力和大公司有差距,如果招实习生很可能会留不住人。所以小公司几乎不招实习生的原因就在这里。那就进大公司实习呗!但是我们好像忘了或是忽视了什么。大公司的实习生一般都是面对那些985名牌高校开放的,普通的本科和专科院校的学生想进去压根就是没有希望的,可能在简历这一关已经被pass掉了(这里不排除特殊情况,我指的是大多数)。而做.NET的本来就是中小型公司比较多。而这些公司基本上做的业务都是系统网站什么的。招的人也都是能够立刻进入岗位进行编码工作的,而且为了便于开发出的系统后期维护,这些公司更愿意招到长期工。所以,我们在某些招聘网站上看到的招聘.NET程序员的要求,基本都不会少了工作年限至少2-3年或者以上的要求。第二就是实习工资问题。很多的公司实习是没有工资的(小公司居多,大公司不差钱,为了表示自己对员工的爱戴很多会给而且也是为了留住优秀的实习生)。当然很多人实习的话都希望能拿到一份能满足当地基本生活需求的工资,所以在技术满足用人单位的需求后,工资问题可能又会成为自己愿不愿意留在这个公司的问题了。反正现在我在郑州听周围一些学生跟我说,公司到大学里招实习生不给工资还是有很多人争着去的。第三项目经验问题。如果想要使自己更有把握找到工作,得到一份不错的生活补助。有项目经验是非常重要的。至少我在郑州面试的三家公司有俩家给我offer都是因为我有项目经验,相对应届毕业生好一点,不用再花费更多的时间在基础培训上,就能更快的进入工作。就拿我的经历来说,部门主管在看过我的简历,跟我聊了一些我做过的项目和做项目过程中的一些技术细节后,都会问我的需求。我都会提出要一份能满足当地生活需求的工资。他们都会尽力的帮自己申请。如果没有自己的这些项目经验,别说工资,就是留下来都是有问题的。我在这里只想说明白,不要认为实习生是很好找的。基本上跟应届毕业生差不多,甚至差的很远。应届毕业还会比实习生好点的就是,应届毕业生已经毕业,有学位证和毕业证,而且应届生可能会比实习生留在公司的时间会更长些。这点公司还是需要的。有时候应届毕业也很容易陷入一个死循环“应届毕业没有工作经验找不到工作,找不到工作没有工作经验”。其中味道,个人体会吧。写了这么多,还是看个人体会的。至少我希望还在被大学生光环蒙蔽的还未毕业的学子们,能够清醒一些。出来找工作真的不容易。下面我会去写自己的面试经历。------------------------------------------------------------------------------------------无耻的分割线----------------------------------------------------------------------------------------------------我想该是开始最重要的了。其实找实习自己不是在放暑假以后才开始准备的,自己在暑假前就准备好自己的简历,尝试着在一些招聘网站上投了几份简历。都是北京的,因为当初自己考虑的就是放假以后,不管怎样都会去北京。之后自己接到两家公司的电话面试。我估计应该是HR。主要就是问一些关于我的专业问题,现在记起来的就是,问自己算法数据结构怎么样,英语水平怎么样,还有就是自己做过什么项目经验,自己想做.NET方面的哪些开发。自己当初也没有确定的做什么,就说只要是.NET就可以。大约谈了有五分钟,最后就问我什么时间能去北京面试,因为当时学校还没放假,就说了一个放假后的时间。这期间自己还在网络上联系了自己比较熟识的几个微软MVP,征求他们的意见,询问可否去他们的公司做实习生。因为我感觉能够跟着这些.NET精英学习的话,技术水平能够提高的很快。之后自己就是等待回复,有的说公司不招实习生,还有的说现在没有招聘计划,有的就是说给留意一下,如果公司需要的话,就再跟我练习。倒是有几个给我回复说可以,但是没有工资,因为自己的最低限度,就是要有一份满足当地生活需求的工资,最后自己也就放弃了。还有就是让我去做测试,感觉自己的初衷去做开发,没有任何想搞测试的想法,仍旧放弃了。总之,自己在联系了所有自己能够联系到的MVP没能得到一个合适的实习岗位后,自己也就放弃了这一途径去找到一个实习岗位。之后学校放假了。因为当初自己的想法还是要去北京,就开始往北京的公司投简历。之间开始陆续的接到电话面试,当问到我是不是应届毕业的时候,我说不是,之后就跟我说公司不招实习生,然后就没有下文了。反正是好几个都是因为我是未毕业找实习生而拒绝跟我进一步接触。期间真的是错过了几个不错的公司。当时自己也有一个冲动就是到北京办一套假证去公司应聘上班。因为自己最终的住处没能确定下来,没有去成北京,这个办法也就没能够付诸实施。后来就是确定去深圳。去深圳之前就面试了一个公司。是QQ面试,当时应该是部门主管跟我聊的,大约聊了一个小时。那个公司主要做的应该是桌面开发。看聊得内容应该是基于360桌面或者Q+桌面开发。技术问题就是问我会不会C/C++,用没有用过MFC,我说没有,但是熟悉C还有就是C#熟练,有项目经验等等,关于我的简历上的内容聊了一些。之后就开始问我有没有用过360桌面,我说我从来不用360产品。他说Q+呢,我说用过。之后的所有话题就都是围绕着Q+和现有的电脑桌面展开的。反正是聊到一半的时候,我也没有加入的渴望了,因为他们做的产品和用的技术跟我现在的期望有差距。我也就变成了应付,之后他说会尽快给我答复,我说知道了。反正我也没有打算去这个公司,也没怎么等,就开始准备去深圳的东西。正如前面写到的,深圳也没有去成,反而留在了郑州,就详细的写写我在郑州的面试经历。在郑州的话,自己大概投了7-8份简历,总共有3家公司让我去面试。接到面试通知后,因为家距郑州还是比较近的,就开始准备去郑州。在这里我不得不吐槽一下郑州的交通,为了能够在一天面试完,自己早上五点从家出发,到郑州的时候是九点左右。然后就开始找去第一家公司的公交。不管怎样就是找不到去那里的公交,而且自己在二七塔那里迷路了,分不清方向(就是现在在郑州也分不清方向),大约来回跑了一个小时才找到去第一家公司的路线,中间得倒两趟车。就这样自己做公交到公司的时候人家已经下班了,HR说让我一点的时候再来,没办法只能等到下午一点了。这里加一个小插曲吐槽一下地图吧。百度地图真是垃圾(搜索就更不用说了,不信的话,你可以分别使用百度或者谷歌搜索同一关键字,对比一下结果就知道了),搜索结果跟谷歌地图的结果有时候差距不是一般的大,在郑州坐公交使用百度地图查询,就没坐对过。反正经历过这次,我是决定以后再也不用百度的任何产品了。第一家面试的公司就在郑州的863中部软件园里面,腾讯大豫网就在这里。等的过程中自己大概看了周围的环境,还不错。有一点我感觉不是很正常,就是妹纸有点多。以前的印象感觉搞IT的妹纸应该少啊,为啥这么多?无聊的蹲在一颗大树下色眯眯的看了一小时的漂亮妹纸。到一点我开始去公司找hr面试。这家公司的面试流程还是很正规的。hr先给我一个信息表和一份面试题,让我填完表后,再把面试题做做。表上没什么,都是基本个人信息,面试题也是一些基本的问题,大概有SOA,C#中的深度拷贝,设计模式等等。反正这些东西大部分自己都接触过,,又都是理论,十几分钟就做完了。中间有一个小插曲,做笔试题的时候,当时也是有点紧张,毕竟是第一次,我没看反面,hr过来给我面试翻看笔试题的时候,我才发现后面也有试题,就又跟她要过来,把后面的试题做完。hr基本没有问太专业的问题,都是一些生活方面和一些性格测试。之后就是谈工资,他跟我说实习生是没有工资的,但是三个月后进入试用期可以拿到试用工资。当听到这的时候,我也就不想干了,但是人家有正规的流程,自己还得把流程走完。然后她就拿着我的面试资料走开了。之后部门主管拿着我的面试资料过来跟我进行技术面试。首先跟我谈了一些我简历上所写的一些技术问题,还有我做过的一些项目问题。面试前我还是小有准备的,就是把自己做过的项目整理好放在了自己的电脑里面。因为是有备而来,我说我把我做过的东西都带过来了,都在我笔记本上,我可以给你演示一下。部门主管说可以,我就开始给他演示我的作品。演示的过程中,顺便他又问了我一些细节的技术问题,用到了什么技术,遇到了什么问题,怎么解决的,等等。最后他问我有啥要求,我就说希望公司给我提供一些满足当地生活需要的生活补助。之后他就拿着我的简历走了。一会儿他又回来把我叫道一个没人的地方跟我聊了一会儿,都是一些私人问题。讲他自己也是农村出来的,而且当初学的是文科等等,这期间我感觉这位主管很不错,他不自觉的就让我有种亲近的感觉。最后跟我说工资他会给我争取的。之后又走开了。再回来的时候,他说让我跟他去见一下人事经理,我说好。之后他就带我去见人事经理了,然后人事经理又给我面试,就是聊天。最后人事经理答应,让我直接进入试用期,可以领工资,三个月后可以转正。当然他给我的工资跟部门主管给我争取的工资有点低,但是还是可以满足我在郑州的生活需要,可能还会有点结余。这个公司部门主管对我很不错,公司的工作环境也很好。自己就决定留下来了。因为自己是第一次出来找工作,想增加一些面试经验还是决定把后面两家都面试完。在第一家公司面试完后,已经下午三点多了,坐公交到倒车去第二家公司的站点已经四点多了,手机查询了一下到哪里大概还需要一个多小时,也就不打算去了,准备第二天去。第二天仍旧是通关千辛万苦的倒车,徒步才到的第二家公司。面试流程没有第一家那么正规。貌似是技术主管直接给我面试的。当时也是看着简历跟我聊了一些技术。其中问到了WCF,我说我只了解一点,他就问我WCF三个单词是什么意思,当时紧张没有答上来。之后问我做一个简单的员工工资表的增删改查需要多长时间,我说大概3-40分钟吧。他说要不上机试试,我说行。然后就让我直接用他的电脑做一个员工工资表的增删改查。当时自己顺手就新建了一个webForm项目,他就说你用webForm,我说恩,用winForm吧,快,没办法自己只能用winForm。因为自己平时做的是webForm对winFrom不熟悉,大概3-40分钟的时候自己只做了一半,中间自己还用他的电脑百度了一下。中间有人给他打电话有事,他也就让我停止了,之后也跟我谈了一些技术问题和薪资问题,我就说出了我心中的数目。又简单的聊了几句,就让我回去等通知。我是第二天接到通知的,他说老板想找一个2-3年工作经验的,不想要实习生,就这样与这家公司没有面试上。第二家的公司工作环境没有第一家好,但是我还是比较喜欢给我面试的那个技术主管的,面试过程中给我提出了很多的学习建议,而且说话也比较的直接,每次都是直中要害的指出我的错误和一知半解。跟这样的领导在一起,我可以直接知道我的缺点和错误在哪,不用根据他说的话去猜。但是没办法,人家不要我。下午面试的第三家。第三家不管是工作环境还是其他的条件都没有前两家好。最狗血的是,在做技术的一位大姐给我面试过后,那个经理直接给我分配任务了,说让我做什么什么。当时我就懵了,我还没说留下来呢,就开始有任务了。最终决定没有留在这家公司的原因就是做开发的人太少,貌似就两个。还有就是公司就在一座小区内的一间房内,工作环境不好。自己就给pass掉了。最终决定去哪家公司以后,就回家和父母说了一下,说自己要去郑州实习,然后又回了一趟学校,带了一些住宿用品去郑州了。这里我非常感谢我的同学可乐。为了赶时间我们早上起得很早,就上路了。那天的天气非常的热,我们带的东西又有点多。他就跟我一起,把我送到了我公司,让我去公司报道,自己却在楼下给我看了两个小时的东西。而且跟我一起找到了住的地方。期间都是他帮我拿着我的最大的一个包。其中的感受,我现在没办法用语言表达,总之,大学交到这样一个朋友,很值得,我也很谢谢你,谢谢你对我的帮助。如果我有机会帮助你,我也会尽自己最大的能力。自己现在呆在的就是自己第一家面试的公司,现在已经上了一天班。第一天部门主管把我带到了我所在的项目组,而且还给我找了一个师傅带我。第一天我们组并没有给我交代什么任务,主要就是把公司给自己分配的电脑装上自己的开发环境。期间通过观察发现,我们整个部门还是有四个妹纸的。之后通过了解发现,有两个是做测试的(才明白为什么他们都是双显,我们是单显,部门主管也是双显)。我们组有两个大姐。听他们讨论业务感觉技术都很牛的。不过好景不长的是,下午,有两个就搬到其他的办公室了。中午吃饭的时候跟自己的项目组的人都熟悉了一下。让自己感到很幸运的是,中午吃饭的时候人事部的一妹纸跑过来跟我说我们是老乡,细谈发现,我们家离得还很近,而且还在一个高中上过。自己现在租住在一个城中村中。小屋子跟自己学校的卫生间差不多大,很不适应。而且厕所和洗漱间都在一个屋子里(当然是有隔墙分开)。感觉很苦逼。不过自己知道自己既然下定决心出来,就是要受罪的。也不能就这样白白的放弃。机会不是什么时候都有的。感觉自己的面试经历也就是这么多了,写出来希望对大家有帮助。如果想找到一个好的工作或者实习岗位,项目经验是重中之重。其他都是浮云。在自己租住的城中村中,周围都是租房子的和出租房子的。看到跟我租在同一家的,很多有孩子的夫妇还住在那样狭小的环境,真跟蜗居差不多。感触还是很多的(有些东西确实需要身临其境才能有深刻的体会)。想想自己如果将来自己工作结婚还得出租在一间狭小的空间,自己会作何感想?每天上班在公交站牌前站着的都是衣冠鲜明的都市白领,但是下班后从公交站牌走向的又是有自己家庭的城中村,自己蜗居的小窝。其实在大城市做着让家里人羡慕的白领,但是其中滋味也只有自己能够体会。上大学难道真的是为了这些么?不是的话,我们又应该怎么改变现状呢?本文作者:人人灯塔行动;转载自:相关阅读:顶: 8踩: 2 来源:,欢迎分享,(QQ/微信:)
1楼&& 17:30:08 不错不错 慕名前来观看前辈写心路历程顶: <ins data-digg="踩: <ins data-digg="
2楼&& 11:37:50 不错不错 好极了顶: <ins data-digg="踩: <ins data-digg="
3楼&& 16:57:12 又涨姿势了顶: <ins data-digg="踩: <ins data-digg="
4楼&& 01:37:18 又涨姿势了顶: <ins data-digg="踩: <ins data-digg="
5楼&& 10:54:46 哈哈。。。。顶: <ins data-digg="踩: <ins data-digg="
6楼&& 10:54:05 不知道你说的什么意思 想要表达的是什么呢?顶: <ins data-digg="踩: <ins data-digg="
7楼&& 09:29:25 这年会有意思顶: <ins data-digg="踩: <ins data-digg="
8楼&& 01:22:47 。。老板的口味不一样。。。顶: <ins data-digg="踩: <ins data-digg="
9楼&& 01:12:35 说实话我也么看完,满篇的文字,还有我看不懂的程序在里面好长~顶: <ins data-digg="踩: <ins data-digg="
10楼&& 10:56:56 分分钟想动手打人顶: <ins data-digg="踩: <ins data-digg="
11楼&& 14:47:51 0.0 哎,,苦逼是怎样炼成的顶: <ins data-digg="踩: <ins data-digg="
12楼&& 20:43:38 都有第一次的碰壁和苦楚、都是的;顶: <ins data-digg="踩: <ins data-digg="
13楼&& 09:43:48 想了想,觉得说的挺在理。谁都第一次的窘迫。顶: <ins data-digg="踩: <ins data-digg="
14楼&& 09:33:55 很好的文章,值得细读顶: <ins data-digg="踩: <ins data-digg="
15楼&& 09:19:17 最不好回答的问题是为什么离职顶: <ins data-digg="踩: <ins data-digg="
16楼&& 18:02:03 太长了吧,看完了也感觉不到看到了什么东西,感觉跟程序员没什么关系,倒是说了些实习生的苦逼生活。很正常的,都是一个样的,现在这个时代不是20世纪的年代了。对于现在很多种情况,是必须得自己亲身去体验才知道。顶: <ins data-digg="踩: <ins data-digg="
17楼&& 17:33:23 我是当散文读的。。。顶: <ins data-digg="踩: <ins data-digg="
18楼&& 16:44:01 哈哈,写的很好顶: <ins data-digg="踩: <ins data-digg="
19楼&& 16:25:40 现在自己就面临很尴尬的问题,排名没有动静顶: <ins data-digg="踩: <ins data-digg="
20楼&& 16:24:04 文章真长,走马观花了一遍,其实这事不同人有不同的认识,不能一概而论。顶: <ins data-digg="踩: <ins data-digg="
21楼&& 15:50:43 这个来看看 怎么个情况顶: <ins data-digg="踩: <ins data-digg="
22楼&& 14:05:31 一般实习生的要求比较低,同时比较容易塑造和培养!顶: <ins data-digg="踩: <ins data-digg="
23楼&& 14:02:37 说实话我也么看完,满篇的文字,还有我看不懂的程序在里面顶: <ins data-digg="踩: <ins data-digg="
24楼&& 13:58:49 苦逼的程序员,还不够专业这吐槽写的太长看不完顶: <ins data-digg="踩: <ins data-digg="
25楼&& 13:58:24 苦逼的程序员,更苦逼的是做硬件的顶: <ins data-digg="踩: <ins data-digg="
26楼&& 13:43:27 啥,白领,都TM白领了工资,衣冠鲜明,作者太会用词了,衣冠楚楚还差不多,哈哈不过,我以前找工作的时候都还是比较好找的,基本上投3-5分合适的简历,面试不超过3次基本都能找到合适的工作。可能是行业不同吧。作者程序那么好,出来咱们合伙编点小的win软件卖说不定也能早日高富帅,迎娶白富美了,何必还辛辛苦苦的去找工作呢。对了,我也在深圳,有深圳的朋友可以聊聊么?顶: <ins data-digg="踩: <ins data-digg="
27楼&& 13:42:56 好长的经验分享呀。顶: <ins data-digg="踩: <ins data-digg="
28楼&& 13:37:55 这里写的啥啊,云山雾饶的顶: <ins data-digg="踩: <ins data-digg="
29楼&& 13:34:44 但是当我在面对现实面前还是区服了 是屈服顶: <ins data-digg="踩: <ins data-digg="
30楼&& 13:31:37 好长~顶: <ins data-digg="踩: <ins data-digg="
31楼&& 13:17:06 是啊,松哥这的好文分享一般都很长,或许正是因为长才能描述的全面和深入,无论怎样不愧为好文、干货,值得驻足细细品味。顶: <ins data-digg="踩: <ins data-digg="
32楼&& 13:15:14 我个人觉得,没一定关系想要找份看着像样、并且前程远大的工作,不大容易。顶: <ins data-digg="踩: <ins data-digg="
33楼&& 13:09:55 面试而已,居然写了这么一大堆。。顶: <ins data-digg="踩: <ins data-digg="
34楼&& 13:00:26 太长了.没看完歇会在看顶: <ins data-digg="踩: <ins data-digg="
相关文章阅读更多:&&&&
(window.slotbydup=window.slotbydup || []).push({
id: '2398769',
container: s,
size: '300,250',
display: 'inlay-fix'
点赞最多 317224481560141110581050
最近活动 攻略通知喜讯程序员面试中什么最重要? - 研发管理 - ITeye资讯
相关知识库:
本文转载自,作者从面试官的角度分析了程序员在面试过程中的一些问题,并总结了一些经验。
程序员面试一直是社区乐于讨论的热门话题。我自己从06年实习以来,先后经历了4家软件公司,全部是外企,其中有世界500强的通信企业,有从事期权期货交易的欧洲中等规模的金融公司,也有为大型汽车制造商开发Android智能汽车的新兴公司。跨入IT行业以来,我在求职过程中经历过多次面试,最近两年也有过多次面试别人的经验。我感觉现在到了对这个问题发表自己看法的时候,这篇文章是我站在面试官角度对于程序员面试问题的一个阶段性反思和经验总结。
相信和不少朋友一样,有了几年工作经验成为Senior后就开始了面试别人的经历。我在最初这个阶段只是按照自己的想象把“找到基础好的程序员”、“找到算法能力优秀的程序员”、“找到有Android开发经验的程序员”等作为面试的目标。但是,实际的经历告诉我,尤其是按“基础好”,“算法好”这些目标招到的人最终效果并不好。比如,有的面试者基础知识和算法掌握情况不错,进程、线程、内存等概念清晰,基本的Hash、二叉树、快速排序等数据结构和算法也比较熟悉,但是进公司后在实际工作中表现得很糟糕。后来,我才发现原来是我的面试目标出了问题,我原先的面试方法更像是大学的算法或操作系统期末考试,按照这种方法让许多并不合适的人通过了面试,同时也可能错过了许多合适的人。
后来,我的反思是,从公司的角度讲,面试的根本目的是找到“能够干好工作”的人,而“高学历”,“算法好”,“基础好”,“有经验”这些都是表象而不是根本,它们并不能直接和“工作好”划等号。
目标明确了,但接下来的问题是假设面试者是一个黑盒系统,“工作好”不是直接可观测变量,你所能直接观测的变量是基础、算法、经验、学历、性格、谈吐、年龄等等。所以,实际上,你只能从“基础好”,“算法好”等可以直接观测的量去推测“工作好”的概率,这就是一个在“X好”条件下“工作好”的条件概率问题:P(工作好 | X好)。
根据这个模型,面试所应该考察哪些方面就很明显了,那就是选择那种最具有区分性的方面来考察。比如,考察面试者的体型特征没有太大意义,因为P(工作好|高),P(工作好|矮),P(工作好|胖),P(工作好|瘦)的概率都差不多;所以,体型特征不具有区分性,这不是面试所应该关注的内容。
面试官应当结合职位的要求明确哪些因素具有比较好的区分性。比如,如果要招一名技术门槛比较高的3D游戏引擎开发工程师,面试者A具有3D游戏引擎开发的经验,但是在基础知识和算法面试方面表现一般;面试者B相反,基础知识和算法面试表现很好,但没有游戏开发经验,而你只能选择其一。你选谁呢?其实,这就是两个条件概率问题P(工作好|经验好,基础一般,算法一般)和P(工作好|没经验,基础好,算法好)。这个问题就留给面试官来判断了,就我个人而言,对于技术门槛较高需要技术积累的职位,经验更加说明问题,因此,我更倾向于面试者A。
下面,我再结合自己的经验谈谈对面试中常见方面的看法。
算法是Google和MS等大公司面试所重点考察的内容。我个人很喜欢算法,曾经参加ACM/ICPC拿过北京赛区的13名。但是,就个人经验来看,我所接触过的绝大多数开发职位而言,算法都不适合作为考察面试者优劣的主要因素。对于普通的非算法性开发职位,考察面试者的算法就相当于考察他打乒乓球好不好一样,与目标“工作好”的相关性太低。就我个人的经验来看,差不多P(工作好|算法好)=50%,也就是算法面试没有太大的区分性。
甚至,还有一种很不好的情况特别多地出现在算法好的面试者身上,我称之为“只磨刀,不砍柴”。什么意思呢?有类人只对什么A*算法,异步编程,JVM类加载机制这种纯技术问题感兴趣,对实现用户需求毫无兴趣。这类人看起来有一定的技术能力,但是对公司来讲贡献十分有限,甚至不如技术一般但认真负责的人。所以,一旦遇到面试者算法好,我就特别留意考察会不会是这种“只磨刀,不砍柴”的人。
另外,虽然我个人不了解Google和MS,但我对于其特别重视考察算法能力的面试策略是持怀疑态度的。即使在这样的世界级大公司,算法虽然重要,但可以想象在项目实施过程所遇到的各种各样问题中,算法问题绝大多数时候不会是主要瓶颈,没有到那种需要每个人都是算法高手的情况。实际上,绝大多数项目真正难点并不是一两个算法瓶颈,甚至也不是单点的技术瓶颈,而是系统性的组织、协调、设计、开发问题,有大量的看起来不是那么有技术含量的脏活累活,也有许多问题是由于信息不足,并不是技术能力强就能克服这些困难。一个团队最好优势互补,有人算法强,有人业务分析能力强,有人擅长后端服务,有人擅长前端界面,有人聪明,有人踏实,这是最好的。如果按照“算法好”的单一标准选材,必定会把许多优秀的人才拒之门外。
基础面试是指考察诸如指针使用、进程线程概念等基础知识的面试,十分类似于大学期末考试题。我曾经以为基础面试十分重要,但是现在不这么看了。在工作中基础的确是重要的,但是在面试过程中,它必须具有区分性才有意义,也就是说P(工作好|基础好)的概率要高,那么考察指针使用,进程线程区别这样的基础题目才有它的意义。我的实际经验是,基础面试并不具有很好的区分性,和算法一样, 差不多P(工作好|基础好) = 50%。同时,基础面试是最容易准备的,中国人有长期的应试教育经验,要准备几个把玩指针题目太容易了。
我曾经遇到过这样的面试者,他的C语言基础和编译、链接等原理掌握得非常好,给我留下了深刻的印象,我给的面试结论是:知识面不宽,只会C语言,但基础很扎实,建议录用。后来的事情证明了那个结论的前半部分是对的,但是“建议录用”错了。他在实际工作中表现得一塌糊涂,不理解需求,不理解整体架构;同时,上班时间不是花在项目上,而是花在阅读诸如《程序员的自我修养》之类的书籍上。最后,这位同事由于长期“不出活”离开了公司。
基础不是不重要,而是“基础好”不足以说明面试者能干好工作,因为基础是属于局部性知识,而实际工作需要综合性能力,二者有天壤之别。C语言、操作系统能考高分,但是不会写程序的人在大学我们还见得少吗? 软件开发就像盖房子,综合能力是设计和搭骨架,基础知识是码砖。张小龙原先Foxmail是Delphi开发的,他它不懂C#,你如果要招聘一个开发.NET Email客户端的人,你考察他对CLR掌握得好不好有意义吗? 让张小龙来开发一个C#版的Foxmail真的会有困难吗? 你招一个精通C#但没有Email客户端开发经验的人来真的比张小龙靠谱吗?
我说基础知识不重要,和古人说的“不积洼步无以至千里”是不是矛盾呢?不矛盾!“洼步”与“千里”是一种可累加关系,但再多的“基础知识”都累加不成“综合能力”。学习软件开发要像持续集成一样,一开始就是一个完整的系统,虽然规模不大,问题很多,但它麻雀虽小五脏俱全,从小系统到大系统,从简单系统到复杂系统逐步演化。
所以,基础好本身不足以说明太多的问题,必须进一步考察综合能力。对于基础面试表现不好的面试者,如果时间允许也要进一步考察,有的面试者其实是有能力的,只是没有进行充分的准备。最理想的状态当然是基础和综合能力俱佳,若不能兼顾,应当综合能力优先。
这里所说的经验不是通过工作了多少年来衡量的,而主要是指面试者的经历,比如,是否完整地实现过一个软件,或作为主要开发者完成过一个项目。经验的重要性在于它能说明一个人的综合能力。从项目的性质、规模和难度,面试官就可以大致判断出面试者的综合能力。如果一个面试者一直在大公司负责一个小模块的开发维护,那么基本可以判断他不具备独立或作为主要开发者承担一个项目的能力,只适合在另一家大公司做类似的事情。对于门槛较高需要长期技术积累的职位,相关经验更显得尤为重要,比如,Linux内核开发,JVM开发,游戏引擎开发,数据库实现,高级UX等。对于这类职位,没有经验的面试者即使综合素质不错也是需要长时间的学习和积累才能胜任。所以,基本上如果确定了你的职位属于此类,那么相关经验毫无疑问应该成为首选因素,换句话说,P(工作好 | 相关经验好)的概率是非常高的。
通过项目经验判断面试者的优劣比通过基础和算法测试更加靠谱,所以,面试过程中面试官应该花比较多的时间听面试者介绍项目经验,并进行深入地探讨交流,了解面试者的知识面、思维能力、表达能力等。同时,可以结合项目提一些基础知识和算法的问题,比如,如果面试者做过C++相关的项目,那就可以问他如何进行内存管理?是否熟悉智能指针?如果面试者的回答不能令人满意,那么就基本上可以判断他的项目做得不是很好。
要注意的是,经验也是一个多维度的事物。比如,C++股票交易中间件系统,这就涉及(C++,中间件,股票) 3个维度。假如面试者A做过C++股票交易客户端,面试者B做过C的股票交易中间件。从语言角度看,A最匹配,从项目性质看,B最匹配,你如何选择?这就是在多个维度中,哪个维度更重要的问题,就这个例子而言,我个人更倾向于B,因为我认为中间件开发经验是主要矛盾,而从C切换到C++并不是问题。所以,面试官需要判断哪一种经验是主要的,而哪一种经验是次要的。比如,我们招聘Android应用开发,这个职位的Android技术门槛并不高,它的真正难点在于做出好的用户体验(UX)。所以,如果一个面试者没有Android的经验我们是可以接受的,但是我希望他在UX方面有经验,至少做过其他平台的移动应用开发。
现在,我来谈我认为最重要的因素:性格。这可能是许多初为面试官的朋友所难以想象的,怎么会是性格最重要呢?说实话,当我意识到这一点时,我自己也很惊讶!说白了,还是 P(工作好|性格好)的概率最高啊。我的实际经验是,如果一个人的性格好,他能把工作做好的可能性是最高的,性格好远比基础好、算法好要靠谱。
一个人如果技术上有缺陷,经验上有不足,但性格好,在团队中是很容易由其他人来补位的,他自己也很容易逐渐补起来;相反,如果一个人的性格不好,所有的技术优势经验优势都发挥不出来,甚至还会起到负作用,而且性格缺点很难改变。我一直谈到实际工作所需要的是综合性的能力,这种综合能力的发挥中性格是至关重要的。项目中不止会遇到技术问题,要涉及沟通、协调,不同的人不同的部门既有合作又有磨擦,如何处理这些事情都需要一个良好的性格。可以说,在开发团队里让你与众不同的不是你从哪个学校毕业,也不是你过去的经验,而是你的性格。
当然,性格是一个复杂的东西,它包含了很多的方面,并非所有方面都是程序员面试所需要关注的。我的经验是可以重点考察这些方面:
1) 态度积极还是消极。有的面试者在谈吐中就会自然给你一种积极上进的感觉,或者你可以在他的经历中发现他积极的因素,这些都不是太难看出来的。相反,有的面试者你能明显感觉到他的消极情绪。积极性在工作中是十分重要的,积极的人能给团队带来朝气,也更易于合作。基本上,如果确定面试者属于态度积极的,他通过我这一关的可能性就会大大增加;相反,如果确定属于态度消极的,即使技术能力不错我也会十分谨慎。
2) IQ。我的经验是,总体来看,聪明的人在工作中的表现更为优秀。在面试中要考察一个人是否聪明并不一定要像Google和MS那样找些专门测试IQ的智力题,其实,你只需要看他讨论问题是不是很有逻辑性,思考和说话是不是反应敏捷就可以做出大致的判断。另外,眼睛是人心灵的窗户,一个人聪明与否,眼睛是会说话的。不过,聪明也不完全是优点,比如,当公司或项目遇到困难时,往往是聪明人先跑掉了,坚守的往往是IQ一般的人。
3) 语言表达能力。语言表达能力也是程序员十分重要的一项素质,它关系到项目中的沟通是否顺畅。面试官可以看看面试者能否用简明的语言介绍清楚曾经做过的项目,能否抓住要点,能否考虑到听者的相关背景。一般来讲,语言表达能力强的人综合能力都不会太差。
4) 是否具有用户意识。有人说程序员是做研发的,哪来什么用户?只有销售、市场人员才会和用户打交道。其实,这是完完全全的错误认识。你写一个模块,甚至一个API,只要有别人用,他就是你的用户。有的程序员设计一个模块或是一个软件总是习惯于从使用者的角度来考虑,尽量地方便使用者,这就是一种良好的用户意识。具有良好的用户意识的人更能考虑别人的感受和整体的需要,而不是单纯地从自己和局部来思考问题。当面试者谈及过去的项目经验时,面试官可以常常站在用户的角度对其进行提问,从这个过程中观察其是否具有良好的用户意识。
5) 如何应对质疑和压力。面试官应该对面试者的回答以及以往项目进行合理的质疑,看看他如何应对。曾经有一位面试者谈到做游戏登录服务器的经历,我就问:“如果登录服务器挂了,怎么办呢”?他说原先虽然没有考虑这个问题,但是可以怎么怎么改进。其实,大家都理解项目中有各种不完美,这里面原因很多,只要面对质疑和压力能从容应对努力往好的方向思考解决就可以了,不需要掩饰缺陷,更不应该有情绪。我遇到过有的面试者,一旦你对其项目提出质疑,他马上产生反抗情绪,或不高兴,或不承认有问题,这很容易一下子看出来他在工作中容不得质疑和批评,这种人要想合作就很困难。
6) 个性特点。许多面试者喜欢在简历上写“精通C++/Linux“,这些字眼看得人麻木,如果有人写”喜欢C++/Linux“,我就会有一种眼前一亮的感觉。“精通”是没有感情色彩的叙述,而“喜欢”包含了面试者的个性,我更愿意看到面试者的个性。我相信对某样东西真正的热情远比你当前对它的掌握程度更为重要。其实,N年的经历告诉我们,同一个班的同学,同一个项目组的同事,虽然每天所学的知识,所接触的工作都是相同的,但其实每个人的成绩和表现差异是十分明显的。那么,到底本质的差异是什么呢?其实,就是每个人的个性。是个性使得有的人业余时间去打球,有的人业余时间去看书,有的人喜欢Linux,有的人喜欢Mac。一个人在团队中扮演的角色也和他的个性有很大的关系。面试官应该引导面试者展现自己的个性,并判断其是否有益于团队。
最后总结起来,我的经验是:
1) 面试官的目标是找到“工作好”的人,一定要围绕这个目标来进行面试,如果把面试当成了算法或操作系统期末考试这就走入了误区;
2) 面试过程是通过学历、性格、基础、经验、算法等可以测试的因素去综合判断面试者“工作好”的概率;
3) 在各种因素中,性格 & 经验 & 基础 & 算法。性格是最重要的,如果性格不好,所有技术能力都会大打折扣,而且技术缺陷容易弥补,性格缺陷很难改变;经验体现了一个人的综合能力,你可以从面试者过去的经历中判断他能从事哪种工作,不能从事哪种工作;基础和算法则主要起到辅助参考的作用,基础好的程序员一般适应性比较强,学新技术更快,但是切忌单纯从基础来判断一个人的能力。
碰到这样的面试官真好。屡战屡败,屡败屡战的应届生留。在我看来,性格,项目经验,综合素质能力,应该排前面。为自己加油
性格的强大,我现在这方面很弱, 看来要刻意加强了。
楼主道出了真相,够直白,虽然有些不中听,但实际如此,资本家们都如此。程序猿们一定要学会装疯卖傻,大家一定要学会装,学会表面一套,背后一套,不要最后像奥美的那位
ahack 写道对于公司来说更愿意找个成本低工作好的人.如果一个人的能力被认可 但是公司就是不给到满意的工资 即便那个人工作了 也是不会激情满意的工作
bigarden 写道每次面试都会被问到面向思想的三大特性 你丫的能不能问实在点的
说的很对,醍醐灌顶
每次面试都会被问到面向思想的三大特性
非常透切!
很靠谱的一篇文章,跟我多年挖掘和培养人才的经验基本吻合。关注目标是第一位,一些技术人员学着学着就开始飘,忽视要解决的问题,眼高手低,而是“学屠龙术”,问题是龙在哪里?性格也很重要,性格不行的很难进行团队配合,执行力偏弱。
性格即人生。
成本 & 性格 & 经验 & 基础 & 算法
楼主说的很好,其实在我看来,如果更直接点就是我这个产品我这个团队需要怎样的人就去找怎样的人。态度是第一位的,没有的知识可以学,但是态度很难变化。我们做的产品基本都应该是自己以前没有做过的,本身也是一个长期学习的过程。
malie0 写道我是同意作者观点的。其实这是管理问题了,怎么样能人尽其才才是最重要的恩,我也同意。虽然我还没有毕业,但是我知道,一个人如果性格不好,有可能给团队带来负面的影响,如果性格好的话,可以给团队带来很大的积极因素。没有技术可以补,但是,性格怎么去补呢?
必须清楚,算法和基础以及智力加起来才能称得上千里马。缺一都不行。好在需要千里马的公司少。
性格不好考察。算法和基础容易考察。如果一个公司对技术有要求,算法和基础就非常重要了,另外就是智力水准了。一般公司不用考察这些,只要应聘者勤劳肯干再加工资低就完美了。
我是同意作者观点的。其实这是管理问题了,怎么样能人尽其才才是最重要的
要把不同的萝卜放到不同的坑里,就根据一两次面试,很难。千里马常有,而伯乐不常有。
对于公司来说更愿意找个成本低工作好的人.
& 上一页 1

我要回帖

更多关于 java程序员面试宝典 的文章

 

随机推荐