- 博客(34)
- 问答 (2)
- 收藏
- 关注
原创 rocketMq总结
当发送事务消息时会发送消息到一个专门的事务队列中,如果commit了就然后再发送到目标队列中,如果时rollback就直接删除消息,普通队列再发送给消费者,,如果commit或者rollback失败了向程序进行本地事务检查(回调函数),如果成功提交事务,失败回滚。要求发送消息就是有顺序的,通过selector来选择单一队列来接受消息,不然无法实现,消费者需要单一消费者消费,可以通过加锁实现,或者单线程(不推荐)开启ack机制,当出现保存失败的时候,需要返回失败值。使用异步发送需要用回调函数得到结果。
2024-04-26 15:29:05 156
原创 RabbitMq总结
消息的可靠性需要保证开启消息持久化,不然宕机消息就丢失了,首先是生产者发送消息的可靠性,mq要保证每一条消息都进行ack应答,而客户端收到了ack应答才继续发送,否则超时重试,当然需要设计接口的幂等性,对于消费者,要消费消息之后进行反馈,当mq收到反馈之后才删除消息。将消息发送到一个单独的事务队列,再从事务队列发送到消费者可消费的队列,若出现问题则回滚,若没有问题则删除事务队列中的消息。rabbitmq由消费者,生产者,交换机,队列,bindingkey组成,交换机存在三种,分别对应广播,单播,多播。
2024-04-26 14:55:51 434 1
原创 NIO简介
channel为双向输入输出通道,buffer为缓存,selector为选择器,通过selector来选择线程对出现io操作的channel服务,可有有效的增加线程的工作效率,不用等待某个连接断开才释放线程。可以通过这样的方式填充多个buffer,abc为三个buffer对象。同理也可以使用put和write读出写入channel。buffer读数据有write和get。buffer写入数据可以使用。
2024-04-09 15:15:32 376
原创 分代GC算法解读,垃圾回收器
Serial是一种单线程串行回收年轻代的垃圾回收器,单cpu下吞吐量优秀,适用于java编写的客户端(使用复制算法)除了G1其他的需要搭配使用(上下一一对应)其他搭配关系在jdk14后都已废弃,jdk14还废弃了CMS。Serial Old是一种单线程串行回收old区,单cpu下吞吐量优秀,使用标记整理算法。2.可以选择不同的垃圾回收算法,老年代一般选择标记清除算法或标记整理算法。old区:Serial Old,CMC,Parallel Old。3.分代设计允许只回收Young区,可以有效见效stw。
2023-12-18 19:34:30 359
原创 Java垃圾回收算法
1.创建的对象会放在eden区,当新创建的对象无法放入则触发Young GC会将eden中和from(s0)中需要回收的对象清除,把没有回收的对象放入to(s1)(复制算法)将内存分为young和old两部分,old内存放存活时间较长对象,young分为eden区和survivor区,survivor区可分为两块此处代称s0,s1。1.准备from和to两部分空间,每次对象分配阶段只能使用一个(from)缺点:碎片化,分配速度慢(因为碎片多,通过链表维护)1.标记阶段:将所有对象标记(可达性分析可达目标)
2023-12-18 19:32:59 384
原创 垃圾回收机制评价
java的垃圾回收机制通过GC线程实现,无论使用什么算法,都会有部分时间停止用户线程。这个过程为STW,若过长,会影响用户使用。一般堆内存越大,最大暂停时间越长,要降低最多暂停时间,会降低吞吐量。1.吞吐量,用户使用时间占总时间比例。垃圾回收算法的评价标准。
2023-12-18 19:31:01 429
原创 堆上判断对象能否回收两种方式
2.系统类加载器加载的java.lang.Class对象。1.每次引用都会维护计数器,堆性能有损耗。2.存在循环引用问题(内存泄漏)4.本地方法调用时使用的全局对象。1.线程(thread)对象。gc Root对象分类。
2023-12-15 15:59:24 430
原创 系统分析师企业信息化战略
信息,信息化系统的应用层次分类,数据环境分类企业战略规划 :企业总体和长远目标信息系统战略规划:信息系统支撑业务流程的运作信息技术战略规划:堆支撑信息系统运行的硬件,软件,支撑环境等进行具体的规划信息资源规划:数据需求分析,信息资源标准建立,信息资源整合企业战略(全局规划)–BITA/EITA—>企业信息化战略(具体)
2023-12-14 16:05:16 366
原创 内存自动回收
注:可以通过赋值为null来满足回收条件,System.gc()可以发送垃圾回收请求。内存泄漏:不再使用的变量未回收,积累可能导致内存溢出(最后程序异常终止)c/c++需要手动回收(delete)不再使用变量,优点:降低程序员实现难度,降低对象回收bug的可能,1.所有对象都以回收,堆中不存在实列和子类实列。方法区的回收 :指类的回收,其他的不需要回收。java中存在自动回收,主要负责堆上的回收。缺点:无法控制内存回收的及时性。3.Class字节码不被引用。
2023-12-14 16:00:10 347
原创 简述java方法区和字符串常量池
java中使用+来合成两个变量时,本质上是使用一个空StringBuilder对象通过调用append方法合成,最后通过toString方法,最后转换为String类型。从jdk8开始方法去被拿出,单独分配内存,jdk8相较于7具有更加大的极限容量。存放类的元信息(InstanceKlass对象),类加载阶段完成。jdk8中可以通过-XX:MaxMetaspaceSize设置。运行时的常量池,每一个常量池都可以通过内存访问。字符串常量池 存放常量(如“123")如果是常量则直接从常量池中取出。
2023-12-13 17:16:36 338
原创 jvm打破类双亲委派机制
当两个类的全限定名相同时,就不可以同时加载,入tomcat运行两个web服务时就会出现冲突(相同类名),不够tomcat通过为每一个应用分配一个应用类加载器,打破双亲委派机制。自定义实现(1)类继承ClassLoader类,重写loadClass方法(2)loadClass中获取被加载类数据(loadClassData)(3)调用defineClass完成类加载。
2023-12-10 20:58:22 1066 1
原创 jvm类加载器
java实现extension拓展加载器(通过参数配置但会覆盖原目录,两个都要指定,分号分隔(推荐),或放入文件夹拓展(不推荐)),Application应用程序类加载器(maven配置和其余类加载)底层实现bootstrap加载java核心类比如String等(无法获取,只能通过参数配置(推荐),或放入jre/lib拓展(不推荐))1.类加载过程会从右向左委派查找(检查有无加载),再从左向右的尝试加载。classLoader主要使用java编写,部分使用c++编写。类加载要求:1.安全。
2023-12-09 14:43:00 324
原创 类的生命周期
加载:类加载器获取二进制信息(本地,动态代理,网络传输)放入方法区(虚拟概念)生成InstanceKlass对象保存类信息类,同时堆中也会存放一份,并且相互关联,方法区是使用c++处理的结果,堆区是使用java包装后的结果,同时堆区的内容的内容更少(为了安全,减少访问范围),省略一些无法操作的数据,jdk8之后会将静态字段存放入堆区。类加载的生命周期有加载 ->连接->初始化->使用->销毁。
2023-12-08 16:31:52 354
原创 jvm解析i++,++i
i ++ 和 ++i的区别在于把操作数放入局部变量表的时机,++i会立刻把i放入局部变量,i ++会在操作开始取出局部变量到操作数栈,++会将局部变量加一,++ i会先把局部变量加一再取出放入操作数栈,所以从jvm角度可以分析出,i = 0,i= i++结果i = 0,i = 0,i= ++i,结果为1。
2023-12-07 20:04:53 354 1
原创 关于宿主机无法访问虚拟机的docker
本次为了查看如何访问,在CSDN上看到了许多的使用route的方法,结果没什么用。实际上,使用指令 ip addr查看指令,使用2和3的inet加上端口号即可访问。
2023-10-07 20:55:33 153 1
原创 mybatis-plus踩坑记录
今天在写mybatis-plus的时候发现构造的函数得不到返回值,数据库中间的查询有结果,返回值为null原因是未关闭yml文件中的下划线转驼峰,导致不能正确的映射到实体类中。
2023-10-03 21:05:58 20
原创 字节流FileInputStream和FileOutputStream
【代码】字节流FileInputStream和FileOutputStream。
2023-05-06 22:05:32 56
原创 java中的多进程的两种实现方式
这是第二种方式,通过对于Runable接口的实现再创建一个变量,最后通过接口的方式来运行(此处可以看接口的相关知识),这种方式最终也是通过run和start0来实现多进程。这是第一种,通过继承的方式实现多线程,start是创建进程的方法,start会调用run方法,再调用start0。两种方式分别是对于Thread的继承和对于Runable接口的实现。下面是相关的两种使用方法。
2023-04-24 20:40:16 674 2
原创 java构造器中的super和this
java中的构造器中super是用来对于父类中的构造器进行调用的,this是对于本类中的其他构造器进行调用,或者调用对应的元素,this调用其他构造器需要放在构造器的第一行,super也需要放在第一行,这也造成super不能和this一起调用构造器。在父类中定义构造器之后,父类中的默认无参构造器将不能使用,此时下图中的cc类中如果将构造器中的super和对应的参数删除,也会报错。在java中,子类的构造器是默认带有一个super()的,所有才会有前面的报错。
2023-04-22 18:05:51 111 1
原创 关于JAVA的List的常规方法
四五六与1,2,3效果相同,不过可以同时操作对个元素,同时在java中,这些操作在许多的地方都有相同的操作。java的list中主要使用的方法有。
2023-04-17 15:13:57 39 1
空空如也
nacos错误无法解决
2023-09-22
vscode安装问题很大
2022-10-19
运行结果及报错内容,如何解决?
2022-07-16
关于#python#的问题,请各位专家解答!
2022-05-10
TA创建的收藏夹 TA关注的收藏夹
TA关注的人