松鼠 AI 25 Java 开发 一面

松鼠 AI 25 Java 开发 一面

本文作者:程序员小白条

本站地址:https://xbt.xiaobaitiao.top

1)自我介绍

2)接口调用平台需求分析、业务流程介绍

3)邀请码设计

4)Map、List、Set 区别

5)中奖名单用什么结构,统计人昵称和名次以及频率

6)HashTable 和 HashMap 的区别

7)JVM 垃圾回收,对象死亡判断、垃圾回收算法、垃圾回收器

8)进程和线程的区别

9)线程池的作用

10)内存泄漏的场景和解决方案

11)OSI 七层模型

12)TCP 和 UDP 的区别

13)TCP 可靠性怎么保证的?

14)数据库深度分页优化

15)联合索引场景和注意事项

16)算法:中序遍历 + 合并两个有序数组

反问:技术栈和业务,模块划分等。

2)接口调用平台需求分析、业务流程介绍

需求分析

  • 目标:统一管理外部接口调用,保障安全性和可观测性。
  • 功能:
    1. 权限控制:API密钥+IP白名单。
    2. 限流熔断:防止滥用(如令牌桶算法)。
    3. 监控报警:记录调用日志+失败告警。

业务流程

  1. 用户申请API密钥并配置权限。
  2. 调用时携带密钥,网关校验权限和限流。
  3. 请求转发至后端服务,结果返回并记录日志。

3)邀请码设计

  • 生成规则
    • 前缀(标识业务)+ 时间戳 + 随机码(如UUID部分字符)。
    • 示例:INV_20230801_3xY7
  • 存储:Redis(过期时间)+ MySQL(持久化)。
  • 校验:Redis查重+业务规则(如用户绑定防刷)。

4)Map、List、Set 区别

特性 Map List Set
存储 Key-Value对 有序可重复元素 无序唯一元素
实现类 HashMap, TreeMap ArrayList, LinkedList HashSet, TreeSet
用途 快速查找(O(1)) 顺序访问/插入 去重/集合运算

5)中奖名单结构设计

  • 需求:统计昵称、名次、中奖频率。

  • 数据结构

    java

    // 使用Map嵌套List  
    Map<String, List<Record>>  
    // Record包含:rank(名次)、frequency(频率)  
    
  • Redis实现

    • ZSet(Sorted Set):存储昵称和分数(名次)。
    • Hash:记录昵称和频率(HINCRBY user:frequency 昵称 1)。

6)HashTable 和 HashMap 的区别

对比项 HashTable HashMap
线程安全 同步方法(性能低) 非同步(需手动加锁)
Null键值 不允许 允许
迭代器 Enumeration(老式) Iterator + fail-fast
继承 Dictionary类 AbstractMap类

7)JVM 垃圾回收

  • 对象死亡判断:可达性分析(GC Roots不可达)。
  • 算法
    • 标记-清除(碎片问题)
    • 复制算法(新生代,Eden→Survivor)
    • 标记-整理(老年代)
  • 回收器
    • Serial:单线程,适合客户端。
    • Parallel Scavenge:吞吐优先。
    • CMS:低延迟(已淘汰)。
    • G1/ZGC:混合分区,高吞吐低延迟。

8)进程和线程的区别

维度 进程 线程
资源 独立内存空间 共享进程资源
切换开销 高(上下文切换)
安全性 隔离性好 需同步(如锁)
通信 IPC(管道、Socket) 共享内存/变量

9)线程池的作用

  • 核心价值
    1. 降低开销:复用线程,避免频繁创建/销毁。
    2. 控制并发:通过队列和最大线程数防止资源耗尽。
    3. 管理任务:支持定时/延迟任务(如ScheduledThreadPool)。

10)内存泄漏的场景和解决方案

  • 场景
    1. 静态集合:如static Map未清理。
    2. 未关闭资源:数据库连接、文件流。
    3. 监听器未注销:EventBus未解绑。
  • 解决
    • 使用弱引用(WeakHashMap)。
    • try-with-resources自动关闭。
    • 工具分析(MAT查找GC Roots)。

11)OSI 七层模型

功能 协议/设备
应用层 HTTP/FTP/SMTP 浏览器
表示层 数据加密/压缩 SSL/TLS
会话层 建立/管理会话 NetBIOS
传输层 端到端通信(TCP/UDP) 防火墙
网络层 路由寻址(IP) 路由器
数据链路层 帧传输(MAC) 交换机
物理层 比特流传输 网线/光纤

12)TCP 和 UDP 的区别

特性 TCP UDP
连接 面向连接(三次握手) 无连接
可靠性 可靠(重传、排序) 可能丢包
效率 低(头部大、延迟高) 高(头部小)
场景 文件传输、Web 视频会议、DNS

13)TCP 可靠性保证

  1. 确认应答(ACK):接收方确认收到数据。
  2. 超时重传:未收到ACK时重发。
  3. 流量控制:滑动窗口调整发送速率。
  4. 拥塞控制:慢启动+拥塞避免。

14)数据库深度分页优化

  • 问题LIMIT 100000, 10扫描大量无效数据。
  • 优化
    1. 子查询WHERE id > (SELECT id FROM table LIMIT 100000, 1) LIMIT 10
    2. 游标分页:记录上次查询的ID(如WHERE id > last_id ORDER BY id LIMIT 10)。

15)联合索引场景和注意事项

  • 场景:多条件查询(如WHERE a=1 AND b=2)。
  • 注意事项
    1. 最左前缀:索引(a,b)无法优化WHERE b=2
    2. 字段顺序:高区分度字段放前面。
    3. 覆盖索引:避免回表(如SELECT a,b FROM table)。

松鼠 AI 牛友发过相关的暴雷帖子,我就不重复了。

程序员小白条的编程日记:https://xbt.xiaobaitiao.top/ (分享如何拿到腾讯实习 Offer 和多个中大厂的面试机会,大学经历、求职经历、职场工作、创作经历、生活日常、面经、技术分享)定期更新内容,成长打怪系列,分享从大一到大四的完整面经,看完可冲中大厂!dy同名程序员小白条,主要口述面试经历和分享我认为的实用网站,会比面经讲的详细很多,以真实面试录音为主!公粽号:程序员落叶

#面试问题记录#
全部评论
mark
1 回复 分享
发布于 08-05 14:54 安徽
老师,你怎么这么多面经。。。
1 回复 分享
发布于 08-05 14:53 广西
我这里有最近在做的大厂项目可以包装到简历上的,如果有同学还在因为简历上没有可以拿的出手的项目经历而约不到面试,可以去看下我主页简介中的项目地址
点赞 回复 分享
发布于 08-05 15:51 江苏
我嘞个三次握手
1 回复 分享
发布于 08-05 14:38 北京

相关推荐

发个面筋攒攒人品一面实习项目是什么?分布式锁&nbsp;你都用过哪些?&nbsp;你设置过期时间么?&nbsp;如果抛出异常了&nbsp;你的锁&nbsp;还能删么?你说的redisson&nbsp;和setnx&nbsp;有什么区别?主线程&nbsp;等待后面十个并发请求的完成之后&nbsp;再处理主线程?你会怎么实现?你的分布式锁过期了&nbsp;然后业务还没处理完&nbsp;会产生什么情况?Redis持久化策略?&nbsp;内存淘汰策略的呢?你都用过什么数据结构?线程中的wait&nbsp;和&nbsp;sleep的话有什么区别?创建线程都有哪些方式?线程池的核心参数?&nbsp;最大线程数&nbsp;指的是什么?&nbsp;我现在没有工作队列&nbsp;然后&nbsp;10核心线程数&nbsp;30最大线程数&nbsp;现在15个线程进来&nbsp;会怎么执行?集合的set元素可以重复么?key能重复么?&nbsp;为什么不能重复?sql优化有什么思路?现在又100条数据&nbsp;要你去进行修改&nbsp;然后涉及三个表&nbsp;如果有一个表修改失败你需要去回滚&nbsp;你会怎么做?你说的tcc&nbsp;本地事务不是也会影响到么&nbsp;怎么解决?二面实习公司是干什么的&nbsp;业务说一说针对项目难点或者说&nbsp;遇到的不会的地方?Rocket的消息模型都知道那些?Rocketmq的&nbsp;无序&nbsp;顺序&nbsp;事务&nbsp;消息都说一下吧?泛型你怎么看Stream流循环和for循环&nbsp;你怎么看JVM结构?双亲委派机制?垃圾回收器?@Transaction事务&nbsp;的&nbsp;传递方式?&nbsp;失效场景?&nbsp;为什么会失效?Inodb存储引擎么&nbsp;你知道他是B+树&nbsp;那么他和b树&nbsp;和红黑树之间&nbsp;优点在那里?ArrayList&nbsp;和&nbsp;LinkedList&nbsp;的区别&nbsp;适用场景?为什么会适用这样的场景?HashMap&nbsp;ConcurrentHashMap?你说了锁&nbsp;那你说下锁升级&nbsp;锁是怎么实现的?CAS你刚才也说了&nbsp;&nbsp;他会有什么问题&nbsp;怎么解决?线程池的话你用过哪些?&nbsp;然后&nbsp;参数都有什么&nbsp;你会怎么设置?&nbsp;为什么这样设置?Java&nbsp;io模型&nbsp;你都知道什么?&nbsp;Nio怎么实现的?Mysql一条select语句的查询顺序MVC的处理流程?Java的异常?&nbsp;运行时异常&nbsp;和&nbsp;非运行时异常呢?手撕sql一面完秒约二面&nbsp;二面完约hr面
点赞 评论 收藏
分享
7.17投递&nbsp;-&gt;&nbsp;7.18测评&nbsp;-&gt;&nbsp;7.31一面过&nbsp;-&gt;&nbsp;8.11二面一面(90min,八股吟唱,两个面试官轮着拷打):1、两段实习拷打,没手撕;2、如果你想做出海业务你会想怎么去因地制宜设计架构;3、redis大key对于cpu和网络流量的影响;4、redis跳表结构;5、mysql的b+树结构,mysql的FULLTEXT索引是否能帮助进行模糊查询,这个索引和es直接查询区别在哪;6、sql语句执行顺序;7、线程池原理;8、Hashmap结构和扩容机制;9、Java开发中用到的同步机制;10、rpc调用链路中怎么保证分布式事务的最终一致性;11、谈谈kafka怎么保证消费的一致性和顺序性还有可靠性;12、说说gc收集器,说说怎么排查gc日志;13、说说Java开发过程你用到的设计模式;14、说说你简历写的慢sql排查思路;15、死锁检查,银行家算法;16、jvm结构;17、JNA怎么保证不内存泄漏;18、OOM常见情况;19、linux大页;20、拦截器和过滤器;21、一致性协议还有相关的选举机制;22、redis缓存雪崩穿透击穿场景和解决方法;23、常见的哈希冲突,ThreadLocal怎么解决哈希冲突;24、怎么优化提示词生成效果;25、怎么写规则引擎;26、你常用的设计模式;27、类加载机制和双亲委派;28、数据库三大范式;29、2pc,3pc,tcc,seata;30、最大堆最小堆是啥样子的,红黑树原理,堆排序过程。二面:没啥技术,类似于hr面问了家庭,是否单身,遇到的困难和解决方法,怎么排解压力,职业规划
投递中兴通讯等公司10个岗位
点赞 评论 收藏
分享
评论
4
14
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务