小红书-商业技术-一面凉经
📍面试公司:小红书
🕐面试时间:55min (由于自己太菜 导致面试官吃饭吃晚了深表歉意)
💻面试岗位:后端开发
❓面试问题:
1、进程和线程的区别
2、进程快还是线程快?
3、进程是不是也是切换上下文?那么进程切换上下文快还是线程切换的快?进程切换上下文切换的是哪些东西,切换上下文需要注意哪些?(被问到沉默 最近两次开局都是这系列问题 做个笔记先)
这个大佬的视频很形象
- 进程线程为什么要进行上下文切换:
- 进程上下文切换的意义:
- 让不同的程序(例如浏览器、IDE、数据库)都能“同时”运行在一个 CPU 上。 操作系统通过切换进程上下文,实现了 多任务操作系统,用户感觉多个程序并行执行。
- 保证系统中多个应用程序能公平获得 CPU 时间。
- 线程上下文切换的意义:
- 让一个进程内部的多个任务(线程)能够交替执行,比如浏览器的页面渲染线程、网络线程、JavaScript 执行线程。意义:提供了 并发执行的编程模型,让单个应用也能充分利用 CPU。
- 提供 资源共享(同一进程的地址空间、文件句柄等),降低通信成本。
- 保证应用内多个任务不会“饿死”,比如 UI 线程及时刷新界面,后台线程继续下载文件。
- 进程和线程的切换分别切换与哪些资源有关?
- 进程
- CPU 寄存器状态
- 程序计数器(PC)
- 栈指针(SP)
- 通用寄存器内容(AX、BX 等)
- 内存管理相关
- 页表基址寄存器(CR3)
- 切换进程地址空间关联的虚拟内存空间
- 缓存/TLB 刷新(因为地址空间变了)
- 内核资源内核栈指针打开的文件描述符表信号处理器信息IPC(管道、消息队列、共享内存)等内核状态
- 调度器信息进程控制块(PCB,Process Control Block)中的内容:进程状态、优先级、CPU 时间片统计等。(核心内容)
- 线程
- CPU 寄存器状态
- 程序计数器(PC)
- 栈指针(SP,对应自己的线程栈)
- 通用寄存器内容
- 内核资源(少量)
- 线程栈(独立)
- 线程局部存储(TLS, Thread Local Storage)
- 线程控制块(TCB, Thread Control Block)
- 共享的资源(无需切换)
- 进程切换比线程慢的原因:
- 切换范围大:进程切换涉及地址空间和内核资源(PCB),而线程只需保存/恢复 CPU 上下文和线程栈。
- 硬件影响:进程切换要刷新 TLB、导致缓存失效,性能开销大。
- 系统开销:进程切换必须由内核介入,调度和资源管理比线程切换复杂。
4、Mysql索引的数据结构是什么你知道吗?
5、Mysql索引为什么要选择B+树 不选B-树?
6、分析一下,当B+树和B-树目前全都在内存里面,那么此时查询10000条(不存在批量查询)那么此时谁查询的效率高?(这个问题的要点就是没有IO 那么B+树的优势就不存在了)
7、如果考虑IO为什么B+树比B-树搜索效率高?
8、Mysql的数据页大小是多少?
9、说一下你们的分布式锁的何时触发?
10、使用注解加分布式锁如何获得接口里面的参数?
11、SpringEL 为什么能获取到接口的参数?
12、AOP的错误捕获如何做的?
13、如果用try catch finally 来使用分布式锁 是不是就可以保证锁安全的使用和释放(程序宕机),如果出了问题,锁如何释放? Lua 脚本你会写吗?
14、对于promot 以及RAG 为什么使用向量数据库存储,ES也是存储大量数据的 为什么使用ES?以及RAG的在你们业务上的使用流程。
15、如何保证用户输入的内容能够更准确的匹配到tool接口上?你们使用tool接口做了什么逻辑?tool接口匹配的原理是什么?
算法:两个股票问题(贪心+dp) dp的递推脑子不中用没推出来 最后只说了下思路
🙌面试感想:面试官实力雄厚能够很流畅的说出场景引出问题,并且一直在引导回答,给了很多思路。奈何平时只背死八股还不够灵活。
害 秋招真的得要把408一步一步复习啊😵
叮咚买菜工作强度 163人发布