本文只是记录几个面试问题,没有严格的正确答案,
如果各位大大有好的解决方案
可用直接回复沟通。
1. Linux Swap交换分区长期处于满的状态说明了什么?
对于应用程序来说,buffers/cached 是等于可用的,因为 buffer/cached 是为了提高文件读取
的性能,当应用程序需在用到内存的时候,buffer/cached 会很快地被回收。
所以从应用程序的角度来说,可用内存=系统free memory + buffers + cached
当可用内存少于额定值的时候,就会开会进行交换。
交换将通过三个途径来减少系统中使用的物理页面的个数:
1. 减少缓冲与页面 cache 的大小,
2. 将系统 V 类型的内存页面交换出去,
3. 换出或者丢弃页面。(Application 占用的内存页,也就是物理内存不足)。
事实上,少量地使用 swap是不是影响到系统性能的。
然而大量的swap说明了要么是swap设置不当,要么就是系统的可用内存很少了。
2. 服务器端有大量的Time_Wait状态的tcp socket, 说明了什么?
tcp协议中,主动关闭连接的一方进入TIME_WAIT状态。此处需要 了解的是什么原因导致服务器关闭了这些连接?
然后就是出现这种问题该如何解决。
解决办法参考
http://blog.csdn.net/tianmohust/article/details/7436157
3. 如何设计一个不可被继承的c++类。
这个参考 http://blog.csdn.net/lazybin/article/details/8372793 , 用友元 + private构造函数实现
4. 设计一个系统,存储一个号码和一个分数的排行榜,输入就是(int number, int score);
此输入是很频繁的,然后总数据量很大,大概2亿+ 。
要求实现以下接口: 1) 给定一个number, 快速返回其 score
2) 给定一个N(常数),返回排名前N名的 number 和 score 排行榜
3) 给定一个number, 返回在其前的N名玩家和后N名玩家
从需求、性能、复杂度来分析。
目前从大的方向来说,一种思路是在内存解决,一种是依赖数据库自身的操作。
其实类似top(N)这种要么在内存用最小堆实现,不过这个会需要同步内存和数据库的数据,保持一致性。
如果借助数据库,应该可以建立索引,然后 select top(N) 的方式做,不过具体性能未作验证。
对于第3个接口,目前没有好的思路。
阅读(1218) | 评论(0) | 转发(0) |