25年9月东华软件 Java开发实习生线上一面

#JAVA##JAVA面经##JAVA内推#

前端这块你平时有接触吗?了解多少?

“有系统接触:掌握HTML5/CSS3/ES6基础,能独立开发响应式页面;深入使用Vue2(含Vue Router、Vuex),了解React核心思想(组件化、Hooks)。日常通过MDN、Vue官方文档学习,关注前端工程化(Webpack/Vite)。虽主攻后端,但坚持‘懂前端才能设计好API’——例如理解Axios拦截器原理后,后端统一返回{code, data, msg}格式,大幅减少联调摩擦。近期正用Vue3+TypeScript重构个人博客,深化全栈协作认知。”

你项目里的前端页面是自己写的吗?用的什么技术?

“是的,校园二手平台前端由我独立开发:

  • 技术栈:Vue 2.6 + Element UI + Axios + Vue Router
  • 关键实现
    • 封装request.js:统一添加Token、处理401跳转登录
    • 路由守卫:根据用户角色动态生成侧边栏菜单(管理员可见‘审核中心’)
    • 性能优化:商品图片懒加载、搜索防抖(300ms)
  • 协作细节:用Swagger定义接口规范,联调前用Postman验证字段,避免‘前端等后端’。虽非专业前端,但这段经历让我深刻理解:后端开发者懂前端,是高效协作的隐形加速器。”

Linux用过吗?开发或部署时常用的命令能随手说几个吗?

“日常使用WSL2开发,项目部署在CentOS云服务器,高频命令分四类:
🔹 日志排查tail -f app.log | grep "ERROR"(实时追踪错误)、less +F app.log(大文件查看)
🔹 进程管理ps -ef | grep java(查进程)、kill -9 PID(强制终止)、top(监控CPU/内存)
🔹 文件操作scp local.jar user@server:/opt(上传文件)、find / -name "*.log" -mtime -1(查24小时内日志)
🔹 网络诊断netstat -tunlp | grep 8080(查端口占用)、curl http://localhost:8080/health(服务自检)
实战案例:曾通过journalctl -u app.service --since "5 minutes ago"快速定位服务启动失败原因(配置文件路径错误)。”

聊聊你项目里的权限控制流程

“采用 JWT + 拦截器 + 前端路由守卫 三层控制:
1️⃣ 登录认证:用户提交账号密码 → 后端校验 → 生成JWT(含userId、role、exp) → 返回前端存localStorage
2️⃣ 请求校验

  • 前端:Axios拦截器自动在Header加Authorization: Bearer {token}
  • 后端:自定义拦截器解析JWT → 验签/过期检查 → 将用户信息存ThreadLocal(避免重复解析)
    3️⃣ 权限判定
  • 接口层:@PreAuthorize("hasRole('ADMIN')")注解控制(基于Spring Security)
  • 前端:路由守卫根据user.role动态渲染菜单(如普通用户不显示‘商品审核’入口)
    安全加固:Token设置短有效期(2h)+ Redis存黑名单(应对强制下线),敏感操作加短信二次验证。”

面向对象三大特性,结合代码经历谈理解

封装:不是‘藏起来’,而是‘定义清晰边界’。
→ 例:Order实体中,setStatus()方法校验状态流转合法性(如‘已发货’不能回退‘待支付’),外部无法直接改status字段,避免业务逻辑散落。
继承:为复用而生,但慎用‘为继承而设计’。
→ 例:BaseResponse封装code/msg/data,所有Controller返回继承它;但业务类避免深层继承,改用组合(如订单含User对象而非继承User)。
多态:让系统拥有‘生长能力’。
→ 例:支付模块中,PaymentContextPaymentStrategy接口,运行时注入AlipayStrategy/WechatStrategy。新增银联支付?只需实现接口,零修改核心逻辑。
核心感悟:OOP本质是用代码表达业务语言,让修改成本最低、扩展成本趋近于零。”

分页查询一般怎么实现?后端要处理哪些事?

“标准流程四步:
1️⃣ 参数校验:pageNum≥1,pageSize合理范围(如1-100)
2️⃣ 计算偏移量offset = (pageNum - 1) * pageSize
3️⃣ 数据库查询

  • 主查询:SELECT ... LIMIT offset, pageSize
  • 总数查询:SELECT COUNT(*) ...(注意:避免SELECT *查总数)
    4️⃣ 封装返回
{ "list": [...], "total": 150, "pageNum": 2, "pageSize": 10, "totalPages": 15 }

避坑点
⚠️ 深度分页优化:pageNum过大时改用游标分页(如WHERE id > lastId LIMIT 10
⚠️ 总数缓存:高频查询场景,用Redis缓存COUNT结果(设置短TTL)”

你项目里分页具体咋做的?

“基于 MyBatis-Plus 分页插件 实现:

  • 前端传参pageNum=2, pageSize=10(Element UI分页组件自动传递)
  • 后端处理
    Page<Product> page = new Page<>(pageNum, pageSize);
    IPage<Product> result = productMapper.selectPage(page, queryWrapper);
    // 返回IPage对象(含records, total, current等)
    
  • 返回结构
    { "records": [...], "total": 85, "size": 10, "current": 2, "pages": 9 }
    

优化细节
• 查询条件含用户ID(防越权:queryWrapper.eq("user_id", getCurrentUserId())
• 前端根据total动态显示‘共85条’,提升用户体验
• 压测验证:10万数据量下,分页查询稳定在50ms内”

SpringBoot和传统Spring有啥不一样?为啥爱用它?

“核心差异在 ‘约定优于配置’

维度 传统Spring SpringBoot
配置 大量XML(web.xml, applicationContext.xml) 注解驱动(@SpringBootApplication)
依赖 手动管理版本冲突 Starter自动导入(如spring-boot-starter-web)
部署 打war包+外置Tomcat 内嵌Tomcat,java -jar直接运行
监控 需额外集成 Actuator开箱即用(/actuator/health)

为何流行
✅ 开发效率:5分钟搭建REST API(对比传统Spring需配置DispatcherServlet等)
✅ 微服务友好:独立进程、健康检查、外部化配置(application.yml)
✅ 生态整合:无缝对接Spring Cloud、MyBatis-Plus等
个人体验:项目中用@ConfigurationProperties绑定配置,修改数据库密码只需改yml,无需重编译——这种‘小确幸’极大提升幸福感。”

Java集合用得多吗?ArrayList和LinkedList有啥区别?平时怎么选?

“高频使用,选择原则:看访问模式+数据规模

特性 ArrayList LinkedList
底层 动态数组 双向链表
随机访问 O(1) ✅ O(n) ❌
首尾插入 O(n)(需扩容) O(1) ✅
内存占用 小(仅数组) 大(节点含prev/next指针)
缓存友好 高(连续内存) 低(指针跳转)

选型指南
🔹 90%场景选ArrayList:查询多、数据量中等(<1万),缓存局部性带来实际性能优势
🔹 仅当频繁在首尾增删+极少随机访问时选LinkedList(如实现LRU缓存队列)
🔹 线程安全需求:CopyOnWriteArrayList(读多写少)或Collections.synchronizedList

你项目里哪些地方用了ArrayList?为啥选它?

“两处典型应用:
1️⃣ 商品列表查询

List<Product> products = productMapper.selectList(wrapper); // MyBatis返回ArrayList

选型理由:前端需按索引渲染(如第3个商品高亮),ArrayList随机访问O(1);数据量<5000,扩容成本低。
2️⃣ 导出Excel数据组装

List<List<Object>> excelData = new ArrayList<>(); // 外层存行,内层存单元格

选型理由:顺序遍历写入文件,ArrayList连续内存减少GC;对比LinkedList,实测1万行数据导出快15%。
反思:曾误用LinkedList存配置项(需频繁get(index)),压测发现耗时翻倍,后改为ArrayList——理论需经实战验证。”

项目最后是怎么部署上线的?自己操作过吗?

“全流程自主操作(阿里云ECS + CentOS 7):
1️⃣ 打包:Maven执行clean package -DskipTests,生成campus-trade.jar
2️⃣ 上传scp campus-trade.jar root@server:/opt/app/
3️⃣ 部署脚本(start.sh):

nohup java -Xms512m -Xmx1024m -jar campus-trade.jar \
  --spring.profiles.active=prod > app.log 2>&1 &

4️⃣ 服务管理:用systemctl注册为系统服务(支持systemctl start app
5️⃣ 前端部署npm run build生成dist → Nginx托管(配置反向代理后端)
6️⃣ 验证curl http://localhost:8080/actuator/health + 浏览器访问
运维意识
• 日志轮转:logrotate配置每日切割
• 监控:部署后用top观察内存,设置企业微信告警(CPU>80%触发)
• 未来规划:正学习Docker,计划用Dockerfile容器化部署,提升环境一致性。”

#java##JAVA##面经#

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

全部评论
本专栏在精不在多,内容分为八股文、大厂真实面经,面试通过后将offer和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏。
点赞 回复 分享
发布于 昨天 15:50 广东

相关推荐

牛客42327521...:在你没来公司之前你们公司连登录功能都没做?让一个实习生做登录页面?
点赞 评论 收藏
分享
高标智能&nbsp;后端开发面经1.&nbsp;自我介绍2.&nbsp;将java文件编译成class字节码加载到JVM,会先被解析到哪个区域3.&nbsp;频繁Minor&nbsp;GC的排查与解决4.&nbsp;JVM内存区域中哪些是私有,哪些是共享5.&nbsp;线程之间的通信方式,如何保证线程安全?6.&nbsp;自定义类实例化时,会不会生成它父类&nbsp;Object&nbsp;的实例?为什么?7.&nbsp;Spring&nbsp;IOC&nbsp;三级缓存是否完全解决了循环依赖问题?举例说明。8.&nbsp;Spring&nbsp;IOC&nbsp;依赖注入的方式有哪些?————————————————————【我们是谁】👉二轮车电控的业界&quot;大佬&quot;,市占率50%以上!👉热门出海赛道,ebike-三电系统新势力!----------🌍国际化平台,格局打开🚀全方位培养,火箭晋升【岗位需求】结构、仿真、电机、软件、硬件、测试、营销、制造等【岗位地点】总部位于东莞松山湖,工作地点遍布全国及海外【薪酬福利】💡五险一金、周末双休、带薪年假、报到礼金、食宿安排、节假日礼品等~💡薪酬待遇:研发类硕士21~35万/年,本科12-21万/年;非研发12-21万/年;派驻海外岗位额外补贴1.4万+/月!【内推链接】https://kjgb.zhiye.com/campus/jobs?shareId=cd54c7a7-9898-4abb-bd5e-a37952f5e425&amp;shareSource=2&amp;qr=1&amp;memory=%7B%7D&amp;silence=1【内推码】EVKM89内推投递,简历优先筛选,面试流程加快!
点赞 评论 收藏
分享
zbk1:学院本找嵌入式我觉得不太行,不要被培训班忽悠了,老老实实读个研吧。
点赞 评论 收藏
分享
评论
2
5
分享

创作者周榜

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