- 博客(56)
- 收藏
- 关注
原创 java和c++区别
java也可以说是半编译和半解释性语言。jit以外,java也支持aot编译,纯纯的编译成机器码。java 解释性语言(字节码,由java虚拟机执行)执行速度快,效率低,依赖编译器,跨平台性好。c++ 编程型语言(将代码编译成机器码)。执行速度快,效率高,依赖编译器,跨平台性差。javascript 解释语言。
2025-03-26 10:46:58
210
原创 面向对象的五大原则
一个类只负责一件事,把这个功能做好。比如一个日志消息处理,不仅要创建日志,还得写入文件。程序要依赖抽象接口,而不是具体实现(提高代码可测试性,减少代码耦合)子类必须能替换基类 (提高代码可互换性和可重用性)使用几个小接口,而不是一个大接口。
2025-03-26 10:28:34
99
原创 【无标题】
它通过将时间分割成多个槽(slot),每个槽代表一个固定长度的未来时间点,从而减少了对定时器的频繁操作,提高了效率。考虑到方案完整,复杂度,还是推荐使用三方框架,比较建议 定时任务,redisson+redis,rabbitmq插件 rocketmq 延迟消息 等方案。Netty本身并没有直接提供时间轮的实现,但是你可以使用HashedWheelTimer,它是Netty中一个基于时间轮的实现,用于调度定时任务。redis 过期监听 (不推荐,容易丢消息) zset (不推荐,消息重复消费)
2025-03-26 09:43:35
415
原创 java面试jvm
Eden满会触发Minor GC,存活的对象进入S1(S2)区,进行一次GC年龄加1,达到15,对象还存活,进入老年代。如果满,导致OOM。方法区溢出:包括运行时常量池溢出,一般由于大量生成的class导致,可以通过 -xx.permsize 和 -xx.maxpermsize 来设置区的大小。比如一个程序main线程,test方法线程,每个线程中都包含 局部变量表,操作数栈,动态链接,方法出口。加载(.classs)----验证----准备----解析-----初始化----使用-----卸载。
2024-03-13 15:32:22
978
2
原创 【无标题】
记录日期为 ‘2023-08-28 00:00;00’ 格式改为 ‘2023-08-28’使用simpldate.parse 后再使用 simpldate.format。日期+30天后, 使用Calendar 然后再使用simpldate。
2023-08-28 15:17:15
146
原创 网络与IO
TCP是长连接吗?tcp只是连接,受应用层协议连接是不是一个“复用”载体举一个例子:http 1.0 ,1.1 没有开启keepalive保持,连接只负责一次同步阻塞的请求+响应,短连接!举一个例子:http 1.0,1.1 开启了keepalive保持,同步复用连接:多次(请求+响应),以上是无状态通信,长连接!
2023-07-04 17:05:38
447
原创 java内存泄漏。怎么排查?
Java提供了一些内存分析工具,例如Eclipse Memory Analyzer (MAT)、VisualVM等,可以帮助你分析内存使用情况。通过这些工具,你可以查看内存快照、分析对象引用关系,找出潜在的内存泄漏问题。然后可以使用MAT等工具来分析该转储文件,找出内存泄漏的根源。查看是否存在对象创建后未被正确释放的情况,例如未关闭的流、未解注册的监听器等。程序中不再使用的对象,由于某种原因没有被垃圾回收器回收,导致内存持续增加,最终导致性能下降甚至崩溃。
2023-06-29 09:35:28
550
原创 String ==的几种情况说明记录
string == 的几种比较很容易搞错,时间一长,很多都会搞混,所以记录一下,方便以后翻阅,该文章简单易懂
2023-06-25 16:08:10
324
原创 数据库分库分表
垂直分库/垂直分表---------------表为依据,根据业务属性不同,将不同的表拆分到不同库中。sharding-sphere:jar,前身是sharding-jdbc;Mycat:中间件。
2023-06-14 15:53:11
70
原创 Mybatis源码
持久层ORM框架,执行sql比较简单,扩展性强,与传统jdbc相比,省去了手写连接的几个步骤,可以通过配置。节约数据库连接资源,代码易于维护。mybatis 在SqlMapConfig.xml 中配置数据库连接池,用于管理数据库连接采用xxmapper.xml文件与java代码分离,易于维护传参方便,使用占位符 #{} 传参,一一对应映射结果为Map或者对象使用方便。
2023-05-22 16:00:41
83
原创 分布式锁和分布式事务
线程B 加锁B4 B5成功,没有获取锁。线程A获取锁,返回将锁存放在数据库中,此时JVM stw, 线程b去获取锁,修改锁,与数据库已经存在的锁标识进行对比。A线程获取锁,B线程等待,此时A线程释放锁,程序还未执行完成。此时B线程获取锁,此时A,B都将库存减到9,与业务不符。一主一从,线程A从主机获取锁,此时主宕机,线程B从从机也获取了锁。分布式锁:redis分布式锁, zk分布式锁, 数据库做分布式锁。-----------程序A---------->程序B----->----------
2023-03-20 14:39:23
461
原创 springcloud相关组件
写本文章特别有必要,springcloud是现在比较流行的微服务框架,需要学习了解其相关组件和工作原理。微服务组件图注册中心主要用来实现各个微服务实例的自动化注册和发现eurka APzk CPnacos AP 注册中心和配置中心, alibaba云原生consul A70%的场景主选eurka, 能够保证高可用。如果对服务数据一致性比较看中选用zk,zk集群环境一半以上机器挂掉的话,不能再提供服务,不能保证高可用,集群全部同步完毕才返回相
2023-03-15 11:14:15
314
原创 AQS&ReentrantLock源码分析
jdk中提供的大多数同步器,如Lock,Latch,Barrier等,都是基于AQS框架实现(一般通过一个内部类Sync继承AQS)共享 比如 Semaphore/CountDownLatch。AQS中的同步等待队列也称为CLH队列,基于双向链表数据结构,先进先出。单向列表保存,当前线程处于同步队列头结点,调用await方法阻塞线程,独占 比如 ReentrantLock。同步等待队列 和条件队列。
2023-02-24 14:34:06
182
原创 JMM&并发三大特性
Java Memory Mode,java内存模型,java多线程通信模型涉及到维度:JAVA 层面 JVM层面 硬件层面需要重点掌握理解并发的三大特性,JMM工作内存和主存的关系,多线程是如何通信的,volatile保证可见性和有序性,CAS。
2022-12-23 11:16:20
129
原创 jvm内存模型深度剖析
java语言代码写一次不需要修改,就可以在不同系统平台上运行。jvm存在三个子系统: 类装载子系统,运行时数据区,字节码执行引擎。其中,类装载子系统 负责将字节码加载到JVM中,具体是加载运行时数据区的方法区中。运行时数据区又分为 堆,栈(线程),方法区,本地方法栈和程序计数器。主要用于存储程序运行中生成的对象。执行引擎包括解释器,即时编译器,垃圾回收器,主要用来解释执行字节码,并进行垃圾回收。一个方法对应一块栈帧内存空间。对于单个线程,栈,本地方法栈,程序计数器都是独有的。生成一个线程都会分别生成
2022-12-07 20:17:33
178
原创 spring源码专题
spring自己的一些理解,关于spring , SpringIod以及springBean的生命周期,循环依赖以及三级缓存
2022-10-13 09:43:33
174
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人