- 博客(82)
- 收藏
- 关注
原创 垃圾回收学习
1、强引用当没有任何对象跟其有引用时,就会被垃圾回收机制回收2、软引用无强引用引用时,发生垃圾回收后,且发现内存仍然不足,就会被垃圾回收机制回收3、弱引用无强引用引用时,发生垃圾回收,不管内存是否充足,都会被回收掉4、虚引用必须配合引用队列使用,虚拟引用引用的对象被垃圾回收时,虚引用自己就会放入引用队列,而间接的用线程调用虚拟引用对象的方法,调用Unsafe.greeMemory去释放直接内存5、终结器引用。
2025-03-25 15:31:29
558
原创 Java内存模型与JVM内存分区
可以想象成米饭,米饭一般只是自己吃且米饭是基础食物;所以栈是线程私有,且是基础类型。解决多线程并发的内存可见性、原子性、有序性问题,确保线程间正常通信。Java语言规范定义的多线程环境下内存访问的规则和约束的一种规范。当一个线程修改共享变量的值,其他线程需要能立刻得知这个修改。定义Java程序在运行时如何分配、使用和回收内存。那么堆就是线程共有,存放对象。JVM在运行Java程序时对物理内存的。,用来确保java程序正常运行。计算当前线程运行到了那个位置。存放一些运行时常量、类信息。
2025-03-20 10:27:55
232
原创 类加载机制
当一个Java类被编译成class之后,将其称为A,A引用了B,在其编译阶段的,其并不知道B是否被编译加载,所以A并不知道B的实际地址,此时A中使用字符串S来代表B的地址,S也就是符号引用。当A运行时,若A发生了类加载,到解析阶段发现B未被加载,此时B就触发类加载,会被加载到虚拟机中,此时A中B的符号引用就会被替换成B的实际地址,被称为直接引用。对class静态结构进行语法和语义上的分析,保证其不会产生危害虚拟机的行为。Java通过后期的绑定的方式来实现多态,而后期绑定的实现就是通过动态解析。
2025-03-19 11:00:01
215
原创 SpringCloud基础学习
引入依赖在order-service的启动类添加注解并开启Feign的功能编写Feign客户端主要是基于SpringMVC的注解来声明远程调用信息。
2025-03-02 14:45:20
573
原创 Linux学习
sync #将数据由内存同步到硬盘中shotdown #关机reboot #重启halt #关闭系统ls /一切皆文件根目录/,所有etc:这个目录里用来存放所有的系统管理所需要的配置文件和子目录home:用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录都是以用户的账号命名的opt:这是给主机额外安装所摆放的目录。如安装一个Oracle数据库就可以放到这个目录下,默认是空的root:该目录为系统管理员,也被称作超级权限者的用户主目录。
2025-03-02 14:43:38
610
原创 Vue-day2
/result代表服务器响应的所有数据,包含了响应头,响应体,result.data代表的是接口响应的核心数据。//result代表服务器响应的所有数据,包含了响应头,响应体,result.data代表的是接口响应的核心数据。//声明响应式变量,一般把数据定义为响应式数据。console.log('Vue挂载完毕,发送请求获取数据')onMounted(()=>{ //声明钩子函数。在页面加载完毕时,发送异步请求,加载数据,渲染页面。//调用ref函数,定义响应式数据。--引入Axios文件-->
2025-01-26 19:56:03
1165
原创 Vue-Day1
</div>-- 引入vue模块 -->// 创建vue的应用实例</script></body>构建用户界面准备数据用插值表达式渲染<body><h1>{</div>-- 引入vue模块 -->// 创建vue的应用实例data(){return{// 定义数据</script>
2025-01-23 15:02:00
1125
原创 SpringBoot-Day1
AutoConfiguration //表示当前类是一个自动配置类@Bean@Bean//扫描的包:启动类所在的包及其子包//扫描的注解步骤创建 dmybatis-spring-boot-autoconfigure 模块,提供自动配置功能,并自定义配置文件 META-INF/spring/xxx.imports创建 dmybatis-spring-boot-starter 模块,在starter中引入自动配置模块。
2025-01-13 21:41:04
1009
原创 SpringMVC-Day1
springMVC是一种基于Java实现MVC模型的轻量级Web框架优点:使用简单,开发便捷(相较于Servelt)灵活性强使用SpringMVC技术开发web程序流程创建web工程(Maven结构)设置tomcat服务器,加载web工程(tomcat插件)导入坐标(SpringMVC+Servlet)定义处理请求的功能类(UserController)设置请求映射(配置映射关系)将SpringMVC设定加载到Tomcat容器中SpringMVC入门案例。
2024-11-23 15:18:12
1928
原创 Mybatis-Day3
定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下设置SQL映射我呢见的namespace属性为Mapper接口的全限定名在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致编码:通过SqlSession的getMapper方法获取Mapper接口的代理对象调用对应方法完成sql的执行<mappers></mappers></sql></select></select>
2024-11-22 16:52:33
1015
2
原创 MyBatis-Day2
System.out.println("插入成功");--namesapce=绑定一个对应的Dao/Mapper接口-->//第一步:获取sqlSession对象。id:就是对应的 namespace 中的方法名。-- 对象中的属性可以直接取出来-->resultType:Sql语句执行的返回值。//关闭sqlSession。//方式一:执行SQL。parameterType:参数类型。//insert一个用户。//增删改需要提交事务。//根据id查询用户。
2024-11-18 19:57:15
874
原创 Mybatis-Day1
Mybatis是一款优秀的持久层框架它支持定制化SQL、存储过程以及高级映射MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获得结果集MyBatis可以使用简单的XML或注解来配置和映射原生类型、接口和Java的POJO为数据库中的记录MyBatis本是apache的一个开源项目iBatis如何获得Mybatis?
2024-11-13 20:12:46
582
原创 Spring-Day7
AOP意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术,AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生泛型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。即是,与我们业务逻辑无关的,但是我们需要关注的部分,就是横切关注点。System.out.println("方法用时:" + (start - end) + "ms");
2024-11-07 20:38:37
813
原创 Spring-Day6
System.out.println("执行了" + msg + "方法");//设置要代理的角色。一个真实角色就会产生一个代理角色,代码量会翻倍,开发效率变低。动态代理分为两大类:基于接口的动态代理,基于类的动态代理。动态代理类是动态生成的,不是我们直接写的。java字节码实现---javasist。公共也就交给代理角色,实现了业务的分工。//处理代理实例,并返回结果。//代理角色,不存在。基于接口---JDK动态代理。//用这个类,自动生成代理类。动态代理和静态代理角色一样。基于类---cglib。
2024-11-06 19:49:36
364
原创 Spring-Day5
/如果完全使用了配置类去做,我们就只能通过 AnnotationConfig 上来文来获取容器,通过配置类的class对象加载。//相当于<bean id="user" class="com.itheima.pojo.User"/>//就是返回要注册刀bean的对象。//这个方法的返回值,就相当于bean标签中的class属性。//注册一个bean,就相当于我们之前写的一个bean标签。//注解扫描,指定需要扫描的包,这个包下的注解就会生效。//这个方法的名字,就相当于bean标签中的id属性。
2024-11-05 18:19:49
914
原创 Spring-Day4
/将xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"修改为。//获取ApplicationContext:拿到Spring 的容器。也可以,它会先查找名字,没有对应名字再去找对应的类型,也可以加个name属性来指定。//然后复制后两行,把beans改成context即可,aop导入也是如此。//我们的对象都在Spring中管理了,要使用去里面取。
2024-11-04 19:27:27
683
原创 Spring-Day3
如果有必要可以两者同时使用,使用构造器注入完成强制依赖的注入,用setter注入完成可依赖的注入。使用按名称装配时必须保障容器中具有指定名称的bean,因变量名与配置耦合,不推荐使用。配置中使用 constructor-arg 标签 type 属性设置按形参类型注入。配置中使用 constructor-arg 标签 ref 属性注入引用类型对象。强制依赖使用构造器,setter注入有概率不进行注入导致null对象出现。自动装配优先级低于setter注入与构造器注入,同时出现时,自动装配失效。
2024-10-28 19:02:53
859
1
原创 Spring-Day2
/注意,此class造出来的对象是FacotryBean接口中的getObject()造出来的对象。:spring创建的bean默认是单例的,想要非单例的,可以将bean中的scope换成property。Q:为什么bean默认单例:若为非单例,则bean会无穷多,容器压力大,单例可以复用,效率高。单例可以提高效率,例如在表现层、业务层、数据层和工具对象,但是封装实体的域对象不适合。:可以通过name属性,添加多个别名,使用逗号,分号,空格分隔。:id来定义bean名称,class指定bean的类型。
2024-10-27 19:46:13
1035
原创 Spring-Day1
- 1.导入spring的坐标spring-content,对应版本5.2.8.RELEASE-->-- property标签表示配置当前bean的属性-->-- 7.配置service与dao的关系-->-- name属性表示配置哪一个具体的属性-->-- ref属性表示参照哪一个bean-->-- bean标签表示配置bean-->-- id属性表示给bean起名字-->-- 2.配置bean-->
2024-10-26 17:12:20
832
原创 Java高级Day57-剩余内容补充
System.out.println("找到:" + content.substring(matcher.start(),matcher.end()));System.out.println("整体匹配 = " + matcher.matches());System.out.println("找到 " + matcher.group(0));System.out.println("找到=" + matcher.group(0));//1.去掉所有的.
2024-10-24 19:16:20
454
原创 Java高级Day56-正则限定符,定位符和捕获分组
1+ --- 表示匹配多个1(abc)* --- 仅包含任意个abc的字符串,如abc,abcabcm+(abc)* --- 以至少1个m开头,后面接任意个abc的字符串m+abc?--- 以至少1个m开头,后接ab或abc的字符串[abcd]{3} --- 由abcd中字母组成的任意长度为3的字符串[abcd]{3,} --- 由abcd中字母组成的任意长度不小于3的字符串[abcd]{3,5} --- 由abcd中字母组成的任意长度不小于3且不大于5的字符串。
2024-10-21 16:50:35
323
原创 Java高级Day55-正则表达式字符匹配
-- 包含3个或4个数字的字符串,{3}表示\\d出现3次,?a..b --- 以a开头,b结尾,中间包括2个字符的长度为4的字符串,单个点表示除\n外的任何字符。\\W+\\d{2} --- 以至少1个非数字字母字符开头,2个数字字符结尾的字符串。\\d{3}\{4} --- 以3个数字字符开头的长度为7的数字字母字符串。\\D(\\d)* --- 以单个非数字字符开头,后接任意个数字字符串。\\w 匹配任意英文字符、数字和下划线,相当于[a-zA-Z0-9]
2024-10-19 19:55:36
537
原创 Java高级Day54-正则表达式底层实现
一个正则表达式,就是用某种模式去匹配字符串的一个公式//目标:匹配所有四个数组//1、\\d表示一个任意的数字//2.创建模式对象//3.创建匹配器//说明:创建匹配器matcher,按照正则表达式的规则去匹配 content字符串//4.开始匹配/*** matcher.find() 完成的任务 (考虑分组)* 什么是分组,比如(\d\d)(\d\d),小括号就是分组* 1.根据指定的规则,定位满足条件的子字符串(比如1998)
2024-10-18 20:24:23
1703
原创 Java高级Day53-满汉楼项目
orderTel=?System.out.println("==========登陆成功["+employee.getName()+"]==========\n");,now(),'未结账')",System.out.println("==========满汉楼(二级菜单)==========");System.out.println("==========登陆失败==========");System.out.println("==========该餐桌不可预定==========");
2024-10-17 21:23:14
655
原创 Java高级Day52-BasicDAO
","张无忌","男","2000-1-1","111");这样的通用类,称为 BasicDao,是专门和数据库交互的,即完成对数据库(表)的crud操作。System.out.println("===查询单行单列值===");System.out.println("===查询单行结果===");System.out.println("===查询结果===");//返回多个对象(即查询的结果是多行的),针对任意表。//开发通用的dml发明合法,针对任意的表。//查询单行单列的方法,返回单值的方法。
2024-09-28 22:27:31
955
原创 Java高级Day51-apacheDBUtils
commons-dbutils 是 Apache 组织提供的一个开源JDBC工具类库,它是对JJDBC的封装,使用dbutils能极大简化jdbc编码的工作量QueryRunner类:该类封装了SQL的执行,是线程安全的。可以实现增删改查和批处理使用QueryRunner类实现查询ResultSetHandler接口:该接口用于处理 java.sql.ResultSet,将数据按要求转换为另一种形式ArrayHandler:把结果集种的第一行数据转成对象数组。
2024-09-26 22:47:16
718
原创 Java高级Day50-连接池
传统的JDBC数据库连接使用DriverManager来获取,每次向数据库建立连接的时候都要将Connection加载到内存中,再验证IP地址,用户名和密码。需要数据库连接的时候,就向数据库请求一个,频繁的进行数据库连接操作将占用很多的系统资源,容易导致服务器崩溃。每一次数据库连接,使用完后都得断开,如果程序出现异常而未能关闭,将导致数据库内存泄漏,最终导致重启数据库。传统获取连接的方式,不能控制创建的连接数量,如连接过多,也可能导致内存泄漏,MySQL崩溃。
2024-09-24 22:20:51
407
原创 Java高级Day49-事务和批量处理
JDBC程序中当一个Connection对象创建时,默认情况下是自动提交事务:每次执行一个SQL语句时,如果执行成功,就会向数据库自动提交,而不能回滚JDBC程序中为了让多个SQL语句作为一个整体执行,需要使用事务调用Connection的setAutoCommit(false)可以取消自动提交事务在所有的SQL语句都成功执行后,调用 Conncetion 的 commit();方法提交事务在其某个操作失败或出现异常时,调用 Conncetion 的 rollback();方法回滚事务。
2024-09-22 22:03:30
874
原创 Java高级Day48-JDBC-API和JDBC-Utils
/2.这时调用者可以选择捕获该异常 或 默认处理,比较方便。//演示如果使用JDBCUtils工具类,完成dml 和 select。//顶柜相关的属性(4个),因为只需要一份,因此做成static。//3.创建PreparedStatement 对象。//这是一个工具类,完成mysql的连接和关闭资源。//1.将编译异常转成 运行异常。//在实际开发中,可以如下处理。//连接数据库,返回Connection。//读取相关的属性值。//在static代码块去初始化。//2.组织一个sql。
2024-09-21 20:42:24
977
原创 Java高级Day47-Statement
Statement对象用于执行静态SQL语句并返回其生成的结果的对象在连接建立后,需要对数据库进行访问,执行命名或是SQL语句,可以通过Statement【存在SQL注入】,PreparedStatement【预处理】,CallableStatement【存储过程】Statement对象执行SQL语句,存在SQL注入风险SQL注入是利用某些系统没有对用户输入的数据进行充分的检查,而在用户输入数据中注入非法的SQL语句段或命令,恶意攻击数据库。
2024-09-20 23:26:06
1104
原创 Java高级Day46-数据库连接方式和ResultSet底层
表示数据库结果集的数据表,通常通过执行查询数据库的语句生产ResultSet对象保持一个光标指向其当前的数据行,最初,光标位于第一行之前next方法将光标移动到下一行,并且由于在ResultSet对象中没有更多行时返回false,因此可以在while循环中使用循环来遍历结果集//通过Properties对象获取配置文件的信息//1.注册驱动//2.得到连接//3.得到Statement//4.组织sql//执行给定的SQL语句,该语句返回单个ResultSet对象。
2024-09-19 16:20:37
919
原创 Java高级Day45-JDBC入门
JDBC为访问不同的数据库提供了统一的接口,为使用者屏蔽了细节问题Java程序员使用JDBC,可以连接任何提供了JDBC驱动程序的数据库系统,从而完成对数据库的各种操作规定一套接口规范,让不同的数据库厂商实现,在java程序中统计调用接口的方法即可。
2024-09-18 21:17:14
943
原创 Java高级Day44-反射暴破
/3.创建PrivateTest的类,利用Class类得到私有的name属性,修改私有的name属性,并调用getName()的方法打印name属性值。System.out.println("reVal的运行类型是=" + reVal.getClass());System.out.println(say.invoke(null, 200, "李四", '女'));//o 的运行类型是Student。System.out.println(say.invoke(o, 100, "张三", '男'));
2024-09-17 23:16:47
1109
原创 Java高级Day43-类加载
虚拟机会包装一个类的< client >()方法在多线程环境中被正确的加锁,同步,如果多个线程同时区初始化一个类,那么只会有一个线程去执行这个类的< client >()方法,其他线程都需要阻塞等待,知道活动线程执行< client >()方法完毕。JVM会在该阶段对静态变量,分配内存并默认初始化(对应数据类型的默认初始值,如0,0L,null,false等)这些变量所使用的内存都将在方法区中进行分配。到初始化阶段,才真正开始执行类中定义的Java程序代码,此阶段是执行< client >()方法的过程。
2024-09-16 17:20:25
1144
原创 Java高级Day42-Class类
Class也是类,因此也继承ObjectClass类对象不是new出来的,而是系统创建的//Class类对象不是new出来的,而是系统创建的//(1)传统new对象//(2) 反射方式,刚才没有debug到 ClassLoader类的 loadClass,原因是没有注销Cat cat = new Cat();// 仍然是通过 ClassLoader类加载Cat类的 Class对象对于某个类的Class类对象,在内存中只有一份,因为类只加载一次。
2024-09-15 19:35:00
1007
原创 Java高级Day41-反射入门
/(3) 通过 cls 得到你加载的类 com.reflection.question.Cat 的 mothName 的方法对象。//传统写法 对象.成员变量 , 反射:成员变量对象.get(对象)//(2) 通过cls 得到你加载的类 com.reflection.question.Cat 的对象实例。System.out.println("o的运行类型=" + o.getClass());//传统方法 对象.方法() , 反射机制 方法.invok(对象)
2024-09-14 20:58:40
905
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅