多线程相关
runnable接口实现,解决单继承的问题,因为继承Thread类就不能继承其他类了
Callable接口的特点是满足线程需要返回值和抛出异常的情况
在创建线程后的任何时候都可以重新设置,线程已经创建,可以使用 Thread.setPriority() 方法在任何时候改变线程的优先级。
线程的优先级在 Java 中的有效范围是 1 到 10,其中 5 是默认的优先级。
notify是唤醒所在对象wait pool中的第一个线程。
wait()和sleep()对比
调用对象:wait() 是 Object 类的一个方法,它必须在同步块或同步方法中调用,用于释放当前线程持有的锁,并使线程进入等待队列,直到其他线程调用同一对象的 notify() 或 notifyAll() 方法。而 sleep() 是 Thread 类的静态方法,线程调用时不需要持有锁,它会让当前线程休眠指定的时间。
释放锁:wait() 会释放对象的锁,而 sleep() 不会释放锁。
目的:wait() 主要用于线程间的通信,线程进入等待状态直到被唤醒;sleep() 主要用于控制线程的暂停时间,通常不用于线程间的协调。
JDBC相关
JDBC API:供程序员调用的接口与类,集成在java.sql和 javax.sql 包中。
DBC中与数据库建立连接是通过调用 DriverManager类的静态方法 getConnection() 实现的。
例:Connection connection = DriverManager.getConnection(url, username, password);
ResultSet 对象是executeQuery()方法的返回值,它被称为结果集,它代表符合SQL语句条件的所有行,并且它通过一套getXXX方法(这些get方法可以访问当前行中的不同列)提供了对这些行中数据的访问。
ResultSet对象自动维护指向当前数据行的游标。每调用一次 next() 方法,游标向下移动一行。
JDBC自动提交事务,可以通过调用 setAutoCommit(false) 来禁止自动提交。
Statement的executeUpdate()方法会返回值是int类型,含义是DML操作影响记录数
初始时,ResultSet的游标指向的是“前一行”数据
JDBC对Java程序员而言是接口模型,对实现与数据库连接的服务提供商而言是API。
当Statement关闭时,ResultSet也会被自动关闭。
用户不必关闭ResultSet。当它的 Statement 关闭、重新执行或用于从多结果序列中获取下一个结果时,该ResultSet将被自动关闭。
execute、executeQuery、executeUpdate区别
execute:通用执行,返回boolean(是否有结果集)。
executeQuery:执行查询,返回ResultSet。
executeUpdate:执行DML/DDL,返回影响的行数(int)。
相对于Statement,PreparedStatement的优点
支持预编译,效率更高。
可以防止SQL注入攻击。
支持动态设置参数。
JDBC的事务管理
事务管理允许将一组操作作为一个整体进行处理,要么全部成功,要么全部回滚。它确保了数据一致性和完整性,避免部分操作成功,部分操作失败造成的不一致。
ResultSet
表示查询结果的数据表,通过游标逐行访问数据,支持通过列名或索引获取值。
JDBC驱动类型
类型1:JDBC-ODBC桥接
类型2:本地API驱动(部分Java,部分本地代码)
类型3:网络协议驱动(纯Java,中间件转发)
类型4:原生协议驱动(直接与数据库通信,纯Java)
JDBC操作步骤
1.加载驱动类
2.建立数据库连接
3.创建PrepareStatement和Connection对象(创建sql语句,创建PrepareStatement,替换占位符)
4.执行sql语句
5.处理结果集
6.关闭资源
其他
递归的应用场景:不知道要循环多少次,循环条件无法获取
删除文件夹经常需要递归操作
在 Java 中,字符串和字节数组之间的转换可以通过 getBytes() 和 new String() 方法来实现。
红黑树的口诀是:“左根右,根叶黑,不红红,黑路同。”