![](https://img-blog.csdnimg.cn/20190918140158853.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java
文章平均质量分 68
Java基本知识
W|J
你很懒,还没有添加简介
展开
-
Java平台标准版 8 文档
JDK 8 是 JRE 8 的超集,包含 JRE 8,以及编译器和调试器等工具,如 开发小程序和应用程序。JRE 8 提供了库, Java 虚拟机 (JVM) 和其他运行小程序的组件 以及用 Java 编程语言编写的应用程序。注意 JRE 包含 Java SE 不需要的组件 规范,包括标准和非标准 Java 组件。Java 平台标准版 8 文档 (oracle.com)原创 2023-07-31 13:48:43 · 872 阅读 · 0 评论 -
Netty 进阶
魔数,用来在第一时间判定是否是无效数据包版本号,可以支持协议的升级序列化算法,消息正文到底采用哪种序列化反序列化方式,可以由此扩展,例如:json、protobuf、hessian、jdk指令类型,是登录、注册、单聊、群聊... 跟业务相关请求序号,为了双工通信,提供异步能力正文长度消息正文编解码器根据上面的要素,设计一个登录请求消息和登录响应消息,并使用 Netty 完成收发@Slf4j@Override// 1. 4 字节的魔数// 2. 1 字节的版本,原创 2023-06-20 15:15:51 · 617 阅读 · 0 评论 -
Java网络编程(UDP、TCP)
什么网络编程?计算机跟计算机之间通过网络进行数据传输。常见软件架构有哪些?CS/BS通信的软件架构CS1BS的各有什么区别和优缺点CS:客户端服务端模式需要开发客户端BS:浏览器服务端模式不需要开发客户端。CS:适合定制专业化的办公类软件如:IDEA、网游BS:适合移动互联网应用,可以在任何地方随时访问的系统。网络编程三要素分别是什么?IP、端口号、协议网络编程三要素分别表示什么?IP:设备在网络中的地址,是唯一的标识端口号:应用程序在设备中唯一的标识。协议。原创 2023-05-16 16:17:07 · 849 阅读 · 0 评论 -
RocketMQ-Producer
消息生产者的代码都在client模块中,相对于RocketMQ来讲,消息生产者就是客户端,也是消息的提供者。原创 2023-04-27 16:24:46 · 593 阅读 · 0 评论 -
Chapter13-基于 Netty 的通信实现
本章介绍了 RocketMQ 底层通信的实现机制,由于它是基于 Netty 来实现的,所以首先介绍了 Netty 的基础知识。 Netty 被用在很多开源软件的底层通信部分, RocketMQ 以 Netty 为基础,还实现了一种机制,把通信功能和消息处理功能分离,不同类型的通信内容被抽象成发送带有对应类型代码的 Command,同时根据类型代码查找对应的 Processor 和 Executor 来执行,结构非常清晰,为我们自己实现网络通信程序提供了参考。原创 2023-04-20 13:58:03 · 550 阅读 · 0 评论 -
Chapter12-主从同步机制
本章分析了 Master 和 Slave 角色的 Broker 之间同步信息功能的实现。 需要同步的信息分为两种类型,实现方式各不相同:一种是元数据信息,采用基于Netty 的 command 方式来同步消息;另 一种是 commitLog 信息,同步方式是直接基于 Java NIO 来实现。原创 2023-04-19 13:56:48 · 367 阅读 · 0 评论 -
Chapter11-最常用的消费类
本章分析的是 Client 模块里的代码 ,我们在使用 RocketMQ 的时候 , 更多的是和这个模块里 的代码打交道。 本章重点分析了 DefaultMQPushConsumerlmpl类 , 然后分析了 Consumer 的并发处理过程 ,最后分析了客户端 Class 统一的底层通信类 MQClientlnstance 。原创 2023-04-19 10:50:28 · 438 阅读 · 0 评论 -
Chapter10-NameServer 源码解析
本章分析了 NameServer 模块的源码, NameServer 是一个功能重要但是代码量不大的模块,所以选择这个模块入手,比较容易理解。 我们在分析源码时,认真读懂一个模块后就可以对作者 的代码风格 、设计偏好等有基本的了解 。原创 2023-04-18 15:13:50 · 460 阅读 · 0 评论 -
Chapter7-吞吐量优先的使用场景
本章重点关注性能,关注在大消息量的情况下,如何提高 RocketMQ 的吞吐量 。 首先介绍了消息过滤,在服务端进行消息过滤可以减少无效消息传输造成的带宽浪费, Tag 是最常用的一种高效过滤方式,此外还可以用 SQL 表达式、FilterServer 来过滤消息 。另一个提高吞吐量 的方法是增加集群 的机器数量,提高并发性,要根据实际场景增加 Broker 、 Consumer 或 Producer 角色的机器数量 。原创 2023-04-18 13:26:15 · 203 阅读 · 0 评论 -
Chapter6-可靠性优先的使用场景
本章根据使用场景,讨论如何“可靠”地收发消息 。 即在要求消息顺序的场景下,如何既能并发执行,又能保证消息顺序;然后分析在可能的故障场景下,如何应对以保证不丢消息 、 不中断服务。 RocketMQ 在设计上,有重试机制来保证消息不丢,造成的结果是可能存在消息重复,这一点需要用户根据具体业务场景来处理。原创 2023-04-17 16:27:10 · 300 阅读 · 0 评论 -
Chapter5-消息队列的核心机制
本章介绍了 RocketMQ 消息队列实现的难点及核心,即“队列”本身的实现,基于磁盘做一个读写效率高 的队列并非易事,实现不好就会使磁盘操作成为 整个系统 的瓶颈,无法提升系统 的 吞吐量 。 RocketMQ 基于“顺序写”“随机读”的原则来设计,利用“零拷贝”技术,克服了磁盘操作的瓶颈。另一个难点是为了高可用性而设计的主从机制,数据被及时复制到多个机器,这样当一台机器出故障后,整体系统依然可用 。 这样可靠性和性能能直接有个权衡, RocketMQ 把选择权留给用户原创 2023-04-17 10:53:35 · 137 阅读 · 0 评论 -
《RockectMQ实战与原理解析》Chapter4-分布式消息队列的协调者
分布式消息队列的协调者的内容包括NameServer 的功能:集群状态的存储结构、状态维护逻、;各个角色间的交互流程:交互流程源码分析、为何不用 ZooKeeper ;底层通信机制:Remoting 模块、协议设计和编解码、Netty库。原创 2023-04-17 09:50:09 · 410 阅读 · 0 评论 -
Chapter3-用适合的方式发送和接收消息
本章介绍了ROcketMq 的不同类型的消费者:DefaultMQPushConsumer 的使用、处理流程、流量控制、的启动 、关闭流程;不同类型的生产者:DefaultMQProducer、发送延迟消息、自定义消息发送规则、对事务的支持;如何存储队列位置信息;自定义日志输出原创 2023-04-14 15:02:18 · 425 阅读 · 0 评论 -
CSV文件的读取与数据类型转换的案例
高级自动类型转换工具类BeanWrapperImpl的使用案例原创 2023-01-18 11:49:27 · 1145 阅读 · 0 评论 -
Java解析XML-JDK-JAXB官方指导文档
JAXB(Java Architecture for XML Binding)是J2SE和J2EE平台的一部分,让开发者能够快速完成Java类和XML的互相映射。JAXB 允许Java人员将Java类映射为XML表示方式。其实,JAXB是一个业界标准,是一项可以根据XML Schema产生Java类的技术,并且可以将Java对象树的内容写到XML文档中。原创 2022-12-11 13:39:03 · 531 阅读 · 0 评论 -
Statement与PreparedStatement一次执行多条增删改
使用conn.createStatement()获取Statement;使用Statement.addBatch方法,执行statement.executeBatch();原创 2021-06-10 00:10:21 · 1195 阅读 · 0 评论 -
自定义一个注解并使用
使用IDE新建一个文件添加四个注解@Target@Retention@Inherited@Documentedpublic @interface Check {}@Target: 指示注释类型适用的上下文。 参数ElementType[]: ANNOTATION_TYPE 注解类型声明 CONSTRUCTOR 构造函数声明 字段 字段声明(包括枚举常数) L.原创 2021-12-24 21:59:58 · 579 阅读 · 0 评论 -
Java中的注解
编写文档:通过代码里标识的注解生成文档【生成文档doc文档】代码分析:通过代码里标识的注解对代码进行分析【使用反射】编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查【override】JDK中预定义的一些注解@Override :检测被该注解标注的方法是否是继承自父类(接口)的@Deprecated :该注解标注的内容,表示已过时@Suppresswarnings :压制警告 —般传递参数all@suppresswarnings( "all")自定义注解*格式:元注解...原创 2021-12-22 22:11:12 · 190 阅读 · 0 评论 -
类、类加载器、反射
反射:框架设计的灵魂*框架∶半成品软件。可以在框架的基础上进行软件开发,简化编码*反射:将类的各个组成部分封装为其他对象,这就是反射机制*好处:1.可以在程序运行过程中,操作这些对象。1.可以在程序运行过程中,操作这些对象.获取class对象的方式:1. class.forName("全类名")∶将字节码文件加载进内存,返回class对象2.类名.class :通过类名的属性class获取2.类名.class:通过类名的属性class获取3.对象.getclass() : get原创 2021-12-20 22:35:28 · 67 阅读 · 0 评论 -
JDK8的集合流式操作
流操作分为中间和终端操作,并且组合以形成流管线 。 流管线由源(例如Collection ,阵列,发生器功能或I / O通道)组成; 其次是零个或多个中间操作,如Stream.filter或Stream.map ; 以及诸如Stream.forEach或Stream.reduce的终端Stream.reduce 。中间操作返回一个新的流。 他们总是懒惰 执行诸如filter()操作实际上不执行任何过滤,而是创建一个新的流,当被遍历时,它包含与给定谓词匹配的初始流的元素。 在管道的终端操作被执行之前,管道原创 2021-12-12 22:19:21 · 749 阅读 · 0 评论 -
使用Calendar工具类对日期进行推算
/***得到几天后的时间**@paramday*@return*/publicstaticDategetDateAfter(Datedate,intday){Calendarnow=Calendar.getInstance();now.setTime(date);now.set(Calendar.DATE,now.get(Calendar.DAT...原创 2021-10-17 11:16:42 · 132 阅读 · 0 评论 -
常用API
https://www.elastic.co/guide/en/elasticsearch/reference/current/index.htmlhttps://dubbo.gitbooks.io/dubbo-user-book/content/preface/background.htmlhttps://www.oracle.com/cn/java/technologies/java-se-api-doc.htmlhttps://www.li...原创 2021-08-27 20:42:17 · 74 阅读 · 0 评论 -
数据库连接中Class.forName是做什么的,可不可以不写,怎么还有ServiceLoader
在JdbcUtils中创建连接前我们需要加入这句话Class.forName("com.mysql.jdbc.Driver");传入 com.mysql.jdbc.Driver 之后,就知道我连接的数据库是 mysql官方文档的描述:https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#forName(java.lang.String)import com.mysql.jdbc.Driver;import原创 2021-08-25 19:15:54 · 165 阅读 · 0 评论 -
JDBC的数据库增删改(executeUpdate&execute) 查(executeQuery)工具类
Class.forName(driverer);DriverManager.getConnection(url, user, password);conn.prepareStatement(sql);setParams(ps,params); ps.executeUpdate();原创 2021-06-09 18:16:26 · 2979 阅读 · 0 评论 -
JSP中的内置对象、作用域、跳转方法
JSP中九大内置对象为:原创 2021-06-07 21:40:57 · 105 阅读 · 0 评论 -
多线程的使用,同步锁的应用场景,线程的状态
1.类继承Thread类,[重写run()方法,]调用start(),不适合资源共享。2.类实现Runable接口,[重写run()方法,]调用start()原创 2021-05-15 16:51:46 · 424 阅读 · 0 评论 -
接口都可以做哪些东西
做参数//定义一个接口public interface FaShuSkill { void fashuAttack();}//定义一个类,注意此类并未实现接口是为了用匿名内部类的方式调用方法public class Role { private FaShuSkill faShuSkill; public Role() { } //成员变量 通过set方法设置值 public void setFaShuSkill(FaShuSkill faShu.原创 2021-05-09 11:41:55 · 196 阅读 · 0 评论 -
Java中abstract关键字
abstract译为抽象,该关键字可修饰Java中类和方法,如何定义一个抽象类:**有抽象方法(abstract修饰)**的类一定的抽象类抽象类的子类有什么要求:必须全部重写父类的抽象方法(子类一般类),或者重写部分抽象方法(子类必须为抽象类);也因此抽象方法不能定义为private;抽象方法没有方法体,不能被new实例化,但却有默认的构造方法(抽象类稍比接口类高级一点,)抽象方法没有方法体(与接口类相同)使用场景:1.方法重写,不能被实例化。2.代码去重,易拓展。...原创 2021-05-04 23:38:55 · 122 阅读 · 0 评论 -
JAVA中this关键字的作用
JAVA中this关键字的作用局部变量与成员变量发生重名冲突解决使用this关键字this关键字代表了当前类(Student )代码中 private 至行末‘;’为声明的局部变量String name,而 void __(XXX xxx){}中的String name重名,我们可使用this.name名访问类的成员变量,即可解决重名冲突。public class Student { private String name; private int age; public voi原创 2021-04-30 09:30:24 · 122 阅读 · 0 评论