- 博客(37)
- 收藏
- 关注
原创 JVM基础知识(上)
类加载器(ClassLoader)是Java虚拟机提供给应用程序去实现获取类和接口字节码数据的技术,类加载器只参与加载过程中的字节码获取并加载到内存这一部分。类加载器会通过二进制流的方式获取到字节码文件的内容,接下来将获取到的数据交给Java虚拟机,虚拟机会在方法区和堆上生成对应的对象保存字节码信息。
2026-03-22 11:28:01
500
原创 环形子数组的最大和
形式上,对于子数组 nums[i], nums[i + 1], …对于第二种情况,即环形数组的最大子数组和为 nums[0:i] 和 nums[j:n],我们可以找到普通数组最小的子数组 nums[i:j] 即可。形式上, nums[i] 的下一个元素是 nums[(i + 1) % n] , nums[i] 的前一个元素是 nums[(i - 1 + n) % n]。构成最大子数组和的子数组为 nums[i:j],包括 nums[i] 到 nums[j−1] 共 j−i 个元素,其中 0≤i<j≤n。
2025-12-15 14:34:26
937
原创 最小滑动窗口
比如数组当中2 + 3 + 1 + 2之和才大于7,此时子数组的长度为4,将头部2删除,尾部向后移动,加上4,此时子串和是大于7的,删除头部,直到子数组的和小于7,此时子数组为2 4,尾部后移加上3,子数组和大于7,删除头部,此时子数组就剩4 和 3,也就是我们最终要的答案,最小长度的子数组。滑动窗口算法是一种用于解决数组或者列表中子数组或者字串问题的方法,通常用于在给定数据上执行连续区间的操作,算法基本思想是维护一个固定大小或不定大小的窗口,通过移动窗口的起始位置和结束位置来遍历整个数据。
2025-12-08 16:04:58
200
原创 【算法】前缀和
前缀和是一段序列里面前n项和。例如,给定一个一维数组a,它的前缀和s[i]表示第1个元素到第i个元素的总和。也就是s[i]=a[1]+a[2]+a[3]+…+a[i-1]+a[i]1.2 计算方法。
2025-11-17 15:49:55
254
原创 多种二分查找
java中直接用Arrays类下的binarySearch方法进行查找,如果找到了返回目标的索引,没找到返回-(插入位置索引+1)**此时j表示边界,j指向的并不是查找目标,故循环条件为i<j,且j=m。改进之前二分查找左边和右边所用时间不一样的情况。
2025-10-12 22:16:38
295
原创 ArrayList源码分析
有参构造(传入集合),构造一个含指定集合的元素的列表,会根据集合类型决定是否拷贝数组,初始化 elementData 和 size,空集合时使用 EMPTY_ELEMENTDATA。无参构造,使用了共享的空数组常量 DEFAULTCAPACITY_EMPTY_ELEMENTDATA,表示当前是空的,但未来会扩容到默认容量(如 10)。有参构造(传入容量),构造具有指定初始容量的空列表,如果传入的参数<0,抛出异常。在添加第一个元素的时候,默认数组长度为10,如果长度不够,则扩容到1.5倍。
2025-09-28 11:51:52
462
原创 @Autowired 和 @Resource的区别
在 Spring 框架中, @Autowired 和 @Resource 都是⽤于依赖注⼊(DI)的注解,但它们的来源、注⼊逻辑和使⽤场景存在明显差异。以下是两者的核⼼区别:@Autowired 属于 Spring 框架原⽣注解,位于org.springframework.beans.factory.annotati on.Autowired 包下。依赖 Spring框架,只能在 Spring 容器环境中使⽤。@Resource 属于 JSR-250(Java EE 标准)注解,位于。
2025-06-16 12:14:31
316
原创 redis基础知识
redis的SortedSet是一个可排序的set集合,与Java中的TreeSet类似,但底层数据结构却差别很大,sortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表加hash表。Redis的set结构与Java中的Hash Set类似,可以看做是一个value为NULL的Hash Map,因为具备与Hash Set类似的特征。Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构。支持主从集群、分片集群。
2025-06-08 11:44:44
337
原创 常见注解汇总
Resource等价于@Autowired+@Qualifier @Value 注入配置文件中的值(如@Value(“¥{app.name}”)@RestController @Controller+@ResponseBody的组合,返回JSON/XML。@Component 通用组件注解,被Spring自动扫描并注册为Bean。@Qualifier 当有多个候选的Bean时,指定具体的Bean的名称。@Bean 定义Bean,相当于XML中的标签。@Service 服务层组件注解,功能同。
2025-06-02 22:20:36
274
原创 java拦截器
拦截器(Interceptor)是一种面向切面编程(AOP)的实现方式,用于在方法执行前后插入自定义逻辑。它允许你在不修改目标代码的情况下增强功能,常用于日志记录、权限验证、事务管理等场景。
2025-05-25 17:07:12
184
原创 动态sql
(3) foreach 标签 功能:循环遍历集合参数,拼接多个值。否则,拼接 IN (NULL)(需注意:IN (NULL) 实际等效于。会自动将其转换为预编译语句(PreparedStatement)的参数,防止 SQL 注入。定义:返回两表的笛卡尔积(所有可能的行组合),结果行数为两表行数的乘积。定义:对同一个表进行连接,用于处理表内自关联数据(如员工和上级的关系)。返回左表的所有行,右表中匹配的行,若右表无匹配则补 NULL。返回右表的所有行,左表中匹配的行,若左表无匹配则补 NULL。
2025-05-18 11:48:05
310
原创 Java 抽象类与内部类:核心概念与使用场景
定义 抽象类是一种不能被实例化的类,它通常包含抽象方法。抽象方法是只有方法声明而没有方法体的方法,用 abstract关键字修饰。特点抽象类可以包含抽象方法,也可以包含非抽象方法。非抽象方法有方法体,而抽象方法必须在抽象类中,且子类必须实现(除非子类也是抽象类)。抽象类不能被实例化,即不能使用 new 关键字创建对象。抽象类可以有构造方法,虽然不能实例化抽象类,但在子类实例化时会调用抽象类的构造方法。
2025-05-11 17:20:51
425
原创 Swagger
Swagger Specification(OpenAPI Specification):是一个描述 API 的标准格式,它使用 JSON 或 YAML 来定义 API 的各个方面,包括路径、操作、参数、请求体、响应体等。可以通过在代码中添加注释的方式,使用相关的 Swagger 注解来描述 API,也可以直接编写 JSON 或 YAML 格式的 API 定义文件。API 文档生成:Swagger 可以根据代码中的注释或特定的配置,自动生成详细的 API 文档。
2025-04-27 16:48:10
337
原创 分层开发介绍
在项目实际开发过程中,会将整个项目从上到下划分为界面层、业务逻辑层、数据层。2、可以很容易的用新的实现来替换原有层次的实现;1、开发人员可以只关注整个结构中的其中某一层;三层开发是项目开发实践中典型的开发模式。3、可以降低层与层之间的依赖;目的:实现高内聚、低耦合。3、有时会导致级联的修改。3.各个层之间的调用关系。4、利于各层逻辑的复用。2、增加了程序的复杂度。4.分层开发的优缺点。1、降低了系统的性能。
2025-04-20 10:50:33
198
原创 Spring框架
DI:IoC 的具体实现方式,通过构造函数、setter 方法等方式将依赖对象注入到目标对象中。参数映射:将 Java 对象的属性映射到 SQL 语句的参数中。开发框架,核心特性为依赖注入(DI)和面向切面编程(AOP),主要负责对象的创建、管理和对象之间的依赖关系。一级缓存:基于 SqlSession 的缓存,同一个 SqlSession 中多次执行相同的 SQL 语句,会从缓存中获取结果。读取配置文件来构建。SqlSession:是 MyBatis 的核心对象,用于执行 SQL 语句、管理事务等。
2025-04-13 10:37:47
970
原创 常用算法及代码实现(下)
常见算法:最短路径(Dijkstra、Floyd)、最小生成树(Kruskal、Prim)。适用场景:背包问题、最长公共子序列、最长递增子序列等。适用场景:区间调度、活动选择、最小生成树等。适用场景:快速排序、归并排序、最近点对问题。适用场景:大指数计算(如模意义下的幂运算)。
2025-04-06 11:44:27
257
原创 常用算法及代码实现(上)
快速排序(手写或Arrays.sort())直接遍历所有可能解,适合数据量小的情况。适用于排列组合、路径探索问题。解决最短路径、最序遍历问题。
2025-03-30 19:25:27
260
原创 操作字符串 数组常用方法
toCharArray() 是 String 类的一个方法,作用是将字符串转换为一个新的字符数组(char[]),其中数组的每个元素对应字符串中的一个字符。混合使用 next() 和 nextLine() 时,next() 可能会留下换行符在输入流中,导致 nextLine() 读取到空字符串。若数组是对象类型(如 Integer[]、String[]),可以直接使用 Arrays.sort() 并传入一个逆序的比较器。若数组是基本类型(如 int[]、double[]),需要先升序排序,再手动反转数组。
2025-03-23 09:10:47
230
原创 JSP介绍
JSP:Java服务端页面,一种动态网页技术,可以定义Java代码的动态内容JSP快速入门导入JSP坐标创建JSP文件编写HTML标签和Java代码 JSP本质上就是一个Servlet jsp的特点 JSP 具有 Servlet 的所有优点,例如 JSP 文件跨平台,即一次编写,处处运行。JSP 比 CGI 性能更加优越,因为 JSP 可以直接在 HTML 中嵌入标签,而 CGI需要单独引用 CGI 文件。JSP 比 Servlet 更易于维护,JSP 将业务逻辑与网页设计分离,使其更加灵活。
2025-03-16 08:12:49
468
原创 JDBC知识点
2.管理事务 Statement作用 执行sql语句 执行DML语句可以通过判断返回值是否大于零判断是否执行成功 执行DDL执行成功也可能返回0。JDBC操作关系型数据库的一套API 本质上是定义的所有关系类型数据库的规则,即接口,所有厂商去实现这个接口,提供数据库驱动jar包。创建一个空工程,然后配置,之后创建一个模块,并在模块下创建一个单独的文件夹用来存储驱动jar包,设置jar包的有效范围为全局有效。释放资源时先开的后释放,后开的先释放。1.获取执行SQL的对象。JDBC的配置注意事项。
2025-03-09 11:45:23
160
原创 DQL查询语法
select 字段列表 from 表名查询 where 条件列表 group by 分组字段 having 分组后条件 order by 排序字段 limit 分页限定 基础查询 查询多个字段 select 字段列表 from 表名;sum(列名) 求和 avg(列名) 平均值 语法:select 聚合函数名(列名)from 表;count(列名) 统计数量(一般选用不为null的列)取值:1.主键(非空且唯一)2.*2.* max(列名) 最大值 min(列名) 最小值。
2025-03-02 23:01:06
196
原创 DDL基本操作
SQL语句:一门操作关系型数据库的编程语言,定义操作所有关系型数据库的统一标准 通用语法: SQL语句可以单行或多行书写,以分号结尾SQL语句可以使用空格/缩进来增强语句的可读性 MySQL数据库的SQL语句不区分大小写 注释:单行注释:-- 注释内容 或 #注释内容(MySQL特有) 多行注释:/注释内容。
2025-02-23 16:26:07
465
原创 string和stringbuffer和stringbuilder
这种特性被称为“不可变性”。与StringBuffer类不同的是,StringBuilder类的实现不是线程安全的,因此在单线程环境下,StringBuilder类的性能比StringBuffer类更高。在上面的代码中,第一行创建了一个String对象,第二行对该对象进行了修改,实际上是创建了一个新的String对象,并将其赋值给str变量。String类是不可变的,每次对String对象进行修改都会创建一个新的String对象,因此在需要对字符串进行大量修改的场景下,使用String类会产生很多的开销。
2024-12-15 11:41:12
1659
原创 字节流与字符流
read()方法的细节:在读取之后,方法的底层还会解码并转成十进制,最终把这个十进制作为返回值,这个十进制上的数字也表示在字符集上的数。在输入时,先判断缓冲区里面有没有数据,如果没有数据,先把内存中的数据加载到缓冲区,尽可能把缓冲区填满,以后的读写都先读取缓冲区中的数据。在输出时,数据先保存在缓冲区中,缓冲区存满时,会自动保存到目的地,如果缓冲区没有存满,要手动刷新。特点:输入流:一次读一个字节,遇到中文时,一次读多个字节。一个中文占两个字节,二进制高位字节的第一位是1。1.创建字节输出流的对象。
2024-12-08 22:23:31
186
原创 第八周学习笔记
throws :写在方法定义处,表示声明一个异常,告诉调用者,使用本方法可能会有哪些异常。throw:写在方法内,结束方法,手动抛出异常对象,交给调用者,方法中下面的代码不再执行。try中没有遇到问题,会把try中所有的代码全部执行,不会执行catch里面的代码。public void 方法()throws 异常名,异常类名2…File对象就表示一个路径,可以是文件的路径,也可以是文件夹的路径。把异常的名称,异常原因及异常出现的位置等信息输出在控制台。这个路径可以是存在的,也允许是不存在的。
2024-12-01 11:10:23
399
原创 第七周学习笔记
经历了高数考试,活人微死,大学生疑似失去了所有的力气与手段。这周小组让选择学习方向,选了后端,希望未来不要秃头啊,不要做秃头程序员啊。
2024-11-24 21:13:00
388
原创 第六周学习笔记
通过元素的class属性值选中一组元素,为元素设置class属性,拥有相同class属性值的元素,我们说他们是一组元素。祖先元素:直接或间接包含后代元素的元素,父元素也是祖先元素,父元素也是祖先元素。后代元素:直接或间接被祖先元素包含的元素,子元素也是后代元素。通过元素的id属性值中唯一的一个元素。选中一个元素后紧挨着的指定的兄弟元素。子元素:直接被父元素包含的元素。兄弟元素:拥有相同父元素的元素。父元素:直接包含子元素的元素。选中指定元素的指定后代元素。选中指定父元素的指定子元素。
2024-11-17 21:38:33
350
原创 第5周学习笔记
把给定的对象在当前集合中删除 ,Collection里面定义的是共性的方法,不能通过索引进行删除,只能通过元素的对象进行删除。判断当前集合是否包含给定的对象 如果集合中存储的是自定义对象,也想通过contains判断是否存在,要重写equals方法。链表:链表中的结点是独立的对象,在内存中是不连续的,每个结点包括数据值和下一个结点的地址。Collection是单列接口的祖宗接口,他的功能是全部单列集合都可以继承使用的。E remove 删除指定索引的元素,返回被删除的元素。
2024-11-10 22:19:55
425
原创 第四周学习笔记
public Big integer(int num,Random rnd) 获取随机大整数,范围[0~2的num次方-1]BigDecimal:用于小数的精确计算,表示很大的小数,也要导包importtjava.math.BigDecimal。long totalMemory() JVM已经从系统中获取总内存的大小(单位byte)C语言的生日1970年1月1日 时间的原点1970年1月1日00:00:00。long maxMemory JVM能从系统中获取总内存的大小(单位byte)
2024-11-03 21:41:00
1741
原创 第二周学习总结
最简单的方法定义和调用格式public static void 方法名(){方法体;调用方法名();带参数的方法的定义与调用格式定义public static void 方法名(参数1,参数二,……){……}调用方法名(参数一,参数二,……);注意:方法在调用时,参数的数量和类型必须跟方法定义中小括号里的变量一一对应形参:是指方法定义中的参数实参:方法调用中的参数带返回值方法的定义和调用定义public static 返回值的类型 方法名(参数){方法体;
2024-10-20 21:47:07
366
原创 学习一周的周记
这周学习了java,有了很多收获,发个周记,记录一下提示:以下是本篇文章正文内容,下面案例可供参考总的来说这一周的收获还是挺大的,通过这一周的学习我认识了字面量 java的8种基本数据类型,知道了如何用Scanner输出。小组的生活使我更加自律,更加明确自己的目标,我感觉这一周的经历很充实,很开心,尤其是写的代码成功运行时内心无比开心😊。字数就到把,这就是我一周的学习内容和生活感悟,我们下周再见🤭。
2024-10-13 22:02:58
601
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅