- 博客(27)
- 收藏
- 关注
原创 【Leetcode】70. 爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
2024-09-17 15:46:56
1458
原创 阿里云镜像报错 [Errno 14] HTTP Error 302 - Found 问题解决记录
在本地安装 CentOS7 后,网络已调通可正常上网,但切换阿里云镜像后,使用 yum 安装软件时出现 “[Errno 14] HTTPS Error 302 - Found Trying other mirror.” 报错,原因是 yum 源配置问题。给出了详细的解决方法,包括以 root 用户登录进行配置,进入特定目录,备份相关文件,进入阿里 CentOS 镜像源,根据版本信息修改文件中的公钥路径和 baseurl 路径,保存退出后重启网络服务,最后重新配置 yum。
2024-09-10 16:09:25
728
1
原创 【Redis】缓存实战解决方案--Part5 解决缓存击穿
思路分析:当用户开始查询redis时,判断是否命中,如果没有命中则直接返回空数据,不查询数据库,而一旦命中后,将value取出,判断value中的过期时间是否满足,如果没有过期,则直接返回redis中的数据,如果过期,则在开启独立线程后直接返回之前的数据,独立线程去重构数据,重构完成后释放互斥锁。如果获取到了锁的线程,再去进行查询,查询后将数据写入redis,再释放锁,返回数据,利用互斥锁就能保证只有一个线程去执行操作数据库的逻辑,防止缓存击穿。新建一个实体类,这个方案,对原来代码没有侵入性。
2024-05-21 11:02:39
324
原创 【Redis】缓存实战解决方案--Part4 缓存击穿问题及解决思路
假设线程1去查询缓存,然后从value中判断出来当前的数据已经过期了,此时线程1去获得互斥锁,那么其他线程会进行阻塞,获得了锁的线程他会开启一个 线程去进行 以前的重构数据的逻辑,直到新开的线程完成这个逻辑后,才释放锁, 而线程1直接进行返回,假设现在线程3过来访问,由于线程线程2持有着锁,所以线程3无法获得锁,线程3也直接返回数据,只有等到新开的线程2把重建数据构建完后,其他线程才能走返回正确的数据。这种方案巧妙在于,异步的构建缓存,缺点在于在构建完缓存之前,返回的都是脏数据。解决方案二、逻辑过期方案。
2024-05-21 10:59:44
474
原创 【Redis】缓存实战解决方案--Part3 缓存雪崩问题及解决思路
导致大量请求到达数据库,带来巨大压力。缓存雪崩是指在同一时段大量的缓存key。
2024-05-21 10:57:30
410
原创 【Redis】缓存实战解决方案--Part2 缓存穿透问题的解决思路
来解决这个问题,通过一个庞大的二进制数组,走哈希思想去判断当前这个要查询的这个数据是否存在,如果布隆过滤器判断存在,则放行,这个请求会去访问redis,哪怕此时redis中的数据过期了,但是数据库中一定存在这个数据,在数据库中查询出来这个数据后,再将其放入到redis中,,这样,下次用户过来访问这个不存在的数据,那么在redis中也能找到这个数据就不会进入到缓存了。原因在于:布隆过滤器走的是哈希思想,只要哈希思想,就可能存在。假设布隆过滤器判断这个数据不存在,则直接返回。布隆过滤:布隆过滤器其实采用的是。
2024-05-21 10:56:20
331
原创 【Redis】缓存实战解决方案--Part1 缓存更新策略
缓存更新是redis为了节约内存而设计出来的一个东西,主要是因为内存数据宝贵,当我们向redis插入太多数据,此时就可能会导致缓存中的数据过多,所以redis会对部分数据进行更新,或者把他叫为淘汰更合适。redis自动进行,当redis内存达到咱们设定的max-memery的时候,会自动触发淘汰机制,淘汰掉一些不重要的数据(可以自己设置策略方式)当我们给redis设置了过期时间ttl之后,redis会将超时的数据进行删除,方便咱们继续使用缓存。
2024-05-19 13:12:27
455
1
原创 【Redis】短信登录-Part4 基于Redis实现短信登录
在这个方案中,他确实可以使用对应路径的拦截,同时刷新登录token令牌的存活时间,但是现在这个拦截器他只是拦截需要被拦截的路径,假设当前用户访问了一些不需要拦截的路径,那么这个拦截器就不会生效,所以此时令牌刷新的动作实际上就不会执行,所以这个方案他是存在问题的。
2024-05-12 15:28:26
727
原创 【Redis】短信登录-Part3 隐藏用户敏感信息
通过浏览器观察到此时用户的全部信息都在,这样极为不靠谱,所以我们应当在返回用户信息之前,将用户的敏感信息进行隐藏,采用的核心思路就是书写一个UserDto对象,这个UserDto对象就没有敏感信息了,我们在返回前,将有用户敏感信息的User对象转化成没有敏感信息的UserDto对象,那么就能够避免这个的问题了。由于前期我们在用session实现登录的时候存的用户信息是user,
2024-05-12 15:15:12
325
原创 【Redis】短信登录-Part2 实现登录拦截功能
首先当用户发起请求时,会访问我们向tomcat注册的端口;sokcet都是成对出现的,用户通过socket向互相传递数据,当tomcat端的socket接收到数据后,此时监听线程会从tomcat的线程池中取出一个线程执行用户请求,在我们的服务部署到tomcat后,线程会找到用户想要访问的工程,然后用这个线程转发到工程中的controller,service,dao中,并且访问对应的DB,在用户执行完请求后,再统一返回,再找到tomcat端的socket,再将数据写回到用户端的socket,完成请求和响应。
2024-05-07 23:56:49
246
原创 【Redis】短信登录-Part1 如何基于Session实现短信登录
在tomcat支撑起并发流量后,我们如果让tomcat直接去访问Mysql,根据经验Mysql企业级服务器只要上点并发,一般是16或32 核心cpu,32 或64G内存,像企业级mysql加上固态硬盘能够支撑的并发,大概就是4000起~7000左右,上万并发, 瞬间就会让Mysql服务器的cpu,硬盘全部打满,容易崩溃,所以我们在高并发场景下,会选择使用mysql集群,同时为了进一步降低Mysql的压力,同时增加访问的性能,我们也会加入Redis,同时使用Redis集群使得Redis对外提供更好的服务。
2024-05-07 23:41:31
1127
2
原创 【Leetcode】2119.反转两次的数字
一个整数意味着倒置它的所有位。给你一个整数numnum得到reversed1reversed1得到reversed2。如果reversed2等于num,返回true;否则,返回false。num = 526true反转 num 得到 625 ,接着反转 625 得到 526 ,等于 num。num = 1800false反转 num 得到 81 ,接着反转 81 得到 18 ,不等于 num。
2024-04-06 19:07:43
330
1
原创 【Leetcode】202. 快乐数
在龟兔赛跑的寓言中,跑的慢的称为 “乌龟”,跑得快的称为 “兔子”。这一题,该题目可以根据龟兔赛跑的思想,不论兔子和乌龟循环的节点在哪,只要兔子和乌龟能够相遇,就证明这个链中形成一个环。而我们反复调用这个方法就会形成一个隐式链表隐式意味着我们没有实际的链表节点和指针,但数据仍然形成链表结构。所谓的快乐数,就是把这个数字n的所有位数拆开后所得到的这个平方和。这种算法的核心思想是利用快慢指针来判断循环,从而判断一个数是否是快乐数。这种算法的核心思想是利用快慢指针来判断循环,从而判断一个数是否是快乐数。
2024-04-02 20:10:06
1069
1
原创 【Leetcode】2427. 公因子的数目
给你两个正整数a和b,返回a和b的因子的数目。如果x可以同时整除a和b,则认为x是a和b的一个。412 和 6 的公因子是 1、2、3、6。225 和 30 的公因子是 1、5。
2024-03-23 18:20:43
183
1
原创 【Leetcode】100. 相同的树
给你两棵二叉树的根节点p和q,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
2024-02-13 11:49:49
383
1
原创 【Leetcode】228. 汇总区间
给定一个的整数数组nums。返回的区间范围列表。也就是说,nums的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于nums的数字x。列表中的每个区间范围[a,b]"a->b"a!= b"a"a == b区间范围是:区间范围是:nums。
2024-02-07 22:59:37
524
1
原创 面向对象进阶总结(static关键字&继承&多态&包&权限修饰符&final关键字&抽象类&接口&内部类)
面向对象进阶总结,包括static,继承,多态,包,权限修饰符,final关键字,抽象类,接口,内部类
2023-07-16 23:21:30
155
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人