Compare commits
68 Commits
5a1ad67529
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| f985080207 | |||
| f0730f598b | |||
| bc5c7b215d | |||
| 553a03a2fa | |||
| dbb61c0ce7 | |||
| 97eef04982 | |||
| 8dcb847672 | |||
| 2551c018e3 | |||
| 28d8e2d262 | |||
| ed382447fe | |||
| de58d8ccad | |||
| cc6a3f7cab | |||
| 0bc4cbca36 | |||
| f1203c33e3 | |||
| 77c2686bbc | |||
| c32c3c74c6 | |||
| 52d9559685 | |||
| 645276040f | |||
| 0b3bd9afe6 | |||
| 46ba224136 | |||
| e53dcdf205 | |||
| 578697ccbc | |||
| a8c884d23b | |||
| a6af277ac7 | |||
| 757a2e6cb4 | |||
| af165e1df8 | |||
| cfb07c1db4 | |||
| ccee312ef9 | |||
| b1892b3f70 | |||
| de3ea91020 | |||
| a70f5939ce | |||
| 0479867ca2 | |||
| c8d4d10fb7 | |||
| af6b345653 | |||
| 45f39435ea | |||
| 9939d32bef | |||
| 8c42acab5b | |||
| 9394c9322c | |||
| 1124485f6a | |||
| ac1753d643 | |||
| dc99e2349e | |||
| 57f360a4a3 | |||
| b9bd1f5f61 | |||
| df69fb4850 | |||
| 3d137401ce | |||
| 16421fe95d | |||
| e600fc5a9b | |||
| de065b7023 | |||
| 473840e979 | |||
| 3767e3dd2d | |||
| f98eb89443 | |||
| 5857e056ac | |||
| b4ec975566 | |||
| a9768d4008 | |||
| ca52d66c0a | |||
| 42eed3bf79 | |||
| 157587e96c | |||
| 174045e0e1 | |||
| c2ab0e899c | |||
| abcd3ac315 | |||
| c03a3f81f7 | |||
| a12c2bd731 | |||
| edd839401d | |||
| e43a26634b | |||
| b5837bbac5 | |||
| 37d68cd2e4 | |||
| 6947890c0c | |||
| 19e1eb59dd |
@@ -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
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
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 resume.txt /usr/share/nginx/html/resume.txt
|
||||
COPY other/ /usr/share/nginx/html/other/
|
||||
COPY soe/ /usr/share/nginx/html/soe/
|
||||
|
||||
# 暴露端口
|
||||
EXPOSE 80
|
||||
|
||||
# 启动 Nginx
|
||||
CMD ["nginx", "-g", "daemon off;"]
|
||||
@@ -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
@@ -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
@@ -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!")
|
||||
+438
@@ -0,0 +1,438 @@
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: "Microsoft YaHei", Arial, sans-serif;
|
||||
background: #ffffff;
|
||||
color: #222222;
|
||||
line-height: 1.4;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.page {
|
||||
width: 794px;
|
||||
min-height: 1123px;
|
||||
margin: 0 auto;
|
||||
padding: 12px 22px;
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
/* Header */
|
||||
.header {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.name {
|
||||
font-size: 28px;
|
||||
font-weight: 800;
|
||||
color: #222222;
|
||||
margin-bottom: 3px;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
|
||||
.contact-info {
|
||||
font-size: 12px;
|
||||
color: #222;
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
.contact-line {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 18px;
|
||||
margin-bottom: 1px;
|
||||
}
|
||||
|
||||
.contact-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.position-line {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-top: 1px;
|
||||
}
|
||||
|
||||
.website-line {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-top: 1px;
|
||||
}
|
||||
|
||||
/* Section */
|
||||
.section {
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
color: #4478DF;
|
||||
padding: 3px 10px;
|
||||
border-left: 3px solid #4478DF;
|
||||
background-color: #EEF3FF;
|
||||
margin-bottom: 4px;
|
||||
line-height: 1.3;
|
||||
}
|
||||
|
||||
/* Education */
|
||||
.edu-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
.edu-school {
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
color: #222;
|
||||
}
|
||||
|
||||
.edu-badge {
|
||||
display: inline-block;
|
||||
font-size: 10px;
|
||||
color: #4478DF;
|
||||
border: 1px solid #4478DF;
|
||||
border-radius: 4px;
|
||||
padding: 1px 5px;
|
||||
margin-left: 6px;
|
||||
vertical-align: middle;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
.edu-major {
|
||||
font-size: 13px;
|
||||
color: #888;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.edu-degree {
|
||||
font-size: 13px;
|
||||
color: #888;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.edu-date {
|
||||
font-size: 13px;
|
||||
color: #888;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.edu-items {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 2px 20px;
|
||||
margin-left: 12px;
|
||||
font-size: 13px;
|
||||
color: #252525;
|
||||
line-height: 1.45;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.edu-items li {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
/* Honors */
|
||||
.honor-section {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.honor-left {
|
||||
width: 55%;
|
||||
border-right: 1px dashed #ccc;
|
||||
padding-right: 12px;
|
||||
}
|
||||
|
||||
.honor-right {
|
||||
width: 45%;
|
||||
padding-left: 12px;
|
||||
}
|
||||
|
||||
.honor-item {
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 2px;
|
||||
font-size: 13px;
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
.honor-content {
|
||||
color: #222;
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.honor-right .honor-content {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.honor-right .honor-name {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.honor-name {
|
||||
color: #222;
|
||||
}
|
||||
|
||||
.honor-badge {
|
||||
display: inline-block;
|
||||
min-width: 52px;
|
||||
text-align: right;
|
||||
margin-left: 4px;
|
||||
font-size: 12px;
|
||||
color: #888;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.cert-link {
|
||||
color: #4478DF;
|
||||
text-decoration: none;
|
||||
margin-left: 8px;
|
||||
font-size: 13px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.honor-item .cert-link {
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
.honor-date {
|
||||
color: #888;
|
||||
white-space: nowrap;
|
||||
margin-left: 4px;
|
||||
min-width: 56px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
/* Experience */
|
||||
.exp-header {
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
margin-bottom: 1px;
|
||||
}
|
||||
|
||||
.exp-company {
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
color: #222;
|
||||
}
|
||||
|
||||
.exp-date {
|
||||
font-size: 13px;
|
||||
color: #888;
|
||||
white-space: nowrap;
|
||||
margin-left: 12px;
|
||||
}
|
||||
|
||||
.exp-position {
|
||||
font-size: 12px;
|
||||
color: #888;
|
||||
flex: 1;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.exp-items {
|
||||
margin-left: 12px;
|
||||
font-size: 13px;
|
||||
color: #252525;
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
.exp-items li {
|
||||
list-style-type: disc;
|
||||
margin-left: 6px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
/* 单位简介 */
|
||||
.exp-intro {
|
||||
margin: 3px 0 4px 12px;
|
||||
padding: 2px 8px;
|
||||
font-size: 11px;
|
||||
line-height: 1.5;
|
||||
color: #656464;
|
||||
background: #F5F7FB;
|
||||
border-left: 2px solid #B9C9EC;
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
.exp-intro-label {
|
||||
display: inline-block;
|
||||
font-size: 10px;
|
||||
font-weight: 700;
|
||||
color: #4478DF;
|
||||
margin-right: 6px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/* Project */
|
||||
.proj-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
margin-bottom: 1px;
|
||||
}
|
||||
|
||||
.proj-title-line {
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.proj-name {
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
color: #222;
|
||||
}
|
||||
|
||||
.proj-role {
|
||||
font-size: 12px;
|
||||
color: #888;
|
||||
}
|
||||
|
||||
.proj-date {
|
||||
font-size: 13px;
|
||||
color: #888;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.proj-link-line {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
font-size: 12px;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
.proj-tags {
|
||||
display: flex;
|
||||
gap: 4px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.proj-tag {
|
||||
display: inline-block;
|
||||
font-size: 10px;
|
||||
color: #4478DF;
|
||||
border: 1px solid #4478DF;
|
||||
border-radius: 3px;
|
||||
padding: 0px 4px;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
.proj-link {
|
||||
color: #4478DF;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.proj-intro {
|
||||
font-size: 13px;
|
||||
color: #252525;
|
||||
line-height: 1.45;
|
||||
margin-bottom: 3px;
|
||||
border: 1px dashed #b0b0b0;
|
||||
border-radius: 4px;
|
||||
padding: 4px 8px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.proj-desc {
|
||||
color: #656464;
|
||||
display: block;
|
||||
text-indent: 24px;
|
||||
}
|
||||
|
||||
.proj-work-title {
|
||||
font-size: 13px;
|
||||
font-weight: 700;
|
||||
color: #222;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
.proj-work-items {
|
||||
margin-left: 12px;
|
||||
font-size: 13px;
|
||||
color: #252525;
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
.proj-work-items li {
|
||||
list-style-type: decimal;
|
||||
margin-left: 12px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
/* Skills */
|
||||
.skill-items {
|
||||
margin-left: 12px;
|
||||
font-size: 13px;
|
||||
color: #252525;
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
.skill-items li {
|
||||
list-style-type: disc;
|
||||
margin-left: 6px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
/* SVG Icons */
|
||||
.svg-icon {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
fill: #4478DF;
|
||||
vertical-align: middle;
|
||||
margin-right: 5px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
/* Company Logo */
|
||||
.company-logo {
|
||||
height: 16px;
|
||||
vertical-align: middle;
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
.company-logo.small {
|
||||
height: 10px;
|
||||
}
|
||||
|
||||
.company-logo.icpc {
|
||||
height: 22px;
|
||||
}
|
||||
|
||||
.company-logo.hust {
|
||||
height: 22px;
|
||||
}
|
||||
|
||||
.company-logo.qiniu {
|
||||
height: 14px;
|
||||
}
|
||||
|
||||
/* Print styles - force background colors to display */
|
||||
@media print {
|
||||
* {
|
||||
-webkit-print-color-adjust: exact !important;
|
||||
print-color-adjust: exact !important;
|
||||
color-adjust: exact !important;
|
||||
}
|
||||
|
||||
/* 标题不落单在页尾,条目不跨页截断 */
|
||||
.exp-header,
|
||||
.proj-header {
|
||||
break-after: avoid;
|
||||
}
|
||||
|
||||
.exp-intro,
|
||||
.exp-items li {
|
||||
break-inside: avoid;
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
@@ -0,0 +1,3 @@
|
||||
<svg width="96" height="86" viewBox="0 0 96 86" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.9068 9.24501C17.7722 7.18581 17.7722 3.76656 19.9068 1.70741C21.9355 -0.249685 25.1494 -0.249685 27.1782 1.70741L38.4919 12.6215C38.8133 12.9316 39.0863 13.2725 39.311 13.635H56.4208C56.6459 13.2725 56.9189 12.9316 57.24 12.6215L68.5536 1.70741C70.5824 -0.249685 73.7963 -0.249685 75.8251 1.70741C77.96 3.76656 77.96 7.18581 75.8251 9.24501L71.2747 13.635H74.6667C86.4485 13.635 96 23.1863 96 34.9684V64.3312C96 76.1131 86.4485 85.6645 74.6667 85.6645H21.3333C9.55125 85.6645 0 76.1131 0 64.3312V34.9683C0 23.1862 9.55125 13.635 21.3333 13.635H24.4575L19.9068 9.24501ZM21.3333 23.925C15.4423 23.925 10.6667 28.7006 10.6667 34.5916V64.7077C10.6667 70.5989 15.4423 75.3744 21.3333 75.3744H74.6667C80.5579 75.3744 85.3333 70.5989 85.3333 64.7077V34.5916C85.3333 28.7006 80.5579 23.925 74.6667 23.925H21.3333ZM26.6667 44.6932C26.6667 41.7477 29.0545 39.3598 32 39.3598C34.9455 39.3598 37.3333 41.7477 37.3333 44.6932V49.4613C37.3333 52.4069 34.9455 54.7947 32 54.7947C29.0545 54.7947 26.6667 52.4069 26.6667 49.4613V44.6932ZM64 39.3598C61.0544 39.3598 58.6667 41.7477 58.6667 44.6932V49.4613C58.6667 52.4069 61.0544 54.7947 64 54.7947C66.9456 54.7947 69.3333 52.4069 69.3333 49.4613V44.6932C69.3333 41.7477 66.9456 39.3598 64 39.3598Z" fill="#00A1D6"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
Executable
+78
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 305 KiB |
@@ -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.
|
After Width: | Height: | Size: 743 KiB |
Executable
+4
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="202" height="135">
|
||||
<path d="M0 0 C3.31982901 -0.46155786 5.90222618 -0.77441051 8.7421875 1.22900391 C10.57404485 3.02867712 12.29224363 4.89466431 14 6.8125 C24.56260966 17.99115172 36.23633264 26.19940213 50 33 C49.80083984 32.07380859 49.80083984 32.07380859 49.59765625 31.12890625 C48.40799173 25.42372675 47.5613574 19.80069316 47 14 C50.72166266 13.70810489 53.23714465 13.58717431 56.5625 15.38671875 C60.58596995 19.70034278 61.18820032 25.17025261 62.40820312 30.82226562 C63.51882708 35.63652788 63.51882708 35.63652788 66.64794922 39.22924805 C68.76440168 40.07947172 70.75901807 40.57786323 73 41 C74.12112183 41.24254517 74.12112183 41.24254517 75.26489258 41.48999023 C77.67053828 41.96436067 80.07260343 42.34188045 82.5 42.6875 C83.81484375 42.87530029 83.81484375 42.87530029 85.15625 43.06689453 C115.43665257 47.1105166 146.57574003 39.61280074 171.3125 21.5625 C178.43327232 15.99969532 185.08025958 10.09568149 191.1875 3.4375 C194.38507309 0.14875375 194.38507309 0.14875375 197.05078125 -0.49609375 C199 -0.5 199 -0.5 202 0 C201.45961243 5.45534116 199.50118547 9.50771157 196.9375 14.25 C196.33131836 15.3793396 196.33131836 15.3793396 195.71289062 16.53149414 C192.3882288 22.57662945 188.59694231 27.84856271 184 33 C183.33742187 33.804375 182.67484375 34.60875 181.9921875 35.4375 C164.8886256 55.63358785 140.07241177 67.77098473 114 71 C109.72413527 71.27846532 105.47143083 71.32538013 101.1875 71.3125 C100.12724609 71.32861328 99.06699219 71.34472656 97.97460938 71.36132812 C89.32376016 71.36653634 81.40140225 69.92400192 73 68 C74.61873795 73.91303805 76.25487529 79.82087588 77.90722656 85.72460938 C78.46671012 87.73304514 79.02144152 89.74281108 79.57128906 91.75390625 C80.36313878 94.64687343 81.1720376 97.53460332 81.984375 100.421875 C82.22621521 101.31992859 82.46805542 102.21798218 82.71722412 103.14324951 C84.44677984 109.48818566 84.44677984 109.48818566 89 114 C92.11855798 114.61423921 92.11855798 114.61423921 95.59375 114.53125 C96.87121094 114.53640625 98.14867188 114.5415625 99.46484375 114.546875 C100.45846924 114.53430664 100.45846924 114.53430664 101.47216797 114.52148438 C103.49438448 114.5000595 105.51304961 114.52129739 107.53515625 114.546875 C109.45134766 114.53914063 109.45134766 114.53914063 111.40625 114.53125 C113.15905273 114.52448242 113.15905273 114.52448242 114.94726562 114.51757812 C118.66486144 113.88727557 119.77506293 113.00376119 122 110 C123.06678163 107.55575922 123.06678163 107.55575922 123.7109375 104.859375 C123.98679687 103.87066406 124.26265625 102.88195312 124.546875 101.86328125 C125.09456127 99.80429088 125.63888891 97.7444039 126.1796875 95.68359375 C128.43202471 87.64400122 131.3927873 80.89250135 138.8125 76.5 C143.16693481 74.57966898 147.32012454 74.61001038 152 75 C151.53695974 83.92550017 150.66892547 92.80602678 149.6875 101.6875 C149.52930786 103.25359009 149.52930786 103.25359009 149.36791992 104.85131836 C148.23249682 114.72615296 146.07765909 125.3942699 138 132 C132.12733367 135.96473206 126.04985588 135.46759583 119.2265625 135.46875 C117.98885101 135.47636353 116.75113953 135.48397705 115.47592163 135.49182129 C112.19424197 135.50536625 108.91297121 135.50323791 105.63128662 135.49743652 C102.31127582 135.50167857 98.99166004 135.549051 95.671875 135.5859375 C93.12760816 135.59114537 90.58333466 135.59383268 88.0390625 135.59375 C86.85236969 135.61014526 85.66567688 135.62654053 84.44302368 135.64343262 C77.32770242 135.58437953 72.47330781 134.7241181 67 130 C64.9765625 127.82421875 64.9765625 127.82421875 63.625 125.6875 C63.16351563 124.99011719 62.70203125 124.29273437 62.2265625 123.57421875 C58.96896852 116.73742119 58.38732757 109.07330287 57.52734375 101.640625 C57.39936905 100.57382507 57.27139435 99.50702515 57.13954163 98.40789795 C56.73403782 95.02248588 56.33530995 91.63632406 55.9375 88.25 C55.5352219 84.84951169 55.13145753 81.44921644 54.7247467 78.04925537 C54.47263811 75.93943879 54.22321796 73.82929882 53.97679138 71.71881104 C53.86319778 70.76391785 53.74960419 69.80902466 53.63256836 68.82519531 C53.53423203 67.98772766 53.43589569 67.15026001 53.33457947 66.28741455 C52.86997772 63.09505619 52.86997772 63.09505619 52 60 C49.25129735 58.16405853 49.25129735 58.16405853 45.8125 56.5 C24.76775239 45.22573671 8.3835553 25.25751741 0 3 C0 2.01 0 1.02 0 0 Z " fill="#29A8E1" transform="translate(0,0)"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.4 KiB |
Binary file not shown.
+57
@@ -0,0 +1,57 @@
|
||||
server {
|
||||
listen 80;
|
||||
server_name localhost;
|
||||
absolute_redirect off;
|
||||
root /usr/share/nginx/html;
|
||||
index index.html;
|
||||
|
||||
# 共享静态资源
|
||||
location /css/ {
|
||||
alias /usr/share/nginx/html/css/;
|
||||
}
|
||||
|
||||
location /img/ {
|
||||
alias /usr/share/nginx/html/img/;
|
||||
}
|
||||
|
||||
# 主简历
|
||||
location /resume/ {
|
||||
alias /usr/share/nginx/html/resume/;
|
||||
try_files $uri $uri/ /resume/index.html;
|
||||
}
|
||||
|
||||
# 央国企简历
|
||||
location /soe/ {
|
||||
alias /usr/share/nginx/html/soe/;
|
||||
try_files $uri $uri/ /soe/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 = /txt {
|
||||
default_type "text/plain; charset=utf-8";
|
||||
alias /usr/share/nginx/html/resume.txt;
|
||||
}
|
||||
|
||||
# 根路径重定向到主简历
|
||||
location = / {
|
||||
return 301 /resume/;
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
@@ -0,0 +1,217 @@
|
||||
<!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/resume" target="_blank" title="在线简历" style="color: #4478DF; text-decoration: none;">http://47.121.181.112:8080/resume</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>构建多协议单点认证网关,从零实现 SAML 2.0 SP 加密断言解密 + OAuth2/OIDC Provider + JWT Claims 与 Redis 吊销。</li>
|
||||
<li>设计 PostgreSQL HA 集群方案,基于 Patroni+etcd+HAProxy+Keepalived 实现 VIP 漂移、读写分离与 pgBackRest 冗余。</li>
|
||||
<li>实现 Ansible MySQL 全生命周期自动化(11 个 Playbook),覆盖原子二进制安装、GTID 复制校验与 MHA 故障转移回调。</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>完善构建组件漏洞知识图谱,基于金银湖安全大模型及供应链上游信息,统一评估组件安全风险,接入态势感知安全中心。</li>
|
||||
<li>设计高性能 API 计费网关,支持按月固定/按调用量双模式,Redis HINCRBY 实时计数 + MongoDB 聚合账单,幂等写入。</li>
|
||||
<li>实现 Redis 滑动窗口分布式限流中间件,MULTI 事务保证原子性,Header 注入 X-RateLimit,Redis 异常时降级保障可用性。</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 元素与动画帧流。
|
||||
<br>支持用户提供世界观文本、参考图片、标签映射以及反馈信息,输出具备一致性的可用素材。
|
||||
</span>
|
||||
</div>
|
||||
<div class="proj-work-title">主要工作:</div>
|
||||
<ol class="proj-work-items">
|
||||
<li>构建基于有向无环图的工作流,引入 critic 自省机制实现反馈增强,基于 ReAct 架构实现轮级思考,并支持 Agent 间通信。</li>
|
||||
<li>在分布式限流方案的选择上,对比计数器、漏桶、窗口等多种限流机制,选用 go-redis 实现分布式的令牌桶算法限流。</li>
|
||||
<li>为增强系统可观测性,基于 Gin 中间件以及自定义的任务协程池暴露指标,使用 Prometheus 收集,接入 Grafana 面板。</li>
|
||||
<li>在不同部署方案(单机与多机)部署上,支持基于 RabbitMQ 的共享任务队列,支持基于内存的自定义单机任务队列。</li>
|
||||
<li>对于用户偏好的多样性,支持基于渐进式披露的 skill 配置,用户反馈的动态注入,世界观文本 RAG 召回,实现上下文增强。</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">后端开发 【哔哩哔哩技术团队《B站千亿级点赞系统服务架构设计》文章复现】</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">中台化的高并发点赞系统,支撑多业务场景的点赞交互与数据查询。
|
||||
<br>应对亿级数据规模与万级QPS高并发流量,提供高可用、可扩展的基础服务。</span>
|
||||
</div>
|
||||
<div class="proj-work-title">主要工作:</div>
|
||||
<ol class="proj-work-items">
|
||||
<li>为避免缓存穿透,构建布隆过滤器与空值短缓存双重机制;为避免缓存击穿,将热点数据加互斥锁,确保单线程回源重建。</li>
|
||||
<li>基于 Caffeine + Redis 构建二级缓存,热点 Key 提升至本地缓存,避免冷数据污染,降低 Redis 访问压力。</li>
|
||||
<li>Lua 脚本保证点赞原子性,10 秒时间片分桶暂存增量,定时任务批量落库,补偿任务每日兜底,保障最终一致性。</li>
|
||||
<li>对比CMS算法,采用HeavyKeeper实现Top-K探测,利用指数衰减淘汰冷Key,解决高频更新准确率问题,适配流量变化。</li>
|
||||
<li>单机场景利用字符串常量池特性,以业务前缀+用户ID为锁对象;多机场景基于 Redis 实现分布式锁,保障多实例数据一致。</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 前沿工程实践,理解 Context Engineer 与 Harness Engineer,理解智能体架构、权限治理、可插拔配置等。</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,215 @@
|
||||
<!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;">C/C++</span>
|
||||
<span class="proj-tag" style="margin-right: 4px;">Go</span>
|
||||
<span class="proj-tag" style="margin-right: 4px;">Python</span>
|
||||
<span class="proj-tag">Java</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="website-line">
|
||||
线上简历:<a href="http://47.121.181.112:8080/resume" target="_blank" title="在线简历" style="color: #4478DF; text-decoration: none;">http://47.121.181.112:8080/resume</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>构建多协议单点认证网关,从零实现 SAML 2.0 SP 加密断言解密 + OAuth2/OIDC Provider + JWT Claims 与 Redis 吊销。</li>
|
||||
<li>设计 PostgreSQL HA 集群方案,基于 Patroni+etcd+HAProxy+Keepalived 实现 VIP 漂移、读写分离与 pgBackRest 冗余。</li>
|
||||
<li>实现 Ansible MySQL 全生命周期自动化(11 个 Playbook),覆盖原子二进制安装、GTID 复制校验与 MHA 故障转移回调。</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>完善构建组件漏洞知识图谱,基于金银湖安全大模型及供应链上游信息,统一评估组件安全风险,接入态势感知安全中心。</li>
|
||||
<li>设计高性能 API 计费网关,支持按月固定/按调用量双模式,Redis HINCRBY 实时计数 + MongoDB 聚合账单,幂等写入。</li>
|
||||
<li>实现 Redis 滑动窗口分布式限流中间件,MULTI 事务保证原子性,Header 注入 X-RateLimit,Redis 异常时降级保障可用性。</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 元素与动画帧流。
|
||||
<br>支持用户提供世界观文本、参考图片、标签映射以及反馈信息,输出具备一致性的可用素材。
|
||||
</span>
|
||||
</div>
|
||||
<div class="proj-work-title">主要工作:</div>
|
||||
<ol class="proj-work-items">
|
||||
<li>构建基于有向无环图的工作流,引入 critic 自省机制实现反馈增强,基于 ReAct 架构实现轮级思考,并支持 Agent 间通信。</li>
|
||||
<li>在分布式限流方案的选择上,对比计数器、漏桶、窗口等多种限流机制,选用 go-redis 实现分布式的令牌桶算法限流。</li>
|
||||
<li>为增强系统可观测性,基于 Gin 中间件以及自定义的任务协程池暴露指标,使用 Prometheus 收集,接入 Grafana 面板。</li>
|
||||
<li>在不同部署方案(单机与多机)部署上,支持基于 RabbitMQ 的共享任务队列,支持基于内存的自定义单机任务队列。</li>
|
||||
<li>对于用户偏好的多样性,支持基于渐进式披露的 skill 配置,用户反馈的动态注入,世界观文本 RAG 召回,实现上下文增强。</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">后端开发 【哔哩哔哩技术团队《B站千亿级点赞系统服务架构设计》文章复现】</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">中台化的高并发点赞系统,支撑多业务场景的点赞交互与数据查询。
|
||||
<br>应对亿级数据规模与万级QPS高并发流量,提供高可用、可扩展的基础服务。</span>
|
||||
</div>
|
||||
<div class="proj-work-title">主要工作:</div>
|
||||
<ol class="proj-work-items">
|
||||
<li>为避免缓存穿透,构建布隆过滤器与空值短缓存双重机制;为避免缓存击穿,将热点数据加互斥锁,确保单线程回源重建。</li>
|
||||
<li>基于 Caffeine + Redis 构建二级缓存,热点 Key 提升至本地缓存,避免冷数据污染,降低 Redis 访问压力。</li>
|
||||
<li>Lua 脚本保证点赞原子性,10 秒时间片分桶暂存增量,定时任务批量落库,补偿任务每日兜底,保障最终一致性。</li>
|
||||
<li>对比CMS算法,采用HeavyKeeper实现Top-K探测,利用指数衰减淘汰冷Key,解决高频更新准确率问题,适配流量变化。</li>
|
||||
<li>单机场景利用字符串常量池特性,以业务前缀+用户ID为锁对象;多机场景基于 Redis 实现分布式锁,保障多实例数据一致。</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<!-- 专业技能 -->
|
||||
<div class="section">
|
||||
<div class="section-title">专业技能</div>
|
||||
<ul class="skill-items">
|
||||
<li>熟悉 C/C++ 语言,能够调用系统库及 Win32 API 进行底层开发;同时掌握 Go/Python/Java 多语言开发,具备扎实的数据结构与并发编程基础。</li>
|
||||
<li>熟悉计算机网络与 HTTP 协议,理解 TCP/IP 协议栈、Web 通信原理及网络编程,具备流量分析与协议逆向能力。</li>
|
||||
<li>熟悉常见 Web 漏洞原理(溢出、反序列化、SSRF、SQL注入、XSS、CSRF 等),具备漏洞挖掘、复现与修复能力。</li>
|
||||
<li>熟悉 Linux 系统使用,掌握常用命令、Shell 脚本、进程管理及文件权限。</li>
|
||||
<li>熟悉供应链安全,理解组件漏洞知识图谱构建、安全风险评估、态势感知及威胁情报分析。</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
-502
@@ -1,502 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>何朝晖 - 简历</title>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: "Microsoft YaHei", Arial, sans-serif;
|
||||
background: #ffffff;
|
||||
color: #222222;
|
||||
line-height: 1.4;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.page {
|
||||
width: 794px;
|
||||
min-height: 1123px;
|
||||
margin: 0 auto;
|
||||
padding: 20px 36px;
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
/* Header */
|
||||
.header {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.name {
|
||||
font-size: 28px;
|
||||
font-weight: 800;
|
||||
color: #222222;
|
||||
margin-bottom: 3px;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
|
||||
.contact-info {
|
||||
font-size: 12px;
|
||||
color: #222;
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
.contact-line {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 18px;
|
||||
margin-bottom: 1px;
|
||||
}
|
||||
|
||||
.contact-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.position-line {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-top: 1px;
|
||||
}
|
||||
|
||||
.website-line {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-top: 1px;
|
||||
}
|
||||
|
||||
/* Section */
|
||||
.section {
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
color: #4478DF;
|
||||
padding: 3px 10px;
|
||||
border-left: 3px solid #4478DF;
|
||||
background-color: #EEF3FF;
|
||||
margin-bottom: 4px;
|
||||
line-height: 1.3;
|
||||
}
|
||||
|
||||
/* Education */
|
||||
.edu-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
.edu-school {
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
color: #222;
|
||||
}
|
||||
|
||||
.edu-badge {
|
||||
display: inline-block;
|
||||
font-size: 10px;
|
||||
color: #4478DF;
|
||||
border: 1px solid #4478DF;
|
||||
border-radius: 4px;
|
||||
padding: 1px 5px;
|
||||
margin-left: 6px;
|
||||
vertical-align: middle;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
.edu-major {
|
||||
font-size: 13px;
|
||||
color: #888;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.edu-degree {
|
||||
font-size: 13px;
|
||||
color: #888;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.edu-date {
|
||||
font-size: 13px;
|
||||
color: #888;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.edu-items {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 2px 20px;
|
||||
margin-left: 12px;
|
||||
font-size: 13px;
|
||||
color: #252525;
|
||||
line-height: 1.45;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.edu-items li {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
/* Honors */
|
||||
.honor-item {
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
margin-bottom: 2px;
|
||||
font-size: 13px;
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
.honor-content {
|
||||
color: #222;
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.honor-name {
|
||||
color: #222;
|
||||
}
|
||||
|
||||
.honor-badge {
|
||||
display: inline-block;
|
||||
min-width: 52px;
|
||||
text-align: right;
|
||||
margin-left: 8px;
|
||||
color: #222;
|
||||
}
|
||||
|
||||
.cert-link {
|
||||
color: #4478DF;
|
||||
text-decoration: none;
|
||||
margin-left: 8px;
|
||||
font-size: 13px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.honor-date {
|
||||
color: #888;
|
||||
white-space: nowrap;
|
||||
margin-left: 12px;
|
||||
min-width: 56px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
/* Experience */
|
||||
.exp-header {
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
margin-bottom: 1px;
|
||||
}
|
||||
|
||||
.exp-company {
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
color: #222;
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.exp-date {
|
||||
font-size: 13px;
|
||||
color: #888;
|
||||
white-space: nowrap;
|
||||
margin-left: 12px;
|
||||
}
|
||||
|
||||
.exp-sub {
|
||||
font-size: 12px;
|
||||
color: #888;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
.exp-items {
|
||||
margin-left: 12px;
|
||||
font-size: 13px;
|
||||
color: #252525;
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
.exp-items li {
|
||||
list-style-type: disc;
|
||||
margin-left: 6px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
/* Project */
|
||||
.proj-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
margin-bottom: 1px;
|
||||
}
|
||||
|
||||
.proj-name {
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
color: #222;
|
||||
}
|
||||
|
||||
.proj-date {
|
||||
font-size: 13px;
|
||||
color: #888;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.proj-sub {
|
||||
font-size: 12px;
|
||||
color: #888;
|
||||
margin-bottom: 2px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.proj-link {
|
||||
color: #4478DF;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.proj-intro {
|
||||
font-size: 13px;
|
||||
color: #252525;
|
||||
margin-left: 12px;
|
||||
line-height: 1.45;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
.proj-work-title {
|
||||
font-size: 13px;
|
||||
font-weight: 700;
|
||||
color: #222;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
.proj-work-items {
|
||||
margin-left: 12px;
|
||||
font-size: 13px;
|
||||
color: #252525;
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
.proj-work-items li {
|
||||
list-style-type: decimal;
|
||||
margin-left: 12px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
/* Skills */
|
||||
.skill-items {
|
||||
margin-left: 12px;
|
||||
font-size: 13px;
|
||||
color: #252525;
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
.skill-items li {
|
||||
list-style-type: disc;
|
||||
margin-left: 6px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
/* SVG Icons */
|
||||
.svg-icon {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
fill: #4478DF;
|
||||
vertical-align: middle;
|
||||
margin-right: 5px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
/* Company Logo */
|
||||
.company-logo {
|
||||
height: 16px;
|
||||
vertical-align: middle;
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
.company-logo.small {
|
||||
height: 10px;
|
||||
}
|
||||
|
||||
.company-logo.icpc {
|
||||
height: 22px;
|
||||
}
|
||||
|
||||
/* Print styles - force background colors to display */
|
||||
@media print {
|
||||
* {
|
||||
-webkit-print-color-adjust: exact !important;
|
||||
print-color-adjust: exact !important;
|
||||
color-adjust: exact !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</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>
|
||||
<div class="position-line">
|
||||
<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>
|
||||
全栈开发(Go/Java后端)
|
||||
</div>
|
||||
<div class="website-line">
|
||||
<svg class="svg-icon" viewBox="0 0 24 24" title="在线简历"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39z"><title>在线简历</title></path></svg>
|
||||
<a href="http://47.121.181.112:8080/resume/" target="_blank" title="在线简历" style="color: #4478DF; text-decoration: none;">http://47.121.181.112:8080/resume/</a>
|
||||
<svg class="svg-icon" style="margin-left: 12px;" viewBox="0 0 24 24" title="代码仓库"><path d="M21.007 8.222A3.738 3.738 0 0 0 15.045 5.2a3.737 3.737 0 0 0 1.156 6.583 2.988 2.988 0 0 1-2.668 1.67h-2.99a4.456 4.456 0 0 0-2.989 1.165V7.559a3.738 3.738 0 1 0-1.494 0v8.852a3.742 3.742 0 1 0 1.63.26 2.987 2.987 0 0 1 2.854-2.117h2.99a4.484 4.484 0 0 0 4.223-3.09 3.736 3.736 0 0 0 3.25-3.242zM4.565 3.738a2.244 2.244 0 1 1 4.488 0 2.244 2.244 0 0 1-4.488 0zm4.488 16.481a2.244 2.244 0 1 1-4.488 0 2.244 2.244 0 0 1 4.488 0zm8.221-9.715a2.244 2.244 0 1 1 0-4.488 2.244 2.244 0 0 1 0 4.488z"><title>代码仓库</title></path></svg>
|
||||
<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>
|
||||
</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">计算机科学与技术(国家级一流专业)</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-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 class="honor-date">2024-04</div>
|
||||
</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 class="honor-date">2024-06</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 实习经历 -->
|
||||
<div class="section">
|
||||
<div class="section-title">实习经历</div>
|
||||
<div class="exp-header">
|
||||
<div class="exp-company">七牛云 | 上海七牛信息技术有限公司</div>
|
||||
<div class="exp-date">2026-07 ~ 至今</div>
|
||||
</div>
|
||||
<div class="exp-sub">基础架构部</div>
|
||||
<ul class="exp-items">
|
||||
<li>参与 XInfra 基础设施平台后端开发,基于 K8s NameSpace 实现多业务线资源隔离与权限控制,支撑多租户独立管控。</li>
|
||||
<li>设计统一认证方案,基于 LDAP + OAuth2.0 实现内部多系统 SSO 单点登录与主从系统角色映射,全链路审计可追溯。</li>
|
||||
<li>负责监控告警模块,对接夜莺与 VictoriaMetrics,实现日志采集、指标聚合,并支持按业务线展示告警、消息渠道推送。</li>
|
||||
</ul>
|
||||
|
||||
<div class="exp-header" style="margin-top: 10px;">
|
||||
<div class="exp-company">国家网络安全人才与创新基地 | 武汉金银湖实验室</div>
|
||||
<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>
|
||||
<div class="exp-sub">平台技术部 后端开发 | 华中科技大学-网络空间安全学院</div>
|
||||
<ul class="exp-items">
|
||||
<li>参与设计 SaaS 多租户架构 的 Tcode 平台,设计租户隔离策略、用户绑定解绑、RBAC 权限模型和树状组织架构。</li>
|
||||
<li>参与数据中台开发,基于 Go 并发模型重构面向多源异构数据的采集服务,引入流量控制机制提升数据处理效率。</li>
|
||||
<li>完善安全检测模块的 RAG 模块,基于金银湖安全大模型,实现结构化输出生成元数据,构建组件漏洞知识图谱。</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- 项目经历 -->
|
||||
<div class="section">
|
||||
<div class="section-title">项目经历</div>
|
||||
<div class="proj-header">
|
||||
<div class="proj-name">Gen2D 游戏素材生成工具</div>
|
||||
<div class="proj-date">2026-05 ~ 至今</div>
|
||||
</div>
|
||||
<div class="proj-sub">
|
||||
<span>全栈开发 【XEngineer 开源项目】</span>
|
||||
<a href="https://gitee.com/hezhaohui123/gen2d" class="proj-link">https://gitee.com/hezhaohui123/gen2d</a>
|
||||
</div>
|
||||
<div class="proj-intro">
|
||||
<strong>项目介绍:</strong><br>
|
||||
基于 Go(Gin) + Eino Agent Graph + GORM + 七牛云 Kodo + React + Zustand 的 AI 2D 游戏素材生成平台。<br>
|
||||
用户输入文本提示词,自动生成风格一致的 Sprite、背景、UI 元素与动画帧,可直接导入 Unity 等主流 2D 游戏引擎。
|
||||
</div>
|
||||
<div class="proj-work-title">主要工作:</div>
|
||||
<ol class="proj-work-items">
|
||||
<li>基于 Eino Graph 构建四阶段 DAG 管线,编排 Prompt 优化、素材生成、质量校验、格式适配四节点有序执行。</li>
|
||||
<li>为提升生成质量稳定性,引入 Reflect 自省机制,自动质检不通过时将拒绝理由回注提示词,同时支持注入用户反馈。</li>
|
||||
<li>在限流方案的选择上,对比计数器、漏桶、窗口等多种限流机制,选用 go-redis 实现分布式的令牌桶算法限流。</li>
|
||||
<li>针对 LLM 请求耗时长特性,设计自定义 IO 密集型协程池和 RabbitMQ 消息队列,实现模型调用并发化和异步化。</li>
|
||||
</ol>
|
||||
|
||||
<div class="proj-header" style="margin-top: 12px;">
|
||||
<div class="proj-name">ThumbUP 高并发点赞系统</div>
|
||||
<div class="proj-date">2025-10 ~ 2025-11</div>
|
||||
</div>
|
||||
<div class="proj-sub">
|
||||
<span>后端开发 【哔哩哔哩技术团队文章复现】<!-- TODO: 后续添加文章链接 --></span>
|
||||
<a href="http://47.121.181.112:3000/wonder/thumb-up" class="proj-link">http://47.121.181.112:3000/wonder/thumb-up</a>
|
||||
</div>
|
||||
<div class="proj-intro">
|
||||
<strong>项目介绍:</strong><br>
|
||||
基于 Spring Boot 3 + Redis + Caffeine + HeavyKeeper + MyBatis-Plus 的高并发点赞系统。<br>
|
||||
采用 Write-Behind 异步写回架构,写入由 Redis 承接后定时批量落库;读取走 Caffeine、Redis 二级缓存加速。
|
||||
</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>熟练掌握 Java 与 Go 语言核心,熟悉常用集合与数据结构、面向对象设计、并发模型及内存管理机制。</li>
|
||||
<li>熟悉 Java (Spring/MyBatis/Cloud) 与 Go (Gin/GORM/gRPC) 技术栈,能熟练运用框架进行模块化开发与接口设计。</li>
|
||||
<li>熟练掌握 MySQL 数据库,深刻理解事务隔离、存储引擎原理、B+树索引优化及 MVCC 并发控制机制。</li>
|
||||
<li>熟练掌握缓存技术,深入理解本地缓存(Caffeine)与分布式缓存(Redis)二级架构,掌握 RDB/AOF 持久化策略、哨兵集群机制及高性能架构原理。</li>
|
||||
<li>熟悉 RabbitMQ 消息队列,理解消息持久化、死信队列、延迟队列等机制,能够设计异步解耦架构。</li>
|
||||
<li>熟悉 Docker 容器化与 Kubernetes 编排,熟悉 CI/CD 工作流,了解集群应用部署与相关架构。</li>
|
||||
<li>熟悉 Context Engineer 与 Harness Engineer,理解主流 Agent 架构(ReAct/reflect/Plan-Exec)。</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
+119
@@ -0,0 +1,119 @@
|
||||
================================================================================
|
||||
【基本信息】
|
||||
================================================================================
|
||||
|
||||
姓名:何朝晖
|
||||
手机:15671623703
|
||||
邮箱:hezhaohui0807@163.com
|
||||
求职意向:全栈开发(偏后端)/ 后端开发 / 基础架构开发
|
||||
技术栈:Go, Java, Vue, React
|
||||
线上简历:http://47.121.181.112:8080/resume
|
||||
代码仓库:http://47.121.181.112:3000/wonder
|
||||
CSDN博客:https://blog.csdn.net/cheer2333
|
||||
文档站:http://47.121.181.112:20000/
|
||||
|
||||
================================================================================
|
||||
【教育经历】
|
||||
================================================================================
|
||||
|
||||
学校:武汉科技大学(省部共建)
|
||||
专业:计算机科学与技术(国家级一流专业 | ESI 0.495%)
|
||||
学历:本科
|
||||
时间:2023-09 ~ 2027-06
|
||||
|
||||
在校经历:
|
||||
- 2026-03 ~ 2026-05 金山办公 WPS 菁英工程师训练营
|
||||
- 2024-05 ~ 2026-05 武汉科技大学领航工作室
|
||||
- 2025-01 ~ 2025-03 字节跳动 MarsCode 青训营
|
||||
- 2026-06 ~ 2026-07 东软集团生产实习
|
||||
|
||||
================================================================================
|
||||
【荣誉奖项】
|
||||
================================================================================
|
||||
|
||||
- "金山杯"华中地区高校第十八届程序设计邀请赛 三等奖 2024-04
|
||||
- 国际大学生程序设计竞赛(ICPC)湖北省赛 优秀奖 2024-06
|
||||
- 七牛云 XEngineer 开源实训项目 三等奖
|
||||
- WaytoAGI 飞书全球黑客松(武汉站) 创意奖
|
||||
|
||||
================================================================================
|
||||
【实习经历】
|
||||
================================================================================
|
||||
|
||||
公司:七牛云 | 上海七牛信息技术有限公司
|
||||
部门:产品研发部-基础架构部
|
||||
职位:全栈开发
|
||||
时间:2026-07 ~ 2026-08
|
||||
|
||||
工作内容:
|
||||
- 构建基础架构平台,完善服务注册链路,集成网络探测、数据源自动注册、监控指标采集与日志接入,实现基础服务可观测。
|
||||
- 构建多协议单点认证网关,从零实现 SAML 2.0 SP 加密断言解密 + OAuth2/OIDC Provider + JWT Claims 与 Redis 吊销。
|
||||
- 设计 PostgreSQL HA 集群方案,基于 Patroni+etcd+HAProxy+Keepalived 实现 VIP 漂移、读写分离与 pgBackRest 冗余。
|
||||
- 实现 Ansible MySQL 全生命周期自动化(11 个 Playbook),覆盖原子二进制安装、GTID 复制校验与 MHA 故障转移回调。
|
||||
|
||||
---
|
||||
|
||||
公司:国家网络安全人才与创新基地 | 武汉金银湖实验室
|
||||
部门:平台技术部
|
||||
职位:后端开发(华中科技大学-网络空间安全学院)
|
||||
时间:2025-11 ~ 2026-03
|
||||
|
||||
工作内容:
|
||||
- 参与设计面向国家关键单位的网络安全 SaaS 平台,完善租户多维度隔离、用户混合权限模型、API 流式计费等模块。
|
||||
- 完善构建组件漏洞知识图谱,基于金银湖安全大模型及供应链上游信息,统一评估组件安全风险,接入态势感知安全中心。
|
||||
- 设计高性能 API 计费网关,支持按月固定/按调用量双模式,Redis HINCRBY 实时计数 + MongoDB 聚合账单,幂等写入。
|
||||
- 实现 Redis 滑动窗口分布式限流中间件,MULTI 事务保证原子性,Header 注入 X-RateLimit,Redis 异常时降级保障可用性。
|
||||
|
||||
================================================================================
|
||||
【项目经历】
|
||||
================================================================================
|
||||
|
||||
项目名称:Gen2D 游戏素材生成工具
|
||||
角色:全栈开发(Agent)
|
||||
来源:七牛云 XEngineer 开源项目 - 三等奖
|
||||
时间:2026-05 ~ 2026-06
|
||||
链接:https://gitee.com/hezhaohui123/gen2d
|
||||
技术栈:Go(Gin), Eino Agent Graph, GORM, OSS, React, Zustand
|
||||
|
||||
项目介绍:
|
||||
AI 2D 游戏素材生成平台,用户输入文本提示词,自动生成风格一致的 Sprite、背景、UI 元素与动画帧流。
|
||||
支持用户提供世界观文本、参考图片、标签映射以及反馈信息,输出具备一致性的可用素材。
|
||||
|
||||
主要工作:
|
||||
1. 构建基于有向无环图的工作流,引入 critic 自省机制实现反馈增强,基于 ReAct 架构实现轮级思考,并支持 Agent 间通信。
|
||||
2. 在分布式限流方案的选择上,对比计数器、漏桶、窗口等多种限流机制,选用 go-redis 实现分布式的令牌桶算法限流。
|
||||
3. 为增强系统可观测性,基于 Gin 中间件以及自定义的任务协程池暴露指标,使用 Prometheus 收集,接入 Grafana 面板。
|
||||
4. 在不同部署方案(单机与多机)部署上,支持基于 RabbitMQ 的共享任务队列,支持基于内存的自定义单机任务队列。
|
||||
5. 对于用户偏好的多样性,支持基于渐进式披露的 skill 配置,用户反馈的动态注入,世界观文本 RAG 召回,实现上下文增强。
|
||||
|
||||
---
|
||||
|
||||
项目名称:ThumbUP 高并发点赞系统
|
||||
角色:后端开发(高并发)
|
||||
来源:哔哩哔哩技术团队《B站千亿级点赞系统服务架构设计》文章复现
|
||||
时间:2025-10 ~ 2025-11
|
||||
链接:http://47.121.181.112:3000/wonder/thumb-up
|
||||
技术栈:Spring Boot 3, Redis, Caffeine, HeavyKeeper, MyBatis-Plus
|
||||
|
||||
项目介绍:
|
||||
中台化的高并发点赞系统,支撑多业务场景的点赞交互与数据查询。
|
||||
应对亿级数据规模与万级QPS高并发流量,提供高可用、可扩展的基础服务。
|
||||
|
||||
主要工作:
|
||||
1. 为避免缓存穿透,构建布隆过滤器与空值短缓存双重机制;为避免缓存击穿,将热点数据加互斥锁,确保单线程回源重建。
|
||||
2. 基于 Caffeine + Redis 构建二级缓存,热点 Key 提升至本地缓存,避免冷数据污染,降低 Redis 访问压力。
|
||||
3. Lua 脚本保证点赞原子性,10 秒时间片分桶暂存增量,定时任务批量落库,补偿任务每日兜底,保障最终一致性。
|
||||
4. 对比CMS算法,采用HeavyKeeper实现Top-K探测,利用指数衰减淘汰冷Key,解决高频更新准确率问题,适配流量变化。
|
||||
5. 单机场景利用字符串常量池特性,以业务前缀+用户ID为锁对象;多机场景基于 Redis 实现分布式锁,保障多实例数据一致。
|
||||
|
||||
================================================================================
|
||||
【专业技能】
|
||||
================================================================================
|
||||
|
||||
- 熟悉 Go/Java 的常用数据结构、中间件、并发模型、垃圾回收机制。能够使用 pprof、JFR 等工具进行性能排查。
|
||||
- 熟悉分布式微服务架构,理解服务注册与发现、负载均衡、限流熔断、配置中心、幂等控制、分布式锁及分布式事务。
|
||||
- 熟悉数据库系统,理解MySQL事务隔离、B+树索引优化及 MVCC 机制,理解 Redis 混合持久化策略、集群、哨兵机制。
|
||||
- 熟悉缓存技术,理解多级缓存的设计,以及高并发场景下的缓存策略,如旁路缓存、读/写穿透、异步写回。
|
||||
- 熟悉消息队列,理解主流中间件选型、路由、持久化原理、事务、死信队列机制、推拉结合模式、集群化部署。
|
||||
- 熟悉多集群环境下的持续集成部署,理解 K8s 下的应用发布、弹性扩缩容、灰度发布、健康检查及可观测体系建设。
|
||||
- 探索 AI 前沿工程实践,理解 Context Engineer 与 Harness Engineer,理解智能体架构、权限治理、可插拔配置等。
|
||||
@@ -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> 后端开发 <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;">Vue</span>
|
||||
<span class="proj-tag">React</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="website-line">
|
||||
线上简历:<a href="http://47.121.181.112:8080/resume" target="_blank" title="在线简历" style="color: #4478DF; text-decoration: none;">http://47.121.181.112:8080/resume</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>
|
||||
<div class="exp-intro"><span class="exp-intro-label">单位简介</span>香港上市的云与 AI 平台服务商(02567.HK),国内领先的独立音视频云平台,高新技术企业、上海市“专精特新”企业,服务 180 万+ 开发者与小红书、蔚来、快手等头部客户。</div>
|
||||
<ul class="exp-items">
|
||||
<li>构建基础架构平台,完善服务注册链路,集成网络探测、数据源自动注册、监控指标采集与日志接入,实现基础服务可观测。</li>
|
||||
<li>构建多协议单点认证网关,从零实现 SAML 2.0 SP 加密断言解密 + OAuth2/OIDC Provider + JWT Claims 与 Redis 吊销。</li>
|
||||
<li>设计 PostgreSQL HA 集群方案,基于 Patroni+etcd+HAProxy+Keepalived 实现 VIP 漂移、读写分离与 pgBackRest 冗余。</li>
|
||||
<li>实现 Ansible MySQL 全生命周期自动化(11 个 Playbook),覆盖原子二进制安装、GTID 复制校验与 MHA 故障转移回调。</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>
|
||||
<div class="exp-intro"><span class="exp-intro-label">单位简介</span>中央网信办批复、部市共建的全国首个国家网络安全人才与创新基地;金银湖实验室由华中科技大学牵头,联合武汉大学、中国船舶七〇九所共建,面向国家关键单位开展安全技术攻关。</div>
|
||||
<ul class="exp-items">
|
||||
<li>参与设计面向国家关键单位的网络安全 SaaS 平台,完善租户多维度隔离、用户混合权限模型、API 流式计费等模块。</li>
|
||||
<li>完善构建组件漏洞知识图谱,基于金银湖安全大模型及供应链上游信息,统一评估组件安全风险,接入态势感知安全中心。</li>
|
||||
<li>设计高性能 API 计费网关,支持按月固定/按调用量双模式,Redis HINCRBY 实时计数 + MongoDB 聚合账单,幂等写入。</li>
|
||||
<li>实现 Redis 滑动窗口分布式限流中间件,MULTI 事务保证原子性,Header 注入 X-RateLimit,Redis 异常时降级保障可用性。</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="exp-intro"><span class="exp-intro-label">项目简介</span>AI 2D 游戏素材生成平台,用户输入文本提示词,自动生成风格一致的 Sprite、背景、UI 元素与动画帧流。<br>支持用户提供世界观文本、参考图片、标签映射以及反馈信息,输出具备一致性的可用素材。</div>
|
||||
<ol class="proj-work-items">
|
||||
<li>构建基于有向无环图的工作流,引入 critic 自省机制实现反馈增强,基于 ReAct 架构实现轮级思考,并支持 Agent 间通信。</li>
|
||||
<li>在分布式限流方案的选择上,对比计数器、漏桶、窗口等多种限流机制,选用 go-redis 实现分布式的令牌桶算法限流。</li>
|
||||
<li>为增强系统可观测性,基于 Gin 中间件以及自定义的任务协程池暴露指标,使用 Prometheus 收集,接入 Grafana 面板。</li>
|
||||
<li>在不同部署方案(单机与多机)部署上,支持基于 RabbitMQ 的共享任务队列,支持基于内存的自定义单机任务队列。</li>
|
||||
<li>对于用户偏好的多样性,支持基于渐进式披露的 skill 配置,用户反馈的动态注入,世界观文本 RAG 召回,实现上下文增强。</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">后端开发 【哔哩哔哩技术团队《B站千亿级点赞系统服务架构设计》文章复现】</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="exp-intro"><span class="exp-intro-label">项目简介</span>中台化的高并发点赞系统,支撑多业务场景的点赞交互与数据查询。应对万级QPS高并发流量,提供高可用、可扩展的基础服务。</div>
|
||||
<ol class="proj-work-items">
|
||||
<li>为避免缓存穿透,构建布隆过滤器与空值短缓存双重机制;为避免缓存击穿,将热点数据加互斥锁,确保单线程回源重建。</li>
|
||||
<li>基于 Caffeine + Redis 构建二级缓存,热点 Key 提升至本地缓存,避免冷数据污染,降低 Redis 访问压力。</li>
|
||||
<li>Lua 脚本保证点赞原子性,10 秒时间片分桶暂存增量,定时任务批量落库,补偿任务每日兜底,保障最终一致性。</li>
|
||||
<li>对比CMS算法,采用HeavyKeeper实现Top-K探测,利用指数衰减淘汰冷Key,解决高频更新准确率问题,适配流量变化。</li>
|
||||
<li>单机场景利用字符串常量池特性,以业务前缀+用户ID为锁对象;多机场景基于 Redis 实现分布式锁,保障多实例数据一致。</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<!-- 专业技能 -->
|
||||
<div class="section">
|
||||
<div class="section-title">专业技能</div>
|
||||
<ul class="skill-items">
|
||||
<li>熟悉 Go/Java 的常用数据结构、中间件、并发模型、垃圾回收机制。能够使用 pprof、JFR 等工具进行性能排查。</li>
|
||||
<li>熟悉分布式微服务架构,理解服务注册与发现、负载均衡、限流熔断、配置中心、幂等控制、分布式锁及分布式事务。</li>
|
||||
<li>熟悉数据库系统,理解MySQL事务隔离、B+树索引优化及 MVCC 机制,理解 Redis 混合持久化策略、集群、哨兵机制。</li>
|
||||
<li>熟悉缓存技术,理解多级缓存的设计,以及高并发场景下的缓存策略,如旁路缓存、读/写穿透、异步写回。</li>
|
||||
<li>熟悉消息队列,理解主流中间件选型、路由、持久化原理、事务、死信队列机制、推拉结合模式、集群化部署。</li>
|
||||
<li>熟悉多集群环境下的持续集成部署,理解 K8s 下的应用发布、弹性扩缩容、灰度发布、健康检查及可观测体系建设。</li>
|
||||
<li>探索 AI 前沿工程实践,理解 Context Engineer 与 Harness Engineer,理解智能体架构、权限治理、可插拔配置等。</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
+251
@@ -0,0 +1,251 @@
|
||||
<!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="resume.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="page">
|
||||
<!-- Header -->
|
||||
<div class="header">
|
||||
<div class="header-main">
|
||||
<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="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>
|
||||
后端开发工程师 / 全栈开发工程师
|
||||
</div>
|
||||
<div class="contact-item">
|
||||
<svg class="svg-icon" viewBox="0 0 24 24"><path d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"/></svg>
|
||||
共青团员
|
||||
</div>
|
||||
</div>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
<img class="id-photo" src="../img/photo.png" alt="证件照">
|
||||
</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>
|
||||
</div>
|
||||
|
||||
<!-- 荣誉奖项 -->
|
||||
<div class="section">
|
||||
<div class="section-title">荣誉奖项</div>
|
||||
<div class="honor-section">
|
||||
<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>
|
||||
<div class="honor-date">2024-04</div>
|
||||
</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>
|
||||
<div class="honor-date">2024-06</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 实习经历 -->
|
||||
<div class="section">
|
||||
<div class="section-title">实习经历</div>
|
||||
<div class="exp-header">
|
||||
<div class="exp-company"><img src="../img/hust.svg" class="company-logo hust" alt="华中科技大学"> 国家网络安全人才与创新基地 | 武汉金银湖实验室</div>
|
||||
<span class="exp-position">平台技术部 后端开发</span>
|
||||
<div class="exp-date">2025-11 ~ 2026-03</div>
|
||||
</div>
|
||||
<div class="exp-intro"><span class="exp-intro-label">单位简介</span>中央网信办批复、部市共建的全国首个国家网络安全人才与创新基地;金银湖实验室由华中科技大学牵头,联合武汉大学、中国船舶七〇九所共建,面向国家关键单位开展安全技术攻关。</div>
|
||||
<ul class="exp-items">
|
||||
<li>参与面向国家关键单位的网络安全 SaaS 平台核心研发,负责租户隔离、权限管控与 API 计费等关键模块的设计与实现,支撑多租户安全服务稳定落地。</li>
|
||||
<li>构建组件安全风险评估能力,整合漏洞情报与供应链信息形成统一风险视图,与态势感知安全中心联动,为安全运营与风险决策提供数据支撑。</li>
|
||||
<li>设计 API 计费网关,支持按月订阅与按调用量两种计费模式,以幂等计量与对账机制保障计量准确、账单可追溯、无重复计费,支撑业务规范化结算。</li>
|
||||
<li>面向高并发场景建设 API 流量治理与限流能力,实现超额请求平滑拦截与异常自动降级,守住服务可用性底线。</li>
|
||||
</ul>
|
||||
|
||||
<div class="exp-header" style="margin-top: 10px;">
|
||||
<div class="exp-company"><img src="../img/qiniu.svg" class="company-logo qiniu" alt="七牛云"> 七牛云 | 上海七牛信息技术有限公司</div>
|
||||
<span class="exp-position">产品研发部-基础架构部 全栈开发</span>
|
||||
<div class="exp-date">2026-07 ~ 2026-08</div>
|
||||
</div>
|
||||
<div class="exp-intro"><span class="exp-intro-label">单位简介</span>香港上市的云与 AI 平台服务商(02567.HK),国内领先的独立音视频云平台,高新技术企业、上海市“专精特新”企业,服务 180 万+ 开发者与小红书、蔚来、快手等头部客户。</div>
|
||||
<ul class="exp-items">
|
||||
<li>围绕内部基础服务治理,参与基础架构平台建设,打通服务注册、数据源自动注册、网络探测、监控告警与日志接入链路,提升基础服务可观测与运维效率。</li>
|
||||
<li>面向多系统统一登录需求,从零搭建多协议单点认证网关,支持 SAML 2.0 加密断言解密与 OAuth2、OIDC 等主流单点登录协议,会话可即时吊销,保障账号与数据安全。</li>
|
||||
<li>开发数据库自动化运维工具,覆盖 PostgreSQL 高可用集群搭建、MySQL 自动化部署与故障转移等场景,以工具化替代人工操作、提升交付效率。</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- 校园经历 -->
|
||||
<div class="section">
|
||||
<div class="section-title">校园经历</div>
|
||||
<div class="campus-line">
|
||||
<span class="campus-name"><img src="../img/linghang.svg" class="company-logo" alt="领航工作室"> 武汉科技大学领航工作室(2024)</span>
|
||||
<span class="campus-sep">|</span>
|
||||
<span class="campus-name"><img src="../img/bytedance.svg" class="company-logo" alt="字节跳动"> 字节跳动青训营(2025)</span>
|
||||
<span class="campus-sep">|</span>
|
||||
<span class="campus-name"><img src="../img/neusoft.svg" class="company-logo small" alt="东软集团"> 东软集团生产实习(2026)</span>
|
||||
</div>
|
||||
<div class="campus-featured">
|
||||
<div class="exp-header">
|
||||
<div class="exp-company"><img src="../img/kingsoft.svg" class="company-logo" alt="金山办公"> 金山办公 WPS 菁英工程师训练营</div>
|
||||
<div class="exp-date">2026-03 ~ 2026-05</div>
|
||||
</div>
|
||||
<ul class="exp-items">
|
||||
<li>AI 智能单词本:Go + Gin + GORM + MySQL + JWT + Docker Compose</li>
|
||||
<li>gRPC 文件上传微服务:Gin + gRPC + Protobuf + SQLite</li>
|
||||
<li>灵犀 AI 对话助手:JavaScript + SSE + 通义千问 API + Markdown 渲染</li>
|
||||
<li>服务健康探测器:并发 + 令牌桶限流 + 重试机制 + 分级日志 + 表格驱动测试</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 项目经历 -->
|
||||
<div class="section">
|
||||
<div class="section-title">项目经历</div>
|
||||
<div class="proj-header">
|
||||
<div class="proj-title-line">
|
||||
<span class="proj-name">ThumbUP · 高并发互动服务中台</span>
|
||||
<span class="proj-role">后端开发 【<img src="../img/bilibili.svg" class="company-logo bilibili" alt="哔哩哔哩"> 哔哩哔哩技术团队 - 架构设计】</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">Java</span>
|
||||
<span class="proj-tag">MySQL</span>
|
||||
<span class="proj-tag">Redis</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">中台化高并发点赞系统,为多业务线提供统一的点赞交互与查询服务,支撑海量数据与高并发访问场景。
|
||||
<br>以高可用、可扩展为目标,保障点赞数据准确可靠、服务持续在线。</span>
|
||||
</div>
|
||||
<div class="proj-work-title">主要工作:</div>
|
||||
<ol class="proj-work-items">
|
||||
<li>从保障数据准确与服务稳定出发,完善缓存防护机制,防止异常请求压垮存储层、热点数据引发重建压力,保障系统平稳运行。</li>
|
||||
<li>构建多级缓存体系,热点数据就近读取,降低后端存储压力,提升用户点赞与查询的响应体验。</li>
|
||||
<li>保证点赞操作不丢失、不重复,采用异步批量入库与定期核对补偿,在高并发下兼顾处理性能与计数准确。</li>
|
||||
<li>支持热点内容识别与运营洞察,动态跟踪高频对象、及时淘汰过期热点,使资源分配更贴合真实流量变化。</li>
|
||||
<li>单机与集群部署下均保障并发写入数据一致,多实例并行处理结果正确,支撑业务横向扩展与稳定运行。</li>
|
||||
</ol>
|
||||
|
||||
<div class="proj-header" style="margin-top: 12px;">
|
||||
<div class="proj-title-line">
|
||||
<span class="proj-name">Gen2D · AI 美术资产生成智能体</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</span>
|
||||
<span class="proj-tag">React</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 素材生成平台,输入提示词即可产出风格统一的角色、场景、界面与动画素材。
|
||||
<br>支持补充世界观与参考图等项目设定,产出更贴合风格的可用素材,帮助团队缩短出图周期、加快内容迭代。
|
||||
</span>
|
||||
</div>
|
||||
<div class="proj-work-title">主要工作:</div>
|
||||
<ol class="proj-work-items">
|
||||
<li>围绕生成质量与稳定性,搭建多阶段智能生成流程,支持过程自检、反馈修正,保障素材风格一致。</li>
|
||||
<li>面向多用户并发使用,设计接口流量保护与资源配额机制,避免异常请求挤占算力,保障平台稳定。</li>
|
||||
<li>完善运行监控与任务状态跟踪,异常可及时发现定位,支撑日常运维与持续迭代,提升交付可靠性。</li>
|
||||
<li>兼顾试点部署与规模化推广,任务调度支持单机与多机弹性伸缩,高峰期任务不积压,生成服务平滑扩展。</li>
|
||||
<li>面向不同项目风格差异,支持按需配置生成偏好并引入项目设定参考,产出更贴合用户需求,提升生成质量。</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<!-- 证书 -->
|
||||
<div class="section">
|
||||
<div class="section-title">证书</div>
|
||||
<ul class="exp-items">
|
||||
<li>大学英语四级(CET-4)</li>
|
||||
<li>华为 HarmonyOS 应用开发者基础认证</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- 学生工作 -->
|
||||
<div class="section">
|
||||
<div class="section-title">学生工作</div>
|
||||
<ul class="exp-items">
|
||||
<li>2023-09 ~ 2025-06 班级宣传委员:负责活动设计与新媒体推送,展现班级风采、增强班级凝聚力。</li>
|
||||
<li>2024-09 ~ 2025-06 心理健康中心部员:协助心理健康宣传与主题活动组织,服务同学心理成长需求。</li>
|
||||
<li>2024-08 ~ 2024-09 迎新志愿者:协助新生报到、行李搬运与校园引导,帮助新同学快速适应校园生活。</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- 社会实践 -->
|
||||
<div class="section">
|
||||
<div class="section-title">社会实践</div>
|
||||
<div class="exp-header">
|
||||
<div class="exp-company">“光影科技 共创未来”暑期社会实践</div>
|
||||
<span class="exp-position">共青团湖北省委员会 优秀示范项目</span>
|
||||
<div class="exp-date">2024-07 ~ 2024-08</div>
|
||||
</div>
|
||||
<ul class="exp-items">
|
||||
<li>不畏酷暑、全程投入,暑期连续辗转省内 10 余个区县“暑假学堂”点位,长途往返随队搬运教具、布置场地、调试影音设备,保障每场活动如期开展。</li>
|
||||
<li>以“互动科普讲座+观影”形式为少年儿童普及电影制作技术与发展,结合科幻电影与现实科技成果对照讲解前沿科技、手把手演示 Scratch 少儿编程入门。</li>
|
||||
<li>课前精心备课、反复打磨讲稿与演示案例,课后逐场复盘、耐心答疑并收集反馈;主动承担物资清点、签到引导等事务性工作,不怕吃苦、踏实肯干,以实际行动服务基层少年儿童、丰富假期生活、提升科学素养。</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- 专业技能 -->
|
||||
<div class="section">
|
||||
<div class="section-title">专业技能</div>
|
||||
<ul class="skill-items">
|
||||
<li><b>Java</b>: 常用数据结构、中间件、并发模型、垃圾回收机制;能够使用 JFR 等工具进行性能排查</li>
|
||||
<li><b>SpringBoot</b>: IoC/AOP、自动装配原理、Starter 封装、事务管理、拦截器与全局异常处理</li>
|
||||
<li><b>分布式微服务</b>: 服务注册与发现、负载均衡、限流熔断、配置中心、幂等控制、分布式锁及分布式事务</li>
|
||||
<li><b>数据库</b>: MySQL 事务隔离、B+树索引优化及 MVCC 机制;Redis 混合持久化策略、集群、哨兵机制</li>
|
||||
<li><b>消息队列</b>: 主流中间件选型、路由、持久化原理、事务、死信队列机制、推拉结合模式、集群化部署</li>
|
||||
<li><b>K8s</b>: 集群环境下的应用发布、弹性扩缩容、灰度发布、健康检查及可观测体系建设</li>
|
||||
<li><b>AI 工程化</b>: 智能体(Agent)架构设计、上下文工程、权限治理与可插拔配置</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- 自我评价 -->
|
||||
<div class="section">
|
||||
<div class="section-title">自我评价</div>
|
||||
<ul class="skill-items">
|
||||
<li><b>热爱开发</b>:在七牛云基础架构、国家网络安全 SaaS 平台实习,参与交付认证网关、数据库高可用集群、自动化运维等模块,工程与交付习惯规范</li>
|
||||
<li><b>持续学习</b>:积极参加算法竞赛与技术训练营,持续探索 AI 工程化方向并有项目实践,保持对技术的学习热忱</li>
|
||||
<li><b>善于沟通</b>:担任班级宣传委员,积极参与志愿服务、学生工作,做事主动、责任心强、吃苦耐劳</li>
|
||||
<li><b>兴趣爱好</b>:喜爱羽毛球、乒乓球等球类运动,配合意识好;长期坚持长跑,也喜爱爬山、骑行、徒步</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
+455
@@ -0,0 +1,455 @@
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: "Microsoft YaHei", Arial, sans-serif;
|
||||
background: #ffffff;
|
||||
color: #222222;
|
||||
line-height: 1.4;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.page {
|
||||
width: 794px;
|
||||
min-height: 1123px;
|
||||
margin: 0 auto;
|
||||
padding: 12px 22px;
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
/* Header */
|
||||
.header {
|
||||
margin-bottom: 8px;
|
||||
position: relative;
|
||||
/* 为右侧证件照预留宽度 */
|
||||
padding-right: 102px;
|
||||
}
|
||||
|
||||
.header-main {
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.id-photo {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
width: 78px;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
object-position: center top;
|
||||
border: 1px solid #e2e2e2;
|
||||
}
|
||||
|
||||
.name {
|
||||
font-size: 30px;
|
||||
font-weight: 800;
|
||||
color: #222222;
|
||||
margin-bottom: 3px;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
|
||||
.contact-info {
|
||||
font-size: 14px;
|
||||
color: #222;
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
.contact-line {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 18px;
|
||||
margin-bottom: 1px;
|
||||
}
|
||||
|
||||
.contact-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.position-line {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-top: 1px;
|
||||
}
|
||||
|
||||
.website-line {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-top: 1px;
|
||||
}
|
||||
|
||||
/* Section */
|
||||
.section {
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
color: #4478DF;
|
||||
padding: 3px 10px;
|
||||
border-left: 3px solid #4478DF;
|
||||
background-color: #EEF3FF;
|
||||
margin-bottom: 4px;
|
||||
line-height: 1.3;
|
||||
}
|
||||
|
||||
/* Education */
|
||||
.edu-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
.edu-school {
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
color: #222;
|
||||
}
|
||||
|
||||
.edu-badge {
|
||||
display: inline-block;
|
||||
font-size: 12px;
|
||||
color: #4478DF;
|
||||
border: 1px solid #4478DF;
|
||||
border-radius: 4px;
|
||||
padding: 1px 5px;
|
||||
margin-left: 6px;
|
||||
vertical-align: middle;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
.edu-major {
|
||||
font-size: 15px;
|
||||
color: #888;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.edu-degree {
|
||||
font-size: 15px;
|
||||
color: #888;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.edu-date {
|
||||
font-size: 15px;
|
||||
color: #888;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/* Campus */
|
||||
.campus-line {
|
||||
margin-left: 12px;
|
||||
font-size: 15px;
|
||||
color: #252525;
|
||||
line-height: 1.3;
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.campus-name {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.campus-sep {
|
||||
color: #888;
|
||||
margin: 0 8px;
|
||||
}
|
||||
|
||||
.campus-featured {
|
||||
margin-left: 12px;
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
.campus-featured .exp-date {
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
/* 金山条目要点:左侧虚线连贯分割 */
|
||||
.campus-featured .exp-items {
|
||||
margin-left: 6px;
|
||||
padding-left: 18px;
|
||||
border-left: 1px dashed #b0b0b0;
|
||||
line-height: 1.35;
|
||||
}
|
||||
|
||||
/* Honors */
|
||||
.honor-item {
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
flex-wrap: wrap;
|
||||
margin-bottom: 2px;
|
||||
font-size: 15px;
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
.honor-content {
|
||||
color: #222;
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.honor-name {
|
||||
color: #222;
|
||||
}
|
||||
|
||||
.honor-badge {
|
||||
display: inline-block;
|
||||
min-width: 52px;
|
||||
text-align: right;
|
||||
margin-left: 4px;
|
||||
font-size: 14px;
|
||||
color: #888;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.honor-date {
|
||||
font-size: 15px;
|
||||
color: #888;
|
||||
white-space: nowrap;
|
||||
margin-left: 4px;
|
||||
min-width: 56px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
/* Experience */
|
||||
.exp-header {
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
margin-bottom: 1px;
|
||||
}
|
||||
|
||||
.exp-company {
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
color: #222;
|
||||
}
|
||||
|
||||
.exp-date {
|
||||
font-size: 15px;
|
||||
color: #888;
|
||||
white-space: nowrap;
|
||||
margin-left: 12px;
|
||||
}
|
||||
|
||||
.exp-position {
|
||||
font-size: 15px;
|
||||
color: #888;
|
||||
flex: 1;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.exp-items {
|
||||
margin-left: 12px;
|
||||
font-size: 15px;
|
||||
color: #252525;
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
.exp-items li {
|
||||
list-style-type: disc;
|
||||
margin-left: 6px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
/* 单位简介 */
|
||||
.exp-intro {
|
||||
margin: 3px 0 4px 12px;
|
||||
padding: 3px 8px;
|
||||
font-size: 13px;
|
||||
line-height: 1.5;
|
||||
color: #656464;
|
||||
background: #F5F7FB;
|
||||
border-left: 2px solid #B9C9EC;
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
.exp-intro-label {
|
||||
display: inline-block;
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
color: #4478DF;
|
||||
margin-right: 6px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
/* Project */
|
||||
.proj-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
margin-bottom: 1px;
|
||||
}
|
||||
|
||||
.proj-title-line {
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.proj-name {
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
color: #222;
|
||||
}
|
||||
|
||||
.proj-role {
|
||||
font-size: 14px;
|
||||
color: #888;
|
||||
}
|
||||
|
||||
.proj-date {
|
||||
font-size: 15px;
|
||||
color: #888;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.proj-link-line {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
font-size: 14px;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
.proj-tags {
|
||||
display: flex;
|
||||
gap: 4px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.proj-tag {
|
||||
display: inline-block;
|
||||
font-size: 12px;
|
||||
color: #4478DF;
|
||||
border: 1px solid #4478DF;
|
||||
border-radius: 3px;
|
||||
padding: 0px 4px;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
.proj-link {
|
||||
color: #4478DF;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.proj-intro {
|
||||
font-size: 15px;
|
||||
color: #252525;
|
||||
line-height: 1.45;
|
||||
margin-bottom: 3px;
|
||||
border: 1px dashed #808080;
|
||||
border-radius: 4px;
|
||||
padding: 4px 8px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.proj-desc {
|
||||
color: #656464;
|
||||
display: block;
|
||||
text-indent: 24px;
|
||||
}
|
||||
|
||||
.proj-work-title {
|
||||
font-size: 15px;
|
||||
font-weight: 700;
|
||||
color: #222;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
.proj-work-items {
|
||||
margin-left: 12px;
|
||||
font-size: 15px;
|
||||
color: #252525;
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
.proj-work-items li {
|
||||
list-style-type: decimal;
|
||||
margin-left: 12px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
/* Skills */
|
||||
.skill-items {
|
||||
margin-left: 12px;
|
||||
font-size: 15px;
|
||||
color: #252525;
|
||||
line-height: 1.45;
|
||||
}
|
||||
|
||||
.skill-items li {
|
||||
list-style-type: disc;
|
||||
margin-left: 6px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
/* SVG Icons */
|
||||
.svg-icon {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
fill: #4478DF;
|
||||
vertical-align: middle;
|
||||
margin-right: 5px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
/* Company Logo */
|
||||
.company-logo {
|
||||
height: 16px;
|
||||
vertical-align: middle;
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
.company-logo.small {
|
||||
height: 10px;
|
||||
}
|
||||
|
||||
.company-logo.icpc {
|
||||
height: 22px;
|
||||
}
|
||||
|
||||
.company-logo.hust {
|
||||
height: 22px;
|
||||
}
|
||||
|
||||
.company-logo.qiniu {
|
||||
height: 14px;
|
||||
}
|
||||
|
||||
.company-logo.bilibili {
|
||||
height: 13px;
|
||||
}
|
||||
|
||||
/* Print styles - force background colors to display */
|
||||
@media print {
|
||||
* {
|
||||
-webkit-print-color-adjust: exact !important;
|
||||
print-color-adjust: exact !important;
|
||||
color-adjust: exact !important;
|
||||
}
|
||||
|
||||
/* 两页双面排版:标题不落单在页尾,条目不跨页截断 */
|
||||
.section-title,
|
||||
.edu-header,
|
||||
.exp-header,
|
||||
.proj-header,
|
||||
.proj-work-title {
|
||||
break-after: avoid;
|
||||
}
|
||||
|
||||
.honor-item,
|
||||
.campus-line,
|
||||
.proj-intro,
|
||||
.exp-intro,
|
||||
.exp-items li,
|
||||
.proj-work-items li,
|
||||
.skill-items li {
|
||||
break-inside: avoid;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user