首页 > 代码库 > 2015华数校招笔试详解

2015华数校招笔试详解

提示:试卷上的答案请忽略,以后续解答为准。

 

详细解答:

一、选择题

1、D

2、C  相联存储器是把存储单元所存内容的某一部分作为检索项(即关键字项),用来检索存储器,并读出或写入存储器中与该检索项相符的存储单元的内容。

3、C  DES是一种对称式加密算法,使用 16 个循环,使用异或,置换,代换,移位操作四种基本运算。

4、A   常见的对称加密算法有DES、3DES、Blowfish、IDEA、RC4、RC5、RC6和AES;常见的非对称加密算法有:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用);常见的Hash单向加密算法有MD2、MD4、MD5、HAVAL、SHA

5、C

6、A

7、A    因为是非剥夺式的,请求资源没有得到满足,则会进入阻塞状态。

8、B    由系统进程检查进程资源状态。

9、B    死锁的四个必要条件:

  (1) 互斥条件:一个资源每次只能被一个进程使用。
  (2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
  (3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
  (4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

     该策略破坏了其中的请求和保持条件。

10、D   概要设计就是系统设计的说明书,不需要每个模块的伪代码。

11、A    原型化方法是为了破除阶段性严格定义的方案,它向用户提供以界面为主导的解决方案,是一种自外向内的设计过程。

12、C

13、A    像星型,网型,总线型,环型这些拓扑结构对网速影响不大,不同点在于拓扑的可靠性和费用。

14、B    多数情况下,一个堡垒主机使用两块网卡,每个网卡连接不同的网络。一块网卡连接你公司的内部网络用来管理、控制和保护,而另一块连接另一个网络,通常是公网也就是Internet。

15、B     参考维基百科http://zh.wikipedia.org/zh/MPEG-4

16、B     124个叶结点的完全二叉树,最多的情况是1+2+4+8+16+32+64+120+1(可补一个左结点)=248

17、D     面向对象三大特征:封装、继承、多态。

18、A     继承的目的之一就是代码复用。

19、A     remove可直接删除该对象

20、D     x是static静态变量,存放在静态存储区中,无论直接访问和实例化访问,都是同一对象。

21、D     没有无参的默认构造函数。

22、C     String是final类型的不可变量,字符串数组是对对象的引用进行操作。

23、D     StringBuffer是可变的字符串类,operate方法接受的是StringBuffer对象引用的复制,原始引用并未改变(基本类型传递是值的复制,对象传递是引用的复制),方法运行完后该复制自动消失,打印的是原始引用的对象信息,这里对引用a的对象添加b,而引用b的对象不变。故结果为AB,B。

24、B     访问权限并不是为自己访问而设置的,大多是不同类之间的相互引用限制。

25、D     继承后,子类实例化是首先进入父类的无参构造方法。

二、数据库

26、MySQL分页可直接通过limit实现:select * from 表名 limit m,size;从m+1条查询size条记录。SQLServer可以使用Top和not in实现:select top 10 * from 表名 where 主键 not in(select top 10 主键 from 表名);--查询显示11-20条记录(10条)。

27、以下解析仅供参考,用join实现更好。

  (1) select * from J where CITY=‘南京‘;

    (2) select SPJ.SN from SPJ,J where SPJ.JN=J.JN and J.CITY=‘上海‘;

  (3) select SPJ.SN from SPJ,J,P where SPJ.JN=J.JN and SPJ.PN=P.PN and J.CITY=‘上海‘ or J.CITY=‘北京‘ and P.COLOR=‘红色‘;

  (4) select SPJ.PN from SPJ,J,S where SPJ.JN=J.JN and SPJ.SN=S.SN and J.CITY=S.CITY;

  (5) select distinct SPJ.JN from SPJ,J,S where SPJ.JN=J.JN and SPJ.SN=S.SN and J.CITY <> S.CITY;

  (6) select SPJ.JN from SPJ,S where SPJ.SN=S.SN and SPJ.QTY=0 and S.CITY=‘上海‘;

  (7) select S.CITY,J.CITY from SPJ,J,S where SPJ.JN=J.JN and SPJ.SN=S.SN;

三、Android题

28、Android四大组件:http://www.eoeandroid.com/thread-33435-1-1.html

  Activity:Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为保持各界面的状态,做很多持久化的事情,妥善管理生命周期以及一些跳转逻辑
  service:后台服务于Activity,封装有一个完整的功能逻辑实现,接受上层指令,完成相关的事务,定义好需要接受的Intent提供同步和异步的借口
  Content Provider:是Android提供的第三方应用数据的访问方案,可以派生Content Provider类,对外提供数据,可以像数据库一样进行选择排序,屏蔽内部数据的存储细节,向外提供统一的借口模型,大大简化上层应用,对数据的整合提供了更方便的途径
  BroadCast Receiver:接受一种或者多种Intent作触发事件,接受相关消息,做一些简单处理,转换成一条Notification,统一了Android的事件广播模型。

29、Android五大布局:http://mobile.51cto.com/android-229801.htm

四、Java题

30、常见的七种排序算法:快速、归并、堆、选择、冒泡、插入和希尔。

冒泡排序(稳定):

public static void bubbleSort(int[] a){    for(int i=a.length-1;i>0;i--)    {        for(int j=0;j<i;j++)         {            if(a[j]>a[j+1])            {                int temp=a[j];                a[j]=a[j+1];                a[j+1]=temp;            }        }    }}        

选择排序(不稳定):

    public static void selectSort(int[] a){        for(int i =0;i<a.length;i++)        {            int k = i;            for(int j =i+1;j<a.length;j++)            {                if(a[k]>a[j])                    k=j;            }            if(k!=i){                int temp = a[i];                a[i]=a[k];                a[k]=temp;            }        }     }

插入排序(稳定):在部分已排序的序列中使用插入排序可达到最少的比较次数。

public static void insertSort(int[] a){        for(int i =1;i<a.length;i++){            int temp = a[i];            int j;            for(j =i-1;j>=0&&temp<a[j];j--)                    a[j+1]=a[j];            a[j+1] = temp;        }
}

希尔排序(不稳定):

public static void shellSort(int[] a){        int gap = 0;        while(gap<=a.length){ //改进版insert排序,增加gap跨区域排序            gap = gap*3+1;        }        while(gap>0){            for(int i =gap;i<a.length;i+=gap){                int temp = a[i];                int j;                for(j =i-gap;j>=0&&temp<a[j];j-=gap){                    a[j+gap]=a[j];                }                a[j+gap] = temp;            }            gap = (gap-1)/3;        }}

快速排序(不稳定):

public static void quickSort(int[] a,int low,int high){        if(low >=high){            return;        }        int start = low;        int end = high;        int temp = a[low];        while(low<high){            while(low<high&&a[high]>temp){                high--;            }            a[low] = a[high];            while(low<high&&a[low]<temp){                low++;            }            a[high]=a[low];        }        a[low] = temp;        quickSort(a,start,low-1);        quickSort(a,low+1,end);    }

归并排序(稳定):

public static void mergeSort(int[] a,int start,int end){//分治法        if(start<end){            int mid = (start+end)/2;            mergeSort(a,start,mid); //递推排序            mergeSort(a,mid+1,end);            merge(a,start,mid,mid+1,end);        }    }    private static void merge(int[] a, int start, int mid, int i, int end) {        // TODO Auto-generated method stub        int m = start;        int temp[] = new int[end-start+1];        int k = 0;        while(start<=mid&&i<=end){            if(a[start]<a[i]){                temp[k++] = a[start++];            }else{                temp[k++] = a[i++];            }        }        while(start<=mid){            temp[k++] = a[start++];        }        while(i<=end){            temp[k++] = a[i++];        }        for(int element:temp){//将排好的数组替换以前的            a[m++] = element;        }    }

堆排序(不稳定):这个排序面试问的最多,务必要手写出来

public static void heapSort(int[] a){        createMaxHeap(a);        for(int i=a.length-1;i>0;i--){            int temp = a[0];            a[0]=a[i];            a[i]=temp;            maxHeap(a,1,i);        }    }    private static void createMaxHeap(int[] a) {        // TODO Auto-generated method stub        int startNode = a.length/2;         for(int i = startNode;i>0;i--){            maxHeap(a,i,a.length);        }    }    private static void maxHeap(int[] a, int startNode, int length) {        // TODO Auto-generated method stub        int leftNode = 2*startNode;        int rightNode = 2*startNode+1;        int maxNode = startNode;        if(leftNode<=length&&a[leftNode-1]>a[startNode-1]){//只考虑length以内的家族,数组与节点相差1            maxNode = leftNode;        }        if(rightNode<=length&&a[rightNode-1]>a[maxNode-1]){            maxNode = rightNode;        }        if(maxNode!=startNode){            int temp = a[maxNode-1];            a[maxNode-1]=a[startNode-1];            a[startNode-1]=temp;            maxHeap(a,maxNode,length);//调整交换后的最大值对其孩子的影响        }    }

31、JDBC数据库查询的步骤:参考http://www.cnblogs.com/hongten/archive/2011/03/29/1998311.html

 try{       //加载MySql的驱动类       Class.forName("sun.jbdc.odbc.jdbcOdbcDriver") ;    }catch(ClassNotFoundException e){       System.out.println("找不到驱动程序类 ,加载驱动失败!");       e.printStackTrace() ;    }        //连接MySql数据库,用户名和密码都是root    String url = "jdbc:odbc:people" ;     String username = "root" ;    String password = "root" ;    try{       Connection con =                 DriverManager.getConnection(url , username , password ) ;    }catch(SQLException se){       System.out.println("数据库连接失败!");       se.printStackTrace() ;   }  Statement stmt = con.createStatement() ;   ResultSet rs = stmt.executeQuery("SELECT * FROM Staff where ID=‘001‘") ;while(rs.next()){           String name = rs.getString("name") ;           String name1 = rs.getString(1) ; // or此方法比较高效  }if(rs != null){   // 关闭记录集           try{               rs.close() ;           }catch(SQLException e){               e.printStackTrace() ;           }   }   if(stmt != null){   // 关闭声明           try{               stmt.close() ;           }catch(SQLException e){               e.printStackTrace() ;           }    }   if(con != null){  // 关闭连接对象            try{               con.close() ;            }catch(SQLException e){               e.printStackTrace() ;            }   }          

32、面向对象三要素:封装、继承、多态

  封装:就是用一个自主式框架把对象的数据和方法连在一起形成一个整体。对象是封装的基本单位,相互之间通过接口访问。目的是隐藏细节,代码模块化。

  继承:子类拥有父类非private的属性和功能,通过继承的代码复用是一种“白盒式代码复用”,重写和覆盖会破坏封装性。目的是扩展代码模块,实现代码复用。

  多态:允许父类声明指向子类对象。即同一方法获得不同的行为特征(重载和覆盖)。目的是接口重用,是面向对象的核心。

2015华数校招笔试详解