- 博客(241)
- 收藏
- 关注
原创 Java基本类型自动拆箱NPE异常
同理,对于Long、Float、Double也是编译器默认调用了取值函数,如果业务传的是NULL就会报空指针异常。(Autoboxing):把基本数据类型转换成对应的对象类型。在Java中,自动装箱和拆箱是十分重要的特性,允许基本数据类型(如。(Unboxing):把对象类型转换回基本数据类型。值,这个过程在编译时是自动处理的。)和它们对应的包装类(如。在自动拆箱操作中,会调用。
2025-02-12 16:47:21
107
原创 MyBatis相关问题汇总
https://www.cnblogs.com/Createsequence/p/16963891.htmlmybatis的缓存机制(一级缓存二级缓存和刷新缓存)和mybatis整合ehcache_mybatis缓存机制-优快云博客
2024-07-24 20:01:50
322
原创 Arthas watch命令加过滤字段
2.查看入参personList里name是'isMe'的Person实例信息。1.查看入参personList里id等于100L的Person实例信息。如果Person内容太多,我只关心name,那么可以这么写。3.查看返回结果List的某个Car的实例信息。
2024-04-26 17:27:27
1467
原创 中文引号导致读取JSON字段值失败问题
调试代码遇到无法读取其中一个字段的值,其他字段的值可以正常读取,百思不得其解,偶然在日志中发现了,这个字段后边是乱码,不是引号,猜测可能是手动输入入参时,最后一个参数的引号错误使用了中文引号,导致序列化没有成功,就无法读取这个字段对应的值。
2024-03-14 10:16:57
463
原创 Java面试八股文
一文搞懂所有计算机网络面试题 - 知乎01 我应该站在谁的肩膀上 - OSI vs TCPIP模型面渣逆袭必看,面试题八股文Java基础、Java 集合框架、Java 并发编程、JVM、Spring、Redis、MyBatis、MySQL、操作系统、计算机网络、RocketMQ、分布式、微服务👍 | 二哥的Java进阶之路代码随想录配套 JetBrains 刷题插件 | labuladong 的算法笔记
2024-02-22 15:12:00
519
原创 系统问题排查思路
整体思路:https://www.toutiao.com/article/6844670025068970500/?wid=1708583600413
2024-02-22 14:49:42
403
原创 数据结构好文集合
https://blog.youkuaiyun.com/weixin_46195957/article/details/125298629https://www.cnblogs.com/crazymakercircle/p/16320430.html#autoid-h2-5-2-0
2024-02-21 19:53:55
412
原创 记一次Log记录大对象导致的CPU异常和磁盘打满
代码里有个大对象Map,缓存了100M数据,在多线程任务中记录异常的任务时错误地记录了这个Map,导致JSON序列化时疯狂刷磁盘写入数据,导致磁盘被打满,CPU100%,机器拒绝访问。
2024-01-17 11:07:47
467
原创 分布式框架合集
https://cn.dubbo.apache.org/zh-cn/blog/2019/05/01/dubbo-%E4%B8%80%E8%87%B4%E6%80%A7hash%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E5%AE%9E%E7%8E%B0%E5%89%96%E6%9E%90/
2023-12-05 17:00:42
149
原创 CLH锁原理
所有自旋锁都在一个内存地址上自旋,持有锁的线程释放锁后,会引发惊群效应,而且会造成个别线程一只拿不到锁,处在饥饿状态,CLH锁通过队列将所有线程排队,避免惊群效应,也保证所有线程都能执行。将线程包装为CLH节点,locked代表线程状态,false表示释放锁或未持有锁,true表示持有锁或正在排队等待锁。1.设置一个尾节点tail,初始为一个空节点,节点状态为false;1.将当前节点的状态设置为false,表示锁已释放。4.自旋监听前一个节点的状态是否为释放锁;3.将前一个节点set进当前节点的属性;
2023-11-29 21:12:45
191
原创 JavaCPU异常飙升诊断套路
可以看到两个ID,tid是JVM层面的线程ID,nid是native ID,即OS的本地线程ID,Java线程模型是将JVM线程和本地线程1:1映射;1.2找到%CPU最大的线程ID,如25695,需要转十六进制 645f。grep 645f -A 30意思是显示匹配645f的行及其后边的30行。jps找到JVM进程ID,如6937,然后使用top命令查看资源信息。1.1 使用 top 命令找出有问题 Java 进程的 ID;-H会显示线程占用资源情况。2.抽象成shell脚本。-p指定被监视的进程。
2023-11-27 10:58:32
119
原创 Arthas使用技巧
阿里Java诊断工具 arthas - 排查线上环境内存使用过大、线程cpu使用率高问题_arthas排查内存高问题-优快云博客 arthas--vmtool查看内存对象_arthas查看对象_韩师学子--小倪的博客-优快云博客
2023-11-06 16:53:57
91
原创 Java参数按值传递
当对象(或引用类型)作为参数传递给方法时,传递的是对象的引用值,而不是对象本身。这个引用值会被复制到方法内部的新变量中,这意味着这两个引用变量都指向同一个对象。因此,在方法内部对这个新引用变量进行的任何操作都会影响到原始对象。但是,如果在方法内部将新引用变量指向另一个对象(即重新分配),这将不会影响到原始引用变量。按值传递:当基本数据类型被作为参数传递给方法时,实际上传递的是该数据类型的值。在方法内部,这个值会被复制到一个新的变量中,因此对这个新变量的任何修改都不会影响到原始变量。
2023-09-10 13:28:31
301
原创 线程唯一的单例
别跟我扯什么双重检测单例模式,性能太差,不考虑,单例模式就用静态内部类实现,高性能+延迟加载,还要什么双重检测!思路很简单:将线程id绑定对象实例就行了。以下使用Map和JDK原生的ThreadLocal实现这个想法。那么,问题来了,如果我要实现线程绑定呢,换句话说就是实现线程间唯一的单例,进程中可以有多个实例。
2023-09-02 13:56:16
357
原创 Java无锁并发工具类Unsafe.compareAndSwapLong方法
方法是一个原子操作,通常用于并发编程中的无锁算法。它的作用是以原子方式比较并交换某个对象的一个long类型的字段。类一起使用,这是一个用于执行低级操作的类。它允许你直接操作Java对象的内存,包括获取和设置字段的值、分配和释放内存等。如果不相等,说明其他线程可能已经修改过这个字段的值,那么方法不做任何操作,并返回。如果相等,说明没有其他线程修改过这个字段的值,那么方法会将该字段更新为。方法通常用于实现高性能的并发数据结构,如。
2023-09-01 10:56:47
372
原创 Arthas常用命令
trace className methodNamewatch className methodName "{params,returnObj}" -x5vmtool --action getInstances --className className -x3
2023-08-07 15:26:07
148
原创 sublime Text快捷键
josn 快捷键 command + ctrl +j。sql 快捷键 command + k + f。macbook适用!
2023-07-19 11:53:51
105
原创 提取SQL中的参数
group函数是与你的正则表达式有关的,String PS3 = "(#(\\{(.*?group()或者group(0)表示当前匹配的全部字符,group(x)代表匹配字符集的第几个分组,也就是第几个小括号内的字符集。不知道你注意到了java.util.regex.Matcher#group(int)吗?例如,对于字符串 "aaab",正则表达式。例如,对于字符串 "aaab",正则表达式。会非贪婪匹配到1个 "a"。会贪婪匹配到3个 "a"。
2023-06-25 17:29:05
919
原创 主备库的事务管理器如何设置
一般主库负责写,从库负责读,事务管理器主要作用是能在异常时回滚业务代码,读数据没有回滚业务代码的必要,所以主从模式下不需要为主从数据源都配置事务管理器,只需要为主库配置事务管理即可。
2023-06-23 13:37:44
627
原创 行业黑话之水位
MySQL水位是指MySQL数据库中的数据量或负载水平。在数据库管理中,高水位意味着数据库中的数据量或负载水平较高,可能导致性能下降、查询速度变慢等问题。相反,低水位意味着数据库中的数据量或负载水平较低,性能较好。系统管理员、开发人员和运维人员需要关注各种资源的水位,以确保系统的稳定运行、性能优化,防止资源耗尽等问题。通过监控水位,可以合理地分配和管理资源,提高系统的整体性能。相反,低水位意味着资源使用率较低,性能较好。例如,内存水位、磁盘水位、CPU使用水位等。
2023-06-20 11:28:24
965
原创 PreparedStatemnet概念
都是Java中 JDBC(Java Database Connectivity)规范的一部分,它们用于执行SQL语句并与数据库交互。PreparedStatement防止SQL注入的关键在于它将参数值与SQL语句进行分离处理,而不是直接将参数值拼接到SQL语句中。数组中的参数值和类型一起发送给数据库服务器。数据库服务器会将这些参数值与 SQL 语句进行合并,然后执行处理过的 SQL 语句。对象设置参数值和类型。在执行 SQL 语句时(例如调用。方法中,参数类型将被设置为。方法中,参数类型将被设置为。
2023-06-20 11:22:53
205
原创 数据库横表和竖表有什么区别
横表和竖表是描述数据库表结构的两种形式,它们之间的主要区别在于数据的组织方式和用途。2.竖表(长表): 竖表是一种非常规表结构,其特点是将属性作为行而不是列存储。竖表通常包括实体ID、属性名和属性值三个字段。竖表的优点是可以处理稀疏数据和动态添加属性,适合用于数据仓库和数据挖掘。
2023-06-19 14:11:48
5257
原创 JDK动态代理
确保代理类和目标类在相同的类路径下被加载,可以避免类加载器之间的不兼容性问题。类加载器之间可能存在不同的类路径和委托模式,如果代理类和目标类使用不同的类加载器,可能导致代理类无法找到目标类或目标类的依赖。方法中,你应该调用目标对象(而非代理对象)上的方法,并在方法调用前后添加其他操作(如日志、安全检查等)。:当代理类和目标类使用相同的类加载器时,可以确保它们实现的接口是相同的。方法中,可以自定义如何处理方法调用,通过反射来调用目标对象的实际方法,以及在方法调用前后添加其他操作(如日志、安全检查等)。
2023-06-18 17:39:06
2322
1
原创 NameSpace概念
命名空间(Namespace)是一种在计算机科学和编程中广泛使用的概念,主要用于避免名称冲突和提高代码组织结构。命名空间可以将不同范围内的标识符(如变量、函数、类等)隔离开来,以便在不同的上下文中使用相同的名称,而不会引起冲突。:命名空间可以将代码划分为多个独立的模块,每个模块都有自己的命名空间。:在 XML 和其他技术中,命名空间可用于标识特定版本的语言或规范,从而提供对不同版本的支持和兼容性。通过为 XML 文档中的元素和属性分配不同的命名空间,我们可以确保它们在全局范围内具有唯一性。
2023-06-18 16:40:29
591
原创 TransientStorePool堆外缓存池技术
RocketMQ的TransientStorePool设计主要通过内存池和MMAP技术将消息先写入内存池中的内存块,然后将内存块的数据刷入MMAP内存,最后再将MMAP内存的数据刷入磁盘。它通过预分配内存块,将消息写入预分配的内存块(直接内存),然后使用内存映射文件(Memory-Mapped File)将内存块中的数据刷到磁盘,从而提高写入性能。当文件被映射到内存地址空间时,文件的读写操作实际上是在内存中进行的,这部分内存位于堆外,不受 Java 垃圾回收(GC)机制的影响。
2023-06-16 11:43:41
1731
原创 RocketMQ MappedFile设计思路
然而,内存映射文件也有一定的局限性,如地址空间的大小受到操作系统的限制,因此对于非常大的文件可能无法完整映射到内存中。需要注意的是,在选择回收的物理内存页时,操作系统会考虑这个页的使用情况,如是否被修改(脏页)。虚拟内存管理是操作系统中的一种内存管理技术,它允许程序拥有独立的、连续的地址空间,并将这些地址空间映射到物理内存和磁盘上的存储资源。避免了额外的内存拷贝:当我们从磁盘文件读取数据时,如果不使用内存映射文件,数据需要先从磁盘读取到操作系统的缓冲区,然后再从缓冲区拷贝到Java堆内存中。
2023-06-15 12:27:40
1196
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人