求职经历——面试之技术面试篇
本篇是面试部分中最核心的一篇:技术面试篇。适用于计算机相关职位。
对于这部分面试来说,没有太多的技巧可言,主要还是看个人的技术水平,积累程度和项目研究相关性,相信对于那些技术很牛的同学,通过这部分面试应该没问题。所以本篇的主要内容,是向那些技术储备不够的同学提供一些具体的面试题,希望将要参加技术面试的同学能够对症下药,提前作好准备。
一般来说,技术面试中的问题主要分为两大类:通用问题和专业问题。下面分别来说。
(一)通用问题
通用问题指的是,对于你简历中的个人经历、研究项目、编程实践进行发问,主要是围绕你的简历内容进行提问。这是绝大部分技术面试必然有的内容。在这部分面试中,提醒大家注意以下几点:
1、自己没有做过的项目,没有编过的程序,千万不要往简历上写,因为在面试环节肯定会被问出来,那样不管他其它环节多优秀,都将马上被淘汰,因为任何企业都不能容忍不诚实的人。
2、对于自己简历上的内容,一定要熟记于心,自己做过的东西,更要非常熟悉才行,建议每次面试之前把自己做过项目的细节再好好看一遍。在面试环节,面试官往往会针对你做过的具体项目,问非常细致的问题。所以,一定要确保,写到简历上的内容都是自己非常熟悉的,不怕细问。
3、介绍自己做过的项目时,最好挑应聘职位相关的项目,因为对于技术主管来说,他关心的是你做过的项目跟他们有没有相关性,以及你的专业特长跟具体职位的要求是否吻合。
下面把这部分面试中常见的问题作以归纳总结,便于大家提前准备:
1、你都做过哪些项目?简单介绍一下。
2、挑一个你做过比较拿手的项目介绍一下。
3、你这个项目用什么技术开发的?数据库用的什么?你在里面做的哪部分?
4、你在项目中遇到什么问题?怎么解决的?
5、你在项目中采用了什么算法?什么技术?
6、这个项目是几个人开发?做了多长时间?你担任什么职责?
7、这个项目用了什么第三方软件/插件?用的什么版本控制工具?采用了什么样的软件开
发流程?
8、这个项目是怎样进行进度控制和风险控制的?
9、这个项目都做了哪些测试?
10、说说你对xx技术/领域的看法。
相信只要项目你确实做过,程序确实编过,这部分应该都问题不大。
(二)专业问题
这部分问的就是,跟你的项目无关的专业知识,主要考察的是你对具体专业知识的掌握情况,以及编程能力。面试的形式有:问答,现场编程,上机编程。一般问答的形式居多,像微软、google、moto这种非常牛的公司,才会现场考你编程,纯考算法的公司也就那么几家。大部分情况都是问你一些基本的技术细节,考察你对专业基础知识的掌握情况。注意:IT企业往往问的都比较细,非IT领域的计算机职位往往问的比较泛泛。 这部分的关键还是在于技术积累,因为很多技术问题你不知道就是不知道。所以多积累面试常见问题和知识点还是非常重要的。
下面按照不同的技术领域分类总结各部分常见的面试问题,括号中会标注该问题的来源。
1、java
因为我投的职位主要是java相关的,所以这方面积累的经验比较多一下。这部分考查的重点主要有:java基本语法,多线程,异常处理,抽象类,匿名类,接口,MVC架构,设计模式,Servlet,Struts,Spring,J2EE。以下是我遇见过的面试问题:
1)transient和volatile是java关键字吗?(瞬联)
2)抽象类和接口有什么区别?(瞬联)
3)能说一下java的反射机制吗?(瞬联)
4)在java中怎样实现多线程?(瞬联)
5)你用过哪种设计模式?(瞬联,IBM,aspenTech)
6)请说一下MVC架构(瞬联,IBM,aspenTech)
7)如果类a继承类b,实现接口c,而类b和接口c中定义了同名变量,请问会出现什么问题?(瞬联)
8)请说一下java中为什么要引入内部类?还有匿名内部类?(瞬联,IBM)
9)请说一下final,finally和finalize的区别?(瞬联)
10)请说一下HTTP请示的基本过程(IBM)
11)java中存在内存泄漏问题吗?请举例说明?(IBM)
12)请说一下java中的内存回收机制所采用的算法(IBM,瞬联)
13)请说一下System.gc()函数的作用。什么什么时候可以调用垃圾回收器?(瞬联)
14)你做过的项目中采用了什么安全认证机制?(IBM)
15)Math.round()什么作用?
2、C
C语言考查的重点一般是:指针、结构体、条件编译、全局变量/局部变量。以下是我遇见过的面试问题:
1)请说一下extern C的作用(汉略)
2)请说一下#ifdef...的作用(汉略)
3)C语言里,哪些变量是存放在堆里,哪些是存放在栈里?(普天)
4)C语言里的static关键词是什么含义?(普天)
5)进程和线程有什么区别?(普天)
3、C++
C++语言考查的重点主要有:多继承,抽象类,虚函数,拷贝构造函数,析构函数,动态联编,多态,const,static。以下是我面试中遇到的问题:
1)你听说过拷贝构造函数吗?能具体说一下它的作用吗?(汉略)
2)析构函数必须是虚函数吗?为什么?(汉略)
3)你听说过钻石结构吗?请具体说一下(aspenTech)
4)什么是深拷贝?什么是浅拷贝?他们有什么区别?(aspenTech)
5)什么是虚函数,什么是纯虚函数?为什么引入虚函数和纯虚函数?(汉略,aspenTech,普天)
6)请说一下面向对象的基本特性。(aspenTech)
7)C++中的const关键定代表什么含义?跟C语言中的const有什么区别?(aspenTech)
8)C++中的static关键定代表什么含义?跟C语言、Java中的static有什么区别?(普天)
4、数据结构
这是面试中几乎必考的部分。考查的重点有:链表,二叉树前序、中序、后序遍历(递归,非递归),二叉树结点、层次的计算,树转二叉树,各种排序算法(冒泡排序,快速排序,堆排序是重点)。以下是我在面试中遇到过的问题:
1)请编写程序,将一个链表倒置。(联发)
2)请编写二叉树的中序遍历非递归算法。(新华社)
3)请编写一个程序,实现将树转化成二叉树。(华为)
4)一棵满二叉树有x个结点,请问整棵二叉树有多少结点?(新华社,中国信保)
5)请编程实现一个堆排序算法/快速排序算法。(汉略)
5、数据库
这也是面试重点内容。主要考查点有:范式,1、2、3范式,事务,内连接,外连接,关系代数,数据库设计。以下是我遇到过的面试问题:
1)什么是范式、1范式、2范式、3范式?(百度,中航信,新华社,中国信保)
2)事务具有哪些特性?(中航信)
3)请说说什么是外连接、左外连接、右外连接?(aspenTech)
4)请说说关系代表中的几种基本运算?(中航信)
5)请对一个论坛进行数据库设计,并说说你设计的数据库满足哪个范式(百度)
6)给你一个数据库需求,请对数据库进行设计,并根据要求写出查询语句(中国信保)
6、网络
这也是常考的部分。主要考查点有:OSI参考模型,TCP/IP参考模型。以下是我遇到过的具体面试问题:
1)请解释一下OSI参考模型。(中国信保)
2)请解释一下TCP/IP参考模型。(中国信保)
3)为什么现在的网络最后采用了TCP/IP参考模型而没用OSI参考模型?(中国信保)
总结:这部分面试主要考查的还是你的专业基础知识和技术积累程度。所以一定要回过头,把书上的重点章节再看一遍。对于一些常见的面试问题,要多注意积累,这样才能在面试的时候充满自信,临阵不慌。
建议:首先把重点的专业课知识重新复习一遍,做到熟记于心,灵活运用。然后,买一本<程序员面试宝典>好好看看,一定要把里面的重点章节全看完,全背下来。在这里,强烈向大家推荐那本<程序员面试宝典>,一定要人手一本,认真看完,找工作时你会发现,大部分面试题都是那里面的。最后,多向周围的人取取经,把你在面试中遇到的问题和别人在面试中遇到的问题记下来,不会的及时问,把它弄懂。这样,在不断的总结、改进过程中,自己的技术水平、面试经验才能不断提高。
最后,祝愿大家都能顺利通过面试,拿到满意的offer!