您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 商业计划书 > 百度PHPJSP职位在线笔试真题详解
1、请写一个程序,随机打印“0”、“1”、“2”,但保证“0”、“1”、“2”出现的概率是可配置的,例如2:1:3。2、有一个基于数据库的通知发布系统,需要能够灵活配置通知生效的时间:a)可以设置在某几个小时内生效,如指定2046年12月24日18时到25日0时生效b)可以设置在一周的某几天发布,如可以设置周六、周日生效c)可以设置一月的某几天生效,如可以设置5号、6号生效d)可以设置某一月的奇数日或者偶数日生效,如1、3、5号生效请设计数据库表结构,并简要说明设计思路。3、为某图书馆开发在线浏览系统,使用户可以通过自定义的图书别名浏览相关联的图书内容。假设该图书馆有1000万注册用户,馆藏图书1000万部。在线浏览系统允许用户自定义分类名称,每个分类可以包含若干部书籍。用户可以添加、删除分类,修改分类的名称(同一用户不允许有名称相同的分类),可以在分类下添加、删除书籍,修改书籍的别名(同一分类下不允许有名称相同的别名)。现在设定每个用户最多可以自定义100个分类,每个分类最多可以包含100部书籍。A、假定用数据库解决存储问题,请设计相关的数据表结构,并给出设计考虑。B、请给出下列操作的SQL语句展示用户A的所有分类展示用户A所设置的分类F下的所有书籍信息C、请根据题目A的结果,尝试分析一下当用户数目增长到1亿,馆藏图书达到10亿册,每天访问用户达到500万,平均每人有10次操作时,系统应当做哪些改进或优化。注1:假定用户表、书籍表已经存在,且用户表中包含用户ID等必要信息,书籍表中包含书籍名称、作者等必要信息注2:图书别名是用户对某部图书自定义的名称。在不同的分类中,相同的别名可能对应不同的书籍4、一个数据文件,每条记录内容包括:时间、IP地址、关键词。记录是无序排列的,条数超过2000万条。要求对该数据文件按检索词的顺序进行排序,并保持时间、IP地址和关键词的关联关系。请设计一个程序,实现上述功能,并分析时间复杂度和空间复杂度。运行程序所使用的服务器的内存为1G,硬盘足够大。(至少要给出关键算法和设计思路)第一题.专家解答packageedu.ruc.ydl;importjava.util.*;publicclassRandomNumbers{intfirstProbability;intsecondProbability;intthirdProbability;publicvoidconfigProbability(intfirstProbability,intsecondProbability,intthirdProbability)//配置出现概率比{this.firstProbability=firstProbability;this.secondProbability=secondProbability;this.thirdProbability=thirdProbability;}publicintgetRandom()//随机输出录入的数字如(0,1,2){Randomram=newRandom();inttempRamdom=ram.nextInt(firstProbability+secondProbability+thirdProbability);if(tempRamdom=0&&tempRamdomfirstProbability)return0;elseif(tempRamdom=firstProbability&&tempRamdomsecondProbability)return1;elsereturn2;}publicstaticvoidmain(String[]args)//main{RandomNumbersrandomNumbers=newRandomNumbers();randomNumbers.configProbability(2,1,3);System.out.println(randomNumbers.getRandom());}}第二题.专家解答表名:Publish字段名类型缺省值中文含义约束备注idInt0编号PRItitleVarchar(30)发布内容的标题contentVarchar(50)发布的内容timeVarchar(200)dayVarchar(200)dateVarchar(200)pdoubleint01表示奇数,2表示偶数奇偶日choiceInt0表示选择以上哪几种组合Publish表由下列字段组成Publish_id发布内容的唯一标识;Publish_title发布内容的标题Publish_content发布的内容......其他与内容相关的字段/*下列字段用于控制*/Publish_time有效时间段,由时间型和|构成的字符串,默认为'1975-1-112:00:00|3000-1-112:00:00')Publish_day(表示周几,int,2^0=1表示周一,2^1=2表示周二,2^2=4表示周三,......2^7=128表示星期天,0为默认),Publish_date(表示日期,由1-31构成并用|分开的字符串,‘0’为默认,如2|5|15|31),Publish_double(表选择奇偶日,int,1表示奇数,2表示偶数,0为默认)Publish_choice(表示选择以上哪几种组合,int,2^0=1表示采用第一种控制,2^2表示采用第二种控制...)设计思路:1,要满足以上四个要求并能够让以上要求任意组合,可以选4个独立的表来存储不同的要求,也可以用4个字段来存储以上四个要求;选择4个不同的表来控制,表中的数据满足数据原子性的要求,但如果这样,发布一条内容需要连接4个表来查询,查询效率低,所以我选择采取4个拼凑字段来进行控制;这样的话,我们可以将数据字段和控制字段整合到一条记录中,查询数据的同时可以查询出控制字段,尽管这样需要在程序中分割字符串;所以我采用(Publish_timePublish_dayPublish_datechoice)4个字段来表示,另外再采用Publish_choice表示选取哪种控制。2,Publish_time采用时间型和|构成的字符串,如2002-1-110:20|2002-1-112:20|2007-2-208:20|2007-2-212:20.程序读取的时候先把该字符串用|分开到一个数组a,其中a[0]表示开始时间,a[1]表示a[0]的结束时间,其中a[2]表示开始时间,a[3]表示a[2]的结束时间......;这样便可以满足一条内容在多个时间串内有效。3,Publish_day为了提高效率,采用二进制位的方法控制,即2^0=1表示周一,2^1=2表示周二,2^2=4表示周三,......2^7=128表示星期天。如果周一周二周三同时有效,则Publish_day=2^0+2^1+2^2=7,这样的设计比拼凑字符串效率要高,程序设计更简单。4,Publish_date如果像Publish_day一样采用二进制位的方法控制,将达到2^31,数据太大,有些数据类型可能不支持,所以采用|分开的字符串,‘0’为默认,如2|5|15|31),程序读取采用|分开到一个数组,再操作数组。5,Publish_double选择奇偶日情况只有两种,非奇即偶,用1表示奇数,2表示偶数6,为了加强控制,另外再设一个字段Publish_choice表示采取上叙哪些控制的组合;原理如3,都采用二进制位表示。7,为了防止程序读取null的时候出错,对每个字段都采用了默认值。第三题.专家解答A数据库表设计表名:t_book(书籍表)字段名类型缺省值中文含义约束备注idInt0书籍编号PRINameVarchar(30)书籍名称AuthorVarchar(20)书籍作者其他字段略,根据需要添加表名:t_user(用户表)字段名类型缺省值中文含义约束备注idInt0用户编号PRINameVarchar(20)用户姓名其他字段略,根据需要添加表名:t_user_sort(用户自定义分类表)字段名类型缺省值中文含义约束备注IdInt分类编号PRIAuto_incrementNameVarchar(30)分类名称user_idint分类所属的用户ID外键表名:t_mapping_sort_book(书籍分类匹配表)字段名类型缺省值中文含义约束备注Book_idInt书籍编号PRI外键Sort_idint分类编号PRI外键bynameVarchar(30)书籍别名B.相关SQL语句用户A的所有分类Selectt_user_sort.namefromt_user_sort,t_userwheret_user_sort.user_id=t_user.idandt_user.name=’A’查出来一列,是用户A自己定义的分类名称Selectt_book.namefromt_book,t_user_sort,t_mapping_sort_bookwheret_user_sort.id=t_mapping_sort_book.sort_idandt_user_sort.user_id=t_user.idandt_user.name=’A’andt_user_sort.name=’F’说明:按我们的设计,指定分类F就能查询其下书籍信息了,但是限制了用户A,可能A并没有建F,所以三个表连接查询,可以排除这个情况C.问题分析:用户数1亿,每个最多可建100个分类,考虑极端情况,表t_user_sort数据两将达到100亿,这个表参与连接查询,代价很高。图书数10亿,表t_book数据两将达到10亿,这个表参与连接查询,代价也很高。面临应用的特征分析:一、1亿用户中,存在部分用户是活跃的,部分用户是不活跃的。二、10亿图书中,存在部分图书是受欢迎的,部分图书是不受欢迎的。三、把所有分类信息放在一个表中,这个集合自身意义并不大,我们更关心的某个用户拥有哪些分类。四、书籍分类匹配表的设计,体现了关系数据库的特点,但实际应用中,我们关心的是特定分类下的图书信息及其别名解决方案:(一)数据库设计的改进一、考虑用户增加分类时,需要在t_user_sort表查询用户已经建立了多少分类,代价较高,故考虑给t_user加上“sort_count”字段(分类数),用程序保证完整性,改进后,查询用户已经建立的分类数的代价降低了。二、考虑某分类增加书籍时,需要在t_mapping_sort_book表查询该分类已经添加了多少书籍,代价较高,故考虑给t_user_sort加上“book_count”字段(书籍数),用程序保证完整性,改进后,查询分类已经添加的书籍数的代价降低了。数据库改进的主要思路就是引入冗余,用空间换时间,可以再根据具体应用需求,做相应的冗余。(二)系统设计的改进针对上述“面临应用的特征分析”中的四条,做相应改进一、针对用户的活跃状况,我们引入缓存机制,具体缓存方案是:T_user一般不参加连接查询,如果需要其中的记录信息,根据主键查询,查询时即做缓存,下次有查询需求,先看缓存中有没有对应信息,如果有,则直接使用缓存中的信息,如果没有,则查询书库库,并做缓存。注:如果缓存量过大,可以考虑将缓存内容静态到外存中,对于缓存中的数据,也可以引入“长期不用则去除”的机制。二、针对书籍的受欢迎程度状况,类似的,我们引入缓存机制,具体缓存方案是参照一。三、把每个用户拥有的分类信息,静态化到外存中,比如采用xml文件,用户查询自己的分类时,只需读取外存中的信息就可以了。需要程序保证外存和数据库信息的一致性。四、类似的,解决方案参看三。第四题.专家解答分析:这是一个典型的外部排序问题。因为我们要排序的数量达2000万条,在内存只有1G的情况下,无法进行内部排序。设计思路:首先,将2000万条记录分成1000个子文件存储在硬盘上(硬盘足够大)。然后,根据可用内存的大小,将自文件依次读入内存并利用有效的内部排序方法(冒泡法)根据检索词对它们进行排序,并将排
本文标题:百度PHPJSP职位在线笔试真题详解
链接地址:https://www.777doc.com/doc-2262688 .html