自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

积土成山,风雨兴焉;积水成渊,蛟龙生焉!

  • 博客(143)
  • 资源 (6)
  • 问答 (5)
  • 收藏
  • 关注

原创 【JAVA核心知识-面试宝典】导航 [持续更新中...]

JAVA核心知识导航,目标是完成一个尽量包含JAVA知识各个方面的系列博客。通过本系列博客能让有JAVA基础的读者进行一定的复习和扩展,让无JAVA基础的读者对JAVA各个方面有基础的认识。加油!1: JVM内存区域2: JVM的垃圾回收与回收算法3: JAVA中的四种引用类型4.1: JVM GC 垃圾收集器4.2: CMS垃圾收集器4.3: G1垃圾收集器5: JVM的类加载......

2020-11-24 09:30:44 979 1

原创 【JAVA核心知识】分布式事务框架Seata

最新版本: v1.6.1 Dec 22, 2022。

2023-12-28 10:50:17 979

原创 【小笔记】MyBaits的Cursor

流式查询 指的是查询成功后不是返回一个集合而是返回一个迭代器,应用可以通过迭代器每次取一条查询结果。流式查询的好处是能够降低内存使用。例如我们想要从数据库取 1000 万条记录而又没有足够的内存时,就不得不分页查询。而分页查询就需要我们按照顺序查询并设置一个参数来记录当前进度并在下次查询时将进度作为参数传入(比如按id升序查询,记录每次查询结果的最大id, 下次查询将这个最大id传入只查询大于这个id的),否则就会出现深度分页的情况。

2023-11-07 16:16:06 317

原创 【JAVA核心知识】深度了解MySql的InnoDB引擎

了解了页分裂,页合并也就更好理解的,当删除一行数据时,实际上记录并没有被物理删除,而是仅仅打上一个标记声明可以被其他记录使用,当页中剩余的记录不足MERGE_THRESHOLD(默认为页体积的50%)时,InnoDB会探查这个页前面或者后面的页是否有足够的空间,如果有,就会把这个页的数据迁移过去,完成页合并,这个动作同样相当耗费资源。构建共分为三个阶段。一条数据执行时,如果是读操作,要查找的数据所在的数据页在内存中时,则将结果返回,否则会先将其所在的数据页加载到内存中,然后再返回结果。数据页默认16KB。

2023-10-24 16:24:27 265

原创 【Java核心知识】spring boot整合Mybatis plus + Phoenix 访问Hbase与使用注意

为了Phoenix能让开发者通过SQL访问Hbase而不必使用原生的方式?引用Phoenix官网上的一句话:SQL is just a way of expressingnot. 即SQL不是一种数据操作技术,而是一种特殊的表达方式。只是表示你需要什么而不是你如何获得。

2023-03-03 09:35:41 2518 1

原创 【小笔记】webhook是什么

webhook不是一项技术,他只是一个概念。

2023-02-16 09:58:03 424

原创 【小笔记】一种@Reference 注入为null的情况与排查过程

这里要注意,如果你依赖的服务Service里面存在ClassNotFound,而你在本项目中又没有用到这个Class,那在启动过程中,并不会报错,应用也会正常部署。Dubbo对于这种情况也仅仅是打印一个Warning级别的日志而不会影响部署进程。这个日志很可能会淹没在大量的启动日志里面。因此对于这类问题,可以考虑调整一下日志级别,然后查询关键日志条目的上下内容,也许能帮助我们发现蛛丝马迹。我这里排查的是应用部署成功,同一个包下面其它服务都能正确初始化,唯独一个服务TESTXXX无法初始化。

2023-02-14 18:50:28 469

原创 【杂记】rocketmq-spring-boot:2.0.3的无法部署与参数解析错误bug

因为rocketmq-spring-boot在初始化时会用DefaultRocketMQListenerContainer.getMessageType方法通过反射获取RocketMQListener接口以获取泛型参数(就是onMessage的入参类型)。如果继承了接口,但是不包含RocketMQListener接口,则会导致参数类型解析错误。因此如果使用的rocketmq-spring-boot:2.0.3使用的时间要注意。否则会导致死循环或者参数类型解析错误。当然更好的方法是做组件升级。

2023-02-13 17:21:24 272

原创 【JAVA核心知识】46:什么是零拷贝Zero-copy

零拷贝相较于传统的IO流程拥有更高的数据发送效率,无论是RocketMq,Kafka还是Netty等都用到了零拷贝技术,那究竟什么是零拷贝呢,零拷贝又是通过什么方式提升数据发送效率呢?首先我们要明白,一次数据发送过程就是将磁盘中的目标数据交给网卡传输出去的流程。磁盘以及网卡都属于硬件层。而应用程序是不能直接操作硬件的。如果要操作硬件,需要进行上下文切换从用户态切换到内核态由操作系统来完成硬件交互。关于用户态,内核态,上下文切换这些这里不再赘述。

2023-01-30 18:58:34 624

原创 @PostConstruct,InitializingBean,Init-method,BeanPostProcessor 在Spring Bean初始化之后执行指定方法

在Spring及其扩展框架中,可以利用@Resource或者@Autowired来进行自动装配,但是有时需要在实例化完成后执行一些初始化操作,而这些操作依赖于装配的对象。而由于控制反转的原则,又不能直接写在构造方法里面new一个对象。此时就需要其他途径完成初始化的动作。

2022-11-27 22:44:23 998

原创 raft协议原理 ---【JAVA核心知识】

Raft协议是工程上使用较为广泛的强一致性、去中心化、高可用的分布式协议。目前 etcd,consul都是基于Raft协议进行数据同步。Raft协议和Zookeeper的一样脱胎于Paxos协议。以此可以看出来Paxos协议在分布式协议学术理论届方面的地位。为什么是说是学术理论届呢?这是因为Paxos协议的出了名的难懂,这使得他的应用受到限制。不同于Paxos协议的难以理解。Raft协议的主要特点就是易于理解。

2022-10-17 15:52:15 795

原创 简简单单一段话描述设计模式

设计模式的概念由著名建筑师Alexander提出:每个模式都描述了一个在我们周围不断发生的问题,然后描述了该问题的解决方案的核心,通过这种方式,我们可以无数次的重用那些已有的解决方案而不必再做重复性的工作。这一概念同样适用于软件开发领域。设计模式并不是一种技术,而是特定场景下解决问题的一种方案。在软件开发领域,设计模式(Design Pattern)是一套被反复使用,多数人知晓的,经过分类编目的,代码设计经验的总结。使用设计模式是为了可重用代码(重用性),让代码更易理解(可读性),保证代码的可靠性。

2022-09-30 17:07:48 415

原创 【小笔记】基于SpringBoot使用WebSocket进行前后端通信

前端向后端发送消息请求相应的接口就可以了。但是有些场景:比如聊天室互相发送消息或者进度条跟踪。如果仅靠前端主动发起通信获得消息的话就需要不断的轮询后端获得最新数据。这种方式会造成带宽等资源的浪费(因为请求http请求可能包含较长的请求头,而真正有用的可能只是其中的一小部分),而且还会增加后端的压力。如果后端能主动向前端推送消息就能很简单的解决这个问题。一种比较新的技术去做轮询的效果是Comet。这种技术虽然可以双向通信,但依然需要反复发出请求。而且在Comet中,普遍采用的长链接,也会消耗服务器资源。...

2022-08-05 17:09:59 2228

原创 石杉的架构笔记-阅读记录【持续更新...】

最近发现一个宝藏博主:[石杉的架构笔记]。博文质量很高,打算通篇阅读一下。这里针对每篇博文大致做一下内容简介以便后面快速检索以及查漏补缺。

2022-07-10 19:37:01 540

原创 DB2错误码表格

DB2错误码速查

2022-07-03 11:40:30 950

原创 Java生成随机数的几种方式:Random,ThreadLocalRandom,SecureRandom与Math.random()

Java生成随机数的几种方式:Random,ThreadLocalRandom,SecureRandom与Math.random()

2022-06-26 16:05:20 460

原创 Spring读取properties文件

假设此时有properties文件:mytest.propertiestestKey=testValue1 利用PropertyPlaceholderConfigurer1.1 注解<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:mytest.properties"

2022-05-09 15:04:04 1441

转载 Spring用代码来读取properties文件

我们都知道,Spring可以@Value的方式读取properties中的值,只需要在配置文件中配置org.springframework.beans.factory.config.PropertyPlaceholderConfigurer<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property na

2022-04-25 10:04:25 512

原创 44:LFU算法集:LFUDA,Window-LFU与Window TinyLFU

LFU(Least Frequently Used)即最少访问算法。通过访问频率作为数据淘汰的依据。核心思想是:如果一个数据在过去的一段时间访问的次数较少,那么未来他被访问的概率也较低。与之相应的还有LRU(Least Recently Used),即最近最少使用算法,通过最后一次访问时间来作为数据淘汰的依据,核心思想是如果一个数据已经有较长的时间没有收到访问,那么未来他被访问的概率也较低。

2022-04-19 17:36:47 506

原创 字符串拼接为什么要使用StringBuilder而不是直接运算

能从很多地方看字符串多次拼接拼接要注意不要直接运算,而是通过StringBuilder(StringBuffer)完成。可以通过反编译看看直接使用‘+’运算是怎么运行的来体现为什么要这样做。写一个简单的String字符串拼接代码:public class Test { public static void main(String[] args) { String str1 = "123"; String str2 = "456"; String s

2022-04-07 16:44:29 482

原创 javap命令获取字节码,看看JVM到底是怎么执行你的代码

javap命令前置知识javap的使用JVM指令集小实战javap是 Java class文件分解器,可以反编译,也可以查看java编译器生成的字节码。用于分解class文件。- 百度百科通过javap命令,就可以获取到编译器生成的字节码,从而看JVM会如何执行一段代码。前置知识需要注意,了解JVM内存区域是了解这个命令以及看懂字节码的基础。javap的使用javap <options> <classes> :其中options为可选的参数,classes则是需要解析

2022-04-07 14:54:36 794

原创 【JAVA核心知识】开发常用的linux命令整理

日常开发中,如果不是直接使用linux作为工作PC,仅仅是连接至系统环境进行一些运维和问题排查工作,用的linux命令并不多,下面只是列了几个常用的,说明了命令的基本作用和简单的使用,具体的使用参数和更多的命令可以查阅Linux命令大全(手册)。pwd:查看当前路径grep ** 管道,文本搜索,全面的正则表达式支持。//查询上下git log |grep “xxxx” -C 5//查询往后 aftergit log |grep “xxxx” -A 5//查询往前 beforegit lo

2022-03-22 11:34:51 1395

原创 【JAVA核心知识】top,jstack,jps,jmap排查CPU和OOM问题

top命令查看进程资源信息top命令类似于windows的任务管理器,通过这个可以看到系统中各个进程的资源占用状况,常用于服务端性能分析。语法格式:top [参数], 按q退出命令,一般不需要加参数,直接top就行常用参数:-d:改变显示的更新速度,或是在交谈式指令列( interactive command)按 s-q:没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行-c:切换显示模式-s:安全模式,将交谈式指令取消, 避免潜在的危机

2022-03-22 11:29:28 3751

原创 【JAVA核心知识】23-F.1 Redis数据底层存储原理

Redis具有五种数据类型:String,List,Hash,Set,ZSet,底层使用了多种数据结构,同种数据类型在不同的状态也会使用不同的数据结构。RedisObjectRedis中的值都是一个个键值对,其中键总是字符串对象,值则可以是字符串,整数,列表,集合等。Redis的值对象都通过RedisObject来表示。typedef struct redisObject{ //表示类型:string,list,hash,set,zset unsigned type:4;

2022-03-14 13:38:14 1375

原创 MySQL造成更新死锁及插入死锁的几种常见原因

更新死锁要了解更新死锁,首先要了解更新时加锁的顺序:通过聚簇索引更新时,会在聚簇索引上加锁。通过二级索引进行更新时,会先对二级索引加锁,然后对聚簇索引加锁。使用聚簇索引更新二级索引时,会先对聚簇加锁,再对二级索引加锁。此结论的前提条件为结论4。更新二级索引时,只有二级索引所在的列产生实际变化的更新,才会对二级索引加锁,否则仅会对聚簇索引加锁。在REPEATABLE_READ级别下,对索引的加锁范围是索引所确定的范围,而不是最终结果集范围。也就是说需要回表查询才能剔除的行的聚簇索引依然会被加锁。

2022-02-18 16:58:00 4454

原创 【JAVA核心知识】39:一文看懂RocketMQ,轻松应对面试

1.RocketMQ的角色划分生产者Producer: 消息的生产者,也称为发布者消费者Consumer:消息的消费者,也称为订阅者Broker:可以简单的理解为就是RocketMQ的应用实例NameServer:RocketMQ的注册中心,RocketMQ需要启动时要先启动NameServer再启动Broker,Broker启动时需要向所有NameServer注册,生产发送消息之前需要从NameServer获取Broker服务列表,然后根据负载均衡算法从列表中选择一台进行消息发送。Broker需

2022-01-15 16:17:47 1354

原创 助你刷题LeetCode - 常见算法(持续更新中)

刷题LeetCode常见算法

2022-01-11 11:30:43 562

原创 【JAVA核心知识】38:Zookeeper的使用与典型应用场景 ---- 《从Paxos到Zookeeper》读书笔记

数据发布/订阅通过Zookeeper的Watcher通知可以完成数据的发布和订阅,Zookeeper的Watcher通知,具有以下特性:一次性:无论是客户端还是服务端,一旦一个Watcher被触发,Zookeeper都会将其从对应的存储中移除,因此开发人员在Watcher的使用上要记住的一点是需要反复注册,这样的设计有效的减轻了服务端的压力。避免Watcher一直有效而节点更新有非常频繁的情况下,服务端需要不停的对客户端发送通知,对网络和服务端性能的影响都很大。客户端串行执行:客户端Watcher回

2022-01-07 17:59:33 865

原创 使用profile进一步分析SQL资源消耗

使用EXPLAN仅仅可以获得SQL的执行策略,如果需要进一步探查SQL的执行情况,则需要使用profile来完成了。要想使用profile,第一件事是先打开profile的采集开关, profile默认关闭,可以通过SQL:set profiling=1;来打开,这个开关是连接的级别的,也就是说如果你重新建立连接,那么需要再次执行此SQL打开采集,然后再执行自己要检测的SQL,执行完毕后使用SQL:show profiles;查看最近15条执行记录,这个条目数可以通过设置profiling_

2021-12-29 16:09:36 998

原创 【小笔记】临时表:删除无主键表中的重复记录,只保留一条记录

整体思路是先找出重复的记录放入临时表中,然后删除原表中的重复数据,再将临时表中的数据插入进去找出重复的放入临时表:create table tmp_table as (select name,age,sex, count(1) as cn from ori_table group by name, age,sex having cn > 1);删除原表重复的:delete ori_table from ori_table inner join tmp_table using (name,a

2021-12-22 10:26:14 1081

原创 【JAVA核心知识】36:ZooKeeper的ZAB协议 ---- 《从Paxos到Zookeeper》读书笔记

ZooKeeper并不是Paxos算法的实现,ZooKeeper并没有完全采用Paxos算法,而是专门设计的崩溃可恢复的原子消息广播算法ZAB(ZooKeeper Atomic Broadcast)。ZooKeeper使用了一个单一的主线程来接收并处理客户端的所有事物请求,并采用ZAB协议,将服务器状态变更以事务Proposal的形式广播到所有的副本进程上去。ZAB保证同一时刻一个集群只有一个主线程来广播服务器的状态变更。且ZAB协议保证一个全局的变更序列被顺序应用。ZAB协议保证当主线程出现崩溃或者重启

2021-12-14 09:46:12 1651

原创 【JAVA核心知识】37:ZooKeeper基础 ---- 《从Paxos到Zookeeper》读书笔记

顺序一致性:从同一个客户端发起的事务请求,最终会严格的按照发起顺序应用到

2021-12-12 15:44:24 212

原创 一次关于InnoDB在UPDATE时对聚簇索引及二级索引加锁情况的试验

先上结论:在REPEATABLE_READ和READ_COMMITTED两个级别下,无论是对二级索引加锁还是对聚簇索引加锁,只有实际发生冲突时InnoDB才会在发生冲突的索引上实际进行加锁,未发生冲突的索引会使用MVCC进行并发控制,而不是直接加锁。在REPEATABLE_READ和READ_COMMITTED两个级别下,通过二级索引进行更新时,会先对二级索引加锁,然后对聚簇索引加锁。在REPEATABLE_READ和READ_COMMITTED两个级别下,使用聚簇索引更新二级索引时,会先对聚簇加锁

2021-12-11 21:51:29 1724 7

原创 【小笔记】Spring构造方法@Autowired注入的对象为null

如果这样配置OuterBean的构造方法<bean id="OuterBean" class="com.test.OuterBean"> <constructor-arg name="par"> <list> <value>一二三四五</value> </list> </constructor-arg>

2021-12-10 15:56:20 1116

原创 【JAVA核心知识】35:一致性协议:2PC,3PC与Paxos ---- 《从Paxos到Zookeeper》读书笔记

分布式的特点分布性:计算机在空间上随意分布,机器的分布情况也会随时变动对等性:分布式系统所有的节点平等,没有中心的概念。并发性:程序运行中并发性操作是常见的行为缺乏全局时钟:分布式系统缺乏全局时钟,因此很难定义两个事件谁先谁后。故障总会发生:人格在设计阶段考虑到的异常情况,一定会在系统运行中发生,并且还会遇到很多在设计时未能考虑到的异常故障。因此,设计时不能放过任何异常情况。挑战通信延时,单机内存访问的延时在纳秒级别(通常是10ns),而正常一次网络通信在0.1-1ms左右。想当于100

2021-12-01 11:19:24 577

原创 【LeetCode闲暇一题】34. 在排序数组中查找元素的第一个和最后一个位置【中等】关键词:数组;二分查找

题目给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。进阶:你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?示例 1:输入:nums = [5,7,7,8,8,10], target = 8 输出:[3,4]示例 2:输入:nums = [5,7,7,8,8,10], target = 6 输出:[-1,-1]示例 3:输入:nums =

2021-11-30 23:42:22 76

原创 【LeetCode闲暇一题】33. 搜索旋转排序数组【中等】关键词:数组;二分查找

题目整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为[nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …,nums[k-1]](下标 从 0 开始 计数)。例如,[0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。给你 旋转后 的数组 nums 和一个整数

2021-11-29 10:41:09 61

原创 【JAVA核心知识】34:事务的ACID;分布式的CAP原则与BASE理论 ---- 《从Paxos到Zookeeper》读书笔记

事务的ACID;分布式的CAP原则与BASE理论分布式的特点分布式的挑战事务的特征:ACIDCAP原则BASE理论分布式的特点分布性:计算机在空间上随意分布,机器的分布情况也会随时变动对等性:分布式系统所有的节点平等,没有中心的概念。并发性:程序运行中并发性操作是常见的行为缺乏全局时钟:分布式系统缺乏全局时钟,因此很难定义两个事件谁先谁后。故障总会发生:人格在设计阶段考虑到的异常情况,一定会在系统运行中发生,并且还会遇到很多在设计时未能考虑到的异常故障。因此,设计时不能放过任何异常情况。分

2021-11-27 22:26:39 208

原创 【LeetCode闲暇一题】31. 下一个排列【中等】

题目实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列(即,组合出下一个更大的整数)。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须 原地 修改,只允许使用额外常数空间。示例 1:输入:nums = [1,2,3] 输出:[1,3,2]示例 2:输入:nums = [3,2,1] 输出:[1,2,3]示例 3:输入:nums = [1,1,5] 输出:[1,5,1]示例 4:输入:nums = [1] 输出:[1]

2021-11-25 14:52:14 550

原创 stackoverflow无法注册解决方案

stackoverflow注册时点击sign up后跳转到当前界面,没有任何提示。没有提示是因为js不支持,通过F12查看输入框附近就能看到提示,为人机验证失败。其实就是没有经过图片验证,而注册时没有图片验证的原因是因为图片验证是采用的google的人机验证,查看网络就能看到请求谷歌人机验证失败了:因此需要换一个人机验证链接,可以使用www.recaptcha.net来完成人机验证:去自己浏览器的扩展工具里面搜索Gooreplacer,这个工具可以对特定链接进行重定向,安装之后进入该插件,在重定向选

2021-11-24 21:05:44 6659 19

PC全局根据文件名搜索工具

仅做保存,侵权请联系,会立刻删除

2022-03-21

java反编译工具:jd-gui

反编译

2022-03-21

栈信息分析工具Thead and Monitor Dump Analyzer(TMDA)

栈信息分析

2022-03-21

JVM堆内存分析工具,OOM排查工具。包括ha和mat两种

ha和mat两种工具,用来进行JVM堆内存分析

2022-03-21

javacore分析;dump分析;反编译

javacore可视化分析;dump分析;反编译

2021-12-30

redis-rdb-tools-master的安装与简单使用.zip

redis的dump.rdb文件分析工具

2021-10-15

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除