最后
这份《“java高分面试指南”-25分类227页1000+题50w+字解析》同样可分享给有需要的朋友,感兴趣的伙伴们可挑战一下自我,在不看答案解析的情况,测试测试自己的解题水平,这样也能达到事半功倍的效果!(好东西要大家一起看才香)
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道真实出现过的经典代码面试题,帮助广“大程序员的面试准备做到万无一失。 “刷”完本书后,你就是“题王”!
《TCP-IP协议组(第4版)》
本书是介绍TCP/IP协议族的经典图书的最新版本。本书自第1版出版以来,就广受读者欢迎。
本书最新版进行」护元,以体境计算机网络技不的最新发展,全书古有七大部分共30草和7个附录:第一部分介绍一些基本概念和基础底层技术:第二部分介绍网络层协议:第三部分介绍运输层协议;第四部分介绍应用层协议:第五部分介绍下一代协议,即IPv6协议:第六部分介绍网络安全问题:第七部分给出了7个附录。
Java开发手册(嵩山版)
这个不用多说了,阿里的开发手册,每次更新我都会看,这是8月初最新更新的**(嵩山版)**
MySQL 8从入门到精通
本书主要内容包括MySQL的安装与配置、数据库的创建、数据表的创建、数据类型和运算符、MySQL 函数、查询数据、数据表的操作(插入、更新与删除数据)、索引、存储过程和函数、视图、触发器、用户管理、数据备份与还原、MySQL 日志、性能优化、MySQL Repl ication、MySQL Workbench、 MySQL Utilities、 MySQL Proxy、PHP操作MySQL数据库和PDO数据库抽象类库等。最后通过3个综合案例的数据库设计,进步讲述 MySQL在实际工作中的应用。
Spring5高级编程(第5版)
本书涵盖Spring 5的所有内容,如果想要充分利用这一领先的企业级 Java应用程序开发框架的强大功能,本书是最全面的Spring参考和实用指南。
本书第5版涵盖核心的Spring及其与其他领先的Java技术(比如Hibemate JPA 2.Tls、Thymeleaf和WebSocket)的集成。本书的重点是介绍如何使用Java配置类、lambda 表达式、Spring Boot以及反应式编程。同时,将与企业级应用程序开发人员分享一些见解和实际经验,包括远程处理、事务、Web 和表示层,等等。
JAVA核心知识点+1000道 互联网Java工程师面试题
企业IT架构转型之道 阿里巴巴中台战略思想与架构实战
本书讲述了阿里巴巴的技术发展史,同时也是-部互联网技 术架构的实践与发展史。
理、事务、Web 和表示层,等等。
[外链图片转存中…(img-JBlJhoRh-1714964598440)]
JAVA核心知识点+1000道 互联网Java工程师面试题
[外链图片转存中…(img-CDQyG3jj-1714964598440)]
[外链图片转存中…(img-BmLr58cg-1714964598440)]
企业IT架构转型之道 阿里巴巴中台战略思想与架构实战
本书讲述了阿里巴巴的技术发展史,同时也是-部互联网技 术架构的实践与发展史。
[外链图片转存中…(img-20pbH0rZ-1714964598441)]