技术面试之准备阶段

根据我的面试经历,技术面试的问题会集中在三个方面

1.确认项目经历

2.针对性地问些技术问题

3.算法和逻辑方面的问题

而这三方面的问题大多是通过项目经验来展开的,如何准备呢?

1.项目介绍

介绍的项目与目标职位要匹配

可以是工作项目,也可以是个人开源项目

切勿驴头不对马嘴,针对不同的职位要有不同的简历

比如我的简历就有几份,投递不同的职位

驱动高级开发简历 内核中级开发简历 C/C++高级开发简历 JAVA后端中级开发简历

这里有个插曲,在有的企业 BSP和驱动是严格分工的

2.描述项目背景

用简短的语言概括项目的来源和需求,语在精炼不在多

比如客户是谁,是要干什么的,分哪些模块,大致的工期是多少。

3.阐述项目的整体架构

主要是让面试官对项目整体有个印象,我一般按下面的步骤进行描述:

1.项目的人员组成

比如互联网项目:

前端5人+后端20人+美工2人+app2人+DBA2人+测试3人+QA1人+产品经理1人+项目经理1人

物联网项目:

前端2人+后端10人+DBA1人+协议2人+BSP1人+驱动1人+硬件1人+测试1人+QA1人+产品经理1人+项目经理1人

2.项目的分层模型

如互联网项目:

从前端->负载均衡(如nginx)–>管理层–>业务层(罗列主要的)<–>调用层(如dubbo)<–>数据层(如mysql redis)<—>日志层

物联网项目:

媒介层(如app web)—>中间件—>协议层—>管理层—->数据层—->驱动层<——硬件层

3.简要介绍项目用到的技术和创新点

关注职位匹配度

4.表述自己的工作内容和项目角色

相比于整个项目,企业对自己的角色往往更感兴趣。

介绍做的模块里用到了哪些技术以及有哪些亮点,技术和亮点最好要和职位要求相一致。而且,面试官有可能会问你提到的技术的细节,也就是说,宁可只你非常熟悉的技术,而不提不熟悉的技术。

注意:

对于自己还没完全弄清的技术,被问到,除非毫无头绪,不然可按下面的方法回答:

比如,了解DTS吗?

答:DTS技术有过了解,简单看过代码,回答一下原理XXXXXXXXX,(话锋一转)但是在我的项目里,没有使用这个技术,表明原因:内核版本比较老,xxxxxxx(主要避免面试官问到太多细节,那就尴尬了)

有的面试官会问:看过那些开源项目的源码?

不要瞎说,列举自己比较熟悉的几个就行,一定要是真的看过的(一问三不知就尴尬了)

比如我一般这样回答

如果面试驱动,答:内核看得比较多,比较关注KVM

C/C++: 研究过libevent源码,用过mudulo,准备研究下源码

java: 用过netty dubbo nginx,正在看nginx源码

工作内容是要说明的重点,接下来的面试将会围绕这个展开,要充分回顾并挖掘工作内容的技术点、难点、创新点,做到有的放矢。

项目经验的介绍是一个细心活,需要求职前好好准备,提炼总结。

同时一定记住以下两点内容:

第一,切忌浮夸;

第二,如果是外企,最好能够做一个英文的介绍,以备不时之需。

关于算法面试:这些都是最基本的。

1.排序

基本排序手写一定要正确率100%,归并要手写,快排要手写,最好递归和迭代都能写

清楚每个算法的复杂度,知道如何优化,比如快排的随机化锚点,三路快排,直接插入优化

2.查找

二分手写,迭代和递归都要会

hash查找,hash function的构造,避免冲突,优势

3.链表

这个怎么变着花样玩,都要能手写出花来,

链表在linux内核中用得太多,可以这么说,看得懂内核的list,理论上就能看懂内核70%以上代码

再能懂体系结构,有面向对象思想,会一点汇编,理论上能看懂90%

再看懂树和hashtable,理论上内核代码100%阅读无障碍!

大多数据结构都是嵌入list,结构很复杂,但算法逻辑都很简单

红黑树在内核用在了schedule和epoll中,其他地方我还没看到过

4.树

前序 中序 后序 手写,构造,查找 插入

AVL 2-3树 B树 红黑树 trie树 radix树 原理要能说清楚,一般不会让写代码

5.图

BFS DFS 能手写

最小生成树 最短路径 自动寻路 说清原理 一般不会让手写

6.动态规划

基本的走楼梯还是要手写的

7.贪心 分治

原理和应用,说清便可

8.海量数据

说清原理,一般都是要建立最大/小堆

9.并发问题

ppc tpc select poll epoll 阻塞 非阻塞 同步IO 异步IO 原理要说清楚

10.TCP/IP

各层功能 编程模型 滑动窗口 粘包 优化 超时重传 三次握手 四次挥手

原始套接字 单播 组播 广播 心跳包

11.编译原理

至少能说清楚一个基于栈计算机的加法语言

add+push描述栈计算机 后序遍历描述语法树

文章目录
  1. 1. 1.项目介绍
  2. 2. 2.描述项目背景
  3. 3. 3.阐述项目的整体架构
  4. 4. 4.表述自己的工作内容和项目角色