2026.4.29 第七篇

集合的分类

单列集合:List(有序重复)、Queue(队列结构)、Set(无序不重复) 键值对集合:HashMap、ConcurrentHashMap

有哪些线程安全的集合

CopyOnWriteArrayList、ConcurrentHashMap、HashTable

说一下CopyOnWriteArrayList

CopyOnWrite遵循写时复制原则,读的时候正常读原数组,写的时候创建新数组,在新数组上完成修改,最后把数组引用指向新数组。

说一下你知道的锁

Synchronized:非公平、可重入、不可中断,使用Moniter对象实现,获取所得时候进入Monitor对象,释放锁的时候退出Monitor CAS:一种乐观锁,默认不会发生所冲突,使用CPU原子指令实现,主要依赖旧值、预期值、新值,如果预期值与旧值相同就执行操作,不相同就被其他线程修改了,不执行操作 ReentrantLock:可以是公平锁也可以是非公平锁,可重入,可中断,依赖AQS实现

final修饰变量与引用对象的区别

final 修饰基本数据类型:变量的值不能被修改。 final 修饰引用类型:引用地址不能变,但是对象内部的属性可以变。

线程池的参数

核心线程数 最大线程数 非核心线程存活时间 时间单位 任务队列 线程工厂 拒绝策略

执行流程

如果核心线程数没满就创建核心线程执行任务

核心线程满了就将任务放入任务队列

任务队列满了就创建非核心线程来执行任务

线程数达到最大线程数执行拒绝策略

拒绝策略有哪几种?

DiscardPolicy:直接拒绝但不报错 AbortPolicy:拒绝并报错 DiscardOldestPolicy:抛弃最老的任务 CallerRunsPolicy: 由调用线程执行,

创建线程池的几种方法

Executors 工具类
常见方法:

  1. Executors.newFixedThreadPool()
  2. Executors.newSingleThreadExecutor() 不推荐直接使用 Executors 创建线程池,因为可能导致队列过大或线程数过多,引发 OOM。

直接使用 ThreadPoolExecutor

  • 推荐手动创建线程池,明确指定核心线程数、最大线程数、任务队列和拒绝策略。

出现慢SQL怎么优化

SQL语句优化

  • 避免 select *
  • 避免不必要的子查询
  • 小表驱动大表
  • 分页深时使用游标分页或延迟关联

索引优化(使用覆盖索引)

  • 给 where、join、order by、group by 字段建立合适索引
  • 使用联合索引
  • 尽量使用覆盖索引 使用缓存
  • 对热点数据使用 Redis 缓存

explan主要查看哪几个参数

type:访问类型

  • const > eq_ref > ref > range > index > ALL key:实际使用到的索引

rows:预估扫描行数

extra:额外信息,using index(索引覆盖)、using index condition(索引下推)、using filesort(文件排序)

索引失效有哪些

对索引列使用函数、表达式运算

OR连接的数据列有一个不是索引列

隐式的类型转换

前模糊查询

联合索引不符合最左前缀

模糊匹配必然会失效吗

不是的,只有%开头的模糊匹配才会失效,%开头的模糊查询不知道从哪开始检索

索引的分类

按数据结构可以分为:B+树索引、hash索引

按存储结构可以分为:聚簇索引、非聚簇索引

按功能分:主键索引、唯一索引、普通索引、前缀索引

按数据列个数可以分为:联合索引、单列索引

讲一下Spring AOP

把日志、权限校验、事务、异常处理、接口耗时统计等公共逻辑,从业务代码中抽离出来,形成切面,然后在不修改业务代码的情况下,增强目标方法。

AOP支持的两种动态代理是什么

JDK 动态代理

  • 基于接口生成代理对象
  • 要求目标类实现接口
  • 代理的是接口方法

CGLIB 动态代理

  • 基于继承生成目标类的子类
  • 不要求目标类实现接口
  • 不能代理 final 类和 final 方法

Spring Bean的作用域

Spring Bean 常见作用域有:

  1. singleton 默认作用域,整个 Spring 容器中只有一个 Bean 实例。

  2. prototype 每次获取 Bean 都会创建一个新的对象。

事务失效有哪些情况

方法使用private修饰

原因:Spring AOP 代理只能增强可被代理调用的方法,private 方法不能被代理对象重写或拦截。

解决办法:事务方法尽量使用 public 修饰

显式使用this调用事务

原因:this 调用的是当前对象本身,不是 Spring 代理对象,所以不会走 AOP 代理,事务失效。

解决办法:通过代理对象调用,注入自身代理对象

面经地址

熙牛医疗一面 Java后端_牛客网 都是常见的八股

#面经#
每日面经记录 文章被收录于专栏

记录每天Java和Agent面经学习

全部评论

相关推荐

不愿透露姓名的神秘牛友
04-30 17:45
本人简历上 1 个 RAG 项目 + 1 个 Agent demo;这次面的是AI岗一面前我以为:背完八股 + 把项目讲清楚,应该能稳过。0-5 min:自我介绍 + 项目背景- 顺利。讲清楚了我的 RAG 是给法律咨询场景做的,痛点是大模型不懂行业术语。5-20 min:项目深挖(开始崩)- Q1:你的法律文档总共多少?切了多少个 chunk?- 我:约 500 份 PDF,5 万个 chunk- Q2:500 份 PDF 加起来才 5 万 chunk?平均每份 100 个 chunk,你切片粒度是多少?- 我:512 token- Q3:法律文档里"第三条第二款"和"第三条之二"是不同含义,你的切片会不会把它切散?- 我:(沉默 5 秒)……应该会- Q4:那你怎么解决?- 我:我可以加一个 metadata……(开始编)❌ 第一次崩:切片粒度没考虑业务语义。20-35 min:评测体系(继续崩)- Q:你怎么知道你的 RAG 有效?- 我:我用 Recall@5……- Q:评测集多少条?怎么构造的?- 我:100 条,我手工标注的- Q:100 条够吗?分布怎么样?- 我:分布……我没分- Q:那你的 Recall@5 是 0.81,你怎么知道这个数字是好是坏?baseline 是什么?- 我:(沉默 10 秒)❌ 第二次崩:没有 baseline,没分布分析,纯靠"看起来还行"。35-55 min:Agent 部分(彻底崩)- Q:你的 Agent demo 用了几个工具?- 我:3 个,搜索、计算器、文档查询- Q:当用户问一个问题,你的 Agent 怎么决定调哪个工具?- 我:用 ReAct,让模型自己决定- Q:模型决策错了怎么办?- 我:我加了个 reflection……- Q:reflection 失败 3 次后怎么处理?- 我:(沉默 15 秒)……我没想过❌ 第三次崩:异常路径完全没设计。55-65 min:业务理解 + 反问- Q:你觉得字节做 AI 应用最大的瓶颈是什么?- 我:算力?数据?- Q:你看过哪些字节最近发的 AI 产品?- 我:豆包、扣子……- Q:扣子是 Agent 平台还是工作流平台?- 我:(再次沉默)❌ 第四次崩:对面试公司业务一无所知。
面试官拷打AI项目都会问...
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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