2012-10-11 迅雷笔试

1. 线程安全类型的缓存存储的实现,存储int类型的<key, value>键值对类型。要求考虑多线程下缓存的访问效率以及安全性、带有一定的缓存替换策略。提供了可直接调用的互斥锁函数(lock, unlock),以及线程安全类的部分实现(insert方法和match方法).

简略的思路:

数据存储策略, 由于需要存储的是一种键值对类型,所以肯定使用stl库中的map类型存储,查找效率、插入效率和删除效率都比较高。

缓存替换策略,使用先入先出的策略,此处使用队列实现。构造一个结构体A,该结构体中有两个变量key和time(key对应键值对中的键,time为该键值对插入的时间,队列的构建以时间为基准,最先加入的肯定位于队首),以及一个重载的小于比较函数。插入新的元素的时候,如果优先队列的元素个数已经为预先设定的限制大小时,则将队首以及队首变量key值所对应的缓存对象从map对象中删除,然后就将新的结构体插入队列中。如果没有达到限制,则直接插入队列中即可。删除时直接遍历即可

线程加锁策略,插入和删除元素是需要加锁,查询对象是无需加锁。

2. 字符串匹配的问题,其实就是string类中的find函数和insert函数的组合。题目大概:从字符串"abedafabf“找出与"ab"相同的字符字串,在对因的字串后再加入某一指定字符串,如"123",使得原有字符串变为“ab123edafab123f”,函数原型:void match_insert(char* source, const char* match, const char* in);, 不用考虑溢出问题

简略的思路:

a.由于招的是C++工程师,所以笔试的时候偷懒将c字符串转换成为了string类型,然后使用该类型提供的find函数和insert函数实现,最后再将string中的字符串重新写回到source中。

b. 使用最笨的方法,一个一个的匹配,找到后添加指定串元素,然后继续匹配直至结束。此方法需要使用O(n)的空间,时间为O(kn).

c. 请高人指点

3. 操作系统进程相关内容,进程状态变化,原子操作,数据库事务,字节对齐问题等等

进程状态有三种:就绪态、运行态和等待态,其中运行态可以转换成就绪态和等待态,等待态可以转为就绪态,就绪态也可以转为运行态。



阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页