随笔分类 -  Java学习之路

摘要:原文:https://mp.weixin.qq.com/s/kS0K5P4FdF3v-fiIjGIvvQ 解决循环依赖整个过程 滴滴 阅读全文
posted @ 2021-10-21 14:00 朝才 阅读(68) 评论(0) 推荐(0)
摘要:(一) new 一个对象发生了什么? 1 确认类原信息是否存在 (1) JVM收到new 指令时 在metaspace 中检查需要创建的类元信息是否存在 (2) 若不存在,那么在双亲委派模式下,使用当前类加载器以 ClassLoader + 包名+类名为 Key 进行查找对应的 class 文件 ( 阅读全文
posted @ 2021-07-23 23:59 朝才 阅读(321) 评论(0) 推荐(0)
摘要:(一)事务传播机制 7种 Required (默认): 如果当前没有事务,就新建一个事务,如果已存在一个事务中 加入到这个事务中,这是最常见的选择。 Supports : 支持当前事务,如果没有当前事务,就以非事务方法执行。 Mandatory : 中文翻译为强制,支持使用当前事务,如果当前事务不存 阅读全文
posted @ 2021-07-12 18:10 朝才 阅读(2602) 评论(0) 推荐(1)
摘要:(一)传统bean 的生命周期 在传统的java 应用中,bean 的生命周期很简单。使用Java关键字new 进行实例化, 然后bean 就可以使用了, 一旦该bean 不再被使用,则由Java自动进行垃圾回收。 (二)Spring 的生命周期 Spring 容器中的bean的生命周期就显得相对复 阅读全文
posted @ 2021-05-09 22:49 朝才 阅读(7907) 评论(0) 推荐(0)
摘要:死锁定义: 死锁是两个或更多线程阻塞着等待其它处于死锁状态的线程所持有的锁。死锁通常发生在多个线程同时但以不同的顺序请求同一组锁的时候。 例如:如果线程1锁住了A,然后尝试对B进行加锁,同时线程2已经锁住了B,接着尝试对A进行加锁,这时死锁就发生了 java 死锁产生的四个必要条件: 1、互斥使用, 阅读全文
posted @ 2021-04-19 16:31 朝才 阅读(380) 评论(0) 推荐(0)
摘要:(一) 为什么使用线程池 1 降低资源消耗,提高线程利用率,降低创建和销毁线程的消耗 2 提高响应速度,任务来了,直接有线程可用可执行,而不是创建线程,在执行 (二) 线程池参数 1 corePoolSize : 代表的是核心线程数,也就是正常情况下创建工作的线程数,表示最大允许被创建的线程数, 比 阅读全文
posted @ 2021-03-23 22:21 朝才 阅读(217) 评论(0) 推荐(0)
摘要:(一) 串行 串行在时间上不可能发生重叠,前一个任务没搞定,下一个任务就只能等着。 (二) 并行 并行在时间上是重叠的,两个任务在同一时刻互不干扰的同时执行 (三) 并发 并发允许两个任务彼此干扰,同一时间点,只有一个任务运行,交替执行 基本概念 阅读全文
posted @ 2021-03-23 20:47 朝才 阅读(470) 评论(0) 推荐(0)
摘要:TheadLocal 内存泄漏的根源是: 由于ThreadLocalMap的生命周期跟Thread一样长, 如果没有手动删除对应的key就会导致内存泄漏,而不是因为弱引用 (一) ThreadLocalMap的 key 为 ThreadLocal =》弱引用 (二) ThreadLocal正确的使用 阅读全文
posted @ 2021-03-23 00:01 朝才 阅读(93) 评论(0) 推荐(0)
摘要:(一)Redis 4.0 混合持久化 重启Redis时,我们很少使用RDB来恢复内存状态,因为会丢失大量数据。我们通常使用AOF日志重放。 但是重放AOF日志性能相对RDB来说要慢很多,这样在Redis实例很大的情况下,启动需要花费很长的时间。 Redis4.0 为了解决这个问题,带来了一个新的持久 阅读全文
posted @ 2021-02-26 23:07 朝才 阅读(4067) 评论(0) 推荐(1)
摘要:(一)RDB快照 在默认情况下,Redis将内存数据快照保存在名字为dump.rdb的二进制文件中 可以对Redis进行设置,让它在 N秒内数据集至少有M个改动 这一条件被满足时,自动保存一次数据集 例如: 以下设置会让Redis在满足 60秒内至少有1000个键被改动 这一条件 自动保存一次数据集 阅读全文
posted @ 2021-02-25 22:04 朝才 阅读(122) 评论(0) 推荐(0)
摘要:(一) 实现分布式锁需要注意的问题 数据库乐观锁 => 提交的时候才去锁定, 根据版本进行冲突检测 基于Redis的分布式锁 基于Zookeeper的分布式锁 (二)Redis 分布式锁 为确保分布式锁可用,只少满足以下四个条件 1 互斥性 => 任意时刻,只有一个客户端持有锁 2 不会发生死锁 = 阅读全文
posted @ 2021-02-25 20:16 朝才 阅读(543) 评论(0) 推荐(0)
摘要:前言: 分布式ID解决方案 1 自增 2 UUID 3 redis 原子 4 mp 策略 => 雪花算法 snowflake (一) 雪花算法思想 思想: 世界上不存在两片完全一样的雪花 雪花ID: 纯数字且有时间顺序 (二) 雪花ID 组成 雪花长度:64bit 1 bit 不用 首位无效符 41 阅读全文
posted @ 2021-02-25 19:03 朝才 阅读(505) 评论(0) 推荐(0)
摘要:(一)ThreadPoolExecutor 提交优先级 和 执行优先级 提交优先级 : 核心线程(corePoolSize) => 队列() => 最大线程数(MaximumPoolSize) 执行优先级 : 核心线程(corePoolSize) => 最大线程数(MaximumPoolSize)= 阅读全文
posted @ 2021-02-23 14:13 朝才 阅读(80) 评论(0) 推荐(0)
摘要://字节流 行读取 String File file = new File("C:\\Users\\Administrator\\Desktop\\test.txt"); BufferedReader bufferedReader = new BufferedReader(new FileReade 阅读全文
posted @ 2021-01-03 22:55 朝才 阅读(406) 评论(0) 推荐(0)
摘要:(一) 同步阻塞IO -> BIO 阻塞IO 指的是需要内核IO操作彻底完成后,才返回到用户空间执行用户的操作 Java 中默认创建的socket都是阻塞的 (二) 同步非阻塞IO -> NIO 非阻塞IO,指的是用户空间的程序不需要等待内核IO彻底完成,可以立即返回用户空间执行用户的操作,即处于非 阅读全文
posted @ 2020-08-17 21:16 朝才 阅读(180) 评论(0) 推荐(0)
摘要:(一) 10大特点 速度快,不需要等待磁盘IO,在内存之间进行数据存储和查询,速度非常快。 当然缓存不能太大,受到物理内存的影响 丰富的数据结构,除了string 还有list hash set zset 五种数据类型 单线程,避免了线程切换和锁机制的性能消耗 可持久化支持RDB与AOF两种方式,将 阅读全文
posted @ 2020-08-17 20:05 朝才 阅读(510) 评论(0) 推荐(0)
摘要:(一) I/O模型 I/O模型: 就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能 Java 支持三种网络编程模型: BIO NIO AIO BIO 同步并阻塞(传统阻塞型) 服务器实现模式为一个连接一个线程,即客户端有连接请求时服务端就需要启动一个 线程进行处理,如果这个连接 阅读全文
posted @ 2020-07-09 00:01 朝才 阅读(336) 评论(0) 推荐(0)
摘要:(一) 前置知识 -- 泊松分布 hash桶中存放的链表长度概率 随着长度的增加而减小 hashmap中的源码注释 (二) 为什么到8转为红黑树 到6转为链表 TreeNodes(红黑树)占用空间是普通Nodes(链表)的两倍,为了时间和空间的权衡。 节点的分布频率会遵循泊松分布,链表长度达到8个元 阅读全文
posted @ 2020-07-04 15:02 朝才 阅读(8952) 评论(1) 推荐(0)
摘要:(一) 布隆过滤器释义 布隆过滤器: 是一种数据结构 作用: 布隆过滤器可以用于检索一个元素是否在一个集合中 优点: 它的优点是空间效率和查询时间都比一般的算法要好的多 缺点: 是有一定的误识别率和删除困难 核心思想 : 利用多个不同的Hash函数来解决“冲突” (二) 布隆过滤器 数据结构 思想来 阅读全文
posted @ 2020-06-30 23:23 朝才 阅读(201) 评论(0) 推荐(0)
摘要:Java锁结构图 (一) 乐观锁 悲观锁 悲观锁和乐观锁是一种广义的概念,体现的是看待线程同步的不同的角度 悲观锁认为自己在使用数据的时候,一定有别的线程来修改数据,在获取数据的时候会先加锁,确保数据不会被别的线程修改。 锁实现:关键字synchronized、接口Lock的实现类 使用的场景:写操 阅读全文
posted @ 2020-06-26 12:22 朝才 阅读(364) 评论(0) 推荐(0)