当前位置: 首页 > article >正文

topcode【随机算法题】【2026.5.24打卡-java版本】

最长有效括号要点栈push下标class Solution { public int longestValidParentheses(String s) { //栈 //放前哨-1 DequeInteger stack new ArrayDeque(); stack.push(-1); int ans 0; for(int i 0; i s.length(); i){ char c s.charAt(i); if(c (){ stack.push(i); }else{ stack.pop(); if(stack.isEmpty()){ stack.push(i); }else{ ans Math.max(ans, i - stack.peek()); } } } return ans; } }下一个排列要点从后往前找第一个小的数再找比这个数大一点的数换位置旋转class Solution { public void nextPermutation(int[] nums) { //找下降点 int i nums.length - 1; while((i-1)0 nums[i]nums[i-1] ){ i--; } if(i-1 0){ int j nums.length -1; while(nums[j]nums[i-1] j0){ j--; } swap(nums,i-1,j); } reverse(nums, i); } private void swap(int[] nums, int i, int j) { int temp nums[i]; nums[i] nums[j]; nums[j] temp; } private void reverse(int[] nums, int start) { int end nums.length - 1; while (start end) { swap(nums, start, end); start; end--; } } }数据流的中位数要点大顶堆小盯堆分成两边class MedianFinder { // leftMaxHeap: 存放较小的一半数堆顶是这一半中的最大值大顶堆 private PriorityQueueInteger leftMaxHeap; // rightMinHeap: 存放较大的一半数堆顶是这一半中的最小值小顶堆 private PriorityQueueInteger rightMinHeap; public MedianFinder() { // 大顶堆使用 lambda 表达式 (a, b) - b - a让大的元素在堆顶 leftMaxHeap new PriorityQueue((a, b) - b - a); // 小顶堆默认排序小的元素在堆顶 rightMinHeap new PriorityQueue(); } public void addNum(int num) { // 情况1左半边为空或者 num 小于等于左半边的最大值 // 说明 num 应该放在左半边较小的一半 if (leftMaxHeap.isEmpty() || num leftMaxHeap.peek()) { leftMaxHeap.offer(num); // 平衡左半边最多只能比右半边多1个元素 // 如果左半边比右半边多了2个以上就把左半边的最大值移到右半边 if (leftMaxHeap.size() rightMinHeap.size() 1) { rightMinHeap.offer(leftMaxHeap.poll()); } } // 情况2num 大于左半边的最大值 // 说明 num 应该放在右半边较大的一半 else { rightMinHeap.offer(num); // 平衡右半边的大小不能超过左半边 // 如果右半边比左半边还大就把右半边的最小值移到左半边 if (rightMinHeap.size() leftMaxHeap.size()) { leftMaxHeap.offer(rightMinHeap.poll()); } } } public double findMedian() { // 如果左半边多一个元素总数为奇数中位数就是左半边的最大值 if (leftMaxHeap.size() rightMinHeap.size()) { return leftMaxHeap.peek(); } // 如果两边数量相等总数为偶数中位数是左最大 右最小/ 2 return (leftMaxHeap.peek() rightMinHeap.peek()) / 2.0; } }柱状图中最大的矩形要点栈哨兵高度*宽度import java.util.*; class Solution { public int largestRectangleArea(int[] heights) { if (heights null || heights.length 0) { return 0; } int n heights.length; // 创建一个新数组在原数组前后各添加一个0方便处理边界 int[] newHeights new int[n 2]; for (int i 0; i n; i) { newHeights[i 1] heights[i]; } // 前后哨兵为0 newHeights[0] 0; newHeights[n 1] 0; StackInteger stack new Stack(); int maxArea 0; for (int i 0; i newHeights.length; i) { // 当当前柱子高度小于栈顶柱子高度时 while (!stack.isEmpty() newHeights[i] newHeights[stack.peek()]) { // 弹出栈顶柱子 int height newHeights[stack.pop()]; // 计算宽度右边界i左边界是新的栈顶元素 int left stack.isEmpty() ? -1 : stack.peek(); int width i - left - 1; maxArea Math.max(maxArea, height * width); } // 将当前索引入栈 stack.push(i); } return maxArea; } }寻找两个正序数组的中位数要点最笨的方法class Solution { public double findMedianSortedArrays(int[] a, int[] b) { int m a.length; int n b.length; int[] merged new int[m n]; System.arraycopy(a, 0, merged, 0, m); System.arraycopy(b, 0, merged, m, n); Arrays.sort(merged); int s m n; int k (s - 1) / 2; return s % 2 0 ? merged[k] : (merged[k] merged[k 1]) / 2.0; } }随机知识二、分布式系统理论概念级加分项核心题什么是 CAP 定理BASE 理论是什么分布式事务了解吗面试官为什么这么问现在很少有系统真单机实习生至少要知道 CAP 和 BASE证明你有分布式意识。希望听到的回答CAPC一致性所有节点同一时间看到同一数据A可用性每个请求都能得到非错误的响应P分区容错性网络分区时系统仍能工作分布式系统只能同时满足两个P 是必须的所以要么 CPZooKeeper要么 APEurekaBASEBasically Available基本可用Soft state软状态Eventually consistent最终一致性是和 ACID 的对照用于 NoSQL 和分布式缓存场景分布式事务概念2PC、TCC、本地消息表、RocketMQ 事务消息知道名字和大概思路就行不要求细节。结合项目说的话“我们用 RabbitMQ 做异步处理保证投递可靠就是基于 BASE 思想实现最终一致性不强求强一致。”候选人:好的。这三个概念是分布式系统的基石,CAP是理论约束,BASE是工程妥协,分布式事务是具体实践。我从CAP讲起,再说明BASE如何放宽约束,最后介绍几种常见的分布式事务方案。第一,CAP定理——分布式系统的“不可能三角”。CAP定理告诉我们:一个分布式系统最多只能同时满足以下三个特性中的两个。C是一致性。所有节点在同一时刻看到的数据完全相同。客户端向节点A写入数据后,立即去节点B读取,节点B必须返回最新写入的值。对于客户端来说,系统表现得就像只有一个节点一样,这是最理想但也最难实现的状态。A是可用性。每个请求都能得到非错误的响应,但不保证返回的数据是最新的。系统可能返回旧数据,但必须响应。P是分区容错性。当网络发生分区时,也就是部分节点之间无法通信,系统仍然能继续工作。网络分区在分布式系统中是不可避免的,交换机故障、光缆被挖断、网络抖动都可能导致分区。所以P是分布式系统的“生存底线”,任何跨网络的节点通信都必须考虑P。为什么只能三选二关键是:当网络分区发生时,系统必须在C和A之间做选择。假设系统有节点A和节点B,它们之间网络断了。客户端向A发送写请求。如果系统选择保证一致性,A必须拒绝这次写入,因为它无法把数据同步给B,于是牺牲了可用性——这就是CP系统。如果系统选择保证可用性,A接受写入并返回成功,但B此时无法同步到新数据。客户端访问A看到新数据,访问B看到旧数据,两个节点不一致——这就是AP系统。没有网络分区的时候,系统可以同时满足C和A。一旦分区发生,就必须在两者之间取舍。典型产品的选择ZooKeeper是典型的CP系统。当Leader节点故障时,集群会暂停服务进行重新选举,期间拒绝所有请求,保证数据一致性。这适合配置管理、分布式锁这类对一致性要求严格的场景。Eureka是典型的AP系统。服务之间有过期检查,但网络分区时优先保证服务可用,允许各节点数据短暂不一致,适合服务注册发现的场景,宁可让调用方拿到可能过期的服务列表,也不能停止服务。Redis本身设计偏向AP。主从复制是异步的,主节点故障切换时可能有短暂的数据丢失窗口。Redis Cluster也是去中心化设计,优先保证分片可用,不保证多节点间强一致性。第二,BASE理论——对CAP的工程妥协。CAP定理要求我们在C和A之间做选择,但现实业务往往不需要绝对的强一致性。BASE理论就是针对AP系统的一种实践指导,它是对ACID(原子性、一致性、隔离性、持久性)严格事务模型的放松。BA是基本可用。系统出现故障时允许损失部分可用性,但核心功能仍可用。比如双十一高峰时,阿里会关闭退款、账单明细等非核心功能,保证下单和支付链路正常。用户虽然不能查去年的订单,但能完成购买。S是软状态。允许系统中的数据存在中间状态,不要求所有节点数据时刻一致。比如订单支付成功后,订单状态从“待支付”变成“支付成功”,但积分系统可能还没有加上积分。这个中间状态窗口可以接受。E是最终一致性。不强求实时一致,但保证经过一段时间后,所有副本最终达到一致状态。比如用户用积分兑换了优惠券,几分钟后积分才被冻结,最终结果正确就行。BASE和ACID不是对立关系,而是不同场景的选择。金融转账、账户余额必须是ACID强一致;社交帖子、点赞数、商品库存展示这些场景,BASE的最终一致性完全可接受。CAP告诉我们“没有完美的分布式系统”,BASE则回答了“在不完美的系统中,如何让业务还能正常运转”。第三,分布式事务——如何跨服务保证最终一致性。单体应用用数据库自带的事务保证ACID。微服务架构下,一笔业务跨越多个服务实例和多个数据库,就需要分布式事务方案。我对以下几种方案各有理解:2PC两阶段提交。协调者先问所有参与者“能提交吗”(准备阶段),所有参与者都回复可以,再通知“正式提交”(提交阶段)。问题是协调者单点故障、参与者同步阻塞时间长、性能最差。XA协议是2PC的标准实现,但生产环境很少用在核心链路上。TCC补偿事务。把操作拆成Try(预留资源)、Confirm(确认执行)、Cancel(取消回滚)三个阶段。每个参与方都要提供对业务的三段接口。比2PC灵活,但代码侵入性强,每个业务接口都要按TCC规范设计,开发成本高。本地消息表。服务的本地事务里同时写业务数据和消息表,用定时任务扫描未发送消息投递到MQ,消费方处理并回调确认。完全依赖本地事务保证原子性,不要求跨服务的实时协调,但需要消费方接口做成幂等。比较适合单体拆分或简单链路。RocketMQ事务消息。生产者先向MQ发一条半消息,然后执行本地事务。本地事务成功则提交半消息,失败则回滚半消息。MQ会定期反查生产者的本地事务状态来确认未知状态的消息。这是最佳生产实践,不需要消费者额外开发确认接口,RocketMQ自身承担事务反查的职责。项目中的实际选择我的项目用RabbitMQ实现最终一致性。核心链路是先写数据库确认业务成功,然后发消息到MQ。消费方从队列取出消息处理。需要考虑两种异常:发消息失败时,把待发送记录写入重试表,定时任务扫描补偿;消费处理失败时,重试几次仍失败转死信队列,人工介入处理。同时消费者做好幂等,用唯一业务键加数据库唯一索引来防止重复处理。这就是典型的BASE思想实践——不强求跨服务的实时强一致,但通过消息重试、死信兜底、幂等设计保证最终数据对齐。总结:CAP告诉我们分布式系统必须在一致性和可用性之间做取舍,P是必须满足的底线。BASE告诉我们大多数互联网业务可以接受最终一致性,用软状态换可用性和性能。分布式事务方案从强一致的2PC到弱一致的本地消息表再到事务消息,选择什么方案取决于业务对一致性的要求和对复杂性的容忍度。基本规律是:大部分场景用MQ加幂等实现最终一致性就够了,只有极少数的资金交易才需要强一致性的分布式事务框架介入。碎碎念后续会更新每天学习的八股和算法 题开始准备秋招的第14天。努力连续更新100天以后每天就按秋招项目【javaagent】科研必做项目算法八股锻炼身体来总结。今天又是啥也没干的一天一放假就啥也不想干项目还出了好多问题唉。总结不要放弃呀1.算法要系统过一遍【灵神】2.秋招项目【java可能ok】【agent继续加油】这周一定要搞完背面试八股了3.科研要跑一下4.必搞项目也得总结文档5.训练项目看看先选择好6.背八股7.锻炼身体【最后最后请相信自己可以的】————————————————

相关文章:

topcode【随机算法题】【2026.5.24打卡-java版本】

最长有效括号 要点&#xff1a;栈&#xff0c;push下标 class Solution {public int longestValidParentheses(String s) {//栈//放前哨-1Deque<Integer> stack new ArrayDeque<>();stack.push(-1);int ans 0;for(int i 0; i < s.length(); i){char c s.…...

5分钟上手:用LeaguePrank打造专属英雄联盟客户端

5分钟上手&#xff1a;用LeaguePrank打造专属英雄联盟客户端 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank 想要让你的英雄联盟客户端界面变得与众不同吗&#xff1f;LeaguePrank是一款基于官方LCU API开发的英雄联盟客户端美…...

《道德经》第二十章

本章以绝学无忧我独昏昏为核心&#xff0c;专讲体道者超越世俗价值、回归生命本源的精神境界&#xff0c;是老子自我写照式的抒情篇章。以“唯阿善恶相去几何”的追问破题&#xff0c;以“众人熙熙”与“我独泊兮”的强烈对比展开&#xff0c;最终以“贵食母”点明与道合一的生…...

华硕笔记本终极优化指南:如何用G-Helper轻量级工具全面提升使用体验

华硕笔记本终极优化指南&#xff1a;如何用G-Helper轻量级工具全面提升使用体验 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook…...

别再折腾VMware Tools了!用FileZilla+SSH搞定Windows与Ubuntu虚拟机文件互传(保姆级教程)

告别VMware Tools烦恼&#xff1a;SSHFileZilla实现跨平台文件传输全攻略 每次在Windows和Ubuntu虚拟机之间传输文件时&#xff0c;VMware Tools总是给你带来各种麻烦&#xff1f;安装失败、兼容性问题、功能受限...这些问题我都经历过。今天我要分享的是一种更稳定、更通用的…...

[特殊字符] 旋转排序数组中的高效搜索:从线性到二分查找的进阶之路

给定一个由不同元素构成的旋转排序数组&#xff08;原本是升序排列&#xff0c;但在某个未知点进行了旋转&#xff09;&#xff0c;要求快速找到目标元素的索引。如果不存在&#xff0c;则返回 -1。 示例 1&#xff1a; 输入&#xff1a;arr [5, 6, 7, 8, 9, 10, 1, 2, 3], …...

VMware Workstation Pro 17上快速体验Rocky Linux 8.6:从镜像下载到命令行登录的5分钟极简流程

VMware Workstation Pro 17极速部署Rocky Linux 8.6实战指南 当技术爱好者们想要快速搭建一个Linux测试环境时&#xff0c;繁琐的安装流程往往会消耗大量时间。本文将展示如何在VMware Workstation Pro 17上&#xff0c;用最短时间完成Rocky Linux 8.6的部署&#xff0c;从零开…...

告别无效编程!Cursor + 高德地图实战,解锁AI开发效率密码

当GitHub Copilot还在逐行补全代码时&#xff0c;Cursor已经让开发者用"聊天"的方式写项目了。从Cursor的四大快捷键到AI幻觉的实战应对&#xff0c;从Vibe Coding的前沿理念到高德地图的AI落地实践&#xff0c;本文将带你深度理解AI编程的现在与未来。 目录 一、Cur…...

终极指南:5分钟解决BepInEx插件框架的90%常见问题 [特殊字符]

终极指南&#xff1a;5分钟解决BepInEx插件框架的90%常见问题 &#x1f680; 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx BepInEx是Unity游戏社区中最受欢迎的插件框架之一&…...

Unity Mecanim根运动偏转原理与四层解决方案

1. 这个问题不是Bug&#xff0c;是Mecanim对“根运动”最诚实的执行你有没有遇到过这样的情况&#xff1a;一个角色模型在Unity里播放完一段奔跑动画后&#xff0c;整个人歪着身子斜插进地面&#xff1b;或者转身动画播完&#xff0c;角色原地旋转了360度还多转了45度&#xff…...

Appium Android自动化环境四段链路深度验证指南

1. 这不是装几个软件就能跑起来的事&#xff1a;为什么90%的人卡在环境搭建第一步 “PythonAndroidAppium App自动化测试环境搭建”——光看标题&#xff0c;很多人第一反应是&#xff1a;不就是装Python、配JDK、下Android SDK、跑个appium命令&#xff1f;我试过三次&#x…...

Charles断点调试:HTTP/HTTPS流量精准控制与实战避坑

1. 这不是“抓包”&#xff0c;是精准外科手术式调试 很多人第一次听说 Charles&#xff0c;第一反应是“哦&#xff0c;又一个抓包工具”。但如果你真这么用&#xff0c;大概率会在某次接口联调中卡住两小时&#xff0c;反复刷新页面却始终看不到后端返回的错误码&#xff0c…...

Burp Suite Professional实战卡点解析:HTTPS抓包、代理拦截与Intruder失效根因

1. 这不是“点开就能用”的工具&#xff0c;而是Web安全工程师的呼吸节奏很多人第一次打开Burp Suite Professional&#xff0c;盯着那个灰色的拦截开关发呆——明明浏览器配置了代理&#xff0c;HTTPS网站也装了CA证书&#xff0c;可流量就是不进Intruder、Repeater里不动如山…...

机器学习记忆化:平衡隐私、鲁棒性与公平性的核心技术挑战

1. 项目概述&#xff1a;当机器学习开始“记住”数据时&#xff0c;我们面临什么&#xff1f;在构建一个机器学习模型时&#xff0c;我们总希望它能像一位聪明的学生&#xff0c;不仅记住课本上的例题&#xff0c;更能理解背后的原理&#xff0c;从而在考场上举一反三。但现实往…...

基于Transformer的行星大气辐射传输仿真器:百倍加速与1%精度

1. 项目概述&#xff1a;用Transformer重塑行星大气辐射传输计算在行星科学和天体物理领域&#xff0c;模拟一颗行星的大气层如何吸收、散射和发射星光与热辐射&#xff0c;是理解其气候、演化乃至潜在宜居性的基石。这个过程的核心&#xff0c;就是辐射传输计算。无论是预测即…...

RL-ARM CAN迁移至CMSIS-RTOS的实践指南

1. 从RL-ARM CAN到CMSIS-RTOS的迁移背景在嵌入式开发领域&#xff0c;随着Keil MDK版本的迭代&#xff0c;RL-ARM库中的CAN组件逐渐向MDK Middleware过渡。许多基于MDK v4和早期v5版本开发的项目&#xff0c;都使用了RL-ARM库中的CAN驱动实现。当开发者需要将项目升级到较新的M…...

基于CNN的食双星参数快速预测:ebop_maven模型原理与应用

1. 项目概述与核心思路食双星&#xff0c;也就是我们常说的食变星&#xff0c;是研究恒星质量、半径、光度乃至演化过程的一把“金钥匙”。传统上&#xff0c;要解开这把锁&#xff0c;天文学家们得依赖像jktebop、PHOEBE这类物理模型拟合工具。这个过程就像解一个极其复杂的多…...

医学影像AI迁移学习:如何科学选择预训练数据集?

1. 项目概述在医学影像分析这个对精度和可靠性要求极高的领域&#xff0c;迁移学习已经成为解决数据稀缺问题的关键技术路径。其核心逻辑很直观&#xff1a;与其在有限的目标数据上从头训练一个复杂的深度学习模型&#xff0c;不如先在一个庞大的、通用的源数据集上“预训练”模…...

DeepMech:基于图神经网络与模板学习的化学反应机理预测框架

1. 项目概述与核心挑战 化学反应机理预测&#xff0c;简单来说&#xff0c;就是给定反应物&#xff0c;让计算机告诉我们这个反应具体是怎么一步步发生的。这就像看一部侦探电影&#xff0c;我们不仅要知道“谁是凶手”&#xff08;最终产物&#xff09;&#xff0c;更想搞清楚…...

如何快速掌握BepInEx插件框架:新手的完整避坑指南

如何快速掌握BepInEx插件框架&#xff1a;新手的完整避坑指南 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx BepInEx插件框架是Unity Mono、IL2CPP和.NET框架游戏的强大插件和模组…...

AssetRipper深度解析:Unity资源静态解析原理与工程化实践

1. 这不是“破解工具”&#xff0c;而是Unity开发者自己的资源归档方案AssetRipper这个名字&#xff0c;对很多刚接触Unity反编译的开发者来说&#xff0c;第一反应是“哦&#xff0c;那个能扒出美术资源的软件”。但如果你真这么用它&#xff0c;大概率会在三天内遇到贴图全黑…...

差分隐私公平性:基于群体自适应裁剪的DP-SGD改进算法

1. 项目概述与核心问题在构建负责任的人工智能系统时&#xff0c;我们常常面临一个看似矛盾的双重目标&#xff1a;既要保护用户数据的隐私&#xff0c;又要确保算法决策对不同群体是公平的。差分隐私&#xff08;Differential Privacy, DP&#xff09;技术&#xff0c;通过在训…...

别再死记硬背了!用这5个Unity粒子特效案例,彻底搞懂ParticleSystem核心参数

别再死记硬背了&#xff01;用这5个Unity粒子特效案例&#xff0c;彻底搞懂ParticleSystem核心参数粒子特效是游戏开发中不可或缺的视觉元素&#xff0c;从角色技能到环境氛围&#xff0c;都离不开ParticleSystem的灵活运用。但很多开发者在学习过程中陷入了一个误区——试图通…...

起点中文网字体反爬破解:WOFF2解析与PUA映射还原实战

1. 为什么起点中文网的字体反爬让90%的爬虫新手直接卡死在第一章&#xff1f;你写好requests&#xff0c;配好headers&#xff0c;连上代理池&#xff0c;信心满满地把起点中文网的小说页面curl下来——结果页面里本该是“第123章 天降神兵”的地方&#xff0c;赫然显示一串乱码…...

图神经网络在高能物理径迹重建中的应用:ETX4VELO项目解析

1. 项目概述&#xff1a;当图神经网络遇上高能物理径迹重建在大型强子对撞机&#xff08;LHC&#xff09;的LHCb实验中&#xff0c;每秒发生着数千万次质子-质子对撞&#xff0c;产生海量的次级粒子。这些粒子穿过探测器&#xff0c;留下一串串被称为“击中点”的信号。将这些离…...

Unity Library文件夹不是缓存,而是项目运行时核心枢纽

1. Library文件夹不是“缓存”&#xff0c;而是Unity工程的“神经系统”在Unity项目里&#xff0c;只要有人提“工程太大”&#xff0c;十有八九会冒出一句&#xff1a;“删掉Library文件夹不就完了&#xff1f;”——这话我听过不下五十遍&#xff0c;从刚入行的实习生&#x…...

告别‘找茬’游戏:用Python复现ALCNet,让红外小目标检测又快又准

从理论到实践&#xff1a;用Python实现ALCNet红外小目标检测全流程红外图像中的小目标检测一直是计算机视觉领域的难点——目标可能只有几个像素大小&#xff0c;却要对抗复杂的背景噪声。传统方法依赖人工设计的特征&#xff0c;而ALCNet通过膨胀局部对比度度量和循环移位加速…...

机器学习发现物理守恒量:从数据中挖掘对称性与不变性

1. 项目概述&#xff1a;当机器学习遇见物理学的“不变性”在物理学的世界里&#xff0c;对称性与守恒量是理解宇宙运行规律的基石。从牛顿时代起&#xff0c;我们就知道一个系统如果具有时间平移对称性&#xff0c;那么它的能量就是守恒的&#xff1b;如果具有空间平移对称性&…...

避坑指南:UE球形遮罩材质边缘闪烁、接缝问题分析与修复(附完整节点图)

深度解析&#xff1a;UE球形遮罩材质边缘闪烁与接缝问题的终极解决方案在虚幻引擎中实现球形遮罩效果是许多项目中的常见需求&#xff0c;但开发者们往往会遇到一个棘手的问题——遮罩边缘出现闪烁、锯齿或明显的接缝。这种现象不仅影响视觉效果&#xff0c;还可能破坏场景的整…...

SPTD:从训练动态中挖掘置信度信号,提升AI模型选择性预测能力

1. 项目概述&#xff1a;当模型学会说“我不知道”在医疗影像诊断、自动驾驶决策或者金融风控这些领域&#xff0c;一个AI模型的预测错误&#xff0c;代价可能是巨大的。我们通常希望模型不仅给出答案&#xff0c;还能告诉我们它对这个答案有多“确信”。这就是不确定性量化的核…...