- 博客(45)
- 收藏
- 关注
原创 leetcode几个数组题
数组理论基础数组是存放在连续内存空间上的相同类型数据的集合因为数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址二分查找移除元素有序数组的平方209.长度最小的子数组
2023-08-21 02:32:42
296
原创 类加载器,打破双亲委派方法
类加载器(Class Loader)是Java虚拟机(JVM)的一个子系统,负责将类的字节码加载到内存中,并生成对应的Java类对象。类加载器在Java程序运行时动态地加载需要的类文件,使得Java具备了动态加载类和实现动态链接的能力。
2023-08-12 22:58:07
199
原创 abbitmq启动访问不了http://localhost:15672 通过修改服务登录admin
abbitmq默认的对Administration授权,而我的用户不是默认的Administration,所以后来打开服务,找到rabbitmq服务,属性,登陆,将本地系统账户修改为此账户,修改完成之后再重启服务,这时候浏览器就可以访问了。
2023-08-12 16:18:26
362
原创 拦截器登录状态校验
两个拦截器配合使用,减少对Redis的访问。第一个拦截器获取token,Redis查询用户,保存在ThreadLocal中,刷新token。(expire)如果没有token,也就是没有登录,返回true,直接放行,到第二个拦截器,减少对Redis的访问。// 由于LoginInterceptor没有交给Spring进⾏管理,因此StringRedisTemplate不能通过@Resource⾃动注 ⼊。需要在配置⽂件中进⾏构造器注⼊。
2023-08-05 04:47:19
228
原创 拦截器在SpringBoot中使用,HandlerInterceptor,WebMvcConfigurer
拦截器在Controller之前执行。用于权限校验,日志记录,性能监控。
2023-08-05 03:06:58
429
原创 SpringCloud《Eureka、Ribbon、Feign、Hystrix、Zuul》作用简单介绍
业务流程,支付订单功能订单服务改变为已支付订单服务调用库存服务,扣减库存订单服务调用仓储服务,通知仓储发货订单服务调用积分服务,增加用户积分下图这张图,清晰表明了各服务间的调用过程:好!有了业务场景之后,咱们就一起来看看Spring Cloud微服务架构中,这几个组件如何相互协作,各自发挥的作用。
2023-08-01 22:37:43
1105
原创 MyBatis<一级二级缓存><缓存更新机制>
对于缓存数据更新机制,当某一个作用域(一级缓存SqlSession/二级缓存SqlSessionFactory)进行了增/删/改操作后,默认该作用域下所有select中的缓存将被clear。在Mapper XML文件中使用标签来指定需要开启二级缓存的Mapper。
2023-07-28 01:05:14
437
原创 多对多<ofType属性>
假设有三个实体类Student、Course和StudentCourse,其中Student和Course是主实体类,StudentCourse是关联表。一个学生可以选修多门课程,一门课程也可以被多个学生选修。
2023-07-28 00:52:31
183
原创 Mybatis<一对一,一对多><association ,collection >
用户和地址 一个用户对应一个地址</</</****标签用于实现一对一的关联查询。它可以将查询结果中的一个字段(通常是外键)与另一个实体类的对象关联起来。
2023-07-28 00:43:06
222
原创 在Mapper中如何传递多个参数(三种方式)
若Mapper层函数有多个参数,那么其对应的xml中,#{0}代表接收的是Mapper层中的第一个参数,#{1}代表Mapper中的第二个参数xml中参数和Mapper方法中参数顺序一致。</</UserMapper接口的getUsersByNameAndEmail方法有两个参数,分别是name和email。在XML映射文件中,我们使用#{0}和#{1}分别表示这两个参数的位置,这样在执行SQL查询时,MyBatis会自动将对应位置的参数值填充到SQL语句中,完成查询操作。
2023-07-27 23:00:32
3483
原创 MyBatis通过配置文件--->构建SqlSession
在实际应用中,您可以在UserMapper接口中定义更多的数据库操作方法,并在Service或其他组件中使用UserMapper接口调用数据库操作。2、通过SqlSessionFactory创建SqlSession。4、 调用session.commit()提交事务。5、 调用session.close()关闭会话。3、 通过sqlsession执行数据库操作。1、创建SqlSessionFactory。
2023-07-27 21:42:52
329
原创 SpringBoot自动配置《源码分析》
比如说,你用了Spring Data JPA,可能会在实体类上写@Entity注解。这个@Entity注解由@AutoConfigurationPackage扫描并加载,而我们平时开发用的@Controller/@Service/@Component/@Repository这些注解是由ComponentScan来扫描并加载的。的情况下就是将:主配置类(@SpringBootApplication)的所在包及其子包里边的组件扫描到Spring容器中。@Import:给IOC容器导入组件。
2023-07-26 20:18:39
36
原创 MySQL<范式,存储引擎,查询过程>总结
char 是一个定长字段,假如申请了char(10)的空间,那么无论实际存储多少内容.该字段都占用 10 个字符,而 varchar 是变长的,也就是说申请的只是最大长度,占用的空间为实际字符长度+1,最后一个字符存储使用了多长的空间.一直大家都认为exists比in语句的效率要高,这种说法其实是不准确的。在检索效率上来讲,char > varchar,因此在使用中,如果确定某个字段的值的长度,可以使用 char,否则应该尽量使用 varchar.例如存储用户 MD5 加密后的密码,则应该使用 char。
2023-07-21 22:20:11
97
2
原创 MySQL索引
索引是一种数据结构。数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树。更通俗的说,索引就相当于目录。为了方便查找书中的内容,通过对内容建立索引形成目录。而且索引是一个文件,它是要占据物理空间的。索引的优点索引的缺点。
2023-07-21 21:40:47
35
原创 Redis缓存《双写,穿透,击穿,雪崩》的解决
假设线程1去查询缓存,然后从value中判断出来当前的数据已经过期了,此时线程1去获得互斥锁,那么其他线程会进行阻塞,获得了锁的线程他会开启一个 线程去进行 以前的重构数据的逻辑,直到新开的线程完成这个逻辑后,才释放锁, 而线程1直接进行返回,假设现在线程3过来访问,由于线程线程2持有着锁,所以线程3无法获得锁,线程3也直接返回数据,只有等到新开的线程2把重建数据构建完后,其他线程才能走返回正确的数据。这种方案巧妙在于,异步的构建缓存,缺点在于在构建完缓存之前,返回的都是脏数据。
2023-07-21 03:14:37
52
原创 Java并发
线程和进程的区别一个进程有一个或者多个线程,共享同一进程的资源。进程是资源分配的单位,线程是任务调度和执行的单元。进程间切换大,线程切换小。一个进程崩死,对其他线程没有影响。 一个线程崩死,整个线程也会崩死创建线程的四种方式的对比?通过继承Thread类:创建一个继承自Thread类的自定义线程类,并重写Thread类的run()方法,将线程要执行的代码逻辑放在run()方法中。然后创建该自定义线程类的实例并调用start()方法来启动线程。class MyT
2023-07-20 03:00:12
59
原创 JVM知识点总结
jvm将虚拟机分为5大区域,程序计数器、虚拟机栈、本地方法栈、java堆、方法区;程序计数器(Program Counter): 程序计数器是一块较小的内存区域,它用于指示当前线程执行的字节码指令的地址。在多线程环境下,每个线程都有自己独立的程序计数器,确保线程切换后能够正确恢复执行。Java虚拟机栈(Java Virtual Machine Stack): 每个Java方法在执行时都会创建一个栈帧,用于存储方法的局部变量、操作数栈、方法返回值等。栈帧随着方法的调用和返回而入栈和出栈。
2023-07-19 23:04:38
40
1
原创 Java集合
Java集合类主要由两个根接口Collection和Map派生出来的,Collection派生出了三个子接口:List、Set、Queue(Java5新增的队列),因此Java集合大致也可分成List、Set、Queue、Map四种接口体系。注意:Collection是一个接口,Collections是一个工具类,Map不是Collection的子接口。
2023-07-18 01:44:27
58
1
原创 seesion/redis 验证码登录
发送验证码校验手机号码合法性(正则表达式)保存验证码在session中登录,验证码校验 ,注册获取验证码session,一致则根据电话号码查询数据库,无,则新建用户已登录用户信息,存在用户session中登录状态校验发送验证码//生成验证码,这里使用的是hutool工具类的随机数生成方法,参数表示生成6位数验证码登录登录验证功能,登录拦截器自定义拦截器让拦截器生效隐藏用户敏感信息// hutool 工具包 工具类 uesr – 》UserDTO.classsession共享问题。
2023-07-14 01:32:30
122
1
原创 Nginx块结构与负载均衡算法
upstreamserverlocation /proxy_passHost $hostHost当收到来自的请求时,Nginx会将请求转发到后端服务器列表中的其中一个后端服务器,并将相应的响应返回给客户端。通过配置权重和负载均衡算法,可以实现请求在多个后端服务器间的均衡分发。IP哈希(IP Hash): IP哈希算法根据客户端的IP地址将请求分配给后端服务器。通过对客户端IP地址进行哈希运算,每个客户端的请求都会被分配给同一台后端服务器。
2023-07-11 18:59:46
94
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人