zmbwcx2003
码龄3年
关注
提问 私信
  • 博客:95,547
    问答:89
    动态:123
    95,759
    总访问量
  • 139
    原创
  • 82,107
    排名
  • 930
    粉丝
  • 学习成就

个人简介:卷又卷不动,躺又躺不平

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:上海市
  • 加入CSDN时间: 2021-10-14
博客简介:

zmbwcx的博客

查看详细资料
  • 原力等级
    成就
    当前等级
    5
    当前总分
    1,249
    当月
    6
个人成就
  • 获得1,357次点赞
  • 内容获得47次评论
  • 获得920次收藏
  • 代码片获得1,658次分享
创作历程
  • 12篇
    2024年
  • 124篇
    2023年
  • 3篇
    2022年
成就勋章
TA的专栏
  • 力扣hot100栏目
    5篇
创作活动更多

HarmonyOS开发者社区有奖征文来啦!

用文字记录下您与HarmonyOS的故事。参与活动,还有机会赢奖,快来加入我们吧!

0人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

HTTP基础概念和HTTP缓存技术

HTTP是超文本传输协议,主要分为三个部分:超文本、传输、协议。
原创
发布博客 2024.05.11 ·
604 阅读 ·
15 点赞 ·
0 评论 ·
19 收藏

TCP/IP网络模型

网络接口层的传输单位是帧(frame),IP 层的传输单位是包(packet),TCP 层的传输单位是段(segment),HTTP 的传输单位则是消息或报文(message)。但这些名词并没有什么本质的区分,可以统称为数据包。
原创
发布博客 2024.04.24 ·
961 阅读 ·
11 点赞 ·
1 评论 ·
12 收藏

Java并发AQS源码解析

AQS的核心思想是如果被请求的共享资源空闲,那么将当前请求资源的线程设置为有效的工作线程,并且为共享资源设置为锁定状态。这个机制AQS是用CLH队列锁(CLH是一个虚拟的双向队列,只存在节点Node之间的关联关系)实现的,即将暂时获取不到锁的线程加入到队列当中。一个Node就表示一个线程,保存了线程引用,当前节点在队列中的状态,前驱节点,后继节点。以上两个方式就是将未获得锁的线程放入等待队列尾部的实现代码,放入队列尾部之后,我们应该让线程进入等待状态,等待其他线程唤醒自己,具体实现代码如下。
原创
发布博客 2024.03.30 ·
1059 阅读 ·
19 点赞 ·
0 评论 ·
9 收藏

JDK8中ArrayList扩容机制

这是基于JDK8的源码分析,在JDK6之前以及JDK11之后细节均有变动!!首先来看ArrayList的构造方法对于无参或是指定初始化大小为0的情况,他们真正分配容量是在执行add()方法。现在以创建的ArrayList为例(初始化大小为0与无参创建的ArrayList扩容逻辑略有不同),接下来去查看add方法的源码进一步分析扩容逻辑这里调用了ensureCapacityInternal方法,我们进一步查看该方法代码接下来去查看grow方法源码,查看具体扩容逻辑。
原创
发布博客 2024.03.26 ·
353 阅读 ·
6 点赞 ·
0 评论 ·
9 收藏

解析SpringBoot自动装配原理前置知识:解析条件注释的原理

Spring提供了向Bean中自动注入依赖的这个功能,这个过程就是自动装配。SpringBoot的自动装配原理基于大量的条件注解ConditionalOnXXX,因此要先来了解一下条件注解相关的源码。
原创
发布博客 2024.03.23 ·
346 阅读 ·
5 点赞 ·
0 评论 ·
9 收藏

Java基础之类型擦除

因为泛型其实只是在编译器中实现的而虚拟机并不认识泛型类项,所以要在虚拟机中将泛型类型进行擦除。也就是说,在编译阶段使用泛型,运行阶段取消泛型,即擦除。擦除是将泛型类型以其父类代替,如String 变成了Object等。其实在使用的时候还是进行带强制类型的转化,只不过这是比较安全的转换,因为在编译阶段已经确保了数据的一致性。
原创
发布博客 2024.03.10 ·
428 阅读 ·
9 点赞 ·
0 评论 ·
11 收藏

Spring之BeanFactory与FactoryBean的区别

BeanFactory是Spring中工厂的顶层接口,也是IOC容器的核心接口,BeanFactory中定义了管理Bean的通用方法,职责包括实例化、定位、配置应用程序中的对象以及建立这些对象的依赖。BeanFactory只是一个接口,并不是IOC容器的具体实现。BeanFactory部分源码。
原创
发布博客 2024.03.08 ·
943 阅读 ·
21 点赞 ·
0 评论 ·
18 收藏

JVM篇:垃圾回收器

会对伊甸园,幸存区以及老年代进行全面垃圾回收,在老年代垃圾回收时为了满足JVM中的最大GC暂停时间参数来决定具体回收哪些区域的老年代(优先选择回收过后释放的内存空间最大的区域),在这个阶段会STW。优点:让单位时间内,垃圾回收的时间尽可能短(比如一个小时内进行了2次垃圾回收,一次回收需要0.2秒,那么一共需要0.4秒,单位时间内垃圾回收时间在总运行的时间的占比叫吞吐量,占比越低,吞吐量越高)缺点:由于采用的是标记清除的算法,因此会产生内存碎片,当新的对象无法添加时,会进行串行清除,这会导致清理时间过长。
原创
发布博客 2024.01.29 ·
721 阅读 ·
8 点赞 ·
0 评论 ·
8 收藏

JVM篇:垃圾回收算法

如下图所示,当伊甸园不满足容纳新的对象时,会进行一次小的垃圾回收(Minor GC),会将伊甸园中存活的对象复制到幸存区To中并且记录对象存活次数(每执行一次垃圾回收,所有没被回收的对象生命值+1,当生命值超过一定值后(最大为15次),则会放入老年代区域),然后将伊甸园内存清空,交换From与To的内存区域。当所有的区域都不能够满足容纳新的对象时,先回进行一次Minor GC,当回收完依旧无法满足容纳新对象则会进行一次大的垃圾回收Full GC,此次回收会对所有的区域进行垃圾回收。优点:不会产生内存碎片。
原创
发布博客 2024.01.28 ·
610 阅读 ·
14 点赞 ·
0 评论 ·
7 收藏

JVM篇:垃圾回收

除了以上四种引用,还存在一种终结器引用,当GC回收一个重写了finalize()方法的对象时,JVM会给被回收对象创建一个终结器引用,同时将该引用放入引用队列,通过一个FinalizerHandler线程去处理引用队列当中的终结器引用,首先是判断被回收对象是否执行了finalize()方法,如果没有则执行,等到下一次GC时才会去释放该对象。所谓可达性分析就是,在垃圾回收之前,对堆中所有的对象进行扫描,看是否被根对象(一定不会被回收的对象)直接或间接引用,如果是则无法被回收,没有被引用则可回收。
原创
发布博客 2024.01.26 ·
1240 阅读 ·
21 点赞 ·
1 评论 ·
28 收藏

JVM篇:直接内存

直接内存并不是JVM的内存结构,直接内存是操作系统的内存,Java本身并不能对操作系统的内存进行操作,而是通过调用本地方法。直接内存常用于NIO作为缓冲区存在,分配成本较高但是读写性能好,并且不受JVM内存回收管理。
原创
发布博客 2024.01.05 ·
1189 阅读 ·
21 点赞 ·
0 评论 ·
19 收藏

JVM篇:字符串常量池

常量池中的字符串仅是符号,第一次用到时才会变为对象利用串池的机制,来避免重复创建字符串对象字符串变量拼接的原理是StringBuilder(1.8之后)字符串常量拼接的原理是编译期优化可以使用intern方法,主动将串池中还没有的字符串对象放入串池。
原创
发布博客 2024.01.05 ·
894 阅读 ·
23 点赞 ·
0 评论 ·
20 收藏

JVM篇:JVM内存结构

虽然堆存在垃圾回收机制,但是垃圾回收机制只能回收不再使用的对象,如果对象正在被使用是不会被回收的,由于堆内存默认大小为4G,当我们的程序在短时间内的执行可能不会暴露堆内存溢出的情况,这时我们可以设置堆内存小一些进行测试(命令为-Xmx[指定大小])。常量池是*.class文件中的,当该类被加载时,它的常量池信息就会被放入运行时常量池,并把里面的符号地址变为真实地址(简而言之就是在运行时会将常量池中的#1,#2转化为内存中的真实地址,而不是#1#2)对于变量是否是线程安全,主要是看该变量是共享的还是私有的。
原创
发布博客 2023.12.28 ·
787 阅读 ·
8 点赞 ·
0 评论 ·
7 收藏

JVM篇:JVM的简介

JVM全称为Java Virtual Machine,翻译过来就是java虚拟机,Java程序(Java二进制字节码)的运行环境Java最大的一个优点是,一次编写,到处运行。之所以能够实现这个功能就是依靠JVM,这是因为JVM屏蔽字节码与操作系统之间的差异,对外提供了一致的运行环境。JVM提供了自动内存管理,垃圾回收功能数组下标越界检查多态JVM只能识别字节码文件,JVM本身并不清楚自己运行的java代码是什么。
原创
发布博客 2023.12.28 ·
707 阅读 ·
11 点赞 ·
0 评论 ·
12 收藏

Spring中常见的BeanFactory后处理器

先给出没有添加任何BeanFactory后处理器的测试代码在配置类中我们编写了如下信息同时还有一个Bean1添加了@Component注解并且能够被扫描到,所以理论上来讲,我们可以观察到五个beanName,那么执行测试代码观察输出结果可以看到,这里只输出了一个beanName,我们可以推测出其他注解没有生效,那么接下来我们将常用的BeanFactory后处理器也注册到BeanFactory后,观察输出结果。
原创
发布博客 2023.12.26 ·
524 阅读 ·
13 点赞 ·
0 评论 ·
6 收藏

Spring中常见的Bean后处理器

可以看到成功获取到了bean1与bean2对象,然后通过反射的方法将值set到bean3的属性当中即可,需要注意的是,在创建DependencyDescriptor时,第二个参数为false的意思如果单例池中找不到对应的类型时不报错,如果为true,那么单例池中不存在对应类型的对象时会报错。添加图中的代码,红框中的第一行代码是修改beanFactory的自动装配的解析器,修改过后可以获取@Value中的属性,这个东西我们后续会解释。接下来我们查看另一种Bean后处理器,首先给出Bean4中的代码。
原创
发布博客 2023.12.26 ·
568 阅读 ·
9 点赞 ·
0 评论 ·
8 收藏

Spring5底层原理之BeanFactory与ApplicationContext

读取xml文件的实现方式还有一种FileSystemXmlApplicationContext,这种实现方式与ClassPathXmlApplicationContext的区别在于前者可以指定配置文件在磁盘中的路径或是src下的路径,其他与后者无异。是Spring的核心容器,ApplicationContext的主要的方法均是调用BeanFactory的方法。BeanFactory表面只能getBean(),实际上控制反转,基本的依赖注入、直至Bean的生命周期的各种功能,都由它的实现类体提供。
原创
发布博客 2023.12.24 ·
1072 阅读 ·
24 点赞 ·
0 评论 ·
22 收藏

Zookeeper的学习笔记

原生Java APIZkClientCurator相较于原生Java API,Curator使用较为简单,其次,高版本的Curator可以向下兼容zk,但zk无法向下兼容Curator。
原创
发布博客 2023.12.22 ·
1740 阅读 ·
17 点赞 ·
0 评论 ·
17 收藏

Dubbo的学习笔记

Dubbo建议使用Zookeeper作为服务注册中心Zookeeper安装有两个需要注意的地方,首先是需要修改conf目录下的zoo_sample.cfg文件名,因为Zookeeper的生效配置文件名叫zoo.cfg,其次,需要修改该文件中的数据存放路径,最好和zookeeper安装目录同一路径zookeeper的启动,去bin目录下执行如下命令查看zookeeper的状态创建一个简单MVC项目后续我们在该项目上添加Dubbo。
原创
发布博客 2023.12.21 ·
964 阅读 ·
18 点赞 ·
0 评论 ·
26 收藏

dubbo-admin连接虚拟机中的zookeeper报错zookeeper not connected

可以优先查看总结看能否解决大家的问题,如果不能解决不需要查看解决过程浪费时间了。因此,问题的关键在于修改url路径,所以我们可以通过修改源代码中的url属性又或是直接修改配置文件中的url路径以上两种解决方法都可以解决我的zookeeper not connected报错。
原创
发布博客 2023.12.21 ·
1015 阅读 ·
10 点赞 ·
1 评论 ·
10 收藏
加载更多