- 博客(8)
- 收藏
- 关注
原创 “从零开始:了解和掌握零拷贝“
当某个程序或已存在的进程需要某段数据时,它只能在用户空间中属于它自己的内存中访问、修改,这段内 存暂且称之为 user buffer 正常情况下,数据只能从磁盘(函数,数据可以直接在内核空间进行传输,因此避免了用户空间和内核空间的拷贝,同时由于 使用sendfile。一样数据对用户空间不可见,而且需要硬件支持,同时输入文件描述符只能是文件,但是过程中完全没有CPU。系统调用读取数据,由用户态切换为内核态,然后一直阻塞等待数据的返回。把读缓冲区数据拷贝到应用缓冲区,上下文从内核态转为用户态,
2023-09-07 14:55:27
75
1
原创 redis五大数据结构
QuickList是 linkList 和 zipList 的结合,linkList的每一个节点都是一个zipList,当zipList中的元素达到一定的量的时候就会创建linkList另外一个节点的zipList。Redis 的 List 对象的底层实现之一就是链表。C 语言本身没有链表这个数据结构的,所以 Redis 自己设计了一个链表数据结构。存储的SDS长度 > 4 会采用 RAW 编码 基于动态字符串数组 SDS 实现的。存储的SDS长度
2023-08-20 11:37:35
62
1
原创 深入了解循环依赖!!!
Component// A中注入了B@Autowired@Component// B中也注入了A@Autowired上面这种现象产生了循环依赖。
2023-07-22 19:32:08
84
原创 IOC机制(简单易懂)
当Spring容器扫描到Bean类时 , 会把这个类的描述信息, 以包名加类名的方式存到beanDefinitionMap 中, Map , 其中 String是Key , 默认是类名首字母小写 , BeanDefinition , 存的是类的定义(描述信息) , 我们通常叫BeanDefinition接口为 : bean的定义对象。可以扩展一些功能,比如:配置文件占位符替换值,还可以程序运行中去修改Bean信息。//在wrapIfNecessary方法里有。
2023-07-11 18:44:12
92
1
原创 Hashmap插入元素原理解析:从底层数据结构到算法实现
int h;int n, i;// 如果没有hash碰撞则直接插入元素else {......
2023-06-21 19:36:09
271
原创 ConcurrentHashMap底层原理是什么
如果该节点的hash大于等于0,表示此桶是链表,然后对该桶进行遍历(死循环),寻找链表中与put的key的hash值相等,并且key相等的元素,然后进行值的替换,如果到链表尾部都没有符合条件的,就新建一个node,然后插入到该桶的尾部,并终止该循环遍历。根据hash值获取table中该下标对应的节点,如果该节点为空,则根据参数生成新的节点,并以CAS的方式进行更新,并终止死循环。如果该节点的hash小于0,并且节点类型是TreeBin,则走红黑树的插入方式。与HashMap一样采用:数组+链表+红黑树。
2023-06-21 16:49:00
331
原创 Java引用战争:四大引用的较量
总的来说,强引用是最常见且默认的引用类型,而软引用、弱引用和虚引用则具有不同程度的引用弱化,它们能够更灵活地控制对象的生命周期和垃圾回收行为,使得 Java 的垃圾回收机制更加灵活和高效。开发者可以根据具体的需求选择适合的引用类型来管理对象的生命周期和资源清理。
2023-06-18 20:25:39
89
1
原创 “乐观锁和悲观锁:谁更适合应对多线程的恶魔?“
悲观锁和乐观锁是两种并发控制的策略,用于解决多线程环境下的数据竞争问题。它们的主要区别在于对于并发操作的处理方式。假设并发操作会导致冲突,因此在访问共享资源之前会先获取锁。当一个线程获取到锁后,其他线程需要等待锁的释放才能继续执行。悲观锁适用于并发冲突较多的场景,例如数据库的行级锁。假设并发操作不会导致冲突,因此在访问共享资源之前不会获取锁。当一个线程要更新共享资源时,会先读取当前的值,并在更新时进行比较,如果值没有被其他线程修改,则更新成功,否则需要重试。
2023-06-15 18:49:39
224
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人