zoukankan      html  css  js  c++  java
  • Java校招笔试题

    2020校招笔试题答案及评分标准

    满分100分 时间1小时

    一、简答题:

    1. (5分)写出你用过的linux命令,举例说明其中几个的具体用法。

    答案:略。评分标准:正确五个,1分一个。

    1. (5分)写出TCP的三次握手和四次握手的过程。
    **三次握手:**
    
    简而言之:
    
    1、客户端向服务端发出连接请求,等待服务确认。
    
    2、服务端收到请求,并发确认连接信息
    
    3、客户端收到服务端确认连接信息,建立连接。
    
    **四次握手:**
    
    简而言之:
    
    1、客户端发出断开连接请求
    
    2、服务端收到请求,向客户端发“收到断开请求”的确认信息
    
    3、服务端确认无数据发送后,向客户端发出“关闭连接”
    
    4、客户端收到“关闭连接”,发送“断开确认”,断开TCP连接
    
    三次握手详细描述:
    
    (1)第一次握手:客户端将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给服务端,客户端进入SYN_SENT状态,等待服务端确认。
    
    (2)第二次握手:服务端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务端将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值
    seq=K,并将该数据包发送给客户端以确认连接请求,服务端进入SYN_RCVD状态。
    
    (3)第三次握手:客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务端,
    服务端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务端进入ESTABLISHED状态,完成三次握手,随后客户端与服务端
    之间可以开始传输数据了。
    
    四次握手详细描述:
    
    由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,
    收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。
    首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。
    
    (1)第一次挥手:客户端发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态。
    
    (2)第二次挥手:服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入
    CLOSE_WAIT状态。
    
    (3)第三次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态。
    
    (4)第四次挥手:客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个ACK给服务端,确认序号为收到序号+1,服务端进入CLOSED
    状态,完成四次挥手。
    
    1. (10分)编写程序将一个句子按单词反序。比如“the sky is blue”,反序后变为“blue is sky the”?
    思路:1、写一个字符串翻转函数,先对整个字符串翻转,然后将它以空格切分为字符数组,再对每一个字符串翻转。
    
         2、切分成字符串数组,全部压栈,然后出栈即可
    
    1. (10分)一张学生成绩表score,部分内容如下:

    ​ name course grade

    ​ 张三 操作系统 67

    ​ 张三 数据结构 86

    ​ 李四 软件工程 89

    ​ 用一条SQL 语句查询出每门课都大于80 分的学生姓名。

    Select distinct name from score where name not in(Select name from score where grade <= 80);
    
    思路:首先查询成绩低于80分以下的人,然后只要是姓名没有在这80分以下的人里面,那么他的所有科目都是80分以上。distinct表示去除重复记录。
    

    5.(10分)接口和抽象类的区别是什么?

    评分标准:写出正确三个区别,每个3分,三个都正确10分。
    
    接口和抽象类的区别:
    
    1、  接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。
    
    2、  类可以实现很多个接口,但是只能继承一个抽象类
    
    3、  类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
    
    4、  抽象类可以在不提供接口方法实现的情况下实现接口。
    
    5、  Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。
    
    6、  Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。
    
    7、  接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。
    
    
    
    1. (15分)集合类用过哪些,分别列举出来,并指出它们各自使用了那些数据结构。
    评分标准:写出正确三个,每个5分
    
    1. (15分)Spring的IOC和AOP是什么?Spring有哪些优点,谈谈你对spring的理解。
    IOC就是控制反转,是指创建对象的控制权的转移,以前创建对象的主动权和时机是由自己把控的,而现在这种权力转移到Spring容器中
    ,并由容器根据配置文件去创建实例和管理各个实例之间的依赖关系,对象与对象之间松散耦合,也利于功能的复用。DI依赖注入,和控
    制反转是同一个概念的不同角度的描述,即 应用程序在运行时依赖IoC容器来动态注入对象需要的外部资源。
    
    AOP,一般称为面向切面,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装
    为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维
    护性。可用于权限认证、日志、事务处理。
    
     
    
    优点:
    
    (1)spring属于低侵入式设计,代码的污染极低;
    
    (2)spring的DI机制将对象之间的依赖关系交由框架处理,减低组件的耦合性;
    
    (3)spring提供了AOP技术,支持将一些通用任务,如安全、事务、日志、权限等进行集中式管理,从而提供更好的复用。
    
    (4)spring对于主流的应用框架提供了集成支持。
    
    
    
    评分标准:三个问题,每个5分
    

    二、 编程题:

    1、(15分)实现一个栈,包含栈的基本操作(pop、push、top、size)。

    送分题 评分标准:pop push top 每个4分,size3分。
    

    2、(15分)给定一个无序数组arr,找到数组中未出现的最小正整数

    ​ 例如arr = [-1, 2, -3, 4]。返回1

    ​ arr = [1, 2, 3, 4]。返回5

    ​ [要求]

    ​ 时间复杂度尽可能的低。

    一般思路1:因为题目找最小正整数,设置一个temp=1,然后遍历数组,若出现与temp相同的则temp++,并且从头开始遍历,
    遍历结束还没有出现.则temp就是要找的数字。
    
    
    
    一般思路2:排序。
    
     
    
    最优思路3:原地哈希,把数组中取值在1到n的数放到对应的位置,比如1放到0的位置,2放到1的位置,……n放到n-1的位置,
    然后遍历重置后的数组,若i下标位置不是i+1,则i+1就是那个最小的正整数,若1到n位置都对的上,说明最小的正整数是n+1。
    参考代码:
    
        public static int minNumberdisappered (int[] arr) {
            int n=arr.length;
            //原地hash
            for(int i=0;i<n;i++){
                //i为下标, 主要是排1到n这个区间范围内的数据,其他超出区间的值一概不管,被替换也没关系
                while(arr[i]>=1 && arr[i]<=n && arr[arr[i]-1]!=arr[i]){
                    swap(arr,arr[i]-1,i);
                }
                //当前数组值
                for(int j=0;j<n;j++) System.out.print(arr[j]+" ");
            }
            //遍历答案
            for(int i=0;i<n;i++){
                if(arr[i]!=i+1){
                    return i+1;
                }
            }
            return n+1;
        }
        private static void swap(int[] arr,int i,int j){
            int temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
        }
    

    总结:
    很荣幸的作为本次校招的出题人和阅卷人之一,考虑到校招大学生的基础水平,题目出的不是很难,但是包含面比较广泛,包括了Linux、计算机网络、Java字符串处理、SQL语言、Java基础知识
    、Spring框架、数据结构等。总体来说题目我个人而言还算是比较满意,虽然难度都不高,但是从笔试结果来看,做的并不是很好,题目简单但是也有区分度,想拿高分并不简单,里面的大多数知识都是一个项目所必须的,希望校招的同学们多多加强知识面的广度(笔试)和语言的深度(面试)。

  • 相关阅读:
    eclipse折叠快捷键
    ubuntu下忘记用户名和密码的解决办法
    ubuntu屏幕分辨率问题
    CentOS 5.X安装LAMP最高版本环境
    CentOS 6.X安装LAMP最高版本环境
    Shell脚本升级CentOS php版本v
    运行yum报错Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
    批处理测试局域网网络连通性ping1-255
    批处理cmd背景颜色
    CentOS6.4安装LAMP环境
  • 原文地址:https://www.cnblogs.com/xwxz/p/14089854.html
Copyright © 2011-2022 走看看