网站后期维护是做什么,网络营销模式下品牌推广途径,wordpress导航图标哪里找,企业形象宣传策划方案synchronized和lock API的区别
区分点synchronizedlock api来源java内置关键字java.util.concurrent包获取锁时是否可以响应中断不能响应中断可以#xff0c;使用lock.lockInterruptibly()支持的锁类型非公平锁#xff0c;有锁升级的过程#xff08;无锁-偏向锁-轻…synchronized和lock API的区别
区分点synchronizedlock api来源java内置关键字java.util.concurrent包获取锁时是否可以响应中断不能响应中断可以使用lock.lockInterruptibly()支持的锁类型非公平锁有锁升级的过程无锁-偏向锁-轻量级锁-重量级锁支持非公平锁和公平锁ReentrantLock lock new ReentrantLock(boolean fair)加锁和释放自动释放锁手动释放锁在finally中释放锁信息获取不可获取锁信息可以通过lock.isLocked()查看是否获取到锁获取锁方式阻塞支持阻塞lock.lock()和非阻塞方式获取锁lock.tryLock()、lock.tryLock(timeout)实现方式对象头中的监视器AQS 注意synchronized和lock在获取锁之后都可以响应中断java的中断Thread.interrupt()方法只有在线程执行如Thread.sleep()、Thread.sleep(timeout)、Thread.join()、Thread.join(timeout)、Object.wait()、Object.wait(timeout)等阻塞时才会抛出InterruptedException异常其他情况下只会设置中断标志为true。 AQS原理
todo 补充aqs原理
java内存模型分为哪些区域哪些区域会发生GC哪些区域会发生OOM
区域是否发生GC是否发生OOM程序计数器否否堆是是虚拟机栈否是本地方法栈否是元空间是是直接内存否是
java垃圾收集器和工作原理
todo 补充具体工作流程
CMS
分代模型新生代老年代 工作流程 初始标记STW并发标记重新标记STW、并发清除 问题
使用标记-清除 回收算法产生内存碎片可能会触发fullgccpu敏感并发阶段占用cpu资源浮动垃圾无法处理标记后产生的新垃圾
G1: 分代模型新生代老年代 工作流程 初始标记STW并发标记重新标记STW、并发清除 问题
使用标记-清除 回收算法产生内存碎片可能会触发fullgccpu敏感并发阶段占用cpu资源浮动垃圾无法处理标记后产生的新垃圾
MySQL主从同步数据机制
主从同步流程
主库写操作写入binlogbinlog dump线程发送给从库从库I/O线程接收写入relay log中从库SQL线程重放
复制方式
异步复制 主库提交事务后立即返回客户端不等待从库确认。吞吐量高但主库故障数据可能丢失。半同步复制 主从提交事务后等待至少一个从库确认接收binlog才返回。降低了数据丢失风险吞吐量下降。全同步复制 主库事务需从库全执行完才返回成功。强一致性系统性能消耗明显。
binlog格式对比差异
格式定义优点缺点statement记录sql语句日志量小UUID随机函数、时区不一致导致主从数据不一致row记录每行数据变更原始值、新值主从数据一致日志量大mixed混合模式默认statement涉及到不确定操作时切换到row平衡性能和一致性-
undolog、redolog分别是什么含义用来做什么
先进行一个总体比较
维度undologredolog含义用来做事务的回滚用来做事务的持久化和奔溃恢复日志类型逻辑日志物理日志记录物理页的修改写入时机事务修改数据前事务提交前生命周期异步清理purge线程固定大小循环覆盖
TODO 补充各自特性
Innodb一级索引和二级索引的区别
一级索引又称聚簇索引叶子节点存储的是数据列数据行按照主键顺序物理排列。 一级索引的生成如果显示定义了主键直接使用主键作为_row_id如果有唯一索引则使用唯一索引作为_row_id否则隐式生成_row_id作为一级索引。
二级索引又称非聚簇索引叶子节点存储的主键值。查询时如果使用二级索引需要回表获取具体的数据行。
Innodb和myisam主键索引的区别
innodb主键索引即数据文件物理存储按照主键顺序如果频繁插入无序主键会有页分裂和索引调整性能下降 myisam所有索引均为非聚簇索引主键索引和数据文件分开存储索引文件存储主键值和数据文件地址的偏移量主键索引需要两次IO索引-数据文件。无需维护主键顺序适合频繁插入无事务的场景。
相比于B树B树的优势
在innodb中索引和数据的存储单位都是页innodb中页大小为16K。对于主键索引非叶子节点存储的是主键值下层页的地址指针叶子节点存储的是数据行。
假设数据行大小为1K叶子节点一页16K能存储16行数据记录主键是bigint类型8字节页指针大小为6字节非叶子节点一页能存储 16*1024/86字节11702层能存储的数据行大小为 1170 * 16 187203层能存储的数据行大小为 1170 * 1170 * 16 21902400 2千万
也就是说3层的B树能存储千万的数据而层数相当于IO次数B树能有效减少IO次数。而且叶子节点使用双向链表范围查询高效。 在 InnoDB 的表空间文件中约定 page numbe r为 3 的代表主键索引的根页而在根页偏移量为 64 的地方存放了该 B 树的 page level。 间隙锁解决啥问题
间隙锁解决了可重复读事务隔离级别的幻读问题。如果只有行锁进行事务更新时锁定如下 假如只有 (id2,age‘1’) 这一行数据。 事务开始 1 select * from user where id 1 and id 4; 2 select * from user where id 1 and id 4; 事务结束 查询语句1返回了id2这条数据在执行语句2之前别的事务进行了插入 insert into user (id, age) values(3, ‘3’); 语句1和2的执行结果不一致出现了幻读。此时锁定id2和 1,2) 和2,4)这个范围让其他插入语句不能对此范围操作避免事务执行前后不一致。
Sql调优
调优步骤分析执行计划-优化索引-改写sql-参数调整 执行计划
全表扫描ALL需优化为 ref 或 rangerows预估扫描行数额外操作using filesort文件排序、using temporary临时表
排查思路
检查是否索引失效或者索引缺失驱动表选择不当多次回表索引使用函数或者隐式类型转化导致索引失效
优化思路
唯一性高的数据优先作为索引索引覆盖索引包含查询字段减少回表索引下推在索引中增加条件减少回表次数
SQL优化
避免使用select *减少内存和网络开销分页优化增加定位起始id避免深分页减少数据扫描在join前用条件减少数据量
架构优化
读写分离减少主库压力增加缓存减少数据库访问频率
监控手段
启用慢查询日志实时监控数据库QPS和连接数等指标
执行计划
执行计划中包含的字段
rows扫描行数用来判断是否全表扫描或者扫描行数过多possible keys可能命中的索引type如何查找表数据一般优化到range到ref就可以枚举如下 system查询系统表表中仅有一行数据比如查询information_schema 等系统表。 const通过主键或唯一索引精确匹配单行。 eq_ref多表关联时被驱动表通过主键/唯一索引等值匹配。 ref非唯一索引等值匹配可能返回多行。 ref_or_null类似 ref但包含 NULL 值过滤。 fulltext全文索引检索。 index_merge合并多个索引的结果OR 条件优化减少回表次数。 unique_subquery子查询返回唯一值主键/唯一索引等价于 eq_ref。 index_subquery子查询返回非唯一索引值。 range索引范围扫描BETWEEN、IN、LIKE ‘xxx%’。 index全索引扫描扫描整个二级索引若需回表则退化为 ALL。 all全表扫描逐行检查无索引的 WHERE 条件。 null表示不会访问到表数据从索引中就可以获取所需数据。如查询主键索引的主键字段。 keysql执行中真正用到的索引ref查询执行时通过哪些列或常量与索引进行匹配。 核心价值ref 字段帮助开发者理解查询如何利用索引识别低效的索引使用场景如函数、未命中索引。 优化方向 确保 ref 显示为列名或常量而非 NULL。 多表连接时检查 ref 是否包含关联字段。 避免在索引列使用函数或隐式类型转换。 可能的取值为 const等值查询使用主键或唯一索引的常量值。如select * from user where id1仅匹配单行效率最高。 列名column非唯一索引的等值查询或者范围查询。 多列col1col2复合索引的部分列匹配。 函数或表达式索引列参与函数计算可能导致索引失效。 NULL未使用索引条件如全表扫描或未命中索引的查询。 ref 与 key 的区别 key实际使用的索引名称如idx_age; ref索引匹配的具体列或常量如age、const。
extrasql执行过程中额外的细节常见的情况如下
需要优化的情况 Using filesort使用了文件排序比如sql为select * from user where created_at ‘2024-01-01 00:00:00’ order by created_at, age; 但是created_at上有索引而age上没有此时如果过滤后的数据大小超过了sort_buffer_size就会创建一个临时文件进行排序。如果没有超过sort_buffer_size则会进行内存排序。需要注意的是这个参数是每个连接独享的设置得过大可能会浪费内存资源。 Using temporary需要创建临时表存储中间结果常见于GROUP BY/DISTINCT/JOIN。优化方案减少查询不必要的字段调大临时表内存参数强制直接使用磁盘临时表省掉内存临时表转换为磁盘临时表的过程 Using join buffer连接操作使用缓存通常因关联字段无索引大表关联时未命中索引。 积极提示 Using index覆盖索引查询字段全在索引中无需回表。 Using index condition (ICP)索引条件下推MySQL 5.6部分条件在存储引擎层过滤WHERE 条件包含索引列的非等值过滤。 Using where存储引擎返回数据后MySQL 需回表过滤可能涉及回表操作。索引未完全覆盖 WHERE 条件。 Select tables optimized away优化器跳过表扫描如 COUNT(1) 直接通过索引统计。比如SELECT COUNT(id) FROM orders;id 为主键 Impossible WHEREWHERE 条件永远不成立如 WHERE 10直接返回不查询。 DistinctMySQL 自动去重优化 DISTINCT 查询。 数据库和缓存一致性
todo 待补充
缓存击穿如何解决
查询数据库中没有的数据加布隆过滤器提高误判率可以增加位图大小也可以修改hash函数减少hash冲突。
Redis持久化策略
AOF RDB AOFRDB
Redis删除了一个key在物理上删除了吗用什么方式解决删除的key访问不到
Redis的io 模型
Kafkaack机制有哪几种情况
什么样的副本能进去isr
如何增加消费速度
Rebalance会重新分配分片中的数据吗