自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(69)
  • 收藏
  • 关注

原创 图片加载优化(缩略图)

摘要:针对图片加载效率问题,本文提出缩略图优化方案。通过在上传时生成256x256px的缩略图,与图片压缩功能复用相同处理逻辑,使用腾讯云COS的图片处理接口实现。技术实现包括:1)数据库新增thumbnailUrl字段;2)完善数据模型;3)修改上传逻辑,通过COS的PicOperations设置缩略图规则;4)返回缩略图地址。该方案有效降低首页加载流量,提升用户体验。

2025-06-22 15:14:24 259

原创 文件上传优化(图片压缩)

【摘要】图片压缩是优化图库网站的关键,能显著降低带宽成本并提升加载速度。推荐使用Webp格式(比PNG小26%,比JPEG小25%-34%),它具备透明背景支持且浏览器兼容性好,优于新兴的AVIF格式。技术实现上,通过腾讯云COS结合数据万象服务,在上传时自动转换格式为Webp。代码层面,修改上传方法设置处理规则,获取压缩后的图片URL。最终测试显示该方法有效减小了文件体积。(150字)

2025-06-21 17:18:18 342

原创 首页实现多级缓存

本文介绍了图片列表数据缓存的设计与实现方案。采用多级缓存架构,结合Caffeine本地缓存和Redis分布式缓存,提升系统性能。缓存设计包括:1)使用MD5压缩查询条件作为Redis缓存key;2)缓存value存储为JSON格式;3)设置5-60分钟随机过期时间防止雪崩。实现时先查询本地缓存,未命中再查Redis,最后查询数据库,并将结果写入两级缓存。测试表明缓存显著提升访问速度。该方案兼顾了本地缓存的高性能和分布式缓存的一致性,同时具备良好的容错性。

2025-06-21 13:14:15 732

原创 对象存储的使用(COS)

本文介绍了在Java应用中集成腾讯云对象存储(COS)的完整流程。主要包括:1)创建腾讯云账号并获取AccessKey;2)添加COS SDK依赖;3)配置CosClientConfig类管理身份验证和区域信息;4)实现文件上传功能,包含图片校验、临时文件处理和上传结果封装;5)构建CosManager类封装COS的核心API操作。系统支持2M以内的JPEG/JPG/PNG/WEBP格式图片上传,并自动获取图片宽高、大小等元数据。整体方案采用HTTPS协议确保传输安全,同时通过临时文件清理机制优化资源管理。

2025-06-19 16:55:40 367

原创 redis 中的 String 数据结构

String类型在 redis 中最常见的数据类型,是二进制安全的,可以存放字符串、数值、json、图像数据,value最大数据量是 512M二进制安全:Redis 的 string 类型是二进制安全的。所谓二进制安全,是指无论输入的数据是什么字节序列,Redis 都能准确无误地存储和返回,不会因为数据中可能包含特殊字符、编码格式等问题而对数据进行错误处理。主要原因是SDS 的存储不像 C 字符串那样以 ' \0 ' 作为字符串结束的标识。

2025-04-20 12:02:50 830

原创 手撕 简易HashMap

删除 HashMap 里数据的方法,逻辑是,先通过 hashCode() 方法获取 key 的 hash值,然后通过( n - 1) & hash 来得到该键值对存储在数据上的位置。假如插入的位置没有数据,则直接插入,如果有数据,判断其key是否相同,如果相同就覆盖掉,如果不相同,就遍历这个“哈希桶”中的链表,将其 k-v 以链表的方式插入链表的尾部。假如为null,说明没有返回null,如果在数组上则直接删除,并将下一个节点放在数组位置上,若数组没有则需遍历链表寻找。扩容为原来数组的 2 倍。

2025-04-19 21:56:38 362

原创 AOF 与 RDB

目前,redis 的持久化主要应用 AOF(Append Only File) 和 RDB 两大机制。

2025-04-18 10:15:47 838

原创 初识SpringAI(接入硅基流动deepseek)

model: deepseek-ai/DeepSeek-V3 //大模型的名。base-url:我使用的是硅基流动的api。api-key:去硅基流动官网生成你的密钥。

2025-04-11 16:27:51 505

原创 HashMap为什么扩容为原来2倍呢?

由于newCap = oldCap << 1,newCap - 1 比 oldCap - 1 多一个高位1。核心原因:HashMap的所有设计都依赖于数组长度为2的幂次方这一前提。新索引 = e.hash & (newCap - 1)1则索引 = 原索引 + oldCap。

2025-04-10 21:58:15 378

原创 设计模式-单例模式

单例模式(Singleton Pattern)是一种创建型设计模式,其核心目标是确保一个类,并提供全局访问点。

2025-03-28 18:04:18 317

原创 聚簇索引(聚集索引)、非聚簇索引、二级索引(辅助索引)、回表、联合索引(复合索引)、覆盖索引、hash索引、全文索引

在使用二级索引时,由于二级索引存储的是对应字段值和主键值,这时需要查询数据行其他数据,就必须通过主键再次查询获取完整的数据行。如果一个联合索引包含多个列,查询条件必须包含必须包含第一个列的条件,然后是第二个列,以此类推。非聚簇索引叶子节点存储的是对应的字段值和主键值,如果要访问数据行别的数据就得回表查询,一张表可以有多个非聚簇索引,适合快速查找特定列的值。聚簇索引叶子节点存储的是完整数据行,可以访问完整的数据行,每张表只能有一个聚簇索引,一般都是主键索引,适合范围查询和排序。设计,不支持范围查询。

2025-03-27 16:07:46 307

原创 MySQL中B+树索引

因此,三层 B+ 树大致能存储的数据总量为:1170 * 1170 * 16 = 21902400,一颗三层的 B+ 树在 MySQL 中可以存储大约 2000万条记录。B+树是一种自平衡树,每个叶子节点到根节点的路径长度相同,B+ 树在插入和删除节点时会进行分裂和并操作,以保证树的平衡,但它又会有一定的冗余节点。因为叶子节点通过链表链接,从根节点定位到叶子查找到范围的起点之后,只需要顺序扫描链表即可遍历后续的数据,非常高效。,确定数据落在哪个区间,从而确定分支,从上到下最终定位到叶子节点。

2025-03-27 09:48:43 420

原创 MySQL 事务隔离级别

例如,事务 A 查询所有年龄大于 20 岁的用户,得到 10 条数据,在事务 A 未结束时,事务 B 插入了一条年龄大于 20 岁的用户记录并提交,事务 A 再次执行相同的查询时,得到 11 条记录,就好像出现了“幻影”一样。比如,事务 A 第一次读取某条记录的金额为 100,在事务 A 未结束时,事务 B 将该记录的金额更新为 200 并提交,事务 A 再次读取该记录时,金额变为 200,与第一次读取的结果不同。,避免了脏读,但仍可能出现不可重复读和幻读问题。,避免了脏读、不可重复读和幻读问题。

2025-03-24 18:22:22 495

原创 MySQL事务

什么是事务事务是数据库管理系统(DBMS)执行过程中的一个逻辑单位(不可再分割),由一个有限的数据库操作序列构成(多个DML语句,select 语句不包含事务),要么全部成功,要么全部失败。一组有限个操作的集合,要么全部成功,要么全部失败。

2025-03-24 15:44:42 259

原创 苍穹外卖新增员工

总的来说,这段代码的目的是从HTTP请求头中获取一个JWT令牌,校验其有效性,并根据校验结果决定是否放行该请求。这个方法需要两个参数:一个是密钥(用于验证令牌的签名),另一个是待校验的令牌。如果令牌是有效的,并且签名匹配,该方法将返回一个。块,用于尝试执行可能会抛出异常的代码。首先,它记录一条日志,表明开始进行JWT(JSON Web Token)的校验,并打印出待校验的令牌。,具有线程隔离的效果,只有在线程内才能获取到对应的值,线程外则不能访问。对象,其中包含了令牌中的声明(例如,用户的ID、角色等)。

2024-08-29 14:25:23 973

原创 MyBatis 持久层框架-上

MyBatis 是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和Java POJO 为数据库中的记录。MyBatis 的真正强大在于它的语句映射,这是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。

2024-07-21 17:38:03 760

原创 SpringMVC 控制层框架-下

因此,在开发过程中,合理处理异常、避免异常产生、以及对异常进行有效的调试是非常重要的。如果张三负责的模块按照 A 方案处理异常,李四负责的模块按照 B 方案处理异常...各个模块处理异常的思路、代码、命名细节都不一样,那么就会让整个项目非常混乱。在Web 应用三层架构体系中,表述层负责接收浏览器提交的数据,业务逻辑层负责数据的处理。一个网站有 5、6个资源,其中有一个为登录资源,两个无需登录即可访问,另外三个需要登录后才能访问,如果不登录就访问那三个资源,需要拦截,并且提示登录后访问。

2024-07-20 21:56:23 2111

原创 SpringMVC 控制层框架-上

Spring Web MVC 是基于Servlet API构建的原始Web框架,从一开始就包含在Spring Framework 中。在控制层框架经历Srust、WebWork、Strust2等诸多产品的历代更迭之后,目前业界普遍选择了SpringMVC 作为Java EE项目表述层开发的首选方案。Spring 家族原生产品,与IOC容器等基础设施无缝对接表述层各细分领域需要解决的问题全方位覆盖,提供全面解决方案代码清新简洁,大幅度提升开发效率。

2024-07-16 15:35:24 993

原创 Spring企业开发核心框架-下

日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性、异常处理和透明的持续性也都如此,这种散布在各处的无关的代码被称为横切,在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。但是,提前剧透,我们在实际开发中,不需要编写代理代码,我们可以使用SpringAOP框架,它会简化代理的实现!就拿日志功能来说,将其他地方也需要附加日志,那还得再声明更多个静态代理类,那就生产了大量重复代码,日志功能还是分散的,没有统一管理。1)面向切面编程思想AOP。

2024-06-30 16:09:44 925

原创 Spring企业开发核心框架-上

单一架构一个项目,一个工程,导出为一个war包,在一个Tomcat上运行。也叫all in one.单一架构,项目主要应用技术框架为:Spring,SpringMVC,Mybatis等分布式架构一个项目(对应IDEA中的一个 project),拆分成很多个模块,每个模块是一个IDEA中的一个module。每一个工程都是运行在自己的Tomcat上。模块之间可以互相调用。每一个模块内部可以看成是一个单一架构的应用。

2024-06-22 16:42:31 1870

原创 maven

Maven是一款为 Java 项目构建、依赖管理的工具(软件),使用Maven可以自动构建、测试、打包和发布项目,大大提高了开发效率和质量。①依赖管理:②构建项目: ①配置maven_home ②配置path①配置本地仓库地址②配置国内阿里镜像③配置jdk17版本项目构建4、idea配置本地Maven软件

2024-06-18 19:02:44 465

原创 Java_se注解

1、作用:说明:对代码进行说明,生成doc文档☆检查:检查代码是否符合条件 例:@Override☆分析:对代码进行分析,起到了代替配置文件的作用1.定义:public @interface 注解名{2.定义属性:增强注解的作用数据类型 属性名() -> 此属性没有默认值,需要在使用注解的时候为其赋值数据类型 属性名() default 值 -> 此属性没有默认值,如果有需要,也可以二次赋值3.注解中能定义什么数据类型?a.8种基本类型。

2024-05-21 18:59:27 646

原创 Java_se反射

1、反射:是一种解剖class对象的技术2、能解剖出点啥来?a.成员变量 --> 赋值取值b.构造方法 --> new对象c.成员方法 --> 调用执行3、反射的作用:写出来的代码更灵活,通用4、反射是解剖 class 对象的,所以玩反射第一步要干嘛?获取 class 对象5、class对象:class文件对应的对象class类:描述 class 对象的类叫做 class 类。

2024-05-19 09:47:55 338

原创 Thymeleaf

概念:Thymeleaf是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 JSP、Velocity、FreeMaker等,他也可以轻易的与Spring MVC等Web框架进行集成作为Web应用的模板引擎。它的主要作用是在静态页面上渲染显示动态数据。SpringBoot官方推荐使用的视图模板技术,和SpringBoot完美结合不经过服务器运算仍然可以直接查看原始数据,对前端工程师更友好

2024-05-15 20:43:51 974

原创 Tomcat

接收客户端发来的请求响应客服端请求安装配置完后,其结构:bin 命令文件存放的目录(服务器的启动和停止)conf 配置文件存放的目录(server.xml)lib tomcat运行需要的jar包logs 日志文件村存放的目录temp 临时文件。

2024-05-12 17:00:15 828

原创 JDBC技术-1

通俗点说,在Java代码中,使用JDBC提供的方法,可以发送字符串类型的SQL语句到数据库管理软件(Mysql,Oracle等),并且获取语句执行结果!进而实现数据库数据CRUD操作的技术!

2024-05-09 15:37:25 921 1

原创 前端HTML

html>内容语法:通过标签的形式展示。①超文本 图片、音频、视频、普通文本。标签可以嵌套但不能交叉嵌套。无论是双标签还是单标签都必须正确关闭。跟标签(html)有且只能有一个。-- 注释内容 --!标签不区分大小写但建议使用小写。①新建网页文件(后缀为.html的文件)③通过开发工具IDEA。②创建网页的基本结构。

2024-05-06 20:12:35 523 1

原创 XML解析

XML是可扩展标记语言(Extensible Markup Language)可扩展:标签并不止一套(可以扩展)web.xml 有一套标签 servlet servlet-name servlet-class ...约束:由组织去定义,看约束文件如何规定用途异步系统之间进行数据传输的媒介(json代替)配置文件。

2024-05-04 17:31:37 287

原创 初识Servlet

引入Servlet:问题,浏览器可以通过http协议请求web服务器,访问web服务器上的web资源,web资源又分为静态资源和动态资源,静态资源可以直接存储在web服务器上供浏览器访问,动态资源该如何访问呢?Servlet是服务器端的java程序、能够接收HTTP请求、处理HTTP请求、并对HTTP请求进行响应的动态网页技术。Servlet是javaEE(javaWeb)规范的一个重要组成部分。Servlet的作用:接收客户端的HTTP请求(浏览器)根据用户请求进行数据处理。

2024-01-02 10:34:39 452

原创 初识HTTP协议

超文本传输协议(HTTP,HyperText Transfer Protocol)(浏览器---->web服务器)TCP协议,基于连接的安全传输协议(客服端和服务器先建立连接,再通过连接发送数据)UDP协议,基于广播/分发的非安全传输协议(不建立网络连接)HTTP超文本传输协议是运行于TCP协议的基础之上、基于请求与响应模式、无状态的应用层协议,是互联网中应用最为广泛的一种协议。

2024-01-01 21:12:15 1220

原创 初识Web服务器

web服务器就是web项目的容器,我们将开发好的web项目部署到web容器中,才能使用网络中的用户通过浏览器进行访问。一张图带你了解web服务器有啥作用:在我的电脑上有一个已经做好的项目,但是只能我自己访问别人的计算机是访问不到的。这时我们就得把项目放到web服务器上面,当访问者输入地址就能被访问到了,并响应数据给客户端。

2023-12-31 22:03:06 1844

原创 初识javaWeb

javaWeb指的是使用java语言进行互联网领域项目开发的技术栈——进行web项目开发所需的技术的集合。①Java ME 嵌入式应用程序(老款手机的游戏——贪吃蛇)②Java SE 窗体应用程序(下载--安装--双击打开)⑤Java EE 企业级项目开发(Web项目)-Web前端——在浏览器中用户可以看到的网页。④HarmonyOS SDK 移动应用开发。③Android SDK 移动应用开发。Web项目——使用浏览器访问的软件系统。-Web后端——为前端提供数据的程序。

2023-12-30 11:32:37 892

原创 java并发3之停止线程

所以当再次运行到while时,由于中断的效果已经被清除,检查不到任何被中断的迹象。其实,想要停止线程就是用interrupt来通知那个线程,以及被通知的那个线程如何配合。恢复中断的方式也就是在catch子语句中调用Thread.currentThread().interrupt() 来恢复设置中断状态。在这个throwInMethod()方法,它是低层次的相对run()方法,在检测到异常时,抛出异常,这时这个异常就会被吞掉。让run()方法(更高级的函数)去处理这个异常,就不会导致这个异常被吞掉。

2023-08-20 23:12:49 119

原创 977. 有序数组的平方

①在一个非递减顺序排序的数组中,考虑到负数和正数,所以平方的最大值要么在数组的最左边,和最右边。创建一个一样大小的新数组。②一个指针指着数组的最左边,另一个指针指向数组的最右边,在循环里,比较两指针的数的平法,谁大就放在新数组的右端。解释:平方后,数组变为 [16,1,0,9,100]输入:nums = [-4,-1,0,3,10]输入:nums = [-7,-3,2,3,11]排序后,数组变为 [0,1,9,16,100]输出:[0,1,9,16,100]输出:[4,9,9,49,121]

2023-07-23 16:11:14 99

原创 java并发2之启动线程

run()方法的执行线程是主线程。要启动线程,要调用start()来间接调用run()方法。调用start()方法,将通知JVM在有空余时间时候创建新线程,调用start()方法的顺序并不能决定执行线程的顺序。既然start()方法会调用run()方法,为什么我们选择调用start()方法,而不是直接调用run()方法呢?不能重复调用start()方法,在每次启动旧的线程之前,都应该检查线程状态。源码:1)启动新线程检查线程状态,加入线程组,调用start0()。1、start()和run()方法的比较。

2023-07-20 14:36:04 110

原创 704.二分查找、27.移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。二分查找思想:在一有限个且有序的数列中,将要查找的数与该数列的中值比较,若大于中值则目标数在数列的右半段,再取右半段的中值再与目标数比较,一直循环下去,最终会找到目标数的位置。运用暴力,直接遍历数组,若nums[i] == val,则将val后面的所有值都往前移一位。=val的值赋给慢指针所指的数组位置。

2023-07-03 23:06:44 77

原创 java并发1之实现多线程

②从资源节约的角度:每次我们新建一个任务,我都得新建一个独立的线程,而新建一个独立的线程的损耗是比较大的。如果我们使用Runnable,就可以使用后续的线程池工具,而这些工具大大减小创建线程和销毁线程带来的损耗。①从代码的架构角度:具体执行的这个任务也就是run方法应该和我们线程的创建机制,也就是Thread类,它应该是解耦的。③从继承的角度:java不支持多继承,继承了Thread类,就不能继承别的类了,大大的削减了程序的扩展性。继承Thread类:run()方法整个被重写。一、启动线程的两种方式。

2023-07-01 20:58:40 106

原创 LeetCode:704.二分查找

注:①while(letf < right),这里使用“ < ” 是因为left 与 right 相同的情况在[ left , right )区间是没有意义的 ②如果nums [ mid ] 大于target ,则更新搜索范围有下标right 为mid ,因为当前nums[ mid ] 不等于 target ,那么去左区间继续寻找,而寻找的区间是左闭右开区间,所以 right 更新为mid,即在下一个查询区间不会比较 nums[ mid ]。,如果目标值存在返回下标,否则返回。

2023-06-28 23:50:37 133

原创 java-多线程基础1

什么是进程:我们可以任意正在执行的app看成一个进程,进程是操作系统中资源分分配调度的基本单位,进程是拥有自己的地址空间的,进程中至少有一条线程,线程共享着进程的地址空间,可以把进程看成线程的容器。时间分片是指操作系统将CPU时间分为多个时间片,每个时间片分配给一个任务使用,任务在时间片结束前执行完毕或自行放弃CPU的使用,然后CPU将时间片分配给下一个任务。什么是线程:是指在java程序中同时执行多个任务的机制,每个线程都是独立的执行路径,可以同时执行不同的任务或者处理不同的数据。一、进程和线程的关系。

2023-03-26 14:21:59 97

原创 java-小游戏之计时任务、双缓冲绘图和移动背景设置

我们所看到的图像是由显示缓冲区和显示器共同完成的,两者是一起的,显示器只负责从显示缓冲区取数据显示。双缓冲原理:我们创建一个自定义缓冲区,将要画的图像先前存入该缓冲区,再将这个自定义缓冲区的数据传入显示缓冲区,这样就避免了你还没绘制完图片,显示器就从显示缓冲区取数据显示图形。不使用双缓冲我们会在窗体看到闪烁,这是因为程序还没来得及运行,显示器就将还没画好图形显示在显示器上了,你所看到的效果可能是一部分一部分地显示出来,造成闪烁。我们的窗体大小是900*900的,m为移动的像素点。我们为啥要用双缓冲绘图呢?

2023-03-14 18:23:25 391

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除