2012年京东商城软件开发校园招聘

声明:本文版权归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 3062

B. 11 22 33 45 5771

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 ; 
        }  
    }
}


posted on 2012-08-29 20:59 IronOxide 阅读(367) 评论(0)  编辑 收藏 引用 所属分类: 公司笔试


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2010年8月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

常用链接

留言簿

随笔分类

随笔档案

ACMer

方向

搜索

最新评论

阅读排行榜

评论排行榜