- 博客(38)
- 收藏
- 关注
原创 【十年老java都不一定知道的秘密】【mybatis sqlsession 一级缓存 什么时候创建的 什么时候销毁的】springboot+mysql+mybatis
springboot 或者mvc 集成mybatis后。不需要我们手动创建和销毁sqlsession,这会让人产生很大的困惑,sqlsession 究竟是什么时候创建的 什么时候销毁的。我怎么知道我的查询是否能够使用一级缓存。如果我循环分页查询数据 不需要一级缓存来占用我们程序的内存 我们应该怎么处理来保证不使用一级缓存?我搜索了很多相关资料,没有一处能讲的明白,所以那就我来验证一下。controllerservice@Override// mapper 两个 是否相同。
2024-07-26 16:19:49
613
原创 【CentOS 7 上安装 Oracle JDK 8u333】
找到 JDK 8u333 版本,并下载适用于 Linux 的 RPM 包(例如 jdk-8u333-linux-x64.rpm)。您需要登录 Oracle 帐户才能下载。访问 https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html。使用 SCP 或 SFTP 将下载的 RPM 包上传到 CentOS 7 服务器。假设您将文件上传到 /tmp 目录。使用 yum localinstall 安装 RPM 包。
2024-07-04 17:28:24
337
原创 【vmbox centos7 网络配置】【centos7 glances 安装】【centos7 安装MySQL5.7】
此时需要的是一个复杂的密码,如果需要像root root 这样的 账号密码 需要修改密码策略。此时 enp0s8 已经有固定ip了,我们只需要启动 enp0s3 既可以获得外网。此时 使用enp0s8 的地址 连接 22端口 就可以 ssh 访问 连接服务器了。MySQL 8.0 是默认启用的,需要禁用它并启用 MySQL 5.7。运行 MySQL 安全安装脚本, 系统会提示你输入临时密码(上面的)目前 能组建集群 虚拟机网络互通,虚拟机能访问外网。那可能是mysql 需要开放所有的ip都能访问。
2024-07-04 17:12:16
801
原创 【mysql死锁】示例 和讨论 “SHOW ENGINE INNODB STATUS“
根据信息可以查看到 曾经发生锁死锁。有个一事务被回滚了。我们复制出 Status信息进行查看。在第一个命令行执行 会报错提示死锁。使用navicat 来做示例。窗口2才能自行第一句成功。
2024-06-30 14:28:30
381
原创 【设计模式】【结构型7-1】【代理模式】【动态代理】【静态代理】
可以看到 调用代理人方法 最终代理人服务被代理的对象 进行了前后包夹 无死角环绕。代理 是结构型 通过继承,或者实现相同的接口来进行增强和监控。经典的使用 spring aop,mybatis dao层。作用:可以增加功能 而不破坏现有代码结构,一定程度的解耦。
2024-06-26 17:53:59
734
原创 【设计模式】【创建型5-5】【原型模式】
用途,以原型为模板,源源不断的创建(克隆 clone)对象。当直接创建对象的代价比较大时,则采用这种模式。代码使用:spring框架里 bean的作用域。
2024-06-26 17:33:27
363
原创 【设计模式】【创建型5-4】【建造者模式】
我们可以隐藏构造细节。给外部提供简单的接口就能构建对象。builder 链式调用创建对象就是建造者模式的使用。可以在不同的构建过程中使用相同的建造者。构建复杂对象的时候使用 提高代码的可读性。如上 就是实际的使用。
2024-06-26 17:29:30
314
原创 【设计模式】【创建型5-2】【工厂方法模式】
对数据库的操作基本都是一致的。但是数据库的产品是不一样的,mysql oracle ,可以考虑工厂方法。:定义工厂方法所创建的对象的接口。:声明工厂方法,返回一个产品对象。:实现工厂方法,返回具体产品实例。产品 具体的产品,工厂 具体的工厂。:实现产品接口的具体类。
2024-06-26 17:11:43
434
原创 【设计模式】【创建型5-1】【单例模式】
此时 第一个创建了新的对象返回 如果没有第二次判空校验 那么 第二个会在第一个释放锁以后 重新创建对象 这就是有问题的 此时如果有判空的话 可以避免此场景。代码中 假设两个线程 都通过了第一判空 阻塞在synchronized锁上 其中一个获取锁成功 另外一个阻塞,比如要在内存里记录一些东西。可能使用饿汉模式直接存储。使用双重锁校验模式,创建线程池。为什么要做双重锁校验。一般配置只能有一份。
2024-06-26 16:34:55
414
原创 git clone 报错 记录
远端:计数对象:100% (110841/110841),完成。curl 18 传输关闭且仍有未读取的数据残留。查询原因 curl因为通过 HTTP 协议(命令)克隆时出错。我配置完了 重新克隆 并没有使用这个指令解决掉 也做个记录吧。远端:压缩对象:100% (46725/46725),完成。fetch-pack:在读取边带数据包时发生意外断开。克隆的工程太大了 需要增大一下http的配置。远端:枚举对象:110841个,完成。致命错误:fetch-pack输出无效。致命错误:过早的文件结束。
2024-04-23 11:51:14
451
原创 idea启动报错
com.intellij.javaee.oss.admin.jmx.JmxAdminException: com.intellij.execution.ExecutionException: 找不到此 Web 模块的…原因是 启动的是web服务,可能由于代码的变化 服务名发生变化了。把这里移除了 重新添加一下。
2024-04-08 10:35:24
611
原创 【翻转链表】【k个一组翻转链表】 算法必刷题
k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。首先知道单向链表的结构是什么样子的 能创建才考虑翻转。再将头部节点放到结果的头部 并覆盖结果。每次取出头部节点的下一个暂存。反转列表的代码很清晰。
2024-04-07 18:01:46
173
原创 【synchronized】再也不迷惑究竟锁到了什么
synchronized 锁 看看锁哪里了。class 和 对象是不同的 ,方法上加 static 会锁在 class 上。不加会锁对象上。同一个对象的 多个 synchronized 是存在竞争的不同对象的 相同 synchronized 方法 是不存在竞争的。
2024-04-04 21:49:18
1635
原创 【多线程】奇奇怪怪的问题
jstack是java虚拟机自带的一种堆栈跟踪工具。jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息。原因 threadStatus 初始值是0 跑过一次后是个非0的值 在第二遍就会报错。使用arthas 执行 thread -b 可以检查死锁。执行后如果有死锁直接就输出详细信息了。
2024-04-04 20:59:12
242
原创 Java【线程池】你应该了解的所有知识点
问题:那同样存在另外一个问题 假如我的阻塞队列使用的是优先级队列,且最大容量为100 ,核心线程数5 最大线程数10,我按优先级从高到低 依次发送115个任务,核心线程数5个线程正在执行优先级最高的5个任务,队列里存放在优先级从6到第105个任务,优先级为106到115的任务创建了最大线程数来执行,这样是不是就不满足优先级高的任务先执行了?线程池使用阻塞队列的原因主要是为了解决线程之间的协作和任务管理问题。当阻塞队列已满,且线程池中的线程数小于最大线程数时,线程池会创建额外的线程来执行新提交的任务。
2024-04-04 16:57:50
755
原创 高频率算法题【数组中的第K个最大元素】
如果 当前顺序 大于m 则丢弃右侧数字(包含m),如果当前顺序小于m 则丢弃左侧数字(包含m)优化2.将数组分为三部分 1 小于当前值的, 2 等于当前值的 ,3 大于当前值的。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。如果是寻找最大值,或者最小值,我们暂存一个数,遍历比较一遍就能得到正确的结果了。每次取出一个数字 将小于该数字的数放左侧,大于该数字的数 放右侧。输入: [3,2,3,1,2,4,5,5,6], k = 4。这样的类似二分的检索。
2024-04-03 17:05:46
344
原创 JDK 版本变化 历史 和对应功能示例
Java 9模块化系统是一种运行时的模块管理机制,它改善了代码的封装性、可维护性,并提供了模块间明确的依赖关系和访问控制。Maven主要关注于项目构建阶段,它通过自动化构建流程、管理依赖等功能来简化Java项目的构建和管理。虽然两者在某种程度上都涉及到了代码组织和重用,但它们的关注点、目标和功能有着本质的不同。
2024-04-02 20:11:15
2281
原创 一文了解JVM所有知识点
如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去加载java demo1.创建一个类 并使用javac 来编译它。
2024-04-01 21:31:11
1691
原创 HashMap 考点 闭眼背诵 + 深入了解
根据key 来计算在数组中的位置时 使用到key的hashcode 此时会使用key的hashCode 异或自己的高十六位 与上。扩容的时候 会扩容自己的2倍,在扩容时,旧的数组的位置要么是在原位置 要么是在原位置数加上原来的容量的位置。此时有一个巧妙算法,新增加的一位二进制数 直接与hashkey 就可以获得在新数组中的位置了。为了解决极端情况下 hash冲突导致的获取键值效率低的问题。数组大小减一的值 来计算key在数组中的位置。初始默认大小为16 默认负载因子0.75。,这样的修改 可以使得。
2024-04-01 20:50:42
321
原创 AQS (AbstractQueuedSynchronizer 抽象队列同步器)重要知识概述
Node 节点的属性有 前指针 后指针 当前线程。Node节点的 head 和tail。我们要了解到的她的重要属性是。如果有锁 则会存储当前锁的线程。维护需要加锁的排队的线程。
2024-04-01 20:37:39
206
原创 都有哪些阻塞队列
ArrayBlockingQueue:基于数组的有界阻塞队列。它具有固定的容量,需要在创建时指定。ArrayBlockingQueue内部使用ReentrantLock进行同步。由于基于数组实现,它的吞吐量和性能表现较为稳定,适用于需要固定容量的场景。LinkedBlockingQueue:基于链表的阻塞队列。它可以是有界的,也可以是无界的(默认情况下容量为Integer.MAX_VALUE)。LinkedBlockingQueue内部使用两把锁(分别用于插入和删除操作)进行同步,以实现更高的并发性能。
2024-04-01 20:30:32
186
原创 volatile 关键字
1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。2)禁止进行指令重排序。截图源码来自于jdk8。
2024-04-01 20:26:38
201
原创 【泛型】的三种使用
Java 泛型(generics)是 JDK 5 中引入的特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
2024-04-01 20:13:38
111
原创 记录 特殊的循环跳出方法 continue return 加 retry标识的用法
【代码】记录 特殊的循环跳出方法 continue return 加 retry标识的用法。
2024-04-01 20:04:51
113
原创 【多线程的三种实现方式】
start():新启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到 CPU 时间片,就开始执行 run() 方法。run():普通的方法调用,在主线程中执行,不会新建一个线程来执行。
2024-04-01 19:46:21
116
原创 【LRU缓存】 面试中多次碰到的算法题
map 的value存上node 节点 ,node节点里有4个属性 分别是上一个节点 下一个节点,当前的key 当前的value.这样是能通的。int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1。// 该操作会使得关键字 2 作废,缓存是 {1=1, 3=3}// 该操作会使得关键字 1 作废,缓存是 {4=4, 3=3}// 缓存是 {1=1, 2=2}// 返回 -1 (未找到)函数 get 和 put 必须以 O(1) 的平均时间复杂度运行。
2024-04-01 17:04:24
473
原创 【面试考点】 String s = new String(“xyz“) 创建了几个对象
如果字符串常量池里没有“xyz”,则创建一个放常量池里,再创建一个对象放堆里,堆里的对象引用常量池里的“xyz”.如果字符串常量池里有“xyz”,则创建一个对象放堆里,去引用常量池里的“xyz”.
2024-03-30 17:36:14
128
原创 【面试考点】 String和StringBuilder、StringBuffer的区别
StringBuilder:StringBuffer 的非线程安全版本,没有使用 synchronized,具有更高的性能,推荐优先使用。String:String 的值被创建后不能修改,任何对 String 的修改都会引发新的 String 对象的生成。StringBuffer:跟 String 类似,但是值可以被修改,使用 synchronized 来保证线程安全。(翻源码看看 就这俩 用的时候看看呗,为啥一定要记得住 我就记住不)
2024-03-30 17:30:32
82
原创 java异常类速看
OutOfMemoryError 堆内存溢出异常(看看是不是在不听的创建对象还无法销毁)StackOverflowError 堆栈溢出异常(常见示例 ab俩方法互相无限调用)NullPointerException 空指针异常("."前面的为空了)FileNotFoundException 文件找不到异常。InterruptedException 线程的异常。ClassCastException 类型转换异常。RuntimeException 运行时异常。IOException 输入输出异常。
2024-03-30 17:26:27
111
原创 java基本数据类型长度
在计算机中 存储信息最小的单位是bit(比特、位 、比特位) 1 bit 只有0和1 两种状态。8bit 是一个字节 Byte。
2024-03-30 16:51:20
131
原创 原码补码反码
反码: 正数的反码 是原码本身。负数的反码 是符号位不变 其余位取反。负数的补码是反码加1。1 的原码是 0000,0001。-1的原码是 1000,0001。2 的原码是 0000,0010。3 的原码是 0000,0011。1 的反码是 0000,0001。-1的反码是 1111,1110。2 的反码是 0000,0010。3 的反码是 0000,0011。1 的反码是 0000,0001。-1的反码是 1111,1111。2 的反码是 0000,0010。3 的反码是 0000,0011。
2024-03-30 16:43:46
134
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人