一、简答题(本题共30分)
- 动态链接库与静态链接库分别有什么优缺点?(10分)
- 轮训任务调度和抢占式任务调度有什么区别?(10分)
- 请列出数据库中常用的锁,分别给出其应用场景?(10分)
二、算法与程序设计题(本题共45分)
- 给定任意一个正整数,求比这个数大且最小的“不重复数”,“不重复数”的含义是相邻两位不相同,例如1101是重复数,1231是不重复数?(15分)
- 长度为N(N很大)的字符串,求这个字符串里的最长回文子串?(15分)
3. 数轴上从左到右有n个点a[0],a[1],…,a[n-1],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点?(15分)
三、系统设计题(本题共25分)算法思路:用两个指针,初始值设为i=0,j=1;求出以i为起点最多能覆盖的点数maxNum,然后i和j都往后移动一步,如果a[j]-a[i]<=L,说明绳子可以覆盖更多的点,把i固定,求出新的maxNum,后面的操作重复前面的循环,直至j碰到最后一个点为止。算法复杂度真正为O(n),因为外层和里层while循环都控制着变量j++。
#include <stdio.h> int overrideMaxNum(int *points,int pointsNum,int L) { int maxNum=1,i=0,j=1; if(L<=0||points==NULL||pointsNum<=0)return 0; while(j<pointsNum) { while(j<pointsNum&&points[j]-points[i]<=L) { maxNum++; j++; } i++; j++; } return maxNum; } int main() { int points[10]={1,2,3,4,10,15,17,18,19,20}; printf("%d\n",overrideMaxNum(points,10,3)); return 0; }
- 现代系统的设计过程中,为了减轻请求的压力,通常采用缓存技术,为了进一步提升缓存的命中率,通常采用分布式缓存方案。即前端的调度模块,将针对不同内容的用户请求分配给不同的缓存服务器向用户提供服务,请给出一个分布式缓存方案,满足如下要求:
2)通过一定的分配策略,可以保证充分利用每个混村服务器的存储空间,及负载均衡。当部分服务器故障或系统扩容时该分配策略可以保证较小的缓存文件重分配开销;
3)当不同缓存服务器的存储空间存在差异时,分配策略可以满足比例分配。