Mysql
一、事务1.1 简介事务是一组操作的集合,是不可分割的工作单位,要么同时成功,要么同时失败。 默认MySQL的事务是自动提交的,当执行一条DML语句,MySQL会立即隐式提交事务。 1.2 事务操作查看/设置事务提交方式SELECT @@autocommit ; SET @@autocommit = 0 ; 0:不自动提交 1:自动提交 提交事务COMMIT; 回滚事务ROLLBACK; 开启事务START TRANSACTION; 或 BEGIN; 1.3 ACID 1.4 并发事务问题 1.5 事务隔离级别 查看事务隔离级别:SELECT @@TRANSACTION_ISOLATION; 设置事务隔离级别:SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE } 注:事务隔离级别越高,数据越安全,但是性能越低 二、存储引擎 2.1...
Redis
一、缓存穿透缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。 有些人可能在短时间内恶意发送大量这样的请求,导致数据库崩溃。 常见解决方案: 1、缓存空对象优点:实现简单,维护方便 缺点:1、额外的内存消耗 2、可能造成短期的不一致 2、布隆过滤优点:内存占用较少,没有多余key 缺点:1、实现复杂 ...
SSM 整合、 Spring
SSM 整合零、配置1、导入依赖junit,数据库驱动,连接池,servlet,jsp,mybatis,spring,mybattis-spring… 2、IDEA连接数据库3、Spring配置文件 4、Mybatis配置文件 5、配置数据库 一、MyBatisDAO层作用:直接操作数据库 使用MyBatis,需要的文件有.java,.xml,在程序运行时,MyBatis会自动生成动态代理实现类取操作数据库。 .java 负责写接口定义 .xml 映射文件,负责写SQL语句 注意:需要在mybatis-config.xml中注册Mapper接口文件,否则MyBatis找不到 Serive层作用:实现业务功能 Service层调用DAO层 二、Spring关联spring和DAO层 关联spring和service层 三、SpringMVC与web相连 SpringMVC Tipslombok...
JUC
一、Java线程1.1 创建和运行线程方法一、直接使用Thread12345678910// 创建线程对象Thread t = new Thread() { @Override public void run() { // 要执行的任务 }};t.setName("t1");// 启动线程t.start(); 方法二、使用Runnable配合Thread把线程和任务(要执行的代码)分开 Thread代表线程 Runnabnle代表可运行的任务(线程要执行的代码) 12345678910// 创建任务对象Runnable task2 = new Runnable() { @Override public void run() { log.debug("hello"); }};// 参数1 是任务对象; 参数2 是线程名字,推荐Thread t2 = new Thread(task2,...
JVM
一、垃圾回收1.1 如何判断对象是否可以回收1.1.1 引用计数法A、B对象循环引用,但是别的地方没有使用A、B了。由于A、B的引用计数都为1,所以无法回收,造成内存泄漏。 1.1.2 可达性分析算法JAVA使用这个算法 确定根对象GC Root(肯定不能被垃圾回收的对象)。判断每个对象是不是被根对象直接或间接的引用,如果是,则不能作为垃圾回收。 1.1.3 五种引用 引用本身也是一个对象,当软/弱引用的对象被回收后,可以将软引用/弱引用自己(对象)放入引用队列,然后通过引用队列进一步释放他们自己的对象所占的空间。 虚引用/终结器引用必须配合引用队列一起使用 (1) 强引用定义:Object obj = new Object(); 这种方式的赋值 特点:只要引用关系还存在,GC(垃圾回收器)就永远不回收被引用的对象。 (2) 软引用特点:当系统内存充足时不会回收软引用的对象;但当内存不足时,回收软引用的对象。 (3) 弱引用特点:只要发生了垃圾回收,不管内存是否充足,都会回收弱引用的对象。 (4)...
javase 单元测试
一、单元测试引入为什么需要单元测试,而不能自己在main方法中测试? 在main方法中测试,只能手动的规定要测试哪些方法,如果某一个方法出错,就无法再对后续的方法进行测试。 Junit单元测试框架优点 可以针对某个方法执行测试,也支持一键完成对全部方法的自动化测试,且各自独立。 会自动生成测试报告,不需要程序员自行分析测试结果。 步骤 举例 二、反射加载类,并以编程的方式去解剖类中的各种成分(成员变量、方法、构造器) 1、获取Class对象 2、获取类的构造器 举例: 3、获取类的成员变量 4、获取类的方法 反射的作用 基本作用:可以得到一个类的全部成分然后操作。 可以破坏封装性 可以绕过泛型的约束 适合做JAVA的框架,主流的框架基本都会基于反射设计出一些通用的功能 三、注解让其他程序根据注解信息来决定怎么执行该程序。 1、自定义注解 特殊属性名:value 如果注解中只有一个value属性,使用注解时,value名称可以不写。 2、注解的原理 3、元注解注解某个注解的注解 @Target 声明被修饰的注解只能在哪些位置使用 @Retention...
javase 多线程
一、多线程(一)创建多线程的三种方法1、继承Thread类,重写run()方法 注意:一定要调用线程对象的start方法,如果调用run方法,JAVA会把它看成一个普通的线程。 2、实现Runnable接口,重写run()方法 举例: 写法二、匿名内部类: 写法三、lambda表达式 3、实现Callable接口前两种方法主线程拿不到子线程的返回值。 而第三种方法可以。 举例: (省略MyCallable的定义代码,其中还写了MyCallable的有参构造函数,这样就可以对其进行传参了。) 那么,为什么不直接把FutureTask的功能给Callable呢?为什么还要多加一层? gemini的回答: 总结 (二)线程的常用方法 (三)线程同步1、同步代码块 synchronized()括号中的对象相当于是信号量 使用规范 2、同步方法 举例 同步代码块和同步方法的区别 同步代码块锁的范围更小,性能更好 同步方法的可读性更好,实现更简单 3、Lock锁相比前两种更加灵活。 12345// 创建锁对象private final Lock lk = new...
javase 集合、Strean流、函数式接口
一、集合(一)Collection集合 Collection集合的特点 1、ListArrayList数组、LinkedList链表 2、SetHashSetJDK8前:数组+链表 JDK8后:数组+链表+红黑树 LinkedHashSetHashSet中的每个元素都加上前后指针,变成双向链表 TreeSet自定义排序规则 Double.compare(a, b)默认是升序,即a-b>0则a在排在后面。 如果修改成Double.compare(b,...
灵茶山艾府 算法基础
一、相向双指针利用数组已经排序的性质,两数相加和target比较大小,可以知道整个数组和target的关系。 【一定要找到一个我们能明确知道大了是往哪移,小了是往哪移动的情况才能套用这个方法。即固定的那个数不能是随便固定的。】 1、两个数从两端开始,left=2, right=8。此时left + right=10 >...
javase 引入、基本语法
一、引入JAVA语言特性简单性:不像c++支持多继承,无指针。底层由c++实现。 面向对象 可移植性:一次编译,到处运行。在win上编译后可以在Linux上运行。 Java程序在Java虚拟机上运行,JVM : Java virtual machine JDK :Java开发工具包 多线程 健壮性:产生的垃圾是自动回收的,不需要像c++一样手动回收内存空间。 安全性 JAVA的加载与执行 注:.class文件是字节码文件,不是纯粹的二进制文件,否则操作系统就可以直接运行了。 编译:使用JDK中自带的javac.exe进行编译使用方法: 1javac java源文件的路径 一个源文件可能生成多个.class文件 .class文件生成后,删除.java文件不影响程序的运行,但最好不要删掉,以防后面要修改。 运行:使用java.exe运行使用方法: 磁盘上有一个A.class 1java A...