- 博客(64)
- 收藏
- 关注
原创 【SpringBoot】多数据源事务卡死@DSTransactional,当某一个数据库挂掉了,系统卡死问题解决
记录最近发生并解决的一个问题。在一个事务内,操作多个数据库,当其中一个数据库挂掉后,默认无限重连,导致事务无法正常结束,导致系统卡死
2025-01-02 16:31:34
377
原创 【Docker】Docker 容器日志过大导致磁盘爆满
docker容器的日志文件目录位于/var/lib/docker/containers/容器/容器-json.log。解决方式(全局)
2024-12-02 11:46:54
684
原创 【前端】el-input区分键盘输入与扫码输入,禁止键盘输入
扫码就是模拟键盘输入,所以并不好区分,这里通过两次输入间隔+输入次数来实现,代码如下。如有别的方法,欢迎交流!
2024-11-11 14:22:37
518
原创 【Java】synchronized与Transactional
在并发编程实践中,我们需谨慎处理事务与锁的关系。一个基本原则是:事务操作通常应放在锁的保护范围内执行,以确保数据原子性。
2024-10-30 11:32:01
252
原创 【Java】jvisualvm工具
本地的会自动获取,发布在服务器上的用远程进行连接,发布的程序需配置JVM参数。jdk8及以下版本自带,在jdk的bin目录下,jvisualvm.exe。通过【线程Dump】得到日志后,进行分析。
2024-10-12 10:05:14
440
原创 【数据库】死锁排查方式
select sql_text from v$sql where hash_value in(select sql_hash_value from v$session where sid in(select session_id from v$locked_object));
2024-09-14 09:04:56
415
原创 【数据库】银行转账并发问题
假设账户A的余额是200,B、C分别给A转账100,A自己又消费了50,期望A的余额是350,那么如何做才能确保数据的一致性?
2024-05-15 13:51:27
598
原创 【数据库】数据库事务原理
MVCC(Multi-Version Concurrency Control),即多版本并发控制,是一种并发控制的方法,主要用于数据库管理系统中,以实现对数据库的并发访问。以下是对MVCC的详细解释:目的:MVCC的主要目的是允许多个用户同时访问数据库,而不会导致数据冲突和不一致性。它通过在系统中维护多个版本的数据来实现这一目的。
2024-05-11 11:02:11
794
原创 【Java】深入理解i++、++i
Java虚拟机的栈帧(局部变量表、操作数栈、动态链接、方法返回地址)Java虚拟机字节码指令,iconst_、istore_、iload_、iinc ,
2023-12-20 11:38:49
1501
原创 【数据库】@Transactional用法详解
总结 1、确保注解生效 2、代码异常被生效的注解抓到时,才会回滚 3、回滚时,会回滚注解下面的所有内容
2023-12-13 16:35:32
710
原创 【问题记录】Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class java.io.ByteArrayInputStream and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS
2023-10-09 11:32:46
1811
原创 【问题记录】org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
遇到一个问题,记录一下。研究了老半天,后来才发现,如图。从文件夹里看,就明白了。
2023-08-17 11:15:48
111
原创 【OpenAI】当人工智能遇到道德困境问题(铁轨选择问题),它会怎么回复?
一条铁轨上,五个小孩在玩耍,而一辆火车即将撞上他们,这时你就在铁轨转轴拉杆的旁边,你可以选择拉下拉杆,让火车开向另一条铁轨,但是,另一条铁轨上,有一个铁轨工人正在休息。你会怎么选?
2023-08-11 17:00:59
912
原创 【OpenAI】AI写代码,idea插件、vscode插件
试了下AI自动写代码,在idea和vscode的插件市场能搜到五花八门的AI插件,感觉还可以的两个。aiXcoder和Tabnine。
2023-08-04 13:37:38
1505
原创 【线程】wait()+notifyAll()实现多个线程交替遍历,输出ABCABC
实际会有这样的场景吗?下面举几个例子1、假设在一个食堂,有很多人在排队打饭,每个人需要完成以下步骤:先拿餐具,然后拿菜,再拿饭,最后付钱。2、多线程下载器。当我们下载一个大文件时,可以使用多个线程同时从不同的服务器上下载文件的不同部分,然后将这些部分合并成一个完整的文件。通过多个线程交替遍历不同的服务器,可以提高下载速度,加快文件的下载过程。3、医院的门诊、机场的登机口、超市的收银台等等。
2023-08-03 16:06:43
1425
原创 【网络|TCP】三次握手、四次握手
TCP是一种面向连接的可靠的传输协议,建立和断开TCP连接时需要进行握手的过程。其中,TCP的连接建立需要进行三次握手,而连接断开则需要进行四次握手。
2023-08-03 11:04:34
809
原创 【Java】HashMap线程安全问题与解决方式
假设有一个大仓库,里面存放着很多商品。如果只有一个锁来保护整个仓库,那么每次只能有一个工人进入仓库,其他工人需要等待。为了提高效率,将大仓库分成多个小仓库(锁分段技术中的Segment),每个小仓库都有自己的锁。每个工人只需要获取自己所在的小仓库的锁,就可以独立地进入小仓库取出商品进行处理。这样,多个工人可以同时进入不同的小仓库,互不干扰,提高了并发度和效率。HashMap是非线程安全的,可以使用SynchronizedMap、ConcurrentHashMap。
2023-08-02 10:09:49
1183
原创 【数据结构|二叉树遍历】递归与非递归实现前序遍历、中序遍历、后序遍历
前序遍历(Preorder Traversal): 前序遍历的顺序是先访问根节点,然后按照先左后右的顺序访问子节点。对于上面的二叉树,前序遍历的结果是:4 -> 2 -> 1 -> 3 -> 6 -> 5 -> 7。中序遍历(Inorder Traversal): 中序遍历的顺序是按照先左后根再右的顺序访问子节点。对于上面的二叉树,中序遍历的结果是:1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7。
2023-08-02 09:34:43
1084
原创 【数据结构】二叉树、二叉搜索树、平衡二叉树、红黑树、B树、B+树
二叉树(Binary Tree):每个节点最多有两个子节点(左子节点和右子节点),没有限制节点的顺序。特点是简单直观,易于实现,但查找效率较低。二叉搜索树(Binary Search Tree,BST):在二叉树的基础上,左子节点的值小于等于父节点的值,右子节点的值大于等于父节点的值。特点是插入、删除和查找的平均时间复杂度为O(log n),但如果树不平衡,可能会退化为链表,时间复杂度为O(n)。
2023-08-01 10:10:01
1418
原创 【Java】String类为什么是final的
面试时被问到,String为什么是final的?至于String为什么是final的,如下。面试官:回家等通知!
2023-07-31 15:25:09
164
原创 【数据库】事务四个特性、脏读、不可重复度、幻读、事务隔离级别
需要注意的是,随着隔离级别的提高,事务的并发性能可能会下降,因为更严格的隔离级别需要更多的锁和资源管理。因此,在选择事务隔离级别时,需要权衡一致性和性能之间的关系,并根据实际业务需求和安全性要求进行选择。
2023-07-31 13:36:54
356
原创 【Java】详解volatile和synchronized关键字
都是Java中用于控制并发的关键字,但是它们的使用场景和原理是不同的。操作不是原子性的,所以最后输出的结果可能小于2000。操作的原子性,所以最后输出的结果为2000。方法并不是线程安全的,因为。在上述示例中,尽管使用了。方法是线程安全的,因为。在上述示例中,使用了。
2023-07-31 10:47:18
733
原创 【设计模式|行为型】访问者模式(Visitor Pattern)
具体的实现中,抽象访问者接口可以定义访问文件夹和文件的方法,具体访问者类可以实现这些方法来完成不同的操作。抽象元素接口可以定义接受访问者的方法,具体元素类可以实现这个方法并把访问者传递给具体元素的子元素,以便它们也能接受访问者的访问。在软件开发中,有时需要对一个复杂的对象结构中的各个元素进行不同的操作,例如,计算对象结构中元素的总和、对每个元素进行特定的处理等。访问者模式通过将操作封装在一个访问者类中,使得可以在不改变对象结构的情况下,对对象结构中的每个元素应用不同的操作。然后,实现具体的访问者类。
2023-07-27 08:16:07
144
原创 【设计模式|行为型】职责链模式(Chain of Responsibility Pattern)
职责链模式是一种行为型设计模式,它允许多个对象在处理请求时,每个对象都有机会处理请求,从而避免了请求发送者和接收者之间的直接耦合。通过将处理请求的对象按照其处理能力的顺序连接成一条链,请求将沿着链传递,直到有一个对象能够处理它。在职责链模式中,通常使用一个抽象处理者(Handler)来定义处理请求的方法。每个具体的处理者类都实现了这个抽象处理者,并包含一个指向下一个处理者的引用。当请求到达一个处理者时,它可以选择处理请求或将它传递给下一个处理者。这样,请求将依次通过每个处理者,直到有一个处理者能够处理它。
2023-07-27 08:15:54
222
原创 【设计模式|行为型】中介者模式(Mediator Pattern)
中介者模式(Mediator Pattern)是一种行为型设计模式,它通过封装一系列对象之间的交互方式,使这些对象能够互相通信而不需要直接相互引用。中介者模式通过集中控制对象的交互,使得对象之间的耦合度降低,同时也提高了系统的可维护性和可扩展性。
2023-07-26 16:45:15
423
原创 【设计模式|行为型】状态模式(State Pattern)
假设要做个电梯控制系统。电梯可以处于不同的状态:已开门:只能关门操作已关门:可以开门,可以上升,可以下降开门中:不可做任何操作关门中:不可做任何操作上升中:不可做任何操作下降中:不可做任何操作这时可以使用状态模式。
2023-07-26 16:35:54
826
原创 【设计模式|行为型】备忘录模式(Memento Pattern)
备忘录模式是一种行为型设计模式,通过捕获一个对象的内部状态,并在该对象之外保存这个状态,以便在需要时恢复对象到原先的状态。和。备忘录模式的核心思想是将对象的状态保存在一个独立的对象中,以便以后恢复。通过使用备忘录模式,我们可以轻松地实现对象状态的保存和恢复,同时也提高了系统的可维护性和扩展性。
2023-07-26 16:32:27
372
原创 【设计模式|行为型】命令模式(Command Pattern)
命令模式(Command Pattern)是一种行为设计模式,它将请求封装为一个对象,以便在不同的请求者和接收者之间进行解耦、参数化和操作的队列化。命令模式允许你将具体的请求封装为对象,这些对象之间彼此独立,并且可以用不同的请求对客户端进行参数化。
2023-07-26 16:20:58
690
原创 【设计模式|结构型】享元模式(Flyweight Pattern)
假设我们有一个围棋游戏,棋盘上有很多棋子,每个棋子都有自己的位置和颜色。如果每个棋子都创建一个对象,那么内存占用会很大。而使用享元模式,我们可以共享相同颜色的棋子对象,只需记录它们的位置,从而减少内存占用。
2023-07-26 16:14:04
189
原创 【设计模式|结构型】代理模式(Proxy Pattern)
假设你家里有一个保姆,你不想让保姆直接接触你的贵重物品,但是你需要让保姆帮你照顾这些物品。这时,你可以使用一个代理来解决这个问题。
2023-07-26 15:17:21
480
原创 【Java】详解Jdk8 Optional
Java 8 引入了 Optional 类,它是一个容器对象,可以包含一个非空对象或者为空。Optional 类的目的是为了解决空指针异常的问题,使代码更加健壮和优雅。
2023-07-26 14:23:17
190
原创 【设计模式|行为型】解释器模式(Interpreter Pattern)
解释器模式是一种行为型设计模式,它定义了一种语言文法,并解释执行该语言中的句子。该模式通过将语法解析过程分离为解释器类的层次结构来实现。
2023-07-26 10:00:46
185
原创 【设计模式|结构型】外观模式(Facade Pattern)
外观模式就像是一家快餐店的服务员。当你去快餐店点餐时,服务员会告诉你今天的特色菜、套餐、饮料等等,然后你只需要告诉服务员你想要什么,服务员就会帮你把所有食物和饮料都准备好,最后一起送到你的桌子上。在这个例子中,服务员就是外观模式,他隐藏了所有的复杂操作和细节,只提供了一个简单的接口,让顾客可以轻松地点餐。同样地,外观模式也隐藏了系统的复杂性,提供了一个简单的接口,让客户端可以方便地使用系统中的功能。
2023-07-26 09:00:59
280
原创 【设计模式|结构型】组合模式(Composite Pattern)
假设我们要设计一个餐厅菜单系统,菜单可以包含单个菜品和菜单套餐。每个菜品有自己的名称、价格和描述,而菜单套餐可以包含多个菜品和其他菜单套餐。这时可以使用组合模式来设计这个餐厅菜单系统。
2023-07-26 08:56:29
500
原创 【Java】详解JDK静态代理、动态代理
JDK静态代理和动态代理都是代理模式的实现方式,它们都可以在不改变目标对象的情况下,对目标对象进行扩展或增强。
2023-07-24 17:04:49
277
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1