- 博客(12)
- 收藏
- 关注
原创 网络编程 总结
IO描述了计算机系统和外部设备通信的过程。常见IO有磁盘IO和网络IO。从应用程序角度来理解IO,进程的地址空间分成用户空间和内核空间,我们平时使用的应用程序都是运行在用户空间,当需要操作系统级别的资源的时候(如内存管理、文件管理、进程通信),就需要依赖内核空间。当用户进程需要执行IO操作,需要向内核发起系统调用,由内核执行具体IO操作。执行具体IO读操作,内核经历两个步骤:1.等待数据读到内核缓冲区2.将内核缓冲区的数据从内核空间拷贝到用户空间的用户缓冲区中。
2024-06-01 18:00:28
763
1
原创 设计模式 总结
1、职责要单一,类和接口的粒度要适中,类要有内聚性 (单一职责,接口隔离) 高内聚2、面向抽象编程,要依赖抽象,而不依赖具体 要解耦合、(开闭原则,依赖倒置,迪米特法则) 低耦合 可扩展,可维护3、类和类之间的关联要紧凑,只依赖必要的接口(迪米特法则) 低耦合4、组合优于继承,继承后最好不要重写(最好保证继承的作用是代码复用),如果重写不要采用一些手段禁用方法(里式替换原则)
2024-06-01 17:59:28
1434
原创 Spring 知识总结
然后B要属性注入A,就会去三级缓存中调用A的对象工厂来获得A的半成品对象,然后把这个对象注入到B中,然后把A存入二级缓存,清除A的三级缓存,然后再走完B的生命周期的流程,当B创建完之后,把B加入到一级缓存,清除B的三级缓存,然后A进行属性注入,把一级缓存的B注入到A中,然后走完A的生命周期的流程,然后把A加到一级缓存,清除A的二级缓存。@Autowired默认是根据接口类型注入的,如果没找到这个类型或找到多个类型,就会改成根据名称注入,这里的名称是指根据变量的名称,将首字母大写,然后去匹配实现类的类名。
2024-06-01 17:58:38
701
原创 Java 并发编程 总结
Java的线程一对一 对应了内核线程提供的接口:轻量级进程,所以可以说一个Java线程对应一个内核线程,因此Java线程进行创建、阻塞、唤醒等操作,都需要由内核来操作,也就是需要系统调用,就需要从用户态切换到核心态,开销是比较大的,并且Java线程数量受到内核线程数量的约束。虚拟线程是JDK实现的轻量级线程,它不再是Java线程一对一内核线程,而是将多个虚拟线程映射到少量的操作系统线程,通过一些调度方式来避免上下文切换。没有了上下文切换,开销就很小。
2024-06-01 17:57:12
1762
原创 Redis 学习总结
假如项目刚上线,那大多数用户肯定都没有申请,那请求都会打到数据库,这就是一个缓存穿透现象,如果我们把空值存到redis缓存里面,那缓存过期时间也不好设置,而且用户如果后面申请了试用,刷了一下数据库,又会带来缓存一致性问题,还需要同步缓存,虽然说也能弄,但是会麻烦很多,缓存同步还得引入新的中间件,可能会带来更大的维护成本。线程A删除缓存后,还没能操作完数据库,线程B来查询缓存,发现缓存为空,则去查询数据库,并更新缓存,此时更新的缓存是旧数据,然后A线程再操作数据库,数据库数据变成新的了。
2024-06-01 17:52:26
1409
原创 轻松搞定JUC包-Java并发编程
在创建了线程池后,默认情况下,线程池中并没有任何线程,而是等待有任务到来才创建线程去执行任务,除非调用了 prestartAllCoreThreads()或者 prestartCoreThread()方法,从这 2 个方法的名字就可以看出,是预创建线程的意思,即在没有任务到来之前就创建 corePoolSize 个线程或者一个线程。默认情况下,在创建了线程池后,线程池中的线程数为 0,当有任务来之后,就会创建一个线程去执行任务,若添加失败(一般来说是任务缓存队列已满),则会尝试创建新的线程去执行这个任务;
2023-03-28 17:42:19
205
原创 JMM(Java 内存模型)总结
一个变量在同一时刻只允许一条线程对其进行 lock 操作,lock 和unlock 必须成对出现如果对一个变量执行 lock 操作,将会清空工作内存中此变量的值,在执行引擎使用这个变量前需要重新执行 load 或 assign 操作初始化变量的值。线程的工作内存中保存了该线程使用到的变量到主内存副本拷贝,线程对变量的所有操作(读取、赋值)都必须在工作内存中进行,而不能直接读写主内存中的变量。:作用于工作内存的变量,把工作内存中的一个变量的值传送到主内存中,以便随后的 write 的操作。
2023-03-28 17:03:37
127
1
原创 JVM详解-类加载机制、类加载器、双亲委派模型
双亲委派模型工作过程:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成 ,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有当父类加载器反馈自己无法完成这个加载请求时,子类才会尝试加载。比较两个类是否相等,只有在这两个类是由同一个类加载器加载的前提下才有意义,否则,即使这两个类来源于同一个Class 文件,被同一个虚拟机加载,只要加载它们的类加载器不同,那这两个类就必定不相等。会初始化该类及该类的所有父类;
2023-03-28 16:53:20
271
原创 JVM详解-垃圾回收机制
目录垃圾收集算法1、标记-清除算法(Mark-Sweep)2、复制算法3、标记-整理算法JVM垃圾收集器 1、Serial2、ParNew3、Parallel Scavenge 收集器4、Serial Old 收集器5、Parallel Old 收集器6、CMS(Concurrent Mark Sweep)收集器7、G1(Garbage-First)收集器JVM 垃圾回收机制垃圾收集算法1、标记-清除算法(Mark-Sweep)
2023-03-27 15:31:42
404
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人