Zookeeper选举机制
1,启动时
2,集群运行期间
Paxos
解决分布式系统就某个协议达成一致的方案
分布式锁
解决什么问题:分布式环境下解决共享资源问题
场景:多台机器并发抢购商品
步骤1:竞争set key 锁标识 value 客户端标识(推荐uuid)
步骤2:设置有效期ttl,防止死锁,uuid只有保障上锁者有权解锁
步骤三:处理业务逻辑
步骤4:到期自动释放||逻辑结束唯一标识释放
特征
互斥性
任意时刻只有一个客户端可以获取锁
防死锁
避免客户端在释放锁前宕机,其他客户端无法获得锁
持锁线程解锁
锁只能由加锁者释放
可重入
可以再次获得锁
高并发数据库优化
数据库设计使用规范
根据业务和字段长度和类型
枚举 布尔 -》tinyint
数量 -》Integer
订单号 -》bigint
金额 -》decimal,不用double
经纬度坐标 -》double
日期 -》datetime,不用时间戳
尽量不用大字段
sql执行计划优化
避免全表扫描
禁止使用属性隐式转换 类型与字段类型不符
禁止在where条件的属性上使用函数或表达式
禁止负向查询
eg: NOT, !=, <>, !<, !>, NOT IN, NOT LIKE
以%开头的模糊查询
大表禁止join查询
产生的临时表消耗过多内存及数据库性能
分库分表
分库
业务分库:用户,订单,账号业务
流量会落到经常访问的业务库,不影响其他业务
分表
eg:单表数据超过500W,查询变慢
id: 创建日期时间戳+客户端id
数据分配规则:UID%数据库数量
技术落地
解决高并发都需求
mysql binlog主从架构方案分组
主:写入
从:查询
解决单库高并发数据压力过大
mysql shading集群
分库切片
JVM虚拟机
GC
说明:gc时对jvm中内存的垃圾进行收集和销毁
回收算法
1:标记清除
1.1:标记所有需要回收的对象
1.2:统一回收被标记对象
特点:效率不高,空间不连续,产生内存碎片,当分配大对象时,无法找到连续内存,被迫触发另一次垃圾回收
2:复制算法
将内存按容量分为相等的两部分,每次使用其中一块,将活着的对象复制到另一部分,将已使用的内存一次清理掉
特点:实现简单,效率高,内存缩小为一半,代价过大
3:标记整理
标记后将所有存活对象向一端移动,然后直接清理掉边界以外的内存
4:分代收集收集(常用)
把Java堆分开
新生代
特点:回收率高,采用复制算法
老年代
特点:存活率高,采用标记清楚算法或标记整理
永久代
方法区永久代:存储class类,变量,方法描述
特点:回收废弃的常量,无用的类
stop the world
项目问题
JVM故障分析
gc卡断
线程停顿
cpu分析 通过top命令
jstack [pin]的堆栈信息分析
可能原因
线程中无线空循环
正则表达式无限制向上匹配
无阻塞
线程上下文切换
文件io和网络io阻塞
面试笔记9.21
最新推荐文章于 2024-09-12 18:18:07 发布