- 博客(33)
- 收藏
- 关注
原创 Elasticsearch(ES)搜索引擎
假如我们要查第100页数据,每页查十条,也就是查第990到1000这十条数据。但并不是简单的查到这1000条数据然后返回最后十条,而是把每个分片前1000条数据都拿出来合并到一起排序,选出前1000条然后返回最后十条。当要查询第一万页数据时,数据量极大,可能会导致内存炸裂。不能修改索引库已有的字段,因为之前创建好的倒排索引跟分词会受到干扰,对索引库影响很大。数据库采用正向索引:一般情况下会根据id创建索引,形成B+树,如果根据id检索效率就会比较高。先创建好mapping映射,在Java客户端创建索引库。
2025-12-13 21:38:55
381
原创 前缀和与差分(二)
L,R]+V是把区间[L,R]的数字都+V,d[L]+V是把差分数组d中L位的数字+V,d[R+1]-V是把差分数组d中R+1位的数字-V,然后进行一次前缀和,这样下来就相当于是从第L位到最后一位的数字全部+V,第R+1位的数字到最后全部-V,抵消过后就是L到R位上的数字全部+V。对于数组arr[n],我们可以引入一个差分数组d[n],对数组arr[n]的m次操作可以看作是对d[n]的m次操作后对d[n]求前缀和,然后将其相加到arr[n]上。[L,R]+V为什么等价于d[L]+V,d[R+1]-V?
2025-12-08 14:53:58
385
原创 前缀和与差分
对于给定的一个一维数组,询问q次[L,R]的区间和,使用单纯的暴力解题时间复杂度为0(nq),n为元素的个数,这样一来,就会超出时间限制。有了前面一维前缀和的基础,二维前缀和学起来就没那么难了。一维前缀和是对一维数组求区间和,那么二维前缀和就是对二维数组求区间和。解释:(1,1)到(2,2)的和就是(1,1)+(1,2)+(2,1)+(2,2)=6+7+3+2=18。对于一维,sum[i]表示0到i的和,对于二维sum[i][j]表示从(0,0)到(i,j)的和。,适用于需要多次查询区间和的场景。
2025-12-01 11:13:55
169
原创 订单秒杀实现
在查询库存的时候额外查询版本号,每次对库存做修改时版本号会发生变化,在修改库存之前先对版本号进行判断,如果跟查询得到的版本号一直,则进行操作,否则报错。但对于上述代码的书写判断,仍然存在一些问题,当有多个线程同时进行查询时,查到的count均为0,此时出现问题。当有多线程同时进行操作时,会出现数据库的库存为负数,也就是所说的超卖问题。下单时会生成订单号,此订单号是唯一且递增的。对版本号法的升级,直接用库存来当作版本号。唯一性,高可用,高性能,递增性,安全性。(一):库存超卖问题。(二):一人一单问题。
2025-11-24 11:06:05
219
原创 JWT身份认证
二:使用JWT一:认识JWT什么是jwtJWT的全称是。它是一种开放标准,定义了一种紧凑且自包含的方式,用于在各方之间安全地将信息作为 JSON 对象传输。这个定义里有三个关键词非常重要:紧凑:JWT 是一个很短的字符串,可以通过 URL、POST 参数或 HTTP 请求头轻松发送,传输效率高。自包含:令牌本身包含了所有需要的信息,例如用户身份、权限等。服务器无需再次查询数据库来验证会话状态,这使得 JWT 成为无状态认证的理想选择。安全:信息是经过数字签名。
2025-11-17 11:01:33
968
原创 栈的相关用法
栈(Stack) 是一种遵循后进先出(LIFO, Last In First Out) 原则的线性数据结构,其操作仅在一端(称为栈顶)进行,另一端栈底不操作数据。栈的操作具有明确的方向性,只能在栈顶进行,因此不存在随机访问的需求。○ 查看栈顶(Peek):返回栈顶元素但不移除。○ 判空(isEmpty):判断栈是否为空。○ 出栈(Pop):从栈顶移除并返回元素。○ 判满(isFull):判断栈是否满了。○ 入栈(Push):向栈顶添加元素。2、逆波兰表达式求值算法。1、有效的括号算法问题。
2025-10-26 08:22:06
177
原创 JSON相关知识点
在 Spring MVC 中,返回 Map<String, Object> 和 ResponseEntity 的主要区别体现在对 HTTP 响应的控制粒度和功能丰富性上。在 Spring MVC/Spring Boot 中,通过 ResponseEntity 类封装 HTTP 响应,可直接控制 HTTP 状态码、响应头和 Body,适合细粒度控制接口行为。通过定义 全局统一的响应格式类(如 Result ),将数据、状态码、消息等封装为固定结构,提升接口规范性。
2025-06-14 22:07:13
826
原创 依赖注入的几种方式
在Spring框架中,依赖注入(Dependency Injection,DI)是实现控制反转(IoC)的核心机制,其主要目的是将对象的创建和依赖关系管理从代码中解耦。缺点:可能存在 NPE:若未调用 setter 方法,依赖可能为 null。与框架强耦合:依赖 Spring 容器,难以脱离容器使用(如单元测试)。方式:通过任意方法完成依赖注入(不限于 setter 方法)。强制依赖:确保对象创建时所有必需依赖已被注入,避免 NPE。可选依赖:可通过setter方法选择性注入依赖。
2025-06-08 09:24:08
496
原创 @Autowired与@Resource依赖注入的区别
Autowired 默认按类型(Type)匹配:当容器中存在唯一匹配类型的 Bean时,直接注入。当存在多个同类型 Bean(如接口的多个实现类)时,会抛出NoUniqueBeanDefinition Exception 异常,需配合 @Qualifier 注解指定 Bean 名称(按名称匹配)。在 Spring 框架中, @Autowired 和 @Resource 都是用于依赖注入(DI)的注解,但它们的来源、注入逻辑和使用场景存在明显差异。使用,具有一定的跨容器兼容性。
2025-06-06 15:29:46
335
原创 如何记录点赞数,收藏数,转发数,浏览数,并对用户是否可以取消点赞判断
一:dao层代码处理:// 点赞数增加1@Update(“update posts set like_count = like_count + 1 where id = #{postId}”)void incrementLikeCount(int postId);// 评论数增加1@Update(“update posts set comment_count = comment_count + 1 where id = #{postId}”)void incrementCommentCount(
2025-04-29 08:11:02
472
原创 第十八周博客
execution 主要根据方法的返回值,包名,类名,方法名,方法参数等信息来匹配,语法为:execution(访问修饰符?当有多个切面的切入点都匹配到了目标方法,目标方法运行时,多个通知方法都会被执行。3:throws 异常:可省略(注意是方法上声名抛出的异常,不是实际抛出的异常)@annotation 切入点表达式,用于匹配表示有特定注解的方法。1:访问修饰符:可省略(比如:public,protected)第一种:execution(优先考虑)第二种:@annotation。2:包名.类名:可省略。
2025-04-13 09:01:36
169
原创 git 的学习总结
命令形式:git reset --hard commitID。命令形式:git commit -m ‘注释内容’命令形式:git checkout -b 分支名。命令形式:git add 单个文件名/通配符。命令形式:git log [option]命令形式:git checkout 分支名。作用:查看的修改的状态(暂存区,工作区)作用:提交暂存区内容到本地仓库的当前分支。作用:一个分支的提交可以合并到另一个分支。注意:不能删除当前分支,只能删除其他分支。命令形式:git branch 分支名。
2025-04-06 11:15:29
320
原创 Spring中的事务控制以及AOP的相关概念
@AfterReturning:返回后通知:此注解标注的通知方法在目标方法后被执行,有异常不会执行。-@After:后置通知,此注解标注的通知方法在目标方法后被执行,无论是否有异常 都会被执行。-连接点:JoinPoint,可以被AOP控制的方法(暗含方法执行时的相关信息)-@AfterThrowing:异常后通知,此注解标注的通知方法发生异常后执行。-@Around:环绕通知,此注解标注的通知方法在目标方法前,后都被执行。-@Before:前置通知,此注解标注的通知方法在目标方法前被执行。
2025-03-30 08:45:31
308
原创 mybatis基础知识的学习
加上@Mapper注解后:应用程序在运行时,会自动的为该接口创建一个实现类对象,并且会自动将该实现类对象存入IOC容器。3:在Mapper接口的方法中传递多个参数时,需要用注解@Param来给参数起名字,如果只传递一个参数则不用起名字。创建工程时要引入的相关的依赖有:Lombok,MyBatis Framework,MySQL Driver。基于官方骨架创建的springboot项目中,注解@Param可以省略。5:实体类属性名和数据库表的字段名不一致时,运行程序后得不到封装的数据。
2025-03-23 08:38:14
130
原创 springboot相关的学习
创建springboot工程时,并勾选lombok后,在创建过实体类后加上@Data@NoArgsConstructor @AllArgsConstructor注解后,不用再为每个属性添加get和set方法。将Dao及Service层的实现类交给IOC容器管理的方法:在类的上方加@Component 注解;@Repository:@Component的衍生注解;不输于以下三类时,用此注解;@Controller:@Component的衍生注解;@Service:@Component的衍生注解;
2025-03-16 09:59:47
257
原创 有关JDBC的知识点
(1)注册驱动:Class.forName(“com.mysql.jdbc.Driver”);SQL注入是通过操作输入来修改事先定义好的SQL语句,用于达到执行代码对服务器进行攻击的方法;PreparedStatement对象:setxxx(参数1,参数2):给?(1)游标向下移动一行并判断该行是否有数据:next()作用:预编译SQL语句并执行:防止SQL注入问题;Statement的作用:(1)执行SQL语句。预编译SQL的执行SQL对象:防止SQL注入。(2)获取数据:getxxx(参数)
2025-03-09 08:44:31
253
原创 有关DML DQL对表的操作
select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2;insert into 表名 values(值1,值2),(值1,值2),(值1,值2);insert into 表名(字段名1,字段名2)values(值1,值2);update 表名 set 字段名1=值1,字段名2=值2 where 条件;delete语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的数据。修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的数据。
2025-03-02 11:31:14
435
原创 与MYSQL有关的知识点
5:创建表的命令:create table preson(name varchar(9));二:mysql数据类型:整数类型,浮点类型,字符串类型,日期时间类型,二进制类型。2:创建新的数据库的命令:create database 名字1;DDL:数据定义语言,用来定义数据库对象(数据库,表,字段);7:删除数据库的命令:drop database 名字1;1:查看数据库的命令 :show databases;3:使用数据库的命令:use 名字1;1:数据库:数据存储的仓库;
2025-02-24 19:48:28
160
原创 io流知识点补充+考核总结
后来根据视频内容对照着视频写了200行左右的代码,本以为自己写的差不多了,但是认真读了几遍考核要求后发现自己写的不符合要求,于是毅然决然的从头开始自己写,但是因为有了前面200行代码的铺垫重新写起来也不是特别困难。(3)序列化对象后,修改了Javabean类,再次反序列化会抛出InvalidClassException异常。解决方案:给该成员变量加transient关键字修饰,该关键字标记的成员变量不参与序列化过程。(2)序列化流写到文件中的数据是不能修改的,一旦修改就无法再次读回来了;
2024-12-15 09:14:58
214
原创 File知识点+io流知识点
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(“路径”));File对象表示路径,可以是文件,也可以是文件夹。这个路径可以是存在的,也可以是不存在的。相对路径是不带盘符的,默认到当前项目下去找。用Windows系统自带的记事本打开并且能读懂的文件。(1)把字符串表示的路径变成File对象;(2)序列化流写到文件中的数据不能修改。(2)把父级路径和子级路径进行拼接。字节流:可以操作所有类型的文件;
2024-12-07 21:57:10
284
原创 异常知识点
(2)运行时异常:RuntimeException本身和所有子类,都是运行时异常。(1)编译时异常:除了RuntimeException和它的子类,其他都是编译时异常。(1)运行时异常:RuntimeException及其子类,编译阶段不会出现异常提醒,运行时出现的异常。会把try里面所有的代码全都执行完毕,不会执行catch里面的代码;(4)如果try中遇到了问题,那么try下面的其他代码还会执行吗?(1)把异常的名称,异常原因以及异常出现的位置输出在控制台;(2)编译时异常:编译阶段就会出现异常提醒。
2024-12-01 11:43:09
318
原创 前端知识点总结+考核感悟
经过这两周的前端学习,我也对前端有了初步的了解,通过这次的学习内容加上这次的考核情况,我觉得自己不是很适合学习前端,相较于前端我觉得后端更能激起我学习的动力。在今天两位学长讲述完前后端的学习内容以及面临的机遇与挑战等,我还是觉得后端更适合我,对于这次的分端,我最终选择后端。(3)浮动的元素不会盖住文字,文字会自动的环绕在浮动元素的周围,所以我们可以通过浮动来设置文字环绕图片的效果。通过display样式可以修改元素的类型,inline:可以将一个元素作为内联元素显示;(2)前一个~后一个:选中后面所有的。
2024-11-24 11:06:36
258
原创 前端学习知识点
(1):标题标签:在HTML中一共有h1~h6 六级标签,在效果显示上h1最大,h6最小。(3):换行标签:在HTML中,字符之间写再多的空格,浏览器也会当成一个空格解析,换行也会当成一个空格个解析。(3):一般情况下只使用块元素去包含内联元素,而不会使用内联元素去包含一个块元素。所谓的内联元素,指的是只占自身元素大小的元素,不会占用一行,eg:a,img,span,iframe。eg:p,h1,h2,h3.3:图片标签:使用img标签来向网页中引入一个外部图片,img标签也是一个自结束标签。
2024-11-17 22:04:21
308
原创 集合进阶知识点
2:Collection的遍历方式:迭代器遍历,增强for遍历,Lambda表达式遍历。(1):什么是泛型:JDK5引入的特性,可以在编译阶段约束操作的数据类型,并进行检查。Collection时单列集合的祖宗接口,它的功能时全部单列集合都可以继承使用的。List系列集合:添加的元素是有序的(存和取的元素顺序一致),可重复,有索引。增强for的底层就是迭代器,为了简化迭代器的代码书写的;普通for:如果遍历的时候想操作索引,可以用普通for。Set系列集合:添加的元素是无序,不重复,无索引。
2024-11-10 11:14:54
267
原创 常用API知识点总结
2>:如果没有重写equals方法,那么默认使用object中的方法进行比较,比较的是地址值是否相等,一般来讲地址值对我们的意义不大,所以我么们会重写,重写之后比较的就是对象内部的属性值了。<1>:toString方法的结论:如果我们打印一个对象,想要看到属性值的话,那么就重写toString方法就行了,在重写的方法中把对象的属性值进行拼接。由于math里面的方法都是静态的,所以可以直接用Math.方法名()调用方法,2:object的构造方法:只有空参构造:public object();
2024-11-03 11:41:53
158
原创 李恒洋的博客
传递引用数据类型时,传递的是地址值,形参的改变,影响实际参数的值。(3),构造方法(空参,带全部参数的构造),(4),为私有化的成员变量提供get/set方法。特点:赋值给其他变量,也是赋的真实的值。传递基本数据类型时,传递的是真实的数据,形参的改变,不影响实际参数的值。<2>:继承:当类与类之间存在相同的内容并满足子类是父类中的一种可以考虑使用继承来优化代码。多态调用成员的特点:(1),成员变量调用:编译看左边,运行也看左边;定义:类是共同特征的描述;5:构造方法:在创建对象的时候给成员变量进行赋值的。
2024-10-27 10:38:03
343
原创 李恒洋的博客
2>:强制转换总结:取值范围大的赋值给取值范围小的是不允许直接进行的,需要加入强制转换。3:当知道循环次数或者循环的范围时用for循环,当不知道循环的次数和范围,只知道循环的结束条件时用while循环。<1>隐式转换总结:(1)取值范围:byte<short<int<long<float<double。无限循环的下面不能再写其他代码了,因为永远停不下来,下面的代码永远执行不到。(3):取值范围小的和取值范围大的进行运算,小的会先提升为大的。(2):数据类型不一样不能进行计算,需转成一样的才能进行运算。
2024-10-20 10:53:40
171
原创 李恒洋的博客
本周是来到未来小组学习的第一天,怀着期待的心情进行了一周的学习,今天是为期一周的结束时间,我想对自己这一周的情况做一个总结:首先是本周的学习情况:本周共学习了如下内容1:JDK是java的开发工具包,包括JVM虚拟机:java程序运行的地方;7:如果要定义证书类型中的long类型的变量,由于lomg类型变量的数值太大,需要在熟知的后面加上一个L作为后缀(大小写都行)。(3)不能是关键字;在这周的学习过程中,我也遇到了不少的问题,在我询问的时候,学长学姐们总是很耐心,很负责的为我讲解,我也感觉到很开心。
2024-10-13 08:42:52
181
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅