字节实习二面

网络体系结构分层(7、5、4)

答:

OSI七层网络体系结构:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

TCP/IP四层网络体系结构:物理层、网际层、传输层、应用层

TCP/IP五层网络体系结构:物理层、数据链路层、网络层、传输层、应用层

TCP、UDP协议属于哪一层,HTTP、HTTPS呢

TCP、UDP属于传输层的协议

HTTP、HTTPS属于应用层

TCP三次握手和四次挥手

三次握手:

  1. 客户端向服务端发起一个SYN包,其中携带有客户端生成的随机编号X
  2. 服务端接受到客户端的SYN包后会返回一个ACK确认包(X+1),同时返回一个SYN的包,服务端生成的自己的随机编号Y
  3. 客户端接收到服务端的ACK后随即返回一个ACK确认包(Y+1),随即客户端进入链接建立成功状态,服务端在接收到ACK包后随即进入链接成功状态

四次挥手:

  1. 当客户端向服务端发送的数据完成后客户端会主动请求断开链接,此时客户端会发送一个FIN包表明需要断开客户端向服务端的数据传输通道
  2. 服务端接收到FIN包后返回一个ACK包,表明知道客户端准备断开向服务端的数据传输
  3. 客户端接收到ACK包后随即断开向服务端的数据传输
  4. 服务端向客户端传输的数据发送完毕后,主动向客户端发送一个FIN包,表明服务端也将断开链接
  5. 客户端接收到后返回一个ACK包随即进入time_wait状态,服务端接收到ACK确认包后即断开
  6. 如果在time_wait时间内客户端没有再接收到数据,则客户端也进入断开链接的状态

HTTP和HTTPS区别

  • HTTP是明文传输的,HTTPS是基于SSL协议实现的对数据加密传输形式的HTTP。

  • HTTP默认使用80端口,HTTPS默认使用443端口

  • HTTP传输效率比较高,HTTPS传输效率较低

  • HTTP安全性较低,HTTPS安全性较高

  • HTTP不需要证书,HTTPS需要额外证书

HTTPS加密流程

  • 浏览器将自身支持的对称加密协议发送给服务端
  • 服务端接选出自身同样支持的对称加密协议,并且将自己的非对称加密的公钥一起返回
  • 客户端生成该对称加密协议的密钥,使用服务端的公钥进行加密并返回服务端
  • 服务端使用私钥进行解密,获得对称加密的密钥
  • 随后双方使用对称加密进行数据加解密

进程和线程区别

  • 进程是操作系统中资源分配的最小单位,线程是操作系统中CPU调度执行的最小单位
  • 线程属于进程
  • 线程与线程之间的数据共享是很容易的,进程与进程之间的数据共享比较困难
  • 一个线程崩溃后很容易影响到其他线程,进程崩溃后很难影响到其他进程

进程的状态及状态切换

进程的状态主要有:创建态、就绪态、运行态、阻塞态、挂起态

就绪态➡运行态:进程获得CPU的执行权

运行态➡就绪态:进程时间片到时间释放掉CPU

运行态➡阻塞态:进程需要进行IO或者进程等待的资源未到达

运行态➡挂起态:系统内存空间不足将部分进程挂起到磁盘

阻塞态➡挂起态:同上

同步和互斥的概念(没答好)

互斥:进程之间共享临界资源,需要保证各个进程对资源的互斥的访问临界资源,是一种间接制约的关系

同步:进程之间存在某种时序关系,例如进程A需要在进程B之后执行,是一种直接制约关系

并发、并行、异步的区别

并发:同一时间有多个进程在运行,进程处于交替执行的状态

并行:在多处理器的情况下,多个进程在同一刻由不同的CPU进行执行

异步:异步是和同步相对应的,同步是顺序执行而异步中,某个事件不需要等待其他事件是否执行完。

多线程是实现异步的方式。

java实现多线程的方法

  • 继承Thread类
  • 实现Runable接口
  • 实现Callable接口
  • 使用线程池

各种方式的区别(没答好)

因为java中没有多继承所以通过继承Thread来实现多线程的话这个类就没有办法继承其他类

使用Runable接口的话相当于将多线程任务和多线程创建和执行分离开了,并且继承Runable接口还可以避免单继承的问题

Callable接口类似Runable只是Callable接口可以定义带返回值的方法

线程池通过提前创建线程和保留部分线程来避免重复创建销毁线程的开销,提高了运行效率

线程池

线程池底层有一堆存活线程以及一个任务队列,创建线程池时有几个重要参数:核心线程数、最大线程数、存活时间、任务队列、拒绝策略

当我们向线程池提交任务时,线程池会检测当前是否有空闲线程,如果有则直接执行。否者将任务放入任务队列中,等待空闲线程执行。如果任务队列满了的话则会检测当前线程数是否达到了最大线程数,如果没有则创建一个线程来执行,否者执行拒绝策略。

线程池拒绝策略有哪些(忘了第二个)

  1. 直接抛出异常
  2. 由调用者来执行
  3. 丢弃任务队列中最老的任务
  4. 直接丢弃任务

Spring、SpringMVC、SpringBoot的区别和联系

PS:答得不好,当时脑子有点乱说的我自己都尴尬,其实是答道了关键的但是一直在重复说。

Spring是SpringMVC、SpringBoot的基本框架,它主要提供IOC和AOP两种功能。

SpringMVC是基于Spring的一个WEB层框架

SpringBoot是整合了Spring、SpringMVC以及其他的一些框架的一个框架,它其中内嵌有Tomcat服务器,使得开发Web应用更方便,屏蔽掉了以前Spring、SpringMVC框架很多的配置文件。

Spring Bean是否有并发问题

Bean是有并发问题的,但我们平常使用的Controller、Service这些Bean,主要是直接调用它的方法没有数据共享发生。

解决办法:Synchronized等同步方式

JVM的内存分布

运行时数据区:线程共享的方法区、堆,线程不共享的虚拟机栈、本地方法栈、程序计数器

堆和栈的区别

栈中主要存放基本数据类型,以及引用数据类型的引用

常用的垃圾收集器

CMS、G1

CMS基于标记清楚和标记整理

G1是基于Region的

Redis ZSET的数据结构,如何实现跳表

ZSet底层有两种数据结构:ZipList和跳表

当元素少时使用压缩列表

字节实习二面_第1张图片

算法:二分查找的迭代、递归写法

​ 检测链表是否有环,有环则返回入环点

​ 两条链表返回是否相交,如果相交返回交点

​ 两个循环链表是否相交,如果相交返回交点

你可能感兴趣的:(网络,tcp/ip,网络协议)