2026.4.26 面经学习

StringBuilder和StringBuffer的区别是什么?

StringBuilderStringBuffer 都是用来拼接字符串的可变对象,核心区别是:

StringBuilder:线程不安全,性能更高。

StringBuffer:线程安全,方法大多加了 synchronized,性能相对低。

大多数实际开发中更常用 StringBuilder,因为字符串拼接通常发生在方法内部,是局部变量,不会被多个线程共享。

遇到过哪些线程安全问题?

我遇到过比较典型的线程安全问题是共享变量并发修改导致数据不一致

比如多个线程同时更新同一个统计值、库存数量、任务状态,如果直接用普通变量或者普通对象字段,会出现覆盖更新问题。

例如: count++;

这行代码不是原子操作,实际包含:

读取 count

加 1

写回 count

多个线程同时执行时,可能两个线程都读到 count = 10,然后都写回 11,最终少加了一次。 可以使用AtomicInteger来解决

ArrayList和LinkedList的区别?讲一下链表的数据结构,LinkedList是双向链表还是单向链表?

ArrayList是基于动态数组实现的,有扩容机制,扩容后数组大小变为原来的1.5倍,ArrayList的元素分布在内存中是连续的

LinkedList是基于双向链表实现的,理论上没有大小限制,元素在内存中的分布是分散的

讲一下HashMap?怎么根据hash值定位到数组?一定要重写hashCode和equals吗?

HashMap是Java的键值数据结构,JDK7是链表+数组实现,JDK8是链表+数组+红黑树

怎么根据hash值定位到数组

hash & (n - 1)

  • n 是数组长度(一定是 2 的幂
  • & 是按位与运算,本质等价于取模,但更高效

必须重写hashCode和equals吗

如果把“自定义对象”作为 key,必须重写。 HashMap 判断 key 是否相同分两步:

  1. 先比 hashCode
  2. 再比 equals 如果不重写: new User(1) 和 new User(1) 默认:
  • hashCode 不同(对象地址)
  • equals 为 false 结果:
  • 会被当成两个 key → 数据错乱 / 查不到

讲一下怎么实现单例模式?

用过哪些Java命令?遇到过实际问题吗?

  • jps:查看 Java 进程
  • jstack:查看线程栈(排查死锁、卡顿)
  • jmap:查看内存(dump 堆、分析对象)

jps

jps:Java 进程查看工具,用于列出当前机器上运行的 Java 进程

jps -l # 查看Java进程

最左边是进程PID alt

jstack

jstack:查看线程栈,把 JVM 内所有线程的运行状态 + 调用栈全部展开,用于定位并发和性能问题。

jstack PID #查看线程栈信息

jstack 27124 查看对应的线程栈 alt jstack排查死锁 jstack 27124 | grep -A 30 "Found one Java-level deadlock"

|:管道符,把前一个命令的输出交给后一个命令处理。

grep "Found one Java-level deadlock" 表示搜索包含这句话的行。

-A 20表示匹配到这一行之后,再往后显示 20 行。

jmap

jmap:查看内存 / 导出堆,用于查看 JVM 堆内存使用情况和导出堆快照,主要用于排查 OOM、内存泄漏、对象占用异常jmap -heap PID :查看堆内存概要 alt jmap -dump:live,format=b,file=heap.hprof PID:导出堆 alt 导出的堆可以在IDEA中查看,文件名是heap.hprof alt

导出的堆主要看什么?

最大对象和GC 根看哪些对象占用空间大,对象为什么没有被回收

怎么在Linux上查看Java进程占用端口?

jps -l 拿到Java运行进程的PID,后续几个回答默认拿到了PID

netstat -tlnp | grep PID :获取对应的端口

netstat:查看网络连接、监听端口、路由表等网络信息。

-t:只看 TCP 连接。

-l:只看监听中的端口,也就是服务端口,比如 80803306

-n:用数字显示地址和端口,不做域名解析。

怎么在Linux上查看Java进程打开了哪些文件?

lsof -p PID

lsof:list open files,列出系统中被进程打开的文件。

-p PID:只查看指定进程。

怎么在Linux上查看Java进程内存占用率?

top -p PID top:系统监控工具,类似任务管理器,实时刷新进程状态。 -p PID:只显示指定进程

讲一下输入url到返回网页的过程?

输入 URL
→ DNS 解析
→ TCP 建立连接(可能是 TLS)
→ 发送 HTTP 请求
→ 服务端处理
→ 返回响应
→ 浏览器解析 + 渲染
→ 连接复用或关闭

DNS使用的端口是哪个?DNS怎么去找到根域名服务器的?常见的DNS服务器的地址有哪些?本地DNS配置写在哪里的?

DNS默认的端口是53 常见的DNS:Google的8.8.8.8、CloudFlare的1.1.1.1

DNS怎么去找根域名服务器的?

这是递归解析 + 迭代查询的过程(以访问 www.example.com 为例):

  1. 本机把请求交给本地 DNS(递归解析器)
  2. 本地 DNS 如果没有缓存,会从**根服务器(.)**开始查: 根服务器(.)
    → 返回:.com 顶级域服务器地址
    → 访问 .com 服务器
    → 返回:example.com 权威 DNS
    → 访问 example.com 权威 DNS
    → 返回:www.example.com 的 IP

本地DNS的配置写在哪里?

linux的在/etc/resolv.conf

面经链接

微步在线Java一面_牛客网

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

记录每天Java和Agent面经学习

全部评论

相关推荐

04-24 18:13
南京大学 Java
点赞 评论 收藏
分享
头像
04-25 18:51
已编辑
华东师范大学 算法工程师
暑期实习从2月开始投,面了两个月,流程该挂的都挂完了,腾讯字节一共号称是1.7w个hc,不知道都发给谁了,估计今年秋招要难顶。Timeline米哈游、美团、蚂蚁、微软等公司直接简历挂穿,没进面。携程:3.3 投递、测评3.12 笔试3.18 一面3.25 二面4.13 ai面(hr面)4.14 英语测评4.23 offer(已拒)腾讯:2.6 测评2.28 wxg一面3.5 wxg二面(挂)3.11 teg一面3.21 teg二面(取消)3.31 teg一面4.10 teg二面(挂)4.21 wxg一面4.24 wxg二面(挂)字节:1.28 aml约面(取消)3.17 火山一面(挂)4.8 aml一面(挂)4.20 抖音data一面(挂)阿里:3.23 投递、测评3.28 笔试3.31 淘天一面4.8 钉钉一面4.9 淘天二面4.10 阿里控股一面4.12 钉钉二面(取消)4.15 淘天hr面4.16 淘天offer(已接)4.21 高德一面(取消)4.22 淘宝闪购一面(取消)面试最大的感触是,现在撞上ai转型,一堆老业务急着转向,新业务非常不成熟,研究型的组bar非常高根本进不去,业务侧挂着算法的岗位干的都是工程活,面试却又要问算法,另外agent的落地也远没有那么广,绝大多数还是那套写死的系统调一下llm api或者做做rag,其余少部分真的在搭agent的,基本不能在线上服务用什么很智能的模型,现阶段成本太高,进去大概率就是给垃圾模型从工程方面兜底,除了业务场景的应用和数据经验以外,技术方面很难有什么提升。算法岗做不了基模的还是去搜广推好,之前判断失误了完全没投,秋招不知道还进不进得去。
绿糖滑稽:携程这什么雷霆流程时长
我的求职进度条
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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