25年8月KN Group Java实习 一面
#JAVA##JAVA面经##JAVA内推#
技术部分
- 平时怎么理解Java的面向对象?项目里有实际用到哪些设计思路吗?
我认为面向对象不仅是语法特性,更是用现实世界思维建模软件的方法论:
- 封装:隐藏内部实现(如订单状态机封装在OrderService,外部只调
placeOrder())- 继承:代码复用(项目中BaseController统一封装响应格式)
- 多态:扩展灵活性(支付模块用策略模式,见下题)
项目实践:- 用策略模式+工厂模式实现支付方式:定义
PaymentStrategy接口,Alipay/WechatPay实现类,PaymentFactory根据type返回策略。新增支付方式只需加实现类,符合开闭原则。- 模板方法模式:导出功能中,
AbstractExporter定义流程(查数据→生成文件→上传OSS),Excel/PDF子类重写具体步骤。
核心收获:面向对象让代码像搭积木,改需求时‘改一处而非改百处’。
- 多态能举个你写代码时遇到的例子吗?比如父类引用调子类方法那种。
校园二手平台中,商品审核场景:
// 父类接口 public interface ContentChecker { boolean check(String content); String getType(); // 返回"文本"/"图片" } // 子类实现 @Component public class TextChecker implements ContentChecker { ... } // 敏感词过滤 @Component public class ImageChecker implements ContentChecker { ... } // 调用阿里云内容安全API // 多态应用:审核服务 @Service public class AuditService { @Autowired private List<ContentChecker> checkers; // Spring自动注入所有实现类 public boolean audit(Product product) { return checkers.stream() .filter(checker -> checker.getType().equals(product.getType())) .allMatch(checker -> checker.check(product.getContent())); // 父类引用调用子类方法 } }价值:新增视频审核只需加
VideoChecker实现,无需修改AuditService。这让我深刻体会到:多态是解耦扩展的基石。
- 假如让你做一个简单的订单功能(下单、查订单),你会拆成哪几个模块?为啥这么分?
按高内聚低耦合+单一职责原则拆解:
1️⃣ API层(Controller):接收HTTP请求,参数校验,统一响应封装
2️⃣ 应用层(Service):
OrderService:核心业务逻辑(创建订单、状态流转)InventoryService:库存扣减(防腐层,隔离商品模块)
3️⃣ 领域层(Domain):Order实体:含状态机(create→paid→shipped)OrderRepository:持久化接口(定义方法,不写SQL)
4️⃣ 基础设施层(Infrastructure):OrderMapper:MyBatis实现Repository- 消息发送(RabbitMQ通知物流)
分层价值:- 修改数据库不影响业务逻辑(Repository接口隔离)
- 单元测试可Mock Repository,专注验证Service逻辑
- 符合DDD思想,未来扩展优惠券、积分等模块时边界清晰
- 数据库主从复
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
【八股真解】精炼最新高频面经 文章被收录于专栏
本专栏在精不在多,内容分为八股文、大厂真实面经,面试通过后将offer和面试题私发给我,可退还专栏的收益部分费用。欢迎大家共建专栏