观妙科技 - Java开发 一面 面经

1. 先做个自我介绍

您好,我是XXX,目前就读于XXX大学XXX专业。在校期间对Java开发产生了浓厚兴趣,系统学习了后端开发技术。

技术栈方面,掌握Java核心技术、Spring全家桶、MySQL、Redis等。熟悉微服务架构,用过Spring Cloud的Nacos、Gateway、OpenFeign等组件。

项目经验上,我独立开发过电商系统和在线教育平台。在电商项目中实现了商品管理、订单处理、秒杀等功能,处理过高并发场景的优化问题。在线教育平台实现了课程管理、视频播放、在线支付等模块。

学习方法是理论结合实践,遇到问题会查阅官方文档和源码。平时关注技术社区,保持学习的习惯。希望能加入观妙科技,在实际项目中提升自己。

2. 详细介绍一下你参与的两个项目

第一个是电商系统项目。

这个项目使用Spring Boot搭建,实现了用户注册登录、商品浏览、购物车、下单支付等完整流程。技术栈包括Spring Boot、MyBatis Plus、MySQL、Redis、RabbitMQ。

我主要负责商品模块和订单模块。商品模块实现了商品的增删改查、分类管理、库存管理。订单模块处理订单创建、支付回调、订单状态流转。

重点是秒杀功能的实现。为了应对高并发,我把商品信息和库存缓存到Redis,使用Lua脚本保证库存扣减的原子性。订单创建改为异步处理,通过RabbitMQ削峰填谷。还使用了分布式锁防止超卖,Sentinel做限流保护。

第二个是在线教育平台。

采用微服务架构,拆分了用户服务、课程服务、订单服务、支付服务。使用Nacos做服务注册和配置中心,Gateway做网关,OpenFeign做服务调用。

我负责课程管理模块,实现了课程发布、分类管理、课程搜索等功能。课程搜索使用Elasticsearch,支持关键词搜索和多条件筛选。视频文件上传到阿里云OSS,通过CDN加速播放。

这两个项目让我对Spring生态和微服务架构有了深入理解,也积累了解决实际问题的经验。

3. Java中多态是如何实现的?方法重载算不算多态?

多态是面向对象的重要特性,分为编译时多态和运行时多态。

编译时多态就是方法重载,同一个类中方法名相同但参数不同。编译器根据参数类型和个数确定调用哪个方法。比如println方法可以接收int、String等不同类型参数。

运行时多态是通过继承和方法重写实现的。父类引用指向子类对象,调用方法时根据实际对象类型执行相应的方法。比如Animal类有eat方法,Dog和Cat继承Animal并重写eat方法,Animal animal = new Dog()调用的是Dog的eat方法。

实现运行时多态需要三个条件:继承、方法重写、父类引用指向子类对象。底层原理是JVM通过动态绑定,在运行时根据对象的实际类型查找方法表,调用对应的方法。

所以方法重载属于多态,是编译时多态。方法重写是运行时多态。两者都体现了"同一个行为具有不同表现形式"的多态思想。

4. 如果两个方法名称、返回类型相同,只是参数顺序不同,会报错吗?

不会报错,这是合法的方法重载。

方法重载的判断标准是方法签名,包括方法名和参数列表。参数列表包括参数类型、参数个数、参数顺序。只要参数列表不同就可以重载。

比如这两个方法可以共存:

public void test(String name, int age) {}
public void test(int age, String name) {}

编译器会根据调用时传入的参数类型和顺序,匹配到对应的方法。test("张三", 20)调用第一个,test(20, "张三")调用第二个。

需要注意的是,返回类型不同但参数相同不能重载,会编译报错。因为编译器无法根据返回类型区分调用哪个方法。

实际开发中,参数顺序不同的重载容易混淆,不太推荐。更好的做法是参数类型或个数不同,或者用不同的方法名。

5. Spring Bean的生命周期和作用域分别是什么?

Bean生命周期主要几个阶段:

实例化,Spring通过反射创建Bean对象。属性赋值,通过依赖注入为属性赋值。初始化前处理,执行BeanPostProcessor的前置方法,比如@PostConstruct注解的方法。初始化,调用InitializingBean的afterPropertiesSet或自定义init-method。初始化后处理,执行BeanPostProcessor的后置方法,AOP代理在这里创建。使用阶段,Bean可以被应用使用。销毁阶段,容器关闭时执行@PreDestroy或destroy-method。

Bean作用域有五种:

singleton单例,默认作用域,整个容器只有一个实例,容器启动时创建。prototype原型,每次获取都创建新实例。request,每个HTTP请求创建一个实例,Web应用中使用。session,每个HTTP会话创建一个实例。application,整个ServletContext生命周期一个实例。

实际开发中,大部分Bean用singleton,无状态的Service、Dao都是单例。如果Bean有可变状态,需要用prototype避免线程安全问题。

6. 单例Be

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

Java面试圣经 文章被收录于专栏

Java面试圣经,带你练透java圣经

全部评论
蹲个观妙科技
点赞 回复 分享
发布于 03-19 10:55 北京
居然收费了
点赞 回复 分享
发布于 03-19 08:39 黑龙江
27届实习机会或看我住业 https://careers.pddglobalhr.com/campus/intern?t=4OmKPVeX9a
点赞 回复 分享
发布于 03-11 15:40 上海
清华✌不冲冲大厂吗
点赞 回复 分享
发布于 03-04 11:21 湖南

相关推荐

03-17 17:57
门头沟学院 Java
1.    能否先做一个自我介绍?2.    简单介绍一下你的项目,以及你在里面主要做了哪些事情?3.    你们项目采用的框架以及技术栈是什么?4.    你觉得你对哪块技术比较熟悉一点?5.    引入线程池提升查询效率的方案,当时是你自己想出来的,还是你只负责落地执行?6.    能把你优化的代码执行的整个流程说一下吗?7.    为什么 CompeleteFuture 要使用线程池的线程,能解释一下吗?8.    这个项目的团队大概是多少人?9.    在做“花椒论坛”项目的过程中,有哪些觉得可以进行优化,而你还没有进行优化的点?10.    简单说一下粉丝订阅和关注模块里面涉及到了哪些业务逻辑?11.    消息推送模型中有涉及到数据持久化吗?12.    在拉模式的过程中,系统是怎么知道用户关注的博主发了新帖子的?13.    帖子入库的表结构是怎么样的,为什么要这么设计?14.    如果帖子内容是一个富文本,输入了一段包含特殊字符或前端注入(如 alert)的代码,导致前端渲染时弹窗了,用户上传了前端无法渲染的特殊字符给后端,如何解决这个问题?15.    如果前端的同学告诉你:“我不能包含XX这些特殊字符”,那你(后端)打算怎么做?16.    有没有考虑过做过滤器,或者在用户录入/接收到内容的时候,用正则表达式之类的去匹配,如果有特殊字符就替换掉或者挡住?(引导性提问)17.    你基于 Redis 的固定窗口限流具体是怎么做的?18.    这个限流的设计方案是有去参考过其他的解决方案,还是自己想出来的?19.    基于 Redis 的限流和谷歌的限流工具里面的限流有什么区别?20.    为什么要使用 Redis 这种中间件做限流,而不是放在本地内存(如 Java 的 Map 或静态属性)中实现?21.    如果是多台机器的分布式系统,使用本地内存做限流会出现什么问题?22.    除了 Redis 和本地内存,还有哪些技术或者中间件可以实现限流?23.    关于实习中平台用 Redis 做草稿缓存,如果前端页面一直关掉不保存,导致 Redis 数据无限膨胀,如何清理这些冗余数据?24.    如果业务人员操作配了一半去吃饭,过了设定的过期时间缓存数据被清除了怎么办?25.    如果同一个账号在两台电脑上同时登录,并对同一份工作流进行交叉修改,如何解决两边数据冲突覆盖(协同操作)的问题?26.    如果要给上述并发场景加锁,打算怎么去实现这个加锁逻辑?什么时候进行解锁? 加锁就一定能解决这个问题吗?27.    假如我一定要两个人可以并行操作怎么办?28.    如果发现了一些自己认知以外的问题,或者被安排了不熟悉的研发任务,你会基于什么样的方式去快速解决?29.    如果项目时间非常紧迫,你该怎么处理不熟悉的需求?30.    你最近在学习哪方面的技术?31.    现在学习 AI Agent 开发学到什么程度了?32.    简单介绍一下你正在学习的项目里面具体是什么内容?33.    平时编程会用到哪些外部工具或 AI 工具来进行辅助?34.    在使用 AI 命令行工具开发时,它可能会直接把代码改错,之前有遇到过这种情况吗?是如何防范和解决的?35.    探讨一下概念,你知道 AI 为什么会自动调用 Skill 或者是直接调用 MCP 吗?我这边没有什么问题了,你这边有什么想问我的吗?
大厂面试问八股多还是项目...
点赞 评论 收藏
分享
评论
1
7
分享

创作者周榜

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