2014.10.10面试总结

1.Linux系统top命令有什么作用,都能看到什么信息

    当前系统时间,系统进程数量及状态统计,cpu状态,内存状态,swap交换分区,各进程的状态监控


2.一个文件中有1000行,每行一个单词,用Linux命令找出出现频率最多的前5个单词

    cat file.txt | sort | uniq -c | sort -k1 -n -r | head -5

    cat:打印原始数据

    sort:对原始数据排序,使相同数据排到一起

    uniq:合并相同的数据,-c表示显示重复次数

    sort:对数据再排序,-k1表示针对第一列的内容排序,-n表示按数字大小排序,-r表示逆序排序

    head:显示数据头部,-5表示显示前5行


3.操作系统中,堆和栈有什么区别

    栈:由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈,栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放
    堆: 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些


4.装饰者模式作用,画出类图

    装饰者模式能动态将职责附加到对象上,若要扩展功能,装饰者提供了比继承更具弹性的代替方案。

2014.10.10面试总结_第1张图片


5.代理者模式作用,画出类图

    代理模式就是为其他对象提供一种代理来控制对这个对象的访问

2014.10.10面试总结_第2张图片


6.CPU进程调度有哪几种方法?最常用的是哪种?多核CPU下如何进程调度


7.线程池应该如何设计?如何保证在大量线程下每个线程还能正常运转?参加JAVA线程池的设计


8.代码题,多线程环境下的单例模式,Lazy方式

    双重判定,略


9.C语言中,malloc、calloc、alloc三者有什么区别

    alloc是向栈申请内存,因此无需释放

    malloc和calloc都是向堆动态申请,需要释放

    malloc不能初始化所分配的内存空间

    calloc会将所分配的内存空间的每一位都初始化为0


10.TCP三次握手过程。如果需要优化,第几次握手后就可以发送消息?是否需要重传?


11.TCP通信中,RTT的含义

    RTT(Round-Trip Time): 往返时延。在计算机网络中它是一个重要的性能指标,表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延。

    一般认为单向时延=传输时延t1+传播时延t2+排队时延t3

    t1是数据从进入节点到传输媒体所需要的时间,通常等于数据块长度/信道带宽

    t2是信号在信道中需要传播一定距离而花费的时间,等于信道长度/传播速率(光纤中电磁波的传播速率约为2*10^5 km/s,铜缆中2.3*10^5 km/s)

    t3可笼统归纳为随机噪声,由途径的每一跳设备及收发两端负荷情况及吞吐排队情况决定(包含互联网设备和传输设备时延)

    时延并无标准值只有经验值。


12.代码题,计算二叉树的深度

    后序遍历,先递归计算左右子树的深度,取较大值再+1即为当前结点深度


13.代码题,计算二叉树中叶子结点的最长距离

    基于上一题的框架,用一个输出参数记录当前根结点的最长路径,每次返回时,同时更新最长路径:

    最长路径 = Max{ 左子树最长路径,右子树最长路径,左子树深度+右子树深度+1 }

你可能感兴趣的:(C++,linux,面试,操作系统)