- 博客(54)
- 收藏
- 关注
原创 Mybatis
支持的对象: Mybatis仅支持association关联对象和collection关联集合对象的延迟加载,association指的就是一对一,collection指的就是一对多查询。概念: 延迟加载的原理是在查询时只加载部分数据,当需要访问未加载的数据时再进行加载。原理: MyBatis实现延迟加载的方式是使用CGLIB多态代理对象,在访问未加载的数据时触发代理对象的方法,从而进行数据的加载。②基于SQL编程,很灵活,SQL写在xml文件里,与程序解耦,便于管理。,可以有效解决SQL注入问题。
2024-11-12 17:03:57
568
原创 SpringBoot
热部署: 修改代码不需要重启,就可以实现编译并部署到服务器上。(1)在开发时修改代码不需要重启服务,节省了时间。(2)部署在服务器上的程序,可以在不停止的情况下进行升级。①使用devtools。在配置文件中把devtools.restart.enabled 设置为 true。每次都需要build一下才行。②idea设置实现热部署。
2024-11-12 15:09:04
524
原创 SpringMVC
是基于java的MVC设计模式的轻量级MVC框架,通过对Model、view、Controller分离,把web应用分成逻辑清晰的几部分,简化了开发,方便了开发人员的配合。
2024-11-11 20:42:45
1155
原创 Spring
AOP,即面向切面编程,在Spring中用于将那些与业务无关但对多个对象产生影响的公共行为和逻辑抽取出来,实现公共模块复用,降低耦合。常见的应用场景包括公共日志保存和事务处理。
2024-11-11 15:50:23
1067
原创 MySQL(下)
其中未提交读指的是一个事务还没提交时,它做的变更就能被其他事务看到,读已提交指的是一个事务提交之后,它做的变更才能被其他事务看到;串行化指的是会对记录加上读写锁,在多个事务对这条记录进行读写操作时,如果发生了读写冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。数据一致性问题,当主节点发生故障时,从节点的数据可能不一致。从节点负责处理所有读操作,并从主节点获取最新数据。MyISAM 中 B+ 树的数据结构存储的内容是实际数据的地址值,它的索引和实际数据是分开的,只不过使用索引指向了实际数据。
2024-11-04 11:46:55
985
转载 一天吃透Java面试八股文
值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本,并不是原对象本身,两者指向同一片内存空间。所以对引用对象进行操作会同时改变原对象。java中不存在引用传递,只有值传递。即不存在变量a指向变量b,变量b指向对象的这种情况。StringJoiner是 Java 8 新增的一个 API,它基于 StringBuilder 实现,用于实现对字符串之间通过分隔符拼接的场景。
2024-09-25 19:39:23
1059
原创 【Spring】
学习路线:核心容器-->整合(Mybatis)-->AOP-->事务-->家族(SpringMVC、Springboot、spring cloud)IoC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在IoC容器中被称为。在容器中建立bean与bean之间的依赖关系的整个过程,被称为依赖注入。提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转。在IoC容器内将有依赖关系的bean进行关系绑定(DI)data integration数据集成。data access 数据访问。
2024-07-25 09:57:27
602
1
原创 【数据结构与算法—基础篇1】
需要额外的存储空间:链表的每个节点需要额外的指针来指向下一个节点,这样会占用额外的存储空间,相对于顺序表来说,存储效率较低。插入和删除操作复杂:由于顺序表是连续存储的,当需要插入或删除元素时,需要移动其他元素来腾出空间或填补空缺,因此时间复杂度为O(n),其中n是元素的个数。2、数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。8、数据的逻辑结构和存储结构是密不可分的,算法的设计取决于所选定的逻辑结构,而算法的实现依赖于采用的存储结构。
2024-07-24 09:58:52
421
原创 【数据库连接池】
/从数据源获取连接。//从数据源获取连接。使用了这些数据库连接池后,我们在项目开发中就不需要编写连接数据库的代码了!//创建数据源 工厂模式--->创建。//创建数据源 工厂模式--->创建。Druid:阿里巴巴。
2024-07-22 11:15:43
1895
原创 【PrepareStatement】
try {//获取数据库连接)";//预编译sql,先写sql,然后不执行// 索引值+参数赋值//new Date().getTime()获得时间戳if(i>0){System.out.println("插入成功");。
2024-07-22 08:37:42
755
原创 【Statement对象】
/获取SQL执行对象。//获取SQL执行对象。//获取SQL执行对象。//获取SQL执行对象。System.out.println("插入成功");System.out.println("删除成功");System.out.println("更新成功");
2024-07-21 10:20:10
558
原创 初识JDBC
/固定写法,加载驱动。还需要导入一个数据驱动包mysql-connector-java-5.1.47.jar。//5、执行sql对象去执行sql,可能存在结果,查看返回结果。//3、连接成功,数据库对象 connection代表数据库。//4、执行sql的对象 statement。//2、用户信息和url。3、获取执行sql对象statement。//我的第一个JDBC程序。1、创建一个普通项目。4、获得返回的结果集。
2024-07-19 17:42:18
623
原创 【数据表的类型】
.MYD 数据文件(data)*.frm 表结构的定义文件。设置数据库表的字符集编码。在物理空间存在的位置。*.MYI 索引文件。
2024-07-17 09:05:02
401
原创 【操作数据库】
pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',`字段名` 列类型 [属性] [索引] [注释],`字段名` 列类型 [属性] [索引] [注释],`字段名` 列类型 [属性] [索引] [注释],
2024-07-16 17:56:02
465
原创 【初识MySQL】
update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost' -- 修改用户密码。-- 创建一个名为westos的数据库。-- 显示数据库中所有的表的信息。mysql -u root -p123456 --连接数据库。-- 查看所有的数据库。-- 查看数据库中所有的表。-- 单行注释(SQL本来的注释)-- 所有的语句都使用;
2024-07-16 15:34:58
197
原创 【ConcurrentHashMap】
从结构上说,1.7版本的ConcurrentHashMap采用分段锁机制,里面包含一个Segment 数组,Segment继承于ReentrantLock,Segment则包含HashEntry的数组,HashEntry本身就是一个链表的结构,具有保存key、value的能力能指向下一个节点的指针。线程安全实现方式:HashTable采用的是方法级的锁,每次只允许一个线程进行操作,其他线程必须等待当前线程操作完成后才能操作,这种方式虽然能保证线程安全,但效率不高。
2024-07-14 16:52:57
360
转载 【Java面试八股文】
A收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,并将该数据包发送给B,B检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,A和B进入ESTABLISHED状态,完成三次握手。写操作时,先将容器复制一份,再在新的副本上执行写操作,此时写操作是上锁的。而实际的业务中,我们通常的需求是,若两个不同的对象它们的内容是相同的,就认为它们相等。出现这种情况的原因,可能是业务层误将缓存和库中的数据删除了,也可能是有人恶意攻击,专门访问库中不存在的数据。
2024-07-13 07:40:37
46
原创 Leetcode--1
*给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。输入:nums = [2,7,11,15], target = 9。输入:nums = [3,2,4], target = 6。输入:nums = [3,3], target = 6。
2024-07-10 22:16:35
480
原创 【注解与反射--3】
动态创建对象执行方法package reflection;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;//通过反射动态创建对象public class Test08 { public static void main(S
2024-07-10 13:41:40
1455
原创 【注解和反射--2】
/.getDeclaredFields()可以找到全部的属性,而.getFields()只能找到public的属性。//获得本类及其父类的全部public方法。System.out.println("这个人是:"+person.name);System.out.println("Main类被加载");//获取扩展类加载器的父类加载器-->根加载器(c/c++)
2024-07-10 12:07:14
1641
原创 【注解和反射--1】
//测试元注解//定义一个注解//Target表示我们的注解可以用在哪些地方//Retention表示我们的注解在什么地方才有效//Documented 表示是否将我们的注解生成在Javadoc中//Inherited表示子类可以继承父类的注解@Inherited//自定义注解//注解可以显示赋值,如果没有默认值,我们就必须给注释赋值@MyAnnotation2(name = "lxy",school = {"清华大学","北京大学"})。
2024-07-10 09:15:35
633
原创 【管程法、信号灯法、线程池初步】
System.out.println("消费了-->"+container.pop().id+"只鸡");System.out.println("生产了"+i+"只鸡");System.out.println("演员表演了"+voice);System.out.println("观看了"+voice);//如果容器满了,就需要等待消费者消费。//等待生产者生产,消费者等待。//通知消费者消费,生产等待。//吃完了,通知消费者生产。//可以通知消费者消费了。//生产者、消费者、产品、缓冲区。
2024-07-09 20:44:52
802
原创 【Lock锁】
//测试lock锁//定义lock锁 ReentrantLock可重入锁@Overridetry {//加锁try {} else {break;//解锁。
2024-07-09 17:54:12
297
原创 【死锁及案例】
System.out.println(this.girlName+"获得口红的锁");System.out.println(this.girlName+"获得镜子的锁");System.out.println(this.girlName+"获得镜子的锁");System.out.println(this.girlName+"获得口红的锁");//需要的资源只有一份,用static来保证只有一份。//化妆,互相持有对方的锁,需要拿到对方的资源。//一秒钟后想获得镜子。//一秒钟后想获得口红。
2024-07-09 16:39:47
337
原创 【线程同步-2】
//不安全的买票//线程不安全,有负数//票@Override//买票buy();//synchronized 同步方法,锁的是this//判断是否有票flag=false;return;//模拟延时try {//买票System.out.println(Thread.currentThread().getName()+"拿到第"+ticketNums--+"张票");
2024-07-09 15:44:39
769
原创 【线程同步-1】
//不安全的取钱//两个人去银行取钱,账户//账户Account account = new Account(100,"基金");Drawing you = new Drawing(account,50,"你");//账户int money;//余额//卡名//银行;模拟取款//账户//取了多少钱//现在手里有多少钱//取钱@Override//判断有没有钱。
2024-07-09 11:19:42
795
原创 【守护(daemon)线程】
/默认是false表示用户线程,正常的线程都是用户线程。System.out.println("你一生都开心的活着");//你 用户线程启动。System.out.println("上帝保佑着你");//上帝守护线程启动。
2024-07-09 09:16:40
297
原创 【线程状态-2】
System.out.println(Thread.currentThread().getName()+"线程开始执行");System.out.println(Thread.currentThread().getName()+"线程停止执行");System.out.println("线程VIP来了"+i);System.out.println("主线程"+i);//只要线程不终止,就一直输出状态。//lambda表达式。//观察测试线程的状态。
2024-07-08 14:43:10
980
原创 【线程状态--1】
System.out.println(Thread.currentThread().getName()+"-->拿到了第"+tiketNums--+"张票");//获取系统当前时间。new Thread(ticket,"黄牛党").start();new Thread(ticket,"小明").start();//2、建议使用标志位--->设置一个标志位。
2024-07-08 11:14:31
609
原创 【Lambda表达式】
本期介绍了lambda表达式针对无参数和有参数两种情况的表达,并且介绍了lambda表达式的简化方法,包括去掉参数类型、圆括号、花括号,但是lambda表达式简化也有一些条件(见代码注释)。
2024-07-08 09:46:44
562
原创 【静态代理案例-婚庆公司】
System.out.println("老师要结婚了,超开心");System.out.println("结婚前,布置现场");System.out.println("结婚之后,收尾款");代理对象可以做很多真实对象做不了的事情。真实对象和代理对象要实现同一接口。真实对象专注做自己的事情。代理对象要代理真实角色。//代理角色,帮助你结婚。//真实角色,你去结婚。
2024-07-08 08:35:42
396
原创 【初识并发--两个案例】
System.out.println(Thread.currentThread().getName()+"-->拿到了第"+tiketNums--+"张票");System.out.println(Thread.currentThread().getName()+"-->跑了"+i+"步");if (Thread.currentThread().getName().equals("兔子")&&i%10==0){//判断比赛是否结束。//已经存在胜利者了。//判断是否有胜利者。//判断是否完成比赛。
2024-07-07 17:40:09
944
原创 【初始线程、进程、多线程】
/创建线程方式2:实现runnable接口,重写run方法,执行线程需要丢入runnable接口实现类,并调用start方法。System.out.println("我在学习多线程-----"+i);System.out.println("我在学习多线程-----"+i);System.out.println("我在看代码-----"+i);//创建线程方式1 继承Thread类,重写run方法,调用start开启线程。//总结:注意,线程开启不一定立即执行,由cpu调度执行。//main线程,主线程。
2024-07-07 14:44:31
355
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人