feat: 搭建多岗位简历 CI/CD 自动化部署
Deploy Resume / deploy (push) Successful in 5s

- 重构目录结构:css/、resume/、other/ 分离公共资源与简历页面
- 主简历迁移至 resume/index.html,路径指向 /resume
- 新增导航页 /other,基础架构工程师和网络安全工程师两份简历
- 全局样式 css/resume.css 由所有简历共享
- 新增 Dockerfile 和 nginx.conf,基于 nginx:alpine 容器化部署
- 新增 .gitea/workflows/deploy.yml,推送到 main 自动构建部署
- 更新 README.md 记录项目结构和添加新简历流程
- 删除无用脚本 convert.js、convert.py、download_font.js
This commit is contained in:
2026-08-27 18:41:10 +08:00
parent 57f360a4a3
commit dc99e2349e
15 changed files with 687 additions and 154 deletions
+41
View File
@@ -0,0 +1,41 @@
name: Deploy Resume
on:
push:
branches:
- main
jobs:
deploy:
runs-on: aliyun
steps:
- name: Setup Environment
run: |
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
apk add --no-cache docker-cli
- name: Checkout
run: |
rm -rf /tmp/resume
git clone --depth 1 -b main \
http://47.121.181.112:3000/wonder/resume.git \
/tmp/resume
- name: Build Docker Image
run: |
docker build \
-t resume-site:latest \
/tmp/resume
- name: Deploy Container
run: |
docker stop resume-site 2>/dev/null || true
docker rm resume-site 2>/dev/null || true
docker run -d \
--name resume-site \
--restart unless-stopped \
-p 8080:80 \
resume-site:latest
- name: Cleanup Dangling Images
run: docker image prune -f
+16
View File
@@ -0,0 +1,16 @@
FROM nginx:alpine
# 复制 Nginx 配置
COPY nginx.conf /etc/nginx/conf.d/default.conf
# 复制静态资源
COPY css/ /usr/share/nginx/html/css/
COPY img/ /usr/share/nginx/html/img/
COPY resume/ /usr/share/nginx/html/resume/
COPY other/ /usr/share/nginx/html/other/
# 暴露端口
EXPOSE 80
# 启动 Nginx
CMD ["nginx", "-g", "daemon off;"]
+49
View File
@@ -0,0 +1,49 @@
# 何朝晖 - 简历项目
在线简历部署项目,支持多岗位简历,使用 Docker + Nginx 部署,Gitea Actions 自动化 CI/CD。
## 目录结构
```
resume/
├── .gitea/workflows/deploy.yml # Gitea Actions CI/CD 配置
├── Dockerfile # Docker 构建文件
├── nginx.conf # Nginx 路由配置
├── css/
│ └── resume.css # 全局样式(所有简历共享)
├── img/ # 公共图片资源(所有简历共享)
├── resume/
│ └── index.html # 主简历 → /resume
└── other/
├── index.html # 导航页 → /other
├── infra-engineer/
│ └── index.html # 基础架构工程师简历 → /other/infra-engineer
└── security-engineer/
└── index.html # 网络安全工程师简历 → /other/security-engineer
```
## 访问地址
| 页面 | 地址 |
|------|------|
| 主简历 | http://47.121.181.112:8080/resume/ |
| 导航页 | http://47.121.181.112:8080/other/ |
| 基础架构工程师 | http://47.121.181.112:8080/other/infra-engineer/ |
| 网络安全工程师 | http://47.121.181.112:8080/other/security-engineer/ |
## 添加新岗位简历
1. 在 `other/` 下新建目录,如 `other/frontend-dev/`
2. 复制任意一份已有简历作为模板
3. 修改目标职位、技术栈标签、线上简历链接等
4. 更新 `other/index.html` 导航页,添加新简历链接
5. 更新 `nginx.conf`,添加对应的 location 块
6. 推送到 main 分支,自动部署
## 部署方式
推送到 `main` 分支后,Gitea Actions 自动执行:
1. 克隆仓库
2. 构建 Docker 镜像(nginx:alpine)
3. 停止旧容器,启动新容器
4. 映射端口 8080 → 80
-42
View File
@@ -1,42 +0,0 @@
const { chromium } = require('playwright');
const path = require('path');
async function htmlToJpg() {
// Launch browser with custom library path
const browser = await chromium.launch({
env: {
...process.env,
LD_LIBRARY_PATH: '/tmp/libs/usr/lib/x86_64-linux-gnu:' + (process.env.LD_LIBRARY_PATH || '')
}
});
const page = await browser.newPage();
// Set viewport to A4 size (210mm x 297mm at 96dpi)
await page.setViewportSize({ width: 794, height: 1123 });
// Load the HTML file
const htmlPath = path.join(__dirname, 'resume.html');
await page.goto(`file://${htmlPath}`, { waitUntil: 'networkidle' });
// Get the actual page height
const bodyHeight = await page.evaluate(() => document.body.scrollHeight);
// Set viewport to full page height
await page.setViewportSize({ width: 794, height: bodyHeight });
// Take a full-page screenshot
const outputPath = path.join(__dirname, 'resume_output.jpg');
await page.screenshot({
path: outputPath,
fullPage: true,
type: 'jpeg',
quality: 95,
});
console.log(`Screenshot saved to: ${outputPath}`);
console.log(`Page dimensions: 794 x ${bodyHeight}`);
await browser.close();
}
htmlToJpg().catch(console.error);
-63
View File
@@ -1,63 +0,0 @@
import subprocess
import sys
# Install required packages
def install_packages():
packages = ['imgkit', 'Pillow']
for package in packages:
try:
__import__(package.lower().replace('-', '_'))
except ImportError:
print(f"Installing {package}...")
subprocess.check_call([sys.executable, "-m", "pip", "install", package])
install_packages()
import imgkit
from PIL import Image
import os
def html_to_jpg(html_file, output_file, width=2478):
"""Convert HTML file to high-quality JPG"""
# First, check if wkhtmltopdf/wkhtmltoimage is installed
try:
subprocess.run(['wkhtmltoimage', '--version'], capture_output=True, check=True)
except FileNotFoundError:
print("wkhtmltoimage not found. Please install it:")
print("sudo apt-get install wkhtmltopdf")
print("Or download from: https://wkhtmltopdf.org/downloads.html")
return False
# Convert HTML to JPG using imgkit
options = {
'format': 'jpg',
'quality': 100,
'width': width,
'enable-local-file-access': '',
'encoding': 'UTF-8',
'no-stop-slow-scripts': '',
}
try:
imgkit.from_file(html_file, output_file, options=options)
print(f"Successfully converted {html_file} to {output_file}")
# Verify the output
with Image.open(output_file) as img:
print(f"Output image size: {img.size}")
print(f"Output image mode: {img.mode}")
return True
except Exception as e:
print(f"Error converting HTML to JPG: {e}")
return False
if __name__ == "__main__":
html_file = "/home/wonder/code/resume/resume.html"
output_file = "/home/wonder/code/resume/resume_output.jpg"
if html_to_jpg(html_file, output_file):
print(f"\nOutput saved to: {output_file}")
else:
print("Conversion failed!")
View File
-38
View File
@@ -1,38 +0,0 @@
const https = require('https');
const fs = require('fs');
const path = require('path');
function downloadFile(url, dest) {
return new Promise((resolve, reject) => {
const file = fs.createWriteStream(dest);
https.get(url, (response) => {
response.pipe(file);
file.on('finish', () => {
file.close();
resolve();
});
}).on('error', (err) => {
fs.unlink(dest, () => {});
reject(err);
});
});
}
async function downloadFonts() {
const fontsDir = path.join(__dirname, 'fonts');
// Download Noto Sans SC Regular
const regularUrl = 'https://fonts.gstatic.com/s/notosanssc/v37/k3kCo84MPvpLmixcA63oeAL7Iqp5IZJF9bmaG9_FnYxNbPzS5HE.ttf';
const boldUrl = 'https://fonts.gstatic.com/s/notosanssc/v37/k3kCo84MPvpLmixcA63oeAL7Iqp5IZJF9bmaG9_EnYxNbPzS5HE.ttf';
try {
await downloadFile(regularUrl, path.join(fontsDir, 'NotoSansSC-Regular.ttf'));
console.log('Downloaded NotoSansSC-Regular.ttf');
await downloadFile(boldUrl, path.join(fontsDir, 'NotoSansSC-Bold.ttf'));
console.log('Downloaded NotoSansSC-Bold.ttf');
} catch (err) {
console.error('Error downloading fonts:', err);
}
}
downloadFonts();
+1
View File
@@ -0,0 +1 @@
<svg width="48" height="48" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10 8c0 1 7 3.5 14.745 16.744 0 0 4.184-4.363 6.255-5.744 1.5-1 2.712-1.332 2.712-1.332C33.712 15.156 29.5 8 28 8z" fill="#00d6b9"/><path d="M43.5 18.5c-1-.667-3.65-1.771-6.5-1.5a15 15 0 0 0-3.288.668S32.5 18 31 19c-2.07 1.38-6.255 5.744-6.255 5.744-1.428 1.397-3.05 2.732-5.245 3.756 0 0 7 3 11.5 3 5.063 0 7-3.5 7-3.5 1.5-3.305 3.5-7 5.5-9.5" fill="#163c9a"/><path d="M4 17.5v17c0 1 6 5.5 15 5.5 10 0 17.05-7.705 19-12 0 0-1.937 3.5-7 3.5-4.5 0-11.5-3-11.5-3-5.117-2.239-10.03-6.577-12.906-9.117C4.974 17.953 4 17.093 4 17.5" fill="#3370ff"/></svg>

After

Width:  |  Height:  |  Size: 634 B

Binary file not shown.
+35
View File
@@ -0,0 +1,35 @@
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html;
# 主简历
location /resume/ {
alias /usr/share/nginx/html/resume/;
try_files $uri $uri/ /resume/index.html;
}
# 其他简历导航
location /other/ {
alias /usr/share/nginx/html/other/;
try_files $uri $uri/ /other/index.html;
}
# 基础架构工程师简历
location /other/infra-engineer/ {
alias /usr/share/nginx/html/other/infra-engineer/;
try_files $uri $uri/ /other/infra-engineer/index.html;
}
# 网络安全工程师简历
location /other/security-engineer/ {
alias /usr/share/nginx/html/other/security-engineer/;
try_files $uri $uri/ /other/security-engineer/index.html;
}
# 默认路由(重定向到主简历)
location / {
return 301 /resume/;
}
}
+114
View File
@@ -0,0 +1,114 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>何朝晖 - 其他简历</title>
<link rel="stylesheet" href="../css/resume.css">
<style>
body {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
background: #f5f7fa;
}
.container {
text-align: center;
padding: 40px;
background: #fff;
border-radius: 12px;
box-shadow: 0 2px 12px rgba(0,0,0,0.08);
max-width: 500px;
width: 90%;
}
h1 {
font-size: 28px;
font-weight: 700;
color: #222;
margin-bottom: 8px;
}
.subtitle {
font-size: 14px;
color: #888;
margin-bottom: 32px;
}
.resume-list {
list-style: none;
padding: 0;
margin: 0;
}
.resume-list li {
margin-bottom: 16px;
}
.resume-list a {
display: flex;
align-items: center;
justify-content: space-between;
padding: 16px 20px;
background: #f8fafc;
border: 1px solid #e2e8f0;
border-radius: 8px;
text-decoration: none;
color: #222;
transition: all 0.2s ease;
}
.resume-list a:hover {
background: #EEF3FF;
border-color: #4478DF;
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(68, 120, 223, 0.15);
}
.resume-title {
font-size: 16px;
font-weight: 600;
}
.resume-desc {
font-size: 12px;
color: #888;
margin-top: 4px;
}
.arrow {
color: #4478DF;
font-size: 20px;
}
.back-link {
display: inline-block;
margin-top: 24px;
color: #4478DF;
text-decoration: none;
font-size: 14px;
}
.back-link:hover {
text-decoration: underline;
}
</style>
</head>
<body>
<div class="container">
<h1>何朝晖</h1>
<p class="subtitle">其他岗位简历</p>
<ul class="resume-list">
<li>
<a href="/other/infra-engineer/">
<div>
<div class="resume-title">基础架构工程师</div>
<div class="resume-desc">分布式系统、云原生、基础设施开发</div>
</div>
<span class="arrow">→</span>
</a>
</li>
<li>
<a href="/other/security-engineer/">
<div>
<div class="resume-title">网络安全工程师</div>
<div class="resume-desc">安全攻防、漏洞分析、供应链安全</div>
</div>
<span class="arrow">→</span>
</a>
</li>
</ul>
<a href="/resume/" class="back-link">← 返回主简历</a>
</div>
</body>
</html>
+210
View File
@@ -0,0 +1,210 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>何朝晖 - 基础架构工程师</title>
<link rel="stylesheet" href="../../css/resume.css">
</head>
<body>
<div class="page">
<!-- Header -->
<div class="header">
<div class="name">何朝晖</div>
<div class="contact-info">
<div class="contact-line">
<div class="contact-item">
<svg class="svg-icon" viewBox="0 0 24 24"><path d="M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z"/></svg>
15671623703
</div>
<div class="contact-item">
<svg class="svg-icon" viewBox="0 0 24 24"><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"/></svg>
hezhaohui0807@163.com
</div>
<div class="contact-item">
<svg class="svg-icon" viewBox="0 0 24 24"><path d="M20 6h-4V4c0-1.11-.89-2-2-2h-4c-1.11 0-2 .89-2 2v2H4c-1.11 0-1.99.89-1.99 2L2 19c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-6 0h-4V4h4v2z"/></svg>
<span style="color: #4478DF;">①</span> 基础架构工程师 <span style="color: #4478DF; margin-left: 8px;">②</span> 后端开发
</div>
<div class="contact-item">
<svg class="svg-icon" viewBox="0 0 24 24"><path d="M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"/></svg>
<span class="proj-tag" style="margin-right: 4px;">Go</span>
<span class="proj-tag" style="margin-right: 4px;">Java</span>
<span class="proj-tag" style="margin-right: 4px;">K8s</span>
<span class="proj-tag">Docker</span>
</div>
</div>
<div class="website-line">
线上简历:<a href="http://47.121.181.112:8080/other/infra-engineer/" target="_blank" title="在线简历" style="color: #4478DF; text-decoration: none;">http://47.121.181.112:8080/other/infra-engineer/</a>
<span style="margin-left: 12px;">代码仓库:</span><a href="http://47.121.181.112:3000/wonder" target="_blank" title="代码仓库" style="color: #4478DF; text-decoration: none;">http://47.121.181.112:3000/wonder</a>
<span style="margin-left: 12px;">CSDN:</span><a href="https://blog.csdn.net/cheer2333" target="_blank" title="CSDN博客" style="color: #4478DF; text-decoration: none;">链接</a>
<span style="margin-left: 12px;">文档站:</span><a href="http://47.121.181.112:20000/" target="_blank" title="文档站" style="color: #4478DF; text-decoration: none;">链接</a>
</div>
</div>
</div>
<!-- 教育经历 -->
<div class="section">
<div class="section-title">教育经历</div>
<div class="edu-header">
<div>
<span class="edu-school">武汉科技大学</span><span class="edu-badge">省部共建</span>
<span class="edu-major">计算机科学与技术 【国家级一流专业 | ESI 0.495%】</span>
<span class="edu-degree">本科</span>
</div>
<div class="edu-date">2023-09 ~ 2027-06</div>
</div>
<ul class="edu-items">
<li>2026-03 ~ 2026-05 <img src="../../img/kingsoft.svg" class="company-logo" alt="金山办公"> 金山办公 WPS 菁英工程师训练营</li>
<li>2024-05 ~ 2026-05 <img src="../../img/linghang.svg" class="company-logo" alt="领航工作室"> 武汉科技大学领航工作室</li>
<li>2025-01 ~ 2025-03 <img src="../../img/bytedance.svg" class="company-logo" alt="字节跳动"> 字节跳动 MarsCode 青训营</li>
<li>2026-06 ~ 2026-07 <img src="../../img/neusoft.svg" class="company-logo small" alt="东软集团"> 东软集团生产实习</li>
</ul>
</div>
<!-- 荣誉奖项 -->
<div class="section">
<div class="section-title">荣誉奖项</div>
<div class="honor-section">
<div class="honor-left">
<div class="honor-item">
<div class="honor-content">
<img src="../../img/kingsoft.svg" class="company-logo" alt="金山办公">
<span class="honor-name">"金山杯"华中地区高校第十八届程序设计邀请赛</span>
<span class="honor-badge">三等奖</span>
</div>
<a href="http://47.121.181.112:40027/i/2026/05/28/6a17ca366d125.jpg" class="cert-link" target="_blank">证书</a>
</div>
<div class="honor-item">
<div class="honor-content">
<img src="../../img/icpc.svg" class="company-logo icpc" alt="ICPC">
<span class="honor-name">国际大学生程序设计竞赛(ICPC)湖北省赛</span>
<span class="honor-badge">优秀奖</span>
</div>
<a href="http://47.121.181.112:40027/i/2026/05/28/6a17ca3666920.png" class="cert-link" target="_blank">证书</a>
</div>
</div>
<div class="honor-right">
<div class="honor-item">
<div class="honor-content">
<img src="../../img/qiniu.svg" class="company-logo qiniu" alt="七牛云">
<span class="honor-name">七牛云 XEngineer 开源实训项目</span>
<span class="honor-badge">三等奖</span>
</div>
</div>
<div class="honor-item">
<div class="honor-content">
<img src="../../img/lark.svg" class="company-logo" alt="飞书" style="height: 20px;">
<span class="honor-name">WaytoAGI 飞书全球黑客松(武汉站)</span>
<span class="honor-badge">创意奖</span>
</div>
</div>
</div>
</div>
</div>
<!-- 实习经历 -->
<div class="section">
<div class="section-title">实习经历</div>
<div class="exp-header">
<div class="exp-company"><img src="../../img/qiniu.svg" class="company-logo qiniu" alt="七牛云"> 七牛云 | 上海七牛信息技术有限公司</div>
<span class="exp-position">产品研发部-基础架构部 基础架构开发</span>
<a href="http://47.121.181.112:40027/i/2026/08/06/6a745822150dd.jpg" class="cert-link" target="_blank">实习证明</a>
<div class="exp-date">2026-07 ~ 2026-08</div>
</div>
<ul class="exp-items">
<li>参与设计计算服务交付平台,基于状态机模型实现八阶段任务生命周期管理,支持参数校验、资源预留与安全回滚。</li>
<li>参与多机房 Ansible 部署架构设计,通过 AWX 调度控制与主机锁机制实现部署并发管控,保障大规模实例的有序交付。</li>
<li>构建关联服务注册链路,集成网络探测、数据源自动注册、监控指标采集与日志接入,实现数据库全生命周期可观测。</li>
</ul>
<div class="exp-header" style="margin-top: 10px;">
<div class="exp-company"><img src="../../img/hust.svg" class="company-logo hust" alt="华中科技大学"> 国家网络安全人才与创新基地 | 武汉金银湖实验室</div>
<span class="exp-position">平台技术部 后端开发</span>
<a href="http://47.121.181.112:40027/i/2026/05/28/6a17cb367128b.jpg" class="cert-link" target="_blank">实习证明</a>
<div class="exp-date">2025-11 ~ 2026-03</div>
</div>
<ul class="exp-items">
<li>参与设计面向国家关键单位的网络安全 SaaS 平台,完善租户多维度隔离、用户混合权限模型、API 流式计费等模块。</li>
<li>参与供应链探测数据中台开发,基于 Go 并发模型实现多源异构数据的采集服务,引入动态流量控制机制提升数据采集率。</li>
<li>完善构建组件漏洞知识图谱,基于金银湖安全大模型及供应链上游信息,统一评估组件安全风险,接入态势感知安全中心。</li>
</ul>
</div>
<!-- 项目经历 -->
<div class="section">
<div class="section-title">项目经历</div>
<div class="proj-header">
<div class="proj-title-line">
<span class="proj-name">Gen2D 游戏素材生成工具</span>
<span class="proj-role">全栈开发 【XEngineer 开源项目 - 三等奖】</span>
</div>
<div class="proj-date">2026-05 ~ 2026-06</div>
</div>
<div class="proj-link-line">
<div class="proj-tags">
<span class="proj-tag">Go(Gin)</span>
<span class="proj-tag">Eino Agent Graph</span>
<span class="proj-tag">GORM</span>
<span class="proj-tag">OSS</span>
<span class="proj-tag">React</span>
<span class="proj-tag">Zustand</span>
</div>
<a href="https://gitee.com/hezhaohui123/gen2d" class="proj-link" target="_blank">https://gitee.com/hezhaohui123/gen2d</a>
</div>
<div class="proj-intro">
<span class="proj-desc">AI 2D 游戏素材生成平台,用户输入文本提示词,自动生成风格一致的 Sprite、背景、UI 元素与动画帧流.</span>
</div>
<div class="proj-work-title">主要工作:</div>
<ol class="proj-work-items">
<li>基于字节 Eino 框架构建 DAG 工作流,引入 Reflect 自省机制以及 multi-agent 多智能体协作设计确保一致性。</li>
<li>在分布式限流方案的选择上,对比计数器、漏桶、窗口等多种限流机制,选用 go-redis 实现分布式的令牌桶算法限流。</li>
<li>为增强系统可观测性,统一采集接口 QPS、AI 上游调用、任务池等核心指标,并接入 Prometheus 与 Grafana。</li>
<li>针对 LLM 请求耗时长特性,设计自定义 IO 密集型协程池和 RabbitMQ 消息队列,实现模型调用并发化和异步化。</li>
</ol>
<div class="proj-header" style="margin-top: 12px;">
<div class="proj-title-line">
<span class="proj-name">ThumbUP 高并发点赞系统</span>
<span class="proj-role">后端开发 【哔哩哔哩技术团队文章复现】</span>
</div>
<div class="proj-date">2025-10 ~ 2025-11</div>
</div>
<div class="proj-link-line">
<div class="proj-tags">
<span class="proj-tag">Spring Boot 3</span>
<span class="proj-tag">Redis</span>
<span class="proj-tag">Caffeine</span>
<span class="proj-tag">HeavyKeeper</span>
<span class="proj-tag">MyBatis-Plus</span>
</div>
<a href="http://47.121.181.112:3000/wonder/thumb-up" class="proj-link" target="_blank">http://47.121.181.112:3000/wonder/thumb-up</a>
</div>
<div class="proj-intro">
<span class="proj-desc">高可用的高并发点赞系统</span>
</div>
<div class="proj-work-title">主要工作:</div>
<ol class="proj-work-items">
<li>基于 Caffeine + Redis 构建二级缓存,热点 Key 提升至本地缓存,避免冷数据污染,降低 Redis 访问压力。</li>
<li>Lua 脚本保证点赞原子性,10 秒时间片分桶暂存增量,定时任务批量落库,补偿任务每日兜底,保障最终一致性。</li>
<li>复现HeavyKeeper算法实现 Top-K 热点探测,最小堆维护热点集,概率衰减淘汰冷 Key,周期 fading 适配流量变化。</li>
<li>利用字符串常量池特性,以业务前缀+用户ID为锁对象,实现同用户串行,不同用户并行,减少锁竞争,提升吞吐量。</li>
</ol>
</div>
<!-- 专业技能 -->
<div class="section">
<div class="section-title">专业技能</div>
<ul class="skill-items">
<li>熟悉 Go/Java 的常用数据结构、中间件、并发模型、垃圾回收机制。能够使用 pprof、JFR 等工具进行性能排查。</li>
<li>熟悉分布式微服务架构,理解服务注册与发现、负载均衡、限流熔断、配置中心、幂等控制、分布式锁及分布式事务。</li>
<li>熟悉云原生技术栈,理解 Kubernetes 容器编排、Docker 容器化、服务网格、CI/CD 流水线及自动化部署。</li>
<li>熟悉基础设施即代码(IaC),理解 Ansible、Terraform 等自动化运维工具,具备多机房部署架构设计经验。</li>
<li>熟悉数据库系统,理解MySQL事务隔离、B+树索引优化及 MVCC 机制,理解 Redis 混合持久化策略、集群、哨兵机制。</li>
<li>熟悉可观测体系建设,理解 Prometheus 监控、Grafana 可视化、ELK 日志系统、链路追踪及告警机制。</li>
<li>探索 AI 前沿工程实践,理解上下文工程与驾驭工程,理解蜂群协作体、沙箱与权限治理、多级记忆管理、循环状态机。</li>
</ul>
</div>
</div>
</body>
</html>
+210
View File
@@ -0,0 +1,210 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>何朝晖 - 网络安全工程师</title>
<link rel="stylesheet" href="../../css/resume.css">
</head>
<body>
<div class="page">
<!-- Header -->
<div class="header">
<div class="name">何朝晖</div>
<div class="contact-info">
<div class="contact-line">
<div class="contact-item">
<svg class="svg-icon" viewBox="0 0 24 24"><path d="M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z"/></svg>
15671623703
</div>
<div class="contact-item">
<svg class="svg-icon" viewBox="0 0 24 24"><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"/></svg>
hezhaohui0807@163.com
</div>
<div class="contact-item">
<svg class="svg-icon" viewBox="0 0 24 24"><path d="M20 6h-4V4c0-1.11-.89-2-2-2h-4c-1.11 0-2 .89-2 2v2H4c-1.11 0-1.99.89-1.99 2L2 19c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-6 0h-4V4h4v2z"/></svg>
<span style="color: #4478DF;">①</span> 网络安全工程师 <span style="color: #4478DF; margin-left: 8px;">②</span> 后端开发
</div>
<div class="contact-item">
<svg class="svg-icon" viewBox="0 0 24 24"><path d="M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"/></svg>
<span class="proj-tag" style="margin-right: 4px;">Go</span>
<span class="proj-tag" style="margin-right: 4px;">Java</span>
<span class="proj-tag" style="margin-right: 4px;">安全攻防</span>
<span class="proj-tag">漏洞分析</span>
</div>
</div>
<div class="website-line">
线上简历:<a href="http://47.121.181.112:8080/other/security-engineer/" target="_blank" title="在线简历" style="color: #4478DF; text-decoration: none;">http://47.121.181.112:8080/other/security-engineer/</a>
<span style="margin-left: 12px;">代码仓库:</span><a href="http://47.121.181.112:3000/wonder" target="_blank" title="代码仓库" style="color: #4478DF; text-decoration: none;">http://47.121.181.112:3000/wonder</a>
<span style="margin-left: 12px;">CSDN:</span><a href="https://blog.csdn.net/cheer2333" target="_blank" title="CSDN博客" style="color: #4478DF; text-decoration: none;">链接</a>
<span style="margin-left: 12px;">文档站:</span><a href="http://47.121.181.112:20000/" target="_blank" title="文档站" style="color: #4478DF; text-decoration: none;">链接</a>
</div>
</div>
</div>
<!-- 教育经历 -->
<div class="section">
<div class="section-title">教育经历</div>
<div class="edu-header">
<div>
<span class="edu-school">武汉科技大学</span><span class="edu-badge">省部共建</span>
<span class="edu-major">计算机科学与技术 【国家级一流专业 | ESI 0.495%】</span>
<span class="edu-degree">本科</span>
</div>
<div class="edu-date">2023-09 ~ 2027-06</div>
</div>
<ul class="edu-items">
<li>2026-03 ~ 2026-05 <img src="../../img/kingsoft.svg" class="company-logo" alt="金山办公"> 金山办公 WPS 菁英工程师训练营</li>
<li>2024-05 ~ 2026-05 <img src="../../img/linghang.svg" class="company-logo" alt="领航工作室"> 武汉科技大学领航工作室</li>
<li>2025-01 ~ 2025-03 <img src="../../img/bytedance.svg" class="company-logo" alt="字节跳动"> 字节跳动 MarsCode 青训营</li>
<li>2026-06 ~ 2026-07 <img src="../../img/neusoft.svg" class="company-logo small" alt="东软集团"> 东软集团生产实习</li>
</ul>
</div>
<!-- 荣誉奖项 -->
<div class="section">
<div class="section-title">荣誉奖项</div>
<div class="honor-section">
<div class="honor-left">
<div class="honor-item">
<div class="honor-content">
<img src="../../img/kingsoft.svg" class="company-logo" alt="金山办公">
<span class="honor-name">"金山杯"华中地区高校第十八届程序设计邀请赛</span>
<span class="honor-badge">三等奖</span>
</div>
<a href="http://47.121.181.112:40027/i/2026/05/28/6a17ca366d125.jpg" class="cert-link" target="_blank">证书</a>
</div>
<div class="honor-item">
<div class="honor-content">
<img src="../../img/icpc.svg" class="company-logo icpc" alt="ICPC">
<span class="honor-name">国际大学生程序设计竞赛(ICPC)湖北省赛</span>
<span class="honor-badge">优秀奖</span>
</div>
<a href="http://47.121.181.112:40027/i/2026/05/28/6a17ca3666920.png" class="cert-link" target="_blank">证书</a>
</div>
</div>
<div class="honor-right">
<div class="honor-item">
<div class="honor-content">
<img src="../../img/qiniu.svg" class="company-logo qiniu" alt="七牛云">
<span class="honor-name">七牛云 XEngineer 开源实训项目</span>
<span class="honor-badge">三等奖</span>
</div>
</div>
<div class="honor-item">
<div class="honor-content">
<img src="../../img/lark.svg" class="company-logo" alt="飞书" style="height: 20px;">
<span class="honor-name">WaytoAGI 飞书全球黑客松(武汉站)</span>
<span class="honor-badge">创意奖</span>
</div>
</div>
</div>
</div>
</div>
<!-- 实习经历 -->
<div class="section">
<div class="section-title">实习经历</div>
<div class="exp-header">
<div class="exp-company"><img src="../../img/qiniu.svg" class="company-logo qiniu" alt="七牛云"> 七牛云 | 上海七牛信息技术有限公司</div>
<span class="exp-position">产品研发部-基础架构部 全栈开发</span>
<a href="http://47.121.181.112:40027/i/2026/08/06/6a745822150dd.jpg" class="cert-link" target="_blank">实习证明</a>
<div class="exp-date">2026-07 ~ 2026-08</div>
</div>
<ul class="exp-items">
<li>参与设计计算服务交付平台,基于状态机模型实现八阶段任务生命周期管理,支持参数校验、资源预留与安全回滚。</li>
<li>参与多机房 Ansible 部署架构设计,通过 AWX 调度控制与主机锁机制实现部署并发管控,保障大规模实例的有序交付。</li>
<li>构建关联服务注册链路,集成网络探测、数据源自动注册、监控指标采集与日志接入,实现数据库全生命周期可观测。</li>
</ul>
<div class="exp-header" style="margin-top: 10px;">
<div class="exp-company"><img src="../../img/hust.svg" class="company-logo hust" alt="华中科技大学"> 国家网络安全人才与创新基地 | 武汉金银湖实验室</div>
<span class="exp-position">平台技术部 安全研发</span>
<a href="http://47.121.181.112:40027/i/2026/05/28/6a17cb367128b.jpg" class="cert-link" target="_blank">实习证明</a>
<div class="exp-date">2025-11 ~ 2026-03</div>
</div>
<ul class="exp-items">
<li>参与设计面向国家关键单位的网络安全 SaaS 平台,完善租户多维度隔离、用户混合权限模型、API 流式计费等模块。</li>
<li>参与供应链探测数据中台开发,基于 Go 并发模型实现多源异构数据的采集服务,引入动态流量控制机制提升数据采集率。</li>
<li>完善构建组件漏洞知识图谱,基于金银湖安全大模型及供应链上游信息,统一评估组件安全风险,接入态势感知安全中心。</li>
</ul>
</div>
<!-- 项目经历 -->
<div class="section">
<div class="section-title">项目经历</div>
<div class="proj-header">
<div class="proj-title-line">
<span class="proj-name">Gen2D 游戏素材生成工具</span>
<span class="proj-role">全栈开发 【XEngineer 开源项目 - 三等奖】</span>
</div>
<div class="proj-date">2026-05 ~ 2026-06</div>
</div>
<div class="proj-link-line">
<div class="proj-tags">
<span class="proj-tag">Go(Gin)</span>
<span class="proj-tag">Eino Agent Graph</span>
<span class="proj-tag">GORM</span>
<span class="proj-tag">OSS</span>
<span class="proj-tag">React</span>
<span class="proj-tag">Zustand</span>
</div>
<a href="https://gitee.com/hezhaohui123/gen2d" class="proj-link" target="_blank">https://gitee.com/hezhaohui123/gen2d</a>
</div>
<div class="proj-intro">
<span class="proj-desc">AI 2D 游戏素材生成平台,用户输入文本提示词,自动生成风格一致的 Sprite、背景、UI 元素与动画帧流.</span>
</div>
<div class="proj-work-title">主要工作:</div>
<ol class="proj-work-items">
<li>基于字节 Eino 框架构建 DAG 工作流,引入 Reflect 自省机制以及 multi-agent 多智能体协作设计确保一致性。</li>
<li>在分布式限流方案的选择上,对比计数器、漏桶、窗口等多种限流机制,选用 go-redis 实现分布式的令牌桶算法限流。</li>
<li>为增强系统可观测性,统一采集接口 QPS、AI 上游调用、任务池等核心指标,并接入 Prometheus 与 Grafana。</li>
<li>针对 LLM 请求耗时长特性,设计自定义 IO 密集型协程池和 RabbitMQ 消息队列,实现模型调用并发化和异步化。</li>
</ol>
<div class="proj-header" style="margin-top: 12px;">
<div class="proj-title-line">
<span class="proj-name">ThumbUP 高并发点赞系统</span>
<span class="proj-role">后端开发 【哔哩哔哩技术团队文章复现】</span>
</div>
<div class="proj-date">2025-10 ~ 2025-11</div>
</div>
<div class="proj-link-line">
<div class="proj-tags">
<span class="proj-tag">Spring Boot 3</span>
<span class="proj-tag">Redis</span>
<span class="proj-tag">Caffeine</span>
<span class="proj-tag">HeavyKeeper</span>
<span class="proj-tag">MyBatis-Plus</span>
</div>
<a href="http://47.121.181.112:3000/wonder/thumb-up" class="proj-link" target="_blank">http://47.121.181.112:3000/wonder/thumb-up</a>
</div>
<div class="proj-intro">
<span class="proj-desc">高可用的高并发点赞系统</span>
</div>
<div class="proj-work-title">主要工作:</div>
<ol class="proj-work-items">
<li>基于 Caffeine + Redis 构建二级缓存,热点 Key 提升至本地缓存,避免冷数据污染,降低 Redis 访问压力。</li>
<li>Lua 脚本保证点赞原子性,10 秒时间片分桶暂存增量,定时任务批量落库,补偿任务每日兜底,保障最终一致性。</li>
<li>复现HeavyKeeper算法实现 Top-K 热点探测,最小堆维护热点集,概率衰减淘汰冷 Key,周期 fading 适配流量变化。</li>
<li>利用字符串常量池特性,以业务前缀+用户ID为锁对象,实现同用户串行,不同用户并行,减少锁竞争,提升吞吐量。</li>
</ol>
</div>
<!-- 专业技能 -->
<div class="section">
<div class="section-title">专业技能</div>
<ul class="skill-items">
<li>熟悉 Go/Java 的常用数据结构、中间件、并发模型、垃圾回收机制。能够使用 pprof、JFR 等工具进行性能排查。</li>
<li>熟悉网络安全攻防技术,理解常见漏洞原理(SQL注入、XSS、CSRF等),具备漏洞挖掘与修复能力。</li>
<li>熟悉供应链安全,理解组件漏洞知识图谱构建、安全风险评估、态势感知及威胁情报分析。</li>
<li>熟悉分布式微服务架构,理解服务注册与发现、负载均衡、限流熔断、配置中心、幂等控制、分布式锁及分布式事务。</li>
<li>熟悉数据库系统,理解MySQL事务隔离、B+树索引优化及 MVCC 机制,理解 Redis 混合持久化策略、集群、哨兵机制。</li>
<li>熟悉多集群环境下的持续集成部署,理解 K8s 下的应用发布、弹性扩缩容、灰度发布、健康检查及可观测体系建设。</li>
<li>探索 AI 前沿工程实践,理解上下文工程与驾驭工程,理解蜂群协作体、沙箱与权限治理、多级记忆管理、循环状态机。</li>
</ul>
</div>
</div>
</body>
</html>
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

+11 -11
View File
@@ -4,7 +4,7 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>何朝晖 - 简历</title>
<link rel="stylesheet" href="resume.css">
<link rel="stylesheet" href="../css/resume.css">
</head>
<body>
<div class="page">
@@ -54,10 +54,10 @@
<div class="edu-date">2023-09 ~ 2027-06</div>
</div>
<ul class="edu-items">
<li>2026-03 ~ 2026-05 <img src="img/kingsoft.svg" class="company-logo" alt="金山办公"> 金山办公 WPS 菁英工程师训练营</li>
<li>2024-05 ~ 2026-05 <img src="img/linghang.svg" class="company-logo" alt="领航工作室"> 武汉科技大学领航工作室</li>
<li>2025-01 ~ 2025-03 <img src="img/bytedance.svg" class="company-logo" alt="字节跳动"> 字节跳动 MarsCode 青训营</li>
<li>2026-06 ~ 2026-07 <img src="img/neusoft.svg" class="company-logo small" alt="东软集团"> 东软集团生产实习</li>
<li>2026-03 ~ 2026-05 <img src="../img/kingsoft.svg" class="company-logo" alt="金山办公"> 金山办公 WPS 菁英工程师训练营</li>
<li>2024-05 ~ 2026-05 <img src="../img/linghang.svg" class="company-logo" alt="领航工作室"> 武汉科技大学领航工作室</li>
<li>2025-01 ~ 2025-03 <img src="../img/bytedance.svg" class="company-logo" alt="字节跳动"> 字节跳动 MarsCode 青训营</li>
<li>2026-06 ~ 2026-07 <img src="../img/neusoft.svg" class="company-logo small" alt="东软集团"> 东软集团生产实习</li>
</ul>
</div>
@@ -68,7 +68,7 @@
<div class="honor-left">
<div class="honor-item">
<div class="honor-content">
<img src="img/kingsoft.svg" class="company-logo" alt="金山办公">
<img src="../img/kingsoft.svg" class="company-logo" alt="金山办公">
<span class="honor-name">"金山杯"华中地区高校第十八届程序设计邀请赛</span>
<span class="honor-badge">三等奖</span>
</div>
@@ -76,7 +76,7 @@
</div>
<div class="honor-item">
<div class="honor-content">
<img src="img/icpc.svg" class="company-logo icpc" alt="ICPC">
<img src="../img/icpc.svg" class="company-logo icpc" alt="ICPC">
<span class="honor-name">国际大学生程序设计竞赛(ICPC)湖北省赛</span>
<span class="honor-badge">优秀奖</span>
</div>
@@ -86,14 +86,14 @@
<div class="honor-right">
<div class="honor-item">
<div class="honor-content">
<img src="img/qiniu.svg" class="company-logo qiniu" alt="七牛云">
<img src="../img/qiniu.svg" class="company-logo qiniu" alt="七牛云">
<span class="honor-name">七牛云 XEngineer 开源实训项目</span>
<span class="honor-badge">三等奖</span>
</div>
</div>
<div class="honor-item">
<div class="honor-content">
<img src="img/lark.svg" class="company-logo" alt="飞书" style="height: 20px;">
<img src="../img/lark.svg" class="company-logo" alt="飞书" style="height: 20px;">
<span class="honor-name">WaytoAGI 飞书全球黑客松(武汉站)</span>
<span class="honor-badge">创意奖</span>
</div>
@@ -106,7 +106,7 @@
<div class="section">
<div class="section-title">实习经历</div>
<div class="exp-header">
<div class="exp-company"><img src="img/qiniu.svg" class="company-logo qiniu" alt="七牛云"> 七牛云 | 上海七牛信息技术有限公司</div>
<div class="exp-company"><img src="../img/qiniu.svg" class="company-logo qiniu" alt="七牛云"> 七牛云 | 上海七牛信息技术有限公司</div>
<span class="exp-position">产品研发部-基础架构部 全栈开发</span>
<a href="http://47.121.181.112:40027/i/2026/08/06/6a745822150dd.jpg" class="cert-link" target="_blank">实习证明</a>
<div class="exp-date">2026-07 ~ 2026-08</div>
@@ -118,7 +118,7 @@
</ul>
<div class="exp-header" style="margin-top: 10px;">
<div class="exp-company"><img src="img/hust.svg" class="company-logo hust" alt="华中科技大学"> 国家网络安全人才与创新基地 | 武汉金银湖实验室</div>
<div class="exp-company"><img src="../img/hust.svg" class="company-logo hust" alt="华中科技大学"> 国家网络安全人才与创新基地 | 武汉金银湖实验室</div>
<span class="exp-position">平台技术部 后端开发</span>
<a href="http://47.121.181.112:40027/i/2026/05/28/6a17cb367128b.jpg" class="cert-link" target="_blank">实习证明</a>
<div class="exp-date">2025-11 ~ 2026-03</div>