爱学习集团Java开发二面凉经
《面试题目》
- MySQL 的索引有哪些?
- 建索引的时候可以建哪些索引?
- SQL 怎么优化?
- Spring IOC 怎么自动装配 Bean?
- SpringBoot 的启动流程?
- 说一些你熟悉的设计模式,用工厂模式手写一道算法题
- 算法题:LeetCode 14 最长公共前缀
- static 关键字有什么用?
- public / private / protected 有什么区别?
- 项目用的什么框架?
- 了解过 LangChain 和 LangGraph 吗?
- 记忆什么时候提取?
- 为什么用 ES 做向量数据库?
《参考解析》
- Spring IOC 自动装配 Bean 原理:容器启动时先通过组件扫描(
@ComponentScan)或配置类找到需要管理的类,实例化后根据@Autowired/@Resource等注解,按类型(byType)或名称(byName)从容器中查找匹配的依赖 Bean 并注入,涉及依赖冲突时可用@Qualifier或@Primary指定优先级。 - SpringBoot 启动流程核心步骤:创建
SpringApplication实例 → 推断应用类型(Servlet/Reactive)→ 加载并执行ApplicationContextInitializer/ApplicationListener→ 创建并刷新ApplicationContext(触发 Bean 的实例化、自动装配、AutoConfiguration生效)→ 启动内嵌 Web 容器(如 Tomcat)→ 执行CommandLineRunner/ApplicationRunner。 - ES 作为向量数据库的原因:Elasticsearch 从 8.x 版本起原生支持 dense_vector 类型和近似最近邻(ANN)检索(基于 HNSW 算法),企业如果已有 ES 集群用于日志/搜索场景,直接复用同一套基础设施做向量检索能省去额外引入专用向量数据库(如 Milvus)的运维成本,同时支持全文检索与向量检索混合查询。
- LangChain vs LangGraph:LangChain 提供了 Prompt 模板、Chain、Agent、工具调用等基础抽象,适合构建相对线性的 LLM 应用;LangGraph 则是在其基础上引入图结构,把应用流程建模为有状态的节点和边,更适合构建需要循环、条件分支、多智能体协作的复杂 Agent 工作流。