news 2026/10/7 3:13:02

Java毕设项目Linux部署全攻略:环境搭建到云服务器上线

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java毕设项目Linux部署全攻略:环境搭建到云服务器上线

1. 项目概述

1.1 为什么把Java和Linux放在一起做毕设

每年到毕业季,都会被同一个问题刷屏:毕设到底选什么方向?我的建议一直很明确——Java后端 + Linux服务器部署这套组合,是风险最低、性价比最高的选择之一。

原因很直白。Java生态足够成熟,网上能找到海量的参考代码、开源项目、框架教程,哪怕你基础一般,也能在短时间内拼出一个功能完整的系统。而Linux又是绝大多数生产服务器的操作系统,你做的项目最终要“跑起来”,而不是停留在IDE里,那就必然要接触Linux环境。两者结合,你的毕设既有“开发”的完整过程,又有“部署上线”的闭环,答辩时能讲的东西非常多。

这套组合真正解决的问题是:很多学生写完代码就完了,项目一离开Windows就起不来,数据库连不上、路径不对、字符集乱码、内存不够。而这些其实都是可以在毕设周期内提前规避的。这篇博文我会从环境搭建开始,一路讲到最后部署到云服务器,把我实操中踩过的坑、验证过有效的方案都写出来。

1.2 这篇指南适合谁

  • 选题方向是Web管理系统、电商平台、后台管理系统、前后端分离项目的毕业生
  • 技术栈是Spring Boot + MyBatis / JPA + MySQL + Redis这类主流组合
  • 对Linux的了解仅限于“用过几个命令”,还没完整部署过项目的人

如果你属于以上情况,这篇文章就是为你准备的。我会尽量把每一步都写到“照着做就能跑通”的粒度,尤其是那些默认你懂、其实很多人不记得的知识点。


2. 整体设计:毕设项目的技术选型与方案规划

2.1 技术选型背后的逻辑

毕设和商业项目有一个本质区别:没有真实的业务压力,但要求逻辑完整、能演示、能自圆其说。所以技术选型不需要追求新、追求极端性能,而是要追求稳、追求你能讲清楚。

Java这边,SSM或者Spring Boot二选一。我觉得除非你们导师有硬性要求,否则直接上Spring Boot。理由很简单:SSM需要手动配置一大堆XML,Spring Boot默认自动配置,省下来的时间足够你把业务模块多写两个。MyBatis-Plus也是推荐项,单表CRUD几乎不用写SQL,对新手友好,答辩时被问到底层原理也好解释。

前端建议用Vue或者Thymeleaf。如果你是前后端分离,那部署时多一个前端构建步骤,多一道工序;如果用Thymeleaf模板引擎,打成Jar包直接就能跑,部署链路会短很多。根据我的经验,毕设阶段“前后端分离 + Vite构建”看着加分,但如果对Node和Linux不熟,反而会卡在部署环节出不来。务实一点,哪怕用简单的Bootstrap + Thymeleaf,把后端逻辑讲透彻,分数都不会低。

数据库选MySQL,缓存选Redis,这个没什么好纠结的。MySQL是主流教学数据库,Redis能体现出“性能优化”的意识,哪怕你只是用它做了个登录验证码缓存,答辩时也能理直气壮地说“我引入了缓存机制”。

2.2 模块划分和命名规范

毕设项目不需要像企业级项目那样庞大的模块划分,但至少要逻辑清晰。我个人常用的一个结构:

  • common:统一返回结果、异常处理、工具类
  • config:配置类,比如跨域、拦截器、Redis配置
  • controller:接口层
  • service:业务层,接口加实现
  • mapper:数据访问层
  • entity:数据库实体
  • dto/vo:入参出参对象
  • utils:工具类,比如JWT工具、文件处理

包名建议用com.xxx.xxx,这个无所谓好与不好,但一定别用中文包名,也别用和别人混淆的名字。类名、方法名驼峰命名,数据库表名小写加下划线,这个规范从写第一行代码开始守住,后面部署排查问题会省很多事。我见过有同学表名一会儿大写一会儿小写,在Windows上本地跑没事,部署到Linux上因为MySQL表名大小写敏感直接报错,这就是命名不规范埋下的雷。

2.3 环境清单:你需要准备什么

这里列出我建议每个做Java毕设的同学提前准备的一套环境清单,不管最后选什么框架,这几样几乎都是必需品:

组件版本建议用途说明
JDK1.8 或 11Spring Boot 2.x 用JDK8很稳,3.x需要JDK17
Maven3.6+项目依赖管理和打包工具
MySQL5.7 或 8.0主数据库,5.7兼容性最好,8.0功能新
Redis6.x缓存、验证码、会话存储
Nginx1.20+反向代理、静态资源托管
Docker(可选)20.x一键部署和环境隔离

如果你在Windows上开发,建议装一个VMware或VirtualBox,里面跑一个Ubuntu或CentOS虚拟机,用来模拟Linux服务器环境。这样写完代码先在Windows上把功能调通,然后拿到Linux虚拟机里做部署演练,最后上云服务器就是水到渠成的事。很多同学跳过这一步,直接在Windows本地跑通就算完事,等到答辩前才去租云服务器,结果在Linux上跑不起来,心态直接崩掉。


3. Linux环境搭建:从虚拟机到云服务器

3.1 本地Linux环境搭建方案

新手做毕设,我不建议一上来就装双系统或者直接裸机装Linux,风险比较大,万一折腾坏了系统,一天时间没了。虚拟机是最温和的入门方式。

我用的是VMware Workstation Player + Ubuntu 20.04 Server版。选择Server版而不是Desktop版,是为了规避图形界面对资源的消耗,毕竟云服务器默认也是没有桌面环境的。下载Ubuntu镜像时注意选64位,推荐用清华源或阿里源,速度比官网快很多。安装过程中选择“最小安装”,不要装桌面环境。

装好之后做三件基础配置:

  1. 换源:改/etc/apt/sources.list,把默认的源替换成阿里云或清华源,否则apt install装软件的速度会让你怀疑人生。
  2. 开启SSH服务:执行sudo apt install openssh-server,然后systemctl start sshd,这样你就能通过 XShell 或 FinalShell 远程连接到虚拟机,操作体验和云服务器一致。
  3. 创建普通用户:别一直用root操作,养成sudo的习惯,和你以后在真实服务器上的行为保持一致。

虚拟机配置建议2核CPU、2GB内存、20GB硬盘,如果是老电脑配置低,可以把内存降到1.5GB,但MySQL和编译时会有点吃力,可以再加大一点交换分区。

3.2 JDK安装的两种方式

Linux上装JDK,网络上其实一直有两种派别:一种是用apt install openjdk-8-jdk,另一种是手动下载Oracle JDK的tar.gz包解压配置。

我个人的建议是:毕设阶段用apt安装OpenJDK就够了,省事、不易出错。

sudo apt update sudo apt install openjdk-8-jdk java -version

如果项目用的是Spring Boot 3.x,需要JDK17,就把包名换成openjdk-17-jdk。

但这里有个容易被忽略的点:某些学校或答辩环境可能要求你把JDK安装路径配置清楚,如果你用apt装,JDK实际路径可能在/usr/lib/jvm/java-8-openjdk-amd64,需要用到的时候可以用readlink -f $(which java)查到真实路径。

如果实在需要手动安装,标准流程是:

tar -zxvf jdk-8u202-linux-x64.tar.gz sudo mkdir -p /usr/local/java sudo mv jdk1.8.0_202 /usr/local/java/ sudo vim /etc/profile

然后在/etc/profile末尾追加:

export JAVA_HOME=/usr/local/java/jdk1.8.0_202 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

保存后执行source /etc/profile生效。

3.3 MySQL安装与初始化

Linux上安装MySQL最常见的坑就是版本源问题。Ubuntu默认仓库里的MySQL版本可能不是你想要的,而且安装方式和Windows上双击exe完全是两码事。

我的做法是用MySQL官方APT源:

wget https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb sudo dpkg -i mysql-apt-config_0.8.24-1_all.deb sudo apt update sudo apt install mysql-server

安装过程中会要求设置root密码。装完之后MySQL默认是监听localhost的,暂时不用改,后面部署到云服务器再单独配远程访问。

初始化完成后,建议立即执行安全加固脚本:

sudo mysql_secure_installation

这个脚本会引导你设置密码强度、删除匿名用户、禁止root远程登录、删除test数据库。全选Yes就行,尤其是禁止root远程登录这一项,很多同学为了方便,开着root远程登录,结果服务器被人扫库攻击,数据全没了,轻则重装系统,重则被勒索。

创建业务数据库和专用账号的组合是:

CREATE DATABASE yourproject CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'YourStrongPassword'; GRANT ALL PRIVILEGES ON yourproject.* TO 'appuser'@'localhost'; FLUSH PRIVILEGES;

数据库字符集一定用utf8mb4,不要用utf8。原因后面会在常见问题里细说,反正你在这里先记住这个结论。

3.4 Redis与Nginx的安装

这两个相对简单,apt直接装就行:

sudo apt install redis-server nginx sudo systemctl enable redis-server sudo systemctl enable nginx

Redis装好后,编辑/etc/redis/redis.conf,把protected-mode保持为yes,bind 127.0.0.1保持不变,这样Redis只允许本机访问,你的Java后端在同一个机器上访问它没有任何问题,同时避免了外部直接访问Redis导致的安全风险。

到这里,一套完整的运行环境就绪了。你可以用systemctl status mysql redis-server nginx检查三个服务的运行状态,看到active (running)就是正常。


4. 开发阶段与Linux的“适配”要点

4.1 本地开发vs Linux环境,真正的差异在哪里

很多人在Windows上开发一切正常,一到Linux就出问题,核心原因不是代码本身有问题,而是环境假设不一致。我总结了几类最典型的差异:

  • 路径分隔符:Windows用\,Linux用/。代码里写“文件上传保存到D:/upload/”,到Linux上就没有D盘。
  • 文件大小写:Windows文件系统不区分大小写,Linux区分。你代码里写import com.xxx.Utils,实际类名是utils,Windows上跑没事,Linux上编译直接甩ClassNotFound。
  • 编码问题:开发时Windows默认GBK,Linux默认UTF-8。如果你的SQL文件或者源码用GBK保存,数据库建表会出现中文乱码,导入数据时更是灾难。
  • 端口和IP:本机开发时数据库连接写localhost:3306,部署到服务器后要改成服务器的IP或127.0.0.1。

建议在开发阶段就把这些问题提前想清楚:所有路径用相对路径或配置项,文件上传目录单独配置,数据库连接串写成配置项。你越早按“部署后”的标准来写代码,后面就越少受罪。

4.2 外部化配置:让你的项目“换环境不换代码”

Spring Boot有一个非常友好的特性就是支持application.yml多环境配置。我强烈建议每个毕设项目都建三个配置文件:

application.yml # 公共配置 application-dev.yml # 本地开发环境 application-prod.yml # 服务器生产环境

application-prod.yml里面的数据源、Redis连接、文件上传路径等配置,都用Linux环境的实际情况。启动时通过--spring.profiles.active=prod来指定:

java -jar yourproject.jar --spring.profiles.active=prod

这个习惯的价值在于:你的项目在本地和服务器上使用同一份代码,只是启动参数不同。答辩时你可以很从容地演示本地开发配置和生产部署配置的区别,这在导师眼中是非常加分的“工程素养”。

数据库连接串里建议加上characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai,避免中文乱码和时区报错。MySQL8之前的版本驱动还需要useSSL=false,否则会有警告。

4.3 Linux下必备的日志与排错习惯

在Windows上开发,控制台输出一堆错误你都未必看,到Linux上跑Jar包,日志就是你调试的唯一手段。我的习惯是:

  • 项目启动时直接用nohup java -jar xxx.jar > app.log 2>&1 &把输出重定向到日志文件
  • 排查问题先看应用日志:tail -f app.log
  • 看系统日志用:journalctl -u yourservice
  • 查询端口占用:netstat -tlnp或ss -tlnp
  • 查看进程:ps aux | grep java

这里有个非常实用的小技巧:Spring Boot项目启动报错时,日志里会有一个关键段落,里面写着APPLICATION FAILED TO START,下面会列出原因。大多数情况是端口被占用、数据库连不上、Redis连不上。不要一上来就怀疑代码逻辑,先看中间件通不通。


5. 项目打包与部署实操

5.1 Maven打包:从源码到可执行Jar

在Windows上开发完成、本地测试通过后,第一件事是清掉旧的target目录和本地无用文件,然后通过Maven打包。

如果你用IDEA,右侧Maven面板双击package就行,但更推荐用命令行:

mvn clean package -DskipTests

-DskipTests跳过测试,毕设阶段一般都这样做,省时间,也避免某些测试用例环境不一致导致打包失败。

打包完成后,在target目录下会生成一个yourproject-0.0.1-SNAPSHOT.jar文件。这时候有两个细节提醒:

  1. 检查Jar包大小:Spring Boot工程的Jar通常在40MB-100MB之间,如果只有几十KB,那很可能是没有引入Spring Boot Maven插件,打成了普通Jar,这种Jar直接java -jar会报“没有主清单属性”。
  2. 本地能启动不代表服务器能启动:先把Jar包放到Linux虚拟机里试跑一遍,这是最保险的部署演练。

5.2 上传文件到Linux的几种方式

把你的Jar包传到Linux服务器,常见方式有:

  • scp命令(最简单):scp target/xxx.jar username@server_ip:/home/username/app/
  • XShell + Xftp(图形界面):适合不熟悉命令行的同学
  • 宝塔面板(Web上传):可视化操作,新手最友好

我个人推荐初学者用FinalShell或宝塔面板这类带图形界面的工具,因为能看到文件位置和目录结构,不容易出错。如果你走的是纯命令行路线,scp就够了。注意传输完成后立刻检查文件大小是否一致,网络不好时传输中断会留下残破文件,运行起来会报 “invalid or corrupted jar file”。

传输文件到Linux之后,下一个非常关键的步骤是修改权限。在Windows上你完全不用考虑执行权限,但Linux上如果Jar文件没有执行权限,运行时会报Permission denied。执行:

chmod +x yourproject.jar

5.3 三种部署方式,我推荐哪种

部署方式从简到繁分为三种,我可以直接说结论:

方式一:直接Java -jar(最简但不好维护)

nohup java -jar yourproject.jar --spring.profiles.active=prod > app.log 2>&1 &

通过> app.log把日志输出到文件,2>&1把错误输出也合并进去,&表示后台运行。这个方式适合临时测试,但有一个明显缺点——机器重启后项目不会自动启动。

方式二:Systemd服务(推荐)

在/etc/systemd/system/下创建yourproject.service文件:

[Unit] Description=YourProject Service After=network.target mysql.service redis-server.service [Service] User=appuser WorkingDirectory=/home/appuser/app ExecStart=/usr/bin/java -jar /home/appuser/app/yourproject.jar --spring.profiles.active=prod Restart=always RestartSec=10 Environment=JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 [Install] WantedBy=multi-user.target

然后执行:

sudo systemctl daemon-reload sudo systemctl enable yourproject sudo systemctl start yourproject

这里Restart=always意味着进程挂掉会自动重启,RestartSec=10是挂了之后等10秒再拉起。对毕设演示来说,这两项配置能保证你答辩时项目不会因为一点小异常就挂掉。

方式三:Docker部署(加分项但有一定门槛)

如果项目引入了Docker,可以用docker-compose一键拉起MySQL、Redis、Java应用。需要写一个Dockerfile:

FROM openjdk:8-jre-alpine WORKDIR /app COPY target/yourproject.jar yourproject.jar EXPOSE 8080 ENV SPRING_PROFILES_ACTIVE=prod ENTRYPOINT ["java", "-jar", "yourproject.jar"]

Docker的好处是环境隔离,不用担心服务器上和本地版本不一致的问题。但要加一层东西就要解决一层的问题,比如镜像拉取慢、容器内文件同步、内存占用等。我的建议是:如果Docker是你毕设的亮点或导师有要求,就上;否则不要为了用而用,Systemd方案完全够用。

5.4 Nginx反向代理与前端部署

如果你的项目是纯后端接口,Nginx一般用来做静态资源映射和端口转发;如果是前后端分离,Nginx托管前端打包后的dist目录,并把后端接口反向代理到Java服务的端口。

一个典型的Nginx配置:

server { listen 80; server_name yourdomain.com; # 前端页面 location / { root /home/appuser/web; # 前端dist目录 index index.html; try_files $uri $uri/ /index.html; # Vue路由history模式需要 } # 后端接口 location /api/ { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }

修改配置后执行nginx -t检查语法,通过后systemctl reload nginx重载。try_files那一行是很多初学者最看不懂的地方,它的作用是:当你访问一个前端路由路径时,如果文件不存在就返回index.html,让前端路由自己处理。否则你部署Vue项目时会发现刷新页面全是404。

5.5 服务器防火墙与安全组

这是最容易被忽略、也最容易出问题的一步。很多同学项目部署好了,本地访问服务器IP:8080却打不开,原因通常是两个:

  • 服务器安全组没有放行端口(云服务商控制台里配置)
  • Linux防火墙没放行端口(iptables或firewalld)

对于Ubuntu自带的ufw:

sudo ufw allow 8080/tcp sudo ufw allow 80/tcp sudo ufw allow 22/tcp sudo ufw enable

22端口是SSH端口,千万要放行,否则你把自己锁在外面就尴尬了。

安全组和防火墙都配好之后,再用curl http://127.0.0.1:8080测试本机访问,通的话再用浏览器访问公网IP验证。


6. 常见问题与排查技巧实录

6.1 内存不足:编译代码时直接被Killed

我部署时踩过最坑的一个问题:服务器上执行java -jar刚启动几秒,直接输出Killed。一开始以为代码有问题,后来才发现是内存不够——云服务器1GB内存,Java默认堆内存可能占到内存的一半,再加上MySQL和Redis,内存直接爆掉。

解决办法有两个方向:

  1. 加内存(最简单粗暴,但对学生党不现实)
  2. 限制JVM堆内存:
java -jar yourproject.jar -Xms256m -Xmx512m --spring.profiles.active=prod

-Xms是初始堆内存大小,-Xmx是最大堆内存大小。如果你的项目不是特别大,256M初始、512M最大完全够用。另外不要忘了给操作系统留一点余量,1G内存的机器上用512M堆内存就已经是极限了。

6.2 数据库中文乱码

部署后通过接口写进去的中文数据全是问号。这是毕设里最常见的问题,但原因往往不止一个,需要一步步排查:

  1. 数据库和表字符集:确认建库时是否用了utf8mb4
  2. JDBC连接串:是否加了characterEncoding=utf8
  3. Linux系统locale:执行locale查看,建议设置为en_US.UTF-8或zh_CN.UTF-8
  4. 后端代码编码:确保源码文件是UTF-8,配置文件也是UTF-8

很多时候你本地Windows测没问题,因为默认环境就是UTF-8的。到Linux上,如果系统locale是POSIX或C,默认可能不是UTF-8。解决办法是修改/etc/default/locale:

LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8

然后source /etc/default/locale或者重启生效。

6.3 Spring Boot项目启动成功但访问404

这个问题通常是两个原因:一是context-path配置,你在application.yml里设置了server.servlet.context-path: /demo,访问时就要带/demo前缀;二是前端路由history模式没配Nginx的try_files,导致刷新页面404。

查看启动日志里的Tomcat started on port(s): 8080这行,下面会附带一句with context path,看到具体路径就明白了。

6.4 本地能连数据库,服务器上连不上

这个也是高频问题。核心区别在于:本地的MySQL和你的Java程序在同一个机器上,而服务器上的MySQL和Java程序默认不一定是同一个。如果你用Docker拉了一个MySQL容器,又直接在宿主机上跑Java程序,那数据库连接串里的IP就要写容器IP或宿主机的172.17.0.1,而不是localhost。

排查思路:

# 1. 确认MySQL进程在运行 systemctl status mysql # 2. 确认MySQL监听的端口 netstat -tlnp | grep 3306 # 3. 确认Java进程能不能连通 telnet 127.0.0.1 3306

如果netstat显示MySQL只监听127.0.0.1:3306,而你需要在另一台机器上连它,那就得修改MySQL配置,绑定0.0.0.0,并创建一个允许远程访问的账号。注意:在毕设这种非生产场景下,我仍然不建议长期开启MySQL远程访问,用完就关,需要远程操作时可以临时开。

6.5 Jar包打出来没问题,但运行报“没有主清单属性”

这个报错的原因我在前面提过:你的项目里没有Spring Boot Maven插件。pom.xml里加上这个插件重新打包:

<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>

如果是多模块项目,还要确认打的是bootJar而不是普通Jar。用unzip -l查看Jar包内容时,BOOT-INF/classes/下如果能看到你的业务代码,说明打对了。只有几十KB且没有BOOT-INF目录,那就是普通Jar。

6.6 常见问题速查表

问题现象可能原因排查命令/操作
项目启动后马上退出数据库连不上、端口被占用journalctl -u yourproject查看日志
页面能打开但接口报500业务异常或SQL错误看app.log中异常堆栈
前端页面加载慢代码没压缩,或服务器带宽小使用Nginx gzip压缩,检查带宽占用
服务器重启后项目消失没配置systemd服务设置systemctl enable yourproject
外网访问不了8080防火墙/安全组没放行curl 127.0.0.1:8080内网 vs 外网测试
图片上传后无法访问静态资源路径没映射Nginx配置静态目录与Java配置保持一致
MySQL启动失败磁盘空间不足df -h查看磁盘,清理日志
日期时间差8小时时区未配置数据库连接串加serverTimezone=Asia/Shanghai

7. 写在最后

折腾过一遍“Java + Linux”全流程之后,我个人最大的体会是:写代码只是毕设的一半,另一半是让项目在Linux上健壮地运行起来。很多同学觉得部署就是执行几条命令,其实真正的坑都在细节里:字符集设置、文件权限、防火墙端口、内存配额、路径大小写,任何一个环节掉链子,整个项目就卡住了。

如果你正在准备自己的毕设,我建议你给自己留出至少一周的时间做部署验证,不要等到答辩前三天才去碰Linux。哪怕只是把本地的项目原封不动地在虚拟机上跑起来,你也能提前暴露大部分问题。等到真正上云服务器时,整个过程可能只需要半个小时。

最后分享一个小技巧:我每次部署完,都会在服务器上执行一次完整的“冷启动”测试——重启机器、等两分钟、手动访问首页和登录接口。这个测试能帮你确认所有服务都能自动启动、数据库能自恢复、Nginx能正常代理。答辩论证现场出问题,多半都是热门问题栽在没有完全模拟过“冷启动”场景上。把这个流程跑通,你的毕设就稳了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/7 3:12:31

Windows上用Docker容器运行镜像:环境配置与踩坑实战

先说一个我见过太多的场景&#xff1a;Windows 上装 Docker Desktop 的人不少&#xff0c;装完跑个 hello-world 截图发朋友圈&#xff0c;然后就没有然后了。等真到了“用 Docker 容器跑一个镜像”这一步——比如部署 MySQL、Redis、Elasticsearch&#xff0c;或者把某个业务环…

作者头像 李华
网站建设 2026/10/7 3:12:26

SUSE + SAP HANA内存不足全解析:从排查到调优实战

一个SAP HANA运维的同学&#xff0c;十有八九都被内存问题折磨过。尤其是跑在SUSE上的HANA&#xff0c;平时好好的&#xff0c;一到月底报表期、大批量物料账运行的时候&#xff0c;系统内存就被打满&#xff0c;接着SAP应用直接卡死&#xff0c;用户电话一个接一个。这个场景太…

作者头像 李华
网站建设 2026/10/7 3:11:58

T3 Stack 全栈开发实战:Next.js + tRPC + Prisma 类型安全指南

搞了几个月 T3 Stack 全家桶&#xff0c;从踩坑到填坑&#xff0c;总算把一套能用、能上线、能维护的完整代码库跑通了。趁热把这套东西沉淀下来&#xff0c;从技术选型逻辑到每个环节的实际操作&#xff0c;一步不落写清楚&#xff0c;给想用 tRPC、Prisma、Next.js 这套现代全…

作者头像 李华
网站建设 2026/10/7 3:11:16

Python+Vue前后端分离:演唱会门票预约系统开发实战

做演唱会门票售票预约系统是个挺有意思的项目&#xff0c;功能不算复杂&#xff0c;但该有的模块一个不少——用户认证、场次展示、选座、预约下单、订单状态流转。我用 Python 做后端&#xff08;Django 和 Flask 两条路线都走了一遍&#xff09;&#xff0c;前端用 Vue&#…

作者头像 李华
网站建设 2026/10/7 3:11:16

Linux信号机制详解:从SIGFPE到SIGPIPE的源头与排查实践

先说两个我经常遇到的“程序莫名其妙死了”的现场。第一个&#xff0c;一个 C 程序里写了个x / y&#xff0c;y从配置读进来&#xff0c;某天配成了 0&#xff0c;进程当场崩掉&#xff0c;日志里只有一句Floating point exception (core dumped)。第二个&#xff0c;脚本里tai…

作者头像 李华
网站建设 2026/10/7 3:10:40

粉丝投票切直播画面,毫秒级同步如何实现?

先交代一个背景&#xff1a;我所在的团队做的是体育赛事直播技术服务&#xff0c;最近刚完成了一个有点"反常规"的项目——把F1比赛的导播权&#xff0c;交给屏幕前的粉丝。简单说&#xff0c;观众在App里投票选择下一段直播画面切到哪个视角&#xff0c;投票结果实时…

作者头像 李华