2020校招面试之满帮

软件开发岗位,一共三轮面试,一面二面主要问技术,三面是HR面

很不幸一轮游

一面问题如下:

1、Java的集合有哪些,他们的区别是什么

2、计算机 络的 络分层结构以及TCP的三次握手协议

3、数据库中的事务以及事务的特性

4、数据结构中的链表的排序

5、说一下论文的情况

6、在写论文及实现算法的过程中有没有遇到什么困难

7、对JVM的了解

下面是解答:

1、Java的集合有哪些,他们的区别是什么

引用自:https://www.cnblogs.com/huangdabing/p/9249233.html

2、计算机 络的 络分层结构以及TCP的三次握手协议

https://www.jianshu.com/p/fd1ec252bff6

 

TCP的三次握手协议

三次握手的过程理解
tip: 每一次TCP连接都需要经过三个阶段:连接建立、数据传送和连接释放。三次握手就发生在连接建立阶段。
a) 第一次握手:建立连接时,客户端发送SYN包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;
b) 第二次握手:服务器收到SYN包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
c) 客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

TCP的四次挥手协议

四次挥手的过程理解
tips: 每一次TCP连接都需要经过三个阶段:连接建立、数据传送和连接释放。四次挥手就发生在连接释放阶段。
a) 第一次挥手:客户端发送一个 FIN 文, 文中会指定一个序列 。此时客户端处于FIN_WAIT1状态
b) 第二次握手:服务端收到 FIN 之后,会发送 ACK 文,且把客户端的序列 值 + 1 作为 ACK 文的序列 值,表明已经收到客户端的 文了,此时服务端处于 CLOSE_WAIT状态。
c) 第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发一个 FIN 文,且指定一个序列 。此时服务端处于 LAST_ACK 的状态。
d) 第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 文作为应答,且把服务端的序列 值 + 1 作为自己 ACK 文的序列 值,此时客户端处于 TIME_WAIT 状态。需要过一阵子以确保服务端收到自己的 ACK 文之后才会进入 CLOSED 状态

3、数据库中的事务以及事务的特性

定义:

事务就是一个对数据库操作的序列,是一个不可分割的工作单位,要不这个序列里面的操作全部执行,要不全部不执行。

特性(ACID):

原子性 (Atomicity) 一致性(Consistency) 隔离性(Isolation)持久性(Durability)

  • 原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。

  • 一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态,一致状态的含义是数据库中的数据应满足完整性约束。

  • 隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。

  • 持久性(Durability):已被提交的事务对数据库的修改应该永久保存在数据库中。

四种隔离级别

1)Read Uncommitted(读未提交)

一个事务在执行过程中,既可以访问其他事务未提交的新插入的数据,又可以访问未提交的修改数据。如果一个事务已经开始写数据,则另外一个事务不允许同时进行写操作,但允许其他事务读此行数据。此隔离级别可防止丢失更新。

2)Read Committed(读已提交)

一个事务在执行过程中,既可以访问其他事务成功提交的新插入的数据,又可以访问成功修改的数据。读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。此隔离级别可有效防止脏读。

3)Repeatable Read(可重复读取)

一个事务在执行过程中,可以访问其他事务成功提交的新插入的数据,但不可以访问成功修改的数据。读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。此隔离级别可有效防止不可重复读和脏读。

4)Serializable(可串行化)

提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,不能并发执行。此隔离级别可有效防止脏读、不可重复读和幻读。但这个级别可能导致大量的超时现象和锁竞争,在实际应用中很少使用。

一般来说,事务的隔离级别越高,越能保证数据库的完整性和一致性,但相对来说,隔离级别越高,对并发性能的影响也越大。因此,通常将数据库的隔离级别设置为 Read Committed,即读已提交数据,它既能防止脏读,又能有较好的并发性能。虽然这种隔离级别会导致不可重复读、幻读和第二类丢失更新这些并发问题,但可通过在应用程序中采用悲观锁和乐观锁加以控制。

如果不考虑事务的隔离性,会发生的几种问题:

在实际应用中,数据库中的数据是要被多个用户共同访问的,在多个用户同时操作相同的数据时,可能就会出现一些事务的并发问题,具体如下。

1)脏读

指一个事务读取到另一个事务未提交的数据。

2)不可重复读

指一个事务对同一行数据重复读取两次,但得到的结果不同。

3)虚读/幻读

指一个事务执行两次查询,但第二次查询的结果包含了第一次查询中未出现的数据。

4)丢失更新

指两个事务同时更新一行数据,后提交(或撤销)的事务将之前事务提交的数据覆盖了。

丢失更新可分为两类,分别是第一类丢失更新和第二类丢失更新。

  • 第一类丢失更新是指两个事务同时操作同一个数据时,当第一个事务撤销时,把已经提交的第二个事务的更新数据覆盖了,第二个事务就造成了数据丢失。
  • 第二类丢失更新是指当两个事务同时操作同一个数据时,第一个事务将修改结果成功提交后,对第二个事务已经提交的修改结果进行了覆盖,对第二个事务造成了数据丢失。

 

4、数据结构中的链表的排序

引用于:https://blog.csdn.net/qq_35644234/article/details/53222603

链表排序—最简单、直接的方式(直接采用冒泡或者选择排序,而且不是交换结点,只交换数据域)

 

5、说一下论文的情况

6、在写论文及实现算法的过程中有没有遇到什么困难

7、对JVM的了解

 

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年8月22日
下一篇 2019年8月22日

相关推荐