随笔 - 530  文章 - 0  评论 - 3  阅读 - 10098 

随笔分类 -  后端八股

并发编程记录
摘要:原子性,可见性,有序性 happens-before 原则6条 管程: 互斥:临界区,共享资源 同步 条件变量,等待队列 关于活锁中的"谦让":比如释放锁 CopyOnWriteList ,所谓写时复制: 1. 读的时候读原数组 2. 写(需加锁):创建新数组,把原来的所有东西复制过去,然后更改数组 阅读全文
posted @ 2025-01-15 22:54 towboat 阅读(1) 评论(0) 推荐(0) 编辑
threadpool execute( )
摘要:线程池的execute实现逻辑: 向线程池提交一个任务,如果线程数不超过核心线程数,就创建线程,否则加入阻塞队列。这里创建的"线程"是一个包装thread类(通过继承)的类,其中run( ) 是一个循环,不断从阻塞队列中取任务执行 final void runWorker(Worker w) { R 阅读全文
posted @ 2025-01-02 22:05 towboat 阅读(5) 评论(0) 推荐(0) 编辑
如何批量执行异步任务?
摘要:现在有多个异步任务需要处理,考虑用阻塞队列 给线程池提交任务: 将future结果加入阻塞队列 这样先执行完成的可以先消费 BlockingQueue<Integer> bq = new LinkedBlockingQueue<>(); //电商S1报价异步进入阻塞队列 executor.execu 阅读全文
posted @ 2025-01-02 21:40 towboat 阅读(4) 评论(0) 推荐(0) 编辑
Future 与 FutureTask与线程池
摘要:FutureTask 有future与Runnable的特征 (实现interface) 线程池execute(Runnable) 返回 Future<> future , 可以通过 future.get( ) 获取结果 也可以把FutureTask 提交到线程池执行,然后直接task.get( ) 阅读全文
posted @ 2025-01-02 15:24 towboat 阅读(5) 评论(0) 推荐(0) 编辑
关于异步任务
摘要:以下是一些常见的异步技术及其底层机制: 基于事件循环 机制:通过事件驱动模型(如观察者模式)管理任务,任务会被挂起并在有事件通知时重新调度。 特点:通常在单线程中执行,避免了线程间的切换开销。 例子: Node.js 的事件循环 Python 的 asyncio 库 基于回调 机制:任务完成后通过回 阅读全文
posted @ 2024-12-29 21:28 towboat 阅读(8) 评论(0) 推荐(0) 编辑
go 语法的一些记录
摘要:关于slice https://juejin.cn/post/6844904177022271501 在无缓冲的 Channel 中,发送和接收操作是同步的。 如果一个 Goroutine 向一个无缓冲的 Channel 发送数据,它将一直阻塞,直到另一个 Goroutine 从该 Channel  阅读全文
posted @ 2024-11-24 18:53 towboat 阅读(3) 评论(0) 推荐(0) 编辑
java集合 ,并发
摘要:arraylist并发操作时的问题? 索引越界,覆盖 公平锁与非公平锁? 排队获取锁,先进先出;一个线程获取锁时直接尝试获取,失败了再排队,成功了就获取到锁 阅读全文
posted @ 2024-11-18 12:33 towboat 阅读(2) 评论(0) 推荐(0) 编辑
接口幂等性
摘要:数据库 唯一索引 多维护一张表,用来查重 版本号字段 阅读全文
posted @ 2024-11-18 11:20 towboat 阅读(2) 评论(0) 推荐(0) 编辑
水平分表与水平分库
摘要:水平分库实际上是分表,把一个表的记录放到不同数据库中 水平分表把一个表的记录分到不同表中 阅读全文
posted @ 2024-11-17 15:25 towboat 阅读(3) 评论(0) 推荐(0) 编辑
mysql 时间函数
摘要:select date_add(NOW(), interval 7 day ) as tms; select date_sub(NOW(), interval 7 day ) as tms; select datediff(NOW() ,"2022-01-30") as tms; 阅读全文
posted @ 2024-11-09 11:31 towboat 阅读(3) 评论(0) 推荐(0) 编辑
两个线程交替写1~100
摘要:package Test; public class PrintNumber { private int status = 1 ,cnt = 1; synchronized void print_odd() { while(cnt<100) { while (status == 2) { try { 阅读全文
posted @ 2024-11-07 14:43 towboat 阅读(2) 评论(0) 推荐(0) 编辑
synchronize关键字 原理
摘要:一个monitor 同一时间只被一个线程获取 使用monitorenter ,monitorexit 指令,指令执行时,当前线程判断: 1. monitor的计数器 =0 ,没有被任何线程获取 2. 被其他线程获取 3. 被当前线程获取(可重入) 阅读全文
posted @ 2024-10-28 12:52 towboat 阅读(2) 评论(0) 推荐(0) 编辑
布隆过滤器和 set
摘要:用于查询集合中是否有某个元素 布隆过滤器的优点 空间效率高: 布隆过滤器是一种基于位数组和多个哈希函数的数据结构。相对于 Redis 的 Set(基于哈希表实现),布隆过滤器在存储大量元素时,占用的空间更少。 当存储非常庞大的数据集时,布隆过滤器能够显著减少内存占用,比如在内存受限或者数据量极大的场 阅读全文
posted @ 2024-10-19 00:47 towboat 阅读(17) 评论(0) 推荐(0) 编辑
java值传递
摘要:说下引用类型的,比如一个对象,那么这个对象是分配在堆上的,赋值时可以理解为赋予地址 所以改这个存地址的变量是不会对原来的对象产生影响的; 修改地址对应的堆上的变量的信息,当然会有影响 阅读全文
posted @ 2024-10-18 02:57 towboat 阅读(3) 评论(0) 推荐(0) 编辑
字符串常量池
摘要:执行 new String("hello") 可能创建 一个或两个对象,具体情况取决于 "hello" 是否已经存在于字符串常量池中。 情况分析 如果常量池中已存在 "hello" 字符串: new String("hello") 会直接在堆中创建一个新的 String 对象,并且这个对象的值指向常 阅读全文
posted @ 2024-10-17 18:20 towboat 阅读(8) 评论(0) 推荐(0) 编辑
epoll ----多路复用
摘要:epoll是 多路复用的一个实现 linux内核提供了epoll : epoll_ create () epoll_ ctl () epoll_wait () 1. 使用红黑树帮助组织fd ,fd的 crud 很高效 2. io事件准备完毕的监测? poll 回调机制: fd 告诉epoll准备完毕 阅读全文
posted @ 2024-10-17 11:02 towboat 阅读(7) 评论(0) 推荐(0) 编辑
zookeeper 记录
摘要:zookeeper集群 leader follower(参与选举) observer leader选举 1. 过半投票的机制 2 . master同步slave数据 ,保证数据一致性 3. 历史协议 4. 新leader开始工作 过半机制防止脑裂 应用 选主和故障检测(例如监控master节点健康状 阅读全文
posted @ 2024-10-14 18:39 towboat 阅读(5) 评论(0) 推荐(0) 编辑
缓存更新
摘要:改:更新数据库, 删除缓存 仍然会有缓存一致性性问题,但概率小 例如 A先查询 ,b再更新 可以看到,条件需要 写缓存时间 > 更新数据库+删除缓存 时间 阅读全文
posted @ 2024-10-13 14:13 towboat 阅读(3) 评论(0) 推荐(0) 编辑
redis 记录
摘要:redis 的单线程: 是指Redis的网络IO和键值对读写是由一个线程来完成的 诸如持久化,异步操作,集群同步都是多线程 IO多路复用: 多个客户端连接服务端时,Redis 会将客户端 socket 对应的 fd 注册进 epoll,epoll 同时监听多个文件描述符(FD)是否有数据到来,如果有 阅读全文
posted @ 2024-10-13 12:14 towboat 阅读(5) 评论(0) 推荐(0) 编辑
非对称加密与 jwt
摘要:公钥加密 的 数据只有私钥可以解密 ,反之 jwt :验证的服务器保存 私钥 , 公钥 通过一些方式传递给其他服务器 ,如配置中心 阅读全文
posted @ 2024-10-13 01:04 towboat 阅读(11) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示