- 博客(50)
- 资源 (3)
- 收藏
- 关注
原创 Redis设计与实现-哨兵
如有侵权,请联系~如有错误,也欢迎批评指正~本篇文章大部分是来自学习《Redis设计与实现》的笔记哨兵(Sentinel)是Redis的高可用解决方案:由一个或者多个哨兵实例组成的哨兵系统,可以监视任意多个主服务器以及这些主服务器所属下的所有从服务器,并且在被监视的主服务器下线时自动的将从某个服务器升级为新的主服务器,然后将新的主服务器替换已经下线的主服务器继续处理命令请求。
2025-03-29 22:07:04
1066
原创 Redis设计与实现-数据结构
redis中的字符串都是简单动态字符串(SDS)的形式存在的。不止是set key value的键和字符串值value,连其他数据结构中存储的字符串也是以SDS形式存储,如rpush fruits "apple " “banana”,队列保存的中的"apple " "banana"两个字符串元素也是SDS存储。SDS除了保存字符串以外,还用在缓冲区:AOF缓冲区、客户端输入输出缓冲区。int len;// 字符串的长度(已使用的字节数)int free;// 未使用的字节数(空闲空间)
2025-03-02 22:12:18
1036
1
原创 自动控制视频讲解
视频内容包括但不限于:时域分析、信号流图、结构图绘制、跟轨迹、幅相曲线、稳定裕度、z变换、离散传递函数、数字控制器、稳定判据、相平面法、描述函数法、李雅普诺夫判稳、状态空间表达式、极点配置、可控性和可观性的判别等等。本视频几乎包含了所有《自动控制原理》(胡寿松)所有重点章节。针对于考研都能满足。该视频之前录制是为了辅导考研学生,一直存在百度网盘。复制这段内容打开「百度网盘APP 即可获取」通过百度网盘分享的文件:视频授课。
2025-02-11 23:58:25
217
原创 Redis实战-降低内存使用
如有侵权,请联系~如有错误,也欢迎批评指正~本篇文章大部分是来自学习《Redis实战》的笔记本章介绍三种降低能够降低redis内存占用的方法:短结构【高效的表示数据】、分片结构【将一个体积大的结构转换为一系列小体积结构】、打包存储二进制和字节。
2025-02-09 22:06:28
671
原创 Redis实战-初识Redis
Redis是一个远程内存数据库,它不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数据模型。Redis提供了5种不同类型的数据结构,各式各样的问题都可以很自然地映射到这些数据结构上:Redis的数据结构致力于帮助用户解决问题,而不会像其他数据库那样,要求用户扭曲问题来适应数据库。
2025-01-19 21:42:42
1298
原创 高性能MySQL-备份与恢复
备份在先。只有已经做了备份才可能恢复,因此在构建系统时,注意力自然会集中在备份上。备份由脚本和任务自动完成。经常不经意地,我们会花些时间调优备份过程。花5分钟来对备份过程做小的调整看起来并不重要,但是你是否天天同样地重视恢复呢?备份是日常任务,但恢复常常发生在危急情形下。因为安全的需要。如果你正在做异地备份,可能需要对备份数据进行加密,或采取其他措施来进行保护。
2024-12-30 11:27:49
769
原创 高性能MySQL-复制
复制解决的基本问题是让一台服务器的数据与其他服务器保持同步。它的实现机制可以这样概括,首先在源服务器(source server)上,任何数据修改和数据结构变更的事件 (event)都会被写入日志文件中,然后,副本服务器从源服务器上的日志文件中读取这 些事件并在本地重放执行。这是一个异步处理的过程,也就是说,并不能保证副本服务器 上的数据是最新的。
2024-12-25 20:12:49
1154
6
原创 Jackson序列化和反序列化的坑
【公司因为团队A序列化到redis,另一个团队B从redis反序列化对象。团队A升级了对象,即增加了对象属性,但是团队B没有升级对象,从而团队A上线之后,团队B反序列化大量错误。在进行Jackson反序列化的时候,如果json中包含了反序列化类中的没有的字段属性,则会报错。即,序列化的版本高反序列化的版本低。在对象上增加注解 @JsonIgnoreProperties(ignoreUnknown = true)
2024-12-13 11:49:57
434
原创 高性能MySQL-MySQL架构
Performance schema提供了有关MySQL服务器内部运行的操作上的底层指标。sys chema完全是基于Performance schema上的视图和存储例程组成,只是为了方便,体验流程,如果sys schem找不到想要的数据,可以去Performance schema查询。在MySQL代码中插入探测代码,以获得我们想要了解的信息。用来存储关于程序插桩代码得到的信息。在数据库performance_schema中,有一个表setup_instruments就存储了支持的程序插桩。
2024-11-25 10:12:11
1048
原创 InnoDB 表和页面压缩
由于处理器和缓存的速度比磁盘存储设备快得多,因此许多工作负载都与磁盘绑定。数据压缩可以缩小数据库大小、减少 I/O 并提高吞吐量,但代价是增加 CPU 利用率。InnoDB使用ROW_FORMAT=COMPRESSED创建的表在磁盘可以使用比配置值更小的页面大小innodb_page_size。可以使用CREATE TABLEor ALTER TABLE KEY_BLOCK_SIZE指定压缩的页大小,不同的页面大小要求将表放在文件表空间或通用表空间中,而不是系统表空间中,因为系统表空间无法存储压缩表。
2024-11-18 09:49:37
1058
原创 JUC-阻塞队列
阻塞队列在业务代码中可能较少使用,但是只要喜欢看源码的同学就会发现,阻塞队列使用的很频繁,到处都有它的影子。例如:线程池ThreadPoolExecutor中的工作队列。阻塞队列(BlockingQueue)是 Java 并发包(java.util.concurrent)中的一个重要接口,允许多个线程同时安全地操作队列。它不仅提供了队列的基本操作(如插入、删除、检查元素),还可以在队列满时阻塞插入线程,在队列空时阻塞删除线程。这种机制非常适合用于生产者-消费者问题等多线程场景。
2024-11-15 10:44:07
1433
原创 JUC基础类-AbstractQueuedSynchronizer
AbstractQueuedSynchronizer(抽象队列同步器,简称 AQS)是 Java 并发包中的一个重要类,它为实现基于队列的同步器提供了一个框架。AQS 主要用于构建各种同步机制,比如锁、信号量、读写锁等。它通过一个 FIFO 队列(先进先出)来管理线程的获取和释放同步状态(如锁定状态),从而有效地处理多线程之间的竞争。JUC包下的lock锁子包,以及JUC下的阻塞队列ArrayBlockingQueue、CountDownLatch等等这些常用的类都是基于AQS实现的。
2024-11-14 10:12:36
606
原创 JUC-locks锁
java的并发包【JUC】下面就两个子包,一个是atomic原子包,另一个就是lock锁包。这个包下就提供了三种锁:ReentrantLock【可重入锁】、ReentrantReadWriteLock【可重入读写锁】、StampedLock【更轻量级的读写锁】。这些锁的实现大部分都是基于AbstractQueuedSynchronizer【俗称的AQS,分两篇文章,防止难以消化】类实现的。
2024-11-13 11:45:56
1333
原创 JUC-Atomic原子类
java的并发包【JUC】下面就两个子包,一个是lock锁,另一个就是atomic原子包。基本类型的原子类:AtomicBoolean、AtomicInteger、AtomicLong、AtomicReference等数组的原子类:AtomicIntegerArray、AtomicLongArray支持更高并发的原子类:LongAdder、DoubleAdder在学习之前,我们通过上述发现,为什么没有对浮点数提供原子类,如AtomicFloat、AtomicDouble?
2024-11-11 19:45:17
1158
原创 ExceptionHandler的实践
公司的项目中经常会抛异常,然后就排查为什么会经常有异常,最终通过异常堆栈等信息了解到工程中使用了全局异常捕获,返回的是ModelAndView对象,但是这里指定的view工程上找不到。在全局异常捕获方法【ExceptionHandler】中,如果返回的是ModelAndView,但是view返回一个不存在view,会发生什么?接下来看,为什么会抛异常?
2024-11-08 11:39:19
1050
原创 java动态代理
静态代理和动态代理1、代理模式2、静态代理2.1 定义接口2.2 被代理对象实现2.3 代理对象2.4 客户端3、JDK动态代理3.1 JDK动态代理例子3.1.1 定义接口3.1.2 被代理对象实现3.1.3 实现InvocationHandler接口3.1.4 创建代理对象3.2 动态代理底层原理3.3 查看生成的代理类4、CGLIB4.1 CGLIB的例子4.1.1 定义目标对象4.1.2 自定义方法拦截器4.1.3 使用动态代理4.2 CGLIB原理5、Spring切面5.1 定义注解5.2 定义被
2024-11-07 09:53:59
1075
原创 MyBatis实现原理
首先,您需要定义一个接口,代理将对其进行实现。下面不属于动态代理,定义一个类,封装对象反射执行方法/*** 目标对象*//*** 执行的方法*//*** 方法的参数*//*** 执行目标对象的方法*//*** 具体拦截处理,目标对象封装到Invocation*//*** 插入目标类,创建代理对象*/
2024-11-04 09:43:02
1369
原创 CloseableHttpClient使用与原理
CloseableHttpClient使用与原理1、CloseableHttpClient使用1.1、添加maven依赖1.2、使用2、源码2.1、CloseableHttpClient2.2、PoolingHttpClientConnectionManager连接池管理器1、CloseableHttpClient使用CloseableHttpClient 是 Apache HttpClient 库中的一个类,提供了方便的 API 用于发送 HTTP 请求并处理响应。以下是使用 CloseableHtt
2024-10-29 09:30:50
2453
2
原创 分库分表常见面试问题
分库指的是将数据分布在多个数据库实例中。每个数据库实例只存储部分数据,通常是通过某种分片策略(如哈希、范围等)来决定数据的分布。并发量大的问题。随着并发量的增加,数据库的连接池可能就会打满,成为瓶颈。虽然数据库的连接池可以修改,但也不是可以无限的增加。可以通过增加数据库的实例以此来提供更多的数据库连接,从而提升系统的并发度。分表是指将一个数据库中的表拆分成多个表,以减少单个表的数据量,从而提高查询性能。可以在同一个数据库中分表,也可以在多个数据库中分表。单表太大影响存储和查询的效率问题。
2024-10-27 23:11:55
1618
原创 java工程启动优化
java工程启动优化1、背景2、问题排查及解决方案2.1、流量排查2.2、自身服务的预热优化3、代码实现4、效果及结论4.1、效果对比4.2、结果分析4.3、上线效果如有侵权,无心侵权,请联系~如果有错误,也欢迎批评指正~1、背景在某次上线的过程中,发现出现了大量的线程池拒绝以及携带着超时异常java.util.concurrent.TimeoutException等异常。之前同事上线的时候也存在这种问题,只是最近这种现象越来越明显【所以排除了本次代码上线导致的问题】,所以,排查治理刻不容缓。
2024-10-22 14:22:42
710
原创 ThreadLocal线程局部变量
ThreadLocal是一个关于创建线程局部变量的类,翻译成中文比较准确的叫法应该是:线程局部变量;是一个将在多线程中为每一个线程创建单独的变量副本的类,为每个线程创建单独的变量副本时,能够避免因多线程操作共享变量而导致的数据不一致的情况。通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。而使用ThreadLocal创建的变量只能被当前线程访问,其他线程则无法访问和修改。
2024-10-18 16:04:02
1163
原创 自定义实现函数参数注解
背景:作为服务端参数的定义都是符合驼峰命名规则,但是客户端一般都是使用下划线。例如客户端版本号:服务端使用String versionName来接受,而客户端使用version_name进行传递。因此,服务端需要进行映射,每个接口都要进行映射,代码不够美观简练。所以函数参数注解诞生。// 增加属性这个注解比较简单,没有任何属性。不过如果想要扩展功能,可以直接增加属性即可。在参数解析的时候使用// 这样就可以获取到上述属性,根据属性值做不同的逻辑处理。
2024-10-16 14:09:10
314
原创 log4j2.xml
log4j2.xml1、log4j2.xml使用2、日志器的流程解析2.1、几个重要的类2.2、整体流程图3、部分源码3.1、通过简单例子看源码3.2、log4j2.xml配置指导如侵权,请联系,无心侵权~如有错误,也请指正。1、log4j2.xml使用<?xml version="1.0" encoding="UTF-8"?><Configuration status="WARN" monitorInterval="30"> <properties>
2024-10-16 10:42:54
5302
原创 java线程池【通过源码角度看java线程池】
在查看源码之前,还是先看下整体的调用流程图,有个直观的感受。线程池提交任务的流程:调用线程池的 execute(Runnable command) 方法提交一个 Runnable 对象。首先,线程池会检查当前活跃线程的数量是否小于 corePoolSize。如果线程数小于 corePoolSize,则会创建一个新的线程来执行提交的 Runnable 任务。如果当前活跃线程数大于或等于 corePoolSize,则会尝试将 Runnable 加入到工作队列(workQueue)中。
2024-10-15 19:07:52
1178
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人