今天刚参加完京东的笔试,题目基本与这个类似,拍了照片后上传2013年的笔试题, 现在先放上去年2012年京东商城软件开发校园招聘B卷,供大家参考讨论 第一部分 数据结构与算法 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 WHEREpid=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/65706.htm 2.死锁是指【两个或两个以上的进程 】在执行过程中,因争夺资源二造成的一种【互相等待 】现象,若无外力作用,它们将无法推进下去。内存中造成死锁的原因有【可剥夺资源和不可剥夺资源】,【竞争不可剥夺资源】,【竞争临时资源】。 参考资料:http://baike.baidu.com/view/121723.htm 3.ISO网络模型图与TCP/IP网络模型图对应关系为 【应用层】,【表示层】,【会话层】对应【应用层】 【传输层】对应【传输层】 【网络层】对应【网际层】 【数据链路层】【物理层】对应【网络接口】 4.你所见过的最大影子是【月亮的影子】。 5.京东商城的商品搜索功能是整个网站架构中非常重要的一个模块。当用户在搜索栏中写入他们想要搜索的关键字时,往往会有一些热门的关键词出现在提示框中。对于这一功能的实现,你认为需要: 1.用户输入一些关键字查询时,将用户的相关信息(ip,cookie,keyword,usernameetc.),暂时存储。(临时对象,临时文件等等)。 2.定时从暂时缓存处,一次行读取,写入到数据库中。 3.记录下来关键字后,需要定时从数据库中提取出来。 4.数据库存储建议采用Oracle,因为这个数据量会增加很快,且很大。最好采用分表处理。 5.定时生成相关关键字页面,可以与定时关键字写入数据库放在一起。 由于关键词的存储量非常大,在你看来这么关键词该: 需要将用户关键字记录表分解处理.即每个月的第一天的零点生成一个新的数据库表,名字(user_key_200604),名字后面的数字是年月(六位数字)。用户每次查询时,记录到当月的记录表中,(以后提供的用户的查询日志,默认只提供当月的查询记录)。 第五部分 选答题(任选一题作答,使用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) /* dp = max(dp[i-1]+a ,a); Time O(n) Space O(n) void MaxSubSeq(int a[] , int n , int &left , int &right , int &answer){ // the start positionis left and the end position is right. sum[left rgiht]= 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 ; curBegin = curEnd = i ; }else{ current = previous + a ; curBegin = preBegin ; curEnd = i ; } previous = current ; preBegin = curBegin ; preEnd = curEnd ; if(answer <current ){ answer = current ; left = curBegin ; right = curEnd ; } }} |
[技术| 编程·课件·Linux] 2012年京东商城软件开发校园招聘B卷
service
· 发布于 2012-09-24 23:45
· 1910 次阅读
转载文章时务必注明原作者及原始链接,并注明「发表于 软院网 RuanYuan.Net 」,并不得对作品进行修改。
楼主什么时候发今年的啊 ~ 啊哈哈哈哈哈 |