nginx 1.26.2
tcp/443 tcp/80
The following URL (usually /.git/config) is publicly accessible and is leaking source code and repository configuration.
Severity: medium
Fingerprint: 2580fa947178c88602b1737db148c044b81b03713d63bb82370a65220c145d4a
[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = git@codeup.aliyun.com:ido/resume.md.git fetch = +refs/heads/*:refs/remotes/origin/* [branch "my"] remote = origin merge = refs/heads/my
Severity: medium
Fingerprint: 2580fa947178c88602b1737db148c044b81b03713d63bb82370a65225196f59d
[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = git@github.com:imdong/resume.md.git fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master
The following URL (usually /.git/config) is publicly accessible and is leaking source code and repository configuration.
Severity: medium
Fingerprint: 2580fa947178c88602b1737db148c044b81b03713d63bb82370a65220c145d4a
[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = git@codeup.aliyun.com:ido/resume.md.git fetch = +refs/heads/*:refs/remotes/origin/* [branch "my"] remote = origin merge = refs/heads/my
Severity: medium
Fingerprint: 2580fa947178c88602b1737db148c044b81b03713d63bb82370a65225196f59d
[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = git@github.com:imdong/resume.md.git fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master
Open service 2408:8722:4100:1:62:::443 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Tue, 12 Aug 2025 10:02:08 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 8064474328312862342
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 2408:8726:1800:31:6c::13:443 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Tue, 12 Aug 2025 10:02:08 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 85823968533811762
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 2408:8722:4100:1:62:::80 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Tue, 12 Aug 2025 10:02:08 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 11265105210593226757
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 2408:8738:b000:d:38::11:80 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Wed, 07 Jan 2026 16:51:29 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 111002906487966672
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 2408:8738:b000:d:38::11:443 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Wed, 07 Jan 2026 16:51:29 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 8591627877548185209
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 2408:8726:1800:31:6c::13:80 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Tue, 12 Aug 2025 10:02:08 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 1250214757381850
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 2408:8720:806:311:37::8:80 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Tue, 12 Aug 2025 10:02:08 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 18403494055949754286
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 2408:8720:806:311:37::8:443 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Tue, 12 Aug 2025 10:02:08 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 9579103438528692225
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 2408:871a:c800:e:40::15:443 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Tue, 12 Aug 2025 10:02:08 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 10426134935279214304
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 2408:871a:c800:e:40::15:80 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Tue, 12 Aug 2025 10:02:08 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 17536416395347683208
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 2408:8735:2:0:48::18:443 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Wed, 07 Jan 2026 16:51:29 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 6587673201210210443
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 2408:874c:0:28:38::2e:80 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Sun, 27 Apr 2025 02:14:19 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 700469217674118416
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 2408:8735:2:0:48::18:80 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Wed, 07 Jan 2026 16:51:29 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 12867686554259319962
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 2408:874c:0:28:38::2e:443 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Sun, 27 Apr 2025 02:14:19 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 7784831648202504838
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 2408:872f:700:7:38::11:80 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Wed, 07 Jan 2026 16:51:29 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 228825600410192479
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 2408:872f:700:7:38::11:443 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Wed, 07 Jan 2026 16:51:29 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 2617458914085122464
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 116.153.4.244:80 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Sun, 27 Apr 2025 02:14:19 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 4689912518088442824
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 211.93.211.158:80 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Tue, 12 Aug 2025 10:02:08 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 3434761411229293501
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 211.93.211.158:443 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Tue, 12 Aug 2025 10:02:08 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 6445220345537895012
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 116.153.4.244:443 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Sun, 27 Apr 2025 02:14:19 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 3921553673836221584
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 60.13.97.57:443 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Fri, 10 Oct 2025 10:23:34 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 18427923805828001832
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 221.204.15.51:443 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Tue, 12 Aug 2025 10:02:08 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 14211471178332039147
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 1.62.64.79:443 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Wed, 07 Jan 2026 16:51:29 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 12445643823331673696
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 1.62.64.79:80 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Wed, 07 Jan 2026 16:51:29 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 13996494596706341426
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 221.204.15.51:80 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Tue, 12 Aug 2025 10:02:08 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 7385480899586593579
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 42.56.64.131:80 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Wed, 07 Jan 2026 16:51:29 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 10855112143584038808
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 42.56.64.131:443 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Wed, 07 Jan 2026 16:51:29 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 18303792538962018694
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 116.163.31.218:443 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Sun, 27 Apr 2025 02:14:19 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 4316508371446821015
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 1.56.98.184:80 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Wed, 07 Jan 2026 16:51:29 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 3886564915384013975
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 221.204.209.225:443 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Tue, 12 Aug 2025 10:02:08 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 3918838569959932813
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 42.56.81.77:443 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Wed, 07 Jan 2026 16:51:29 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 1531332302696027376
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 116.163.31.218:80 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Sun, 27 Apr 2025 02:14:19 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 9492500862512733733
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 116.131.57.65:80 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Tue, 12 Aug 2025 10:02:08 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 14091296245224378374
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 1.56.98.184:443 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Wed, 07 Jan 2026 16:51:29 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 17274122548000832293
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 116.131.57.65:443 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Tue, 12 Aug 2025 10:02:08 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 9762517143714287750
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 221.204.209.225:80 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Tue, 12 Aug 2025 10:02:08 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 3932578771997829983
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
Open service 60.13.97.57:80 · me.qs5.org
2026-01-26 07:55
HTTP/1.1 200 OK
Last-Modified: Thu, 22 Aug 2024 14:55:47 GMT
Etag: "66c75173-14bf"
Server: nginx/1.26.2
Date: Fri, 10 Oct 2025 10:23:34 GMT
Content-Type: text/html
Content-Length: 5311
Accept-Ranges: bytes
X-NWS-LOG-UUID: 12966891408605472401
Connection: close
X-Cache-Lookup: Cache Hit
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Page title: 王东-PHP开发-简历
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>王东-PHP开发-简历</title>
<link rel="stylesheet" href="/assets/style.css" />
<base target="_blank" />
<style>
.subtitle {
font-size: 16px;
}
.sub-info,
.sub-down {
font-size: small;
font-weight: normal;
float: right;
margin-top: 18px;
}
.qrcode {
display: none;
width: 50px;
position: absolute;
right: 0;
bottom: -55px;
}
.split-tag span+span {
margin-left: 10px;
}
</style>
</head>
<body>
<div class="print-btn">
<a href="javascript:window.print();" target="_self">打印(Print)</a>
</div>
<div id="content" class="markdown-body">
<span class="loading">Loading...</span>
</div>
<template style="display: none;" id="tpl-page-number">
<p class="page_number ">本简历使用 Markdown 书写,使用 <a href="https://github.com/markedjs/marked">Marked.js</a> 渲染,托管于
<a href="https://github.com/imdong/resume.md">Github</a>,使用 MIT 协议开源。<span>{page}/{total}</span>
</p>
</template>
<script src="/assets/qrcode.min.js"></script>
<script src="/assets/marked.min.js"></script>
<script>
(function () {
// 出于安全考虑,可以使用 base64 对隐私信息编码,防止爬虫骚扰。
let base_names = ['mobile', 'wechat', 'email'];
/**
* 对文档中 $class_name{text} 内容替换为 <span class="{class_name}">{text}</span>
* @param {string} Markdown 原文
* return {string} 替换后的内容
*/
function replaceClassMark(md_text) {
md_text = md_text.replace(/[\$\@]([a-z\-]+){([^}]+)?}/g, function (full, class_name, match_text) {
try {
match_text = base_names.indexOf(class_name) >= 0 ? atob(match_text) : match_text;
} catch (error) { }
// 分割 tag
if (class_name == 'split-tag') {
let tags = [];
match_text.split(',').forEach(tag_name => {
tags.push('<span>' + tag_name.trim() + '</span>')
});
match_text = tags.join('');
}
return '<span class="' + class_name + '">' + match_text + '</span>';
});
// 页脚 分页
let page_index = 0;
md_text = md_text.replace(/^[\-]{4,}$/mg, function () {
return document.getElementById('tpl-page-number').innerHTML.trim().replace('{page}', ++page_index)
}).replace(/{total}/g, page_index);
// 修改工作年限
workYear = getWorkExperience(2015);
md_text = md_text.replace(/\$workYear\$?/g, workYear);
return md_text;
}
/**
* 计算工作年限
* @param {int} startYear 开始年份
* return {int} 工作年数(仅计算公历年)
*/
function getWorkExperience(startYear) {
return (new Date()).getFullYear() - startYear
}
// 远程加载 Markdown 文档回来处理
let md_file = (location.hash.substr(1) || './resume.md'),// + '?_' + (new Date().getTime()),
xhr = new XMLHttpRequest();
// 如果是调试模式
if (location.search.indexOf('debug') > 0) {
md_file += '?_' + (new Date().getTime())
}
xhr.open("GET", md_file, true);
xhr.onreadystatechange = function (event) {
if (this.readyState != 4) {
return;
2408:8722:4100:1:62:: 1 2408:8726:1800:31:6c::13 1 2408:8738:b000:d:38::11 1 2408:8720:806:311:37::8 1 2408:871a:c800:e:40::15 1 2408:8735:2:0:48::18 1 2408:874c:0:28:38::2e 1 2408:872f:700:7:38::11 1 116.153.4.244 1 211.93.211.158 1 60.13.97.57 1 221.204.15.51 1 1.62.64.79 1 42.56.64.131 1 116.163.31.218 1 1.56.98.184 1 221.204.209.225 1 42.56.81.77 1 116.131.57.65 1 14.205.47.78 1 112.90.43.190 1 123.6.37.241 1 42.4.53.213 1