- 博客(34)
- 收藏
- 关注
原创 SpringSecurity
认证两步:1.自定义登录接口,调用后续的过滤器链,然后生成jwt令牌,保存用户信息2.UserdetailService实现UserDetail,改为从数据库查询用户密码,然后返回UserDetail对象。授权两步:1.在UserdetailService类中从数据库查出用户的权限,封装进UserDetail对象,然后在上下文中写入用户权限。可以将认证之后的用户信息存入redis中,也可以直接存入jwt中。
2025-03-20 19:15:51
196
原创 Redis实战篇1
刷新redis中的过期时间:首先是在登录拦截器中加入判断,只要从redis中获取信息了就刷新redis,但是后面发现拦截器只拦截了登录界面,如果用户一直在首页,也就是不需要拦截的页面,那么到时候redis依然会过期,解决方法是在登录拦截器前面再加一个拦截器,拦截所有请求,在这个拦截器中获取redis中的信息,如果存在用户,那么刷新该用户的过期时间,如果不存在依旧放行。先操作数据库在操作redis好,操作redis一般为先将redis中的数据删除,再插入。将session替换成redis。
2025-02-27 17:32:51
194
原创 Git仓库管理
两个人操作同一文件:操作同一文件不一定冲突,但是操作同一行一定冲突,合并的时候选择以谁的为准。git checkout -b b1 v1.0:将标签1.0的代码克隆到b1分支。git push origin v1.0 :可以推送分支,也可以推送标签。clone只需要执行一次,就是开始的时候,后面每次都是pull。-b参数意为创建且切换,即使没有b123这个分支,会自动创建。git remote add:将本地仓库与远程仓库关联起来。两个人操作不同文件:先拉后推。
2024-12-20 14:19:57
168
原创 Maven
找不到某模块的解决方法,在相应模块下执行install操作。引用别的依赖时不想引用其中的某一项可以使用排除依赖。不想让别人看见我用什么依赖可以使用 “可选依赖”配置访问私服的访问权限与地址。依赖范围用scope设定。
2024-12-09 14:08:49
159
原创 Spring的学习
在yaml写入的数据库连接springboot会自动创建一个bean,这就是spring与springboot的区别之一:自动配置。使用对象时不用new对象出来,降低耦合度,而是将对象转换为bean,之后自动注入@Autowide。Spring创建创建bean的方式:首先在配置文件中配置bean,然后在需要的地方使用也就是初始化。bean构造器注入:引用类型,将配置文件中的property标签换成constructor标签。Di入门,通过property标签进行依赖注入,也就是将两个bean对象进行绑定。
2024-12-06 15:00:32
255
原创 学成在线小问题
为了保证任务不重复执行,如果使用synchronized关键字,由于此项目是分布式架构,采用分布式任务执行器来执行任务,而执行器部署在不同jvm中,而synchronized只能锁本地jvm,也就是本地锁,对其他jvm没有用。利用数据库主键唯一性的特点,或利用数据库唯一索引、行级锁的特点,比如:多个线程同时向数据库插入主键相同的同一条记录,谁插入成功谁就获取锁,多个线程同时去更新相同的记录,谁更新成功谁就抢到锁。事务控制问题:如果是开启事务的方法调用非事务方法,那么非事务方法也会被事务控制。
2024-11-29 15:17:01
951
原创 MySQL事务原理,完结撒花
readview:快照读根据readview的四个字段来决定返回的数据。RC:每次快照读都会生成一个readview,P88是重点。RR:只用第一个快照读生成的readview。redo log保证脏页能够刷新到磁盘当中。undo log:用于回滚事务与MVCC。版本链: 进阶篇 P86是重点。MySQL运维篇不看了,太难了。
2024-11-08 14:59:34
141
原创 MySQL的锁
表锁中的元数据锁: 开启事务时,执行DML,DQL都会产生元数据锁,可能为SHARED_READ或者SHARED_WRITE,但因为二者的锁类型兼容因此在执行DML时也能执行DQL,而修改表结构则会产生EXCLUSIVE锁,不与上面二者兼容。意向锁:解决表锁与行锁的冲突问题,可能已经加了行锁,如果再加一个表锁那么会产生锁的冲突。如果执行 >=19 那么将是临建锁,锁住大于等于19的行。如果对没有索引的列进行DML,那么行锁将会升级为表锁。间隙锁:自己的理解为区间锁。临建锁:间隙锁+行锁。
2024-11-06 20:49:36
205
原创 MySQL存储过程
存储函数: 存储函数可以实现的存储过程也能实现,因此用的不多。repeat:条件成立则退出,与while相反。游标没看 P113,P114,太抽象了。用户自定义变量:无需赋值,直接使用。
2024-11-06 13:12:44
234
原创 sql优化
页分裂:innodb存储引擎采用b+树存储结构,b+树只在叶子节点存储,如果乱序插入则会改变顺序导致页分裂。order by优化: 如果没有为字段创建索引排序那么就是Using filesort,load文件中只包含数据: 而正常的sql文件包含insert语句。主键不能太长,因为二级索引中有存储聚集索引,会造成空间浪费。主键优化:推荐顺序插入,因为乱序插入可能会导致页分裂。limit 优化:先查出主键id,再根据id查询数据。页合并:当删除的数据到达一定值会导致页合并。
2024-11-04 10:47:39
115
原创 MYSQL索引
2.为username与password建立联合索引,这个联合索引为二级索引,因为二级索引叶子节点中包含了id的聚集索引,因此不需要为id建立联合索引,因此这个索引不需要进行回表查询。sql提示:提示mysql使用哪个索引,因为一个字段可能包含多个索引,因此需要提示mysql使用哪个,use index是推荐mysql使用这个索引,而force是强制使用这个索引。推荐使用联合索引,如果使用两个单列索引,那么mysql会根据性能只选择其中的一个,因此使用联合索引更好。最好使用大于等于,大于等于不会失效。
2024-11-03 22:01:06
230
原创 MySQL索引
B+树:这是经典B+树,并不是MYSQL中的B+树。MYSQL中B+树的索引的结构。不同的引擎结构有不同的索引。B树: P68是重点。
2024-11-03 14:33:28
146
原创 Springboot环境搭建 P14 P33自定义校验
首先执行maven的打包命令,生成jar包,然后将jar包发送给服务器,网上租的或者公司现有的,然后在服务器上运行jar包 终于搞懂这一块了。ThreadLocal:苍穹外卖中并没有清空数据,想要清空数据需要在拦截器中重写after方法,这是最后执行的,清空数据可以避免内存泄漏。参数校验: 需要在接口方法的实体参数上加上@Validate注解· 可以通过@URl注解来校验参数是否为url地址。通常是md5加密,校验密码时将用户输入的密码通过md5加密后再与数据库中的密码比较。
2024-10-24 21:48:21
331
原创 关于token的注意事项
通过将令牌存储到 Redis 中,并在用户修改密码后生成新的令牌,然后通过 Redis 中的令牌与新令牌进行比较,是一种有效的解决方案。这种方法可以确保用户修改密码后旧的令牌立即失效。用户登录成功之后下发令牌,然后修改密码重新登录,再次生成新的令牌,那么旧的令牌没过期,依然可以访问账号资源,有什么办法解决。
2024-10-24 21:10:54
134
原创 Springboot P9重点 P11,P12
DispatcherServlet类:由web起步依赖提供,在boot启动时自动加载,如果没有这个类就不能发送http请求。@Bean不适合写在启动类中,适合统一的配置,通过@Configuration注解来标识这是一个配置类。连接MySQL: 引入mybatis的起步依赖与mysql驱动依赖,然后在yaml文件中配置信息。自动配置原理: 就是通过注解最终定位到配置文件中,配置文件中包含需要注入的bean的全类名。Bean的扫描:启动类默认扫描所在包及其子包,如果要强制扫描其他包需要在启动类中配置。
2024-10-24 15:21:54
150
原创 反射的学习
准备: n2是实例静态变量,但不是常量,后面可能在初始化阶段给他赋值,因此在此阶段只给它分配内存,真正赋值是在初始化阶段。访问方法:通过Class类获得方法时需要指定方法名与形参的class类型,这样才能指定哪个方法。初始化: 对静态变量赋值,同时保证类只加载一次,即使是在多线程的环境下。验证: 验证安全,源码通过SecurityManage类来保证安全。一般类的执行顺序 : 类的静态变量,静态代码块, 然后是构造器。
2024-10-22 21:24:12
183
原创 以后的计划
2.先根据四级书上的每天单词来背,不背完一天的不结束 时间控制在 1h内。1.每天必须刷 0.5h 到 1h 的力扣,一天至少一道有难度的题。3.八股,前期先看+背,先理解再背,0.5h 到 1h。这些如果不做完就不要想其他事情。
2024-10-21 22:38:10
121
原创 Socket
注意:使用字符流需要刷新或者关闭才能保存数据,同时可能需要写入换行符和读入换行符,也就是读写的结束标记。如果想使用字符流,那么就需要用到转换流,将字节流转换成字符流。可以用socket.shutdown来表示写入结束标记。P38与P39要重看,没认真看。P15是重点,TCP连接。
2024-10-21 22:28:20
116
原创 IO流学习
BuffredInputStream,BufferedOutStream跟BuffredReader,BuffredWriter的区别是包装类中in,out的位置不同,redReader与redWriter的in与out在包装类中,而redinput与redOutput的in,out位置在下图这个位置。装饰器模式:处理流也叫包装流,就是将一个类的多个子类包装起来,然后这个包装类内部将父类作为成员变量,通过多态实现。ObjectOutputStream的写操作,与上面的io有点差别:写的都是包装类型。
2024-10-20 21:58:03
202
原创 多线程学习
yield方法与join方法,join方法一定成功,yield不一定,根据cpu的调度实现yield,join方法是指其他线程完成再执行本线程。start调用start0方法,而start0是由jvm调用,jvm怎么调用时根据不同操作系统的算法来调用。继承Therad类开启线程为什么用start而不直接调用run方法。1.继承Therad类,调用Theard.start方法开启线程。因为直接调用run方法就是普通的调用方法,而不是开启线程。守护线程:当主线程结束后,子线程跟着结束。
2024-10-20 09:36:52
256
原创 java八股day02
1.抽象类用于描述类的公共属性可以定义一些成员变量,公共属性,方法可以有抽象方法,普通方法;接口中变量的默认修饰符为public final,即为常量,不能被修改,只能有常量与抽象方法,用于定义行为的规范。1.抽象类中的方法可以定义为抽象方法也可以定义为普通的方法,子类必须实现抽象方法,对于普通方法可以重写或直接使用。抽象类可以有构造器,目的是初始化成员变量,
2024-10-20 09:36:04
111
原创 Collerction大汇总
collection包括list,set,list与set都是接口, list下面有ArrayList,linklist,vertor。如果要实现name与age相同判定为同一对象那么必须重写equal与hashcode方法。ArrayLIst:基于数组实现,线程不安全,没有对add方法上锁。hashset:底层是hashmap,只不过是单列对象。vector:线程安全,同步,方法有上锁。set:无序,不重复,无索引。
2024-10-19 15:54:29
248
原创 java运行与八股,==与equal的区别
1.平台无关性:可以做到一次编译,到处运行,因为java编译后产生了字节码文件,只要系统安装了jvm,就可以运行字节码文件,jvm会将字节码文件翻译成机器码然后运行,字节码文件不能直接运行,而是需要通过jvm翻译成机器码,不同平台生成的字节码文件是相同的,而jvm翻译的机器码却不同。Integer与int的区别:integer是引用类型,int是基本类型,int读写效率高,不需要额外实例化对象,内存占用为4个字节,而integer占用16个字节,如果对未初始化的integer对象赋值则会报空指针异常。
2024-10-16 08:56:32
240
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人