首页 > 代码库 > 2015PPTV校招笔试详解
2015PPTV校招笔试详解
详细解答:
一、选择题
1、A 至少摸出2黑球=2黑球(5*3/56)+3黑球(1/56)=2/7.
2、B log2(32)=5。PS:若是长度大于32,则最多比较次数为6.
3、D 后缀表达式又称逆波兰表达式,特征是运算符在运算对象之后,排序ABC选项。也可以利用栈来将中缀表达式转换为后缀表达式。http://blog.csdn.net/mvpsendoh/article/details/6440559
4、C 节点数n<=2k-1(完全二叉树)=〉k>=log2(n+1)=〉k最小为11.
5、A B选项实现方案:a,b,c依次入栈,d,e直接过,a,b,c出栈。C选项实现方案:a,b,c,d,e依次入栈再出栈。D选项实现方案:a,b,c,d,e直接通过。
6、D 提高CPU的时钟频率,即提高了CPU的执行速度,显然是可以缩短程序的执行时间的。在计算机系统中,各个子系统通过数据总线连接形成的数据传送路径称为数据通路。优化数据通路结构,可以有效提高计算机系统的吞吐量,从而加快程序的执行。对程序进行编译优化,可以提高程序的执行效率,也可以实现缩短程序的执行时间。
7、D 此题关键点在static静态变量,在第二次运行fun时j值不会归0.
8、B 最小测试用例计算有2个标准:(1)如果在N-S图中不存在有并列的层次,则对应的最少测试用例数由并列的操作数决定,即N-S图中除谓词之外的操作框的个数。(2)如果在N-S图中存在有并列的层次A1、A2,A1和A2的最少测试用例个数分别为a1、a2,则由 A1、A2 两层所组合的 N-S图对应的最少测试用例数为a1×a2。图中1234567与89并列,2345又与67并列。则最小测试用例个数为(1+(5*3))*3=48.
9、A 注意重载由于多态的缘故对返回值不做要求。即仅改动返回值不是重载。
10、D 路由器使用统一的IP 协议,而结点交换机使用所在广域网的特定协议。
二、编程题
1、 作用:ARP协议是地址解析协议的缩写,所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。
原理:在每台安装有TCP/IP协议的电脑或路由器裡都有一个ARP cache表,表里的IP地址与MAC地址是一对应的。在构造网络数据包时,首先从ARP cache表中找目标IP对应的MAC地址,如果找不到,就发一个ARP request广播包,请求具有该IP地址的主机报告它的MAC地址,当收到目标IP所有者的ARP reply后,更新ARP cache表,并利用此信息开始数据的传输。
ARP欺骗的运作原理是由攻击者发送假的ARP数据包到网络上,尤其是送到网关上。其目的是要让送至特定的IP地址的流量被错误送到攻击者所取代的地方。 因此攻击者可将这些流量另行转送到真正的闸道或篡改后再转送。攻击者亦可将ARP数据包导到不存在的MAC地址以达到阻断服务攻击的效果。
2、转置矩阵的实现:设a为原始二维数组,则转置后的矩阵b[i][j]=a[col-1-j][i],其中col是列数。
public static void matrixTrans(int[][] a) { int row = a.length; int col = a[0].length; for(int i=0;i<row;i++){ for(int j=0;j<col;j++) System.out.print(a[col-1-j][i]+" "); System.out.println(); } }
3、利用栈来检测括号的匹配,并使用StringBuffer重组字符串。
public static String delBrackets(String s) { if(s==null) return null; StringBuffer sb = new StringBuffer(); Stack<Character> stack = new Stack<Character>(); for(int i=0;i<s.length();i++){ char c = s.charAt(i); if(c==‘(‘) //若是左括号,直接压栈 stack.push(c); else if(c==‘)‘) if(!stack.isEmpty()&&stack.pop()==‘(‘) //若是右括号,则判断栈是否为空以及栈顶元素 continue; else return "error"; else sb.append(c); //非括号加入StringBuffer中 } if(stack.isEmpty()) //判断栈中是否还有‘(‘ return sb.toString(); else return "error"; }
4、 典型Top k的海量数据处理问题,解决方案一般是:分治+trie树/hash+小顶堆。即先将数据集按照hash方法分解成多个小数据集,然后使用trie树或者hash统计每个小数据集中的query词频,之后用小顶堆求出每个数据集中出频率最高的前K个数,最后在所有top K中求出最终的top K。
此题内存只有2G,无法存放1T的数据集,需要进行hash(x)%1000分解成1000个小数据集,再对每个数据集进行HashMap统计每个词出现的频率,四核CPU可进行多线程并行计算,加快统计效率。先通过建立维护最小堆的方式找出每个小数据集的Top 100(先读取前100个数搭建最小堆,然后扫描后面的数据,并与堆顶元素比较,如果比堆顶元素大,那么用该元素替换堆顶,然后再调整为最小堆。最后堆中的元素就是Top 100,复杂度为O(n*log100)),最后再将结果归并。
海量数据处理题可参考:http://blog.csdn.net/v_july_v/article/details/7382693
代码实现(最小堆+多路归并):http://blog.csdn.net/jj8582/article/details/6890521
5、 求最长回文子串的长度有一个神奇的算法manacher,将所有可能的奇数/偶数长度的回文子串都转换成了奇数长度:在每个字符的两边都插入一个特殊的符号。比如 abba 变成 #a#b#b#a#, aba变成 #a#b#a#,再利用动态规划的缓存原理实现,时间复杂度为O(n)。具体实现过程参考:http://blog.sina.com.cn/s/blog_3fe961ae0101iwc2.html
2015PPTV校招笔试详解