leecodecode【线性DP3】【2026.6.8打卡-java版本】
2026/6/9 9:55:41 网站建设 项目流程

最长公共子序列

要点:dp[i][j]

class Solution { public int longestCommonSubsequence(String text1, String text2) { //二维数组 int n = text1.length(); int m = text2.length(); int[][] dp = new int[n+1][m+1]; for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ if(text1.charAt(i) == text2.charAt(j)){ dp[i+1][j+1] = dp[i][j] +1; }else{ dp[i+1][j+1] = Math.max(dp[i+1][j], dp[i][j+1]); } } } return dp[n][m]; } }

编辑距离

要点:

dp[i+1][j+1] = Math.min(dp[i+1][j]+1, Math.min(dp[i][j+1]+1, dp[i][j]+1));

代码:

class Solution { public int minDistance(String word1, String word2) { //二维dp int n = word1.length(); int m = word2.length(); int[][] dp = new int[n+1][m+1]; for(int i = 0; i <= n; i++){ dp[i][0] = i; } for(int j = 0; j <= m; j++){ dp[0][j] = j; } for(int i = 0; i<n; i++){ for(int j = 0; j < m; j++){ if(word1.charAt(i) == word2.charAt(j)){ dp[i+1][j+1] = dp[i][j]; }else{ dp[i+1][j+1] = Math.min(dp[i+1][j]+1, Math.min(dp[i][j+1]+1, dp[i][j]+1)); } } } return dp[n][m]; } }

最长递增子序列

要点:dp【i],遍历 j<i,

class Solution { public int lengthOfLIS(int[] nums) { //dp int n = nums.length; int[] dp = new int[n+1]; int max = 0; for(int i = 0; i < n; i++){ dp[i] = 1; for(int j = 0; j < i; j++){ if(nums[j] < nums[i]){ dp[i] = Math.max(dp[i], dp[j]+1); } } max = Math.max(dp[i], max); } return max; } }

随机知识

一、消息队列的作用(必问)

核心题:你项目里为什么要用消息队列?解决了什么问题?

面试官为什么这么问?
这题考的是你对 MQ 存在价值的理解。我要看你是否遇到过同步处理太慢、系统耦合太紧的问题,并知道用 MQ 的削峰、异步、解耦三大作用来解决。

希望听到怎样的回答:

  • 三大核心作用,每个都配上例子:
    • 异步处理:比如用户注册后要发短信、发欢迎邮件,同步调用会拖慢注册接口。扔给 MQ,注册立刻返回,短信/邮件后台慢慢发。
    • 应用解耦:订单系统生成订单后,需要通知库存系统和积分系统。如果直接调接口,库存挂了订单会失败。改成发消息,订单系统不需要知道谁在消费,上下游独立。
    • 流量削峰:秒杀活动时,大量请求一瞬间涌入,直接打 DB 会挂。请求先写 MQ,后端服务按能力拉取处理,平滑高峰。

候选人
消息队列在项目里主要解决三类问题:同步耗时、系统耦合和突发流量冲击。这对应了消息队列最核心的三个作用:异步处理、应用解耦、流量削峰。我结合实际业务分别说一下。


第一,异步处理,提升接口响应速度。

很多业务操作其实不需要立刻做完。比如用户注册后,我们需要送积分、发欢迎邮件、发短信通知。如果这些操作全挤在注册接口里同步完成,接口响应速度会变得特别慢,而且积分系统或邮件服务如果稍微慢一点,整个注册就失败了。

引入消息队列后,注册接口只需把用户信息写入数据库,然后向 MQ 发一条“用户注册成功”的消息,就直接返回给前端。积分系统、邮件服务这些下游慢任务各自订阅这条消息,后台异步处理。注册接口耗时从按秒算直接降到几十毫秒,用户体验大幅提升,系统可靠性也更高。


第二,应用解耦,降低系统间依赖和故障风险。

复杂系统里,服务之间往往存在上下游依赖。比如订单生成后,需要通知积分系统加积分、通知物流系统发货、通知数据部门做统计。如果不引入中间件,订单系统就得直接调用这三个下游系统的接口。一旦某下游系统挂了或响应超时,订单就可能创建失败,形成故障雪崩。

用消息队列就完全不同。订单系统只负责把“订单已生成”这条消息投递出去,至于谁读这条消息、怎么处理,它完全不用关心。积分、物流、统计这些下游系统各自订阅同一个 Topic,互不影响。以后若要新增一个消费方,例如上线新的推荐系统,也只需新增订阅消费者,无需修改订单系统的任何代码。这就是真正的低耦合、高扩展。


第三,流量削峰,在高并发下保护核心服务。

大促或秒杀场景下,瞬时流量可能是平时的几十倍。比如秒杀活动开始时,几万个请求在一秒内同时冲过来扣减库存、写入订单。如果直接打到数据库,连接数瞬间被打满,轻则响应超时,重则系统宕机。

引入消息队列作为缓冲池,后端用有限的消费者按固定速度去拉取消息处理。那些超出处理能力的请求并不是被丢弃或直接返回失败,而是在队列中排队等待,平滑了高峰流量冲击。我们还可以配合令牌桶或限流,保证数据库的负载始终在安全水位,而不是随瞬时流量一起抖动。

通过异步、解耦、削峰三大手段,消息队列让系统的响应更快、更稳、更容易扩展。这也是为什么在中大型系统里,消息队列几乎是基础设施级别的组件。

碎碎念:后续会更新每天学习的八股和算法 题,开始准备秋招的第29天。努力连续更新100天!以后每天就按,秋招项目【java+agent】,科研,必做项目,算法,八股,锻炼身体来总结。

总结:脑子太笨了,玩太久了,感觉现在接受和思考的能力太差了

1.算法要系统过一遍【灵神】20/27【早上】大概1.5h

2.秋招项目,【java】开始实际看业务,2.9/10;无

【agent】还在学,整理cc,无

3.科研要跑一下,3h【下午】

4.检测项目也得总结文档,无

6.背八股,无

7.锻炼身体,无

反思:今天真的一点不想学习,太依赖ai了有时候,自己现在理解能力非常的差,要自己多思考,不能一到要思考的地方就跳过放弃。要有逻辑思维的做事情,少玩手机少刷短视频,学习就好好学习,不要一心二用,时间不多了,学习就要有效学习。感觉也是最近睡太少了,要保证身体健康。今天晚上没学习回来就睡觉了。明天继续加油

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询