Skip to content

面试速答(先看这里)

**一句话结论:**端口冲突问题,其实就是两个程序同时想占用同一个端口,结果后启动的那个 bind 失败。

60秒标准回答:

端口冲突问题,其实就是两个程序同时想占用同一个端口,结果后启动的那个 bind 失败。Java应用如果端口冲突会在 启动时报错 : java.net.BindException: Address already in use Nginx/Redis/MySQL 等会直接提示 port already in use 。会导致服务启动失败

如果发现冲突了,首先看下这个端口别谁用了,比如8080端口冲突了,可以用以下方式查看

输出结果会告诉你哪个进程在占用这个端口

**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点

回答主线:

  • **要点1:**如果发现冲突了,首先看下这个端口别谁用了,比如8080端口冲突了,可以用以下方式查看。
  • **要点2:**输出结果会告诉你哪个进程在占用这个端口。
  • **要点3:**定位到冲突之后,想要解决冲突有两个办法:

**记忆锚点:**already → Java → kill → use → PID → javanetBindException

易错提醒:

  • 端口冲突问题,其实就是两个程序同时想占用同一个端口,结果后启动的那个 bind 失败。
  • 会导致服务启动失败。

加分表达:

  • Java应用如果端口冲突会在 启动时报错 : java.net.BindException: Address already in use Nginx/Redis/MySQL 等会直接提示 port already in use 。
  • 如果发现冲突了,首先看下这个端口别谁用了,比如8080端口冲突了,可以用以下方式查看。
  • 定位到冲突之后,想要解决冲突有两个办法: 1、杀掉占用端口的那个进程 如 kill <PID> ,或者kill -9 <PID> 2、修改端口号重新启动 Java Spring Boot通过配置项可以修改端口号 server.port=9090 避免 0–1023(需要 root 权限的知名端口) 建议使用1024–49151 之内的端口号 49152–65…

追问准备:

  • 围绕「already」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「Java」:底层原理是什么?使用时有哪些边界和常见坑?
  • 围绕「kill」:底层原理是什么?使用时有哪些边界和常见坑?
  • 如果线上出现异常,你会如何定位、验证并规避?

典型回答 ​

端口冲突问题,其实就是两个程序同时想占用同一个端口,结果后启动的那个 bind 失败。Java应用如果端口冲突会在启动时报错:java.net.BindException: Address already in useNginx/Redis/MySQL 等会直接提示 port already in use。会导致服务启动失败。

如果发现冲突了,首先看下这个端口别谁用了,比如8080端口冲突了,可以用以下方式查看。

bash
# 方法 1:lsof
lsof -i:8080

# 方法 2:netstat
netstat -tulnp | grep 8080

# 方法 3:ss
ss -tulnp | grep 8080

输出结果会告诉你哪个进程在占用这个端口。

定位到冲突之后,想要解决冲突有两个办法:

1、杀掉占用端口的那个进程

  • 如 kill <PID> ,或者kill -9 <PID>

2、修改端口号重新启动

  • Java Spring Boot通过配置项可以修改端口号 server.port=9090

  • 改端口要注意:

  • 避免 0–1023(需要 root 权限的知名端口)

  • 建议使用1024–49151 之内的端口号

  • 49152–65535 是动态端口(系统临时分配,避免长期监听用它)