-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.xml
More file actions
568 lines (532 loc) · 40.9 KB
/
Copy pathindex.xml
File metadata and controls
568 lines (532 loc) · 40.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>介绍 on UZPENG</title><link>https://UZPENG.github.io/</link><description>Recent content in 介绍 on UZPENG</description><generator>Hugo -- gohugo.io</generator><language>zh</language><copyright>© 2026 UZPENG</copyright><lastBuildDate>Fri, 13 Feb 2026 15:55:45 +0800</lastBuildDate><atom:link href="https://UZPENG.github.io/index.xml" rel="self" type="application/rss+xml"/><item><title>Vibe Coding时代我们应该做些什么</title><link>https://UZPENG.github.io/posts/living_under_vibe_coding/</link><pubDate>Fri, 13 Feb 2026 15:55:45 +0800</pubDate><guid>https://UZPENG.github.io/posts/living_under_vibe_coding/</guid><description><h2 class="relative group">前言
<div id="前言" class="anchor"></div>
<span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
<a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%89%8d%e8%a8%80" aria-label="锚点">#</a>
</span>
</h2>
<p>由于大模型的出现,软件开发产生了革命性的变化,当前<code>prompt+Agent</code>的使用大大提升了开发效率,欢迎来到 <code>Vibe Coding</code> 时代!</p></description></item><item><title>漫谈博客来时路</title><link>https://UZPENG.github.io/posts/talk_about_my_old_blog/</link><pubDate>Sun, 25 Jan 2026 07:47:20 +0800</pubDate><guid>https://UZPENG.github.io/posts/talk_about_my_old_blog/</guid><description><h2 class="relative group">前言
<div id="前言" class="anchor"></div>
<span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
<a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%89%8d%e8%a8%80" aria-label="锚点">#</a>
</span>
</h2>
<p>在重启博客之际,回顾自己7年前的老博客,不由心生感慨:“撒老师,我没白活!”</p></description></item><item><title>重启博客杂谈</title><link>https://UZPENG.github.io/posts/restart_blog/</link><pubDate>Fri, 28 Nov 2025 23:04:01 +0800</pubDate><guid>https://UZPENG.github.io/posts/restart_blog/</guid><description><h2 class="relative group">为什么一直没有更新博客
<div id="为什么一直没有更新博客" class="anchor"></div>
<span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
<a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%b8%ba%e4%bb%80%e4%b9%88%e4%b8%80%e7%9b%b4%e6%b2%a1%e6%9c%89%e6%9b%b4%e6%96%b0%e5%8d%9a%e5%ae%a2" aria-label="锚点">#</a>
</span>
</h2>
<p>翻了翻自己的博客记录,最新一篇博客是2018年11月,距离现在已经7年有余了。18年那会才刚毕业,也就是说毕业这么多年,博客从来没有更新过。</p></description></item><item><title>简历</title><link>https://UZPENG.github.io/page/resume/</link><pubDate>Thu, 20 Nov 2025 00:00:00 +0000</pubDate><guid>https://UZPENG.github.io/page/resume/</guid><description><div class="resume-page">
<div class="resume-sidebar" id="resumeSidebar">
<a href="#sec-profile" class="sidebar-link active">个人信息</a>
<a href="#sec-skills" class="sidebar-link">技术栈</a>
<a href="#sec-history" class="sidebar-link">履历</a>
<a href="#sec-honors" class="sidebar-link">荣誉</a>
<a href="#sec-projects" class="sidebar-link">项目实践</a>
</div>
<div class="resume-body">
<!-- ====== 个人信息 ====== -->
<div class="resume-card" id="sec-profile">
<h3>个人信息</h3>
<div class="project-tabs" id="profileTabs">
<div class="tab-nav">
<button class="tab-btn active" data-tab="0">基础信息</button>
<button class="tab-btn" data-tab="1">更多信息</button>
<button class="tab-btn" data-tab="2">现状</button>
</div>
<div class="tab-pane active" data-tab="0">
<table class="r-table">
<tr><td class="r-key">我的邮箱</td><td class="r-val"><a href="mailto:lotgit150@gmail.com" class="lang-tag lang-active email-link">📧 lotgit150@gmail.com</a></td></tr>
<tr><td class="r-key">开发语言</td><td class="r-val">
<span class="lang-tag lang-active"><img src="https://UZPENG.github.io/icons/python.svg" class="lang-icon" alt="Python"> Python 主力</span>
<span class="lang-tag lang-active"><img src="https://UZPENG.github.io/icons/java.svg" class="lang-icon" alt="Java"> Java 熟悉</span>
<span class="lang-tag lang-active"><img src="https://UZPENG.github.io/icons/golang.svg" class="lang-icon" alt="Golang"> Golang 了解</span>
<span class="lang-tag lang-learning"><img src="https://UZPENG.github.io/icons/rust.svg" class="lang-icon" alt="Rust"> Rust 学习中</span>
<span class="lang-tag lang-past"><img src="https://UZPENG.github.io/icons/php.svg" class="lang-icon" alt="PHP"> PHP 已废弃</span>
</td></tr>
<tr><td class="r-key">擅长领域</td><td class="r-val">
<span class="lang-tag lang-active">后端开发</span>
<span class="lang-tag lang-active">数据工程</span>
<span class="lang-tag lang-active">数据分析</span>
</td></tr>
</table>
</div>
<div class="tab-pane" data-tab="1">
<table class="r-table">
<tr><td class="r-key">人生信条</td><td class="r-val">互利互惠,合作共赢 / <span class="profile-en">Help each other, Win together</span></td></tr>
<tr><td class="r-key">技术理念</td><td class="r-val">技术深入(<span class="profile-en">Technology</span>) / 业务精通(<span class="profile-en">Business</span>) / 强力执行(<span class="profile-en">Execution</span>) / 大胆突破(<span class="profile-en">Innovation</span>)</td></tr>
<tr><td class="r-key">基础能力</td><td class="r-val">扎实的操作系统、体系结构、计算机网络、数据结构和算法基础</td></tr>
<tr><td class="r-key">管理理念</td><td class="r-val">懂管理,才是一名优秀的执行者;懂业务,才是一名出色的技术人员</td></tr>
</table>
</div>
<div class="tab-pane" data-tab="2">
<table class="r-table">
<tr><td class="r-key">AI 辅助研发</td><td class="r-val">热衷研究一切AI技术,同时也保持对AI的<a href="https://UZPENG.github.io/posts/living_under_vibe_coding/">深度思考</a></br>日常使用:Claude、Hermes | GLM Coding Plan、Deepseek V4 <br> 持续探索: SSD、Skill、MCP、Memory </td></tr>
<tr><td class="r-key">技术关注点</td><td class="r-val">关注 Rust+Python 的未来,相信 Python 的高效率和 Rust 的高性能是最好的组合</td></tr>
</table>
</div>
</div>
</div>
<!-- ====== 技术栈 ====== -->
<div class="resume-card" id="sec-skills">
<h3>技术栈</h3>
<div class="project-tabs" id="skillTabs">
<div class="tab-nav">
<button class="tab-btn active" data-tab="0">通用技术</button>
<button class="tab-btn" data-tab="1">后端开发</button>
<button class="tab-btn" data-tab="2">数据分析</button>
</div>
<div class="tab-pane active" data-tab="0">
<div class="skills-grid">
<div class="skill-column">
<table class="r-table">
<tr><td class="r-key">开发工具</td><td class="r-val">Linux、Git<br/>VSCode、Claude Code、</td></tr>
<tr><td class="r-key">网络</td><td class="r-val">精通 HTTP/HTTPS 协议<br/>熟悉密码学概念与实践</td></tr>
</table>
</div>
<div class="skill-column">
<table class="r-table">
<tr><td class="r-key">容器化</td><td class="r-val">Docker 容器化部署<br/>K8s 编排管理</td></tr>
<tr><td class="r-key">认证权限</td><td class="r-val">TOKEN / JWT 认证<br/>RBAC / ABAC 权限模型</td></tr>
</table>
</div>
<div class="skill-column">
<table class="r-table">
<tr><td class="r-key">中间件</td><td class="r-val">Kafka 消息队列<br/>Flink 流批一体</td></tr>
<tr><td class="r-key">可观测性</td><td class="r-val">Grafana 全栈套件<br/>日志 + 指标 + 追踪</td></tr>
</table>
</div>
<div class="skill-column">
<table class="r-table">
<tr><td class="r-key">数据库</td><td class="r-val">PostgreSQL<br/>MySQL 关系型数据库</td></tr>
</table>
</div>
</div>
</div>
<div class="tab-pane" data-tab="1">
<div class="skills-grid-3cols">
<div class="skill-column">
<table class="r-table">
<tr><td class="r-key">Web框架</td><td class="r-val">FastAPI 异步框架 <br> Django 同步但生态成熟</td></tr>
<tr><td class="r-key">其他框架</td><td class="r-val">SQLAlchemy ORM框架 <br> Pydantic 数据模型和校验</td></tr>
</table>
</div>
<div class="skill-column">
<table class="r-table">
<tr><td class="r-key">API文档</td><td class="r-val">OpenAPI 规范 <br> Swagger / ReDoc 实现</td></tr>
<tr><td class="r-key">任务调度</td><td class="r-val">Celery / APScheduler</td></tr>
</table>
</div>
<div class="skill-column">
<table class="r-table">
</table>
</div>
</div>
</div>
<div class="tab-pane" data-tab="2">
<div class="skills-grid-3cols">
<div class="skill-column">
<table class="r-table">
<tr><td class="r-key">数据处理</td><td class="r-val">Polars 首选 </br> Pandas 备选和兼容 </td></tr>
<tr><td class="r-key">可视化</td><td class="r-val">Plotly 绘图 <br> Marimo 交互式笔记本</td></tr>
</table>
</div>
<div class="skill-column">
<table class="r-table">
<tr><td class="r-key">机器学习</td><td class="r-val">西瓜书基础</br>Scikit-learn/LightGBM/XGBoost</td></tr>
<tr><td class="r-key">数据存储</td><td class="r-val">CSV 简单通用 </br> Parquet 列式存储</td></tr>
</table>
</div>
<div class="skill-column">
<table class="r-table">
</table>
</div>
</div>
</div>
</div>
</div>
<!-- ====== 履历 ====== -->
<div class="resume-card" id="sec-history">
<h3>履历</h3>
<div class="resume-timeline">
<div class="timeline-item">
<div class="timeline-date">2014.09 &ndash; 2018.06</div>
<div class="timeline-content">深圳大学 / 计算机科学与技术 / 本科</div>
</div>
<div class="timeline-item">
<div class="timeline-date">2018.08 &ndash; 2024.02</div>
<div class="timeline-content">深圳用图科技有限公司 / 后端开发工程师、数据挖掘工程师、产品经理(兼任)</div>
</div>
<div class="timeline-item">
<div class="timeline-date">2024.02 &ndash; 2025.04</div>
<div class="timeline-content">GAP</div>
</div>
<div class="timeline-item">
<div class="timeline-date">2025.04 &mdash; 至今</div>
<div class="timeline-content">某厂 / 数据分析师</div>
</div>
</div>
</div>
<!-- ====== 荣誉 ====== -->
<!-- ====== 证书和荣誉 ====== -->
<div class="resume-card" id="sec-honors">
<h3>证书和荣誉</h3>
<div class="honor-list">
<span class="honor-badge">CET-4</span>
<span class="honor-badge">2018 &mdash; 最佳新人</span>
<span class="honor-badge">2020 / 2021 &mdash; 优秀员工</span>
<span class="honor-badge">2025 &mdash; 优秀新员工</span>
</div>
</div>
<!-- ====== 项目实践 ====== -->
<div class="resume-card" id="sec-projects">
<h3>项目实践</h3>
<div class="project-tabs" id="projectTabs">
<div class="tab-nav">
<button class="tab-btn active" data-tab="0">内部管理系统</button>
<button class="tab-btn" data-tab="1">资讯与快讯</button>
<button class="tab-btn" data-tab="2">云迁移与优化</button>
<button class="tab-btn" data-tab="3">资产统计系统</button>
<button class="tab-btn" data-tab="4">交易策略系统</button>
</div>
<div class="tab-pane active" data-tab="0">
<div class="project-tags">
<span class="project-tag">Laravel</span>
<span class="project-tag">MySQL</span>
<span class="project-tag">MongoDB</span>
<span class="project-tag">RBAC</span>
<span class="project-tag">K8S</span>
<span class="project-tag">CI/CD</span>
</div>
<ul class="project-details">
<li>基于 Laravel + MySQL + MongoDB 开发,Gitlab CI/CD 构建发布,K8S 部署</li>
<li>功能模块涵盖 RBAC 权限管理、用户管理、币种/平台/交易对管理、资讯快讯管理及动态配置管理</li>
<li>提出并落地基于 MongoDB 的模板化开发模式,大幅提升信息类模块的开发效率</li>
<li>构建管理后台公共组件库,完善单元测试和接口自动化测试并在组内推广,显著提升开发效率与代码质量</li>
</ul>
</div>
<div class="tab-pane" data-tab="1">
<div class="project-tags">
<span class="project-tag">Scrapy</span>
<span class="project-tag">tf-idf</span>
<span class="project-tag">ElasticSearch</span>
<span class="project-tag">MongoDB</span>
<span class="project-tag">K8S</span>
</div>
<ul class="project-details">
<li>使用 Scrapy 爬取快讯与资讯,基于 tf-idf 相似度算法去重,MongoDB/MySQL 入库并同步 ElasticSearch 支持搜索</li>
<li>编写推送转发中心,对接推送系统实现内容自动分发</li>
<li>支持资讯投稿全流程:提交、审核、发布</li>
<li>提供 RESTFUL API 供应用层访问</li>
</ul>
</div>
<div class="tab-pane" data-tab="2">
<div class="project-tags">
<span class="project-tag">Golang</span>
<span class="project-tag">ELK</span>
<span class="project-tag">性能优化</span>
<span class="project-tag">云迁移</span>
</div>
<ul class="project-details">
<li>参与两次公司云迁移,负责后端服务与数据库迁移的沟通和执行</li>
<li>编写后端公共库,完善单元测试体系,提升整体开发效率</li>
<li>利用云压测工具进行全链路压测,输出性能报告并针对性优化:短连接改长连接、增加接口缓存、减少轮询</li>
<li>重构后台任务系统,模板化任务定义,自动扫描目录启动任务</li>
<li>建立 ELK 日志体系,支持日志检索和告警</li>
<li>使用 Golang 重构系统核心接口服务,将系统接口负载从 <strong>180+ 核降至 70+ 核</strong></li>
</ul>
</div>
<div class="tab-pane" data-tab="3">
<div class="project-tags">
<span class="project-tag">Python</span>
<span class="project-tag">Redis</span>
<span class="project-tag">Kafka</span>
<span class="project-tag">InfluxDB</span>
<span class="project-tag">Vegeta</span>
</div>
<ul class="project-details">
<li>基于 Python/Redis/Kafka/InfluxDB 开发,pytest 单元测试,Gitlab CI/CD 构建,K8S 部署</li>
<li>解决原有统计维度少、收益汇总不准确的问题,支持每日盈亏、历史盈亏、收益日历和收益走势</li>
<li>使用 Vegeta(Golang 压测工具)进行压力测试,输出系统性能报告</li>
<li><strong>获得公司项目奖金</strong></li>
</ul>
</div>
<div class="tab-pane" data-tab="4">
<div class="project-tags">
<span class="project-tag">Python</span>
<span class="project-tag">pytest</span>
<span class="project-tag">K8S</span>
<span class="project-tag">CI/CD</span>
<span class="project-tag">团队管理</span>
</div>
<ul class="project-details">
<li>自研 Python 回测框架和底层策略系统,pytest 单元测试,Gitlab CI/CD 构建,K8S 部署</li>
<li>基于生产者-消费者模式,支持水平无限扩展消费者以提高回测效率</li>
<li>组织产品经理完成产品原型设计</li>
<li>组织开发人员,完成系统架构设计和技术对接</li>
<li>构建测试团队,推动自动化测试落地</li>
<li>推进项目开发全流程,完成上线和后续维护</li>
</ul>
</div>
</div>
</div>
<!-- ====== 页脚 ====== -->
<div class="resume-footer">
最后更新 · 2026 年 7 月
</div>
</div>
</div>
<script>
(function() {
document.querySelectorAll('.project-tabs').forEach(function(tabs) {
var buttons = tabs.querySelectorAll('.tab-btn');
var panes = tabs.querySelectorAll('.tab-pane');
buttons.forEach(function(btn) {
btn.addEventListener('click', function() {
var tabId = this.getAttribute('data-tab');
buttons.forEach(function(b) { b.classList.remove('active'); });
panes.forEach(function(p) { p.classList.remove('active'); });
this.classList.add('active');
tabs.querySelector('.tab-pane[data-tab="' + tabId + '"]').classList.add('active');
});
});
});
var sidebar = document.getElementById('resumeSidebar');
if (sidebar) {
var links = sidebar.querySelectorAll('.sidebar-link');
var cards = document.querySelectorAll('.resume-card');
function highlight() {
var scrollY = window.scrollY || window.pageYOffset;
links.forEach(function(l) { l.classList.remove('active'); });
cards.forEach(function(card, i) {
var top = card.getBoundingClientRect().top + scrollY - 120;
var bottom = top + card.offsetHeight;
if (scrollY >= top && scrollY < bottom) {
links[i].classList.add('active');
}
});
}
window.addEventListener('scroll', highlight);
highlight();
}
})();
</script></description></item><item><title>友链</title><link>https://UZPENG.github.io/page/link/</link><pubDate>Thu, 20 Nov 2025 00:00:00 +0000</pubDate><guid>https://UZPENG.github.io/page/link/</guid><description><div class="space-y-4">
<div>
<span class="font-bold text-lg text-primary-600 dark:text-primary-400">bombcoder</span>
<span class="text-neutral-500 ml-2">Go/后端/DevOps</span>
<a class="text-sky-600 dark:text-sky-400 font-semibold hover:underline ml-2" href="https://gobomb.github.io" target="_blank" rel="noopener">https://gobomb.github.io</a>
</div>
<div>
<span class="font-bold text-lg text-primary-600 dark:text-primary-400">HoshI</span>
<span class="text-neutral-500 ml-2">Java/Android/硬核游戏玩家</span>
<a class="text-sky-600 dark:text-sky-400 font-semibold hover:underline ml-2" href="https://enderhoshi.github.io" target="_blank" rel="noopener">https://enderhoshi.github.io</a>
</div>
</div></description></item><item><title>Java并发编程入门</title><link>https://UZPENG.github.io/posts/concurrent/</link><pubDate>Sat, 03 Nov 2018 00:00:00 +0000</pubDate><guid>https://UZPENG.github.io/posts/concurrent/</guid><description><h1 class="relative group">前言
<div id="前言" class="anchor"></div>
<span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
<a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%89%8d%e8%a8%80" aria-label="锚点">#</a>
</span>
</h1>
<blockquote><p>历史博客已归档,关于web架构的解读和导读详情见<a href="https://UZPENG.github.io/posts/talk_about_my_old_blog/" >《漫谈博客来时路》</a></p>
</blockquote><p>a这篇文章其实是我很久之前总结的,因为之前的笔记都比较零碎,现在统一将他迁移到博客。学习Java并发编程强烈推荐两本书,一本是<a href="https://book.douban.com/subject/10484692/" target="_blank" rel="noreferrer">《Java并发编程实战》</a>,另一本是<a href="https://book.douban.com/subject/25844475/" target="_blank" rel="noreferrer">《Java7 并发实战手册》</a>。</p>
<p>第一本书的作者里面有 Joshua Bloch ,这位大牛可是Java Current类库的作者之一哦,类库作者亲手写的书就足够成为你看它的理由啦。Anyway,这本书对并发的理论真的讲得很好,从竞态条件、原子性到内存逸出、乐观锁、悲观锁,内容十分全面,我觉得是每一个Java程序必读的书目,可以帮助你系统地学习Java并发的知识。</p>
<p>Java并发编程实战固然好,但是对于计算机基础薄弱的人来说,很多概念还是略显苦涩。如果你是这样的人的话,不妨先读一下Java7并发编程实战手册。Cook Cook Book嘛,跟着敲代码就行了,另外书中还会介绍一下并发的场景,都是对于新手很友好的哦~</p></description></item><item><title>Linux-IO多路复用-SELECT/POLL/EPOLL</title><link>https://UZPENG.github.io/posts/io-multiplexing/</link><pubDate>Sun, 02 Sep 2018 00:00:00 +0000</pubDate><guid>https://UZPENG.github.io/posts/io-multiplexing/</guid><description><blockquote><p>本文翻译自<code>DEVELPERS AREA</code>的<a href="http://devarea.com/linux-io-multiplexing-select-vs-poll-vs-epoll" target="_blank" rel="noreferrer">LINUX – IO MULTIPLEXING – SELECT VS POLL VS EPOLL</a></p>
</blockquote>
<h1 class="relative group">前言
<div id="前言" class="anchor"></div>
<span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
<a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%89%8d%e8%a8%80" aria-label="锚点">#</a>
</span>
</h1>
<blockquote><p>历史博客已归档,关于web架构的解读和导读详情见<a href="https://UZPENG.github.io/posts/talk_about_my_old_blog/" >《漫谈博客来时路》</a></p>
</blockquote><p>众所周知,在linux的世界里,一切皆文件。每一个进程都拥有一张文件描述符的表,指向文件、socket、硬件还有一些操作系统对象。</p>
<p>典型的拥有很多IO源的系统都会有一个初始化的阶段,然后进入待机模式——等待客户端请求并且响应。</p>
<p>最简单的解决方案就是为每一个客户端创建一个线程(或者进程),一直阻塞直到请求发送或者写入了响应。这种模式在客户端数量很小的时候可以工作,但是我们想要扩展到成千上万的客户端,为每个客户端创建线程(或者进程)是一个很糟糕的主意。</p>
<h1 class="relative group">IO多路复用
<div id="io多路复用" class="anchor"></div>
<span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
<a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#io%e5%a4%9a%e8%b7%af%e5%a4%8d%e7%94%a8" aria-label="锚点">#</a>
</span>
</h1>
<p>问题的解决方案是使用内核机制去轮询一系列的文件描述符。在linux系统下,主要有以下三种选择:</p>
<ul>
<li>select(2)</li>
<li>poll(2)</li>
<li>epoll</li>
</ul>
<p>以上三种方法的思想都是一致的,新建一系列的文件描述符,告诉内核你对每一个描述符的操作,然后使用线程去阻塞一个函数调用直到至少有一个文件描述符请求的操作是可用的。</p></description></item><item><title>linux常用命令速查</title><link>https://UZPENG.github.io/posts/linux-command/</link><pubDate>Wed, 22 Aug 2018 00:00:00 +0000</pubDate><guid>https://UZPENG.github.io/posts/linux-command/</guid><description><h1 class="relative group">前言
<div id="前言" class="anchor"></div>
<span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
<a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%89%8d%e8%a8%80" aria-label="锚点">#</a>
</span>
</h1>
<blockquote><p>历史博客已归档,关于编程武器的解读和导读详情见<a href="https://UZPENG.github.io/posts/talk_about_my_old_blog/" >《漫谈博客来时路》</a></p>
</blockquote><p>记录一些linux的常用操作以便查询,暂时先记录,以后有时间再分门别类。</p></description></item><item><title>git常用操作汇总</title><link>https://UZPENG.github.io/posts/git/</link><pubDate>Wed, 01 Aug 2018 00:00:00 +0000</pubDate><guid>https://UZPENG.github.io/posts/git/</guid><description><h2 class="relative group">用户初始化
<div id="用户初始化" class="anchor"></div>
<span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
<a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e7%94%a8%e6%88%b7%e5%88%9d%e5%a7%8b%e5%8c%96" aria-label="锚点">#</a>
</span>
</h2>
<blockquote><p>历史博客已归档,关于编程武器的解读和导读详情见<a href="https://UZPENG.github.io/posts/talk_about_my_old_blog/" >《漫谈博客来时路》</a></p>
</blockquote><p>git config &ndash;global user.name <code>&lt;your name&gt;</code><br>
git config &ndash;global user.password <code>&lt;your password&gt;</code><br>
ssh-keygen 生成秘钥<br>
vim ~/.ssh/authorized_keys 添加客户端秘钥<br>
cat ~/.ssh/id_rsa.pub 输出公钥</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">su git #切换用户
</span></span><span class="line"><span class="cl">sudo chsh -s /usr/bin/git-shell 更改登录的shell脚本</span></span></code></pre></div></div></description></item><item><title>常用软件汇总</title><link>https://UZPENG.github.io/posts/software/</link><pubDate>Wed, 01 Aug 2018 00:00:00 +0000</pubDate><guid>https://UZPENG.github.io/posts/software/</guid><description><h1 class="relative group">常用软件汇总
<div id="常用软件汇总" class="anchor"></div>
<span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
<a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%b8%b8%e7%94%a8%e8%bd%af%e4%bb%b6%e6%b1%87%e6%80%bb" aria-label="锚点">#</a>
</span>
</h1>
<h2 class="relative group">前言
<div id="前言" class="anchor"></div>
<span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
<a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%89%8d%e8%a8%80" aria-label="锚点">#</a>
</span>
</h2>
<blockquote><p>历史博客已归档,关于编程武器的解读和导读详情见<a href="https://UZPENG.github.io/posts/talk_about_my_old_blog/" >《漫谈博客来时路》</a></p>
</blockquote><p>因为可能经常换电脑,或者电脑重装系统,所以经常需要重装软件,记录一下使用的软件及其下载地址是很有必要的,方便日后查阅。</p>
<blockquote><p>以下下载链接都是win下的版本,暂时没收录其他系统。</p>
</blockquote>
<h2 class="relative group">开发工具
<div id="开发工具" class="anchor"></div>
<span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
<a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%bc%80%e5%8f%91%e5%b7%a5%e5%85%b7" aria-label="锚点">#</a>
</span>
</h2>
<table>
<thead>
<tr>
<th>软件</th>
<th>功能</th>
<th>下载地址</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>idea Community</code></td>
<td>Java开发IDE</td>
<td><a href="https://www.jetbrains.com/idea/download" target="_blank" rel="noreferrer">下载地址</a></td>
</tr>
<tr>
<td><code>JDk</code></td>
<td>Java开发工具</td>
<td><a href="https://www.oracle.com/technetwork/java/javase/downloads/index.html" target="_blank" rel="noreferrer">下载地址</a></td>
</tr>
<tr>
<td><code>MySQL</code></td>
<td>数据库</td>
<td><a href="https://dev.mysql.com/downloads/" target="_blank" rel="noreferrer">下载地址</a></td>
</tr>
<tr>
<td><code>XShell</code></td>
<td>终端</td>
<td><a href="https://www.netsarang.com/download/free_license.html" target="_blank" rel="noreferrer">下载地址</a></td>
</tr>
<tr>
<td><code>XFTP</code></td>
<td>FTP客户端</td>
<td><a href="https://www.netsarang.com/download/free_license.html" target="_blank" rel="noreferrer">下载地址</a></td>
</tr>
<tr>
<td><code>git</code></td>
<td>git客户端</td>
<td><a href="https://git-scm.com/downloads" target="_blank" rel="noreferrer">下载地址</a></td>
</tr>
<tr>
<td><code>vscode</code></td>
<td>编辑器</td>
<td><a href="https://code.visualstudio.com/download" target="_blank" rel="noreferrer">下载地址</a></td>
</tr>
<tr>
<td><code>postman</code></td>
<td>模拟HTTP请求工具</td>
<td><a href="https://www.getpostman.com/apps" target="_blank" rel="noreferrer">下载地址</a></td>
</tr>
<tr>
<td><code>fiddler</code></td>
<td>HTTP抓包工具</td>
<td><a href="https://www.telerik.com/download/fiddler" target="_blank" rel="noreferrer">下载地址</a></td>
</tr>
<tr>
<td><code>frp</code></td>
<td>反代工具</td>
<td><a href="https://github.com/fatedier/frp" target="_blank" rel="noreferrer">下载地址</a></td>
</tr>
<tr>
<td><code>shadowsocks</code></td>
<td>正向代理工具</td>
<td><a href="https://github.com/shadowsocks/shadowsocks-windows/releases" target="_blank" rel="noreferrer">下载地址</a></td>
</tr>
</tbody>
</table></description></item><item><title>Ngnix+Tomcat+MySQL项目部署</title><link>https://UZPENG.github.io/posts/deploy-doc/</link><pubDate>Wed, 20 Jun 2018 00:00:00 +0000</pubDate><guid>https://UZPENG.github.io/posts/deploy-doc/</guid><description><h1 class="relative group">前言
<div id="前言" class="anchor"></div>
<span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
<a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%89%8d%e8%a8%80" aria-label="锚点">#</a>
</span>
</h1>
<blockquote><p>历史博客已归档,关于web架构的解读和导读详情见<a href="https://UZPENG.github.io/posts/talk_about_my_old_blog/" >《漫谈博客来时路》</a></p></description></item><item><title>postfix+dovecot搭建自己的邮件服务器</title><link>https://UZPENG.github.io/posts/mail/</link><pubDate>Tue, 06 Mar 2018 00:00:00 +0000</pubDate><guid>https://UZPENG.github.io/posts/mail/</guid><description><h2 class="relative group">前言
<div id="前言" class="anchor"></div>
<span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
<a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%89%8d%e8%a8%80" aria-label="锚点">#</a>
</span>
</h2>
<blockquote><p>历史博客已归档,关于编程武器的解读和导读详情见<a href="https://UZPENG.github.io/posts/talk_about_my_old_blog/" >《漫谈博客来时路》</a></p>
</blockquote><p>我对于邮箱理解,在很长一段时间里,都是qq邮箱、163邮箱、126邮箱等等的各种第三方邮箱。这些邮箱都是注册一下,然后从web页面登陆进去,就可以收发邮件了。后来上了计算机网络这门课,学习到了有关于邮件的一些协议比如SMTP、POP3、IMAP。但是,当时也只是知道有这几种协议,也没有去实践过,现在想起来真的觉得计算机各方面知识自己都实践得太少了。而且最近在学习java web开发,想着实现一个邮件发送验证码的功能,同时又想拥有一个自己的域名邮箱,所以就决定配置一下邮件服务器。</p></description></item><item><title>scrapy+selenium+headless-chrome爬虫总结</title><link>https://UZPENG.github.io/posts/scrapy/</link><pubDate>Mon, 05 Mar 2018 00:00:00 +0000</pubDate><guid>https://UZPENG.github.io/posts/scrapy/</guid><description><h2 class="relative group">前言
<div id="前言" class="anchor"></div>
<span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
<a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%89%8d%e8%a8%80" aria-label="锚点">#</a>
</span>
</h2>
<blockquote><p>历史博客已归档,关于爬虫的解读和导读详情见<a href="https://UZPENG.github.io/posts/talk_about_my_old_blog/" >《漫谈博客来时路》</a></p>
</blockquote><p>久闻<code>scrapy</code>大名,一直想找机会了解一下这框架,在兴趣的驱动下学习了一下简单的<code>scrapy</code>的使用。虽然上次用java做的一个爬虫,但是后来觉得也算不上什么爬虫吧,只能算模拟<code>http</code>请求和<code>http</code>响应的处理、<code>json</code>的序列化和反序列化、excel文件的读取和写入而已,很多爬虫需要处理的东西也并没有处理。
但是<code>scrapy</code>就不一样了,作为一个成熟的爬虫框架,scrapy有以下几点优势。</p>
<ol>
<li>内嵌了CSS选择器和XPath解析器用于提取HTML/XML的信息。</li>
<li>提供了一个shell控制台用于测试css和xpath的表达式。</li>
<li>良好的架构设计:middleware、pipeline。</li>
<li>成熟的请求调度器。</li>
</ol>
<blockquote><p>备注: 以上特性来自于<a href="https://doc.scrapy.org/en/latest/intro/overview.html" target="_blank" rel="noreferrer">scrapy官方文档</a></p>
</blockquote><p>scrapy还有很多其他的特性,我在实践中比较常用的就是上面这几项。</p>
<p>另外,上次爬取动态页面的时候,采取的策略是分析AJAX请求的URL然后自己构造请求。这种方法比较麻烦,需要自己去分析请求,这次我们采用selenium+headless-chrome,以浏览器自动化的方式爬取数据。</p></description></item><item><title>爬虫实践--淘数据网站的数据爬取和存储</title><link>https://UZPENG.github.io/posts/crawl/</link><pubDate>Tue, 26 Dec 2017 00:00:00 +0000</pubDate><guid>https://UZPENG.github.io/posts/crawl/</guid><description><h2 class="relative group">背景
<div id="背景" class="anchor"></div>
<span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
<a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="锚点">#</a>
</span>
</h2>
<blockquote><p>历史博客已归档,关于爬虫的解读和导读详情见<a href="https://UZPENG.github.io/posts/talk_about_my_old_blog/" >《漫谈博客来时路》</a></p>
</blockquote><p>最近女朋友需要利用<code>tableau</code>来做数据可视化的作业,要做数据可视化,那首先可定得要有数据。她们打算用八爪鱼等爬虫软件来抓取数据,结果没成功,原因不明。然后跟我吐槽了一下这个事情,刚好我最近也要学爬虫,本着项目驱动学习的理念,就直接选择了这个项目来练手了。</p>
<h2 class="relative group">准备工作
<div id="准备工作" class="anchor"></div>
<span
class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
<a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%87%86%e5%a4%87%e5%b7%a5%e4%bd%9c" aria-label="锚点">#</a>
</span>
</h2>
<p>编程环境:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">IntelliJ IDEA 2017.1.5
</span></span><span class="line"><span class="cl">Build #IU-171.4694.70, built on July 4, 2017
</span></span><span class="line"><span class="cl">Licensed to weapon
</span></span><span class="line"><span class="cl">JRE: 1.8.0_112-release-736-b21 amd64
</span></span><span class="line"><span class="cl">JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
</span></span><span class="line"><span class="cl">Windows 10 10.0</span></span></code></pre></div></div>
<p>编程环境如上所示,因为我Java语言比较熟悉,所以编程语言选择了Java。虽然Java做爬虫语法上面比较累赘,但是Python还没学会,就凑合着用Java写了。</p></description></item><item><title>我的博客之旅</title><link>https://UZPENG.github.io/posts/start/</link><pubDate>Sat, 04 Mar 2017 19:31:34 +0800</pubDate><guid>https://UZPENG.github.io/posts/start/</guid><description><blockquote><p>V2版本已发布,详情见<a href="https://UZPENG.github.io/posts/restart_blog/" >《重启博客杂谈》</a></p>
</blockquote><p>似乎自己从来都没有写过博客,能稍微沾上边的就初中的时候写qq空间的日志吧,感觉已经是半个世纪前的事情了。然后现在为什么又想写博客了呢?原因主要有以下几个。</p></description></item></channel></rss>