导航:首页 > 程序命令 > it程序员面试技巧

it程序员面试技巧

发布时间:2022-06-16 06:18:58

Ⅰ IT面试经验:程序员面试什么最重要

程序员面试一直是社区乐于讨论的热门话题。我自己从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) 在各种因素中,性格 > 经验 > 基础 > 算法。性格是最重要的,如果性格不好,所有技术能力都会大打折扣,而且技术缺陷容易弥补,性格缺陷很难改变;经验体现了一个人的综合能力,你可以从面试者过去的经历中判断他能从事哪种工作,不能从事哪种工作;基础和算法则主要起到辅助参考的作用,基础好的程序员一般适应性比较强,学新技术更快,但是切忌单纯从基础来判断一个人的能力。

Ⅱ IT行业面试技巧有哪些

首先,对于笔试,在it行业来说,你需要对你所学的语言在笔试前进行复习,很多面试题网上都可以下,增加你的笔试分数有利于你后面的流程 。也就是说,你的笔试成绩只是一个参考,不要太低的话基本都能过,(程序员也是要看开发手册的),他笔试的目的在于压低你的分数方便后面和你聊钱的问题(你懂的) 。
总之,对应笔试中心应在考前复习,和考核戒骄戒躁,不要因为成绩的好坏影响你后面的面试。
你通过了笔试后,你面试的公司会派遣他们的人事人员来对你进行第一次面试,你们主要沟通的内容在于你的态度,品行,言谈举止,你学历等等,你也不用太紧张,对于这个环节只要你不是什么高中学历问题都不会太大(大公司除外哈,华为神马的你这个学历低了就不行),问你的也都是生活方面的问题,看你的处事理念。
总之,对应1面你不需要太过紧张,穿着的体(一般就行了),回答清晰流畅,不要有太大压力,对公司的主营业务要表现足够的兴趣,关系公司的发展。
你通过了1面后,你面试的公司会派遣他们的技术人员来对你进行技术面试,你们谈话的中心会在于技术方面也就是你的公司的业务流程中你需要的用的技术,如果你回答很流畅,考官还会问你些拓展技术,也就是加分项,如果你在1面中了解了公司的业务,那么对你来说就会轻松点了。如果没有,也不要紧张,可以和你的考官分享你的想法,对技术的理解,表现你的求知欲望,好学,自学等能力。
总之,对应技术面试就可以畅谈技术,对应it的技术届来说考官和你只是在进行技术的讨论,你甚至可以提问,展示你自己的一些作品都是可以的

那么针对3面你该注意什么呢,因为在技术面试的时候你已经见过你的顶头上司,3面就该和你谈谈钱的事情,这种时候呢,一般说明你已经通过了,在技术方面和人品方面问题不大,你们的重点就是在于薪资,福利和以后的发展,这个时候就是公司对你展示他的潜力了,也是希望能留住你(招人也不容易),那么你对你自己的定位,和你的期望薪资就可以大胆的说出来 , 不要因为不好意思而错过你要价的机会,因为一般进入公司后你想涨薪资就比较复杂了,而且这只是你的期望 ,面试官会对你提出他们会给你的工资, 也就是一个讨价还价的过程。
总之在这个环节,你可以大胆提出你的期望薪资与发展方向(不要太离谱哈,当然你要作死我也不拦着你),和你的面试官慢慢讨论。
对于试岗。在试岗阶段,这是一个很重要的时期,对于it行业你的技术才是核心,其他都是浮云,也是你被企业重点关注的时期,你的讨论的薪资时,一般会给你个试岗薪资和转正薪资,干的好转正后还有增长,因为企业也是需要人才的,也是要留住你,在这个环节充分体现你的实力,积极向上,团结同事,尽快熟悉业务融入团队才是关键,不要因为你的技术牛,就过分高傲。心态的把握一定要把自己定位在相对低一点的位置
总之,在这个环节就是心态上注意,技术上展示你的能力,处事上和谐相处,重中之重是在于融入团队,你个人的力量是完不成整个项目的。
最后我们来总结一下,其实在it这个行业技术才是硬道理,性格相对开朗就好,融入团队是最重要的,你在你面试的时候不需要太过紧张,面试官也喜欢开朗,单纯的员工,不要什么不好都说,相对的提自己的优点,,也不要明显的提,可以说一些生活中的例子,比如扶老奶奶过马路。。当然这只是说说,在it行业,有技术就不用太过紧张,对答清晰,对话实际,不要太过说些虚的。

Ⅲ IT面试技巧:面试中hr最喜欢问什么问题

一、 导入性问题
1、 您住的远吗?来我们这儿得多长时间?
2、 我们这儿好找吗?
3、 我们今天主要想请您到公司随便聊一聊,听听您的想法,那我们开始好吗?
二、 动机与岗位匹配性
1、 在您的工作经历中您感觉自己最成功的一件事情是什么?您最大的收获是什么?您感觉还有什么遗憾的地方吗?
2、 您对自己今后的发展有什么打算?根据您的想法您感觉自己有哪些地方完善?您有什么具体的计划?你为何要申请这项工作?(求职动机)
3、 您希望在什么样的环境中工作?对直接领导有什么期望?对同事有什么期望?
4、 您比较认同什么样的企业文化?
三、 言语表达能力
1、 请简单的谈谈您从大学毕业以后的工作经历。
2、 在您的工作经历中您感觉自己最深的体会是什么?您最值得告诉我的经验是什么?您为什么觉得这些内容对您体会最深?
3、 请您描述一件最近您与他人发生争执或冲突的事情经过。
2、 您对我们这项事业的情景有什么看法?能给我们提出一些建议吗?
3、 您对环保产业的发展有什么高见?
五、 应变能力
1、假定您的领导交给您一份艰巨的工作要您在一天内完成,可这件工作根本就不可能在规定时间内完成,您会如何处理这件事情?
六、 情绪稳定性
2、 您在工作中最不愿意跟那些人打交道?如果您的上级经常向您提出苛刻的要求您怎样处理与上级的关系?
七、 人际协调能力
1、 请问您对团队精神的理解是什么?团队成员应该保持一种什么关系?
2、 请结合您的经历谈一谈您没有处理好的关于同事关系的意见事情?
3、 假定您作为一家公司的销售经理,您的一位客户向您提出了收取好处费的要求,否则他就在考虑买您的产品,您会如何协调这件事情?
八、 组织管理能力
1、 您的领导需要您提交一份部门的工作计划,您会着重汇报那些事情?
2、 请您分析一下,作为初创企业,技术力量雄厚,市场开发工作已经从那些方面入手? 九、 计划能力
1、 如果您作为本公司的市场推广部经理,能谈一谈您的工作思路吗?
2、 您觉得本公司的市场开发工作应该从哪些方面入手?
3、 一般您经历的企业市场推广工作是如何进行的?您觉得有什么欠缺吗?
十、 工作经验与能力
1、 通过您几年的工作经历,您觉得作为市场人员应该具有那些能力?
3、你认为这项工作的主要职责是什么?(对工作的了解程度)
十一、 学习态度
2、 您的业余爱好有哪些?
3、 您经常上网吗?您上网主要做什么?

Ⅳ 如何面试程序员

如何面试程序员
一、提问之前的准备
首先,最重要的是,你自己一开始就应该想清楚:
1.
需要新员工完成什么样的任务?
2.
怎样的人能完成这样的任务?
3.
哪些途径和方法可以发现这样的人?
只有明确这些根本性的问题,才能正确高效地完成面试。
二、提问的原则
假定你对上一节的三个问题,已经有了清晰的想法,那么接下来就可以设计如何提问了。
有一些提问的原则,是你应该遵循的:
每一个面试问题都有明确的目的。你不仅自己了解,还能向其他面试官解释清楚。
多提一些开放性(Open-ended)的问题,而不是那种用Yes/No就可以回答的问题。这样做使你有机会与面试者展开讨论,并且提出后续的问题,尽可能多地了解对方。
不要问宗教、家庭、健康、个人隐私等方面的问题。
不要问太复杂的问题。因为面试者没有太多思考时间,所以无法周全地回答,你也就无从判断他的能力了。
三、考察专业能力
为了确认面试者是胜任的,你可以问一些与职位相关的专业方面的问题。(不过通常来说,一次面试不足以看出一个人的专业能力。)
比如,你的招聘职位是系统管理员,你可以问"如何快速地在50台机器上部署Linux?"(提示:正确答案不是刻录50张安装光盘。)
另外,你还应该向面试者了解他的过去,因为过去是未来的最好预测依据。不过,提问的重点不要仅仅是他过去的成果,更要关注在当时的环境中,他是如何决策和实施的。
四、考察综合素质
因为人是会发展的,所以某种程度上,面试者的综合素质要比他的专业能力更重要。
所以,具体的技术问题(如何调用API、什么是设计模式、编程语言的语法等等)可以少问一些,更应该关注面试者的事业心、对工作的热情、进取心、自律能力、毅力等方面。
下面是一些典型问题:
Why
did
you
get
into
development?
你为什么开发软件?
How
many
technical
books
did
you
read
in
the
past
year?
去年你读了几本技术书籍?
What
was
your
favorite
technical
book
in
the
past
year?
What
did
you
learn
from
it?
去年你最喜欢的技术书籍是哪本?你从中学到了什么?
What
websites
do
you
read
regularly,
related
to
development?
平时你经常访问哪些编程类网站?
Do
you
maintain
any
open-source
projects?
你有自己的开源项目吗?
Do
you
code
in
your
spare-time?
业余时间你编程吗?
Do
you
love
programming,
or
do
you
do
it
for
the
money?
对于你来说,编程是一种爱好,还是一种谋生手段?
Have
you
accomplished
anything
important
in
your
career
yet?
Do
you
want
to?
你的职业生涯之中有什么重要的成就?它是你主导的吗?
What
would
make
you
feel
that
you
have
done
something
important?
什么事情会让你很有成就感?
五、考察理性思维
某些情况下,你可能需要了解面试者的分析判断能力,看他能否全面地思考问题、客观地评价自己。
那么,你可以依次提出这样三个问题:
What's
your
favorite
programming
language?
Why?
你最喜欢的编程语言是哪种?为什么?
If
you
could
add
one
feature
to
your
favorite
language,
what
would
it
be?
Why?
如果允许你为这种语言加一种功能,你会加什么功能?为什么?
If
you
could
remove
one
feature
from
it,
what
would
it
be?
Why?
如果允许你取消一种功能,会是什么功能?为什么?
这里的重点是,让面试者从正反两方面评价一件自己熟悉的东西,看看他的思维是否片面。答案无所谓对错,只要面试者有一个明确的立场,能够从正反两方面说出令人信服的理由,就可以了。比如,某个软件的口碑不好,但是面试者说他很喜欢,而且说得出一大堆理由,清楚地解释了这种软件的优点和缺点在哪里,这样就很好。
你还可以把这些问题,套用在其他东西上面,比如操作系统、文字编辑器等等。

Ⅳ IT面试经验:C/C++程序员需要掌握哪些知识

概括来说,开发中常用到的功能:串口通信、网口通信、数据库访问、数据加解密处理等等。这些方面的知识都要掌握的,细说的话主要有以下几个方面:

一、语言相关

1、基础(Basic)

(1)变量与基本类型:语言内置类型、常量、变量的初始化、变量的作用域、变量的 限定符、变量引用、枚举; (2)typedef 和#define;

(3)数值与指针:数组定义与初始化、多维数值、指针操作;

(4)表达式:算术/逻辑计算、位运算、优先级、类型转换;

(5)语句:简单语句、声明/定义语句、复合语句、条件/循环控制语句、异常处理语 句;

(6)函数:函数声明、参数传递、堆栈概念、函数重载;

(7)标准IO:条件状态、缓冲区、文件流、字符流、本地化;

(8)类和数据抽象:类的定义与声明、类的构造函数、静态成员、拷贝构造函数、操 作符重载、类型转换;

(9)面向对象编程:数据(封装)抽象、继承、多态(动态绑定);

2、进阶(Advance)

(1)模板与泛型编程:模板定义、实例化、类模板成员、重载、特化; (2)智能指针:auto_ptr、shared_ptr、scoped_ptr;

(3)STL容器:顺序容器(vector、list、deque、queue、priority_queue、string)和关 联容器(map、set、multimap、multiset); (4)STL算法:迭代器、算法; (5)常用复杂数据结构:hash_map、boost.any、boost. array、boost. regex、boost. variant、 boost. multi_array、boost. pointer_container;

3、高级(Expert)

(1)高级泛型编程:表达式模板、模板元编程、Concept编程;

(2)程序架构,内存池,线程池;

(3)高级抽象:boost.mpl、boost.lambda、boost.fusion、boost.proto;

(4)范式应用:boost.spirit;

(5)应用程序库:boost.asio 、boost.graph、blitz++、Loki、CGAL、uBLAS;

二、系统相关

1、基础(Basic)

(1)Windows API之基础服务:文件系统、注册表、内存管理、DLL、多媒体;

(2)Windows API之内核对象:句柄、信号、线程、进程、互斥、事件、文件映射、 命名管道、邮槽、计时器、完成端口;

(3)Windows API之图形设备接口:设备上下文、打印、字体、笔/刷、路径、区域、 位图;

(4)Windows API之图形用户界面:窗口、标题、菜单、状态栏、消息、图标、按钮、 编辑框、组合框、列表框、滚动条、通用对话框;

(5)环境配置及Shell编程:环境变量、右键菜单、属性、关联; (6)Socket编程; (7)Web相关API; 2、进阶(Advance)

(1)MFC/ATL:文档视图结构、对话框、通用控件、OleDB、WinInet; (2)COM、自动化、ActiveX:Office开发、IE插件、VBA; (3)高级图形系统:OpenGL、DirectX; (4)二次开发:ObjectArx;

三、计算相关

1、计算机图形学

(1)向量:点积、叉积、求模、单位化、复合运算;(basic)

(2)矩阵:算术运算、平移/旋转/缩放/错切等变换、求逆、特征值;(basic) (3)四元组合欧拉角:与其他表示转换;(advance) (4)参数曲线/曲面:贝塞尔、(非)均匀有理样条;(advance) (5)三维几何体的构造与描述;(expert) 2、计算几何

(1)几何查找与判断:点与线、线与线、点与多边形;(basic) (2)多边形:简单多边形、凸多边形、多边形三角剖分;(advance) (3)凸壳及其应用;(advance) (4)Voronoi图/三角剖分及其应用;(advance) (5)多边形的交与并;(expert) (6)平面图;(expert) 3、数值计算

(1)数值计算的三大任务:求值、解方程(组)、函数逼近;(basic) (2)数值计算的误差、适定性、稳定性;(basic)

(3)解线性方程组直接方法:Gauss消元法、三角分解法;(basic)

(4)解线性方程组一般迭代方法:基本迭代、Jacobi迭代、G-S迭代、SOR/SSOR迭代; (advance)

(5)解线性方程组的变分迭代法:共轭梯度、预处理共轭梯度法;(expert) (6)解非线性方程组迭代方法:Newton迭代法、Newton-Raphson迭代法、同伦算法; (expert)

(7)求解矩阵特征值:乘幂法与反乘幂法、Rayleigh商迭代法、QR法、Krylov子空间 法;(expert)

(8)插值:多项式插值、样条插值;(advance) (9)数值积分:Simpson公式、Gauss积分;(basic) (10)解常微分方程:欧拉法、Runge-Kutta法;(advance) (11)解椭圆方程:有限单元法、有限差分法、边界元法;(expert)

希望可以帮到您,谢谢!

Ⅵ 面试程序员的时候,怎么聊更好

呈现出自己完整的知识结构。对于程序员来说,最重要的一件事情就是在短短的面试过程中呈现出自己完整的知识结构。要想做到这一点,一定要在自我介绍的过程中下足功夫,既简练又丰富,引起面试官的重视,当然最重要的是自然一点,别紧张。

Ⅶ 如何面试一名程序员

如何面试程序员
一、提问之前的准备
首先,最重要的是,你自己一开始就应该想清楚:
1. 需要新员工完成什么样的任务?
2. 怎样的人能完成这样的任务?
3. 哪些途径和方法可以发现这样的人?
只有明确这些根本性的问题,才能正确高效地完成面试。
二、提问的原则
假定你对上一节的三个问题,已经有了清晰的想法,那么接下来就可以设计如何提问了。
有一些提问的原则,是你应该遵循的:
每一个面试问题都有明确的目的。你不仅自己了解,还能向其他面试官解释清楚。
多提一些开放性(Open-ended)的问题,而不是那种用Yes/No就可以回答的问题。这样做使你有机会与面试者展开讨论,并且提出后续的问题,尽可能多地了解对方。
不要问宗教、家庭、健康、个人隐私等方面的问题。
不要问太复杂的问题。因为面试者没有太多思考时间,所以无法周全地回答,你也就无从判断他的能力了。
三、考察专业能力
为了确认面试者是胜任的,你可以问一些与职位相关的专业方面的问题。(不过通常来说,一次面试不足以看出一个人的专业能力。)
比如,你的招聘职位是系统管理员,你可以问"如何快速地在50台机器上部署Linux?"(提示:正确答案不是刻录50张安装光盘。)
另外,你还应该向面试者了解他的过去,因为过去是未来的最好预测依据。不过,提问的重点不要仅仅是他过去的成果,更要关注在当时的环境中,他是如何决策和实施的。
四、考察综合素质
因为人是会发展的,所以某种程度上,面试者的综合素质要比他的专业能力更重要。
所以,具体的技术问题(如何调用API、什么是设计模式、编程语言的语法等等)可以少问一些,更应该关注面试者的事业心、对工作的热情、进取心、自律能力、毅力等方面。
下面是一些典型问题:
Why did you get into development?
你为什么开发软件?
How many technical books did you read in the past year?
去年你读了几本技术书籍?
What was your favorite technical book in the past year? What did you learn from it?
去年你最喜欢的技术书籍是哪本?你从中学到了什么?
What websites do you read regularly, related to development?
平时你经常访问哪些编程类网站?
Do you maintain any open-source projects?
你有自己的开源项目吗?
Do you code in your spare-time?
业余时间你编程吗?
Do you love programming, or do you do it for the money?
对于你来说,编程是一种爱好,还是一种谋生手段?
Have you accomplished anything important in your career yet? Do you want to?
你的职业生涯之中有什么重要的成就?它是你主导的吗?
What would make you feel that you have done something important?
什么事情会让你很有成就感?
五、考察理性思维
某些情况下,你可能需要了解面试者的分析判断能力,看他能否全面地思考问题、客观地评价自己。
那么,你可以依次提出这样三个问题:
What's your favorite programming language? Why?
你最喜欢的编程语言是哪种?为什么?
If you could add one feature to your favorite language, what would it be? Why?
如果允许你为这种语言加一种功能,你会加什么功能?为什么?
If you could remove one feature from it, what would it be? Why?
如果允许你取消一种功能,会是什么功能?为什么?
这里的重点是,让面试者从正反两方面评价一件自己熟悉的东西,看看他的思维是否片面。答案无所谓对错,只要面试者有一个明确的立场,能够从正反两方面说出令人信服的理由,就可以了。比如,某个软件的口碑不好,但是面试者说他很喜欢,而且说得出一大堆理由,清楚地解释了这种软件的优点和缺点在哪里,这样就很好。
你还可以把这些问题,套用在其他东西上面,比如操作系统、文字编辑器等等。

Ⅷ 程序员面试时需要注意哪些

1 说得太少
尤其是那些开放式的问题,如“请介绍下你自己”或“请讲一下你曾经解决过的复杂问题”。面试官会通过你对这些技术和非技术问题的回答来评估你的经验和能力。
所以,仅仅只用两三句话来回答不但不能显示出你对这个专业的兴趣,还会让整个面试过程显得非常无聊。如果你不能很好地说明你的经验、成就和技能给企业带来的价值,那么你的竞争力毫无疑问就高不起来。所以,你需要对一些最常见的开放式问答作充分的准备,学会推销自己。
2 说得太多
不断地说,不断地说,却并没有什么实质性的内容。换句话说,就是废话连篇,言之无物。如果你不能简洁的解释问题,那么面试官就会怀疑你在工作时的表现是不是也会像你的谈话一样拖泥带水?可以先问问面试官,确定是否真的需要详细解释。
解释也是一门艺术,关键是确定重点,如果需要的话再深入到细节。当聊到业务的时候,就应该从业务的角度看问题,不要涉及任何技术术语。学会用简洁明了的方式解释问题。如果你能时刻把握主旨,那么这一点也不是问题。
3 回答不出一些必知的基本技术问题
面试不是技术竞赛,不是看谁答对的问题多,但是有一些“必须知道”的核心Java和Web基础知识,你不能不知。例如,对于Java开发人员
1)不知道“==”和equals之间的区别。
2)不知道equals和hashCode方法被隐式调用时的约定。
3)不能解释曾投入精力过的应用程序的高层体系结构。
4)不知道OO的概念和设计原则。
5)不能很好地处理多线程。
6)不知道如何在HTTP客户端与服务器端之间保持状态。
7)不知道SQL。

4 既写不好简单的代码,又回答不出如何解决棘手的问题
作为一个开发人员,你应该根据自己的经验水平,来针对给定的问题和情况编写代码。如果碰到一些比较棘手的问题,那么即使你还没有解决方案,也应该将你的思路讲给面试官听。当然这在面试时会让人特别紧张,尤其是在还有时间限制的情况下,但是你也必须保持冷静,至少应该说明你将如何试着去解决问题的方法。
5 糟糕的礼仪和态度
迟到,不适宜的着装,抖手抖脚,没有眼神接触,过于紧张,没有提问,显示不出对这份职业的兴趣,“我什么都知道”的高傲态度,贬低你的现在和以前的雇主,遇到技术问题时烦躁不安或者垂头丧气,为自己找理由而不是虚心接受错误,与面试官发生争执,随波逐流而没有自己的看法,过于呆板,撒谎,嗓门太大,无法成为良好的倾听者,等等。
提示:面试官要找的不是技术明星,而是实实在在具备了合适的技术技能、软技能、端正的态度以及能为企业获取利益、全面的专业人才。因此,不妨先研究下想要应聘的机构,深入了解其工作规范以调整回答问题时的方向和重点。将每一场面试都当作免费的培训课程,积极调整心态,不但能达到一个双赢的局面,还可以减少紧张的情绪,从而获得更好的表现。这样即使你并没有得到那份工作,也可以由此学到点什么,获得进步

Ⅸ 《.NET》程序员面试应该怎么准备

一、NET程序员面试的技巧:
面试是很奇妙的一件事情,在短短的一段时间内,要让一个完全陌生的人认可自己的专业能力,认可自己的人品,认可自己的职业习惯等。而同样,被面试者需要判断这是否是一家靠谱的公司,是不是有钱,是不是适合自己工作,是不是和自己发展方向一致等。工作就像是娶媳妇(找老公),不是说随随便便说换就换,而是自己每天都要面对的事情,所以找个好的企业,找一份好的工作,对于一个靠自己养活自己的人来说真实太重要了,那么找好企业,找好工作的第一步就是面试。
一、面试自身的综合素质。
1、基本仪容和礼仪:
其实不是针对面试,基本仪容和礼仪在日常生活也是非常重要的,是一个人是否有教养,是否有素质的基本要求。
穿着:如无特别需要,不要着正装,休闲装即可。但是不要光脚丫子大拖鞋,背心吊带,男士不要穿露脚趾凉鞋。干净整洁即可,表示对本次面试的重视和对面试官的尊重。
仪容:女士如果想化妆的话,淡妆即可,素颜也可以。男士头发理一下,胡子剃掉。还是那句话,干净整洁,万万不可口腔有异味,或者身上有体味(特别是脚丫子臭味,绝对不行)。
礼仪:多说“请”,“您”,“谢谢”,记得进门后关门,前台给你倒的水走的时候记得拿出去扔掉。坐下来面对面试官要有坐像,不要跟在家里一样太随便,说话口齿清楚,慢一点说,不要跟打机关枪一样。切记,不可做作,细节处把握尺度就行。如果遇到和面试官有分歧的时候,立即闭嘴并闭嘴,不要争论,不要试图说服面试官,更不可耻笑或者蔑视面试官,哪怕你确实不知道比面试官高到哪里去了。记住,这是礼貌,跟自己技术有多牛逼无关。
谦虚:任何时候,把自己放在一个相对低的姿态,自己是来面试,不是来教育面试官的,抱着一种接受检阅和学习的态度面对面试,千万千万不要觉得自己主角光环加身,天下之大老子第一。谦虚,起码不会让你有成为一个跳梁小丑的机会。
2、专业基础知识:
对于程序猿来说,专业基础知识绝对是重中之重,是面试成功的最基础要素。说的专业基础知识,不是说自己做了多少个项目,写了多少行代码,而是软件开发的基础知识。
在面试的时候,有时候会遇到一些候选人,乍一看简历也有好几年工作经验,项目也写的满满的,但是却连“值类型引用类型本质区别”,“构造函数有哪些特点,何时被调用”,“类和接口区别是什么”这样的问题也回答不了,注意, 是回答不了,也就是不知道,不是知道意思但是组织不了语言。 这类候选人通常在连续回答不上几个问题后,开口为自己辩解:“我动手比较强,写代码都没问题,但是书上的概念我真的不太清楚”。能说出这个话,就说明此人根本就明白作为一个技术工作者最基本的专业素质是什么。所以千万不要觉得自己工作几年,有些代码经验就已经可以挑战更加高薪的工作。
在面试前,一定要先审视一下自身的基础知识掌握程度,如果有必要,自己买书回来或者网上找一些资料,利用空余时间系统的学习一遍,比如所使用的语言本身,比如自己擅长的框架底层实现,比如编译原理,比如多线程的知识,比如Http相关的知识等等。千万不要没有一点点基础知识储备或者基础知识储备不丰富就跑去面试,失败的几率非常大,如果眼睁睁的看着自己心仪的工作机会擦肩而过,我想是谁都会难过的。
3、沟通能力:
面试的过程本质上就是一次沟通的过程,候选人在短短的时间内要尽量的向对方展现自己的长处,隐藏自己的短处,尽量让对方问题得到圆满答复并且留下较好印象。有些程序猿性格内向,在陌生人面前比较腼腆,话语不多。当然,这不能说是做错了,只能说是一些性格上的短处而已(如果很严重,那就有自卑的可能,需要重视并且纠正)。在面试时,候选人一定要精神焕发,昂首挺胸,眼神坚定,切记切记眼神不要飘忽不定,切记切记不要瓮声瓮气。咱们遇到不会的问题,就老老实实的说“这个我不清楚”,或者“这个我不会”,千万千万不要不懂装懂,顾左右而言他,打算糊弄过去。捣糨糊是过不去的,面试官的问题肯定是面试官非常清楚答案的,忽悠面试官就是在忽悠自己,有意思吗,当然,也不要胡乱回答,否则只会成为面试官和其它的同事茶余饭后的笑话。
在面试时,尽量双眼直视面试官(但不要瞪着人家),背挺直,手机开飞行模式,说话口齿清楚,利落干脆,回答得上就尽量说,回答不上直接说不知道,不要罗里吧嗦 ,特别是谈到薪酬,对方问你期望时,最好在现有基础上增加10%-20%,不要漫天要价,也不要不好意思,放心大胆的说出自己的期望,如果对方觉得略高,会再跟自己商量。务必一开口就给人真诚,干练,干脆,专业的印象。
4、过往项目经验:
很多面试者不大重视自己的过往项目经验,每个做过的项目,虽然自己在其中可能只是做一个模块甚至一个功能,但是自己都会想办法搞清楚整个项目的业务流程,研发背景,内部模块功能,和外部如何实现集成,底层数据库的设计,整体系统架构设计等等。在面试候选人的时候,通常都会问最近一个项目相关的东西,有很多候选人都会表示是自己一个人设计开发了这个项目,但是连有哪些功能模块,系统结构(注意,不是架构)都回答不出来。有些面试者,在面试一些中高级的程序员时,很喜欢从过往经验入手,自己再一遍介绍的时候他可能随时提问。因为这样有2个好处,第一是预防一问一答的形式,候选人事先背了很多问题的答案,第二是从候选人过往项目经验入手,除了可以看出候选人是否虚假构建了项目经验,还可以判断该候选人对开发细节的把握以及对一些技术点的反应能力和掌握情况,毕竟“突然袭击”比“瞄准射击”要更加考验候选人。
所以,在面试前,应该好好把自己以前的项目经验都捋一捋,特别是上一个项目,从业务流程到产品设计到系统开发,特别是项目内一些你做过的细节地方,准备在面试时拿出来说的,必须以此为点,相关的东西都查查资料看一看。再一个就是项目里面的闪光点,什么叫闪光点,就是高大上的东西,需要自己多了解了解,在面试的时候拿出来说也可以加分。面试的时候谈到这个上面(闪光点)的时候,面试官对这一块很有兴趣,越问越深,也知无不言,为自己增分不少。
5、不要作弊:
有些企业在面试程序员的时候,喜欢一开始扔一张试卷让候选人先做,然后再去面试。暂且先不谈做卷子考察方式的好坏, 在做试卷的时候,万万不要用移动设备上网查询答案。 本身作弊的行为就让人不齿,如果面试官在暗处进行观察,发现作弊,那就太尴尬了。会就是会,不会就是不会,即便你用手机查答案把试卷写的满满的,在接下来面试的时候,面试官再就试卷上的问题展开一问你,你还是不会。所以不管有没有人监督,在面试的做试卷环节,千万不要作弊。
6、热门技术点的掌握:
其实这是个增分项目,如果上面几点都已经通过面试的考核,那么这一点就会成为你绝对的亮点。
首先要先自己了解一下当前热门的技术,然后通过分析自己申请的职位,去看看可能涉及到哪些热门的技术,然后再去专门的找资料进行学习和动手实验。比如你是搞互联网的,那么最好学习一下负载均衡相关的技术,学习分布式数据库的技术,学习缓存技术,学习页面静态化的技术;
如果自己是搞数据分析的,那么最好学习一下Hadoop,学习一下微软的Cube,学习一下惠普的Vertical;如果自己是搞iOS的,那么可以看看Swift,可以看看Xamarin,可以看看WebSocket等,当然,我只是举几个例子,不一定非要这样对应,如果是搞Java的,也可以去看看Pathon,如果是搞.net的,也可以去看看Ruby on rails等等。所谓技多不压身,就是这个道理。
二、以上 6 点是自身素质的要求,如果在这6点上面能让面试官满意,基本上面试就没有太大的问题了。接下来讲一下,选一个好的公司或者企业。
1、面试官是否专业:
这里的面试官不仅仅是指技术面试官,也包括HR或者大老板。如果面试官问你一些奇葩问题(例如问你开什么车,房子多大,伴侣薪水多少等等),或者有比较明显的不耐烦,歧视,傲慢等表现,就基本可以断定这人是个奇葩,这家企业也要慎重考虑,因为这个奇葩的人很可能就是你的上司(或者是HR)。好的企业面试官应该表现出来的是专业水准,起码中规中矩问一些常规的该问的问题。
2、尽量找猎头推荐或者同行推荐:
道理其实很简单,一个企业如果花钱请猎头寻求人才,说明了企业对于这个职位的重视程度,也说明了企业是有经济能力支付相对高昂一些的招聘费用。这样就无形中对企业进行了一轮筛选。
3、工作环境:
不求工作环境高大上,起码要整洁干净。从对工作环境的状态,可以看出企业管理者的一些习惯,如果工作环境阴暗潮湿,破破烂烂的,员工也是咋咋呼呼大喊大叫,说明管理者要么是没有足够的经济条件进行整改,要么是自身习惯不好,不在乎环境。建议在面试时,仔细观察一下工作环境,如果是明亮宽敞,干净整洁,大家都静悄悄的做自己的事情的,从工作环境上说是个不错的企业。
4、加班与薪酬福利待遇:
谈到薪酬不要腼腆,在现有基础上加10%-20%都是正常范围,只要不乱要价就行了,这里说的薪酬是指纯工资,在面试时,还要考虑企业能提供的年终奖或者其他福利。对于加班的话,一般来说做IT的加班是很正常,但是要问清楚加班怎么算,是加班费还是调休。以下几种情况,请慎重考虑:
a. 无偿加班。
b. 强制加班到x点。
c. 单休。
d. 无年终奖。
e. 除了工资以外无任何福利。
f. Offer或者合同不量化写清楚工资数字,而是写“和业绩挂钩”,“根据业绩”等。
5.在面试之前上某准网(以前叫某智网)查一下该公司评价。
当然也可以先网络一下,如果是骗子公司,就直接可以查出来,但是有些公司内部其实很烂,但是并不是骗子公司,所以这时候就需要去某准网上搜一下评价。但是也不是每个公司都有评价,有很多小公司,在某准网上也没有。但是抱着没有负面评价就是好评的思路,也说的过去。如果一家企业明显有很多负面评价,而你刚好要去这家企业面试,建议你就得好好考虑考虑了。
6、上门面试时,去卫生间看一下:
没错,就是去卫生间。可以提前点到,然后问一下前台卫生间,去卫生间洗个手(或者面试完成后也行),特别是看看厕纸的质量。当然,让你去看看卫生间的环境和厕纸质量,不是在衡量以后你在这里方便的是否舒服,而是通过卫生间的状况,可以看出企业管理者对于治理企业的态度。如果一家企业连卫生间的要求都很高,装修比较好,卫生条件也不错,甚至连厕纸质量都很好,那么在其他方面,对待员工应该差不了哪里。说来你可能不信,我见过的企业中,几乎都满足这一条。不好的企业卫生间一定是比较破烂,设施破损怀旧了也不会及时修理,厕纸用的最廉价的。而好的企业卫生间装修精美,设施干净,厕纸也是较厚较柔软的。其实大家可以仔细留意一下,好的商场,好的学校,卫生间相对都比较高档一些。
其实面试还是得靠自己的实力,所以技巧再多都是辅助,只有自己的技术水准达到一定的程度,才能拿下心仪的职位。

阅读全文

与it程序员面试技巧相关的资料

热点内容
常用cmd网络命令 浏览:676
hashmap7源码分析 浏览:896
搜索引擎原理技术与系统pdf 浏览:359
运动估计算法python 浏览:858
java正则1 浏览:536
redhatlinux最新 浏览:177
python字典编程词汇 浏览:144
微信和服务器如何通讯 浏览:10
百家号服务器配置有什么用 浏览:598
怎么为电脑加密 浏览:58
服务器出现差错是什么意思 浏览:616
苹果app移到商店里怎么删掉 浏览:254
phpjsphtml 浏览:63
吃鸡手机国际服服务器超时怎么办 浏览:68
努比亚Z5无命令 浏览:642
展示网站云服务器 浏览:872
代码混淆器php 浏览:367
贝恩pdf 浏览:209
丙烯pdf 浏览:368
云服务器华硕 浏览:713