2024.05.03钉钉后端三面

  • 钉钉
  • 三面
  • 实习
大约 5 分钟全民制作人ikun

钉钉后端三面

1.拷打项目

2.合作还是单独?

3.自学java?

4.项目用来做毕设了吗?

5.怎么学的?

6.框架是什么?

7.springboot的启动流程?

  • 首先从main找到run()方法,在执行run()方法之前new一个SpringApplication对象
  • 进入run()方法,创建应用监听器SpringApplicationRunListeners开始监听
  • 然后加载SpringBoot配置环境(ConfigurableEnvironment),然后把配置环境(Environment)加入监听对象中
  • 然后加载应用上下文(ConfigurableApplicationContext),当做run方法的返回对象
  • 最后创建Spring容器,refreshContext(context),实现starter自动化配置和bean的实例化等工作。

8.看过哪些源码,怎么看的?

9.arraylist和linkedlist的区别?

  • ArrayList基于动态数组实现的非线程安全的集合;LinkedList基于链表实现的非线程安全的集合。
  • 对于随机index访问的get和set方法,一般ArrayList的速度要优于LinkedList。因为ArrayList直接通过数组下标直接找到元素;LinkedList要移动指针遍历每个元素直到找到为止。
  • 新增和删除元素,一般LinkedList的速度要优于ArrayList。因为ArrayList在新增和删除元素时,可能扩容和复制数组;LinkedList实例化对象需要时间外,只需要修改指针即可。
  • LinkedList集合不支持 高效的随机随机访问(RandomAccess)
  • ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间

10.什么场景适合linkedlist

  • 频繁插入或者删除
  • 实现栈或者队列
  • 内存占用考量

11.遍历arraylist和linkedlist哪个更快?

ArrayList

12.redis源码看过哪些?

13.看过SDS之后的收获?

Redis 使用了一种称为 SDS(Simple Dynamic String)的自定义字符串数据结构来表示字符串。与标准的 C 语言字符串相比,SDS 具有以下特点:

  1. 长度信息:

    • SDS 除了存储字符串内容外,还会记录字符串的长度信息。这样可以避免在使用字符串时需要遍历整个字符串来计算长度。
  2. 二进制安全:

    • 标准 C 字符串以空字符 '\0' 作为结尾标识,但这也意味着字符串中不能包含空字符。SDS 则不受此限制,可以安全处理包含空字符的二进制数据。
  3. 预分配内存:

    • SDS 在分配内存时,会预分配比实际需要更多的空间。当字符串长度增加时,无需频繁地重新分配内存,提高了性能。
  4. 减少修改时的内存重分配:

    • 当需要修改字符串时,SDS 会先检查是否有足够的预分配空间。如果有,就直接在原有内存上修改,无需重新分配内存。这降低了修改字符串的成本。
  5. 兼容 C 字符串操作:

    • SDS 提供了与标准 C 字符串相似的 API,可以直接使用 C 语言的字符串操作函数,如 strlen(), strcpy() 等。

14.链表结构,使用场景?

15.redis部署到哪里了?

16.登录的安全性?

17.怎么保证数据传输的安全性?

18.tcp四次挥手?

https://xiaolincoding.com/network/3_tcp/tcp_interview.htmlopen in new window

img

  1. 第一步(FIN=1)
    • 客户端发送一个 FIN 报文段给服务器,表示客户端已经完成数据传输,希望关闭连接。
  1. 第二步(ACK=1,ACKnum=X+1)
    • 服务器收到客户端的 FIN 报文段后,发送一个 ACK 报文段作为响应,确认收到了客户端的 FIN 报文段,并告知客户端自己也准备关闭连接。此时,服务器进入了 CLOSE_WAIT 状态。
  1. 第三步(FIN=1)
    • 服务器发送一个 FIN 报文段给客户端,表示服务器已经完成数据传输,希望关闭连接。
  1. 第四步(ACK=1,ACKnum=Y+1)
    • 客户端收到服务器的 FIN 报文段后,发送一个 ACK 报文段作为响应,确认收到了服务器的 FIN 报文段,并告知服务器自己也准备关闭连接。此时,客户端进入了 TIME_WAIT 状态。

在四次挥手过程中,最后一次的 ACK 报文段是为了确保对方收到了自己的 FIN 报文段。在正常情况下,客户端发送完 ACK 后会进入 TIME_WAIT 状态,在这个状态下会等待一段时间(通常是 2 倍的 MSL,最长为 2*MSL),然后才会关闭连接。这个等待时间是为了保证被动关闭方收到最后一个 ACK 报文段,同时防止之前的重复报文段在网络中被延迟,导致对方重新发送 FIN 报文段,产生错误。

19.https协议?

HTTPS(Hypertext Transfer Protocol Secure)是在HTTP协议的基础上增加了SSL/TLS层,提供了数据加密和身份验证等安全特性。

20.ssl使用的什么,是对称还是非对称?

HTTPS使用SSL/TLS协议对HTTP传输的数据进行加密,确保了通信内容的机密性和完整性。 加密算法通常包括对称加密(如AES)和非对称加密(如RSA、ECDHE)。

21.tcp和tls都在哪一层?

传输层

  1. TCP(Transmission Control Protocol)是一种流量控制和可靠性传输的标准,位于OSI参考模型的传输层。它负责在点对点的网络通信中管理数据的有序传输和重传。

  2. TLS(Transport Layer Security)是位于传输层之上的一种安全协议,用来在客户端和服务器之间建立安全可靠的通信通道。TLS通过加密和认证机制,确保了通信的保密性和完整性。

22.看那些技术书了吗?

23.为什么要加一个负载均衡?

24.系统怎么优化?

25.反问:下一面时间、业务、第11题