- 博客(41)
- 收藏
- 关注
原创 Spring循环依赖
1.:缓存经过了完整生命周期的bean2.:缓存未经过完整生命周期的bean,如果某个bean出现了循环依赖,就会提前把这个暂时未经过完整生命周期的bean放入earlySingletonObjects中,这个bean如果要经过AOP,那么就会把代理对象放入earlySingletonObjects中,否则就是把原始对象放入earlySingletonObjects;
2025-12-23 19:04:48
999
原创 观察者模式
观察者模式属于行为型模式。在程序设计中,多个对象间存在一对多的依赖关系,当一个对象发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式。
2025-12-23 18:54:20
698
原创 Spring
IOC:其思想是反转资源获取的方向. 传统的资源查找方式要求组件向容器发起请求查找资源. 作为回应, 容器适时的返回资源. 而应用了 IOC 之后, 则是容器主动地将资源推送给它所管理的组件, 组件所要做的仅是选择一种合适的方式来接受资源. 这种行为也被称为查找的被动形式。
2025-12-11 19:50:36
649
原创 索引 优化
10.inner join时,mysql会自动帮助把小结果集的表选为驱动表,直接在大表中建立索引(万一没有自动调整,使用STRAIGHT_JOIN,强制让其小表驱动)总结:连接查询 + 子查询,子查询会产生衍生表,衍生表无法创建使用索引;3.若where后面的条件出现有范围筛选之类的,尽量放在最末尾,若在前可能会导致复合索引只能使用部分。2.若使用子查询,产生衍生表,由于衍生表无法创建索引,尽量放在join左边。14.不要使用select * 查询数据,一般策略,查询的字段可以尽量是索引。
2025-11-25 12:02:20
126
原创 MyBatis
1.XxxMapper.java接口 与 XxxMapper.xml 映射文件,同名2.XxxMapper.xml 映射文件中namespace的命名空间属性,需要填写 XxxMapper.java接口的全类名3.XxxMapper.xml 映射文件中id属性,必须与 XxxMapper.java接口的 方法名一致4.XxxMapper.xml 映射文件中parameterType属性,必须与 XxxMapper.java接口的 方法的参数类型一致。
2025-11-21 12:29:46
459
1
原创 MyBatis创建
Mybatis是一个,是apache下的顶级项目。mybatis托管到goolecode下,再后来托管到github下。通用Mapper、JPA、Hibernate等mybatis让程序员将主要,通过mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需要sql语句。mybatis可以将向 PreparedStatement中的输入参数自动进行,将查询结果集灵活映射成Java对象(
2025-11-21 12:00:17
180
原创 JDBC
可以通过调用 Connection 对象的 preparedStatement(String sql) 方法获取 PreparedStatement 对象PreparedStatement 接口是 Statement 的子接口,它表示一条预编译过的 SQL 语句PreparedStatement 对象所代表的 SQL 语句中的参数用问号(?
2025-11-19 09:00:00
682
原创 TCL 事务
1.事务TCL (Transaction Control Language) 事务控制语言2.概念一个事务是由一条或者多条sql语句构成,这一条或者多条sql语句要么全部执行成功,要么全部执行失败默认情况下,每条单独的sql语句就是一个单独的事务。
2025-11-18 08:59:39
762
原创 DML&DCL
DML:数据操作语言,用来定义数据库记录(数据) insert / update / delete1 插入全部数据语法:insert into 表名 values(值1,值2,....);2 插入部分数据语法:insert into 表名(字段1,字段2,...) values(值1,值2,....);3 批量插入数据语法:insert into 表名 values(值1,值2,....),(值1,值2,....),(值1,值2,....);修改stu表中id字段为自增长。
2025-11-15 09:02:08
1072
原创 SQL数据查询
1、查询单个字段2、查询多个字段3、查询所有字段-- 慎用*,会面向全表查询4、查询函数(调用函数,获取返回值)-- concat(字段1,字段2,...) 拼接函数5、给查询字段起别名方式一:使用as关键字方式二:使用空格select concat(first_name,' & ',last_name) 姓名 from employees;6、distinct的使用,去除重复记录需求:查询员工涉及到的部门编号7、查看表的结构。
2025-11-14 09:37:18
1004
1
原创 Base64的使用
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。在Java 8中,Base64编码已经成为Java类库的标准。Java 8 内置了 Base64 编码的编码器和解码器。
2025-11-07 11:00:00
649
原创 代理模式的使用
目标对象target 代理对象proxy1.在使用时,需要定义接口或者父类2.被代理对象(即目标对象)与代理对象一 起实现相同的接口或者是继承相同父类。静态代理使用方式:代理对象与目标对象要实现相同的接口,然后在代理方法内调用目标对象的方法。静态代理的优缺点优点:在不修改目标对象的功能前提下, 能通过代理对象对目标功能扩展缺点:1.因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类2.一旦接口增加方法,目标对象与代理对象都要维护。
2025-11-06 17:28:10
1115
原创 注解的使用
1.如何声明带有属性的注解?语法:@interface 注解名{数据类型 属性名();数据类型 属性名() default 默认值;属性类型 value();数据类型[] 属性名();注意:1.八大基本类型:byte short int long float double char boolean2.引用类型 类似于 String的API、Class、注解类型、枚举等3.以上所有数据类型的数组形式2.如何使用?
2025-11-06 11:00:00
1228
原创 反射的使用
反射是一种机制,利用该机制可以在程序运行过程中对类进行解剖并操作类中的所有成员(成员变量,成员方法,构造方法)反射是指对于任何一个类,在"运行的时候"都可以直接得到这个类全部成分。在运行时,可以直接得到这个类的构造器对象。在运行时,可以直接得到这个类的成员变量对象。(Field)在运行时,可以直接得到这个类的成员方法对象。(Method)使用反射操作类成员的前提:要获得该类字节码文件对象,就是Class对象反射在实际开发中的应用:开发IDE(集成开发环境),比如IDEA,Eclipse。
2025-11-05 17:01:06
1274
原创 多线程——并发三特性
原子性是指在一次操作或者多次操作中,要么所有的操作全部都得到了执行并且不会受到任何因素的干扰而中断,要么所有的操作都不执行。原子性多线程并发操作共享变量时,不能保证以下动作的原子性操作,例如:1.先从主内存中,“读” 取最新count数据,至工作内存中2.在本线程的工作内存中,进行 count++ “运算”3.将工作内存中的数据,“写” 回主内存中。
2025-11-03 21:32:39
1129
原创 多线程——死锁和线程通信
死锁:在多线程程序中,使用了多把锁,造成线程之间相互等待.程序不往下走了。造成死锁的原因1.多个线程间,相互持有对方的对象锁2.同步代码块嵌套如何排查死锁问题1.命令终端通过 CMD 进入,输入 jps -l ,查看进程,锁定进程号通过 jstack 进程号 ,进一步去锁定 Found 1 deadlock. 的问题2.图形化方式通过jconsole命令进入,选择当前类的进程,找到线程的选项卡->检测死锁如何解决问题1.不要同步代码块嵌套。
2025-11-03 10:00:00
727
原创 多线程——自定义线程池2
合理利用线程池能够带来三个好处: 1. 降低资源消耗。减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。 2. 提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。 3. 提高线程的可管理性。可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为消耗过多的内存,而把服务器累趴下(每个线程需要大约1MB内存,线程开的越多,消耗的内存也就越大,最后死机)。自定义线程池:ThreadPoolExecutor构造方法:public ThreadPool
2025-11-02 12:30:00
729
原创 多线程——线程池1
线程池:其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源。线程池作用就是限制系统中执行线程的数量为什么要用线程池:1.减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。2.可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为消耗过多的内存,而把服务器累趴下(每个线程需要大约1MB内存,线程开的越多,消耗的内存也就越大,最后死机)。
2025-11-02 12:00:00
2319
原创 多线程——线程状态转换
线程状态:线程由生到死的完整过程当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在线程的生命周期中,有六种线程状态:NEW 新建状态RUNNABLE 可运行状态TIMED_WAITING 计时等待状态WAITING 等待状态TERMINATED 终止状态BLOCKED 阻塞状态。
2025-11-01 10:30:00
784
原创 多线程——Lock锁与synchronized锁
Lock锁 悲观锁 接口java.util.concurrent.locks.Lock 接口java.util.concurrent.locks.ReentrantLock 实现类 可重入锁 非公平锁public void lock() 加同步锁public void unlock() 释放同步锁。
2025-11-01 09:00:00
799
原创 多线程——创建线程方式
串行:一个一个的运行并行:指两个或多个事件在 “同一时刻” 发生(同时执行)并发:指两个或多个事件在 “同一个时间段” 内发生(交替执行)。进程:1.一个独立的应用程序,例如:IDEA、QQ、画图等2.每一个应用程序拥有独立的内存空间3.进程也是程序的一次执行过程,是系统运行程序的基本单位4.系统运行一个程序,是创建、运行、到消亡的过程线程:1.线程是进程中的一个执行单元2.一个进程至少要有一个主线程3.进程中允许有多个线程存在。
2025-10-31 08:45:00
1088
原创 多线程——线程安全与线程同步
如果有多个线程在同时运行,而这些线程可能会同时运行这段代码。程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。线程安全问题都是由全局变量及静态变量引起的。若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则的话就可能影响线程安全。
2025-10-31 08:45:00
875
原创 有效的数独
核心关键:数独有效性的本质是三维度不重复,解题的核心是通过合适的存储结构,实现 “遍历过程中的实时校验”,避免后续重复遍历检查。最优实现选择:针对数独问题,数组计数实现是更优解—— 因数字范围固定(1-9),数组既能保证访问效率,又能简化代码。迁移价值:哈希表实现虽在数独场景中不占优势,但提供了 “范围不确定的场景” 思路,可迁移到类似的多维度去重问题中。
2025-10-30 09:00:00
315
原创 字节流,字符流,转换流,序列化流
用一个字节序列可以表示一个对象,该字节序列包含该对象的数据、对象的类型和对象中存储的属性等信息。public BufferedInputStream(InputStream in) 参数是流对象,默认DEFAULT_BUFFER_SIZE=8kb。对象的数据、对象的类型和对象中存储的数据信息,都可以用来在内存中创建对象。public synchronized void write(int b) 一个一个字节写。1.用一个字节序列,表示对象信息,存储至“介质”(文本、内存等)中,这个过程成为序列化过程。
2025-10-29 11:00:00
1292
原创 File , 递归
1.构造方法public File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。public File(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例。public File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例。一个File对象代表硬盘中实际存在的一个文件或者目录。
2025-10-29 10:30:00
724
原创 引用方法,Stream
1.格式旧 类名.静态方法名();新 类名::静态方法名2.简化步骤:定义一个静态方法,把需要简化的代码放到一个静态方法中。3.注意事项:被引用的方法的参数列表,要和函数式接口中的抽象方法的参数列表一致。如果函数式接口中的抽象方法有返回值,则被引用的方法必须也有相同的返回值。如果函数式接口中的抽象方法没有返回值,则被引用的方法可以有返回值,也可以没有返回值。
2025-10-28 14:07:28
1286
原创 Lambda,函数式接口
前提条件:new 接口(){ 待实现的抽象方法,实现有且只有一个 } 接口符合@FunctionalInterface的函数式接口规范。
2025-10-28 10:06:51
672
原创 集合框架Set,Map
-- Map<K,V> 集合中的key键就是Set集合1.存取顺序不一致2.不允许重复存放HashSet类1.存取顺序不一致2.不允许重复存放,依据添加进来的元素 equals()和hashCode()3.线程不安全4.允许存放null值5.JDK1.8 之前数据结构 数组+链表JDK1.8 之后数据结构 数组+链表+红黑树TreeSet类1.对元素进行排序,要么元素自身具备比较性;要么容器具备比较器。
2025-10-21 22:57:40
1483
原创 异常的处理
一般是在项目中,也业务相关的异常,将其定义位自定义异常1.extends Exception 编译期异常2.extends RuntimeException 运行期异常编译期的自定义异常2.生成无参构造方法、一个携带有异常信息的有参构造方法3.在业务方法中,搭配 throw new 编译期的自定义异常("异常信息");4.一旦抛出,必须处理,要么继续向上抛 throws;要么try...catch;
2025-10-19 13:21:21
1090
原创 常用类总结2
public BigInteger add(BigInteger val) 加。public BigInteger subtract(BigInteger val) 减。public BigInteger multiply(BigInteger val) 乘。public BigDecimal add(BigDecimal val) 加。public BigDecimal multiply(BigDecimal val) 乘。引用数据类型值传递,形参改变,实参改变。
2025-10-16 12:00:54
987
原创 常用类总结1
类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。:返回该对象的字符串表示。:指示其他某个对象是否与此对象“相等”。方法摘要:toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。覆盖重写:如果不希望使用toString方法的默认行为,则可以对它进行覆盖重写。在IntelliJ IDEA中,可以点击菜单中的,也可以使用快捷键,点击选项。调用成员方法equals并指定参数为另一个对象,则可以判断这
2025-10-15 23:54:50
1525
原创 内部类、代码块、枚举
内部类即在类中定义另外一个类,是一个相对概念。内部类分为成员内部类与局部内部类。定义时是一个正常定义类的过程,同样包含各种修饰符、继承与实现关系等。内部类可以直接访问外部类的所有成员。外部类编译后会出现两个class文件。可以使用的修饰符:访问权限修饰符、static、final、abstract。
2025-10-13 18:49:34
544
原创 接口,多态
多态的定义格式:就是父类的引用变量指向子类对象多态: 是指同一行为,具有多个不同表现形式。从上面案例可以看出,Cat和Dog都是动物,都是吃这一行为,但是表现形式是不一样的。父类 变量名 = new 子类();class Zi extends Fu {} //类的多态使用抽象类 变量名 = new 抽象类子类();System.out.println(“重写父类抽象方法”);} //类的多态使用 Fu fu= new Zi();接口 变量名 = new 接口实现类();
2025-10-13 12:16:47
662
原创 static、final、抽象、单例模式
经理类:继承员工类,并有自己特有的bonus分红属性,实现自己的addSalary()涨薪方法。1.静态成员,不再属于某个对象,而是所有对象共享的,属于类 , 在内存中是独一份的。2.静态成员,无论是静态属性、静态方法,都是直接使用 “ 类名.静态成员 ”静态方法中,可以使用静态属性、静态方法,但是不能使用成员属性、成员方法;正常拥有成员,例如:成员属性、成员方法、构造方法,可以没有抽象方法。3.成员方法中,可以使用成员属性、成员方法、静态属性、静态方法;
2025-10-13 10:40:53
1098
原创 类与类的关系
继承是代码复用的重要方式,是类与类之间的一种关系。从类与类之间的设计关系看,子类必须属于父类的一种时,才会继承。父类抽取出了共性的内容,子类可以在父类基础上扩展新的属性与行为。子类拥有父类的所有属性与方法,无需重新定义。并且可以直接使用非私有的父类成员。使用extends关键字完成继承关系:class 子类 extends 父类 {}子类通过get&set方法访问父类成员变量。继承的特点:Java支持单继承。Java支持多层继承。父类定义了继承树中共性内容,子类定义了该类个性内容。在结合多态后,能使用父类时
2025-10-12 22:57:43
397
原创 Git的基本使用方法
安装完成后,在开始菜单里找到“Git”->“Git Bash”,弹出一个命令行窗口,就说明Git安装成功。e83249e (HEAD -> master) HEAD@{2}: commit: '添加打印c'git commit -m "wrote a.js" //把文件提交到本地仓库。就等于 git reset HEAD 回退到工作区,即git add 之前。在Windows上使用Git,可以从Git官网直接下载安装。git add a.js //把文件添加到暂存区。删掉,并且git commit。
2025-10-12 13:17:39
346
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅