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框架、数据结构等。总体来说题目我个人而言还算是比较满意,虽然难度都不高,但是从笔试结果来看,做的并不是很好,题目简单但是也有区分度,想拿高分并不简单,里面的大多数知识都是一个项目所必须的,希望校招的同学们多多加强知识面的广度(笔试)和语言的深度(面试)。

原文地址:https://www.cnblogs.com/xwxz/p/14089854.html