1.进程和线程之间的区别

特性进程 (Process)线程 (Thread)
基本单位操作系统进行资源分配和独立调度的基本单位。CPU进行任务调度和执行的基本单位。它是进程内的一个执行路径。
资源拥有拥有独立的资源,包括独立的内存地址空间、文件描述符、数据等。不拥有系统资源,但与同属一个进程的其他线程共享该进程的全部资源(如代码区、数据区、堆、文件等)。
私有数据每个进程都有自己独立的地址空间。每个线程有自己私有的栈(Stack)、程序计数器(Program Counter)和寄存器(Registers)
创建开销。创建进程需要操作系统分配全新的、独立的内存空间和各种资源。。创建线程只是在现有进程的资源中创建一个新的执行流,开销小得多。
切换开销。进程切换需要改变CPU的上下文,还要切换页表(内存地址映射),成本很高。。线程切换只涉及CPU上下文的切换(栈、寄存器等),不需要切换内存地址空间,速度快。
通信方式复杂。需要使用进程间通信(IPC),如管道、消息队列、共享内存、套接字(Socket)等。简单。可以直接读写同一进程的共享变量和数据结构。但需要使用同步机制(如互斥锁、信号量)来避免数据冲突。
健壮性。一个进程崩溃不会影响其他进程,因为它们是相互隔离的。。一个线程的崩溃(如非法内存访问)会导致整个进程崩溃,因为它们共享内存空间。
关系进程是线程的容器。一个进程至少包含一个线程(主线程)。线程存在于进程之中,是进程的一部分。

2.有一个网络请求接口,放在主线程调用还是子线程调用

放在子线程(异步方式)调用

网络请求是一个典型的I/O阻塞操作,如果放在主线程,会影响用户交互和更新UI界面等等任务的处理;

3.如何解决调用后可能出现的线程安全问题?

使用锁;使用线程安全的数据结构(比如队列);使用原子操作;避免共享状态

4.线程和进程之间的切换开销哪个更大

进程的切换开销更大;

线程只涉及到CPU上下文的切换,但是进程不仅需要改变CPU的上下文,还要切换页表等等;

5.在面对高并发场景,如何通过线程池解决?

线程池的工作原理与优势

一个标准的线程池主要由以下几个部分组成:

  1. 线程池管理器 (Pool Manager):负责创建、管理和销毁线程池。
  2. 工作线程 (Worker Threads):池中保持一定数量的、可复用的线程。
  3. 任务队列 (Task Queue):一个缓冲区,用于存放尚未被处理的任务。
  4. 拒绝策略 (Rejection Policy):当任务队列已满且所有工作线程都在忙时,如何处理新来的任务。

工作流程:

  1. 程序启动时,线程池被创建,并预先初始化一定数量的工作线程。
  2. 当一个新任务到达时,程序将其提交给线程池。
  3. 线程池会检查是否有空闲的工作线程。
    • :立即分配一个空闲线程去执行该任务。
    • 没有:将任务放入任务队列中排队等待。
  4. 任务执行完毕后,该工作线程并不会被销毁,而是返回池中,继续等待下一个任务。
  5. 如果任务队列也满了,线程池将根据预设的拒绝策略来处理新任务。

线程池的核心优势:

  1. 降低资源消耗:通过复用已存在的线程,避免了频繁创建和销毁线程带来的开销。
  2. 提高响应速度:任务到达时,无需等待线程创建即可立即执行,因为线程已经准备好了。
  3. 提高可管理性:可以统一分配、调优和监控线程。最重要的是,可以控制最大并发数,防止无限制的线程对系统造成冲击,保证系统稳定性。

6.哈希表的底层是什么?

链表+数组+红黑树

本质上是一个数组,在大多数语言的视线中,为了提高存放效率,在每一个数组结点实际上是一个链表,如果对于一个数组结点上的链表结点超过某个固定值(比如8)就会自动转化为红黑树提高查找效率

总的来说,哈希表底层就是一个以数组为基础的数据结构,通过哈希函数将Key映射到数组的特定索引上,从而实现快速访问。同时,他也具有一套成熟的冲突解决机制(主要是链地址法)和动态扩容机制来保证在各个情况下都能具有高效的性能。

7.如何避免哈希值重复?

见上

8.https和http之间的区别

9.单向认证和双向认证的区别

区别在于 谁需要向谁证明自己的身份

单向认证:只需要一方证明身份,通常是客户端验证服务器的身份。 双向认证:互相验证对方的身份。

单向认证(SSL/TLS),几乎所有https网站都是单向认证,只有服务器有SSL/TLS证书; 双向认证(SSL/mTLS),只有经过授权和许可的客户端才能访问服务器,比如企业内部服务,支付网关等;

10.tcp/ip模型有几层,分别是什么

一般来说是五层:物理层,数据链路层,网络层,传输层,应用层; 也可以说是四层:网络接口层(物理层+数据链路层),网际层(网络层),传输层,应用层

物理层:最底层,传输0/1,集线器,中继器,网线等;

数据链路层:传输Frame(帧),进行同一个局域网内两个相邻结点的数据传输,引入了MAC地址来标识网络设备,以太网,Wifi;

网络层:负责将Packet(数据包)从源主机跨越网络到目标主机,使用IP地址来寻址,IP,ICMP协议;

传输层:为两台主机之间的应用程序提供端到端的通信,定义Port(端口)来区分不同应用程序之间的通信;有TCP、UDP协议;

应用层:直接面向用户,为各种网络应用提供服务,有HTTP/HTTPS,FTP,SMTP等等协议

11.tcp和udp之间有什么区别,使用场景分别是哪些

TCP面向有连接,是可靠的传输,需要三次握手和四次挥手,有重传机制,流量控制盒拥塞控制来保证数据不丢失、不重复、按顺序到达;但是传输速度较慢,适用于对数据完整性和可靠性要求比较高的场景;数据是数据流模式。

UCP面向无连接,直接发送数据,无需建立连接,是不可靠的传输,不保证数据能否到达,也不保证顺序,所以传输数据较快,数据是数据报模式;适用于对实时性要求高,能容忍少量丢包的场景

12.lru是什么?

最近最少使用,缓存算法

13.手撕:单例模式,两数之和,路径之和,合并递增链表

快手一面

作者

MeorinLime 梦灵

发布日期

2025 - 08 - 07