先锋战士 level
获赞
152
粉丝
25
关注
61
看过 TA
1139
门头沟学院
2026
golang
IP属地:广东
永不放弃!
私信
关注
2025-11-01 20:54
门头沟学院 golang
算法: java中的缓存你是用哪些实现的?内存缓存?LRU算法淘汰机制?用java中的什么数据结构实现?设计一个简单的缓存的一个淘汰机制,比如说我举个例子,这个缓存只允许上限为十个,超出十个之后,你就要有一个淘汰机制策略?把老的剔除出去?import java.util.LinkedHashMap;import java.util.Map;/*** 简单LRU缓存(上限10个元素,满时淘汰最近最少使用的数据)* @param <K> 缓存键类型* @param <V> 缓存值类型*/public class SimpleLRUCache<K, V> {// 缓存底层存储:LinkedHashMap,开启“按访问顺序排序”private final LinkedHashMap<K, V> cacheMap;// 缓存最大容量(题目要求10)private final int MAX_CAPACITY = 10;// 构造函数:初始化LinkedHashMap,开启访问顺序排序public SimpleLRUCache() {// 参数说明:// 1. initialCapacity:初始容量(设为10,和最大容量一致,避免扩容)// 2. loadFactor:负载因子(0.75是默认最优值,避免频繁扩容)// 3. accessOrder:true=按访问顺序排序,false=按插入顺序排序(LRU必须设为true)cacheMap = new LinkedHashMap<>(MAX_CAPACITY, 0.75f, true) {// 重写此方法:判断是否需要删除最老元素@Overrideprotected boolean removeEldestEntry(Map.Entry<K, V> eldest) {// 当缓存size > 最大容量时,返回true,自动删除最老元素(eldest就是最老的)return size() > MAX_CAPACITY;}};}// 1. 存缓存:key不存在则新增,存在则更新值(更新后会自动移到链表尾部,标记为“最近使用”)public void put(K key, V value) {cacheMap.put(key, value);}// 2. 取缓存:获取值的同时,会自动把该元素移到链表尾部(标记为“最近使用”)public V get(K key) {return cacheMap.get(key); // 若key不存在,返回null}// 3. 删缓存:手动删除指定key的缓存public void remove(K key) {cacheMap.remove(key);}// 4. 辅助方法:查看当前缓存所有数据(用于测试,看淘汰效果)public void printCache() {System.out.println("当前缓存数据(顺序:从左到右是“最久未使用”到“最近使用”):");for (Map.Entry<K, V> entry : cacheMap.entrySet()) {System.out.print(entry.getKey() + "=" + entry.getValue() + " ");}System.out.println("\n当前缓存大小:" + cacheMap.size());}// 测试:验证LRU淘汰效果public static void main(String[] args) {SimpleLRUCache<Integer, String> cache = new SimpleLRUCache<>();// 1. 先存10个元素(达到最大容量)for (int i = 1; i <= 10; i++) {cache.put(i, "value" + i);}System.out.println("=== 存满10个元素后 ===");cache.printCache(); // 输出:1=value1 2=value2 ... 10=value10(1是最老,10是最新)// 2. 访问第3个元素(标记为“最近使用”,会移到尾部)cache.get(3);System.out.println("\n=== 访问key=3后 ===");cache.printCache(); // 输出:1=value1 2=value2 4=value4 ... 3=value3(3移到尾部)// 3. 再存第11个元素(触发淘汰,删除最老的key=1)cache.put(11, "value11");System.out.println("\n=== 存第11个元素后(触发淘汰) ===");cache.printCache(); // 输出:2=value2 4=value4 ... 11=value11(key=1被淘汰,size保持10)}}// 伪码:手动实现LRU缓存(上限10)class SimpleLRUCache {// 缓存实体:存key、value、最后访问时间戳class CacheItem {K key;V value;long lastAccessTime; // 毫秒级时间戳,记录最后访问时间}CacheItem[] cacheArray; // 存储缓存的数组(大小10)int currentSize; // 当前缓存元素个数// 初始化:数组大小10,currentSize=0function SimpleLRUCache() {cacheArray = new CacheItem[10];currentSize = 0;}// 存缓存function put(K key, V value) {1. 检查key是否已存在:- 若存在:更新对应value,同时更新lastAccessTime为当前时间;- 若不存在:a. 若currentSize < 10:直接把新CacheItem放入数组,currentSize+1;b. 若currentSize == 10:找出数组中lastAccessTime最小的元素(最久未使用),替换成新CacheItem;}// 取缓存function get(K key) {1. 遍历数组找对应key:- 若找到:更新其lastAccessTime为当前时间,返回value;- 若没找到:返回null;}// 淘汰逻辑:在put满10个时,调用此方法找最久未使用元素function findOldestItem() {1. 遍历数组,记录lastAccessTime最小的元素索引;2. 返回该元素索引,用于后续替换;}}
0 点赞 评论 收藏
分享
2025-11-02 15:52
已编辑
门头沟学院 golang
10月29日 17:00两位面试官轮番拷打,面试官提醒我说话大声一点第一位面试官登场:1.redis怎么保证数据的一致性?2.kafka中的partition的作用是什么?3.mq怎么确保消息的一个可靠传输呢?(如何保证消息不丢失)?4.spring boot中 怎么去配置一个多数据源呢?5.多数据源,怎么去做动态路由呢?6.在spring Aop中,你认为是通过哪一种设计模式去实现的?7.spring中的单例,有哪两种实现方式?8.在应用中,使用工厂模式做设计的场景吗?9.在支付场景中,会用到签名,你能说一下这个签名的主要用途和意义?10.常见的签名算法?11.mysql中有一个主键,和唯一键有什么区别吗?12.主键和唯一键能是同一个东西吗,能是同一个吗?13.一个表的主键必须是唯一的吗?14.唯一键可以包含null值吗?15.联合索引,(a,b,c) 你判断哪些条件是生效的,ab, bc, ac16.商户表,5000w以上了,但由于是之前的一些原因,它还是一个单表。基于以上场景,希望你提出一些优化的方案,为后续的这个系统逐渐地扩容,提供一些技术上的支持。你能从数据库这个方面,给出一些结构性的建议吗?17.数据库,从部署这个层面来讲,没错,但可以有一些更专业的术语。就是比如数据库,你针对这个架构上来考虑,你觉得有哪些合适的数据库架构可以去做调整的?18.主从数据库,你怎么理解这个组成的?19.读写分离的判断依据,什么时候该采用读写分离的是比较合适的?读写比例是多少?(1:5)第二位面试官登场:20.微服务有什么好处?21.既然他拆这么多应用?以前可能一次调用就要解决的事情,现在换了这么多,但是耗时增加了,这种情况怎么理解?22.比如以前单体应用,你进来一笔请求,如果错了,就在一个应用里面定位到问题。现在说你有很多次调用,很多节点,这种问题的排查该怎么做呢?23.微服务Restful风格,有哪几种请求?分别有什么区别?这样设计的原理是什么?24.两个接口之间不匹配,用什么设计模式?25.怎么利用AI去排查错误26.java里面有哪些锁?27.怎么去创建线程池?28.线程池的7大核心参数?拒绝策略?29.java里面异常的分类?30.有哪些框架实现内存缓存?算法:java中的缓存你是用哪些实现的?内存缓存?LRU算法淘汰机制?用java中的什么数据结构实现?设计一个简单的缓存的一个淘汰机制,比如说我举个例子,这个缓存只允许上限为十个,超出十个之后,你就要有一个淘汰机制策略?把老的剔除出去?没有反问环节
0 点赞 评论 收藏
分享
2025-11-01 15:52
门头沟学院 golang
在线笔试,10月24日发的,10月26日晚上做的30道八股选择题+2道算法题1.你将得到一个仅能有左括号和右括号组成的字符串 x。你的任务是发现字符串中存在几对匹配的括号。public class BracketMatchCounter {// 计算括号字符串中的匹配对数public static int countMatchPairs(String s) {int leftCount = 0;   // 记录未匹配的左括号数量int matchPairs = 0;  // 记录最终匹配的括号对数// 遍历字符串的每个字符for (int i = 0; i < s.length(); i++) {char c = s.charAt(i);if (c == '(') {// 遇到左括号,未匹配计数+1leftCount++;} else if (c == ')') {// 遇到右括号且有未匹配左括号时,完成一次匹配if (leftCount > 0) {matchPairs++;leftCount--; // 消耗一个未匹配的左括号}}// 若存在非括号字符,直接忽略(按题目“仅含括号”的条件可不处理)}return matchPairs;}public static void main(String[] args) {// 定义测试用例,覆盖多种场景String[] testCases = {"(()())",  // 完全匹配,预期3对"())",     // 右括号多余,预期1对"(((",     // 左括号多余,预期0对"()()()",  // 连续匹配,预期3对")()(",    // 交叉不匹配,预期1对""         // 空字符串,预期0对};// 执行测试并输出结果for (String testStr : testCases) {int result = countMatchPairs(testStr);System.out.printf("字符串 \"%s\" 的匹配括号对数:%d%n", testStr, result);}}}2.小紫有一个 change 函数,每次传入一个整数 x,然后将 x 修改为 x 在二进制之下的一的个数。小紫想要知道在一个元素中所有元素的代价之和,一个元素的代价是将这个元素变成一,需要调用的 change 函数的次数。public class ElementCostCalculator {// 1. 核心change函数:返回x二进制中1的个数private static int change(int x) {if (x == 0) return 0; // 0的二进制无1,特殊处理int count = 0;while (x != 0) {x = x & (x - 1); // 清除x二进制最右侧的1,高效统计1的个数count++;}return count;}// 2. 计算单个元素的代价:从x到1所需的change调用次数private static int getSingleCost(int x) {// 边界条件:x=1时无需调用,代价为0if (x == 1) return 0;int cost = 0;int current = x;// 循环调用change,直到结果为1,每调用一次代价+1while (current != 1) {current = change(current);cost++;}return cost;}// 3. 计算数组所有元素的代价之和public static int getTotalCost(int[] arr) {int total = 0;for (int num : arr) {// 过滤非正整数(题目隐含为正整数,避免无效值影响结果)if (num <= 0) {System.out.printf("警告:元素 %d 为非正整数,无法计算代价,已跳过%n", num);continue;}total += getSingleCost(num);}return total;}// 测试示例public static void main(String[] args) {// 测试数组:包含不同场景的元素int[] testArray = {5, 8, 1, 15, 7, 0, -3};int totalCost = getTotalCost(testArray);System.out.println("=====================");System.out.printf("数组所有元素的代价之和:%d%n", totalCost);}}
0 点赞 评论 收藏
分享
2025-11-01 15:41
门头沟学院 golang
总感觉HR收简历,面试官没有看简历,岗位是做推荐算法的,c++技术栈,我是搞java的,怎么发到c++去了?问完实习,直接三道算法?0.实习拷打1.仔细讲讲go中的协程池?2.线程池和协程池的实现原理区别?3.Docker的container和虚拟机有哪些区别?4.Restful 和RPC,它们的适用场景?5.Protobuf支持哪些数据结构?6.在Protobuf中,任意数据用什么表示?7.Pytorch、TensorFlow、PaddlePaddle,它在那整个模型架构上面,它们分别是处于那一层?8.RAG相关的经历,是那一段项目?算法:1.题目描述给定一个图,每个节点代表一个任务,节点上有执行时间(秒)。边表示依赖:任务B依赖任务A,表示A完成后才能执行B。设计一个多线程调度器,在满足依赖的前提下并发执行所有就绪任务。多个没有依赖或依赖已满足的任务可以同时执行。任务执行需要真实的时间消耗(使用 std::this_thread::sleep_for 模拟),请使用多线程并发执行所有任务。如果所有任务都成功执行完成,返回 true;否则返回 false。输入格式:第一行:三个整数 n m k,表示任务数(1 ≤ n ≤ 1000)、依赖边数(0 ≤ m ≤ 10000)、最大并发线程数(1 ≤ k ≤ 10)第二行:n 个整数,第 i 个为任务 i 的执行时间(1 ≤ time ≤ 100)接下来 m 行:每行两个整数 u v,表示任务 u 是任务 v 的前驱(0 ≤ u, v < n)输出格式:输出一个布尔值:true 表示所有任务成功执行完成,false 表示执行失败数据示例输入:5 5 33 2 4 1 20 20 31 32 43 42.Go 语言  题目描述:实现一个线程池类,支持提交任务10个,每个任务睡眠500ms,固定线程数量N=3、任务队列阻塞。要求线程安全,支持graceful shutdown。3.给定一个二叉树,请返回一个数组,其中第 𝑖个元素表示第 𝑖层的最大节点值。
查看11道真题和解析
0 点赞 评论 收藏
分享
2025-11-07 18:00
已编辑
门头沟学院 golang
公司技术栈:(新业务)go+(老业务)java业务:风控背景:收购了一家香港的银行,天星银行。如果用户深圳,北京,异地登录。盗号?欺诈账户?模糊匹配,编辑距离?。面试的轮次,3轮技术面+HR面,业务方向没问题。一面:1.Mysql有哪些查询的优化?2.写条SQl之后,您用什么方法来判断它到底命中哪些索引?3.用的什么大模型?还是自己用一些数据训练了大模型?4.Slice的底层数据结构?5.我定义好一个slice,然后我给传到一个自定义的函数里面,然后去调append,然后在函数外面定义的slice,还能看到我append以后的结果吗?6.我在一个自定义的函数里面,定义一个局部的变量,比如说 int 型的变量,对吧?然后我这个函数执行完成之后呢,我执行一个 return return,然后对这个这个刚才说的这个 int 型的局部变量取地址,现在就是把它的地址给返回到函数的外面了。然后在函数外面那就继续接收继,然后继续使用。这种做法的话,有有问题吗? (逃逸分析?)7.协程本质上是什么,为什么要有协程?8.Redis中,字符串和zset的内部实现?9.Redis中 查询zset中某分数范围的member的命令? 时间复杂度?10.Redis的持久化机制?11.如果是在做 RDB 这个期间,它会持续的一段时间嘛,对吧?然后这段时间的话,那还可以对这个 Redis 的数据进行正常的读写吗?12.copy on write?实现原理?就是怎么实现的?算法:33. 搜索旋转排序数组二面面经:1.大模型是怎么判断两个向量的相似度的,算法是?2.qps和tps的区别?3.分词的算法有哪些?(用传统的nlp去做分词)4.分词的原理?5.go和java两者的区别?6.go的gc和java的gc区别?7.java中用分代式的垃圾回收算法?为什么go中不使用这种分代式的算法?8.Go的逃逸分析?9.Golang需不需去做标记整理?(答案是不)10.Golang的对象分配?11.InnoDB为什么要用B+树来做这个索引结构?有什么优势?12。假如用InnoDB,然后频繁往数据库插入和删除行记录,正常来说,会引起索引的经常性变化,包括node节点的变化,B+树是做了什么机制去提升这里的效率的?13.InnoDB,他有哪些事物的隔离级别?14.mysql数据库,有哪些机制防止断电后导致数据丢失的问题(日志IO是顺序写,数据IO是随机写)15.Redis的过期删除策略是怎么去实现的?16.Mysql和Redis中的数据一致性,怎么保证?17.计算机网络,time_wait状态,为什么Tcp需要这么一个状态18.唯一生成ID的生成算法?19.那就是如果服务端如果出现,就是你发现很多链接它处于这种 close wait 的一个状态的话,你觉得它程序可能是什么一些原因呢?20.这种close_wait有什么影响?(资源耗尽,文件句柄)算法:503. 下一个更大元素 II
0 点赞 评论 收藏
分享
2025-10-28 15:48
门头沟学院 golang
0 点赞 评论 收藏
分享
2025-10-11 12:07
门头沟学院 golang
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务