{"id":367,"date":"2026-06-26T23:37:25","date_gmt":"2026-06-26T15:37:25","guid":{"rendered":"https:\/\/erishen.cn\/?page_id=367"},"modified":"2026-06-26T23:40:09","modified_gmt":"2026-06-26T15:40:09","slug":"resume-pe","status":"publish","type":"page","link":"https:\/\/erishen.cn\/?page_id=367","title":{"rendered":"\u5b59\u78ca &#8211; Platform Engineer"},"content":{"rendered":"<style>\n.resume-wrap { max-width: 800px; margin: 0 auto; }\n.resume-wrap h2 { font-size: 1.25rem; font-weight: 700; margin: 2em 0 1em; padding-bottom: 0.4em; border-bottom: 2px solid #1a1a1a; }\n.resume-wrap h3 { font-size: 1.05rem; font-weight: 700; margin: 1.5em 0 0.3em; color: #1a1a1a; }\n\/* Contact bar *\/\n.resume-contact { display: flex; flex-wrap: wrap; gap: 8px 24px; padding: 14px 18px; background: #f5f5f5; border-radius: 8px; font-size: 0.9rem; margin: 16px 0; align-items: center; }\n.resume-contact a { color: #1976d2; text-decoration: none; }\n.resume-contact a:hover { text-decoration: underline; }\n\/* Action buttons *\/\n.resume-actions { display: flex; flex-wrap: wrap; gap: 8px; margin: 12px 0 24px; }\n.resume-actions a { display: inline-block; padding: 6px 18px; border-radius: 20px; font-size: 0.85rem; text-decoration: none; font-weight: 500; transition: all 0.15s; }\n.resume-actions a:hover { opacity: 0.85; }\n.resume-actions .btn-pdf { background: #e8f5e9; color: #2e7d32; border: 1px solid #a5d6a7; }\n.resume-actions .btn-lang { background: #e3f2fd; color: #1565c0; border: 1px solid #90caf9; }\n\/* Company card *\/\n.resume-company { border-left: 3px solid #1976d2; padding: 0.3em 0 0.3em 20px; margin: 1.8em 0; }\n.resume-company .company-summary { font-size: 0.92rem; color: #444; margin: 0.3em 0 0.6em; }\n\/* Section labels *\/\n.resume-label { display: inline-block; padding: 2px 12px; border-radius: 4px; font-size: 0.78rem; font-weight: 600; letter-spacing: 0.3px; margin: 12px 0 6px; text-transform: uppercase; }\n.resume-label.work { background: #e3f2fd; color: #1565c0; }\n.resume-label.impact { background: #e8f5e9; color: #2e7d32; }\n.resume-label.highlight { background: #fff3e0; color: #e65100; }\n\/* Tech stack tags *\/\n.resume-stack { display: flex; flex-wrap: wrap; gap: 5px; margin: 8px 0 4px; }\n.resume-stack .tag { display: inline-block; padding: 1px 10px; background: #f0f0f0; border-radius: 12px; font-size: 0.78rem; color: #555; }\n\/* Profile card *\/\n.resume-profile { background: #fafafa; border: 1px solid #eee; border-radius: 8px; padding: 18px 22px; margin: 16px 0 24px; line-height: 1.8; }\n.resume-profile p { margin: 0.4em 0; }\n\/* Core competencies *\/\n.resume-core { margin: 12px 0 20px; }\n.resume-core li { margin-bottom: 0.5em; line-height: 1.7; }\n\/* Quote\/tagline *\/\n.resume-tagline { font-size: 0.92rem; color: #555; border-left: 3px solid #1976d2; padding: 6px 16px; margin: 16px 0; background: #f8f9ff; border-radius: 0 6px 6px 0; }\n\/* Project section *\/\n.resume-project { margin: 1.4em 0; }\n.resume-project .project-meta { display: inline-block; font-size: 0.82rem; color: #666; margin: 0.2em 0 0.4em; }\n\/* Open source list *\/\n.resume-oss { margin: 0.6em 0; }\n.resume-oss li { margin-bottom: 0.3em; line-height: 1.6; }\n\/* Target roles card *\/\n.resume-target { background: #fafafa; border: 1px solid #eee; border-radius: 8px; padding: 16px 22px; margin: 16px 0; line-height: 1.8; }\n.resume-target strong { color: #d32f2f; }\n\/* Education *\/\n.resume-edu { background: #fafafa; border: 1px solid #eee; border-radius: 8px; padding: 16px 22px; margin: 16px 0; font-size: 0.95rem; line-height: 1.8; }\n.resume-edu strong { color: #1a1a1a; }\n\/* List styling inside resume *\/\n.resume-wrap ul { padding-left: 18px; margin: 0.3em 0; }\n.resume-wrap li { margin-bottom: 0.3em; line-height: 1.7; }\n\/* Footer spacing *\/\n.resume-wrap hr { margin: 1.5em 0; border: none; border-top: 1px solid #e0e0e0; }\n<\/style>\n<div class=\"resume-wrap\">\n<div class=\"resume-tagline\">> \u5168\u6808\u5de5\u7a0b\u5e95\u5ea7 | PayPal \u91d1\u878d\u79d1\u6280 | \u5f00\u53d1\u8005\u5e73\u53f0\u5efa\u8bbe | \u73af\u5883\u81ea\u52a8\u5316 \/ \u591a\u6280\u672f\u6808 \/ AI \u5de5\u5177\u94fe<\/div>\n<div class=\"resume-contact\">\u90ae\u7bb1\uff1a<a href=\"mailto:erishen@qq.com\">erishen@qq.com<\/a> | \ud83d\udccd \u4e0a\u6d77<br \/>\n<span>\u4e2a\u4eba\u7ad9\u70b9\uff1a<a href=\"https:\/\/erishen.cn\">https:\/\/erishen.cn<\/a> | GitHub\uff1a<a href=\"https:\/\/github.com\/erishen\">https:\/\/github.com\/erishen<\/a> | LinkedIn\uff1a<a href=\"https:\/\/www.linkedin.com\/in\/erishen\/\">https:\/\/www.linkedin.com\/in\/erishen\/<\/a><\/span><\/div>\n<div class=\"resume-actions\"><a href=\"\/wordpress\/wp-content\/uploads\/2026\/06\/%E5%AD%99%E7%A3%8A-PlatformEngineer_DeveloperProductivityEngineer.pdf\" class=\"btn-pdf\">\u4e0b\u8f7d PDF<\/a><a href=\"\/?page_id=368\" class=\"btn-lang\">English Resume<\/a><\/div>\n<h2>\u4e2a\u4eba\u4f18\u52bf<\/h2>\n<div class=\"resume-profile\">\n<p>\u4e13\u6ce8\u5e73\u53f0\u5de5\u7a0b\u548c\u5f00\u53d1\u8005\u5de5\u5177\u5efa\u8bbe\uff0c\u6709\u5168\u6808\u5de5\u7a0b\u5e95\u5ea7\u652f\u6491\u3002\u5728 PayPal \u4ece\u96f6\u642d\u5efa\u8986\u76d6 6 \u79cd\u8bed\u8a00\u6808 13 \u4e2a\u7535\u5546\u5e73\u53f0\u7684\u6807\u51c6\u5316 Docker \u6d4b\u8bd5\u73af\u5883\u4f53\u7cfb\uff0c\u4e09\u5c42\u955c\u50cf\u7f13\u5b58\u67b6\u6784\u5c06\u51b7\u542f\u52a8\u4ece\u5206\u949f\u7ea7\u964d\u81f3 10 \u79d2\u5185\uff0c30+ \u53cc\u67b6\u6784\uff08arm64\/amd64\uff09\u955c\u50cf\u63a8\u9001 JFrog\uff0c\u5c01\u88c5\u81ea\u52a9\u542f\u52a8\u5de5\u5177\u548c Makefile \u7edf\u4e00\u5165\u53e3\uff0c\u8ba9 AI Agent \u548c\u5de5\u7a0b\u5e08\u90fd\u80fd\u65e0\u969c\u788d\u81ea\u52a9\u542f\u52a8\u73af\u5883\uff1b\u540c\u6b65\u5efa\u8bbe AI \u8f85\u52a9\u4ee3\u7801\u5206\u6790\u5de5\u5177\u94fe\uff0c\u6ce8\u91cd\u6839\u56e0\u5206\u6790\u548c pattern \u6587\u6863\u6c89\u6dc0\uff0c\u5f62\u6210\u56e2\u961f\u77e5\u8bc6\u5e93\u800c\u975e\u4e2a\u4eba\u7ecf\u9a8c\u3002\u6280\u672f\u6808\u8986\u76d6 Docker\u3001Makefile\u3001Shell\u3001JFrog\u3001Python\u3001FastAPI\u3001React\u3001Next.js\u3001Node.js\u3001TypeScript\u3001Redis\u3001gRPC\u3002<\/p>\n<\/div>\n<div class=\"resume-label highlight\">\u6838\u5fc3\u7ade\u4e89\u529b<\/div>\n<div class=\"resume-core\">\n<ul>\n<li>\u5e73\u53f0\u5316\u601d\u7ef4 \u2014 \u5c06\u9ad8\u9891\u3001\u91cd\u590d\u3001\u6613\u51fa\u9519\u7684\u5de5\u7a0b\u6d41\u7a0b\u62bd\u8c61\u4e3a\u53ef\u590d\u7528\u57fa\u7840\u8bbe\u65bd\uff0c\u5c4f\u853d\u5e95\u5c42\u590d\u6742\u6027\uff0c\u8ba9\u4e0a\u5c42\u5f00\u53d1\u8005\u6216 Agent \u4e13\u6ce8\u4e1a\u52a1<\/li>\n<li>\u591a\u6280\u672f\u6808\u73af\u5883\u6cbb\u7406\u7ecf\u9a8c \u2014 \u72ec\u7acb\u5efa\u8bbe\u8986\u76d6 PHP \/ Java \/ Ruby \/ Python \/ .NET \/ Node.js \u5171 13 \u4e2a\u7535\u5546\u5e73\u53f0\u7684\u6807\u51c6\u5316\u6d4b\u8bd5\u73af\u5883\u4f53\u7cfb<\/li>\n<li>\u591a\u67b6\u6784\u517c\u5bb9\u6df1\u5ea6\u5b9e\u8df5 \u2014 \u7cfb\u7edf\u89e3\u51b3 arm64\uff08\u672c\u5730 Mac\uff09\u4e0e amd64\uff08CI \/ \u4e91\uff09\u539f\u751f\u6269\u5c55\u4e0d\u517c\u5bb9\u95ee\u9898\uff0c\u4e09\u5c42\u955c\u50cf\u7f13\u5b58\u67b6\u6784\u53ef\u590d\u7528<\/li>\n<li>AI \u5de5\u5177\u94fe\u5de5\u7a0b\u5316 \u2014 \u6784\u5efa AI \u8f85\u52a9\u4ee3\u7801\u5206\u6790\u5de5\u5177\uff0c\u5c06 &lt;1 \u79d2\u4ee3\u7801\u5e93\u91c7\u6837\u4e0e\u591a\u6a21\u578b\u5206\u6790\u6574\u5408\u4e3a\u5f00\u53d1\u8005\u65e5\u5e38\u5de5\u5177<\/li>\n<li>\u6587\u6863\u6c89\u6dc0\u4e60\u60ef \u2014 \u6bcf\u4e2a\u73af\u5883\u95ee\u9898\u5747\u6709\u6839\u56e0\u5206\u6790\u548c\u53ef\u590d\u7528 pattern \u6587\u6863\uff0c\u5f62\u6210\u56e2\u961f\u77e5\u8bc6\u5e93\u800c\u975e\u4e2a\u4eba\u7ecf\u9a8c<\/li>\n<\/ul>\n<\/div>\n<hr>\n<h2>\u5de5\u4f5c\u7ecf\u5386<\/h2>\n<h3>PayPal \u8d1d\u5b9d\u652f\u4ed8<\/h3>\n<p><strong>\u5168\u6808\u5de5\u7a0b\u5e08 | Platform &amp; Tooling | 2024.07 &#8211; \u81f3\u4eca<\/strong><\/p>\n<p>2026 \u5e74\u4e3b\u8981\u627f\u62c5 AI \u652f\u4ed8\u8fc1\u79fb\u9a8c\u8bc1\u57fa\u7840\u8bbe\u65bd\u7684\u4ece\u96f6\u642d\u5efa\uff0c\u4e3a AI Agent \u548c\u5de5\u7a0b\u5e08\u63d0\u4f9b\u6807\u51c6\u5316\u591a\u6280\u672f\u6808\u7535\u5546\u6d4b\u8bd5\u73af\u5883\u3001\u81ea\u52a8\u5316\u9a8c\u8bc1\u6d41\u6c34\u7ebf\u548c AI \u8f85\u52a9\u5de5\u5177\u94fe\u3002<\/p>\n<div class=\"resume-label work\">\u5de5\u4f5c\u5185\u5bb9<\/div>\n<ul>\n<li>\u8bbe\u8ba1\u5e76\u5b9e\u73b0\u8986\u76d6 6 \u79cd\u8bed\u8a00\u6808\uff08PHP\u3001Java\u3001Ruby\u3001Python\u3001.NET\u3001Node.js\uff09\u5171 13 \u4e2a\u7535\u5546\u5e73\u53f0\u7684\u6807\u51c6\u5316 Docker \u6d4b\u8bd5\u73af\u5883\u4f53\u7cfb<\/li>\n<li>\u5efa\u7acb\u4e09\u5c42\u955c\u50cf\u7f13\u5b58\u67b6\u6784\uff08\u4f9d\u8d56\u7f13\u5b58\u5c42 + \u5e73\u53f0\u7f16\u8bd1\u5c42 + \u5e94\u7528\u955c\u50cf\u5c42\uff09\uff0c\u7edf\u4e00\u89e3\u51b3\u5404\u5e73\u53f0\u539f\u751f\u6269\u5c55\u591a\u67b6\u6784\u517c\u5bb9\u95ee\u9898<\/li>\n<li>\u5c01\u88c5\u81ea\u52a9\u542f\u52a8\u5de5\u5177\uff0c\u5b9e\u73b0\u73af\u5883\u53d8\u91cf\u6ce8\u5165\u3001\u67b6\u6784\u81ea\u52a8\u68c0\u6d4b\u3001volume \u9884\u586b\u5145\u3001\u6570\u636e\u5e93\u521d\u59cb\u5316\u4e00\u4f53\u5316\uff0c\u5c4f\u853d\u5e95\u5c42\u590d\u6742\u6027<\/li>\n<li>\u4f7f\u7528 Makefile \u7edf\u4e00\u5404\u5e73\u53f0\u64cd\u4f5c\u547d\u4ee4\u5165\u53e3\uff08start \/ stop \/ reset \/ test \/ build\uff09\uff0c\u5f62\u6210\u6807\u51c6\u5316\u5de5\u7a0b\u89c4\u8303<\/li>\n<li>\u6784\u5efa AI \u8f85\u52a9\u4ee3\u7801\u5206\u6790\u5de5\u5177\uff0c\u96c6\u6210 MCP + \u591a\u6a21\u578b\uff08Claude \/ GPT-4 \/ DeepSeek \/ Gemini\uff09\uff0c\u652f\u6301\u5927\u578b\u4ee3\u7801\u5e93\u5feb\u901f\u91c7\u6837\u5206\u6790\u548c Docker \u914d\u7f6e\u81ea\u52a8\u751f\u6210<\/li>\n<li>\u5efa\u7acb docker-compose-patterns.md \u548c issues-found.md \u77e5\u8bc6\u5e93\uff0c\u6309\u5b66\u4e60\u4ef7\u503c\u6392\u5e8f\u6c89\u6dc0\u73af\u5883\u5de5\u7a0b\u7ecf\u9a8c<\/li>\n<\/ul>\n<div class=\"resume-label impact\">\u5de5\u4f5c\u4e1a\u7ee9<\/div>\n<ul>\n<li>\u5efa\u8bbe 13 \u5e73\u53f0\u7535\u5546\u652f\u4ed8\u6d4b\u8bd5\u4f53\u7cfb\uff0c\u63a8\u9001 30+ JFrog \u53cc\u67b6\u6784\uff08arm64\/amd64\uff09\u955c\u50cf\uff0c\u652f\u6301\u79bb\u7ebf\u5b8c\u6574\u51b7\u542f\u52a8<\/li>\n<li>\u65b0\u9879\u76ee\u73af\u5883\u63a5\u5165\u65f6\u95f4\uff1a\u4ece\u6b64\u524d\u9700\u8981\u534a\u5929\u6392\u67e5\uff0c\u7f29\u77ed\u81f3 1-2 \u5c0f\u65f6<\/li>\n<li>Ruby gem \u51b7\u542f\u52a8\uff1a\u4ece 2 \u5206\u949f\u7f29\u77ed\u81f3 10 \u79d2\uff1bJava Maven \u6784\u5efa\uff1a\u4ece 5 \u5206\u949f\u7f29\u77ed\u81f3 10 \u79d2<\/li>\n<li>AI Agent \u53ef\u5728\u6d4b\u8bd5\u73af\u5883\u4e2d\u72ec\u7acb\u5b8c\u6210\u73af\u5883\u542f\u52a8 + \u652f\u4ed8\u6d41\u7a0b\u9a8c\u8bc1\uff0c\u65e0\u9700\u4eba\u5de5\u4ecb\u5165\u5904\u7406\u73af\u5883\u95ee\u9898<\/li>\n<li>\u5efa\u8bbe 60+ Playwright E2E \u6d4b\u8bd5\u7528\u4f8b\uff0c\u8986\u76d6\u8d2d\u4e70\u3001\u6388\u6743\u3001\u6355\u83b7\u3001\u53d6\u6d88\u3001\u9000\u6b3e\u7b49\u6838\u5fc3\u652f\u4ed8\u94fe\u8def<\/li>\n<li>\u8bc6\u522b\u5e76\u4fee\u590d OrbStack BuildKit \u72ec\u7acb\u7f51\u7edc\u547d\u540d\u7a7a\u95f4\u3001VirtioFS nested bind mount \u9759\u9ed8\u5931\u6548\u7b49\u590d\u6742\u5e73\u53f0\u95ee\u9898\uff0c\u4ea7\u51fa\u53ef\u590d\u7528\u89e3\u51b3\u65b9\u6848\u6587\u6863<\/li>\n<li>\u53c2\u4e0e Next.js 12\u219214\u3001Node.js 18\u219220 \u6280\u672f\u6808\u5347\u7ea7\uff1b\u8d1f\u8d23\u5ba2\u6237\u8eab\u4efd\u9a8c\u8bc1\u5e73\u53f0\u4ece 0 \u5230 1 \u5efa\u8bbe\u5e76\u4e0a\u7ebf<\/li>\n<\/ul>\n<div class=\"resume-stack\"><span class=\"tag\">Docker<\/span><span class=\"tag\">Makefile<\/span><span class=\"tag\">Python<\/span><span class=\"tag\">Shell<\/span><span class=\"tag\">JFrog<\/span><span class=\"tag\">Playwright<\/span><span class=\"tag\">Node.js<\/span><span class=\"tag\">Ruby<\/span><span class=\"tag\">Java<\/span><span class=\"tag\">PHP<\/span><span class=\"tag\">.NET<\/span><\/div>\n<h3>\u4e0a\u6d77\u5168\u7279\u4fe1\u606f\u79d1\u6280<\/h3>\n<p><strong>\u5168\u6808\u5de5\u7a0b\u5e08 | 2024.01 &#8211; 2024.06<\/strong><\/p>\n<p>\u8d1f\u8d23\u8fea\u58eb\u5c3c\u5ea6\u5047\u533a AI \u6570\u5b57\u4eba\u5ba2\u670d\u7cfb\u7edf\u524d\u7aef\u96c6\u6210\uff0c1 \u4e2a\u6708\u5b8c\u6210\u521d\u6b65\u8c03\u901a\u3002<\/p>\n<div class=\"resume-label work\">\u5de5\u4f5c\u5185\u5bb9<\/div>\n<ul>\n<li>\u4f7f\u7528 React\u3001Three.js\u3001react-three-fiber \u5b9e\u73b0 Web \u7aef 3D \u6570\u5b57\u4eba\u6e32\u67d3\u3001\u52a8\u4f5c\u548c\u8868\u60c5\u63a7\u5236<\/li>\n<li>\u96c6\u6210 Azure ASR \/ TTS \u8bed\u97f3\u8054\u52a8\uff0c\u89e3\u51b3 iOS \/ Android \u79fb\u52a8\u7aef WebGL\u3001\u97f3\u9891\u64ad\u653e\u517c\u5bb9\u95ee\u9898<\/li>\n<\/ul>\n<div class=\"resume-label impact\">\u5de5\u4f5c\u4e1a\u7ee9<\/div>\n<ul>\n<li>1 \u4e2a\u6708\u5185\u5b8c\u6210 AI \u6570\u5b57\u4eba\u7cfb\u7edf\u9996\u7248\u96c6\u6210\u8c03\u901a\uff0c\u652f\u6491\u9879\u76ee\u8fdb\u5165\u6f14\u793a\u9636\u6bb5<\/li>\n<\/ul>\n<div class=\"resume-stack\"><span class=\"tag\">React<\/span><span class=\"tag\">Next.js<\/span><span class=\"tag\">Three.js<\/span><span class=\"tag\">react-three-fiber<\/span><span class=\"tag\">Azure AI<\/span><span class=\"tag\">Socket.io<\/span><\/div>\n<h3>\u643a\u7a0b\u65c5\u6e38\u7f51\u7edc\u6280\u672f<\/h3>\n<p><strong>\u9ad8\u7ea7\u524d\u7aef\u5de5\u7a0b\u5e08 \u2192 \u8d44\u6df1\u524d\u7aef\u5de5\u7a0b\u5e08 | 2017.04 &#8211; 2024.01<\/strong><\/p>\n<p>\u8d1f\u8d23 Trip.com \u56fd\u9645\u7ad9 Blog \/ Destinations \u5185\u5bb9\u9891\u9053\u5f00\u53d1\u548c\u7ef4\u62a4\uff0c\u63a8\u52a8\u56e2\u961f React \/ Node.js \u6280\u672f\u8f6c\u578b\u3002<\/p>\n<div class=\"resume-label work\">\u5de5\u4f5c\u5185\u5bb9<\/div>\n<ul>\n<li>\u6784\u5efa\u90e8\u95e8\u9996\u4e2a Node.js SSR \u5185\u5bb9\u5e73\u53f0\uff0c\u63a8\u52a8\u56e2\u961f\u4ece .NET \u6280\u672f\u6808\u8fc1\u79fb\u5230 React \/ Node.js<\/li>\n<li>\u957f\u671f\u652f\u6491 Trip.com \u56fd\u9645\u7ad9\u591a\u8bed\u8a00\u5185\u5bb9\u9891\u9053\u8fed\u4ee3\uff0c\u6301\u7eed\u4f18\u5316 Core Web Vitals \u548c SEO \u8868\u73b0<\/li>\n<\/ul>\n<div class=\"resume-label impact\">\u5de5\u4f5c\u4e1a\u7ee9<\/div>\n<ul>\n<li>\u63a8\u52a8\u56e2\u961f\u6280\u672f\u6808\u8f6c\u578b\uff0c\u5efa\u7acb SSR \/ SEO \/ Hybrid \u591a\u7aef\u4ea4\u4ed8\u4f53\u7cfb<\/li>\n<li>\u65e5\u5e38\u5e26\u9886 2-4 \u4eba\u524d\u7aef\u5c0f\u7ec4\uff0c\u5efa\u7acb\u5f00\u53d1\u89c4\u8303\u3001Code Review \u548c\u6280\u672f\u5206\u4eab\u673a\u5236<\/li>\n<\/ul>\n<div class=\"resume-stack\"><span class=\"tag\">React<\/span><span class=\"tag\">Next.js<\/span><span class=\"tag\">Node.js<\/span><span class=\"tag\">Express<\/span><span class=\"tag\">Redis<\/span><span class=\"tag\">MySQL<\/span><span class=\"tag\">React Native<\/span><\/div>\n<h3>\u4e0a\u6d77\u4e45\u632f\u7f51\u7edc\u79d1\u6280<\/h3>\n<p><strong>\u524d\u7aef\u5de5\u7a0b\u5e08 \u2192 \u524d\u7aef\u5f00\u53d1\u7ecf\u7406 | 2015.03 &#8211; 2017.04<\/strong><\/p>\n<p>\u793e\u4ea4 APP \u7684 React Native \u8de8\u5e73\u53f0\u5f00\u53d1\uff0c\u652f\u6301 Android \/ iOS \u53cc\u5e73\u53f0\u6838\u5fc3\u529f\u80fd\uff1b\u7ba1\u7406 4-7 \u4eba\u524d\u7aef\u56e2\u961f\uff0c\u642d\u5efa Jenkins \u591a\u5206\u652f\u81ea\u52a8\u5316\u7f16\u8bd1\u6d41\u7a0b\u3002<\/p>\n<div class=\"resume-stack\"><span class=\"tag\">React<\/span><span class=\"tag\">React Native<\/span><span class=\"tag\">Node.js<\/span><span class=\"tag\">PHP<\/span><span class=\"tag\">MySQL<\/span><span class=\"tag\">Jenkins<\/span><\/div>\n<h3>\u8fc8\u667a\u5fae\u7535\u5b50\uff08\u4e0a\u6d77\uff09<\/h3>\n<p><strong>\u8f6f\u4ef6\u5de5\u7a0b\u5e08 | 2009.10 &#8211; 2015.03<\/strong><\/p>\n<p>\u8d1f\u8d23\u5168\u5bb6\u62cd Hybrid \u79fb\u52a8 APP \u5f00\u53d1\uff0c\u5b9e\u73b0\u7167\u7247\u7ba1\u7406\u4e0e\u5206\u4eab\u529f\u80fd\uff1b\u8d1f\u8d23\u8def\u7531\u5668\u5d4c\u5165\u5f0f Boa WebServer \u53ca\u7ba1\u7406\u754c\u9762\u5f00\u53d1\uff0c\u53c2\u4e0e\u4e2d\u7f8e\u56e2\u961f\u534f\u4f5c\u3002<\/p>\n<div class=\"resume-stack\"><span class=\"tag\">Cordova<\/span><span class=\"tag\">HTML5<\/span><span class=\"tag\">JavaScript<\/span><span class=\"tag\">Java<\/span><span class=\"tag\">Linux<\/span><span class=\"tag\">C<\/span><span class=\"tag\">Shell<\/span><\/div>\n<h3>\u4e2d\u5174\u901a\u8baf\u80a1\u4efd\u6709\u9650\u516c\u53f8<\/h3>\n<p><strong>\u8f6f\u4ef6\u5de5\u7a0b\u5e08 | 2008.10 &#8211; 2009.10<\/strong><\/p>\n<p>\u8d1f\u8d23 3G \u7f51\u7ba1\u5e73\u53f0\u544a\u8b66\u6a21\u5757\u5f00\u53d1\uff0c\u5b9e\u73b0\u544a\u8b66\u4efb\u52a1\u5904\u7406\u548c\u684c\u9762\u5ba2\u6237\u7aef\u5c55\u793a\u3002<\/p>\n<div class=\"resume-stack\"><span class=\"tag\">Java<\/span><span class=\"tag\">Swing<\/span><span class=\"tag\">EJB<\/span><span class=\"tag\">JBoss<\/span><span class=\"tag\">Oracle<\/span><\/div>\n<h3>\u7b56\u5824\u7279\u4fe1\u606f\u79d1\u6280\uff08\u4e0a\u6d77\uff09<\/h3>\n<p><strong>\u8f6f\u4ef6\u5de5\u7a0b\u5e08 \u2192 \u6280\u672f\u7ecf\u7406 | 2007.04 &#8211; 2008.10<\/strong><\/p>\n<p>\u8d1f\u8d23\u79df\u623f\u7f51\u7ad9\u3001\u533b\u751f\u9884\u7ea6\u7b49 Web \u9879\u76ee\u5f00\u53d1\uff0c\u7ba1\u7406 3 \u4eba\u6280\u672f\u56e2\u961f\u3002<\/p>\n<div class=\"resume-stack\"><span class=\"tag\">Java<\/span><span class=\"tag\">Struts<\/span><span class=\"tag\">Spring<\/span><span class=\"tag\">PHP<\/span><span class=\"tag\">JavaScript<\/span><span class=\"tag\">jQuery<\/span><\/div>\n<h3>\u6c5f\u82cf\u7701\u91d1\u601d\u7ef4\u4fe1\u606f\u6280\u672f<\/h3>\n<p><strong>\u8f6f\u4ef6\u5de5\u7a0b\u5e08 | 2005.04 &#8211; 2007.04<\/strong><\/p>\n<p>\u8d1f\u8d23\u4f01\u4e1a CRM \u7cfb\u7edf\u5b9a\u5236\u5f00\u53d1\u548c\u9879\u76ee\u5b9e\u65bd\u3002<\/p>\n<div class=\"resume-stack\"><span class=\"tag\">Java<\/span><span class=\"tag\">JavaScript<\/span><span class=\"tag\">Struts<\/span><span class=\"tag\">Tomcat<\/span><span class=\"tag\">MS SQL Server<\/span><\/div>\n<hr>\n<h2>\u9879\u76ee\u7ecf\u5386<\/h2>\n<h3>PayPal &#8211; \u591a\u6280\u672f\u6808\u7535\u5546\u6d4b\u8bd5\u73af\u5883\u5e73\u53f0<\/h3>\n<div class=\"project-meta\">2026 | Docker\u3001JFrog\u3001Shell\u3001Makefile\u3001Playwright\u3001\u591a\u8bed\u8a00\u6280\u672f\u6808<\/div>\n<p>\u4e3a AI \u652f\u4ed8\u96c6\u6210\u9a8c\u8bc1\u56e2\u961f\u8bbe\u8ba1\u5e76\u5b9e\u73b0\u7edf\u4e00\u6d4b\u8bd5\u73af\u5883\u57fa\u7840\u8bbe\u65bd\uff0c\u76ee\u6807\u662f\u8ba9 AI Agent \u548c\u5de5\u7a0b\u5e08\u62ff\u5230\u9879\u76ee\u540e\uff0c\u4e0d\u4e86\u89e3\u5e95\u5c42\u7ec6\u8282\u4e5f\u80fd\u5728 5 \u5206\u949f\u5185\u8dd1\u8d77\u6765\uff0c\u4e14 arm64 \/ amd64 \u884c\u4e3a\u4e00\u81f4\u3002<\/p>\n<ul>\n<li>\u8986\u76d6 PHP\u00d76 + Python\u00d71 + Java\u00d72 + .NET\u00d72 + Node.js\u00d71 + Ruby\u00d71 \u5171 13 \u4e2a\u7535\u5546\u5e73\u53f0\uff0c20+ \u72ec\u7acb Docker \u73af\u5883<\/li>\n<li>\u4e09\u5c42\u955c\u50cf\u7f13\u5b58\u67b6\u6784\uff1a\u4ee5 Ruby \u4e3a\u4f8b\uff0c\u62c6\u5206\u4e3a gem-cache\uff08\u5e73\u53f0\u65e0\u5173 gem \u6e90\u7801\uff09\u2192 bundle-cache\uff08\u5404\u67b6\u6784\u539f\u751f\u6269\u5c55\u7f16\u8bd1\u4ea7\u7269\uff09\u2192 \u5e94\u7528\u955c\u50cf\uff0c\u89e3\u51b3 arm64\/amd64 \u539f\u751f\u6269\u5c55\u4e0d\u517c\u5bb9\u95ee\u9898<\/li>\n<li>\u79bb\u7ebf\u51b7\u542f\u52a8\uff1anpm prebuild-cache\uff08@next\/swc\u3001better-sqlite3 \u7b49\uff09\u548c Maven \u4f9d\u8d56\u955c\u50cf\u9884\u6253\u5305\u8fdb JFrog\uff0c\u5bb9\u5668\u6309\u67b6\u6784\u81ea\u52a8\u9009\u53d6\uff0c\u65e0\u9700\u5916\u7f51<\/li>\n<li>\u81ea\u52a9\u542f\u52a8\u63a5\u53e3\uff1a\u5bf9\u5916\u53ea\u66b4\u9732\u51e0\u4e2a\u73af\u5883\u53d8\u91cf\uff0c\u5168\u90e8\u521d\u59cb\u5316\u7ec6\u8282\uff08\u955c\u50cf\u62c9\u53d6\u3001volume \u586b\u5145\u3001\u51ed\u636e\u6ce8\u5165\u3001\u6570\u636e\u5e93\u521d\u59cb\u5316\uff09\u7531\u5de5\u5177\u5185\u90e8\u5904\u7406<\/li>\n<li>Makefile \u7edf\u4e00\u5165\u53e3\uff1a\u5404\u5e73\u53f0\u7edf\u4e00 start \/ stop \/ reset \/ test \/ build \u547d\u4ee4\uff0cAI Agent \u53ef\u76f4\u63a5\u8c03\u7528<\/li>\n<\/ul>\n<h3>AI \u8f85\u52a9\u4ee3\u7801\u5206\u6790\u5de5\u5177<\/h3>\n<div class=\"project-meta\">2026 | Python\u3001FastAPI\u3001MCP\u3001Claude \/ GPT-4 \/ DeepSeek \/ Gemini<\/div>\n<p>\u9762\u5411\u5927\u578b\u4ee3\u7801\u5e93\u5feb\u901f\u5206\u6790\u573a\u666f\uff0c&lt;1 \u79d2\u91c7\u6837\u5206\u6790 4000+ \u6587\u4ef6\u9879\u76ee\uff0c\u591a\u6a21\u578b\u534f\u4f5c\u751f\u6210\u4ee3\u7801\u7ed3\u6784\u6d1e\u5bdf\u548c Docker \u914d\u7f6e\u3002<\/p>\n<ul>\n<li>\u96c6\u6210 MCP \u5de5\u5177\u94fe\uff0c\u5b9e\u73b0\u4ee3\u7801\u5e93\u7ed3\u6784\u91c7\u6837\u3001\u6280\u672f\u6808\u8bc6\u522b\u3001\u4f9d\u8d56\u5206\u6790\u548c\u914d\u7f6e\u6587\u4ef6\u751f\u6210<\/li>\n<li>\u652f\u6301 Claude \/ GPT-4 \/ DeepSeek \/ Gemini \u591a\u6a21\u578b\u63a5\u5165\uff0c\u53ef\u6309\u573a\u666f\u548c\u6210\u672c\u8def\u7531<\/li>\n<li>\u81ea\u52a8\u751f\u6210 Dockerfile \u548c docker-compose.yml \u8349\u7a3f\uff0c\u5f00\u53d1\u8005\u53ea\u9700\u8c03\u6574\u73af\u5883\u53d8\u91cf\u5373\u53ef\u542f\u52a8<\/li>\n<\/ul>\n<p><strong>\u4e2a\u4eba\u540c\u7c7b\u65b9\u5411\u65e9\u671f\u5b9e\u8df5<\/strong>\uff1a<a href=\"https:\/\/github.com\/erishen\/ai-analyze\">ai-analyze<\/a> \u2014 \u57fa\u4e8e MCP + Serena \u7684\u4ee3\u7801\u5e93\u91c7\u6837\u5206\u6790\u5de5\u5177<\/p>\n<h3>PayPal &#8211; \u5927\u89c4\u6a21\u5546\u6237\u7ad9\u70b9\u626b\u63cf\u5206\u6790<\/h3>\n<div class=\"project-meta\">2026 | Python\u3001Playwright\u3001DNS\u3001HTTP\u3001\u6570\u636e\u5206\u6790<\/div>\n<p>\u5bf9\u6570\u5341\u4e07\u5546\u6237 URL \u8fdb\u884c\u5206\u5c42\u626b\u63cf\uff0c\u8bc6\u522b\u65e7\u7248\u652f\u4ed8\u96c6\u6210\u7ad9\u70b9\uff0c\u652f\u6491\u4e1a\u52a1\u56e2\u961f\u8fc1\u79fb\u51b3\u7b56\u3002<\/p>\n<ul>\n<li>DNS \u9884\u68c0 + HTTP \u9759\u6001\u626b\u63cf + Playwright \u6df1\u5ea6\u63a2\u7d22\u4e09\u5c42\u67b6\u6784\uff0c\u9010\u5c42\u8fc7\u6ee4\u65e0\u6548\u76ee\u6807<\/li>\n<li>\u8bc6\u522b\u6570\u5343\u4e2a WPS \u65e7\u7248\u652f\u4ed8\u96c6\u6210\u7ad9\u70b9\uff0c\u5206\u6790 auto-submit \/ encrypted \/ hosted \/ cart \u7b49\u96c6\u6210\u6a21\u5f0f\u5206\u5e03<\/li>\n<li>\u6574\u5408\u4e09\u6e90\u5a01\u80c1\u60c5\u62a5\uff08URLhaus \/ Phishing.Army \/ HaGeZi\uff09\uff0c\u81ea\u52a8\u8fc7\u6ee4\u6076\u610f\u7ad9\u70b9<\/li>\n<li>\u4ea7\u51fa\u591a\u5206\u7c7b\u7ed3\u6784\u5316\u7ad9\u70b9\u6570\u636e\u96c6\uff0c\u76f4\u63a5\u652f\u6491\u4e1a\u52a1\u56e2\u961f\u8fc1\u79fb\u4f18\u5148\u7ea7\u51b3\u7b56<\/li>\n<\/ul>\n<h3>PayPal &#8211; \u5ba2\u6237\u8eab\u4efd\u9a8c\u8bc1\u5e73\u53f0<\/h3>\n<div class=\"project-meta\">2025 | Next.js\u3001Node.js\u3001Express\u3001Redis\u3001gRPC\u3001K8s<\/div>\n<p>\u7531\u672c\u4eba\u8d1f\u8d23\u4ece 0 \u5230 1 \u7684\u8bbe\u8ba1\u5f00\u53d1\u3001\u6d4b\u8bd5\u9a8c\u8bc1\u3001\u5b89\u5168\u5ba1\u8ba1\u548c\u751f\u4ea7\u53d1\u5e03\u3002<\/p>\n<ul>\n<li>\u642d\u5efa\u9879\u76ee\u57fa\u7840\u7ed3\u6784\u3001\u9875\u9762\u8def\u7531\u3001BFF API\u3001Redis \u7f13\u5b58\u548c K8s \u751f\u4ea7\u90e8\u7f72\u914d\u7f6e<\/li>\n<li>\u5b9e\u73b0\u9690\u79c1\u653f\u7b56\u7ba1\u7406\u548c\u7528\u6237\u6388\u6743\u8ffd\u8e2a\uff0c\u6ee1\u8db3 PIPL \u5408\u89c4\u8981\u6c42<\/li>\n<\/ul>\n<h3>\u5168\u7279\u79d1\u6280 &#8211; \u8fea\u58eb\u5c3c AI \u6570\u5b57\u4eba\u5ba2\u670d<\/h3>\n<div class=\"project-meta\">2024 | React\u3001Next.js\u3001Three.js\u3001react-three-fiber\u3001Azure AI<\/div>\n<ul>\n<li>\u63a5\u5165 3D \u6570\u5b57\u4eba\u6a21\u578b\uff0c\u5b9e\u73b0 Web \u7aef\u6e32\u67d3\u3001Azure ASR \/ TTS \u8bed\u97f3\u8054\u52a8\u3001\u53e3\u578b\u540c\u6b65\uff1b1 \u4e2a\u6708\u5b8c\u6210\u9996\u7248<\/li>\n<\/ul>\n<h3>\u643a\u7a0b \/ Trip.com &#8211; \u56fd\u9645\u7ad9\u5185\u5bb9\u5e73\u53f0<\/h3>\n<div class=\"project-meta\">2020 &#8211; 2024 | React\u3001Next.js\u3001Node.js\u3001Express\u3001SSR\u3001Redis\u3001MySQL<\/div>\n<p><strong>\u9879\u76ee\u94fe\u63a5<\/strong>\uff1a<a href=\"https:\/\/www.trip.com\/blog\">Trip.com Blog<\/a><\/p>\n<ul>\n<li>\u6784\u5efa\u90e8\u95e8\u9996\u4e2a Node.js SSR \u5185\u5bb9\u5e73\u53f0\uff0c\u63a8\u52a8\u56e2\u961f\u4ece .NET \u6280\u672f\u6808\u8f6c\u578b<\/li>\n<li>\u957f\u671f\u8d1f\u8d23 Trip.com Blog \/ Destinations \u591a\u8bed\u8a00\u5185\u5bb9\u9891\u9053\uff0c\u4f18\u5316 Core Web Vitals \u548c SEO<\/li>\n<\/ul>\n<hr>\n<h2>\u4e2a\u4eba\u5f00\u6e90\u5b9e\u8df5<\/h2>\n<p>\u56f4\u7ed5\u5f00\u53d1\u8005\u5de5\u5177\u3001CLI \u5de5\u7a0b\u548c\u5e73\u53f0\u6807\u51c6\u5316\u6301\u7eed\u505a\u4e2a\u4eba\u5b9e\u9a8c\uff0c\u5747\u4e3a\u4e2a\u4eba\u516c\u5f00\u9879\u76ee\u3002<\/p>\n<p><strong>\u5f00\u53d1\u8005\u5de5\u5177 \/ CLI<\/strong>\uff1a<a href=\"https:\/\/github.com\/erishen\/lobster\">lobster<\/a>\u3001<a href=\"https:\/\/github.com\/erishen\/nsgm\">nsgm<\/a> \u2014 OpenAI Function Calling \u517c\u5bb9\u5de5\u5177\u6ce8\u518c\u8868 + REST API\uff08\u9762\u5411 AI Agent \u6807\u51c6\u5316\u5de5\u5177\u8c03\u7528\uff09\uff1bNext.js + GraphQL + MySQL \u5168\u6808\u4ee3\u7801\u751f\u6210\u811a\u624b\u67b6\uff0894+ \u6b21\u63d0\u4ea4\u6301\u7eed\u7ef4\u62a4\uff09<\/p>\n<p><strong>\u7ec4\u4ef6\u6ce8\u518c\u8868 \/ \u6587\u6863\u5e73\u53f0<\/strong>\uff1a<a href=\"https:\/\/erishen.github.io\/shadcn-registry\">shadcn-registry<\/a> \u2014 \u81ea\u5efa shadcn\/ui \u7ec4\u4ef6\u6ce8\u518c\u8868 + Storybook 9 \u6587\u6863\u7ad9\uff0c\u4f53\u73b0\u5185\u90e8\u7ec4\u4ef6\u5206\u53d1\u4e0e\u6807\u51c6\u5316\u7684\u5e73\u53f0\u5de5\u7a0b\u601d\u8def<\/p>\n<hr>\n<h2>\u6559\u80b2\u7ecf\u5386<\/h2>\n<div class=\"resume-edu\"><strong>\u5357\u4eac\u4fe1\u606f\u5de5\u7a0b\u5927\u5b66 | \u4fe1\u606f\u4e0e\u8ba1\u7b97\u79d1\u5b66\uff08\u672c\u79d1\uff09 | 2001 &#8211; 2005<\/strong><\/div>\n<h2>\u6c42\u804c\u671f\u671b<\/h2>\n<div class=\"resume-target\"><strong>\u671f\u671b\u804c\u4f4d<\/strong>\uff1aPlatform Engineer \/ Developer Productivity Engineer \/ DevOps \/ Tooling Engineer<br \/>\n<strong>\u5de5\u4f5c\u5730\u70b9<\/strong>\uff1a\u4e0a\u6d77\u4f18\u5148\uff0c\u53ef\u8003\u8651\u8fdc\u7a0b<br \/>\n<strong>\u5230\u5c97\u65f6\u95f4<\/strong>\uff1a\u968f\u65f6<br \/>\n<strong>\u7406\u60f3\u65b9\u5411<\/strong>\uff1a\u5f00\u53d1\u8005\u5e73\u53f0\u3001\u5185\u90e8\u5de5\u5177\u3001AI \u5de5\u5177\u94fe\u3001\u91d1\u878d\u79d1\u6280\u57fa\u7840\u8bbe\u65bd\u3001DevX \u5de5\u7a0b<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>> \u5168\u6808\u5de5\u7a0b\u5e95\u5ea7 | PayPal \u91d1\u878d\u79d1\u6280 | \u5f00\u53d1\u8005\u5e73\u53f0\u5efa\u8bbe | \u73af\u5883\u81ea\u52a8\u5316 \/ \u591a\u6280\u672f\u6808 \/ AI \u5de5\u5177 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"english_url":"","chinese_url":"","footnotes":""},"class_list":["post-367","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/erishen.cn\/index.php?rest_route=\/wp\/v2\/pages\/367","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/erishen.cn\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/erishen.cn\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/erishen.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/erishen.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=367"}],"version-history":[{"count":2,"href":"https:\/\/erishen.cn\/index.php?rest_route=\/wp\/v2\/pages\/367\/revisions"}],"predecessor-version":[{"id":372,"href":"https:\/\/erishen.cn\/index.php?rest_route=\/wp\/v2\/pages\/367\/revisions\/372"}],"wp:attachment":[{"href":"https:\/\/erishen.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=367"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}