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

全部评论

相关推荐

福狼🐺:放弃军工小厂转正,校招去了电信,然后花了8个月时间狂做7个个人项目(2个自用1个上线其他开源),写了一本offline-onsite-handbook和一套go基础教学课件,现在还在军工小厂拿着低的离谱的工资 自用:1.用各种开源服务组装的自用NAS一台 2.Steam查服器(桌面端) 上线:导航站,自研多模态采集器、自研Steam采集器 开源:1.Steam的webapi工具包,接入60+重要接口、colley二次封装、a2s、 2.命令行压缩工具(课件),支持zip/7z/tar压缩解压缩,多种加密算法加解密,支持批量操作、分卷等功能 3.seaweedfs客户端库,按照官方文档接入,支持上传/下载/复制/剪切/删除/查询,批量/分片/分片合并/完整性校验/断点续传/多线程/递归查询等高级功能,提供语法糖的简易接口和完整接口 4.视觉小说引擎,驱动视觉小说核心逻辑。角色管理器、场景管理器、音频管理器、画廊管理器、成就管理器、词条管理器,引擎层靠回调执行自定义操作,适配层连接UI层,UI层基于wails框架,有一套完整的vue-ts的通用组件。支持存档、读档、自动存档、快存、快读、持久化配置、屏幕尺寸适配、选择、条件、跳转、回退、多语言、画廊、词条、成就等功能。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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