松鼠 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键值 不允许 允许
迭代器 En

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

大学四年面经(学院本) 文章被收录于专栏

大学全部面经从大一到大四,从实习、秋招、春招等等,各种岗位,中小厂,乃至大厂面经! 公粽号:程序员落叶,里面分享全部文章详情。

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

相关推荐

最近经常遇到粉丝私信,或者是1v1答疑的时候。都在问嵌入式学习方向的问题,不知道要走哪个方向?到底要不要学数模电?等等。之前在笔记--嵌入式软件学习路线(完整版),已经分享过了,没想到还是有粉丝朋友不是很清楚,因此本期再说详细一点。首先是方向问题:总体来讲,我个人认为嵌入式就两大方向,一个mcu+rtos,一个是linux。不要再说什么电机控制方向,wifi、蓝牙物联网方向等等,这些都是行业专精方向。什么叫做行业专精方向,就是你把基础学好以后,再根据不同的行业,学对应的行业知识。那基础是什么?基础就是mcu、rtos、linux都属于基础,至少我自己是这么理解的。因此,如果你是校招或者是刚入行的社招同志,把基础学好就足够找一份工作了。剩下的行业专精知识,去公司再学也不迟。理解清楚这一点后,再来看具体选择哪个方向。还是那句话,如果你时间比较多(什么叫做时间多,我个人认为要么大二开始,要么研一开始),我个人建议你mcu和linux都学,这样选择的机会更多一点。如果你时间不够,那你就二者选其一。如果你选mcu方向,行业内通常叫软硬件方向,就是硬件和软件你都要会的意思。那么这个方向多多少少会接触到硬件的,因此我建议你要有一定硬件基础。如果你以后想深耕该方向,那硬件就不止是要会基础知识了。综上:选择这个方向,我个人认为是一定要学模电和数电的。那在此处,也还是有粉丝朋友问我,模电和数电要全部学完吗?之前笔记就分享过,前期刚开始你不用全部学完,但模电的二极管、三极管、mos管、比较器、放大器这种基础你要会吧,电子元器件总要认得全吧,电容电感的作用总要了解吧。核心一句话,最低要求--看懂原理图!对于数电,最基础的进制转换要会吧,比如10的16进制你要知道是0xA等等。触发器、寄存器总要了解一下是什么吧,AD转换总要了解一下吧,有哪些存储器如ram和rom要了解吧。这个地方又有粉丝有问题了,需要一上来就学模数电吗?怎么学?学不进去咋办?对于这类问题,我个人建议是如果你觉得枯燥,那是因为你还没用到这个知识。因此,你可以先去学习stm32的点灯,那点灯的时候到底是输出一个低电平还是一个高电平呢?如果你搞不清楚,说明你不知道二极管的单向导电性,那你就回过头去看相关知识,书籍或者视频都可以(书籍和视频我学习路线完整版那篇笔记有说过,这里不再多加说明)。以这种先发现问题,再解决问题的方式去学习,就不会学不下去了,同时也会学的更加深刻,毕竟学习最怕的就是学了不用。此外,第二个建议是你可以直接去b站搜怎么看懂电路原理图,当你去听别人分析的时候,你不懂这是为啥?那是为啥?这个时候,你就知道自己应该去看书了,这样的学习方式也可以。那么上述关于mcu方向以及模数电该不该学?怎么学的问题就讲完了。多补充一点的是,如果已经在mcu方向拿完offer的校招同学,我个人建议你继续往linux方向学。原因是,等你进了公司,你会发现面试的时候,面的是mcu方向的,进来以后给你分到linux方向了。这只是有可能,也是一些特例。比如我自己就是这样,面的mcu,现在去在linux平台上干SoC。下边继续说一下第二个方向--Linux。linux方向相较而言,基本不碰硬件。比如博主现在硬件都没碰过,跑板子都是远程连接跑的,更别说原理图了。因此,如果你不想碰硬件,又想吃嵌入式这口饭,那建议往linux方向学习。在linux方向里边,驱动和应用都要学,并且个人建议先从应用方向学起。具体来说,个人建议按照以下顺序:学习c++--&amp;gt;学习linux环境基本操作--&amp;gt;学习gcc/make工具链--&amp;gt;学习linux应用(I/O、线程进程、网络编程、QT等)--&amp;gt;linux驱动(uboot/kernel/rootfs/gdb调试/三大设备驱动等),更加具体的学习路线以后再发,本期讲不完。本次讲解就到这里,有需要Linux驱动、Linux应用开发指南、Freertos开发手册、STM32开发指南、开源rtos项目、嵌入式软件八股文合集等资料的同学,可私信我领取&nbsp;&nbsp;&nbsp;&nbsp;。
点赞 评论 收藏
分享
评论
4
18
分享

创作者周榜

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