声明:本文版权归IronOxide所有,博客地址:http://www.cppblog.com/IronOxide/
第一部分 数据结构与算法
1. 设数组中初始状态是递增的,分别用堆排序,快速排序,冒泡排序和归并排序方法对其进行排序(按递增顺序),【冒泡排序】最省时间,【快速排序】最费时间。
2. 红黑树中已经有n个数据,寻找某个key是否存在的时间复杂度为【O(logn)】。
3. 7个相同的球放到4个不同的盒子里的,每个盒子至少放一个,方法有【20】种。
4. 两个无环点链表L1,L2,其长度分别为m和n(m>n),判定L1,L2是否相交的时间复杂度是【O(m+n)】,空间复杂度是(不包括原始链表L1,L2)【O(1)】。
5. 平面上有两个n条直线两两相交,但没有三条直线交与一点,问这n条直线把平面划分成【(n*n+n+2)/2】个区域。
第二部分 软件工程与数据库
在京东商城的商品展示页面下方,总会有一些关于本商品的客户评论信息。模仿该评论模块,有如下三个表:price(商品表),userinfo(用户表),threads(评论主题表)
1.请画出以上三张表对应实体的ER图(实体字段标明主键外键即可,用箭头表示)
2.在product表中加入一条新纪录(1004,'京东空调',3000).请写出对应的SQL语句。
INSERT INTO product(Pid,Pname,Price) VALUES(1004,'京东空调',3000);
3.更新product表中pid为1001的商品的价格为3666。请写出对应的SQL语句。
UPDATE product SET Price=3666 WHERE pid=1001;
4.在product表中查询pname中带有"京"的商品。请写出对应的SQL语句。
SELECT * FROM product WHERE pname LIKE '%京%';
5.查询product表中price在1000.0与3000.0之间的所有商品并按照价格降序排序。
SELECT * FROM product WHERE price<3000.0 AND price>1000.0 ORDER BY price DESC;
第三部分 数字与逻辑
1.数字与逻辑
A. 0 2 6 14 【30】 62
B. 11 22 33 45 【57】 71
C. 1 7 10 【不知道】 3 4 -1
2.逻辑推理
A.你让工人为你工作7天,给工人的回报是1根金条。金条平分成相连的7段,你必须在每天结束时给他们1段金条,如果只许你两次把金条弄断,你如何给你的工人付费。
解:假设金条长度为7,将金条分成7=1+2+4(实际上就是2的幂)。
第一天,把长度为1的小段给工人。
第二天,把长度为2的小段给工人,并收回长度为1的小段。
第三天,把长度为1的小段给工人。
第四天,把长度为4的小段给工人,并收回长度为1和长度为2的小段。
第五天,把长度为1的小段给工人。
第六天,把长度为2的小段给工人,并收回长度为1的小段。
第七天,把长度为1的小段给工人。
B.有7克,2克砝码各一个,天平一只,如何只用这些物品3次将140的盐分为50,,90克各一份?
解:答案有多解:
步骤一:把2克的砝码放到天平一段,然后把140克盐往天平两端加,直到平衡。这样就把所有的盐分成69克和71克两部分。
步骤二:把7克砝码和2克砝码放到天平左端,把71克盐网天平两端加,直到平衡。这样左端的盐重31克,右端的盐重40克。
步骤三:把31克盐和69克盐合成一堆,往天平上加,直到平衡。这样就把100克盐分成了两个50克,把上面称出的40克和一个50克合并就得90克,剩余的就是50克了。
第四部分 其他
1. 线程是【进程】中某个单一顺序的控制流。
参考资料:http://baike.baidu.com/view/1053.htm
多线程可以让同一个【进程】的不同部分【并发】执行,从而实现加速。
参考资料:http://baike.baidu.com/view/65706.htm
2.死锁是指【两个或两个以上的进程 】在执行过程中,因争夺资源二造成的一种【互相等待 】现象,若无外力作用,它们将无法推进下去。内存中造成死锁的原因有【可剥夺资源和不可剥夺资源】,【竞争不可剥夺资源】,【竞争临时资源】。
参考资料:http://baike.baidu.com/view/121723.htm
3.ISO网络模型图与TCP/IP网络模型图对应关系为
【应用层】,【表示层】,【会话层】对应【应用层】
【传输层】对应【传输层】
【网络层】对应【网际层】
【数据链路层】【物理层】对应【网络接口】
参考网址http://blog.csdn.net/yuliu0552/article/details/6711659
4.你所见过的最大影子是【月亮的影子】。
5.京东商城的商品搜索功能是整个网站架构中非常重要的一个模块。当用户在搜索栏中写入他们想要搜索的关键字时,往往会有一些热门的关键词出现在提示框中。对于这一功能的实现,你认为需要:
1.用户输入一些关键字查询时,将用户的相关信息(ip,cookie,keyword,username etc.),暂时存储。(临时对象,临时文件等等)。
2.定时从暂时缓存处,一次行读取,写入到数据库中。
3.记录下来关键字后,需要定时从数据库中提取出来。
4.数据库存储建议采用Oracle,因为这个数据量会增加很快,且很大。最好采用分表处理。
5.定时生成相关关键字页面,可以与定时关键字写入数据库放在一起。
由于关键词的存储量非常大,在你看来这么关键词该:
需要将用户关键字记录表分解处理.即每个月的第一天的零点生成一个新的数据库表,名字(user_key_200604),名字后面的数字是年月(六位数字)。用户每次查询时,记录到当月的记录表中,(以后提供的用户的查询日志,默认只提供当月的查询记录)。
参考资料:http://blog.sina.com.cn/s/blog_53fc0ac20100pr7j.html
第五部分 选答题(任选一题作答,使用JAVA,C#,C++等主流语言编写)
1.求给定数组中最大的K个数function array[] findK(array[] a , int k)
解:http://blog.csdn.net/v_JULY_v/article/details/6370650
2.求给定数组中存在的和为最大的子数组,子数组中各元素要求是在原数组中连续的部分
(3,-2,3,4,5,-8)
解:http://blog.csdn.net/v_july_v/article/details/6444021
/*
dp[i] = max(dp[i-1]+a[i] ,a[i]);
Time O(n)
Space O(n)
*/
void MaxSubSeq(int a[] , int n , int &left , int &right , int &answer){
// the start position is left and the end position is right. sum[leftrgiht] = answer
int previous , current , preBegin , preEnd , curBegin , curEnd;
previous = answer = a[0] ;
preBegin = preEnd = 0 ;
left = right = 0 ;
for(int i = 1 ; i < n ; ++ i){
if(previous < 0 ){
current = a[i] ; curBegin = curEnd = i ;
}else{
current = previous + a[i] ;
curBegin = preBegin ; curEnd = i ;
}
previous = current ;
preBegin = curBegin ;
preEnd = curEnd ;
if(answer < current ){
answer = current ;
left = curBegin ; right = curEnd ;
}
}
}