OS+MySQL+(其他)八股小记

鲁迅先生曾经说过,每天进步一点点,妈妈夸我小天才。

依旧今日八股,这是我在多个文档整合一起的,可能格式有些问题,请谅解。

操作系统

1.进程和线程的区别?

  1. 进程是代码在数据集合的一次执行活动,是系统调度资源和分配的基本单位。
  2. 线程是进程的执行路径,一个进程至少有一个线程,进程中的多个线程共享进程的资源(堆和方法区)。
  3. 线程中有自己的程序计数器和栈。

2.线程上下文切换要做什么,进程呢?

说到线程我们得先了解一下进程的上下文切换。

进程:上下文切换是一种将CPU资源从一个进程分配给另一个进程的机制。切换过程中,操作系统需要先存储当前进程的状态(包括内存空间的指针、当前执行完的指令等等),再读入下一个就进程的状态,然后执行此进程。

线程:

  1. 当两个线程不属于同一个进程,切换过程与进程上下文切换一样。
  2. 如果线程属于同一个进程,因为虚拟内存是共享的,所以切换时,虚拟内存这些资源保持不动,只需要切换线程的私有数据、寄存器等不共享的数据。

3.死锁的四个条件?如何避免?

  1. 互斥条件

对某资源同时只允许一个线程占用,如果还有其他线程请求获取该资源,则请求者只能等待、直至占有资源的线程释放该资源。

  1. 请求并持有

一个线程已经占有了某资源,但又提出了新的资源请求,而新的资源已被其他线程占有,所以当前线程会阻塞,但不会释放自己已持有的资源。

  1. 不可剥夺条件

指线程占有的资源在使用前不会被其他线程抢占,只能在自己使用完毕后由自己释放资源。

  1. 环路等待条件

发生死锁时必然存在一个 资源–线程的环形链。


其他细节

  • AOP 日志:
    • 为什么用 AOP 而不是过滤器/拦截器?

Spring AOP 底层其实就是基于代理和拦截器机制实现的。
但是从开发者视角来看:

  • Filter(过滤器) → Servlet 层面,适合处理请求/响应,比如跨域、编码、权限。
  • Interceptor(拦截器) → Spring MVC 层面,适合处理 Controller 前后的逻辑,比如登录校验、参数预处理。
  • AOP(切面) → 主要用在业务方法层(Service/DAO),可以做到更细粒度的横切逻辑,比如公共字段填充、统一日志、事务、埋点。

所以我用 AOP,不是因为它和拦截器完全不同,而是:

  • 它提供了更细粒度的切入点(不仅限于 Controller,还能作用在 Service、DAO)。
  • 和注解结合更自然,可以精确控制哪些方法要切入,而不是所有请求都走一遍。
  • 非侵入性更好,业务代码不用关心。

  • OSS 文件上传:
    • 分片上传和断点续传的原理?

分片上传和断点续传的核心逻辑其实在前端。前端把文件切成固定大小的分片,并发调用 OSS 的分片上传 API。断点续传时,前端会保存 uploadId 和已上传分片的状态(本地或数据库),下次上传时只补传未完成分片。
服务端这边比较轻量,主要就是对接 OSS API,做上传凭证签名和回调处理。

后:

  • 后端主要做 安全控制:前端要上传前,先请求后端获取 OSS 签名凭证

  • 负责接收 OSS 的 回调通知(上传完成/失败),更新数据库中文件的状态。

  • 如果有大文件秒传需求,还可以在后端做 文件唯一性校验(MD5 校验),避免重复上传。

    • 断点续传是怎么记录上传进度的?
  • Nginx + Tomcat:

    • Nginx 常见负载均衡策略?
  • 轮询(默认):请求均匀分配。

  • 加权轮询:根据服务器性能分配权重。

  • IP Hash:同一客户端 IP 访问固定节点。

  • 最少连接数:请求分配给当前连接数最少的节点。

  • 一致性哈希(第三方模块):保证同一用户尽量落到相同节点。


    • 项目中 session 怎么解决共享问题?

有一个地方涉及到了session共享问题,就是在登录获取验证码的时候,将验证码存到哪里的问题,起初是用HttpSession保存验证码。但是因为多台Tomcat不共享数据,而复制数据给其他Tomcat比较浪费空间,所以考虑使用Redis。


MySQL

Q9: 为什么索引用 B+ 树而不是 B 树?
A9:

  • 二叉树/红黑树的储存数据的层数太深,磁盘IO多。
  • B+ 树非叶子节点只存索引,只在叶子节点存储数据,叶子节点之间由链表相连,范围查询效率高
  • 磁盘页一般16KB,一个B+树节点能储存很多key,树高一般3、4层就能覆盖百万级别的数据

Q10: 覆盖索引和回表的区别?
A10:

假设user表,id为主键,name不加修饰,创建这两个字段的索引

  • 覆盖索引:查询的数据都能在辅助索引里拿到,不用回表。

比如select name from user where name = 'xxx',这样本身数据就能从辅助索引里找到,不需要回表。

  • 回表:select * from user where id = 1这样是不需要回表的,聚簇索引(也就是主键索引)他是通过B+树储存数据,在叶子节点储存所有数据记录和主键索引,所以会直接查询到id=1的全部数据。但是,如果执行select * from user where name = 'xxx',因为name属于辅助索引,辅助索引储存name索引和主键,需要先根据name索引查询到对应的主键,然后根据主键去主键索引里找对应数据,所以多扫描了一个索引树,这个过程叫做回表操作。

Q10:什么是最左匹配原则/最左前缀原则?

A10:

  • 当我们为多个列创建 联合索引(Composite Index)时,索引的查询利用遵循 从最左边的列开始匹配
  • 只要中间某个字段没有使用,就无法继续利用后续字段的索引。
  • 假如有一个联合索引
CREATE INDEX idx_user_name_age ON user(name, age, gender);

相当于创建了三个索引组合

  • (name)
  • (name, age)
  • (name, age, gender)

B+树按照最左有序排列,从左到右建立索引树,也就是name部分是有序的,查询数据时会优先比较name来确定下一步搜索的方向,但是如果隔过name的话,那就无从下手了,就不知道下一步该查哪个节点了,就用不上索引了。

Q11: MySQL 事务四大特性 & 隔离级别?
A11:
ACID:原子性、一致性、隔离性、持久性。

  • 原子性:事务作为一个整体被执行,其中包括的对数据库的操作要么全部成功,要么全部失败。
  • 一致性:事务执行前,与事务执行后数据不会被破坏。比如a转账b账户10块钱,执行完后,帐户的金额总和是不变的。
  • 隔离性:多个事务并发访问时,事务之间是隔离的,一个事务不会影响另一个事务的执行。
  • 持久性:事务执行对数据库的操作,将持久的保存在数据库中。

隔离级别:读未提交、读已提交、可重复读(默认)、串行化。

  • 脏读:事务A、B交替执行,事务A读到了事务B未提交的数据
  • 幻读:事务A查询一个范围的结果集,事务B在这之间插入或者删除了数据,并静悄悄的提交,导致事务A再次查询相同的范围与发现数据行数多了或者少了。
  • 不可重复读:在一个事务范围,两个相同的查询,读取同一条记录,返回了不同的数据。

Q12: MVCC 是怎么实现的?
A12:

多版本并发控制。通过维护数据历史版本,从而解决并发访问情况下的读一致性问题。
关键点:隐式字段、undo 日志、版本链、快照读&当前读、Read View。

MVCC 的核心是 版本链 + ReadView 可见性判断
InnoDB 在每行数据后面维护 trx_idroll_pointer,更新时不覆盖旧数据,而是把旧值写入 Undo Log,形成一个版本链。事务在读的时候会生成 ReadView,通过事务 ID 和活跃事务列表来判断哪个版本对自己可见。这样不同事务就能同时读取到各自一致的数据版本,从而避免了脏读和不可重复读。


Q13: SQL 查询很慢,你怎么排查?
A13:

慢查询日志和服务监控

  • **慢查询日志: **开启 MySQL 的慢查询日志,再通过一些工具比如 mysqldumpslow 去分析对应的慢查询日志,当然现在一般的云厂商都提供了可视化的平台。
  • 服务监控: 可以在业务的基建中加入对慢SQL的监控,常见的方案有字节码插桩、连接池扩展ORM 框架过程,对服务运行中的慢SQL进行监控和告警。

Q14:有哪些方式优化?

A14:

SQL语句的优化,数据库设计的优化

一般我们会从几个方面考虑:

  1. SQL 本身:检查是否有不必要的字段、函数操作,是否可以改写成更优的形式;
  2. 索引:查看是否建了合适的索引,能否使用覆盖索引;
  3. 执行计划:用 EXPLAIN 看看是否走了全表扫描,rows 预估量大不大;
  4. 表结构:字段类型是否合理,表是否过大,是否需要拆分;
  5. 系统层面:比如加缓存、读写分离、分库分表等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/95094.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/95094.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Transformer的并行计算与长序列处理瓶颈总结

🌟 第0层:极简版(30秒理解)一句话核心:Transformer像圆桌会议——所有人都能同时交流(并行优势),但人越多会议越混乱(长序列瓶颈)。核心问题 并行优势&#x…

Vue 3 useId 完全指南:生成唯一标识符的最佳实践

📖 概述 useId() 是 Vue 3 中的一个组合式 API 函数,用于生成唯一的标识符。它确保在服务端渲染(SSR)和客户端渲染之间生成一致的 ID,避免水合不匹配的问题。 🎯 基本概念 什么是 useId? useId…

CGroup 资源控制组 + Docker 网络模式

1 CGroup 资源控制组1.1 为什么需要 CGroup - 容器本质 宿主机上一组进程 - 若无资源边界,一个暴走容器即可拖垮整机 - CGroup 提供**内核级硬限制**,比 ulimit、nice 更可靠1.2 核心概念 3 件套 | 概念 | 一句话解释 | 查看方式 | | Hierarchy | 树…

【ArcGIS微课1000例】0150:如何根据地名获取经纬度坐标

本文介绍了三种获取地理坐标的方法:1)在ArcGIS Pro中通过搜索功能定位目标点(如月牙泉)并查看其WGS84坐标;2)使用ArcGIS内置工具获取坐标;3)推荐三个在线工具(maplocation、地球在线、yanue)支持批量查询和多地图源坐标转换。强调了使用WGS84坐标系以减少误差,并展示…

HTML应用指南:利用GET请求获取MSN财经股价数据并可视化

随着数字化金融服务的不断深化,及时、准确的财经信息已成为投资者决策与市场分析的重要支撑。MSN财经股价数据服务作为广受信赖的金融信息平台,依托微软强大的技术架构与数据整合能力,持续为全球用户提供全面、可靠的证券市场数据。平台不仅提…

雅思听力第四课:配对题核心技巧与词汇深化

现在,请拿出剑桥真题,开始你的刻意练习! 内容大纲 课程核心目标旧题回顾与基础巩固配对题/匹配题核心解题策略考点总结与精听训练表 一、课程核心目标 掌握第二部分配对题的解题策略攻克第三部分匹配题的改写难点系统整理高频场景词汇与特…

SQL Server从入门到项目实践(超值版)读书笔记 25

第12章 存储过程的应用 🎉学习指引 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,存储过程时数据库中的一个重要对象,它代替了传统的逐条执行SQL语句的方式。本章就来…

20.29 QLoRA适配器实战:24GB显卡轻松微调650亿参数大模型

QLoRA适配器实战:24GB显卡轻松微调650亿参数大模型 QLoRA 适配器配置深度解析 一、QLoRA 适配器核心原理 QLoRA 作为当前大模型微调领域的前沿技术,通过量化与低秩适配的协同设计,在保证模型效果的前提下实现了显存占用的革命性降低。其核心由三大技术支柱构成: 4位量化…

QMainWindow使用QTabWidget添加多个QWidget

QTabWidget添加其它Wdiget的2个函数如下&#xff1a; QTabWidget的介绍可参考官网QTabWidget Class | Qt Widgets | Qt 6.9.1 直接上代码&#xff0c;代码如下&#xff1a; #include <QMainWindow>#include <QApplication> #include <QVBoxLayout> #includ…

AI学习机哪个好?选这几款步步高就对了

随着新教改政策的推进&#xff0c;教育对孩子的综合素养提出了更高要求。英语更重听说、数学更重思维&#xff0c;这让许多家长在辅导孩子时感到压力倍增。因此&#xff0c;如何选择一款能真正帮助孩子提升能力的学习机&#xff0c;成为了大家普遍关心的问题。面对市场上功能各…

【设计模式】--重点知识点总结

题1 1、工厂和产品之间是依赖关系 2、工厂方法模式&#xff1a;工厂方法不能为静态方法。如果是静态方法&#xff0c;子类无法重写行为。 简单工厂可以用静态方法 3、采用设计模式&#xff0c;以保证成功的设计和体系结构 4、建造者模式&#xff1a;&#xff08;1&#xf…

轻量实现 OCPP 1.6 JSON 协议(欧洲版)的充电桩调试平台

1 项目概览 1.1 目标与适用场景 1.1.1 简介 本文介绍的开源项目 ocpp_charge&#xff0c;是一个 自研轻量实现 OCPP 1.6 JSON 协议&#xff08;欧洲版&#xff09; 的充电桩调试平台。 它没有依赖官方 OCPP 1.6J 库&#xff0c;而是从零实现协议解析与会话管理&#xff0c;适…

Ubuntu 搭建 Solana 区块链开发环境 + Anchor 智能合约完整教程

文章目录简介特征核心概念Solana 的工作原理&#xff08;简单版&#xff09;为什么人们选择 Solana开发环境准备Solana 官网Solana 文档Anchor 文档GithubRust SDK快速安装 Solana&#xff08;推荐&#xff09;单独安装 Solana安装依赖项安装 Solana CLI安装 Anchor CLI安装 AV…

curl 介绍及使用教程

文章目录 什么是 curl? 1. 解析用户输入与初始化 2. 建立网络连接 3. 构建并发送请求 4. 接收并处理响应 5. 清理资源 核心特点总结 基本语法 常用功能及示例 1. 基本 HTTP 请求 2. 发送 GET 请求 3. 发送 POST 请求 4. 设置请求头 5. 处理认证 6. 断点续传 7. 跟随重定向 8. …

【第十一章】Python 队列全方位解析:从基础到实战

Python 队列全方位解析&#xff1a;从基础到实战 本文将从基础概念到高级应用&#xff0c;用 “文字解释 代码示例 图表对比 实战案例” 的方式&#xff0c;全面覆盖 Python 队列知识&#xff0c;零基础也能轻松掌握。 文章目录Python 队列全方位解析&#xff1a;从基础到实…

跨平台开发框架实测:React Native vs Flutter vs Kotlin Multiplatform

本文聚焦 React Native、Flutter 和 Kotlin Multiplatform 三大跨平台开发框架&#xff0c;从性能表现、开发效率、生态系统、跨平台一致性及学习成本五个关键维度展开实测对比。通过具体场景的测试数据与实际开发体验&#xff0c;剖析各框架的优势与短板&#xff0c;为开发者在…

【网弧软著正版】2025最强软著材料AI生成系统,基于GPT5.0

软著材料AI一键生成系统 网址&#xff1a;AI软著材料生成平台 | 一键生成全套软著文档 - 网络弧线 产品简介&#xff1a; 专业的软件著作权材料AI生成平台&#xff0c;基于GPT-5模型开发&#xff0c;自2022年运营至今已服务数万用户成功获得软著证书。输入软件名称即可自动生成…

存储掉电强制拉库引起ORA-01555和ORA-01189/ORA-01190故障处理---惜分飞

机房存储突然掉电导致Oracle数据库访问存储异常,数据库报出大量的ORA-27072: File I/O error,Linux-x86_64 Error: 5: Input/output error,ORA-15081: failed to submit an I/O operation to a disk等错误,实例直接crash Wed Aug 27 07:11:53 2025 Errors in file /u01/app/ora…

R3:适用于 .NET 的新一代响应式扩展库,事件订阅流

R3&#xff1a;适用于 .NET 的新一代响应式扩展库 R3 是 dotnet/reactive&#xff08;.NET 官方响应式扩展&#xff09;与 UniRx&#xff08;适用于 Unity 的响应式扩展&#xff09;的新一代替代方案&#xff0c;支持多种平台&#xff0c;包括 Unity、Godot、Avalonia、WPF、W…

Android Framework打电话禁止播放运营商视频彩铃

文章目录定位Android电话的源码及UI禁止打电话时播放运营商广告视频彩铃运营商视频彩铃framework禁止播放视频彩铃需求&#xff1a;打电话时&#xff0c;对方未接听&#xff0c;这个时候可能会播放运营商的视频彩铃&#xff0c;需求是屏蔽彩铃播放。测试平台&#xff1a;展锐。…