- 博客(113)
- 收藏
- 关注
原创 Spring学习笔记——Bean的生命周期简单理解
指的就是Bean从创建到销毁的整个过程,分为四个步骤:1.实例化a.通过反射去推断构造函数进行实例化b.使用实例工厂、静态工厂进行实例化。2.属性赋值a.解析自动装配(byname bytype constractor none @Autowired) 是DI的体现b.可能会产生循环依赖的问题——三级缓存能解决3.初始化a.调用XXXAware回调方法:比如BeanNameAware、BeanFactoryAware等b.调用初始化生命周期回调(三种)
2025-04-21 10:17:12
312
原创 Spring学习笔记——事务的传播行为,嵌套事务的回滚
Spring事务的传播机制主要是用来处理多个事务方法相互调用时的事务行为。当一个事务方法内部调用另一个事务方法时,Spring框架会根据事务的传播行为来决定如何处理这些事务。这些事务传播行为可以通过在@Transactional注解中设置propagation属性来指定。
2025-04-20 21:36:50
404
原创 Redis学习笔记——Redis缓存设计
一个并发访问量比较大的key在某个时间过期,导致所有的请求直接打到了DB上解决方案:加锁更新:当请求查询A的时候,发现缓存中没有,就对这个A加锁,同时去数据库查询数据,写入缓存,返回给用户。将过期时间组合写在value中,通过异步的方式不断刷新过期时间,或者不给热点数据设置过期时间。
2025-04-20 19:38:18
711
原创 JAVA学习笔记——CompletableFuture是什么
Future表示异步计算的结果,CompletionStage用于表示异步执行过程中的一个步骤(Stage),这个步骤可能是由另外一个CompletionStage触发的,随着当前步骤的完成,也可能会触发其他一系列CompletionStage的执行。从而我们可以根据实际业务对这些步骤进行多样化的编排组合,CompletionStage接口正是定义了这样的能力,我们可以通过其提供的thenAppy、thenCompose等函数式编程方法来组合编排这些步骤。
2025-04-17 16:47:34
242
原创 Spring中的AOP是什么?怎么实现?
用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。AOP可以拦截指定的方法,并且对方法增强,比如:事务、日志、权限、性能监测等增强,而且无需侵入到业务代码中,使业务与非业务处理逻辑分离。
2025-04-17 16:29:18
307
原创 计算机网络学习笔记——Socket场景
1.打开两个文件,逐块读取(防止内存爆炸)2.在socket(文件描述符)中按照顺序写入文件内容3.可以在两个文件之间添加一些分隔标记,或者使用固定的格式(比如先传文件名和长度)
2025-04-16 13:40:58
316
原创 计算机网络学习笔记——webserver
顾名思义,就是一个它的工作就是:🌍 举个例子: 你在浏览器输入,按下回车后,其实你就是在向对应的 Web Server 发出请求,它就把网站内容(比如index.html)返回给你浏览器展示。
2025-04-16 13:17:03
353
原创 IM场景题——消息已读未读的问题
假设现在有一个大型群聊,你是其中的一个用户,你昨天没有上线,你发现群聊中有999条新消息,你点开群聊之后,看了最近10条,然后跳转到上一次看到的地方又看了10条,那么中间的979条消息是否是已读的?
2025-04-15 21:44:51
289
原创 计算机网络学习笔记——半连接队列和SYN Flood攻击的关系,怎样防范?
它是一种典型的DDos攻击,在短时间内,伪造不存在的IP地址,向服务器发送大量的SYN队列。当服务器回复SYN+ACK报文之后,不会收到ACK回应报文。这就会导致SYN队列里的旧连接不会出队,会占满服务端的半连接队列,使的服务器不能为正常用户服务。
2025-04-15 21:19:04
237
原创 计算机网络学习——JWT相关知识
在传统的基于会话和Cookie的身份验证方式中,会话信息通常存储在服务器的内存或数据库中。但在集群部署中,不同服务器之间没有共享的会话信息,这会导致用户在不同服务器之间切换时需要重新登录,或者需要引入额外的共享机制(如Redis),增加了复杂性和性能开销。而JWT令牌通过在令牌中包含所有必要的身份验证和会话信息,使得服务器无需存储会话信息,从而解决了集群部署中的身份验证和会话管理问题。当用户进行登录认证后,服务器将生成一个JWT令牌并返回给客户端。
2025-04-15 15:45:17
1288
原创 计算机网络学习——HTTP和HTTPS区别,为什么要用HTTPS?
HTTPS在传输层的TCP和网络层的HTTP之间加入了SSL/TLS协议,解决了问题:信息加密、校验机制、身份证书。因为HTTP是明文传输,存在安全上的风险,比如窃听风险、篡改风险、冒充风险。为什么要使用HTTPS?
2025-04-15 14:17:59
391
原创 计算机网络学习笔记——HTTP版本对比。Websocket和HTTP有什么区别?
是一种预加载机制,服务端在客户端请求一个资源时,可以额外“推送”一些资源,比如 CSS、JS、图片等。客户端不需要单独请求这些资源。适用于提高页面加载速度,但不是为实时通信设计的。
2025-04-15 13:51:14
454
原创 IM项目场景题——消息顺序一致性
这里只考虑单聊和群聊两种情况相当于使用发送方的本地时钟,这样不稳定,不安全。网络延迟,造成先发后收到客户端序号:在客户端本地维护一个序列号 ,这样不可控。不稳定。如果应用重装导致序号清零->写本地文件保存->云同步(每个会话,每个用户维护一个序列号)、结合时间戳判断+序列号。但这样只适合单聊,对于使用Db自增,redis incr自增 ->会导致分布式ID -> 雪花算法但是对于我们的IM项目,没有必要做到全局单调递增,可以实现会话级别的的单调递增,减轻序列号生成服务压力。
2025-04-14 13:53:09
352
原创 Redis学习笔记——如何设计秒杀场景以及超卖现象?
1.查询商品库存时候加排他锁在事务中,这个线程给goods_id 加上了排他锁,其他线程只能用普通的select来读取数据,并且会根据数据隔离级别读出不同的数据:在隔离级别下,它读到的是已提交的数据、在下,它会看到事务启动时的数据快照。但是如果也用for update或者delete语句等,都会阻塞,直到事务A完成2.更新数据库减库存的时候,进行库存限制条件总结一下:使用数据库加锁来解决的方案,性能不是很好,在高并发情况下,可能存在因为获取不到数据库连接或者超时等待而报错。
2025-04-14 12:39:23
351
原创 69. x 的平方根
给你一个非负整数x,计算并返回x的。由于返回类型是整数,结果只保留,小数部分将被不允许使用任何内置指数函数和算符,例如或者x ** 0.5。x = 42x = 828 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。
2023-09-25 19:56:19
156
原创 40. 组合总和 II
给定一个候选人编号的集合candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的每个数字在每个组合中只能使用。解集不能包含重复的组合。
2023-09-17 16:48:46
120
原创 39. 组合总和(暴力DFS)
给你一个的整数数组candidates和一个目标整数target,找出candidates中可以使数字和为目标数target的 所有,并以列表形式返回。你可以按返回这些组合。candidates中的数字可以。如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为target的不同组合数少于150个。[2,3,6,7],target =72 和 3 可以形成一组候选,2 + 2 + 3 = 7。注意 2 可以使用多次。7 也是一个候选, 7 = 7。仅有这两种组合。
2023-09-17 16:05:36
214
1
原创 37. 解数独
本题要求我们填数独,最重要的就是当我们填写某个位置的时候要知道她还能填几,要分情况,就类似于一棵树,所以我们采用dfs搜索的方式。首先定义三个bool数组row,col,cell来对应三个规则。先遍历整个表一次,根据表里面已经有数据的位置将对应的bool数组置为true,随后开始dfs。dfs部分是一个递归的函数,输入参数要包含对应的位置,函数的主要功能就是确定这个位置有没有符合规则的数填进去,没有则说明数独无解,否则就填入数据并更改对应的bool值。编写一个程序,通过填充空格来解决数独问题。
2023-09-12 12:45:11
114
原创 36. 有效的数独
请你判断一个9 x 9的数独是否有效。只需要,验证已经填入的数字是否有效即可。1-91-91-93x3'.'board =trueboard =false除了第一行的第一个数字从改为以外,空格内其他数字均与 示例1 相同。但由于位于左上角的 3x3 宫内有两个 8 存在, 因此这个数独是无效的。
2023-09-12 10:51:49
195
原创 34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)
给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1, -1]。你必须设计并实现时间复杂度为O(log n)的算法解决此问题。
2023-09-10 18:25:09
221
原创 33. 搜索旋转排序数组
本题主要难点在于控制时间复杂度在logn上,所以不可以直接遍历整个数组,或者先sort排序。观察题目,已知数据原先是升序的,经过旋转之后变成两段升序的排列了,这个时候我们只需要 先判断target可能在那一段升序序列中,就可以减少一般的比较次数了!只需要将其与nums[0]进行比较,target > nums[0]说明其一定在第一个升序排列中,反之就一定在第二个升序排列在,这里要注意的是,第二个排列的对比应当从末尾往前遍历。,则返回它的下标,否则返回。按升序排列,数组中的值。在预先未知的某个下标。
2023-09-10 16:20:43
63
原创 31. 下一个排列 (字典序法)
对于本题来说,就是从右到左寻找第一个破坏升序的数nums[pos - 1], 然后在遍历过的数里寻找比该数大的最小的一个,所例如遍历过的数为[7,6,4,3], nums[pos - 1]为5, 则5需要与6进行交换, 那么这时候如何找到6呢?如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的。刚学的组合数学知识正好用到,生成算法中的字典序法。
2023-09-09 16:25:34
214
原创 16. 最接近的三数之和
回想一下之前的处理,我们比较喜欢排序好的数组,所以我们先使用sort进行排序,三数之和的时候我们是先确定一个值,然后剩下的两个值通过求两数之和的思路来确定,借鉴这种思想,我们先确定一个i即nums[i]的值,left从i +1开始,right从n - 1开始,记录三者之和sum存到ans中。本题类似于求三数之和的问题,首先双指针肯定跑不了,但需要考虑的是,在每次找到一个组合的时候都要比较其和与target的差值,并记住最小的一个当做最后的输出。中选出三个整数,使它们的和与。假定每组输入只存在恰好一个解。
2023-09-09 15:34:30
81
原创 18. 四数之和(使用三数之和的思想)
给你一个由n个整数组成的数组nums,和一个目标值target。请你找出并返回满足下述全部条件且的四元组bcd你可以按返回答案。
2023-09-09 14:56:38
82
原创 15、三数之和---引申出2sum--100sum问题解法
3sum问题可以借助twosum问题来理解。三个数的和为0,我们可以首先确定一个数x,那剩下的两个数要做到与这个数的和为0,就转化为了twosum问题,即求两个数之和为-x就可以了。传入参数部分要改一改,多传入一个变量begin,令left从begin开始。不同的三元组是 [-1,0,1] 和 [-1,-1,2]。这种方式在力扣竟然超时!注意,输出的顺序和三元组的顺序并不重要。答案中不可以包含重复的三元组。唯一可能的三元组和不为 0。唯一可能的三元组和为 0。,留作参考吧,后期再优化。
2023-09-07 18:07:05
95
原创 167. 两数之和 II - 输入有序数组 (引申出带有重复情况)
接下来只需要解决重复的问题即可,出问题的地方在于 sum == target 条件的 if 分支,当给 res 加入一次结果后,left和 right 应该在改变 1 的同时跳过所有重复的元素:只需要使用一个while循环即可,需要注意的是要始终保持left < right。对于这个问题,题目说明了仅存在一个有效答案,就不需要考虑最后得到的数组重复问题了,首先考虑暴力解法,即弄两个for循环遍历就可以了,但时间复杂度高,且没有用到数组有序这一总要信息,那么这种twosum问题如何优化呢?
2023-09-07 17:06:13
175
原创 主成分分析PCA学习(部分公式不理解,矩阵求导知识)
主成分分析的本质:向量换基。主成分分析同归对投影距离方差的运用将降维问题转化成了求最值问题。
2023-04-03 11:49:35
154
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅