CVTE面试步骤:在线测评、HR面、笔试、技术面、HR终面

技术面遇到做嵌入式的老师,问了若干Linux、数据结构问题,面挂了。整理技术面的问题,算是一次经验吧!

一、Linux

(1)查看系统进程
ps命令用于查看当前正在运行的进程(瞬间信息、不动态变化);top检测系统性能, 实时地提供进程信息(类似与任务管理器)。

(2)查看僵尸进程
首先,我们可以用top命令来查看服务器当前是否有僵尸进程,在下图中可以看到僵尸进程数的提示,如果数字大于0,那么意味着服务器当前存在有僵尸进程
thum-6dbefaa0c8fed11e492ce4e14665744920101221050808.png

下面,我们用ps和grep命令寻找僵尸进程

ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'

命令注解:
-A 参数列出所有进程
-o 自定义输出字段 我们设定显示字段为 stat(状态), ppid(进程父id), pid(进程id),cmd(命令)这四个参数
因为状态为 z或者Z的进程为僵尸进程,所以我们使用grep抓取stat状态为zZ进程
运行结果参考如下

Z 12334 12339 /path/cmd

这时,我们可以使用 kill -HUP 12339来杀掉这个僵尸进程
运行后,可以再次运行ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'来确认是否将僵尸进程杀死
如果kill子进程的无效,可以尝试kill 其父进程来解决问题,例如上面例子父进程pid是 12334,那么我们就运行kill -HUP 12334来解决问题。

(3)shell查找子串命令
grep命令

$ echo “$str” | grep -q ”$pat”
$ echo $?

http://segmentfault.com/q/1010000000114932

grep命令教程
http://www.cnblogs.com/end/archive/2012/02/21/2360965.htm
http://blog.csdn.net/dysh1985/article/details/7571273

(4)查看磁盘使用情况
df命令:Linux下可以用df命令获取硬盘的使用情况
du命令:查询档案或目录的磁盘使用空间

(5)Linux文件系统实现
inode索引节点:http://www.cnblogs.com/vamei/p/3506566.html

(6)嵌入式设备内存优化
mmap将一个文件或者其它对象映射进内存,采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。
http://ticktick.blog.51cto.com/823160/817545

(7)free命令
来自 /proc 虚拟文件系统,我们可以通过 /proc/meminfo文件来了解当前系统的内存使用情况

(8).a、.so、.ko分别是什么文件
.a:静态库文件
.so:共享库文件
.ko:内核模块文件,是内核加载的某个模块,一般是驱动程序

二:C/C++相关
(1)new/malloc区别
http://blog.csdn.net/hackbuteer1/article/details/6789164

(2)连续两次free操作
free操作之后原指针变成野指针,再次free操作,由于堆中的内容已经是无效的东西,所以就会出错。
“如果p是 NULL指针,那么free对p无论操作多少次都不会出问题;如果p不是NULL指针,那么free对p连续操作两次就会导致程序运行错误”

(3)STL中map、set区别
map:存储(key,value)
set:存储集合数据

三:数据结构
(1)STL中map实现原理
红黑树

(2)描述红黑树及插入方式
性质1. 节点是红色或黑色
性质2. 根是黑色
性质3. 所有叶子都是黑色(叶子是NIL节点)
性质4. 如果一个节点是红的,则它的两个儿子都是黑的
性质5. 从任一节点到其叶子的所有简单路径都包含相同数目的黑色节点。

插入操作可以概括为以下几个步骤:
(1)查找要插入的位置,时间复杂度为:O(N)
(2)将新节点的color赋为红色
(3)自下而上重新调整该树为红黑树

(3)红黑树、AVL树哪个更平衡?
AVL树更平衡,但平衡和效率是两回事,论平均效率,红黑树比较高;红黑树并不追求“完全平衡”——它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。
http://blog.csdn.net/klarclm/article/details/7780319

(4)B+树特点,与B树区别
http://www.cnblogs.com/oldhorse/archive/2009/11/16/1604009.html
B+的特性:
1.所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的;
2.不可能在非叶子结点命中;
3.非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层;
4.更适合文件索引系统;

(5)vector底层实现
底层数据结构为数组,支持快速随机访问
http://blog.csdn.net/huangkq1989/article/details/7277282

(6)哈希表

四、算法
(1)二分查找

(2)1000以内回文素数
算法效率问题:
首先判断回文、再次判断是否为素数

六、操作系统理论
(1)互斥量、信号量区别
1. 互斥量用于线程的互斥,信号量用于线程的同步,这是互斥量和信号量的根本区别,也就是互斥和同步之间的区别。
互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。
同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源
note:信号量可以用来实现互斥量的功能
2. 互斥量值只能为0/1,信号量值可以为非负整数。
一个互斥量只能用于一个资源的互斥访问,它不能实现多个资源的多线程互斥问题。信号量可以实现多个同类资源的多线程互斥和同步。当信号量为单值信号量是,也可以完成一个资源的互斥访问。
3. 互斥量的加锁和解锁必须由同一线程分别对应使用,信号量可以由一个线程释放,另一个线程得到。

(2)生产者-消费者 C代码

(3)Linux自旋锁
http://www.360doc.com/content/10/1008/16/1317564_59357570.shtml

七、其他
(1)Git使用什么命令最快合并分支
http://fsjoy.blog.51cto.com/318484/245081

遇到大Boss,没看我自己带的简历、没有问任何项目相关问题!
不管你会不会,一定要在面试官面前表现的很自信!

标签: cvte, Linux

评论已关闭