初级后端工程师面试题记录

本文章记录我面试时被问到的问题。(持续更新)

面试题目集锦

1.线程与进程的区别

a.进程是资源分配的最小单位,线程是程序执行的最小单位
b.进程间不共享数据,线程共享进程所有的数据,因此要注意多线程数据读写问题

2.TCP的3次握手和4次挥手

3.TCP和UDP的区别

4.100万大小的数组选出最大的100个数

5.如何理解数据库事务

数据库事务有4个重要的特性ACID,分别是:
1.原子性.事务的所有操作要么所有执行,要么不执行(不commit或者直接rollback)
2.一致性.系统从一个正确状态到另一个正确状态.
3.隔离性。多个并发事务要相互隔离。
4.持久性。一旦发生改变会永远改变数据库内容。
隔离性存在3个问题
1.脏读。(read uncommit)
2.不可重复读(read commited).
3.幻读(repeated read)[一般是统计时,连续两次读取数据,后者多出了一个数据]{insert有关}

6.TCP如何保证数据完全传输

1.重传机制(超时重传,快速重传)
2.对答机制
3.流量控制机制
4.通过校验和检验是否数据发生破坏

7.TCP基本基础

1.建立连接:
基本的标识包有3个,分别是SYN,ACK,FIN,ACK与SYN,FIN同时使用,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应.
如果只是单个的一个SYN,它表示的只是建立连接。

三次握手
1.client属于close状态,此时发送数据包(syn=1,syn seq=x)到server,client进入SYN_SENT状态
2.server处于listen状态,此时收到数据包,进入SYN_RECV状态,发送数据包(syn=1, ack=1, ack seq=x+1, syn seq = y)到client
3.client接收到数据包,发送数据包(syn=1, ack seq=y+1, ack=1)到server,client进入ESTABLISHED状态
4.server接收到数据包,进入ESTABLISHED状态

假如某个包丢失了?
1.假如步骤1的包丢失了,client会不断重传,直到收到server的包(步骤2发的包)为止。
2.假如步骤2的包丢失了:
a.client因为没收到步骤1的包的确认包,client会重传。server收到会重传
b.server有重传机制,超时自己也会重传这个包。
3.假如步骤3的包丢失了:
a.client会单方面进入ESTABLISHED状态,server依然是SYN_RECV状态
b.server没有收到包,会超时重传,client即使在ESTABLISHED状态收到该包,会发送确认包到server,server收到后进入ESTABLISHED状态,双方可以发数据
c.假如client要发数据,client的数据包会包括确认包的内容,server收到后自动进入ESTABLISHED状态.

四次挥手

初级后端工程师面试题记录_第1张图片
avatar

TCP流量控制

你可能感兴趣的:(初级后端工程师面试题记录)