zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    查询数据库表的列字段、字段类型、字段长度、是否为空
    AndroidManifest.xml配置文件详解(转载)
    SQL Server Profiler(转载)
    sql 临时表
    sql 全局查询
    react.js
    middleware
    el
    jade模板使用心得
    jade template
  • 原文地址:https://www.cnblogs.com/dingshilei/p/4118186.html
Copyright © 2011-2022 走看看