自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(94)
  • 收藏
  • 关注

原创 Kafka源码系列(一)——源码环境搭建

这里使用的Kafka版本是**2.8.1**,差不多是最新的2.X.X版本,2021.9.21已经出了最新的3.0.0版本,该版本移除了Java 8以及Scala 2.12,在环境配置上有所不同,后续有时间会更新最新的3.0.0环境搭建内容。操作系统:MAC1. Java 设置JDK版本是1.8,这里就不描述具体的操作步骤。ljc:~ luojiacheng$ java -versionjava version "1.8.0_221"Java(TM) SE Runtime Environm.

2021-10-18 13:06:00 988

原创 MySQL 锁机制系列(一) —— Next-Key Lock

背景故事事务A事务Bbegin;select count(*) from t_user where uid > 20;// 返回1insert into t_user values(30,‘AA’,20);update t_user set age = 30 where uid > 20;// 显示有两条记录修改成功上面两个事务,首先先开启事务A,查询id大于20的记录数,结果返回1,说明只有1条记录uid大于20,随后事务B插入了一条uid

2021-10-14 20:54:23 4547

原创 细说ConcurrentHashMap扩容规则

当数组中存放的节点个数超过了阈值就可以任务当前的哈希冲突可能性较大,HashMap就会对当前数组进行扩容操作。在普通的HashMap中就会直接声明一个两倍大小的新数组,然后从旧数组中从左到右进行转化,但是在多线程下肯定会存在线程安全的问题。那么ConcurrentHashMap是如何来保证多线程下的扩容安全的呢?transfer是进行扩容操作的方法,接收两个参数tab(原容器数组对象),nextTab(新容器数组对象,一般长度为tab的两倍)。private final void transfer(No

2021-07-20 13:41:08 2170

原创 细说ConcurrentHashMap计数规则

对于ConcurrentHashMap而言,需要保证的是任何操作的线程安全,包括对集合元素个数的统计。一般在多线程下要统计一个全局数量大小,可以通过cas+循环(或者直接用Atomic相关的类)的方式实现,但是ConcurrentHashMap作者却并不是这样实现的。先看看如何获取集合中的元素个数,通过调用size()方法:public int size() { long n = sumCount(); return ((n < 0L) ? 0 : (n

2021-07-16 15:45:28 1567 8

原创 记一次Java参数传递时值发生变化问题

0.前景回顾代码内容如下:private boolean dfs(char[][] board, int[][] k, String word, int index, int i, int j) { if (index >= word.length()) { return true; } if (i >= board.length || i < 0 || j < 0 || j >= board[0].length) {

2021-07-14 15:28:42 860

原创 MySQL explain常见场景分析

实际场景分析:建表语句:CREATE TABLE `t` ( `id` int(11) NOT NULL AUTO_INCREMENT, `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL, `c` int(11) DEFAULT NULL, `d` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`), KEY `uindex` (`a`,`b`,`c`)) ENGINE=InnoDB

2021-07-09 10:45:11 388 1

原创 leetcode 1206 设计跳表java实现

不使用任何库函数,设计一个跳表。跳表是在 O(log(n)) 时间内完成增加、删除、搜索操作的数据结构。跳表相比于树堆与红黑树,其功能与性能相当,并且跳表的代码长度相较下更短,其设计思想与链表相似。例如,一个跳表包含 [30, 40, 50, 60, 70, 90],然后增加 80、45 到跳表中,以下图的方式操作:Artyom Kalinin [CC BY-SA 3.0], via Wikimedia Commons跳表中有很多层,每一层是一个短的链表。在第一层的作用下,增加、删除和搜索操作的时

2021-07-01 10:49:06 177

原创 记一次愚蠢的AOP使用经历

在写aop代码时,不知怎的出现了类似下面所写的愚蠢代码,将proceed方法放到了一个新线程。 @Around("execution(* com.ljc.service.Doc.read())") public Object doBasicProfiling1(ProceedingJoinPoint pjp) throws Throwable { new Thread(() -> { try { Object re

2021-06-07 18:09:52 1074 1

原创 重识Spring的BeanPostProcessor处理器

重识Spring的BeanPostProcessor处理器BeanPostProcessor是Spring用来实现快速拓展最为核心的接口,现在常说的AOP就是通过实现BeanPostProcessor接口来进行拓展。下面就先看下BeanPostProcessor到底长什么样?????BeanPostProcessor接口public interface BeanPostProcessor { //在bean init之前执行 @Nullable default Object pos

2021-04-20 13:37:31 119

原创 Spring为什么需要使用三级缓存?

Spring为什么需要使用三级缓存?有如下一个场景,X类中注入了Y类,Y类注入了X类,按照正常的类加载顺序,X类在注入Y的时候其实还没完全初始化完成,而注入的Y此时就开始实例化,发现也需要用到X,这是就去获取X,但是X并没有初始化完成,这个时候就会出现X在等Y初始化完成,而Y又在等X初始化完成,就进入了一个互相等待的情况。Spring是如何避免这种情况的呢?那就是三级缓存。先来说说Spring有哪三级缓存。一级缓存 singletonObject : 单例对象集合;二级缓存 earlySing

2021-04-15 15:29:13 5951

原创 @Autowired 和 @Resource比较

@Autowired 和 @Resource比较所属的包不同@Autowired:org.springframework.beans.factory.annotation,即为Spring中的类;@Resource:javax.annotation,属于jdk。使用上@Autowired和@Resource使用没什么区别,都可以作用在字段或者方法上;@Autowired :没有name和type属性,默认是注入方式是byType,当有多个类型匹配的bean时会抛出异常信息,问我借助于@Quali

2021-04-01 10:38:59 218

原创 @Autowired详解

@Autowired详解@Autowired是在Spring中新引入的注解,所属的包为org.springframework.beans.factory.annotation;定义如下:@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})@Retention(RetentionPolicy.RUNTIME

2021-03-31 21:11:29 10460

原创 @Resource详解

@Resource详解阅读本文之前希望读者最好已经对整个Bean的大体Spring执行顺序已经有了一定的了解。示例定义一个接口,表示水果类,只包含一个方法代表售卖。public interface Fruit { void sell();}有两个具体实现类,Apple????和Banana????。@Servicepublic class Apple implements Fruit { public Apple() { System.out.prin

2021-03-31 16:14:57 70725 4

原创 Spring 循环依赖

Spring —— 循环依赖Spring Bean默认都是以单例的形式存在,但是也支持prototype形式,这里主要介绍单例Bean。示例@Componentpublic class X { @Autowired private Y y; public X() { System.out.println("X construct..."); }}@Componentpublic class Y { @Autowired p

2021-03-26 14:23:32 92

原创 Spring Bean的完整生命周期回调

Bean的生命周期回调​ Bean的生命周期回调主要是在Bean对象创建和销毁的过程中会执行一些init和destroy方法,了解不同形式的init和destroy声明方法,以及它们之间的先后执行顺序会有助于我们理解Bean的生命周期过程。下文主要介绍了生命周期回调的各种使用方式,以及在Spring中是如何实现的。常用的三种形式:InitializingBean 和DisposableBean接口,分别实现afterPropertiesSet 和 destroy方法;JSR-250下的@P

2021-03-25 14:40:38 507

原创 Java获取静态资源文件路径

Java获取静态资源文件路径​ 开发中经常会有文件相关的操作,比如说文件的查找,文件的存储。但是在使用中往往会因为路径问题耽误大量的开发时间。在实际中常常通过File file = new File(“c://a.txt”)方式来使用,但是切换环境后可能会遇到找不到该资源的问题。Java中,可以使用getResource()方法来获取资源。项目工程如下:![目录结构](https://img-blog.csdnimg.cn/20210120170130893.png?x-oss-process=i

2021-01-20 17:02:40 5904

原创 记一次RestTemplate使用异常问题

场景描述系统需要调用第三方的http接口,并获取到返回的json格式结果。问题用RestTemplate进行GET形式调用时发现和浏览器直接访问效果不同,可能无法访问接口,或者参数存在问题导致请求返回异常结果。调用格式如下:String result = restTemplate.getForObject("http://127.0.0.1:8080/acm?k=%3", String.class);解决接口调用出现异常,马上就想到了请求格式发生了变化,通过调试模式.

2020-09-28 15:05:01 1957

原创 分布式

1. 2PC1.1 准备阶段事务协调者向所有参与者节点询问是否可以执行提交操作,并开始等待各参与者节点的响应。参与者节点执行询问发起为止的所有事务操作,并将Undo和Redo信息写入日志。各参与者节点响应事务协调者发起的询问。如果参与者节点的事务操作实际执行成功,则它返回一个“同意”信息,否则返回“终止”信息。1.2 提交阶段所有参与者节点都返回同意事务协调者节点向所有参与者节点发出“正式提交”的请求。参与者节点正式完成操作,并释放在整个事务期间内占用的资源。参与者节点向协调者节点发

2020-07-29 11:01:09 113

原创 Redis笔记

Redis五大数据类型及其常用操作字符串set key value ——设置属性值get key ——获取值getset key value ——先获取值再重新设置值del key ——删除incr key ——自增,如果key不存在,则会创建一个值为0的变量decr key ——自减incrby key number ——变量+numberdecrby key number ——变量-numberappend key string ——追加字符串getrange key sta

2020-07-29 10:59:42 149

原创 netty知识点(一)

1. rmi(remote method invocation)只针对javaclient:stud 桩server:skeleton 骨架2. RPC(Remote Procedure Call)远程过程调用跨语言定义一个接口说明文件:描述了对象(结构体)、对象成员、接口方法等一系列信息。通过RPC框架所提供的编译器,将接口说明文件编译成具体语言文件。在客户端与服务器端分别使用RPC编译器所生成的文件,即可像调用本地方法一样调用远程方法。相对于Rest形式可以减少网络传输。

2020-07-29 10:57:45 199

原创 Netty的ByteBuf和JDK的ByteBuffer的区别?

1.Buffer1.1 重要属性capacity:buffer中包含元素的个数。其值一旦确认后不可更改。limit:第一个不可被读元素的索引值。position:下一个要被读或者写元素的索引值。三个属性之间的关系:0 <= mark <= position <= limit <= capacity 。1.2 重要方法clear用来让一个buffer的属性回到特定值,相当于达到了清空buffer中元素的效果。 public final Buffer cl

2020-07-29 10:56:22 367

原创 Java单例模式个人小结

1.饿汉式//1.final修饰保证不能被子类继承,避免修改类行为public final class Singleton1 implements Serializable { //2.一定要私有化构造函数,避免通过构造函数新建对象,但还是可以通过反射创建 private Singleton1(){} //3.实例采用static和final修饰,类加载时就完成了初始化,所以能保证对象的唯一性, // 同时还可以保证线程安全,不过一开始就创建了对象,不能达到懒.

2020-07-11 21:28:59 90

原创 git push出现error: src refspec master does not match any

1.检查有无git add或者git add的文件是否存在;2.git push命令提交会提交到远程对应名称的分支,例如本地是dev分支,如果要提交到远程master分支,就用git push origin dev:master。...

2020-05-04 16:27:14 5172

原创 docker 运行logstash出现permission denied

解决方法在运行容器的时候加上--privileged=true。

2020-04-27 15:39:47 2316 1

转载 mac上VMware固定IP地址

1.进入设置->选择网络设备器->记录MAC地址2.编辑dhcpd.conf文件 sudo vi /Library/Preferences/VMware\ Fusion/vmnet8/dhcpd.conf在最下面添加:host CentOS7 { //CentOS7文件虚拟机文件名 hardware ethernet MAC地址; //这里MA...

2020-04-27 11:41:16 1136

原创 docker kibana出现Kibana server is not ready yet问题

启动方式 docker run --name kibana -d -p 5601:5601 --link elasticsearch -e "ELASTICSEARCH_URL=http://IP:9200" kibana:7.1.1注意上面的IP是指elasticsearch容器IP,而不是本机IP查看容器IP:docker inspect --format ‘{{ .NetworkS...

2020-04-26 18:48:09 2531

原创 mac centos虚拟机上安装docker遇见的问题

centos7下载地址:http://mirrors.aliyun.com/centos/7/isos/x86_64/1.查看docker列表yum list installed | grep docker2.安装yum -y install docker3.启动systemctl start docker4.查看systemctl status docker可能遇见...

2020-04-26 10:24:00 310

原创 linux 为 repo 'AppStream' 下载元数据失败

显示错误:为 repo 'AppStream' 下载元数据失败错误:为 repo 'AppStream' 下载元数据失败解决: 查看网络有无连接,或者防火墙。

2020-04-25 10:44:03 24914 13

原创 docker安装elasticsearch以及可视化工具

Docker安装Elasticsearch1.拉取elasticsearchdocker pull docker.elastic.co/elasticsearch/elasticsearch:6.3.22.启动elasticsearchdocker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9...

2020-01-06 14:24:16 1275 1

原创 ChannelInitializer实现流程

1.ChannelInitializerChannelInitializer是一种特殊的ChannelInboundHandler,可以通过一种简单的方式(调用initChannel方法)来初始化Channel。注意:当initChannel被执行完后,会将当前的handler从Pipeline中移除。2.执行流程...

2019-12-05 14:13:28 1485

原创 Scalable IO in Java 译文

1.概要可伸缩的网络服务 事件驱动程序 Reactor模式(基本版本,多线程版本,其他变型) 参考了解java.nio中有关非阻塞的API2.网络服务web服务,分布式对象等等 大都具有相同的基本结构:读请求 ——》 解码请求 ——》 处理请求 ——》 编码响应 ——》 发送响应 但是,每一步都有不同的性质和成本3.经典服务设计每一个hanlder...

2019-11-07 14:56:35 624

原创 关于mac升级Catalina后无法打开有道问题

解决方法: 系统偏好设置 —> 语言与地区—> App —> + —>添加有道的语言为英语。

2019-11-06 16:19:14 1052 1

原创 垃圾回收机制

垃圾回收的时间?当Eden区没有足够空间进行分配时,会触发Minor GC;升级到老年代所需的内存大于老年代剩余内存就会出发Full GC。如何判断一个对象是否应该回收:引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。该算法的缺点很难解决对象之间相互循环引用的问题。可...

2019-08-05 13:35:57 157

原创 快速排序及其优化(JAVA)

1.Java代码实现public class QuickSort { /** * 选择一个哨兵节点,将所有小于哨兵节点的元素放到左边,大于哨兵节点的元素放到右边 * 最后将哨兵节点和小部分中的最右边那个值交换(j),i就处于大部分的最左边 * @param array 数组元素 * @param low * @param high ...

2019-08-05 13:31:53 407

原创 nginx笔记(四)

1.location匹配优先级=:进行普通字符精确匹配,也就是完全匹配^~:表示普通字符匹配,使用前缀匹配~\~*:表示执行一个正则匹配,~区分大小写,~*不区分大小写2.alias和root的使用区别alias在查找文件时直接按照配置给出的路径root需要将配置路径和URL路径结合起来查找3.ab接口压力测试工具安装 : yum install httpd-tools...

2019-07-21 15:08:21 79

原创 nginx笔记(三)

1.rewriteSyntax:rewrite regex replacement [flag];Default:—Context:server,location,if1.1 flag类型last:停止rewrite检测break:停止rewrite检测redirect:返回302临时重定向,地址栏会显示跳转后的地址permanent:返回301永久重定向,地址栏会显示跳转后...

2019-06-30 19:55:09 111

原创 nginx笔记(二)

1 文件读取Syntax:sendfile on | off;Default:sendfile off;Context:http,server,location.if in location1.1Syntax:tcp_nopush on | off;Default:tcp_nopush off;Context:http,server,location作用:sendfile开...

2019-06-30 19:54:06 114

原创 nginx笔记(一)

1.关闭iptables中的规则iptables -t nat -F2.停用selinux查看是否停用:getenforce设置停用:setenforce 03.安装gccyum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake4.yum -y install wegt httpd-tools ...

2019-06-29 14:43:28 360

原创 Redis

Redis五大数据类型及其常用操作字符串set key value ——设置属性值get key ——获取值getset key value ——先获取值再重新设置值del key ——删除incr key ——自增,如果key不存在,则会创建一个值为0的变量decr key ——自减incrby key number ——变量+numberdecrby key numbe...

2019-05-20 15:00:52 98

原创 GitHub

GitHub地址:https://github.com/ljcgit

2019-05-10 21:16:36 139

空空如也

空空如也

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

TA关注的人

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