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.装饰者模式作用,画出类图
装饰者模式能动态将职责附加到对象上,若要扩展功能,装饰者提供了比继承更具弹性的代替方案。
5.代理者模式作用,画出类图
代理模式就是为其他对象提供一种代理来控制对这个对象的访问
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 }