1.进程和线程之间的区别
特性 | 进程 (Process) | 线程 (Thread) |
---|---|---|
基本单位 | 操作系统进行资源分配和独立调度的基本单位。 | CPU进行任务调度和执行的基本单位。它是进程内的一个执行路径。 |
资源拥有 | 拥有独立的资源,包括独立的内存地址空间、文件描述符、数据等。 | 不拥有系统资源,但与同属一个进程的其他线程共享该进程的全部资源(如代码区、数据区、堆、文件等)。 |
私有数据 | 每个进程都有自己独立的地址空间。 | 每个线程有自己私有的栈(Stack)、程序计数器(Program Counter)和寄存器(Registers)。 |
创建开销 | 高。创建进程需要操作系统分配全新的、独立的内存空间和各种资源。 | 低。创建线程只是在现有进程的资源中创建一个新的执行流,开销小得多。 |
切换开销 | 高。进程切换需要改变CPU的上下文,还要切换页表(内存地址映射),成本很高。 | 低。线程切换只涉及CPU上下文的切换(栈、寄存器等),不需要切换内存地址空间,速度快。 |
通信方式 | 复杂。需要使用进程间通信(IPC),如管道、消息队列、共享内存、套接字(Socket)等。 | 简单。可以直接读写同一进程的共享变量和数据结构。但需要使用同步机制(如互斥锁、信号量)来避免数据冲突。 |
健壮性 | 强。一个进程崩溃不会影响其他进程,因为它们是相互隔离的。 | 弱。一个线程的崩溃(如非法内存访问)会导致整个进程崩溃,因为它们共享内存空间。 |
关系 | 进程是线程的容器。一个进程至少包含一个线程(主线程)。 | 线程存在于进程之中,是进程的一部分。 |
2.有一个网络请求接口,放在主线程调用还是子线程调用
放在子线程(异步方式)调用
网络请求是一个典型的I/O阻塞操作,如果放在主线程,会影响用户交互和更新UI界面等等任务的处理;
3.如何解决调用后可能出现的线程安全问题?
使用锁;使用线程安全的数据结构(比如队列);使用原子操作;避免共享状态
4.线程和进程之间的切换开销哪个更大
进程的切换开销更大;
线程只涉及到CPU上下文的切换,但是进程不仅需要改变CPU的上下文,还要切换页表等等;
5.在面对高并发场景,如何通过线程池解决?
线程池的工作原理与优势
一个标准的线程池主要由以下几个部分组成:
- 线程池管理器 (Pool Manager):负责创建、管理和销毁线程池。
- 工作线程 (Worker Threads):池中保持一定数量的、可复用的线程。
- 任务队列 (Task Queue):一个缓冲区,用于存放尚未被处理的任务。
- 拒绝策略 (Rejection Policy):当任务队列已满且所有工作线程都在忙时,如何处理新来的任务。
工作流程:
- 程序启动时,线程池被创建,并预先初始化一定数量的工作线程。
- 当一个新任务到达时,程序将其提交给线程池。
- 线程池会检查是否有空闲的工作线程。
- 有:立即分配一个空闲线程去执行该任务。
- 没有:将任务放入任务队列中排队等待。
- 任务执行完毕后,该工作线程并不会被销毁,而是返回池中,继续等待下一个任务。
- 如果任务队列也满了,线程池将根据预设的拒绝策略来处理新任务。
线程池的核心优势:
- 降低资源消耗:通过复用已存在的线程,避免了频繁创建和销毁线程带来的开销。
- 提高响应速度:任务到达时,无需等待线程创建即可立即执行,因为线程已经准备好了。
- 提高可管理性:可以统一分配、调优和监控线程。最重要的是,可以控制最大并发数,防止无限制的线程对系统造成冲击,保证系统稳定性。
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.手撕:单例模式,两数之和,路径之和,合并递增链表