Java高级

  • 0. 前置知识
  • 0.1 TCP/UDP握手机制
  • 0.2 InetAddress使用
  • 1. 网络编程
  • 1.1 TCP编程
  • 1.2 netstat
  • 1.3 UDP编程
  • 2. 多用户通讯系统
  • 3. 反射
  • 4. 访问DB
  • 4.1 连接DB及基本操作
  • 4.2 连接池
  • 4.3 初级封装 Apache DBUtils


0. 前置知识

0.1 TCP/UDP握手机制

TCP:可靠,用于传送大量数据,需释放连接
UDP:不需建立连接,不可靠但效率高

韩顺平javapdf 韩顺平java高级百度网盘_开发语言

0.2 InetAddress使用

韩顺平javapdf 韩顺平java高级百度网盘_java_02

1. 网络编程

1.1 TCP编程

依赖socket

与文件流联系紧密

韩顺平javapdf 韩顺平java高级百度网盘_笔记_03

socket编程流程:

客户端和服务器端各有一个socket对象

韩顺平javapdf 韩顺平java高级百度网盘_java_04


server

韩顺平javapdf 韩顺平java高级百度网盘_韩顺平javapdf_05

client

韩顺平javapdf 韩顺平java高级百度网盘_笔记_06

服务器和客户端都在写入时,要设置结束标记,不然不知道什么时候结束

韩顺平javapdf 韩顺平java高级百度网盘_韩顺平javapdf_07

换为字符流

韩顺平javapdf 韩顺平java高级百度网盘_开发语言_08

韩顺平javapdf 韩顺平java高级百度网盘_韩顺平javapdf_09

1.2 netstat

netstat -anb 同时查看哪个程序在用这个端口(管理员身份)

韩顺平javapdf 韩顺平java高级百度网盘_韩顺平javapdf_10

1.3 UDP编程

韩顺平javapdf 韩顺平java高级百度网盘_开发语言_11

行为主体:DatagramSocket

转发的数据包:DatagramPacket

韩顺平javapdf 韩顺平java高级百度网盘_开发语言_12

韩顺平javapdf 韩顺平java高级百度网盘_java_13

2. 多用户通讯系统

代码可参考 这位老哥

3. 反射

能够在不修改源码的情况下,来控制程序。反射属于 动态加载

每个类在第一次加载时,系统会创建一个 Class类的对象(Class类就是一个比较特殊的类,继承了Object,用于映射),此对象存在于堆中

怎么创建这个对象的?通过ClassLoader的loadClass方法

拿到一个类的Class类对象,就能得到该类的所有属性/方法/构造器,然后就可以为所欲为

映射机制是Java框架的基础,但是耗时长

韩顺平javapdf 韩顺平java高级百度网盘_java_14


韩顺平javapdf 韩顺平java高级百度网盘_韩顺平javapdf_15

4. 访问DB

4.1 连接DB及基本操作

连接DB几大件:

  • connection
  • conn.prepareStatement 获取预编译的SQL语句,以?的形式防止
  • set = prepareStatement.executeQ 获取查询结果集

注:关闭连接的时候以上三个都要关闭

JavaBean:将DB中的一个表对应成一个Java类,此类需提供无/有参构造函数+set/get各个属性的方法

4.2 连接池

韩顺平javapdf 韩顺平java高级百度网盘_java_16

JDBC:表示操作DB的工具,DB原生厂商提供的操作DB工具,涉及事务操作和批处理等。
在实际开发中为了方便连接访问DB,考虑连接复用,进而衍生出连接池

eg. 德鲁伊实现的JDBC

常见连接池:

  • Druid德鲁伊连接池:阿里实现,连接多的时候(50w)也很快,不会增长多少
  • C3P0:老牌,胜在连接稳定

注:断开连接不是真的跟DB断开,而是把conn放回连接池

4.3 初级封装 Apache DBUtils

对JDBC进行封装,持久化查询结果

+Durid管理连接池

eg.

韩顺平javapdf 韩顺平java高级百度网盘_连接池_17

缺点:SQL固定,函数返回值固定,表越多JavaBean越多,不好管理

引出DAO,后见Spring等