maven依赖关系 最短路径原则在最后一级,最后声明原则不在第一级,谁先引用先使用谁第一种:通过exclusion 排除不需要的依赖第二种:使用【dependencyManagement】指定使用哪一个版本的依赖。作用:统一版本管理/指定依赖管理第三种(必杀):直接在jar包中删除冲突了的(多余的那个依赖)对应的package包。直接删除文件,但是jar需要放到私有仓库里面...
Websocket应用 概念TCP 全双工通信协议 双向 数据传输代码实现引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId></dependency> Configuration配置 @Configurationpublic class W.
ThreadLocal作用 private static ThreadLocal threadLocal = new ThreadLocal<>();线程内部的共享变量ThreadLocalMap是ThreadLocal的内部类,由ThreadLocal创建,所有的value都存储在ThreadLocalMap中。ThreadLocalMap.Entry 继承了weakReference每个Entry对象都有一个threadLocal的弱引用。GC对弱引用对象采取积极回收的内存回收策略。用完threadlo
幂等性技术 使用场景购物下单生成订单支付扣款库存扣减物流发货解决方案前端前端防重RPG模式 :Post Direct Get 重定向到另外一个页面,防止刷新 Token机制:对业务代码执行和删除token整体加线程锁,其它线程排队阻塞 借助单线程redis incr 第一次获取token并incr返回1,如果第二次incr后返回2就是合法请求,如果为其它值,就为非法请求直接返回。 最优解 校验删除token,第一次token存入redis,第二次执行业务删除token,如...
mysql sql优化 避免不走索引 like'你%' in () not in() 修改为exist not exist 避免全表扫描 union替代or where 1=1 <> 或者!= 联合索引最左匹配 隐式转换无法走索引 a = 123 为varchar 小表在前大表在后 批量插入语句 整合成一条 union all 性能高 union性能低 explain 分析字段的索引级别...
java代码review 代码审查工具 代码书写风格是否一致 日志是否全,出现错误打印错误日志 减少硬编码、配置文件注释 锁的粒度控制、何时释放锁 内存泄漏问题 降低反映速度 for循环带读写操作...
雪花算法原理 概念标识位+41位时间戳+5位数据中心ID+5位工作机器ID+12位自增序列64bits整数ID1 bit :固定为041bit:时间戳 2^24 -1 个毫秒值10bit:5个机房ID ,5个机器ID 根据公司情况定制12bit :自增序列 2^12-1 =4096个优点:时间回拨后,生成ID会重复,保证网络时间一致springboot yaml中配置机器编号shadring配置yaml中需要配置workid美团LEAF-SNOWFLAKE使用zookeep..
缓存击穿 缓存雪崩 缓存穿透 适合缓存的场景访问频率高、读多写少、一致性要求低缓存击穿缓存在某个时间点某个key过期,这个时候大量的并发请求这个key过来,直接查询数据库把DB压垮。解决方案:定时器:elastic-job、xxl-job 多级缓存 nginx一级缓存、redis二级缓存、定时更新缓存 零点洪峰时,采用rabbitmq队列术缓存穿透缓存中一直不存在,就直接查数据库了。解决方案:查询为空还是要设置空到redis ,布隆过滤器缓存雪崩redis缓存层崩掉了,导致都到了数据...
安全控制解决方案 无效路径收集 nginx获取http请求后404,将请求地址存储到缓存,下次直接跳转404 缓存击穿 定期检测缓存过期时间,一旦过期就做队列限流控制 黑白名单过滤 每次获取ip,一旦为黑名单拒绝访问 异常熔断降级 链接指定时间内频率超过N,将路径存入缓存,一段时间内禁止访问,防止宕机。...
布隆过滤器 迅速判断一个元素是否在集合中解决大规模数据下不需要精准过滤的场景使用场景网络爬虫对URL的去重,避免爬取相同的URL地址 反垃圾邮件,从数十亿个垃圾邮件列表判断是否为垃圾邮箱 缓存穿透 原理维护一个全为0的bit数组误判率:数组越长,误判率越低,所占空间越大。 数组越短,误判率越高,所占空间越小。假设我们生成10位的数组,以及两个hash函数,f1,f2。假设输入集合N1,N2 ,f1(N1) = 2 ,f2(N2) =5 ,那么数组下标2 和小标5的值就从0重置...
大数据hadoop工具 导入文件 :yum install -y lrzsz导出文件 :sz 文件杀掉所有的进程jps -q | xargs killrpm -qa|grep ntpsudo service ntpd statuschkconfig yum install ntp ntpdatehadoop -dfs -appendToFIle - /test/a 1234 标准追加hdfs...
大数据hadoop工具 导入文件 :yum install -y lrzsz导出文件 :sz 文件杀掉所有的进程jps -q | xargs killrpm -qa|grep ntpsudo service ntpd statuschkconfig yum install ntp ntpdatehadoop -dfs -appendToFIle - /test/a 1234 标准追加hdfs...
生产者消费者问题 /* * 生产者与消费者问题: * * (1)线程安全问题:因为生产者与消费者共享“缓冲区”,本例中工作台 * (2)缓冲区大小有限问题,所以需要生产者与消费者“协调”工作 * 一个wait一个notify * * * 解决方法: * (1)wait() * (2)notify()/notifyAll() * notiyAll 多个生产者消费者才使用 * ...
线程锁 -卖票机制 public class TicketService { ArrayList<String> list = new ArrayList<>() ; //private Vector list = new Vector (); vector中方法 remove 和size 是有锁 public TicketService(){ list.add(...
龟兔比赛 多线程 /***龟兔比赛*编写龟兔赛跑多线程程序,设置赛跑长度为30米兔子的速度是10米每秒 兔子跑完10米后休眠的时间为10秒乌龟的速度是1米每秒 乌龟跑完10米的休眠时间是1秒要求兔子和乌龟的线程西结束 主线程才能公布最后的结果*/public class TestWuGuiTrace { public static void main(String[] args) {...
Redis RDB和AOF取舍和选择 RDB和AOF的选择RDB和AOF对比命令RDBAOF启动优先级低高体积小大恢复速度快慢数据安全性丢数据根据策略决定轻重重轻RDB最佳策略关集中管理-主从,从开AOF 最佳策略开:缓存和存储AOF重写集中管理everysec标题最佳策略小分片缓存或者存储监控(硬盘,内存 负载 网络 ...
redis AOF RDB问题:耗时耗性能容易丢失数据耗时耗性能O(n)数据 耗时fork() :消耗内存,copy-on-write 策略Disk I/O :IO性能不可控 丢失数据时间saveT1执行多个写命令T2满足RDB自动创建的条件T3再次执行多个写命令T4宕机AOF 运行原理 -创建set hello worldAOF文件 ...
redis持久化的取舍和选择 持久化redis所有数据保持在内存中,对数据的更新将异步的保存在磁盘上持久化方式快照 1: Mysql dump 2:redis rdb写日志 1:mysql binlog 2: hbase hlog 3:redis aofRDBredis创建内存--- RDB(二进制)硬盘中redis启动载入 ----RDB(二进制)触发机制 主要三种方式save(同步...
redis持久化的取舍和选择 持久化redis所有数据保持在内存中,对数据的更新将异步的保存在磁盘上持久化方式快照 1: Mysql dump 2:redis rdb写日志 1:mysql binlog 2: hbase hlog 3:redis aofRDBredis创建内存--- RDB(二进制)硬盘中redis启动载入 ----RDB(二进制)触发机制 主要三种方式save(同步...