- 博客(47)
- 资源 (1)
- 收藏
- 关注
原创 MQ重复消费与消息顺序
零拷贝分两种方式:mmap和transfile(文件传输过程中直接使用DMA进行优化),java中的MappedByteBuffer就是使用的mmap的方式,而FileChannel的底层就是使用了transfile来操作。RockeMQ当中使用mmap方式来对他的文件进行读写,commitlog文件大小为1G,如果写满再生成一个1G的文件。在kafka中,它的index日志文件也是使用mmap的方式来读写的,在其它日志文件中,并没有使用零拷贝的方式。6、定制高级功能,死信队列、延迟队列、事务消息等等。
2024-11-24 22:08:15
428
原创 消息队列MQ
如果生产者向MQ发送的本地事务状态为未知状态,MQ对未知状态的消息发起回查,此时生产者检查本地事务状态,再将状态发送给MQ,如果再次为未知,会重试,MQ的回查默认会查15次,如果15次都失败,则丢弃消息。RabbitMQ:将队列配置成持久化队列,新增的Quorum类型的队列,会采用Raft协议来进行消息同步,使用的两阶段提交的方式。1、普通集群中,同步同步、异步同步,异步同步效率更高,但会产生消息丢失的风险。1、普通集群:消息是分散存储的,节点之间不会主动进行消息同步,是有可能丢失消息的。
2024-11-24 18:43:49
381
原创 java垃圾回收
拷贝算法将内存分成大小相同的两份,当清理时将存活的对象拷贝到另一块空间,该算法解决了内存碎片问题,但造成了空间的浪费,同时回收的效率会受到存活对象多少的影响。STW:在垃圾回收过程中,java的所有用户线程都是停止的,GC线程除外,本地方法可以执行,但是它们不能与JVM交互。:给堆中的每个对象记录一个引用个数,引用个数等于0就认为是垃圾,但这种方式无法解决循环引用的问题,java早期使用的垃圾回收使用此种方式。并发标记:跟CMS相似,不遍历所有Old区的对象,只遍历第二步标记出来的Region。
2024-11-24 10:51:55
1131
原创 java双亲委派机制
3、对象首先会分配在新生代的eden区,然后经过一次minorGC,对象如果存活的话,就会进入Survivor区,在后续的每次GC中,对象如果一直存活就会在S区来回拷贝,每移动一次年龄增加1岁,默认年龄增加到15岁如果还存活,就会进入老年代。后一种加载器是前一种的父类,每一种类加载器都有自己的加载目录。每个类加载器加载过的类都会有一个缓存。一、加载:将java的字节码数据加载到JVM内存中,并映射成JVM认可的数据结构。1、用户创建一个对象,JVM首先会到方法区去查找对象的类型信息,然后再创建对象;
2024-11-24 09:00:28
328
原创 英语音节的划分及发音规律
5、如果两个元音字母中间有两个辅音字母,第一个是r,这两个辅音字母,也分别划入左右两个音节。3、两个元音之间只有一个辅音字母或辅音字母组合,左边的元音按重读闭音节规则发音,那么,这个辅音字母或辅音字母组合通常划入左边的音节。2、当两个元音字母中间只有一个辅音字母时,左边的元音又是按重读开音节规则发音,这个辅音字母通常划入右边的音节。6、如果两个元音或元音和半元音字母组合发的是一个元音或双元音,划分音节时,不能将其从中分开,要划在一起。1、一个音节至少有一个元音字母。即a,e,i,o,或u,有时也可以是y。
2024-11-22 15:24:11
464
原创 小学知识相关链接
人教版三年级上册语文电子课本,2023-2024最新高清版本语文三年级上册第四单元课文朗读+知识点+图文解读《总也倒不了的老屋》【电子课本】小学语文部编人教版四年级上册(高清版)《总也倒不了的老屋》讲解:https://xiaodu.baidu.com/saiya/superapp/poem.html#/detail?anchor=yuanwen&from=aladdin&lessonid=30698&pid=30698&srcid=60862【三上英语】2024新人教版三年级英语上册《单词表》,音标、释义
2024-11-19 23:10:12
352
原创 收藏一些有用的文章
https://blog.youkuaiyun.com/u010002184/article/details/88526708HSSF and XSSF Exampleshttps://blog.youkuaiyun.com/u010002184/category_5878585.html 安静的小气泡 - 简书
2024-11-12 18:19:55
225
原创 parallelStream()使用注意点
Runtime.getRuntime.availableProcessors()是JDK提供的获取当前系统的可能核心数,而现在多数应用是发布在容器中的,虽然部署的容器是2C4G的,但是ForkJoinPool创建的FokJoinPool可能会创建出几十个线程,因为程序部署在docker容器中,那么获取的是宿主机的CPU核心数。2、parallelStream适用的场景是CPU密集型的,假如本身电脑CPU的负载很大,那还到处用并行流就无法起到作用,切记不要再parallelStream操作中使用IO流。
2024-11-09 17:01:17
288
原创 Java垃圾回收
所以JVM会在字节码指令中,选一引起指令,作为“安全点”,比如方法调用、循环跳转、异常跳转等,一般是这些指令才会产生安全点。为什么它叫安全点,是因为GC时要暂停业务线程,并不是抢占式中断(立马把业务线程中断),而是主动式中断。主动式中断是设置一个标志,这个标志是中断标志,各业务线程在运行过程中会不停地主动去轮询这个标志,一旦发现中断标志为True,就会在自己最近的安全点上主动中断挂起。安全区域,为什么需要安全区域?因此,在这个区域中任意地主开始都是安全的,我们也可以把安全区域看作被扩展拉伸了的安全点。
2024-11-06 23:31:02
263
原创 ThreadLocal
在创建子线程时,会执行Thread的init方法,在init方法中,默认会做InteritableThreadLocal中的数据传递逻辑,只要父线程中的InteritableThreadLocal里面有数据,就会做迁移操作,直接将父线程的interitableThreadLocals中的数据一个一个的拷贝到子线程的interitableThreadLocals里面,inheritableThreadLocals就是ThreadLocalMap.可以采用共享变量的方式来进行线程间数据的传递。
2024-11-06 10:20:15
223
原创 IO同步异步/阻塞非阻塞
客户端发送请求给服务端,此时服务端处理任务时间很久,这个时候任务虽然处理时间很久,但是客户端可以做其他任务,因为他是异步的,可以在回调函数里处理响应,同时服务羰是非阻塞的,所以服务端可以去处理自己的任务,如此,这个模式就非常高效了。:客户端发送请求给服务端,此时服务端处理任务时间很久,则客户端帽被服务端阻塞了,所以客户端会一直等待服务端的响应,此时客户端不能做其他任何事,服务端也不会接受其他客户端的请求,这种通信机制比较简单粗暴,但是效率不高。的系统调用方法来抉择,两者是从不同维度来考虑的。
2024-11-05 21:04:12
439
转载 算法复杂度O(1),O(n),O(logn),O(nlogn)的含义
首先o(1), o(n), o(logn), o(nlogn)是用来表示对应算法的时间复杂度,这是算法的时间复杂度的表示。不仅仅用于表示时间复杂度,也用于表示空间复杂度。算法复杂度分为时间复杂度和空间复杂度。其作用:时间复杂度是指执行这个算法所需要的计算工作量;空间复杂度是指执行这个算法所需要的内存空间;时间和空间都是计算机资源的重要体现,而算法的复杂性就是体现在运行该算法时的计算机所需的资源多少;时间复杂度的优劣对比常见的数量级大小:越小表示算法的执行时间频度越短,则越优;
2024-11-04 11:46:06
83
原创 java集合的fail-fast机制
原因:迭代器在遍历时直接访问集合中的内容,并且在遍历过程中使用一个modCount变量,集合在被遍历期间如果发生内容变化,就会改变modCount的值。否则就抛出异常,终止遍历。例如:假设存在两个线程t1、t2,t1通过iterator在遍历集合A中的元素,在某个时候t2修改了集合A中的元素(在结构上的修改,不是简单的修改集合元素的内容),那么这个时候程序就会抛出ConcurrentModificationException异常,从而产生fail-fast机制。
2024-11-03 22:58:32
175
原创 JVM基础
java的反射提供强大的功能,使得我们可以调用类的方法,但同时反射的操作相对比较复杂,会带来性能上的一些问题,需要深入理解java的类型系统和类加载机制。JVM的作用是在不同的平台上提供一个统一的运行环境,使得Java程序能够在任何安装了JVM的设备上运行,而不需要针对每个平台进行修改。3、最小权限原则:在编写使用反射的代码时,应遵循最小权限原则,则只请求执行所需任务所需的最小权限,例如,如果只需要可以读取某个字段的值,就不要请求修改该字段的权限。JRE:运行java字节码的环境。
2024-11-03 22:36:34
398
原创 ConcurrentHashMap底层实现是什么
ConcurrentHashMap是一个K-V的存储结构,在JDK1.8中,它的存储结构如下,是由数组、单向链表、红黑树组成。当hash冲突比较多时,会使链表长度过长,因此查询的复杂度就增加。如何在并发性能与安全性上做好平衡,很多地方都会存在类似的设计,比如CPU的三级缓存,mysql的buffer pool,Synchronized的锁升级等。在JDK1.8中,ConcurrentHashMap锁的粒度是node,而JDK1.7及以前是对Segment进行锁定,锁粒度大了,性能也会低很多。
2024-11-01 18:43:45
470
原创 AQS是什么
3、FIFO队列:CLH队列是一个虚拟的先进先出的双向队列,它是自旋锁的一种改进,不存在真实的实例,而是只存在着节点之间的关联关系,CLH队列中的一个节点代表着一个线程,它保存着线程的引用(thread)、线程的当前状态(waitStatus)、前驱节点(prev)、后继节点(next)。排他锁就是存在于多个线程同时竞争一个资源时,同一时刻只允许一个线程访问该共享资源,也就是只有一个线程获得到锁资源,比如Lock中的ReentrantLock重入锁实现就是用到的AQS排他锁的功能。
2024-10-30 17:24:46
243
原创 二分法查找任意数组中的局部最小值
一个随机数组(相邻位置的数字不相等),找出其中的任意一个局部最小值。一个数组中,如果是第一个或最后一个数,那么arr[0]<arr[1],那么arr[0]是局部最小;如果arr[length-1]<arr[length-2],那么arr[length-1]是局部最小;而如果是中间位置的数,那它必须小于左右位置的数才是局部最小。
2024-10-28 17:47:12
631
原创 负载均衡:四层与七层
以常见的TCP为例,负载均衡设备在接收到第一个来自客户端的SYN请求时,即通过上述方式选择一个最的服务器,并对报文中IP地址进行修改(修改为后端服务器IP),直接转发给譔服务器。TCP的连接建立,即3次握手是客户端和服务器直接建立的,负载均衡设备只是起到一个类似路由的转发作用。在某些部署情况下,为保证服务器回包可以正确返回给负载均衡设备,在转发报文的同时可能会对报文原来的源地址进行修改。主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终的内部服务器。
2024-10-24 23:48:58
250
原创 HTTP与RPC
http一般用于web应用,例如web应用服务器或浏览器,可使用各种语言来开发,RPC主要用于分布式应用和互联网应用中,其实高效可靠的特点,使其被广泛运用于云计算和大数据等领域。http是无状态的协议,使用的是请求-响应的模式,每次请求建立连接,响应结束则中断本次连接。客户端与服务端的通信其实是不可靠的,需要使用其它机制来保证数据的完整性与一致性。http通常使用JSON和XML等文本格式进行传输,这种方式具有良好的可读性和可扩展性,但是它比二进制数据的传输更慢,并且需要更多的带宽。
2024-10-24 18:57:21
717
1
原创 hadoop
hadoop是Apache基金会开发的分布式系统基础框架。主要用于分布式的存储与分布式分析。该系统的设计可以扩展至数千台机器共同协作,由每台机器提供局部的运算和存储。同时,通过检测和处理应用层的故障,hadoop可以提供高可用性。
2024-10-23 17:26:56
1336
原创 什么是JVM
JVM是可以运行java代码的一台虚拟的计算机,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收、堆和存储方法区。JVM运行在操作系统之上,它与硬件设备不直接进行交互。
2024-10-22 15:19:12
938
原创 git统计代码行数
1、统计分支代码git log 分支 --pretty=tformat: --numstat -- . ":(exclude)*/test/*" ":(exclude)*/mock/*" ":(exclude)*/dal/*" ":(exclude)*/model/*" ":(exclude)*/dto/*" ":(exclude)*/enum/*" ":(exclude)*/enums/*" | grep "\(.java\)$" | awk '{ add += $1; subs += $2; l...
2022-02-17 11:39:17
2318
原创 spring中的spi提供指定环境的redis配置
背景:提供一个spi的功能,由于需要支持不同环境连不同的redis,同时使用方也可能会用到自身应用的redis。因此,考虑让使用方配置一个指定的环境变量来初始化不同环境的redis配置。具体实现步骤:1.编写不同环境的properties文件,放丰META-INF目录下2.分别编写配置类,如RedisDevConfig、RedisTestConfig在配置类上打上注解@ConfigurationProperties(prefix="spring.redis-dev")、@Conditiona
2022-01-13 14:53:12
453
原创 linux查找应用jar中是否包含某个jar包
使用命令:方法一:查找指定应用jar包中包含某个jarjar vtf bootstrap-1.0.0-RELEASE.jar | grep 'log4j'方法二:查找所有jar包中包含的某个jarjar vtf *.jar |grep 'log4j'
2022-01-04 14:39:22
3410
原创 chrome打开就进入hao123.com
可恶的hao123.com不知道为什么在浏览器一打开时就显示在主页上,乱七八糟的网址实在不是自己所需要。对此,删除了注册表中的hao123相关目录,修改了chrome执行文件的名称,但最终结果是都没能彻底解决,最后是通过设置chrome浏览器启动是打开的网页修改完成。原来不知啥时候hao123的网址被默认设置到了“设置”->"启动时"->"打开特定网页或一组网页"中。删除此处的hao123.com,最终解决问题。...
2022-01-02 12:50:35
1627
原创 tomcat启动时无法找到类NoClassDefFoundError
表现形式: 工程编译成功,但启动后报错org.springframework.beans.factory.BeanCreationException: Error creating bean with name '***ServiceImpl': Injection of @DubboReference dependencies is failed; nested exception is java.lang.NoClassDefFoundError: **/al...
2021-08-26 23:37:39
204
原创 实体类注释修改
已有项目中的注释格式不够规范,基本是行末注释,需要修改为以下两种注释:1.文档注释//修改为文档注释 public String convertToDocument(String origin){ StringBuilder sb = new StringBuilder(); String[] split = origin.split("//"); if (split.length == 2 ) { sb.append
2021-08-07 17:19:33
324
原创 编写日志Interceptor,结合自定义注解
1.自定义注解Logimport java.lang.annotation.*;/** * description: 操作日志记录 * @author dongqing * 2021/8/7 12:35 * * @version 1.0.0 */@Target({ElementType.METHOD})//如果不写,默认为RetentionPolicy.CLASS,另外源注解上的Retention对本注解无效@Retention(RetentionPolicy.RUNTIME)
2021-08-07 14:19:10
536
原创 多线程保存数据
背景:批量导入数据时耗时过长解决方案:使用多线程进行数据保存步骤:1.构建需要保存的数据记录(代码略)List<Object> objectList = new ArrayList<>();2.拆分总体数据为多份数据//将原始数据拆分为多个子List,存储在partLists中List<List<Object>> partLists = new ArrayList<>();//定义分批的条数int limitSi
2021-05-27 15:11:57
1673
原创 为maven项目打包时添加上svn版本号
1.在pom.xml下添加以下plugin生产环境上跑的jar包是什么版本过段时间后真就无从得知,为之后还能查询得到,在用maven打包时添加如下的插件,打出的包将会MANIFEST.MF文件中在产生svn版本号<bliud><plugins>.....<plugin> <groupId>com.google.code.mav...
2020-04-07 13:21:15
1098
原创 验证码生成
public class CaptchaService { private int width = 90; private int height = 20; private int codeLength = 6; private int xx =11; private int fontHeight = 18; private int c...
2019-09-24 13:11:17
130
原创 程序包sun.security.tools.keytool不存在 解决方法
编译时报错:程序包sun.security.tools.keytool不存在,在pom.xml中加入如下插件<plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source>...
2019-07-04 15:23:37
6864
原创 tomcat启动时没有加载项目
今天在eclipse的默认工作空间中创建了一个springboot的web项目,由于新学该组件,折腾了好久才把所有的jar包加载进去。当关闭此项目后再次启动之前的springmvc项目时,tomcat启动了,可是却没有加载项目的任务代码。右键点击server-->Add and Remove.再次启动还是无法解决问题。最后尝试删除server-->重新创建server-->将项目加入到server
2017-03-27 11:20:25
2004
org.eclipse.emf.workspace-1.5.2.202208110935.jar
2023-02-28
org.eclipse.emf.validation-1.8.1.202208271102.jar
2023-02-28
spring-1.2.6.jar
2016-07-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人