摘要: public class Storage { private final int MAX_SIZE = 10; private LinkedList<Object> list = new LinkedList<>(); public void produce() { while (true) { s 阅读全文
posted @ 2022-09-23 11:15 空中行走的鱼 阅读(23) 评论(0) 推荐(0)
摘要: 并发编程可以总结为3个核心问题: 分工:指的是如何高效的拆解任务并分配给线程 同步:指的是线程之间如何协作 互斥:则是保证同一时刻只允许一个线程访问共享资源 JavaSDK并发包很大部分都是按照这三个维度组织的: 进一步的,个人理解,三大核心问题又可以聚焦于2大点: 管程(synchronized、 阅读全文
posted @ 2022-08-26 19:25 空中行走的鱼 阅读(454) 评论(0) 推荐(1)
摘要: 接口幂等性是指用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。这类问题多发于接口的insert和update操作。 前端web页面触发接口后置灰(多长时间内不能重复触发),这是幂等问题解决的第一道防火墙。 insert前先select。 不适合并发场景。 数 阅读全文
posted @ 2022-08-24 18:13 空中行走的鱼 阅读(10) 评论(0) 推荐(0)
摘要: ##Redis基础 Redis的应用场景:分布式缓存,分布式锁,秒杀活动中实现计数器(String),延时任务(zset),消息队列(list,stream),附近的人(GeoHash),布隆过滤器 Redis基本数据结构: String,list,hash,set,zset,位图,HyperLog 阅读全文
posted @ 2022-08-24 16:52 空中行走的鱼 阅读(23) 评论(0) 推荐(0)
摘要: cpu是整个电脑的核心计算资源,对于一个应用进程来说,cpu的最小执行单元是线程。 导致cpu飙高的原因有几个方面: cpu上下文切换过多,对于cpu来说,同一时刻下每个cpu核心只能运行一个线程,如果有多个线程要执行,cpu只能通过上下文切换的方式来执行不同的线程。上下文切换需要做两个事情: 保存 阅读全文
posted @ 2022-07-13 10:55 空中行走的鱼 阅读(522) 评论(0) 推荐(0)
摘要: 四大常用算法:分治、贪心、回溯、动态规划 回溯算法是个“万金油”。基本上能用跟动态规划、贪心解决的问题,都可以用回溯去解决。回溯算法相当于穷举搜索,穷举所有情况,然后得到最优解。不过回溯算法时间复杂度非常高,指数级的,只能解决小规模数据问题。对于大规模数据,执行效率就相当低。 void backtr 阅读全文
posted @ 2022-07-13 10:25 空中行走的鱼 阅读(279) 评论(0) 推荐(0)
摘要: ###模拟20辆车进停车场 停车场容纳总停车量5。 当一辆车进入停车场后,显示牌的剩余车位数响应的减1. 每有一辆车驶出停车场后,显示牌的剩余车位数响应的加1。 停车场剩余车位不足时,车辆只能在外面等待 public class Park { static Semaphore semaphore=n 阅读全文
posted @ 2022-07-13 10:04 空中行走的鱼 阅读(60) 评论(0) 推荐(0)
摘要: 常见解法: 1. synchronized+wait/notify 2. join() 3. 自旋+volatile 4. Lock 5. Lock+Condition 6. Semaphore 1. synchronized 关键字 //一个线程打印1~ 52,另一个线程打印A~Z,打印顺序是12 阅读全文
posted @ 2022-07-12 14:42 空中行走的鱼 阅读(80) 评论(0) 推荐(0)