面试问答
结合 ZrLog 部署(Maven 构建 + 环境配置 + 服务部署)的全流程,整理排查 / 运维 / 开发三类高频问题,覆盖场景、原因、解答思路,可直接用于沟通或故障定位:
一、环境准备阶段高频问题
1. 执行 java -version 提示 "未找到命令",但已经解压 JDK 并配置了 /etc/profile.d/jdk.sh
-
核心原因:环境变量未生效、路径写错、解压失败、系统位数 / 架构不匹配;
-
排查思路:
# 1. 验证环境变量是否加载 source /etc/profile.d/jdk.sh echo $JAVA_HOME # 应输出 /root/jdk11,否则路径写错 # 2. 验证JDK解压是否完整 ls /root/jdk11/bin/java # 无输出则解压失败,重新上传压缩包解压 # 3. 验证系统架构(JDK需匹配x64/aarch64) uname -m # x86_64对应jdk-11_linux-x64_bin.tar.gz -
解答要点:先确认环境变量生效,再排查文件完整性,最后匹配系统架构。
2. mvn -version 报错 "JAVA_HOME should point to a JDK not a JRE"
-
核心原因:
JAVA_HOME指向了 JRE 目录,或 JDK 解压包本身缺失开发组件(仅装了 JRE); -
解答思路:
-
检查
JAVA_HOME配置:echo $JAVA_HOME需指向JDK 根目录 (如/root/jdk11),而非jdk11/jre; -
重新下载完整 JDK 包(JRE 仅能运行,Maven 编译需要 JDK 的 javac 等开发工具)。
-
3. 配置阿里云镜像后,Maven 下载依赖仍超时 / 失败
-
核心原因:pom.xml 配置错误、Maven 镜像未全局配置、网络 / 防火墙限制、依赖版本不存在;
-
排查思路:
# 1. 检查pom.xml是否写入成功 cat /root/zrlog-src/META-INF/maven/com.hibegin/package/pom.xml # 确认内容完整 # 2. 全局配置阿里云镜像(补充兜底) cat > /root/maven/conf/settings.xml << 'EOF' <?xml version="1.0" encoding="UTF-8"?> <settings> <mirrors> <mirror> <id>aliyunmaven</id> <name>阿里云中央仓库</name> <url>https://maven.aliyun.com/repository/public</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors> </EOF> # 3. 测试网络连通性 ping maven.aliyun.com # 不通则检查防火墙/代理
二、Maven 构建阶段高频问题
1. 执行 mvn clean package 提示 "找不到 pom.xml"
-
核心原因:执行目录错误、源码解压路径不对;
-
解答思路:
-
先通过
find /root/zrlog-src -name pom.xml定位 pom.xml 绝对路径; -
进入该目录后再执行构建命令(如
cd /root/zrlog-src/META-INF/maven/com.hibegin/package/); -
验证源码解压:
ls /root/zrlog-src/WEB-INF需有内容,否则重新解压源码包。
-
2. 构建时提示 "编译失败:无效的目标发行版 11"
-
核心原因:JDK 版本与 pom.xml 中
source/target配置不匹配、JAVA_HOME指向低版本 JDK; -
解答思路:
-
验证 JDK 版本:
java -version需为 11.x,否则重新配置 JDK; -
检查 pom.xml 的编译插件配置:确认
<source>11</source>和<target>11</target>与本地 JDK 一致; -
执行
mvn -v查看 Maven 使用的 JDK:需与JAVA_HOME一致。
-
3. 构建成功但 target 目录无 War 包
-
核心原因:pom.xml 的
packaging不是 war、war 插件配置错误、源码目录路径写错; -
排查思路:
-
检查 pom.xml:确认
<packaging>war</packaging>存在; -
检查 war 插件的
webResources配置:<directory>/root/zrlog-src</directory>需指向源码根目录; -
重新执行构建并查看日志:
mvn clean package -X(-X 打印详细日志),定位 "未生成 War 包" 的具体原因。
-
三、Tomcat/Nginx 部署阶段高频问题
1. Tomcat 启动后,catalina.out 日志提示 "数据库连接拒绝"
-
核心原因:MariaDB 未启动、数据库用户 / 密码错误、权限未开放、端口 3306 被防火墙拦截;
-
解答思路:
# 1. 验证MariaDB状态 systemctl status mariadb # 未启动则执行 systemctl start mariadb # 2. 验证数据库连接 mysql -uzrlog -pzrlog123456 -h 192.168.223.20 -P3306 # 连接失败则检查密码/权限 # 3. 验证防火墙 firewall-cmd --list-ports | grep 3306 # 无输出则开放端口:firewall-cmd --add-port=3306/tcp --permanent
2. 访问 http://192.168.223.20 报 404,Tomcat 日志无报错
-
核心原因:War 包未解压、Tomcat 端口 8080 未监听、Nginx 反向代理配置错误;
-
排查思路:
# 1. 检查Tomcat webapps目录 ls /root/tomcat10/webapps/ROOT # 无目录则War包未解压,手动解压:unzip ROOT.war -d ROOT # 2. 检查Tomcat端口监听 netstat -tulpn | grep 8080 # 无输出则Tomcat未启动,或端口被占用 # 3. 检查Nginx配置 nginx -t # 验证配置语法 curl http://127.0.0.1:8080 # 本机访问Tomcat端口,若404则问题在Tomcat,否则在Nginx
3. Nginx 启动失败,提示 "address already in use :80"
-
核心原因:80 端口被其他进程(如 httpd、firewalld)占用;
-
解答思路:
# 1. 查找80端口占用进程 netstat -tulpn | grep 80 # 2. 停止占用进程(如httpd) systemctl stop httpd && systemctl disable httpd # 3. 重启Nginx systemctl restart nginx
四、Web 安装阶段高频问题
1. 访问安装页面,填写数据库信息后提示 "连接失败"
-
核心原因:数据库地址 / 端口 / 密码错误、zrlog 用户无远程访问权限、MariaDB 绑定 127.0.0.1;
-
排查思路:
-
验证数据库用户权限:
mysql -uroot -e "SELECT host,user FROM mysql.user WHERE user='zrlog';"需包含%(允许所有 IP 访问); -
检查 MariaDB 绑定地址:修改
/etc/my.cnf注释bind-address=127.0.0.1,重启 MariaDB; -
服务器本地测试数据库连接:
mysql -uzrlog -pzrlog123456 -h 192.168.223.20需能成功登录。
-
2. 安装完成后,后台管理页面样式错乱 / 静态资源 404
-
核心原因:War 包解压不完整、Nginx 未转发静态资源、Tomcat 静态资源路径配置错误;
-
解答思路:
-
检查 Tomcat 解压后的静态资源:
ls /root/tomcat10/webapps/ROOT/css需有 css 文件; -
验证 Nginx 反向代理配置:确保
proxy_pass正确,且无多余的location拦截静态资源; -
清理浏览器缓存,或直接访问
http://192.168.223.20:8080(跳过 Nginx)验证是否正常。
-
五、通用运维类问题
1. 如何查看各服务的运行状态?
# JDK/Maven 版本
java -version && mvn -version
# MariaDB 状态
systemctl status mariadb
# Nginx 状态 + 配置验证
systemctl status nginx && nginx -t
# Tomcat 状态(端口+日志)
netstat -tulpn | grep 8080 && tail -10 /root/tomcat10/logs/catalina.out
2. 如何重启所有服务(部署更新后)?
# 停止服务
/root/tomcat10/bin/shutdown.sh
systemctl stop nginx
systemctl stop mariadb
# 启动服务(按依赖顺序)
systemctl start mariadb
systemctl start nginx
/root/tomcat10/bin/startup.sh
# 验证
curl http://192.168.223.20 # 返回200则正常
3. 如何修改 ZrLog 的访问端口(比如从 80 改成 8088)?
-
步骤 1:修改 Nginx 配置(/etc/nginx/conf.d/zrlog.conf):
server { listen 8088; # 改端口 server_name _; # 其余配置不变 } -
步骤 2:重启 Nginx:
systemctl restart nginx; -
步骤 3:开放防火墙端口:
firewall-cmd --add-port=8088/tcp --permanent && firewall-cmd --reload; -
验证:访问
http://192.168.223.20:8088。
以上问题覆盖部署全流程的核心卡点,每个问题均对应 "现象 - 原因 - 可落地的排查 / 解决步骤",可直接用于运维沟通、新人培训或故障定位手册。