- 博客(45)
- 收藏
- 关注
原创 ObjectMapper 和 ObjectNode
Jackson库的ObjectMapper和ObjectNode是Java处理JSON的核心类。ObjectMapper负责对象与JSON间的转换,支持序列化/反序列化操作。ObjectNode表示可编辑的JSON节点,支持动态创建和修改JSON结构。ObjectMapper通过createObjectNode()创建ObjectNode,两者常结合使用。ObjectMapper提供静态转换功能,而ObjectNode实现动态JSON操作,配合ArrayNode可处理JSON数组。
2025-11-18 15:44:05
484
原创 Java 序列化和反序列化过程
java 序列化和反序列化是将对象在 “内存状态” 与 “字节流” 之间转换的过程,用于对象的持久化存储(如写入文件)或网络传输。transientstaticintbooleantransientstatictransientint0nullstaticstatic:是的子接口,要求类必须实现和方法,手动控制序列化 / 反序列化逻辑(更灵活但需自己处理所有字段)。:若父类实现,子类会自动继承序列化能力;若父类未实现,子类必须手动处理父类字段的序列化(否则父类字段会丢失)。
2025-11-18 11:04:03
834
原创 RabbitMQ -- 高级特性
死信(dead message) 简单理解就是因为种种原因, ⽆法被消费的信息, 就是死信.有死信, ⾃然就有死信队列. 当消息在⼀个队列中变成死信之后,它能被重新被发送到另⼀个交换器中,这个交换器就是DLX( Dead Letter Exchange ), 绑定DLX的队列, 就称为死信队列(DeadLetter Queue,简称DLQ).消息被拒绝( Basic.Reject/Basic.Nack ),并且设置 requeue 参数为 false.消息过期.队列达到最⼤⻓度。
2025-10-26 17:51:28
1135
原创 RabbitMQ -- 保障消息可靠性
Ready:队列中待投递的消息数量(还没被消费者取走的消息)。Unacked:已经被消费者成功取走,但消费者尚未确认(既没发ack,也没发nackreject)的消息数量。
2025-10-26 17:15:11
663
原创 Connection refused: no further information: localhost/127.0.0.1:2375
Caused by: java.lang.RuntimeException: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: localhost/127.0.0.1:2375
2025-08-03 20:55:59
492
原创 RabbitMQ核心概念
类似于发快递之后, 物流公司怎么处理呢, 根据咱们的地址来分派这个快递到不同的站点, 然后再送到收件⼈⼿⾥. 这个分配的⼯作,就是交换机来做的。RabbitMQ是遵从AMQP协议的,换句话说,RabbitMQ就是AMQP协议的Erlang的实现(当然RabbitMQ还。通道, 信道. Channel是在Connection之上的⼀个抽象层. 在 RabbitMQ 中, ⼀个TCP连接可以。RabbitMQ是⼀个消息中间件, 也是⼀个⽣产者消费者模型. 它负责接收, 存储并转发消息.
2025-07-28 21:54:40
1056
原创 RabbiteMQ安装-ubuntu
以下角色可选: RabbitMQ用户角色分为六种:Administrator、Monitoring、Policymaker、Management、Impersonator和None。rabbitmq从3.3.0开始禁止使用guest/guest权限通过除localhost外的访问,解除方法也有,此处不 多说。RabbitMQ需要Erlang语言的支持,在安装RabbitMQ之前需要安装Erlang。rabbitmq客户端默认的用户名和密码都是: guest。默认是不安装管理界面的,使用。
2025-07-27 23:25:03
885
原创 OpenFeign-远程调用((Feign的使用方法))
将Feign的Client抽取为⼀个独⽴的模块, 并把涉及到的实体类等都放在这个模块中, 打成⼀个Jar. 服务。将Feign的Client抽取为⼀个独⽴的模块, 并把涉及到的实体类等都放在这个模块中, 打成⼀个Jar. 服务。官⽅推荐Feign的使⽤⽅式为继承的⽅式, 但是企业开发中, 更多是把Feign接⼝抽取为⼀个独⽴的模块。官⽅推荐Feign的使⽤⽅式为继承的⽅式, 但是企业开发中, 更多是把Feign接⼝抽取为⼀个独⽴的模块。或者也可以指定需要加载的Feign客⼾端(通过。
2025-07-27 20:14:16
1220
原创 OpenFeign-远程调用
OpenFeign 是⼀个声明式的 Web Service 客⼾端. 它让微服务之间的调⽤变得更简单, 类似controller调⽤service, 只需要创建⼀个接⼝,然后添加注解即可使⽤OpenFeign.
2025-07-26 23:35:17
988
原创 Nacos-服务注册,服务发现(一)
Nacos是Spring Cloud Alibaba的组件, Spring Cloud Alibaba遵循Spring Cloud中定义的服务注册, 服务发现规范. 因此使⽤Nacos和使⽤Eureka对于微服务来说,并没有太⼤区别.
2025-07-25 23:48:48
1209
1
原创 nacos安装
Nacos默认是集群(cluster)启动,将其设置为单机(standalone), 设置⽅式参考 上⾯章节。Nacos启动后, ⽬录下会多⼀个logs的⽂件夹,报错⽇志在: logs/nacos.log。⽬前官⽅推荐的稳定版本为2.2.3, 咱们课程中也是⽤2.2.3。Nacos 默认启动⽅式为集群, 启动前需要修改配置为单机模式。target: 存放 Nacos 应⽤的 jar 包。修改 8848 为期望的端口号即可。如果出现一下界面,就代表访问成功。conf: Nacos配置⽂件。
2025-07-25 23:32:52
554
原创 Eureka-服务注册,服务发现
注册中心是分布式系统/微服务架构中的核心基础设施,它扮演着服务治理的"电话簿"角色,他能维护一个服务列表,哪个机器上线了,哪个机器宕机了,这些信息都会自动更新到服务列表上,客户端拿到这个列表,直接进行服务调用即可。这个就是注册中心。**服务提供者(Server):**一次业务中,被其他微服务调用的服务,也就是提供接口给其他微服务。**服务消费者(Client):**一次业务中,调用其他微服务的服务,也就是调用其他微服务提供的接口。
2025-07-24 20:59:51
1018
原创 springcloud环境和工程搭建
实现一个电商平台(残次版,仅为演示SpringCloud内容)拿京东举例,首页上就展示了许多功能。我们该如何实现呢?如果把这些功能全部写在⼀个服务⾥,这个服务将是巨⼤的。巨多的会员,巨⼤的流量,微服务架构是最好的选择。微服务应⽤开发的第⼀步,就是服务拆分,拆分后才能进⾏”各⾃开发“@BeanREST(Representational State Transfer), 表现层资源状态转移.
2025-07-23 23:14:36
916
3
原创 spring-cloud概述
Spring Cloud 提供了⼀些可以让开发⼈员快速构建分布式服务的⼯具, ⽐如配置管理, 服务发现, 熔断,智能路由等.。他们可以在任何分布式环境中很好的⼯作。简单来说,Spring Cloud就是分布式微服务架构的一站式解决方案,是微服务架构落地的多种技术的集合。Distributed/versioned configuration 分布式版本配置Service registration and discovery 服务注册和发现Routing 路由。
2025-07-23 22:56:37
1311
原创 Stream流-Java
的,如果传递基本数据类型,是会把整个数组当作一个元素,存放到Stream当中。注意二:修改Stream流中的数据,不会影响原来集合或者数组中的数据。方法的形参是一个可变参数,可以传递一堆零散的数据,也可以传递数组。如果我们要收集到Map集合当中,键不能重复,否则会报错。结合了Lambda表达式,简化集合,数组的操作。注意一:中间方法,返回新的Stream流,Stream接口中静态方法of的细节。,建议使用链式编程。
2025-07-21 22:58:59
497
原创 WebSocket
WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket其实是一个“应用层协议” 和 “HTTP” 地位是对等的,都是基于传输层的 TCP 实现的一个广泛的被使用的应用层协议。这个协议就可以实现服务器给客户端主动推送数据这样的功能了,本身传输层TCP就是可以让服务器给客户端主动推送数据的,但是到了HTTP这里,把之前的服务器推送数据的功能搞没了。HTTP虽然不够用了,WebSocket可以起到补充作用。
2025-07-21 22:57:09
1070
原创 JVM-Java
给出的这三个类加载器,是属于JVM自带的,程序员是可以自定义类加载器的,当你自定义的时候,就可以把你的类加载器,也放到双亲委派模型中,也可以不放到里面。元数据区的作用:用来存储被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据的。比如,类叫啥名字,是不是public,继承自哪些类,实现了哪些接口方法叫啥名字,参数有几个,都叫啥,都是啥类型,返回值是啥类型。JVM一共有多少个对象,JVM自身是知道的,通过可达性分析,知道了哪些是“可达”的,剩下的就是“不可达”,也就是接下来要回收的垃圾。
2025-07-20 22:47:11
1198
1
原创 网络原理——IP
目前的现状:全世界,IPv6的普及程度,非常非常低,但是中国是IPv6普及程度最高的国家(没有之一)。网络传输过程中,网络这一层,转发是要根据IP的,数据链路层这一层是要根据MAC,写代码的时候,填写的肯定是IP地址,路由器也是根据IP地址查路由表,根据路由表得到接下来哪个网口转发,此时往往就需要根据下一个节点的IP,找到对应的MAC,才能填写以太网数据帧;这就不得不提网络通信“五元组了”(源IP,目的IP,源端口,目的端口,协议类型),IP协议里的报头存有源IP目的IP,载荷里面存有源端口,目的端口。
2025-07-20 22:36:43
2498
3
原创 网络原理——TCP
TCP的特点:有链接 , 可靠传输 ,面向字节流 , 全双工(此处的可靠,不是说,A给B发一个消息,B 百分百能收到,而是A给B发了消息之后,尽可能的让B收到,但是呢A是能够知道B是否收到了,详细请看TCP的核心机制一)
2025-07-19 23:42:26
1771
原创 网络原理——UDP
传输层有两个核心协议:1. TCP 2. UDPTCP的特点:有链接 , 可靠传输 ,面向字节流 , 全双工 UDP的特点:无连接 ,不可靠传输 , 面向数据报 , 全双工(其中的不可靠传输,在代码中是不容易体现出来的,可以理解为发送了数据,就不管了)学习UDP之前,我们得再谈谈端口号。
2025-07-18 22:22:35
798
原创 网络原理 ——HTTPS
HTTPS 也是一个应用层协议。是在 HTTP 协议的基础上引入了一个加密层。 HTTP 协议内容都是按照文本的方式明文传输的,这就导致在传输过程中出现一些被篡改的情况。至于HTTPS为啥能出现,就不得不提“运营商劫持”了。(这里就大概讲一下,想了解的可以搜一搜。) 比如我要下载一个QQ音乐,未被劫持的效果,就是点击下载按钮,就会弹出QQ音乐的下载链接,已被劫持的效果,点击下载按钮,就会弹出别的软件的下载链接。由于我们通过网络传输的任何数据包都会经过运营商的网络设备(路由器,交换机等),那么运营商的网络设备
2025-07-18 22:20:02
1941
原创 网络原理 —— HTTP
随着互联网的快速发展,浏览器的版本也在不断更新,同一个时间段内,有些用户的浏览器,版本是比较旧的,支持的功能少,有些用户浏览器版本更新,支持的功能多,如果要是支持的功能少,可能就打不过竞争对手,要是支持的功能多,旧版本浏览器设备的用户,可能就展示不了。所以,要根据用户使用的设备进行区分,通过 UA 中的浏览器版本/操作系统版本,区分出当前用户的设备,最多支持哪些特性~因此程序员就需要维护多套代码,对于老的浏览器,返回功能少的网页,正确显示,对于新的浏览器,返回功能多的网页,体验丰富。
2025-07-17 23:28:58
1080
原创 网络编程-java
Socket套接字是网络编程的基础技术,分为TCP和UDP两种协议。TCP提供可靠、面向字节流的全双工通信,而UDP提供无连接、不可靠的面向数据报传输。UDP编程使用DatagramSocket和DatagramPacket类实现数据收发,而TCP编程则使用ServerSocket和Socket类建立连接,通过InputStream和OutputStream进行数据传输。文章通过回显服务器的实现示例,展示了两种协议的基本编程流程:UDP通过DatagramPacket直接收发数据,TCP则通过IO流处理数据
2025-07-17 23:19:26
847
原创 网络初识 - Java
网络通信,非常复杂,如果我们设计一个协议,完成网络通信中方方面面的问题,势必会使这个协议非常复杂,非常庞大。把一个大的协议拆成若干个小的,功能单一的协议了。交换机收到之后,物理层解析,数据链路层解析(没有网络层了,数据链路层中,得到的以太网数据帧的帧头,信息就足以支持交换机进行下一步工作),重新构造出新的以太网数据帧,发给下一个设备。主机的数据 => 路由器,路由器收到之后,物理层,数据链路层,网络层解析(没有传输层),重新构造出新的网络数据包,构造出以太网数据帧,构造出二进制数据,进行转发。
2025-04-06 23:37:45
856
原创 文件操作和IO ——Java
1.流对象的使用流程先打开,再读写,最后关闭。2.应该使用哪个流对象?先区分文件是文本文件还是二进制文件,再区分读还是写。看到这,顺便再提一个别的小知识点 = 缓冲区缓冲区,通常就是一段内存空间,他是用来提高程序的效率。通常如果直接读写硬盘,是比较低效的(硬盘速度慢),因此有的时候,就希望减少读写文件的次数。因此在进行 IO 操作的时候,就希望能够使用缓冲区,把要写的数据,先放到缓冲区里攒一波,再一起写,或者读的时候,也不是一个一个的读,一次读一批数据,到缓冲区中,再慢慢解析。
2025-04-06 23:18:50
773
原创 线程-进阶
一个代码中,反复针对细粒度的代码加锁,就可能被优化成更粗粒度的加锁。当然,也不是锁越优秀越粗,还是要具体视情形而定的,锁粗了,就会影响到线程的并发程度。在实际开发过程中,使用细粒度锁,是期望释放锁的时候其他线程能使用锁。但是在实际上可能并没有其他线程来抢占这个锁,这种情况 JVM 就会自动把锁粗化,避免频繁释放锁。锁粗化,这件事也并不是说合理,比如,确实三件事,本身都需要加锁,粗化成一把锁,合理的。
2025-03-16 23:06:47
1142
原创 线程 -- 线程池
谈起线程池之前,我们可以联想到常量池,那什么是常量池呢?常量池:字符串常量,在 Java 程序最初构建的时候,就已经准备好了。等程序运行的时候,这样的常量也就加载到内存中了。因此剩下了构造/销毁的开销。其实,在计算机中,这个词,就只有这一个意思,表示的含义都是一样的。线程池,就是为了让我们的。我们不妨想想最初引入线程的原因:频繁创建销毁进程,太慢了。随着互联网的发展,随着我们对性能的要求更进一步,咱们现在觉得,频繁创建销毁线程,开销有些不能接受了。
2025-03-02 22:05:23
843
原创 线程 -- 阻塞队列
阻塞队列,他其实就是一种更复杂的队列,也遵循队列的先进先出原则。它具有以下特性:1.线程安全2.阻塞特性a)队列为空,尝试出队列,出队列操作就会阻塞,阻塞到其他线程添加元素为止。b)队列为满,尝试入队列,入队列操作也会阻塞,阻塞到其他线程取走元素为止。阻塞队列,一个最主要的应用场景,就是实现“生产者消费者模型”(多线程编程中,一种典型的编码技巧)。
2025-03-02 21:58:34
803
原创 对象的比较 - java
equals方法在idea里有快捷键,Alt + Insert,在弹出的框里面就可以看到。重写父类的equals的方式虽然可以比较,但缺陷是:equal只能按照相等进行比较,不能按照大于、小于的方式进行比较。在Java中,类是所有类的根类,而方法是类中的一个非常重要的方法。它的作用是返回调用该方法的对象的运行时类(Runtime Class)。具体作用如下:获取对象的运行时类方法返回一个类型的对象,这个对象表示调用它的对象的实际运行时类。例如,对于一个对象,调用会返回类的对象。示例代码:用于反射返
2025-02-21 22:14:44
1023
原创 异常 - Java
Java 中虽然已经内置了丰富的异常类, 但是并不能完全表示实际开发中所遇到的一些异常,此时就需要维护符合我们实际情况的异常结构.例如, 我们实现一个用户登陆功能if (!System.out.println("用户名错误!");return;if (!System.out.println("密码错误!");return;System.out.println("登录成功!");
2025-02-09 22:31:11
1126
原创 String类 - Java
方法说明在尾部追加,相当于String的+=,可以追加:boolean、char、char[]、double、float、int、long、Object、String、StringBuff的变量获取index位置的字符获取字符串的长度获取底层保存字符串空间总的大小扩容将index位置的字符设置为ch返回str第一次出现的位置从fromIndex位置开始查找str第一次出现的位置返回最后一次出现str的位置从fromIndex位置开始找str最后一次出现的位置。
2025-02-09 22:26:39
887
原创 封装,继承,多态(二)- Java
和继承类似, 组合也是一种表达类之间关系的方式, 也是能够达到代码重用的效果。组合并没有涉及到特殊的语法(诸如 extends 这样的关键字), 仅仅是将一个类的实例作为另外一个类的字段。
2025-02-02 21:57:31
1046
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅