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

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

旋转图像要点【i】【j] [n-1-j-】【i]class Solution { public void rotate(int[][] matrix) { //[i][j] [n-1-j][i] int n matrix.length; for(int i 0; i n/2; i){ for(int j i; j n-1-i; j){ int temp matrix[i][j]; matrix[i][j] matrix[n-1-j][i]; matrix[n-1-j][i] matrix[n-1-i][n-1-j]; matrix[n-1-i][n-1-j] matrix[j][n-1-i]; matrix[j][n-1-i] temp; } } } }最小覆盖长度要点 双指针两个mapclass Solution { public String minWindow(String s, String t) { if (s null || t null || s.length() 0 || t.length() 0) { return ; } // 记录需要的字符及其数量 MapCharacter, Integer need new HashMap(); for (char c : t.toCharArray()) { need.put(c, need.getOrDefault(c, 0) 1); } // 记录窗口中的字符及其数量 MapCharacter, Integer window new HashMap(); int left 0, right 0; int valid 0; // 窗口中满足need条件的字符种类数 // 记录最小覆盖子串的起始索引和长度 int start 0; int minLen Integer.MAX_VALUE; while (right s.length()) { // 扩大窗口 char c s.charAt(right); right; // 更新窗口数据 if (need.containsKey(c)) { window.put(c, window.getOrDefault(c, 0) 1); // 如果窗口中该字符的数量达到need中需要的数量则valid1 if (window.get(c).equals(need.get(c))) { valid; } } // 当窗口已包含t的所有字符时尝试缩小窗口 while (valid need.size()) { // 更新最小覆盖子串 if (right - left minLen) { start left; minLen right - left; } // 缩小窗口 char d s.charAt(left); left; // 更新窗口数据 if (need.containsKey(d)) { // 如果窗口中该字符的数量等于need中需要的数量则valid-1 if (window.get(d).equals(need.get(d))) { valid--; } window.put(d, window.get(d) - 1); } } } return minLen Integer.MAX_VALUE ? : s.substring(start, start minLen); } }轮转数组要点全反转 然后前面反转然后后面反转class Solution { public void rotate(int[] nums, int k) { int n nums.length; k k %n; reverse(nums, 0, n-1); reverse(nums, 0, k-1); reverse(nums, k, n-1); } public void reverse(int[] nums, int i, int j){ while(i j){ int temp nums[i]; nums[i] nums[j]; nums[j] temp; i; j--; } } }除了自身以外数组的乘积要点左右的数组维护class Solution { public int[] productExceptSelf(int[] nums) { int[] Lsums new int[nums.length]; int[] Rsums new int[nums.length]; Lsums[0] nums[0]; for(int i 1; inums.length; i){ Lsums[i] Lsums[i-1]*nums[i]; } Rsums[nums.length-1] nums[nums.length -1]; for(int j nums.length - 2; j0; j--){ Rsums[j] Rsums[j1]*nums[j]; } int[] ans new int[nums.length]; for(int i 0; i nums.length; i){ if(i 0){ ans[i] Rsums[1]; }else if(i nums.length - 1){ ans[i] Lsums[i-1]; }else{ ans[i] Rsums[i1] * Lsums[i-1]; } } return ans; } }随机知识设计模式高频必问 2-3 个核心题你用过哪些设计模式项目中怎么用的面试官为什么这么问考察代码设计能力看你写代码是不是只求“能跑就行”。实习生能说出 3 种以上并讲清应用场景就是优秀。需要掌握的模式及回答方向模式一句话核心你的结合场景单例模式全局唯一实例Spring 的 Bean 默认就是单例我项目里用枚举做全局配置类工厂模式创建对象不暴露 new根据大模型类型创建不同的调用器策略模式封装算法可互换不同模型接口对应不同策略实现避免 if-else代理模式控制访问增强功能Spring AOP 就是动态代理事务就是这么实现的观察者模式一对多通知Spring 的事件机制比如用户注册完发邮件通知模板方法模式定义骨架子类实现细节JdbcTemplate、RedisTemplate都是面试官爱追问单例双重检查锁为什么加 volatile→ 你已经知道禁止指令重排Spring 用了哪些设计模式→ 至少能说代理、模板方法、单例、工厂准备建议不用单独背上面每个点都能和 Spring 框架、你的项目关联讲出来。候选人好的。设计模式本质上是解决特定问题的成熟方案我在项目里用过六种每种都有明确的应用场景。第一种单例模式——全局唯一实例。单例的核心是保证一个类在整个应用中只有一个实例节省资源并保证状态一致。Spring 容器中的 Bean 默认就是单例的这是最典型的应用。我项目里用枚举单例管理全局配置枚举天然防反射和反序列化破坏是最安全的方式。实现上优先用枚举非枚举场景用静态内部类持有实例保证延迟加载和线程安全。重点补充如果面试官追问双重检查锁定DCL我需要说明 DCL 中volatile的作用。instance new Singleton()底层拆成分配内存、初始化对象、将引用指向内存三步JVM 可能重排让引用先指向未初始化好的内存。另一个线程在第一次检查时发现引用不为 null直接返回未初始化完成的对象导致程序出错。volatile通过内存屏障禁止这种重排序保证对象完全初始化后才被外界看到。第二种工厂模式——解耦对象创建。当一个对象的创建逻辑比较复杂或者需要根据条件创建不同实现类时我用工厂模式。它分简单工厂、工厂方法和抽象工厂三个层次。简单工厂用一个工厂类根据参数返回不同的产品实例工厂方法是定义一个创建对象的接口让子类决定实例化哪个类抽象工厂用于创建一系列相关的产品族。在面试 Agent 项目里大模型调用层正是用得上的场景。不同模型GPT-4、Claude、文心一言接口不同、认证方式不同。定义一个统一的模型调用接口然后为每个模型写一个具体实现类再用工厂根据配置动态创建对应的调用器。新增模型只需添加实现类和工厂分支业务代码零改动。第三种策略模式——消除 if-else。策略模式定义一系列算法把它们封装起来让它们可以互相替换与工厂模式的区别在于前者关注“创建”后者关注“行为互换”。当代码里出现大量 if-else 或 switch 判断行为逻辑时策略模式就很有用。项目里面试题评分模块用了策略模式。不同题目类型算法题、系统设计题、行为面试题的评分规则完全不同。定义统一的评分策略接口每种题型实现对应的策略类再用一个工厂或 Map 根据题目类型获取对应策略执行。新增题目类型只需增加一个策略实现类无需修改原有评分逻辑完全符合开闭原则。第四种代理模式——无侵入增强。代理模式给一个对象提供一个代理对象由代理控制对原对象的访问核心作用是在不修改原始类的情况下增加额外的功能。Spring AOP 就是最典型的应用。项目里的事务管理、日志记录都靠 AOP 实现。比如 Transactional 注解Spring 为加了该注解的 Bean 生成代理对象在方法调用前后自动开启和提交/回滚事务。业务代码完全无感知干净纯粹。日志切面记录请求耗时和异常信息同样不侵入业务方法。第五种模板方法模式——定义算法骨架。模板方法定义一个算法的骨架把一些步骤延迟到子类实现。Spring 里的 JdbcTemplate、RedisTemplate 就是模板方法模式的典型应用。JdbcTemplate.execute()定义了“获取连接 → 执行 SQL → 处理结果集 → 关闭连接”的固定流程SQL 语句和结果映射由传入的回调或匿名子类实现整体流程由模板严格控制。第六种观察者模式——一对多通知。观察者模式定义对象间的一对多依赖关系当主题对象状态改变时所有依赖它的观察者都会收到通知并自动更新。Spring 的事件机制就是观察者模式的标准实现。在一个订单服务里订单支付成功后发布PaymentSuccessEvent积分服务监听该事件自动增加积分短信服务监听该事件发送支付成功通知。订单服务只负责发布事件不关心谁在监听完全解耦。新增消费者只需添加监听器无需修改订单服务代码。还可以用Async把事件处理变成异步不阻塞主流程。面试官追问Spring 用了哪些设计模式Spring 框架大量使用设计模式常用的有代理模式AOP、单例模式默认 Bean 作用域、工厂模式BeanFactory、模板方法模式JdbcTemplate、RestTemplate、观察者模式Spring Event、ApplicationListener、责任链模式拦截器链、Filter Chain。这些模式共同支撑起 Spring 的 IoC、AOP 等核心能力。总结设计模式不是炫技的工具而是解决实际问题的套路。我用单例管理全局资源、工厂解耦对象创建、策略消除冗长 if-else、代理无侵入增强功能、模板方法统一复杂流程、观察者解耦事件通知。核心原则是对扩展开放对修改关闭保证代码的可维护性和可扩展性。设计模式的价值在于选择而不是堆砌——如果一个场景不需要用模式强行套用反而让代码变得更复杂。碎碎念后续会更新每天学习的八股和算法 题暑假实习找不到了开始准备秋招的第10天。努力连续更新100天把项目收尾接个agent看看然后要开始搞科研要不然毕不了业了。时间不够用了哇。好睡前再看一下八股吧该背背
http://www.gsyq.cn/news/1334896.html

相关文章:

  • 整合Taotoken多模型能力为智能客服场景提供备选方案
  • 图书馆自动化管理系统选型:智慧图书馆建设方案、智慧图书馆管理系统、智能图书馆、机关单位职工书屋、电子图书阅读平台选择指南 - 优质品牌商家
  • Hermes Agent 深度指南:一个会“自我进化“的 AI Agent,通俗易懂全解析
  • RT-Thread PIN设备驱动:从裸机GPIO到RTOS统一管理的架构解析与实践
  • ARM Trusted Firmware (ATF) 入门:安全启动与可信执行环境实战指南
  • 中间件简单题目教学
  • 2026年降AI工具万方检测专项测试:五款工具万方AIGC检测通过率完整横评
  • ComfyUI-Impact-Pack V8终极指南:图像增强插件完整安装与使用教程
  • 5分钟掌握AKShare:零成本获取全球金融数据的Python神器
  • 北光恒电:安捷伦6812B/6813B电源不开机、输出不正常故障排查
  • 拒绝盲从与踩坑:如何用“高性价比”工具撬动AI搜索的真实红利
  • 从张宇考研课到Matlab实战:手把手教你用Grunwald-Letnikov公式实现分数阶求导
  • 告别手动Excel!用Plink 1.9快速搞定GWAS数据杂合度分析(附实战代码)
  • 在CentOS 7.9上从零搭建Synopsys VCS 2018环境(含SCL、Verdi)保姆级避坑指南
  • 录bag包和播放bag包,将bag中的图片提出出来
  • STM32串口打印的“坑”你踩过几个?从fputc重定向到解决中文乱码、数据丢失的完整指南
  • 告别root权限烦恼:用非root用户kingbase在CentOS 7上安全部署人大金仓V8数据库
  • 保姆级教程:从零设计一个EG2133自举电路,手把手教你计算和选型自举电容与二极管
  • 我做了一个仅有 1.3 MB 的 macOS 原生 AI 助手:AskNow
  • 软考高项案例分析6:项目资源管理
  • CANN ops-transformer 的 FlashAttention:把大模型的记忆从 32GB 压到 8GB,怎么做到的
  • 定向井轨迹控制关键技术:200℃高温定向传感器的随钻测量应用指南
  • 避开TinyML的C++坑:手把手教你读懂TensorFlow Lite Micro的测试代码与宏
  • RK3399与i.MX8M Plus核心板如何打造专业视频会议终端?
  • 深圳市制造业创新中心申报流程
  • NTP与SNTP协议解析:构建分布式系统时间同步的基石
  • 影刀RPA跨境店群自动化实战:Python协同Chromium打破风控“垄断”的高并发调度系统架构
  • 2026年开源广告SDK:APP广告变现、APP广告收益提升、APP想接入广告、SDK变现、工具APP收益提升选择指南 - 优质品牌商家
  • 毕业设计作品精选【芳心科技】基于STM32的智能家庭快递柜
  • ViMax:AI导演、编剧、制片人一体化——颠覆传统视频制作的智能体革命