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

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

相关推荐
yyuuuzz37 分钟前
企业出海:技术部署与运维避坑
运维
郝亚军1 小时前
ubuntu通过samba,让win11可以访问其共享文件夹
linux·服务器·ubuntu
workflower1 小时前
人机交互部分OOD
运维·人工智能·自动化·集成测试·人机交互·软件需求
一个人旅程~1 小时前
旧电脑的“拯救者”?Linux Mint20.3是怎样适配软件硬件以及兼顾兼容与性能的平衡的?
linux·经验分享·电脑
农村小镇哥1 小时前
nginx服务器的介绍
运维·服务器·nginx
小夏子_riotous2 小时前
Docker学习路径——3、常用命令
linux·运维·服务器·学习·docker·容器·centos
其实防守也摸鱼2 小时前
无线网络安全---WLAN相关安全工具--kali(理论附题目)
linux·安全·web安全·学习笔记·kali·命令模式·wlan
uesowys4 小时前
CentOS Linux安装部署OpenClaw
linux·centos·安装部署openclaw
IMPYLH4 小时前
Linux 的 rm 命令
linux·运维·服务器·网络·bash
YIN_尹4 小时前
【Linux系统编程】进程地址空间
linux·c++