Compare commits
77 Commits
68dbe21eb1
..
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 | |||
| 5a1ad67529 | |||
| c9a2179b52 | |||
| 85dc33022c | |||
| 96ea98e462 | |||
| 58ea6a72d5 | |||
| 8b8f51ae3a | |||
| 24bbe36b1d | |||
| a76aea306e | |||
| 1da60c76ae |
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
@@ -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!")
|
||||
@@ -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 |
@@ -0,0 +1 @@
|
||||
<svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>ByteDance</title><path d="M14.944 18.587l-1.704-.445V10.01l1.824-.462c1-.254 1.84-.461 1.88-.453.032 0 .056 2.235.056 4.972v4.973l-.176-.008c-.104 0-.952-.207-1.88-.446z" fill="#00C8D2" fill-rule="nonzero"></path><path d="M7 16.542c0-2.736.024-4.98.064-4.98.032-.008.872.2 1.88.454l1.816.461-.016 4.05-.024 4.049-1.632.422c-.896.23-1.736.445-1.856.469L7 21.523v-4.98z" fill="#3C8CFF" fill-rule="nonzero"></path><path d="M19.24 12.477c0-9.03.008-9.515.144-9.475.072.024.784.207 1.576.406.792.207 1.576.405 1.744.445l.296.08-.016 8.56-.024 8.568-1.624.414c-.888.23-1.728.437-1.856.47l-.24.055v-9.523z" fill="#78E6DC" fill-rule="nonzero"></path><path d="M1 12.509c0-4.678.024-8.505.064-8.505.032 0 .872.207 1.872.454l1.824.461v7.582c0 4.16-.016 7.574-.032 7.574-.024 0-.872.215-1.88.47L1 21.013v-8.505z" fill="#325AB4"></path></svg>
|
||||
|
After Width: | Height: | Size: 953 B |
|
After Width: | Height: | Size: 305 KiB |
@@ -0,0 +1,25 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="420" height="246" viewBox="0 0 420 246" fill="none">
|
||||
<path d="M460.362 112.212H476.761V207.737H460.362V112.212ZM468.427 95.4553C466.455 95.4553 464.604 95.2163 462.871 94.7384C461.198 94.2605 459.765 93.5734 458.57 92.6773C457.375 91.7812 456.419 90.7358 455.702 89.541C455.045 88.3462 454.717 87.0319 454.717 85.5982C454.717 84.1047 455.075 82.7008 455.792 81.3865C456.509 80.0722 457.465 78.9371 458.659 77.9813C459.914 77.0255 461.378 76.2787 463.05 75.7411C464.723 75.2034 466.515 74.9346 468.427 74.9346C470.339 74.9346 472.101 75.2034 473.714 75.7411C475.387 76.2787 476.82 77.0255 478.015 77.9813C479.27 78.9371 480.255 80.0722 480.972 81.3865C481.689 82.7008 482.048 84.1047 482.048 85.5982C482.048 87.0319 481.689 88.3462 480.972 89.541C480.315 90.7358 479.389 91.7812 478.194 92.6773C477 93.5734 475.566 94.2605 473.893 94.7384C472.22 95.2163 470.398 95.4553 468.427 95.4553ZM460.362 112.212H476.761V207.737H460.362V112.212Z" fill="#4C83C3"/>
|
||||
<path d="M576.855 144.024H561.173C560.217 138.11 558.037 133.211 554.632 129.328C551.227 125.385 545.76 123.414 538.233 123.414C527.958 123.414 520.61 128.432 516.189 138.468C513.322 144.98 511.888 153.015 511.888 162.573C511.888 172.191 513.919 180.286 517.981 186.857C522.044 193.429 528.436 196.715 537.158 196.715C543.849 196.715 549.136 194.683 553.019 190.621C556.962 186.499 559.68 180.883 561.173 173.774H576.855C575.063 186.499 570.582 195.818 563.413 201.733C556.245 207.587 547.075 210.514 535.903 210.514C523.358 210.514 513.351 205.944 505.884 196.804C498.416 187.604 494.683 176.134 494.683 162.394C494.683 145.547 498.775 132.434 506.959 123.055C515.144 113.676 525.568 108.986 538.233 108.986C549.046 108.986 557.828 111.615 564.578 116.872C571.389 122.129 575.481 131.18 576.855 144.024Z" fill="#4C83C3"/>
|
||||
<path d="M659.744 159.168C659.744 151.521 658.639 144.95 656.429 139.454C652.247 128.88 644.6 123.593 633.488 123.593C622.317 123.593 614.67 129.178 610.548 140.35C608.338 146.324 607.233 153.911 607.233 163.111C607.233 170.519 608.338 176.821 610.548 182.018C614.73 191.935 622.377 196.894 633.488 196.894C641.016 196.894 647.259 193.757 652.217 187.485C657.235 181.152 659.744 171.713 659.744 159.168ZM591.73 112.212H607.412V124.937C610.638 120.576 614.163 117.201 617.986 114.811C623.422 111.227 629.814 109.434 637.162 109.434C648.035 109.434 657.265 113.616 664.852 121.98C672.439 130.284 676.232 142.172 676.232 157.645C676.232 178.554 670.766 193.489 659.834 202.45C652.904 208.125 644.839 210.962 635.639 210.962C628.411 210.962 622.347 209.379 617.448 206.213C614.581 204.421 611.385 201.344 607.86 196.983V246H591.73V112.212Z" fill="#4C83C3"/>
|
||||
<path d="M770.771 144.024H755.089C754.133 138.11 751.953 133.211 748.548 129.328C745.143 125.385 739.676 123.414 732.149 123.414C721.874 123.414 714.526 128.432 710.105 138.468C707.237 144.98 705.804 153.015 705.804 162.573C705.804 172.191 707.835 180.286 711.897 186.857C715.96 193.429 722.352 196.715 731.074 196.715C737.765 196.715 743.052 194.683 746.935 190.621C750.878 186.499 753.596 180.883 755.089 173.774H770.771C768.979 186.499 764.498 195.818 757.329 201.733C750.161 207.587 740.991 210.514 729.819 210.514C717.274 210.514 707.267 205.944 699.8 196.804C692.332 187.604 688.599 176.134 688.599 162.394C688.599 145.547 692.691 132.434 700.875 123.055C709.06 113.676 719.484 108.986 732.149 108.986C742.962 108.986 751.744 111.615 758.494 116.872C765.305 122.129 769.397 131.18 770.771 144.024Z" fill="#4C83C3"/>
|
||||
<path d="M23.519 234.295C22.9913 234.295 22.4961 234.369 22.0459 234.515C21.6276 234.65 21.269 234.834 20.9836 235.062C20.7192 235.269 20.5199 235.504 20.3704 235.782C20.248 236.007 20.1914 236.232 20.1914 236.489C20.1914 236.706 20.2351 236.884 20.3298 237.05C20.4645 237.287 20.649 237.493 20.8963 237.68C21.1626 237.882 21.5071 238.042 21.9223 238.16C22.8812 238.431 24.1532 238.433 25.0887 238.163C25.4965 238.045 25.8385 237.883 26.1061 237.68C26.3539 237.493 26.5397 237.287 26.6725 237.052C26.7679 236.885 26.8128 236.705 26.8128 236.489C26.8128 236.233 26.7556 236.007 26.6338 235.782C26.4843 235.505 26.285 235.271 26.0243 235.065C25.7321 234.833 25.3766 234.648 24.9614 234.51C24.5296 234.368 24.0431 234.295 23.519 234.295ZM23.519 242.365C22.5724 242.365 21.6689 242.244 20.833 242.008C19.9343 241.754 19.1427 241.369 18.4803 240.865C17.8037 240.352 17.2556 239.734 16.854 239.026C16.4154 238.257 16.1928 237.402 16.1928 236.489C16.1928 235.569 16.4142 234.692 16.8509 233.884C17.2599 233.125 17.8172 232.465 18.5067 231.922C19.1599 231.404 19.9374 230.995 20.812 230.711C22.517 230.159 24.5376 230.162 26.2162 230.714C27.0797 230.999 27.848 231.407 28.5036 231.926C29.1889 232.468 29.7461 233.128 30.1539 233.885C30.5906 234.695 30.8114 235.571 30.8114 236.489C30.8114 237.399 30.5888 238.251 30.1508 239.025C29.7498 239.731 29.203 240.35 28.5239 240.865C27.8615 241.368 27.0791 241.751 26.1971 242.005C25.3704 242.244 24.4687 242.365 23.519 242.365Z" fill="#4C83C3"/>
|
||||
<path d="M45.6334 229.213C44.9581 229.213 44.3227 229.308 43.7433 229.495C43.1934 229.674 42.721 229.918 42.3415 230.22C41.9805 230.503 41.7074 230.826 41.5019 231.206C41.326 231.534 41.2399 231.876 41.2399 232.246C41.2399 232.578 41.3094 232.857 41.4601 233.121C41.6471 233.448 41.9042 233.736 42.2462 233.995C42.6023 234.265 43.0606 234.481 43.6074 234.635C44.8332 234.984 46.4374 234.985 47.6263 234.64L47.63 234.639C48.1651 234.484 48.6197 234.268 48.9789 233.995C49.3209 233.734 49.5786 233.448 49.7649 233.121C49.9144 232.857 49.9851 232.578 49.9851 232.246C49.9851 231.874 49.899 231.533 49.7219 231.205C49.5183 230.826 49.2452 230.505 48.8866 230.222C48.501 229.917 48.0323 229.672 47.4891 229.491C46.93 229.306 46.3051 229.213 45.6334 229.213ZM45.6334 238.897C44.5324 238.897 43.4837 238.758 42.5168 238.482C41.4884 238.192 40.5824 237.754 39.8271 237.179C39.057 236.594 38.4364 235.892 37.9824 235.094C37.491 234.228 37.2413 233.27 37.2413 232.246C37.2413 231.214 37.4897 230.227 37.9806 229.313C38.4456 228.449 39.0791 227.699 39.8633 227.082C40.6119 226.488 41.5025 226.021 42.5076 225.693C44.4728 225.056 46.8162 225.058 48.7458 225.696C49.7367 226.024 50.6168 226.491 51.366 227.084C52.149 227.702 52.7813 228.452 53.2439 229.311C53.7341 230.224 53.9832 231.211 53.9832 232.246C53.9832 233.268 53.7341 234.225 53.2432 235.093C52.7893 235.891 52.1693 236.593 51.398 237.179C50.6439 237.751 49.749 238.188 48.7384 238.48C47.7831 238.757 46.7387 238.897 45.6334 238.897Z" fill="#4C83C3"/>
|
||||
<path d="M70.2376 223.969C69.3864 223.969 68.5818 224.09 67.848 224.328C67.1407 224.558 66.5318 224.874 66.0378 225.264C65.5636 225.639 65.2013 226.067 64.9289 226.572C64.6847 227.026 64.5666 227.496 64.5666 228.01C64.5666 228.473 64.6693 228.881 64.8815 229.254C65.1337 229.697 65.4763 230.081 65.9321 230.427C66.3995 230.782 66.9943 231.063 67.6986 231.262C69.2344 231.699 71.2482 231.699 72.7404 231.266L72.7429 231.265C73.433 231.066 74.0235 230.784 74.4971 230.424C74.9504 230.079 75.2942 229.696 75.5433 229.256C75.7561 228.881 75.8601 228.473 75.8601 228.01C75.8601 227.496 75.7414 227.026 75.4972 226.572C75.2259 226.068 74.8624 225.639 74.387 225.263C73.8924 224.872 73.2878 224.555 72.5909 224.324C71.8793 224.088 71.0858 223.969 70.2376 223.969ZM70.2376 235.59C68.9496 235.59 67.7287 235.428 66.6068 235.109C65.4228 234.774 64.3808 234.269 63.5142 233.612C62.6278 232.939 61.9186 232.137 61.4038 231.228C60.8502 230.254 60.5679 229.169 60.5679 228.01C60.5679 226.835 60.8502 225.713 61.4075 224.678C61.9365 223.695 62.661 222.836 63.5591 222.126C64.4239 221.443 65.4504 220.905 66.6105 220.526C68.8863 219.786 71.6105 219.789 73.8494 220.528C74.9916 220.908 76.0065 221.446 76.8676 222.126C77.7675 222.839 78.4908 223.697 79.0185 224.678C79.5758 225.713 79.8587 226.835 79.8587 228.01C79.8587 229.165 79.5777 230.247 79.0229 231.228C78.508 232.136 77.7988 232.936 76.915 233.609C76.0446 234.268 75.015 234.772 73.8506 235.107C72.7441 235.428 71.5281 235.59 70.2376 235.59Z" fill="#4C83C3"/>
|
||||
<path d="M83.8544 158.996C83.2523 159.595 82.337 159.749 81.5731 159.378C80.8085 159.009 80.3614 158.195 80.4579 157.352C80.7224 155.04 80.1239 153.464 78.6293 152.532C75.8657 150.816 70.2322 151.483 66.3264 153.993C64.9234 154.896 62.6175 156.774 62.9355 159.226C63.0769 160.321 62.3044 161.324 61.2095 161.466C60.1147 161.604 59.1115 160.837 58.9694 159.741C57.9871 152.148 53.9042 149.764 50.6516 149.101C45.282 148.004 38.8753 150.894 36.0674 155.677C33.684 159.734 34.4516 164.391 38.2282 168.785C38.6864 169.319 38.831 170.055 38.6083 170.722C38.3863 171.39 37.829 171.891 37.142 172.042C23.0166 175.151 18.5862 181.799 19.1502 186.984C19.8163 193.112 27.7171 199.627 41.0465 199.627C41.5804 199.627 42.0921 199.84 42.468 200.22C42.8432 200.599 43.0511 201.113 43.0455 201.647C43.016 204.316 43.8943 206.409 45.1061 208.029H105.008C113.698 208.029 120.808 200.92 120.808 192.23V156.673C111.304 148.903 95.7803 147.127 83.8544 158.996Z" fill="#4C83C3"/>
|
||||
<path d="M15.1747 187.415C14.4698 180.935 18.9605 172.882 33.3172 168.873C30.1064 163.832 29.8229 158.413 32.6191 153.651C36.3003 147.385 44.4022 143.743 51.4504 145.183C55.8815 146.086 59.265 148.879 61.2296 153.108C62.0206 152.21 63.0029 151.375 64.1636 150.629C68.6887 147.72 76.0353 146.208 80.7419 149.137C82.3823 150.16 83.5122 151.63 84.083 153.437C96.1712 143.777 110.693 145.021 120.808 151.716V128.087C120.808 119.397 113.698 112.287 105.008 112.287H15.7996C7.10974 112.287 0 119.397 0 128.087V192.229C0 200.919 7.10974 208.029 15.7996 208.029H40.4515C39.7909 206.642 39.3339 205.163 39.15 203.586C24.4883 202.962 16.0155 195.144 15.1747 187.415Z" fill="#4C83C3"/>
|
||||
<path d="M128.159 182.543C135.728 172.981 132.299 162.079 125.215 155.239C123.873 153.943 122.393 152.764 120.808 151.716L120.808 156.673C121.373 157.134 121.918 157.614 122.438 158.116C128.043 163.529 131.804 172.848 123.959 181.301C123.59 181.698 123.398 182.229 123.428 182.77C123.457 183.311 123.706 183.818 124.115 184.173C130.038 189.299 130.377 199.198 124.903 207.199C117.704 217.721 100.744 224.06 74.7262 210.293C74.4321 210.139 74.1111 210.062 73.7912 210.062C73.3631 210.062 72.9363 210.2 72.5814 210.469C66.7621 214.891 57.0659 215.558 50.0287 212.02C48.5778 211.29 46.5902 210.015 45.1061 208.029L40.4515 208.029C41.9333 211.142 44.5545 213.742 48.2327 215.591C56.1341 219.566 66.9312 219.007 73.9475 214.397C84.7569 219.945 94.1523 222.208 102.076 222.208C114.486 222.207 123.28 216.653 128.203 209.457C134.376 200.435 134.246 189.249 128.159 182.543Z" fill="#4C83C3"/>
|
||||
<path d="M195.964 141.837C196.61 142.114 197.091 142.727 197.178 143.426L199.324 160.931H206.887V140.339C206.887 139.723 207.174 139.142 207.663 138.768L211.209 136.051L200.685 132.926C199.891 132.69 199.327 131.983 199.274 131.157C199.221 130.329 199.688 129.555 200.447 129.22L210.46 124.779L201.68 122.208C201.025 122.015 200.514 121.5 200.33 120.84C200.147 120.183 200.314 119.476 200.776 118.972L206.887 112.288H175.698C176.197 125.193 184.026 136.7 195.964 141.837Z" fill="#FDBA12"/>
|
||||
<path d="M216.758 122.499C217.554 122.733 218.121 123.439 218.176 124.268C218.232 125.096 217.763 125.872 217.003 126.208L206.962 130.661L216.06 133.363C216.773 133.575 217.309 134.17 217.444 134.901C217.578 135.633 217.292 136.379 216.701 136.832L210.846 141.316V160.931H219.119L221.245 143.479C221.33 142.779 221.784 142.134 222.433 141.858C234.4 136.728 242.246 125.214 242.746 112.287H212.252L205.839 119.301L216.758 122.499Z" fill="#FDBA12"/>
|
||||
<path d="M221.128 173.363H197.315C196.222 173.363 195.336 172.477 195.336 171.384C195.336 170.29 196.222 169.405 197.315 169.405H221.128C222.222 169.405 223.108 170.29 223.108 171.384C223.108 172.477 222.222 173.363 221.128 173.363ZM221.128 181.017H197.315C196.222 181.017 195.336 180.131 195.336 179.037C195.336 177.944 196.222 177.058 197.315 177.058H221.128C222.222 177.058 223.108 177.944 223.108 179.037C223.108 180.131 222.222 181.017 221.128 181.017ZM221.128 188.67H197.315C196.222 188.67 195.336 187.785 195.336 186.691C195.336 185.598 196.222 184.712 197.315 184.712H221.128C222.222 184.712 223.108 185.598 223.108 186.691C223.108 187.785 222.222 188.67 221.128 188.67ZM213.476 196.324H204.968C203.875 196.324 202.988 195.438 202.988 194.344C202.988 193.251 203.875 192.365 204.968 192.365H213.476C214.57 192.365 215.456 193.251 215.456 194.344C215.456 195.438 214.57 196.324 213.476 196.324ZM253.975 112.287H246.706C246.218 126.418 237.877 139.059 225.045 145.025L222.837 163.151C222.715 164.144 221.873 164.891 220.871 164.891H197.572C196.572 164.891 195.729 164.145 195.607 163.152L193.384 145.015C180.539 139.012 172.226 126.386 171.739 112.287H164.767C156.077 112.287 148.967 119.397 148.967 128.087V192.23C148.967 200.92 156.077 208.029 164.767 208.029H253.975C262.665 208.029 269.775 200.92 269.775 192.23V128.087C269.775 119.397 262.665 112.287 253.975 112.287Z" fill="#FDBA12"/>
|
||||
<path d="M173.027 97.5049C172.765 97.5049 172.499 97.4538 172.241 97.3474L150.813 88.4712C150.021 88.1433 149.542 87.3776 149.543 86.57C149.543 86.3085 149.593 86.0416 149.7 85.7845C150.135 84.7339 151.337 84.2382 152.387 84.6712L173.815 93.5475C174.607 93.8753 175.086 94.6411 175.085 95.4487C175.085 95.7101 175.034 95.977 174.928 96.2341C174.6 97.0264 173.834 97.5049 173.027 97.5049Z" fill="#FDBA12"/>
|
||||
<path d="M181.52 84.7963C180.994 84.7963 180.467 84.5958 180.066 84.1941L163.913 68.042C163.511 67.6404 163.31 67.1151 163.31 66.588C163.31 66.0615 163.511 65.5362 163.913 65.1339C164.715 64.3306 166.019 64.3306 166.821 65.1339L182.974 81.286C183.375 81.6883 183.576 82.2136 183.576 82.7401C183.576 83.2672 183.375 83.7925 182.974 84.1941C182.573 84.5958 182.045 84.7963 181.52 84.7963Z" fill="#FDBA12"/>
|
||||
<path d="M194.227 76.308C193.42 76.308 192.655 75.8294 192.327 75.0372L183.652 54.093C183.545 53.8359 183.495 53.569 183.495 53.3076C183.494 52.4994 183.973 51.7342 184.765 51.4064C185.812 50.9703 187.016 51.4685 187.452 52.5196L196.127 73.4638C196.233 73.7209 196.284 73.9879 196.284 74.2493C196.284 75.0569 195.806 75.8221 195.013 76.1505C194.756 76.2569 194.489 76.308 194.227 76.308Z" fill="#FDBA12"/>
|
||||
<path d="M209.216 73.3245C208.08 73.3245 207.16 72.4044 207.16 71.2683V48.6216C207.16 47.4855 208.08 46.5654 209.216 46.5654C210.352 46.5654 211.273 47.4855 211.273 48.6216V71.2683C211.273 72.4044 210.352 73.3245 209.216 73.3245Z" fill="#FDBA12"/>
|
||||
<path d="M224.204 76.308C223.943 76.308 223.676 76.2569 223.419 76.1505C222.626 75.8221 222.148 75.0569 222.148 74.2493C222.148 73.9879 222.199 73.7209 222.305 73.4638L231.034 52.3905C231.469 51.3424 232.671 50.8411 233.721 51.2772C234.513 51.605 234.991 52.3702 234.991 53.1784C234.991 53.4398 234.94 53.7068 234.834 53.9632L226.105 75.0372C225.777 75.8294 225.012 76.308 224.204 76.308Z" fill="#FDBA12"/>
|
||||
<path d="M236.913 84.7963C236.386 84.7963 235.86 84.5958 235.459 84.1941C235.057 83.7925 234.856 83.2672 234.856 82.7401C234.856 82.2136 235.057 81.6883 235.459 81.286L251.796 64.9482C252.6 64.1443 253.901 64.1443 254.705 64.9482C255.107 65.3498 255.307 65.8751 255.307 66.4022C255.307 66.9287 255.107 67.4547 254.705 67.8563L238.367 84.1941C237.965 84.5958 237.439 84.7963 236.913 84.7963Z" fill="#FDBA12"/>
|
||||
<path d="M245.405 97.5065C244.597 97.5065 243.832 97.0279 243.504 96.2357C243.398 95.9786 243.347 95.7117 243.347 95.4502C243.347 94.6426 243.825 93.8769 244.618 93.549L266.367 84.5393C267.421 84.1038 268.619 84.6033 269.054 85.6526C269.16 85.9097 269.211 86.1754 269.211 86.4381C269.211 87.2457 268.732 88.0114 267.94 88.3393L246.191 97.349C245.934 97.4554 245.667 97.5065 245.405 97.5065Z" fill="#FDBA12"/>
|
||||
<path d="M402.94 112.299H366.138C368.208 114.175 370.48 115.865 372.705 117.273C372.711 117.275 372.837 117.356 372.843 117.361C388.72 127.624 396.153 139.036 394.936 151.282C393.51 165.643 380.359 180.564 355.846 195.631C347.596 200.703 339.384 204.934 332.888 208.041H402.94C411.63 208.041 418.739 200.931 418.739 192.242V128.099C418.739 119.409 411.63 112.299 402.94 112.299Z" fill="#B22C1B"/>
|
||||
<path d="M390.958 150.884C392.013 140.252 385.188 130.102 370.674 120.718C368.619 119.419 364.248 116.411 360.513 112.299H313.732C305.042 112.299 297.932 119.409 297.932 128.099V192.241C297.932 200.931 305.042 208.041 313.732 208.041H323.29C339.183 201.05 388.33 177.369 390.958 150.884Z" fill="#B22C1B"/>
|
||||
<path d="M360.789 84.179C360.771 84.1851 360.759 84.2005 360.741 84.2073C360.52 84.2903 360.322 84.4096 360.147 84.5597C360.126 84.5782 360.103 84.5936 360.083 84.6126C359.895 84.7873 359.742 84.9921 359.632 85.2271L359.629 85.2314C359.627 85.2351 359.628 85.2394 359.626 85.2437C359.567 85.3735 359.51 85.5045 359.48 85.6472C359.457 85.7542 359.461 85.8612 359.456 85.9683C359.455 85.9904 359.451 86.0113 359.451 86.0341C359.447 86.2961 359.488 86.5507 359.583 86.7912L359.584 86.7962L363.307 96.3152H348.944L352.667 86.7962C352.671 86.7845 352.669 86.7716 352.673 86.7605C352.756 86.5391 352.794 86.3053 352.794 86.0661C352.794 86.0156 352.787 85.9683 352.783 85.9178C352.777 85.8262 352.782 85.7345 352.762 85.6429C352.736 85.5229 352.685 85.4135 352.638 85.3027C352.629 85.2794 352.632 85.2535 352.622 85.2314C352.617 85.2215 352.608 85.216 352.604 85.2062C352.497 84.9841 352.352 84.7898 352.175 84.6218C352.147 84.5954 352.117 84.5751 352.087 84.5499C351.916 84.4053 351.724 84.2891 351.51 84.2079C351.492 84.2011 351.48 84.1851 351.461 84.179C334.827 78.4015 321.078 58.7502 320.16 39.4434C319.704 29.8161 322.719 21.3132 328.879 14.8524C335.557 7.85092 345.221 3.99435 356.159 3.99435C367.03 3.99435 376.694 7.85092 383.372 14.8524C389.532 21.3132 392.547 29.8161 392.091 39.4434C391.174 58.7502 377.424 78.4015 360.789 84.179ZM378.287 88.8733C378.676 89.6219 378.296 90.1484 377.909 90.4608C376.582 91.5317 372.42 92.0625 365.799 87.0631C373.418 85.5808 377.414 87.188 378.287 88.8733ZM334.336 90.4707C333.949 90.1613 333.57 89.6329 333.956 88.885C334.588 87.6653 336.856 86.4837 340.948 86.4837C342.51 86.4837 344.338 86.6553 346.444 87.0631C339.828 92.0625 335.667 91.544 334.336 90.4707ZM396.086 39.6384C396.598 28.8917 393.203 19.3683 386.269 12.0981C378.828 4.29696 368.136 0 356.094 0C344.119 0 333.428 4.29696 325.988 12.0981C319.054 19.3683 315.659 28.8917 316.17 39.6384C316.961 56.2997 326.691 73.1954 339.801 82.5066C334.643 82.7544 331.625 84.7024 330.41 87.0502C329.228 89.3309 329.802 91.9592 331.835 93.5934C333.011 94.5376 334.719 95.1625 336.875 95.1625C339.447 95.1625 342.659 94.2633 346.357 91.9659L344.157 97.5909C343.916 98.2072 343.996 98.9016 344.368 99.4466C344.74 99.9921 345.359 100.319 346.019 100.319H354.28C354.784 104.261 356.921 108.328 360.514 112.302H366.147C362.871 109.345 359.122 105.044 358.311 100.319H366.238C366.898 100.319 367.517 99.9921 367.889 99.4466C368.261 98.9016 368.341 98.2072 368.099 97.5909L365.901 91.969C369.592 94.2571 372.8 95.1539 375.37 95.1539C377.529 95.1539 379.242 94.5278 380.42 93.5793C382.452 91.945 383.023 89.3155 381.84 87.036C380.623 84.6914 377.61 82.7471 372.467 82.4992C385.571 73.1862 395.296 56.2954 396.086 39.6384Z" fill="#B22C1B"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 18 KiB |
@@ -0,0 +1,11 @@
|
||||
<svg width="42" height="36" viewBox="0 0 42 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
d="M19.3671 31.6121H0.602534C0.219583 31.6121 -0.0589257 31.264 0.0107016 30.9158L4.11871 9.08769C4.15353 8.84399 4.36241 8.66992 4.6061 8.66992H24.3803L20.1678 30.9507C20.0982 31.3336 19.75 31.6121 19.3671 31.6121Z"
|
||||
fill="#D20029" />
|
||||
<path
|
||||
d="M37.9577 4.70102C38.0621 4.56176 37.9577 4.3877 37.8184 4.3877H17.0695C16.791 4.3877 16.5473 4.59658 16.5125 4.84027L12.5089 26.0766L12.3696 26.7381C12.4741 26.5292 12.683 26.2507 13.1355 26.2507C13.24 26.2507 13.2052 26.2507 13.2052 26.2507H33.7104C33.8845 26.2507 34.0237 26.0766 33.9541 25.9025L29.8809 15.6673C29.8113 15.4584 29.8461 15.2147 29.9853 15.0059L37.9577 4.70102Z"
|
||||
fill="#FF0040" />
|
||||
<path
|
||||
d="M20.4113 29.7672L21.0728 26.251H13.1005C12.1605 26.251 11.9516 27.5739 12.8568 27.8872L19.541 30.0109C19.9587 30.1501 20.2373 30.5679 20.1328 31.0204L20.4113 29.7672Z"
|
||||
fill="#831A2D" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 976 B |
@@ -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 |
|
After Width: | Height: | Size: 38 KiB |
@@ -0,0 +1,64 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 900 194.71">
|
||||
<defs>
|
||||
<style>
|
||||
.st0 {
|
||||
fill: #005bac;
|
||||
}
|
||||
|
||||
.st1 {
|
||||
fill: #00aa71;
|
||||
}
|
||||
|
||||
.st2 {
|
||||
fill: #bbbbbb;
|
||||
}
|
||||
|
||||
.st3 {
|
||||
fill: #ee7948;
|
||||
}
|
||||
|
||||
.st4 {
|
||||
fill: #9c549d;
|
||||
}
|
||||
|
||||
.st5 {
|
||||
fill: #06b4ea;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path class="st0" d="M143.25,172.24h-38.94L37.1,72.24v100H0V26.63h48.41l57.76,83.4V26.63h37.08v145.61ZM279.03,123.87h-87.51c.63,8.73,4.12,15.32,10.65,19.86,6.59,4.62,16.26,6.91,28.92,6.91,8.08,0,15.9-1.42,23.46-4.14,7.56-2.73,13.51-5.61,17.96-8.83h4.18v28.3c-8.63,3.17-16.76,5.51-24.29,6.95-7.58,1.44-16.09,2.19-25.31,2.19-23.81,0-42.01-4.97-54.76-14.97-12.69-9.89-19.01-23.91-19.01-42.27s5.98-32.47,18-43.16c12.08-10.57,28.53-15.82,49.52-15.82,19.29,0,33.82,4.49,43.56,13.51,9.75,9.07,14.65,22.16,14.65,39.07v12.37l-.02.03ZM240.69,103.2c-.16-7.43-2.07-13.03-5.89-16.81-3.71-3.77-9.51-5.66-17.38-5.66-7.29,0-13.41,1.8-18.02,5.28-4.8,3.6-7.36,9.28-7.91,17.19h49.2ZM408.21,172.24h-38.25v-12.08c-6.97,5.01-13.41,8.81-19.25,11.33-5.85,2.61-12.74,3.86-20.81,3.86-13.06,0-23.1-3.51-30.19-10.43-6.99-6.97-10.51-17.3-10.51-30.95V62.32h38.27v54.54c0,5.6.13,10.17.56,13.89.38,3.69,1.3,6.69,2.62,9.2,1.3,2.41,3.35,4.2,6.02,5.27,2.72,1.12,6.55,1.69,11.28,1.69,3.27,0,6.73-.57,10.69-1.69,3.96-1.08,7.71-2.8,11.32-4.93V62.32h38.25v109.92h0ZM529.77,137.43c0,11.47-5.44,20.55-16.48,27.52-11.04,6.94-26.1,10.4-45.25,10.4-10.65,0-20.2-.89-28.74-2.69-8.67-1.83-15.58-3.82-20.82-6.12v-28.85h3.5c1.89,1.23,4.13,2.53,6.67,4.01,2.51,1.48,5.96,2.97,10.66,4.66,3.96,1.56,8.41,2.77,13.49,3.81,5.04,1.13,10.35,1.64,16.12,1.64,7.51,0,13.03-.76,16.63-2.23,3.61-1.61,5.4-3.8,5.4-6.74,0-2.7-1.03-4.69-3.12-5.81-2.16-1.23-6.16-2.38-12.04-3.55-2.9-.56-6.72-1.22-11.56-1.86-4.9-.74-9.29-1.58-13.27-2.55-10.78-2.46-18.78-6.61-24.03-12.17-5.2-5.51-7.88-12.36-7.88-20.51,0-10.59,5.4-19.48,16.22-26.38,10.89-7.06,25.64-10.51,44.39-10.51,8.96,0,17.4.83,25.64,2.46,8.05,1.73,14.5,3.43,19.04,5.35v27.86h-3.23c-5.8-3.59-12.16-6.51-19.4-8.68-7.25-2.36-14.58-3.45-21.98-3.45-6.16,0-11.28.74-15.51,2.33-4.17,1.52-6.38,3.81-6.38,6.61,0,2.62,1.01,4.48,2.88,5.9,1.9,1.43,6.45,2.78,13.55,4.06,3.86.8,8.04,1.55,12.5,2.19,4.57.65,9,1.52,13.55,2.59,10.01,2.45,17.46,6.15,22.19,11.43,4.9,5.17,7.26,11.54,7.26,19.3M667.69,117.32c0,18.11-5.66,32.31-17.14,42.81-11.32,10.35-27.42,15.51-48.01,15.51s-36.58-5.16-48.04-15.51c-11.38-10.5-17.07-24.7-17.07-42.81s5.69-32.49,17.18-42.89c11.44-10.37,27.43-15.52,47.92-15.52s36.77,5.15,48.17,15.66c11.32,10.35,16.98,24.71,16.98,42.75M620.8,144.15c2.5-2.82,4.36-6.22,5.67-10.19,1.14-3.94,1.82-9.43,1.82-16.45,0-6.5-.68-11.9-1.9-16.26-1.36-4.47-3.09-7.96-5.36-10.66-2.22-2.62-5-4.53-8.14-5.67-3.2-1.04-6.67-1.63-10.36-1.63s-6.93.46-9.88,1.37c-2.86.91-5.66,2.78-8.21,5.5-2.29,2.63-4.2,6.12-5.59,10.58-1.38,4.39-2.03,9.99-2.03,16.76,0,6,.59,11.24,1.83,15.69,1.17,4.38,2.93,7.9,5.3,10.59,2.26,2.56,4.91,4.5,8.08,5.65,3.15,1.21,6.84,1.84,10.79,1.84,3.47,0,6.8-.63,9.92-1.65,3.2-1.17,5.88-2.88,8.05-5.48M726.2,62.12h44.69v-16.13l34.94-15.11h3.6v31.25h35.32v24.27h-35.26v49.4s-.29,15.08,16.39,14.36c0,0,7.55.49,15.15-3.13h3.85v23.8s-21.03,6.57-48.15,1.48c0,0-17.53-2.63-23.11-17.9,0,0-2.65-6.45-2.73-14.7v-53.56h-43.57v85.92h-38.56v-85.92h-16.22v-23.91h16.51s-2.02-23.59,13.33-34.31c0,0,17.04-14.22,60.83-6.64v24.73h-3.11s-26.33-7.98-32.55,4.36c0,0-2.12,5.49-1.35,11.73"/>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st0" d="M1141.47,128.02c-.32,0-.58-.26-.58-.58v-2.22c0-.32.26-.53.58-.53h3.91v-14.38l-3.83,1.17c-.15.06-.26.06-.35.06-.2,0-.32-.09-.32-.35v-2.75c0-.18.06-.26.2-.32l5.17-1.69c.18-.06.35-.12.67-.12h1.93c.32,0,.56.23.56.56v17.83h3.92c.32,0,.58.21.58.53v2.22c0,.32-.26.58-.58.58h-11.87,0Z"/>
|
||||
<path class="st0" d="M1164.66,128.25c-2.54,0-4.44-.35-5.41-.56-.41-.09-.67-.23-.67-.61v-1.81c0-.41.24-.61.56-.61h.12c1.11.18,3.65.38,5.41.38,2.95,0,4.03-1.32,4.12-5.32-.93.17-2.48.32-4.06.32-3.8,0-7.16-1.64-7.16-6.43v-.29c0-4.33,2.72-7.25,7.54-7.25,4.36,0,7.66,2.69,7.66,9.03v3.36c0,7.04-2.75,9.79-8.1,9.79h-.01ZM1168.78,115.1c0-4.88-1.55-5.87-3.68-5.87-1.99,0-3.57.88-3.57,4.09v.29c0,2.75,1.87,3.48,4,3.48.85,0,2.37-.15,3.24-.32v-1.67h.01Z"/>
|
||||
<path class="st0" d="M1183.08,128.25c-2.54,0-4.44-.35-5.41-.56-.41-.09-.67-.23-.67-.61v-1.81c0-.41.23-.61.56-.61h.12c1.11.18,3.65.38,5.41.38,2.95,0,4.03-1.32,4.12-5.32-.94.17-2.48.32-4.06.32-3.8,0-7.16-1.64-7.16-6.43v-.29c0-4.33,2.72-7.25,7.54-7.25,4.36,0,7.66,2.69,7.66,9.03v3.36c0,7.04-2.75,9.79-8.1,9.79h-.01ZM1187.2,115.1c0-4.88-1.55-5.87-3.68-5.87-1.99,0-3.57.88-3.57,4.09v.29c0,2.75,1.87,3.48,4,3.48.85,0,2.37-.15,3.25-.32v-1.67Z"/>
|
||||
<path class="st0" d="M1196.74,128.02c-.32,0-.58-.26-.58-.58v-2.22c0-.32.26-.53.58-.53h3.91v-14.38l-3.83,1.17c-.15.06-.26.06-.35.06-.2,0-.32-.09-.32-.35v-2.75c0-.18.06-.26.2-.32l5.17-1.69c.18-.06.35-.12.67-.12h1.93c.32,0,.56.23.56.56v17.83h3.92c.32,0,.58.21.58.53v2.22c0,.32-.26.58-.58.58h-11.87,0Z"/>
|
||||
<path class="st0" d="M1218.96,120.48h-5.73c-.32,0-.58-.2-.58-.53v-1.84c0-.32.26-.56.58-.56h5.73c.32,0,.56.23.56.56v1.84c0,.32-.24.53-.56.53Z"/>
|
||||
<path class="st0" d="M1233.29,117.09l-2.63,1.75c-2.75,1.84-4.15,3.3-4.15,5.73v.12h9.62c.32,0,.58.21.58.53v2.22c0,.32-.26.58-.58.58h-12.39c-.32,0-.58-.26-.58-.58v-2.86c0-3.22,2.02-6.05,4.44-7.66l2.89-1.93c2.25-1.49,2.69-1.96,2.69-3.57s-.99-2.16-3.42-2.16c-1.72,0-4.09.24-5.84.44h-.06c-.32,0-.53-.26-.53-.58v-1.75c0-.29.26-.47.56-.56,1.52-.41,3.97-.73,5.87-.73,5.11,0,7.19,1.72,7.19,5.35,0,2.43-1.26,4.06-3.65,5.67h0Z"/>
|
||||
<path class="st0" d="M1248.41,128.25c-4.73,0-7.63-2.72-7.63-9.99v-2.16c0-7.28,2.89-10.02,7.63-10.02s7.63,2.75,7.63,10.02v2.16c0,7.28-2.89,9.99-7.63,9.99h0ZM1251.98,116.09c0-5.29-1.55-6.72-3.57-6.72s-3.57,1.43-3.57,6.72v2.16c0,5.29,1.55,6.69,3.57,6.69s3.57-1.4,3.57-6.69v-2.16Z"/>
|
||||
<path class="st0" d="M1270.13,117.09l-2.63,1.75c-2.75,1.84-4.15,3.3-4.15,5.73v.12h9.62c.32,0,.58.21.58.53v2.22c0,.32-.26.58-.58.58h-12.39c-.32,0-.58-.26-.58-.58v-2.86c0-3.22,2.02-6.05,4.44-7.66l2.89-1.93c2.25-1.49,2.69-1.96,2.69-3.57s-.99-2.16-3.42-2.16c-1.72,0-4.09.24-5.84.44h-.06c-.32,0-.53-.26-.53-.58v-1.75c0-.29.26-.47.56-.56,1.52-.41,3.98-.73,5.87-.73,5.12,0,7.19,1.72,7.19,5.35,0,2.43-1.26,4.06-3.65,5.67h0Z"/>
|
||||
<path class="st0" d="M1285.46,128.25c-4.36,0-7.66-2.69-7.66-9.03v-3.36c0-7.04,2.75-9.79,8.1-9.79,2.54,0,4.44.35,5.41.56.41.09.67.23.67.61v1.81c0,.41-.24.61-.56.61h-.12c-1.11-.18-3.65-.38-5.41-.38-2.95,0-4.03,1.32-4.12,5.32.94-.18,2.48-.32,4.06-.32,3.8,0,7.16,1.64,7.16,6.43v.29c0,4.33-2.72,7.25-7.54,7.25h.01ZM1289.03,120.71c0-2.75-1.87-3.48-4-3.48-.85,0-2.37.15-3.25.32v1.67c0,4.88,1.55,5.87,3.68,5.87,1.99,0,3.57-.88,3.57-4.09v-.29Z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M1152.91,95.68h-2.35c-.56,0-1.05,0-1.42-.84l-5.17-11.33c-.07-.14-.14-.19-.21-.19s-.12.05-.12.19v11.71c0,.26-.19.47-.44.47h-1.98c-.25,0-.46-.21-.46-.47v-15.89c0-.51.42-.93.93-.93h2.51c.49,0,.74.14,1.03.74l5.42,11.96c.05.12.12.19.19.19.05,0,.12-.07.12-.21v-12.24c0-.25.19-.44.44-.44h2c.26,0,.44.19.44.44v15.92c0,.51-.42.93-.93.93h0Z"/>
|
||||
<path class="st0" d="M1167.35,90.19h-7.59v.07c0,1.35.56,2.95,2.79,2.95,1.7,0,3.3-.14,4.28-.23h.07c.23,0,.42.12.42.35v1.54c0,.37-.07.54-.49.6-1.51.28-2.42.4-4.51.4-2.33,0-5.63-1.26-5.63-5.84v-1.72c0-3.63,2.02-5.91,5.58-5.91s5.54,2.44,5.54,5.91v1.3c0,.37-.14.58-.46.58h0ZM1164.72,87.91c0-1.82-1-2.86-2.44-2.86s-2.49,1.02-2.49,2.86v.09h4.93v-.09h0Z"/>
|
||||
<path class="st0" d="M1180.72,95.68h-2.14c-.26,0-.47-.21-.47-.47v-.54c-1.21.79-2.16,1.16-3.65,1.16-1.16,0-2.19-.3-2.86-.98-.86-.86-1.16-2.31-1.16-4.24v-7.58c0-.26.21-.49.46-.49h2.14c.26,0,.47.23.47.49v7.58c0,1.17.09,1.84.54,2.23.33.28.72.42,1.44.42.86,0,1.98-.58,2.63-.93v-9.31c0-.26.21-.49.47-.49h2.14c.25,0,.46.23.46.49v12.17c0,.26-.21.47-.46.47v.02Z"/>
|
||||
<path class="st0" d="M1188.46,95.87c-.91,0-2.86-.12-4.16-.46-.28-.07-.44-.26-.44-.54v-1.4c0-.19.16-.37.4-.37h.09c1.12.14,3.21.26,3.91.26,1.44,0,1.65-.49,1.65-1.12,0-.44-.28-.72-1.02-1.19l-3.19-1.96c-1.14-.7-1.96-1.86-1.96-3.21,0-2.33,1.47-3.49,4.42-3.49,1.89,0,2.96.21,4.14.47.28.07.42.25.42.54v1.35c0,.28-.14.44-.37.44h-.09c-.65-.09-2.51-.28-3.84-.28-1.12,0-1.61.26-1.61.98,0,.37.35.6.93.95l3.05,1.86c1.95,1.19,2.23,2.35,2.23,3.54,0,2.02-1.51,3.63-4.56,3.63h0Z"/>
|
||||
<path class="st0" d="M1200.75,95.87c-3.65,0-5.56-2.47-5.56-5.79v-1.89c0-3.33,1.91-5.79,5.56-5.79s5.56,2.47,5.56,5.79v1.89c0,3.33-1.91,5.79-5.56,5.79ZM1203.24,88.19c0-1.91-.86-3.14-2.49-3.14s-2.49,1.23-2.49,3.14v1.89c0,1.91.86,3.14,2.49,3.14s2.49-1.23,2.49-3.14v-1.89Z"/>
|
||||
<path class="st0" d="M1215.33,80.02h-1.05c-1.12,0-1.37.26-1.37,1.4v1.14h2.23c.26,0,.47.21.47.47v1.4c0,.25-.21.44-.47.44h-2.23v10.33c0,.25-.21.49-.46.49h-2.12c-.26,0-.49-.23-.49-.49v-10.33l-2.07-.33c-.26-.05-.47-.19-.47-.44v-1.07c0-.26.21-.47.47-.47h2.07v-1.14c0-3,1.61-3.72,4.03-3.72.56,0,.95.09,1.4.19.19.05.42.16.42.37v1.37c0,.28-.19.4-.35.4h-.01Z"/>
|
||||
<path class="st0" d="M1224.54,95.71c-.56.09-1.07.16-1.58.16-2.63,0-3.7-.58-3.7-3.7v-7.31l-2.19-.33c-.25-.05-.46-.21-.46-.47v-1.05c0-.26.21-.47.46-.47h2.19v-1.91c0-.25.21-.42.47-.46l2.16-.37h.09c.21,0,.37.12.37.35v2.4h2.09c.26,0,.47.21.47.47v1.37c0,.26-.21.47-.47.47h-2.09v7.31c0,1.16.07,1.3.91,1.3h1.23c.3,0,.49.12.49.35v1.47c0,.23-.14.37-.44.42h0Z"/>
|
||||
</g>
|
||||
</g>
|
||||
<path class="st3" d="M1277.59,52.15l8.22-14.24h-.04l20.58-35.55h-27.5l-20.58,35.41c7.1,3.89,13.59,8.75,19.33,14.37h0Z"/>
|
||||
<path class="st0" d="M1226.18,61.06v-.02l34.09-58.68h-87.44v22.86h48.25l-20.98,37.38c5.11-1.59,10.54-2.44,16.18-2.44,3.36,0,6.65.32,9.84.9h.07-.01Z"/>
|
||||
<polygon class="st1" points="1351.26 25.23 1351.26 2.36 1318.01 2.36 1304.81 25.23 1351.26 25.23"/>
|
||||
<path class="st4" d="M1247.84,43.9l-11.61,19.98c9.41,3.92,17.53,10.31,23.54,18.38h26.88c-7.86-17.01-21.7-30.69-38.81-38.36Z"/>
|
||||
<path class="st5" d="M1297.28,38.27l-12.57,21.77c.19.24.39.49.58.73,1.24-.09,2.49-.17,3.76-.17,30.09,0,54.48,24.39,54.48,54.48s-24.39,54.48-54.48,54.48c-1.49,0-2.97-.09-4.43-.21-5.86,7.31-12.87,13.65-20.75,18.77,7.89,2.72,16.35,4.22,25.17,4.22,42.67,0,77.26-34.59,77.26-77.26,0-39.89-30.23-72.71-69.03-76.82h.01Z"/>
|
||||
<g>
|
||||
<path class="st0" d="M1216.09,166.16h.13c20.03,0,37.38-11.38,45.99-28.02h-6.49c-8.08,13.38-22.76,22.36-39.5,22.36h-.12v5.66h-.01Z"/>
|
||||
<path class="st0" d="M1284.35,138.15c-9.84,28.16-36.66,48.42-68.13,48.42s-58.29-20.26-68.13-48.42h-5.99c10.04,31.37,39.43,54.08,74.13,54.08s64.09-22.71,74.13-54.08h-6.01Z"/>
|
||||
<path class="st0" d="M1270.56,138.15c-9.18,20.92-30.07,35.57-54.34,35.57-13.64,0-26.2-4.66-36.23-12.44l-2.86,4.95c10.88,8.23,24.39,13.15,39.09,13.15,27.5,0,51-17.1,60.48-41.23h-6.14Z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 743 KiB |
@@ -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 |
@@ -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>
|
||||
@@ -1,485 +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;
|
||||
}
|
||||
|
||||
/* 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 金山办公 WPS 菁英工程师训练营</li>
|
||||
<li>2024-05 ~ 2026-05 武汉科技大学领航工作室</li>
|
||||
<li>2025-01 ~ 2025-03 字节跳动 MarsCode 青训营</li>
|
||||
<li>2026-06 ~ 2026-07 东软集团集体实训</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- 荣誉奖项 -->
|
||||
<div class="section">
|
||||
<div class="section-title">荣誉奖项</div>
|
||||
<div class="honor-item">
|
||||
<div class="honor-content">
|
||||
<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">
|
||||
<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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 1.4 MiB |