Zrlog面试问答及问题解决方案

面试问答

结合 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

以上问题覆盖部署全流程的核心卡点,每个问题均对应 "现象 - 原因 - 可落地的排查 / 解决步骤",可直接用于运维沟通、新人培训或故障定位手册。

相关推荐
小邋遢2.02 小时前
Centos stream 9 安装后root不能远程登录问题
linux·运维·centos
小清兔2 小时前
unity游戏制作中问题汇总(持续更新)
游戏·unity·游戏引擎
学不完的2 小时前
ZrLog 博客系统部署指南(无 War 包版,Maven 构建 + 阿里云镜像优化)
java·linux·nginx·阿里云·maven
伟大的大威2 小时前
彻底解决 Nginx Proxy Manager 反代 MinIO 报 SignatureDoesNotMatch (S3 签名不匹配) 的终极方案
运维·nginx·minio
yy_xzz2 小时前
【Linux开发】 02 Linux TCP 网络编程——迭代、回声服务器
linux·服务器·网络
秦渝兴2 小时前
从手工高可用到全容器化:我的 Keepalived+Nginx+Tomcat+MySQL 项目迁移实战
linux·运维·mysql·nginx·容器·tomcat
新时代牛马2 小时前
Autoexecra — 嵌入式设备的轻量级智能网关
linux
DevilSeagull2 小时前
Linux Vim 文本编辑器基础指南
linux·运维·vim
无忧智库2 小时前
制造业的中枢神经:MES系统如何驱动智慧工厂从“自动化”迈向“自主化”(PPT)
运维·自动化