26年2月百度 Java开发工程师 二面

1. 详细介绍一下你的OJ判题系统项目,架构是怎么设计的?

回答

:OJ判题系统采用前后端分离架构,前端Vue.js,后端Spring Boot。核心模块包括:题目管理模块(CRUD、测试用例管理)、代码提交模块(在线代码编辑、语法检查)、判题模块(代码沙箱、安全检查、输出比对)、用户模块(登录注册、权限控制)。判题流程:用户提交代码→语法检查→编译→放入代码沙箱执行→获取输出结果→与测试用例比对→返回判题结果。

2. 代码沙箱是如何实现的?安全性如何保证?

回答

:代码沙箱采用Docker容器隔离执行。每个用户提交代码创建独立容器,超时自动销毁。安全措施包括:资源限制(CPU时间、内存限制、文件大小)、网络隔离(禁止访问外网)、系统调用限制(白名单机制)、超时控制(防止死循环)、临时文件清理。Docker镜像使用最小化基础镜像,只包含必要运行时。

3. 讲讲MySQL的锁机制?行锁和表锁的区别是什么?

回答

:MySQL锁分为行锁和表锁。行锁锁定数据行,锁粒度小,并发度高,但开销大,会发生死锁。表锁锁定整张表,锁粒度大,并发度低,但开销小,不易死锁。InnoDB支持行锁和表锁,默认使用行锁。行锁包括:共享锁(S锁)、排他锁(X锁)、意向锁(表级锁)。

4. 什么是死锁?死锁的必要条件有哪些?如何避免死锁?

回答

:死锁是两个或多个线程相互等待对方持有的资源,导致都无法继续执行。死锁必要条件:互斥条件(资源只能被一个线程持有)、请求与保持条件(持有资源同时请求其他资源)、不剥夺条件(不能强制剥夺线程持有的资源)、循环等待条件(形成资源等待环路)。避免死锁方法:按固定顺序获取锁、设置超时时间、使用tryLock非阻塞获取锁。

5. TCP三次握手和四次挥手的过程是什么?为什么需要三次握手?

回答

:三次握手:客户端发送SYN(seq=x)→服务器发送SYN+ACK(ack=x+1, seq=y)→客户端发送ACK(ack=y+1)。四次挥手:客户端发送FIN(seq=u)→服务器发送ACK(ack=u+1)→服务器发送FIN(seq=v)→客户端发送ACK

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

本专栏在精不在多,内容分为八股文、大厂真实面经,面试通过后将offer和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏

全部评论

相关推荐

03-20 10:04
湖南大学
一、Java基础1. HashMap底层原理数组+链表+红黑树,JDK1.8后引入红黑树。初始容量16,负载因子0.75,扩容为原来2倍。线程不安全,多线程推荐使用ConcurrentHashMap。2. ConcurrentHashMap 1.7和1.8区别1.7:Segment分段锁+数组+链表,锁粒度较大。1.8:CAS+synchronized,数组+链表+红黑树,锁粒度更细,性能更高。3. ArrayList和LinkedList区别ArrayList:动态数组,查询快,增删慢。LinkedList:双向链表,查询慢,增删快。4. String、StringBuilder、StringBufferString不可变,线程安全。StringBuilder可变,非线程安全,效率最高。StringBuffer可变,线程安全,效率较低。二、并发编程5. synchronized底层实现修饰方法:ACC_SYNCHRONIZED标识。修饰代码块:monitorenter、monitorexit指令。锁升级流程:无锁→偏向锁→轻量级锁→重量级锁。6. ReentrantLock和synchronized区别ReentrantLock:手动加锁解锁,支持可中断、超时、公平锁。synchronized:自动加锁解锁,使用简单。7. 线程生命周期新建、就绪、运行、阻塞、终止。8. 死锁四个必要条件互斥、请求保持、不可剥夺、循环等待。破坏任一条件即可避免。三、JVM9. JVM内存模型堆、方法区、虚拟机栈、本地方法栈、程序计数器。10. 垃圾回收机制对象存活判断:引用计数法、可达性分析法。回收算法:标记清除、标记复制、标记整理。11. 常见垃圾收集器Serial、ParNew、Parallel Scavenge、CMS、G1。四、计算机基础12. TCP三次握手、四次挥手三次握手:建立可靠连接。四次挥手:断开连接,保证数据传输完成。13. HTTP和HTTPS区别HTTP明文传输,端口80。HTTPS加密传输,端口443,基于SSL/TLS。14. MySQL索引底层B+树,分为聚簇索引和非聚簇索引。遵循最左匹配原则,避免索引失效。15. MySQL事务ACID原子性、一致性、隔离性、持久性。五、项目与场景16. 接口限流方案计数器、漏桶算法、令牌桶算法。17. 分布式锁实现Redis分布式锁、Zookeeper分布式锁。18. Redis缓存问题缓存穿透:布隆过滤器。缓存击穿:互斥锁、热点数据永不过期。缓存雪崩:过期时间随机、集群部署、服务降级。
查看18道真题和解析
点赞 评论 收藏
分享
3.5一面 一、 项目1. 简单介绍一下这个系统的知识库问答架构,从文档入库到最后回答的完整链路是怎样的?2. 向量检索用的是什么索引类型?3. 在召回之后有没有做重排(Rerank)之类的操作?4. 你知识库的准确率和召回率是怎么评估的?5. Spring AI Alibaba 的 Function Calling 是怎么实现的?模型如何决定调用哪个工具?6. 如果工具调用失败了,你们设计了什么处理机制?7. Execute Plan 模式具体是怎么实现的?8. 平时哪种模型用的比较多?9. 平时编码时会用哪些模型?10. 在选择向量数据库时,有没有看过其他的(如 ES、Milvus 以外的选择)?它们之间的区别你大概有概念吗?11. 在写 Prompt的时候,你有哪些实践经验或设计原则?12. Graph Rag / Agentic Rag了解过吗13. 在秒杀下单中,Lua 脚本具体做了什么?为什么要用 Lua,而不是分开执行多条指令?14. 这个项目你自己做过压测吗?15. 对系统能扛住的流量(QPS)有没有具体的概念?16. 对于什么时候该上缓存、什么时候该上本地缓存,你大概的概念是什么二、 Java 基础1. 线程池的核心参数有哪些?2. 线程池内部的具体工作流程是怎样的?3. 核心线程数和最大线程数一般怎么确定/计算?三、 场景题1. 你觉得目前 RAG(检索增强生成)最大的瓶颈是什么?2. 假设要给电商平台搭建一个百万/千万级的商品知识库问答系统,你会怎么设计?3. 针对商品信息(如价格、描述)可能被商家动态更新的情况,你的知识库设计需要考虑什么?四、手撕:二叉树的层序遍历反问面试表现,面试官当场告知通过
查看23道真题和解析
点赞 评论 收藏
分享
肥肠椒绿:双非本可不就犯天条了,双非本就应该打入无间地狱
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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