2024年Java最新源码分析mycat1(1),面试总结+详细解答

文章介绍了《Java高分面试指南》,包含25分类的详尽解析,1000+面试题和50万字内容,适合测试Java开发者的基础和解题能力,同时提及了与CODING开源项目相关的系统化学习资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最后

这份《“java高分面试指南”-25分类227页1000+题50w+字解析》同样可分享给有需要的朋友,感兴趣的伙伴们可挑战一下自我,在不看答案解析的情况,测试测试自己的解题水平,这样也能达到事半功倍的效果!(好东西要大家一起看才香)

image

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

import java.util.List;

import persistent.prestige.console.mysql.connection.Connection;

/**

  • 注:本次解析,重在将select 查询出来的数据,使用List<Object[]>返回,甚至转换为List

  • @author dingwei2

*/

@SuppressWarnings(“serial”)

public class ResultSetPacket extends Packet {

private static final int STATUS_NONE = 0; //未开始解析

private static final int STATUS_COLUMN = 1;//列信息解析中

private static final int STATUS_COLUMN_END = 2;//列信息解析完成

private static final int STATUS_ROWDATA = 4;//数据解析中

private static final int STATUS_END = 8; //包解析结束

private Connection conn;

/** 列的长度 */

private int columnCount;

private List columnDefinition41Packets;

private List<Object[]> rowDatas;

private int status; // 0:未开始;1: 解析column definition;2:解析rowdata中 ,3:结束

private boolean hasNext = false; //是否有下一个ResultSet包

/** 响应包类型 1:OK包;2:Error包;3:LoadDataFile包;4:ResultSetData包*/

private int responseType;

public ResultSetPacket(Connection conn) {

this.conn = conn;

this.rowDatas = new ArrayList<Object[]>();

// this.columnCount = columnCount;

// columnDefinition41Packets = new ArrayList(columnCount);

}

/**

  • 由于是演示代码,内存使用的是堆内存,故内存的管理交给了垃圾回收器

  • @param msg

*/

public void read(MysqlMessage msg) {

if(responseType < STATUS_COLUMN ) {//说明该包还是第一次解析,需要判断响应包的类型

int packetLen = msg.getPacketLength();

byte packetSeq = msg.getPacketSeq();

short pType = msg.getPTypeByFrom1Byte();

System.out.println(“数据包类型:” + pType + “,数据实体长度:” + packetLen);

if(pType == 0xFf) { // Error Packet

ErrorPacket errorPacket = ErrorPacket.newInstance(msg, packetSeq, packetLen);

System.out.println(errorPacket);

conn.endCmd();

this.responseType = 2;

this.status = STATUS_END; //包解析结束

return;

} else if(pType == 0) { //OK Packet,目前这里发的是EOF包

OkPacket ok = OkPacket.newInstance(msg, packetSeq, packetLen);

System.err.println(ok);

conn.endCmd();

this.responseType = 1;

this.status = STATUS_END; //包解析结束

return;

} else if(pType == 0xFB) { // load_data_request 包

conn.endCmd();

this.responseType = 3;

this.status = STATUS_END; //包解析结束

return;

} else {

this.responseType = 4;

//判断是否是LengthCodeInt类型

try {

long columnCount = msg.getBinaryLengthCode();

System.out.println(“字段长度:” + columnCount);

this.columnCount = (int) columnCount;

this.columnDefinition41Packets = new ArrayList(this.columnCount);

this.status = STATUS_COLUMN; //column definition 解析中

} catch (UnsupportedOperationException e) {

System.out.println(“不是一个合法的LengthCodeBinary包”);

conn.endCmd();

this.responseType = 4;

this.status = STATUS_END; //包解析结束

return;

}

}

}

//开始包的解析

if(status == STATUS_COLUMN) { //列信息解析

int i = 0;

while (msg.hasRemaining() && i++ < this.columnCount) {

System.out.println(“正在解析第” + (this.columnDefinition41Packets.size() + 1 ) + “列”);

this.columnDefinition41Packets.add( ColumnDefinition41Packet.newInstance(msg, false) );

}

if( this.columnDefinition41Packets.size() < this.columnCount) { //列描述包未全部解析完,待下次数据的到来

return;

}

//列信息解析完,进入到 ResultData解析

this.status = STATUS_COLUMN_END;//列信息解析完成后,会发送一个新的mysql数据包,故本方法就会结束,因为上层调用方只会传入一个完整的数据包

} else if(status == STATUS_COLUMN_END ) { //这是一个OK包或EOF包,在这里,只需忽略掉这个包即可

// while(msg.hasRemaining()) {

// System.out.print(msg.byte2hex(msg.get()));

// }

this.status = STATUS_ROWDATA;

} else if( status == STATUS_ROWDATA) {

//需要判断该包是结束包,还是ResultData包

// while(msg.hasRemaining()) {

// System.out.print(msg.byte2hex(msg.get()));

// }

int packetLen = msg.getPacketLength();

byte packetSeq = msg.getPacketSeq();

short pType = msg.getPTypeByFrom1Byte();

//结尾需要判断一下是 EOF包,还是OK包,重点关注服务器状态字段,判断是有更多ResultSet

if(pType == 0xFE && packetLen < 9) { //EOF 包

//msg.skipReadBytes(packetLen); //跳过协议头部和整个EOF包,这里不能,得解析 是否还有ResultSet,因为可能支持多ResultSet

//整个解析结束

EOFPacket packet = EOFPacket.newInstance(msg, packetSeq, packetLen);

if( (packet.getStatusFlags() & Packet.SERVER_MORE_RESULTS_EXISTS ) != 0 ) { //表明还有下一个

this.hasNext = true;

}

this.status = STATUS_END;

} else if (pType == 0x00 && packetLen >= 7) { // OK包

OkPacket packet = OkPacket.newInstance(msg, packetSeq, packetLen);

if( (packet.getStatusFlags() & Packet.SERVER_MORE_RESULTS_EXISTS ) != 0 ) { //表明还有下一个

this.hasNext = true;

}

this.status = STATUS_END;

} else {

while(msg.hasRemaining()) {

rowDatas.add( ResultSetDataPacket.newInstance(columnDefinition41Packets, msg).values() );

}

}

}

}

public boolean isEnd() {

return this.status == STATUS_END;

}

public int getColumnCount() {

return columnCount;

}

public void setColumnCount(int columnCount) {

this.columnCount = columnCount;

}

public List getColumnDefinition41Packets() {

return columnDefinition41Packets;

}

public void setColumnDefinition41Packets(List columnDefinition41Packets) {

this.columnDefinition41Packets = columnDefinition41Packets;

}

public List<Object[]> getRowDatas() {

return rowDatas;

}

public void setRowDatas(List<Object[]> rowDatas) {

this.rowDatas = rowDatas;

}

public int getStatus() {

return status;

}

public void setStatus(int status) {

this.status = status;

}

public boolean isHasNext() {

return hasNext;

}

最后

小编在这里分享些我自己平时的学习资料,由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

开源分享:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】

程序员代码面试指南 IT名企算法与数据结构题目最优解

这是” 本程序员面试宝典!书中对IT名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现。针对当前程序员面试缺乏权威题目汇总这一-痛点, 本书选取将近200道真实出现过的经典代码面试题,帮助广“大程序员的面试准备做到万无一失。 “刷”完本书后,你就是“题王”!

image.png

《TCP-IP协议组(第4版)》

本书是介绍TCP/IP协议族的经典图书的最新版本。本书自第1版出版以来,就广受读者欢迎。

本书最新版进行」护元,以体境计算机网络技不的最新发展,全书古有七大部分共30草和7个附录:第一部分介绍一些基本概念和基础底层技术:第二部分介绍网络层协议:第三部分介绍运输层协议;第四部分介绍应用层协议:第五部分介绍下一代协议,即IPv6协议:第六部分介绍网络安全问题:第七部分给出了7个附录。

image.png

Java开发手册(嵩山版)

这个不用多说了,阿里的开发手册,每次更新我都会看,这是8月初最新更新的**(嵩山版)**

image.png

MySQL 8从入门到精通

本书主要内容包括MySQL的安装与配置、数据库的创建、数据表的创建、数据类型和运算符、MySQL 函数、查询数据、数据表的操作(插入、更新与删除数据)、索引、存储过程和函数、视图、触发器、用户管理、数据备份与还原、MySQL 日志、性能优化、MySQL Repl ication、MySQL Workbench、 MySQL Utilities、 MySQL Proxy、PHP操作MySQL数据库和PDO数据库抽象类库等。最后通过3个综合案例的数据库设计,进步讲述 MySQL在实际工作中的应用。

image.png

Spring5高级编程(第5版)

本书涵盖Spring 5的所有内容,如果想要充分利用这一领先的企业级 Java应用程序开发框架的强大功能,本书是最全面的Spring参考和实用指南。

本书第5版涵盖核心的Spring及其与其他领先的Java技术(比如Hibemate JPA 2.Tls、Thymeleaf和WebSocket)的集成。本书的重点是介绍如何使用Java配置类、lambda 表达式、Spring Boot以及反应式编程。同时,将与企业级应用程序开发人员分享一些见解和实际经验,包括远程处理、事务、Web 和表示层,等等。

image.png

JAVA核心知识点+1000道 互联网Java工程师面试题

image.png

image.png

企业IT架构转型之道 阿里巴巴中台战略思想与架构实战

本书讲述了阿里巴巴的技术发展史,同时也是-部互联网技 术架构的实践与发展史。

image.png

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

理、事务、Web 和表示层,等等。

[外链图片转存中…(img-JBlJhoRh-1714964598440)]

JAVA核心知识点+1000道 互联网Java工程师面试题

[外链图片转存中…(img-CDQyG3jj-1714964598440)]

[外链图片转存中…(img-BmLr58cg-1714964598440)]

企业IT架构转型之道 阿里巴巴中台战略思想与架构实战

本书讲述了阿里巴巴的技术发展史,同时也是-部互联网技 术架构的实践与发展史。

[外链图片转存中…(img-20pbH0rZ-1714964598441)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值