随笔分类 - 后端八股
            
    netty内存池记录
    
            
            
        
摘要:在 Netty 的 PoolChunk 中,分配内存的核心逻辑是通过 allocateNode(int d) 方法实现的,其中 d 表示所需内存块在二叉树中的深度(层级)。以下是针对请求分配大小为 p 的内存块的完整流程和代码解析: 1. 确定所需内存的深度 d 首先需要将请求的内存大小 p 转换为
        阅读全文
            
        
            
    Kafka 可变长度编码
    
            
            
        
摘要:Kafka 协议中使用了可变长度(Varints)和可变长度字节数组(VarBytes)的编码方式,这是一种高效的数据表示方法。 可变长度整数(Varints) Kafka 使用可变长度编码来表示整数,这种编码的特点是: 较小的数字占用较少的字节 每个字节的最高位用作标志位,表示是否还有后续字节 实
        阅读全文
            
        
            
    reactor 与 proactor
    
            
            
        
摘要:reactor ①主线程往epoll内核事件表中注册socket上有数据可读 ②主线程调用epoll_wait等待socket上有数据可读 ③当socket上有数据可读时,epoll_wait通知主线程。主线程则将socket可读事件放入请求队列 ④睡眠在请求请求队列上的某个工作线程被唤醒,它从so
        阅读全文
            
        
            
    VariableLinkedBlockingQueue 是一个支持动态调整容量的线程安全阻塞队列,适用于需要灵活扩展或收缩队列大小的并发场景。
    
            
            
        
摘要:VariableLinkedBlockingQueue 实现动态扩展的核心是通过 setCapacity(int) 方法动态调整队列的容量,并在调整容量时确保线程安全和数据一致性。以下是其实现动态扩展的关键机制: 1. 动态调整容量的实现 setCapacity(int capacity) 方法是实
        阅读全文
            
        
            
    并发编程记录
    
            
            
        
摘要:原子性,可见性,有序性 happens-before 原则6条 管程: 互斥:临界区,共享资源 同步 条件变量,等待队列 关于活锁中的"谦让":比如释放锁 CopyOnWriteList ,所谓写时复制: 1. 读的时候读原数据 2. 写(全程加锁):原来的数据可能被读,考虑开一个副本再写,然后替换
        阅读全文
            
        
            
    threadpool execute( )
    
            
            
        
摘要:线程池的execute实现逻辑: 向线程池提交一个任务,如果线程数不超过核心线程数,就创建线程,否则加入阻塞队列。这里创建的"线程"是一个包装thread类(通过继承)的类,其中run( ) 是一个循环,不断从阻塞队列中取任务执行 final void runWorker(Worker w) { R
        阅读全文
            
        
            
    如何批量执行异步任务?
    
            
            
        
摘要:现在有多个异步任务需要处理,考虑用阻塞队列 给线程池提交任务: 将future结果加入阻塞队列 这样先执行完成的可以先消费 BlockingQueue<Integer> bq = new LinkedBlockingQueue<>(); //电商S1报价异步进入阻塞队列 executor.execu
        阅读全文
            
        
            
    Future 与 FutureTask与线程池
    
            
            
        
摘要:FutureTask 有future与Runnable的特征 (实现interface) 线程池execute(Runnable) 返回 Future<> future , 可以通过 future.get( ) 获取结果 也可以把FutureTask 提交到线程池执行,然后直接task.get( )
        阅读全文
            
        
            
    关于异步任务
    
            
            
        
摘要:以下是一些常见的异步技术及其底层机制: 基于事件循环 机制:通过事件驱动模型(如观察者模式)管理任务,任务会被挂起并在有事件通知时重新调度。 特点:通常在单线程中执行,避免了线程间的切换开销。 例子: Node.js 的事件循环 Python 的 asyncio 库 基于回调 机制:任务完成后通过回
        阅读全文
            
        
            
    go 语法的一些记录
    
            
            
        
摘要:关于slice https://juejin.cn/post/6844904177022271501 在无缓冲的 Channel 中,发送和接收操作是同步的。 context: 一个接口; 其中 Done() 方法返回一个channel (比如在withCancel类型中,调用cancel() 将给
        阅读全文
            
        
            
    java集合 ,并发
    
            
            
        
            
        
            
        
摘要:arraylist并发操作时的问题? 索引越界,覆盖 公平锁与非公平锁? 排队获取锁,先进先出;一个线程获取锁时直接尝试获取,失败了再排队,成功了就获取到锁
        阅读全文
            
        
            
    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;
        阅读全文
            
        
            
    两个线程交替写1~100
    
            
            
        
摘要:package Test; public class PrintNumber { private int status = 1 ,cnt = 1; synchronized void print_odd() { while(cnt<100) { while (status == 2) { try {
        阅读全文
            
        
            
    synchronize关键字 原理
    
            
            
        
摘要:一个monitor 同一时间只被一个线程获取 使用monitorenter ,monitorexit 指令,指令执行时,当前线程判断: 1. monitor的计数器 =0 ,没有被任何线程获取 2. 被其他线程获取 3. 被当前线程获取(可重入)
        阅读全文
            
        
            
    布隆过滤器和 set
    
            
            
        
摘要:用于查询集合中是否有某个元素 布隆过滤器的优点 空间效率高: 布隆过滤器是一种基于位数组和多个哈希函数的数据结构。相对于 Redis 的 Set(基于哈希表实现),布隆过滤器在存储大量元素时,占用的空间更少。 当存储非常庞大的数据集时,布隆过滤器能够显著减少内存占用,比如在内存受限或者数据量极大的场
        阅读全文
            
        
            
    java传递对象
    
            
            
        
摘要:说下引用类型的,比如一个对象,那么这个对象是分配在堆上的,那么就是传递了一个const指针过去 改指针的指向不会对原来的对象产生影响的; 修改地址对应的堆上的变量的信息,当然会有影响
        阅读全文
            
        
            
    字符串常量池
    
            
            
        
摘要:执行 new String("hello") 可能创建 一个或两个对象,具体情况取决于 "hello" 是否已经存在于字符串常量池中。 情况分析 如果常量池中已存在 "hello" 字符串: new String("hello") 会直接在堆中创建一个新的 String 对象,并且这个对象的值指向常
        阅读全文
            
        
            
    epoll ----多路复用
    
            
    
摘要:epoll是 多路复用的一个实现 linux内核提供了epoll : epoll_ create () epoll_ ctl () epoll_wait () 1. 使用红黑树帮助组织fd ,fd的 crud 很高效 2. io事件准备完毕的监测? poll 回调机制: fd 告诉epoll准备完毕
        阅读全文
            
        
 
                    
                 
 浙公网安备 33010602011771号
浙公网安备 33010602011771号