java校招笔试题⽬_Java校招笔试题
2020校招笔试题答案及评分标准
满分100分 时间1⼩时
⼀、简答题:
(5分)写出你⽤过的linux命令,举例说明其中⼏个的具体⽤法。
答案:略。评分标准:正确五个,1分⼀个。
java面试题及答案2020(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
状态,完成四次挥⼿。
(10分)编写程序将⼀个句⼦按单词反序。⽐如“the sky is blue”,反序后变为“blue is sky the”?
思路:1、写⼀个字符串翻转函数,先对整个字符串翻转,然后将它以空格切分为字符数组,再对每⼀个字符串翻转。
2、切分成字符串数组,全部压栈,然后出栈即可
(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⽅法的话是可以被调⽤的。
(15分)集合类⽤过哪些,分别列举出来,并指出它们各⾃使⽤了那些数据结构。
评分标准:写出正确三个,每个5分
(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
//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
}
//遍历答案
for(int i=0;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框架、数据结构等。总体来说题⽬我个⼈⽽⾔还算是⽐较满意,虽然难度都不⾼,但是从笔试结果来看,做的并不是很好,题⽬简单但是也有区分度,想拿⾼分并不简单,⾥⾯的⼤多数知识都是⼀个项⽬所必须的,希望校招的同学们多多加强知识⾯的⼴度(笔试)和语⾔的深度(⾯试)。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论