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和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏
查看4道真题和解析