-
Notifications
You must be signed in to change notification settings - Fork 6
/
atom.xml
677 lines (480 loc) · 45.3 KB
/
atom.xml
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
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>J_Knight_</title>
<subtitle>每天进步一点点</subtitle>
<link href="/atom.xml" rel="self"/>
<link href="https://github.com/knightsj/knightsj.github.io/"/>
<updated>2019-03-17T15:23:33.768Z</updated>
<id>https://github.com/knightsj/knightsj.github.io/</id>
<author>
<name>J_Knight_</name>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title>面向对象设计的设计模式(三):行为型模式(附 Demo 及 UML 类图)</title>
<link href="https://github.com/knightsj/knightsj.github.io/2019/03/17/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E8%AE%BE%E8%AE%A1%E7%9A%84%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%EF%BC%88%E4%B8%89%EF%BC%89%EF%BC%9A%E8%A1%8C%E4%B8%BA%E5%9E%8B%E6%A8%A1%E5%BC%8F/"/>
<id>https://github.com/knightsj/knightsj.github.io/2019/03/17/面向对象设计的设计模式(三):行为型模式/</id>
<published>2019-03-17T07:04:41.109Z</published>
<updated>2019-03-17T15:23:33.768Z</updated>
<summary type="html">
<p><img src="http://jknight-blog.oss-cn-shanghai.aliyuncs.com/design-pattern-creation/odd_dp2_banner.png" alt=""></p>
<p>本篇是面向对象设计系列文章的第四篇,讲解的是设计模式中的7个比较常见的行为型模式(按照本文讲解顺序排列):</p>
<ul>
<li>模板方法模式</li>
<li>策略模式</li>
<li>责任链模式</li>
<li>状态模式</li>
<li>命令模式</li>
<li>观察者模式</li>
<li>中介者模式</li>
</ul>
</summary>
<category term="Object-Oriented" scheme="https://github.com/knightsj/knightsj.github.io/categories/Object-Oriented/"/>
<category term="iOS" scheme="https://github.com/knightsj/knightsj.github.io/tags/iOS/"/>
<category term="Objectice-C" scheme="https://github.com/knightsj/knightsj.github.io/tags/Objectice-C/"/>
<category term="Object-Oriented" scheme="https://github.com/knightsj/knightsj.github.io/tags/Object-Oriented/"/>
<category term="Design Pattern" scheme="https://github.com/knightsj/knightsj.github.io/tags/Design-Pattern/"/>
</entry>
<entry>
<title>《简约之美 - 软件设计之道》- 读书笔记</title>
<link href="https://github.com/knightsj/knightsj.github.io/2019/01/01/%E3%80%8A%E7%AE%80%E7%BA%A6%E4%B9%8B%E7%BE%8E%EF%BC%9A%E8%BD%AF%E4%BB%B6%E8%AE%BE%E8%AE%A1%E4%B9%8B%E9%81%93%E3%80%8B-%20%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/"/>
<id>https://github.com/knightsj/knightsj.github.io/2019/01/01/《简约之美:软件设计之道》- 读书笔记/</id>
<published>2019-01-01T10:47:48.641Z</published>
<updated>2019-03-17T15:10:26.050Z</updated>
<summary type="html">
<p><img src="http://jknight-blog.oss-cn-shanghai.aliyuncs.com/book-note/jyzm_header.png" alt=""></p>
<p>本篇读书笔记的内容大部分是来自我刚参与的掘金的读书打卡活动。这次读书打卡活动选择了《简约之美:软件设计之道》这本书。我把这几次打卡的内容作了整合,也加了一点没有在打卡活动里面写的内容构成了这篇读书笔记。</p>
<p>本书一共有九个章节,我抽取了10个觉得比较好的段落并附加上我个人的解读。希望读者可以有些收获。</p>
</summary>
<category term="BookNote" scheme="https://github.com/knightsj/knightsj.github.io/categories/BookNote/"/>
<category term="BookNote" scheme="https://github.com/knightsj/knightsj.github.io/tags/BookNote/"/>
<category term="Software" scheme="https://github.com/knightsj/knightsj.github.io/tags/Software/"/>
</entry>
<entry>
<title>2018 年年终总结 - J_Knight_</title>
<link href="https://github.com/knightsj/knightsj.github.io/2018/12/26/2018%E5%B9%B4%E5%B9%B4%E7%BB%88%E6%80%BB%E7%BB%93/"/>
<id>https://github.com/knightsj/knightsj.github.io/2018/12/26/2018年年终总结/</id>
<published>2018-12-26T14:32:12.000Z</published>
<updated>2018-12-24T18:45:27.000Z</updated>
<summary type="html">
<p><img src="https://jknight-blog.oss-cn-shanghai.aliyuncs.com/career/self_conclusion_2019_header.jpg" alt=""></p>
<p>本篇是我今年的年终总结,主要总结了自己除了工作上的一些小目标的达成情况,包括社区,读书,健身,理财这几方面。</p>
<p>工作方面最大的收获是来到了爱奇艺工作,来到这个平台之后所收获的不仅仅来自于自己做的事情本身,还有接触到的新同事们,新平台带给我的种种收获,感觉自己还是非常幸运的。</p>
<p>工作上就提到这里,下面开始是本篇的主要内容。本篇分为三个部分:</p>
<ol>
<li>今年达成的小目标:介绍今年已经达成的小目标以及详细情况</li>
<li>今年未达成的小目标:介绍今年未达成的小目标以及详细情况</li>
<li>展望明年:简单列一下想在明年达成的小目标。</li>
</ol>
<p>现在就从已经达成的小目标来开始介绍。</p>
<h1 id="今年达成的小目标"><a href="#今年达成的小目标" class="headerlink" title="今年达成的小目标"></a>今年达成的小目标</h1><p>今年已经达成的几个小目标有以下几个:</p>
<ul>
<li>掘金社区粉丝超过1w(10300+)</li>
<li>看完5+本技术书籍(8本)</li>
<li>看完20+本非技术书籍(24本)</li>
<li>减掉20+斤(21斤)</li>
</ul>
</summary>
<category term="Career" scheme="https://github.com/knightsj/knightsj.github.io/categories/Career/"/>
<category term="Life" scheme="https://github.com/knightsj/knightsj.github.io/tags/Life/"/>
<category term="Job" scheme="https://github.com/knightsj/knightsj.github.io/tags/Job/"/>
</entry>
<entry>
<title>我从写技术博客中收获到了什么 - J_Knight_</title>
<link href="https://github.com/knightsj/knightsj.github.io/2018/12/04/%E6%88%91%E4%BB%8E%E5%86%99%E6%8A%80%E6%9C%AF%E5%8D%9A%E5%AE%A2%E4%B8%AD%E6%94%B6%E8%8E%B7%E5%88%B0%E4%BA%86%E4%BB%80%E4%B9%88-J_Knight_/"/>
<id>https://github.com/knightsj/knightsj.github.io/2018/12/04/我从写技术博客中收获到了什么-J_Knight_/</id>
<published>2018-12-04T15:16:17.000Z</published>
<updated>2019-03-17T13:39:02.858Z</updated>
<summary type="html">
<p><img src="https://user-gold-cdn.xitu.io/2018/12/2/1676f0af490ee858?w=1080&amp;h=658&amp;f=jpeg&amp;s=70619" alt=""></p>
<p>我是 J<em>Knight</em> ,熟悉我的人都应该知道我是一名刚工作满3年的非科班 iOS 开发者,而且一直坚持写技术博客快有2年半的时间了。</p>
<p>其实从去年开始就一直想分享我写博客的心得,但是一直也没有找到合适的契机,刚好在今年年底前达成了<code>掘金粉丝量过万</code>的小目标,索性就借着这个机会分享一下我自己关于写博客的一些收获,同时也算顺便做一个阶段性的总结。</p>
<p>这篇文章分为三个部分:</p>
<ol>
<li>写技术博客的历程</li>
<li>写技术博客的收获</li>
<li>回答一些朋友(粉丝)的一些关于写博客的几个问题</li>
</ol>
<p>第一部分先简单介绍关于我的博客的一些数据:写博客的起始时间,使用的博客平台,博客内容等等。</p>
<p>第二部分是本篇的重点,讲解的从博客中我的收获有哪些。</p>
<p>第三部分罗列了几个经常从一些朋友(粉丝)中听到的关于写博客的问题以及我的回答。</p>
</summary>
<category term="Career" scheme="https://github.com/knightsj/knightsj.github.io/categories/Career/"/>
<category term="Life" scheme="https://github.com/knightsj/knightsj.github.io/tags/Life/"/>
<category term="Job" scheme="https://github.com/knightsj/knightsj.github.io/tags/Job/"/>
</entry>
<entry>
<title>面向对象设计的设计模式(二):结构型模式(附 Demo 及 UML 类图)</title>
<link href="https://github.com/knightsj/knightsj.github.io/2018/11/28/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E8%AE%BE%E8%AE%A1%E7%9A%84%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%EF%BC%88%E4%BA%8C%EF%BC%89%EF%BC%9A%E7%BB%93%E6%9E%84%E5%9E%8B%E6%A8%A1%E5%BC%8F/"/>
<id>https://github.com/knightsj/knightsj.github.io/2018/11/28/面向对象设计的设计模式(二):结构型模式/</id>
<published>2018-11-28T14:19:41.000Z</published>
<updated>2019-03-17T13:39:02.869Z</updated>
<summary type="html">
<p><img src="http://jknight-blog.oss-cn-shanghai.aliyuncs.com/design-pattern-creation/odd_dp2_banner.png" alt=""></p>
<p>本篇是面向对象设计系列文章的第三篇,讲解的是设计模式中的结构型模式:</p>
<ul>
<li>外观模式</li>
<li>适配器模式</li>
<li>桥接模式</li>
<li>代理模式</li>
<li>装饰者模式</li>
<li>享元模式</li>
</ul>
<blockquote>
<p>该系列前面的两篇文章:</p>
<ul>
<li><a href="https://knightsj.github.io/2018/09/09/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E8%AE%BE%E8%AE%A1%E7%9A%84%E5%85%AD%E5%A4%A7%E8%AE%BE%E8%AE%A1%E5%8E%9F%E5%88%99%EF%BC%88%E9%99%84%20Demo%20%E5%8F%8A%20UML%20%E7%B1%BB%E5%9B%BE%EF%BC%89/" target="_blank" rel="noopener">面向对象设计的六大设计原则(附 Demo 及 UML 类图)</a></li>
<li><a href="https://knightsj.github.io/2018/10/21/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E8%AE%BE%E8%AE%A1%E7%9A%84%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%EF%BC%88%E4%B8%80%EF%BC%89%EF%BC%9A%E5%88%9B%E5%BB%BA%E5%9E%8B%E6%A8%A1%E5%BC%8F%EF%BC%88%E9%99%84%20Demo%20%E5%8F%8A%20UML%20%E7%B1%BB%E5%9B%BE%EF%BC%89/" target="_blank" rel="noopener">面向对象设计的设计模式(一):创建型设计模式(附 Demo 及 UML 类图)</a></li>
</ul>
</blockquote>
</summary>
<category term="Object-Oriented" scheme="https://github.com/knightsj/knightsj.github.io/categories/Object-Oriented/"/>
<category term="iOS" scheme="https://github.com/knightsj/knightsj.github.io/tags/iOS/"/>
<category term="Objectice-C" scheme="https://github.com/knightsj/knightsj.github.io/tags/Objectice-C/"/>
<category term="Object-Oriented" scheme="https://github.com/knightsj/knightsj.github.io/tags/Object-Oriented/"/>
<category term="Design Pattern" scheme="https://github.com/knightsj/knightsj.github.io/tags/Design-Pattern/"/>
</entry>
<entry>
<title>面向对象设计的设计模式(一):创建型模式(附 Demo 及 UML 类图)</title>
<link href="https://github.com/knightsj/knightsj.github.io/2018/10/23/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E8%AE%BE%E8%AE%A1%E7%9A%84%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%EF%BC%88%E4%B8%80%EF%BC%89%EF%BC%9A%E5%88%9B%E5%BB%BA%E5%9E%8B%E6%A8%A1%E5%BC%8F/"/>
<id>https://github.com/knightsj/knightsj.github.io/2018/10/23/面向对象设计的设计模式(一):创建型模式/</id>
<published>2018-10-23T13:11:29.000Z</published>
<updated>2019-03-17T13:39:02.867Z</updated>
<summary type="html">
<p><img src="http://jknight-blog.oss-cn-shanghai.aliyuncs.com/design-pattern-creation/odd_dp2_banner.png" alt=""></p>
<p>继上一篇的<a href="https://knightsj.github.io/2018/09/09/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E8%AE%BE%E8%AE%A1%E7%9A%84%E5%85%AD%E5%A4%A7%E8%AE%BE%E8%AE%A1%E5%8E%9F%E5%88%99%EF%BC%88%E9%99%84%20Demo%20%E5%8F%8A%20UML%20%E7%B1%BB%E5%9B%BE%EF%BC%89/" target="_blank" rel="noopener">面向对象设计的六大设计原则(附 Demo 及 UML 类图)</a>,本篇是面向对象设计系列的第二个部分:面向对象设计的设计模式的第一篇文章。</p>
<p>最开始说一下什么是设计模式。关于设计模式的概念,有很多不同的版本,在这里说一下我个人比较赞同的一个说法:</p>
<blockquote>
<p>设计模式用于在特定的条件下为一些重复出现的软件设计问题提供合理的、有效的解决方案。</p>
</blockquote>
<p>去掉一些定语的修饰,这句话精简为:</p>
<blockquote>
<p>设计模式为问题提供方案。</p>
</blockquote>
<p>简单来看,设计模式其实就是针对某些问题的一些方案。在软件开发中,即使很多人在用不同的语言去开发不同的业务,但是很多时候这些人遇到的问题抽象出来都是相似的。一些卓越的开发者将一些常出现的问题和对应的解决方案汇总起来,总结出了这些设计模式。</p>
<p>因此掌握了这些设计模式,可以让我们更好地去解决开发过程中遇到的一些常见问题。而且对这些问题的解决方案的掌握程度越好,我们就越能够打破语言本身的限制去解决问题,也就是增强“软件开发的内功”。</p>
<p>介绍设计模式最著名的一本书莫属《设计模式 可复用面向对象软件的基础》这本书,书中共介绍了23个设计模式。而这些设计模式分为三大类:</p>
<ul>
<li><strong>创建型</strong>设计模式:侧重于对象的创建。</li>
<li><strong>结构型</strong>设计模式:侧重于接口的设计和系统的结构。</li>
<li><strong>行为型</strong>设计模式:侧重于类或对象的行为。</li>
</ul>
</summary>
<category term="Object-Oriented" scheme="https://github.com/knightsj/knightsj.github.io/categories/Object-Oriented/"/>
<category term="iOS" scheme="https://github.com/knightsj/knightsj.github.io/tags/iOS/"/>
<category term="Objectice-C" scheme="https://github.com/knightsj/knightsj.github.io/tags/Objectice-C/"/>
<category term="Object-Oriented" scheme="https://github.com/knightsj/knightsj.github.io/tags/Object-Oriented/"/>
<category term="Design Pattern" scheme="https://github.com/knightsj/knightsj.github.io/tags/Design-Pattern/"/>
</entry>
<entry>
<title>面向对象设计的六大设计原则(附 Demo 及 UML 类图)</title>
<link href="https://github.com/knightsj/knightsj.github.io/2018/09/10/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E8%AE%BE%E8%AE%A1%E7%9A%84%E5%85%AD%E5%A4%A7%E8%AE%BE%E8%AE%A1%E5%8E%9F%E5%88%99/"/>
<id>https://github.com/knightsj/knightsj.github.io/2018/09/10/面向对象设计的六大设计原则/</id>
<published>2018-09-10T15:21:39.000Z</published>
<updated>2019-03-17T13:39:02.866Z</updated>
<summary type="html">
<p><img src="http://jknight-blog.oss-cn-shanghai.aliyuncs.com/design-principle/odd_dp_banner.png" alt=""></p>
<h1 id="学习初衷与讲解方式"><a href="#学习初衷与讲解方式" class="headerlink" title="学习初衷与讲解方式"></a>学习初衷与讲解方式</h1><p>笔者想在iOS从业第三年结束之前系统学习一下关于设计模式方面的知识。而在学习设计模式之前,觉得更有必要先学习面向对象设计(OOD:Object Oriented Design)的几大设计原则,为后面设计模式的学习打下基础。</p>
<p>本篇分享的就是笔者近阶段学习和总结的面向对象设计的六个设计原则:</p>
<table>
<thead>
<tr>
<th>缩写</th>
<th>英文名称</th>
<th>中文名称</th>
</tr>
</thead>
<tbody>
<tr>
<td>SRP</td>
<td>Single Responsibility Principle</td>
<td>单一职责原则</td>
</tr>
<tr>
<td>OCP</td>
<td>Open Close Principle</td>
<td>开闭原则</td>
</tr>
<tr>
<td>LSP</td>
<td>Liskov Substitution Principle</td>
<td>里氏替换原则</td>
</tr>
<tr>
<td>LoD</td>
<td>Law of Demeter ( Least Knowledge Principle)</td>
<td>迪米特法则(最少知道原则)</td>
</tr>
<tr>
<td>ISP</td>
<td>Interface Segregation Principle</td>
<td>接口分离原则</td>
</tr>
<tr>
<td>DIP</td>
<td>Dependency Inversion Principle</td>
<td>依赖倒置原则</td>
</tr>
</tbody>
</table>
</summary>
<category term="Object-Oriented" scheme="https://github.com/knightsj/knightsj.github.io/categories/Object-Oriented/"/>
<category term="iOS" scheme="https://github.com/knightsj/knightsj.github.io/tags/iOS/"/>
<category term="Objectice-C" scheme="https://github.com/knightsj/knightsj.github.io/tags/Objectice-C/"/>
<category term="Object-Oriented" scheme="https://github.com/knightsj/knightsj.github.io/tags/Object-Oriented/"/>
<category term="Design Principle" scheme="https://github.com/knightsj/knightsj.github.io/tags/Design-Principle/"/>
</entry>
<entry>
<title>《如何有效整理信息》- 读书笔记</title>
<link href="https://github.com/knightsj/knightsj.github.io/2018/08/20/%E3%80%8A%E5%A6%82%E4%BD%95%E6%9C%89%E6%95%88%E6%95%B4%E7%90%86%E4%BF%A1%E6%81%AF%E3%80%8B%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/"/>
<id>https://github.com/knightsj/knightsj.github.io/2018/08/20/《如何有效整理信息》读书笔记/</id>
<published>2018-08-20T14:29:25.000Z</published>
<updated>2018-12-24T18:31:56.834Z</updated>
<summary type="html">
<p><img src="http://jknight-blog.oss-cn-shanghai.aliyuncs.com/book-note/rhyxzlxx-header.png" alt="《如何有效整理信息》封面"></p>
<p>本书作者(奥野宣之)介绍了一个关于整理笔记的方法:“一元笔记法”。该方法摒弃了将笔记进行分类整理的方式,而是采用了一元化的方案:<strong>不采用分类记录的方式,而是将所有分类的笔记按照时间顺序写到一起记录</strong>。</p>
</summary>
<category term="BookNote" scheme="https://github.com/knightsj/knightsj.github.io/categories/BookNote/"/>
<category term="BookNote" scheme="https://github.com/knightsj/knightsj.github.io/tags/BookNote/"/>
</entry>
<entry>
<title>出一套 iOS 高级面试题</title>
<link href="https://github.com/knightsj/knightsj.github.io/2018/07/24/%E5%87%BA%E4%B8%80%E5%A5%97iOS%E9%AB%98%E7%BA%A7%E9%9D%A2%E8%AF%95%E9%A2%98/"/>
<id>https://github.com/knightsj/knightsj.github.io/2018/07/24/出一套iOS高级面试题/</id>
<published>2018-07-24T15:13:58.000Z</published>
<updated>2019-03-17T13:39:02.857Z</updated>
<summary type="html">
<p><img src="http://jknight-blog.oss-cn-shanghai.aliyuncs.com/career/interview_question_header.png" alt=""></p>
<p>一千个读者眼中有一千个哈姆雷特,一千名 iOS 程序员心目中就有一千套 iOS 高级面试题。本文就是笔者认为可以用来面试高级 iOS 程序员的面试题。</p>
</summary>
<category term="Career" scheme="https://github.com/knightsj/knightsj.github.io/categories/Career/"/>
<category term="Life" scheme="https://github.com/knightsj/knightsj.github.io/tags/Life/"/>
<category term="Job" scheme="https://github.com/knightsj/knightsj.github.io/tags/Job/"/>
</entry>
<entry>
<title>2018年 iOS 面试心得</title>
<link href="https://github.com/knightsj/knightsj.github.io/2018/07/17/2018%E5%B9%B4iOS%E9%9D%A2%E8%AF%95%E5%BF%83%E5%BE%97/"/>
<id>https://github.com/knightsj/knightsj.github.io/2018/07/17/2018年iOS面试心得/</id>
<published>2018-07-17T13:11:24.000Z</published>
<updated>2019-03-17T13:39:02.846Z</updated>
<summary type="html">
<p><img src="http://jknight-blog.oss-cn-shanghai.aliyuncs.com/career/2018_interview_header.png" alt=""></p>
<p>面试了几家公司之后,最后来到了爱奇艺(坐标上海),工作的内容是笔者个人非常感兴趣的领域。能拿到这个结果对于入行两年半&amp;非科班的笔者来说无疑是幸运的。</p>
</summary>
<category term="Career" scheme="https://github.com/knightsj/knightsj.github.io/categories/Career/"/>
<category term="Life" scheme="https://github.com/knightsj/knightsj.github.io/tags/Life/"/>
<category term="Job" scheme="https://github.com/knightsj/knightsj.github.io/tags/Job/"/>
</entry>
<entry>
<title>数据结构 & 算法 in Swift (二):算法概述和排序算法</title>
<link href="https://github.com/knightsj/knightsj.github.io/2018/02/08/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E7%AE%97%E6%B3%95inSwift%EF%BC%88%E4%BA%8C%EF%BC%89%EF%BC%9A%E7%AE%97%E6%B3%95%E6%A6%82%E8%BF%B0%E5%92%8C%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95/"/>
<id>https://github.com/knightsj/knightsj.github.io/2018/02/08/数据结构算法inSwift(二):算法概述和排序算法/</id>
<published>2018-02-08T14:17:19.000Z</published>
<updated>2019-03-17T13:39:02.862Z</updated>
<summary type="html">
<p><img src="http://jknight-blog.oss-cn-shanghai.aliyuncs.com/data_structure_algorithm_in_swift/ds_al_header.png" alt=""></p>
<p>本篇是《数据结构 &amp; 算法 in Swift》系列连载的第二篇,内容分为如下两个部分:</p>
<ul>
<li>算法基础:简单介绍算法的概念,时间复杂度与空间复杂度,递归,作为本文第二部分的背景知识。</li>
<li>排序算法:结合Swift的代码实现来讲解冒泡排序,选择排序,插入排序,归并排序,快速排序。</li>
</ul>
</summary>
<category term="Data Structure & Algorithm" scheme="https://github.com/knightsj/knightsj.github.io/categories/Data-Structure-Algorithm/"/>
<category term="iOS" scheme="https://github.com/knightsj/knightsj.github.io/tags/iOS/"/>
<category term="Swift" scheme="https://github.com/knightsj/knightsj.github.io/tags/Swift/"/>
<category term="Data Structure" scheme="https://github.com/knightsj/knightsj.github.io/tags/Data-Structure/"/>
<category term="Algorithm" scheme="https://github.com/knightsj/knightsj.github.io/tags/Algorithm/"/>
</entry>
<entry>
<title>数据结构 & 算法 in Swift (一):Swift基础和数据结构</title>
<link href="https://github.com/knightsj/knightsj.github.io/2018/01/31/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E7%AE%97%E6%B3%95inSwift%EF%BC%88%E4%B8%80%EF%BC%89%EF%BC%9ASwift%E5%9F%BA%E7%A1%80%E5%92%8C%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
<id>https://github.com/knightsj/knightsj.github.io/2018/01/31/数据结构算法inSwift(一):Swift基础和数据结构/</id>
<published>2018-01-31T13:26:52.000Z</published>
<updated>2019-03-17T13:39:02.860Z</updated>
<summary type="html">
<p><img src="http://jknight-blog.oss-cn-shanghai.aliyuncs.com/data_structure_algorithm_in_swift/ds_al_header.png" alt=""></p>
<h1 id="写在前面"><a href="#写在前面" class="headerlink" title="写在前面"></a>写在前面</h1><p>从本文标题中的序号可以看出,本文是一个连载的开篇。</p>
<p>而且这个连载的标题是:数据结构 &amp; 算法 in Swift。从这个连载的标题中可以看出,笔者分享的是使用Swift语言来实现所学的的数据结构和算法的知识。这里面需要解释两点:</p>
<h2 id="第一:为什么学习数据结构和算法?"><a href="#第一:为什么学习数据结构和算法?" class="headerlink" title="第一:为什么学习数据结构和算法?"></a>第一:为什么学习数据结构和算法?</h2><p><strong>学习通用性知识,突破技能瓶颈</strong>:笔者做iOS开发也有两年了,这期间通过从项目,第三方源码,相关应用类的编程书籍提高了些技术水平。而作为没学过数据结构和算法的非科班大军中的一员,这些知识始终是绕不过去的。因为对此类知识的掌握程度会对今后编程技能的提高有着无可估量的影响,所以就决定学习了。</p>
<h2 id="第二:为什么用Swift语言来实现?"><a href="#第二:为什么用Swift语言来实现?" class="headerlink" title="第二:为什么用Swift语言来实现?"></a>第二:为什么用Swift语言来实现?</h2><ol>
<li><p><strong>选择哪个语言并不重要,重要的是数据结构和算法本身的理解</strong>:通过两个星期的学习,如今笔者已经可以使用Swift语言来实现几种数据结构和算法了,但我相信如果我使用C语言或者Objective-C语言的话会学得更快些,因为在实现的时候由于对该语言的不熟悉导致在实现过程中踩了不少坑。不过可以反过来思考:如果我可以使用Swift来实现这些,那么我今后用C,Objective-C,甚至是Java就容易多了,再加上我还顺便学习了Swift不是么?</p>
</li>
<li><p><strong>如今Swift的势头还在上涨</strong>:笔者已经观察到很多新的库,教学都使用了Swift语言。而且听说一些面试的朋友在面试过程中多少有问过Swift相关的知识,一些公司的新项目也有用Swift写了。</p>
</li>
</ol>
</summary>
<category term="Data Structure & Algorithm" scheme="https://github.com/knightsj/knightsj.github.io/categories/Data-Structure-Algorithm/"/>
<category term="iOS" scheme="https://github.com/knightsj/knightsj.github.io/tags/iOS/"/>
<category term="Swift" scheme="https://github.com/knightsj/knightsj.github.io/tags/Swift/"/>
<category term="Data Structure" scheme="https://github.com/knightsj/knightsj.github.io/tags/Data-Structure/"/>
<category term="Algorithm" scheme="https://github.com/knightsj/knightsj.github.io/tags/Algorithm/"/>
</entry>
<entry>
<title>YYCache 源码解析</title>
<link href="https://github.com/knightsj/knightsj.github.io/2018/01/23/YYCache%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/"/>
<id>https://github.com/knightsj/knightsj.github.io/2018/01/23/YYCache源码解析/</id>
<published>2018-01-23T13:24:58.000Z</published>
<updated>2019-03-17T13:26:23.444Z</updated>
<summary type="html">
<p><a href="https://github.com/ibireme/YYCache">YYCache</a>是国内开发者<a href="https://blog.ibireme.com/" target="_blank" rel="noopener">ibireme</a>开源的一个线程安全的高性能键值缓存组件,代码风格简洁清晰,在GitHub上已经有了1600+颗星。</p>
<p>阅读它的源码有助于建立比较完整的缓存设计的思路,同时也能巩固一下双向链表,线程锁,数据库操作相关的知识。如果你还没有看过YYCache的源码,那么恭喜你,阅读此文会对理解YYCache的源码有比较大的帮助。</p>
</summary>
<category term="iOS" scheme="https://github.com/knightsj/knightsj.github.io/categories/iOS/"/>
<category term="iOS" scheme="https://github.com/knightsj/knightsj.github.io/tags/iOS/"/>
<category term="Objective-C" scheme="https://github.com/knightsj/knightsj.github.io/tags/Objective-C/"/>
<category term="源码解析" scheme="https://github.com/knightsj/knightsj.github.io/tags/%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/"/>
</entry>
<entry>
<title>开源一个封装AFNetworking的网络框架 - SJNetwork</title>
<link href="https://github.com/knightsj/knightsj.github.io/2017/12/27/%E5%BC%80%E6%BA%90%E4%B8%80%E4%B8%AA%E5%B0%81%E8%A3%85AFNetworking%E7%9A%84%E7%BD%91%E7%BB%9C%E6%A1%86%E6%9E%B6-SJNetwork/"/>
<id>https://github.com/knightsj/knightsj.github.io/2017/12/27/开源一个封装AFNetworking的网络框架-SJNetwork/</id>
<published>2017-12-27T14:28:29.000Z</published>
<updated>2019-03-17T13:26:23.471Z</updated>
<summary type="html">
<h1 id="介绍"><a href="#介绍" class="headerlink" title="介绍"></a>介绍</h1><p>该框架是一个通用的网络层,可以供给不同app的业务层调用。该框架封装了AFNetworking,而且有些地方借鉴了YTKNetwork的设计思路:以对象的形式封装并管理请求。</p>
<p>它在功能上支持:</p>
<ul>
<li>发送请求方法为GET,POST,PUT,DELETE的普通网络请求的功能</li>
<li>上传图片功能(单张与多张上传,指定上传前的图片压缩比率)</li>
<li>下载功能(支持断点续传和后台下载)</li>
<li>缓存管理(写入,读取,清除缓存,计算大小)功能</li>
<li>请求管理(查看正在进行的请求的状态,请求的单个与批量取消)功能</li>
<li>设置请求体里的默认键值对(eg.需要添加版本号进行版本控制)</li>
<li>添加请求头(eg.针对一些需要使用token的服务)</li>
<li>设置服务器地址</li>
<li>设置debug模式(调试时打印出便于调试的log,比如读取缓存失败的具体原因)</li>
</ul>
<p>GitHub链接:<a href="https://github.com/knightsj/SJNetwork">SJNetwork</a></p>
<blockquote>
<p>里面附有demo</p>
</blockquote>
</summary>
<category term="Production" scheme="https://github.com/knightsj/knightsj.github.io/categories/Production/"/>
<category term="iOS" scheme="https://github.com/knightsj/knightsj.github.io/tags/iOS/"/>
<category term="Objective-C" scheme="https://github.com/knightsj/knightsj.github.io/tags/Objective-C/"/>
</entry>
<entry>
<title>如何提高代码的可读性? -读《编写可读代码的艺术》</title>
<link href="https://github.com/knightsj/knightsj.github.io/2017/11/13/%E5%A6%82%E4%BD%95%E6%8F%90%E9%AB%98%E4%BB%A3%E7%A0%81%E7%9A%84%E5%8F%AF%E8%AF%BB%E6%80%A7/"/>
<id>https://github.com/knightsj/knightsj.github.io/2017/11/13/如何提高代码的可读性/</id>
<published>2017-11-13T14:13:37.000Z</published>
<updated>2019-03-17T13:26:23.470Z</updated>
<summary type="html">
<p><img src="http://upload-images.jianshu.io/upload_images/859001-63f87902508af82e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="《编写可读代码的艺术》封面"></p>
<h1 id="一-为什么读这本书"><a href="#一-为什么读这本书" class="headerlink" title="一. 为什么读这本书"></a>一. 为什么读这本书</h1><p>很多同行在编写代码的时候往往只关注一些宏观上的主题:架构,设计模式,数据结构等等,却忽视了一些更细节上的点:比如变量如何命名与使用,控制流的设计,以及注释的写法等等。以上这些细节上的东西可以用<strong>代码的可读性</strong>来概括。</p>
</summary>
<category term="BookNote" scheme="https://github.com/knightsj/knightsj.github.io/categories/BookNote/"/>
<category term="BookNote" scheme="https://github.com/knightsj/knightsj.github.io/tags/BookNote/"/>
<category term="IT" scheme="https://github.com/knightsj/knightsj.github.io/tags/IT/"/>
</entry>
<entry>
<title>结合一个开源的底部菜单组件来讲一下如何封装一个React Native组件</title>
<link href="https://github.com/knightsj/knightsj.github.io/2017/10/10/%E7%BB%93%E5%90%88%E4%B8%80%E4%B8%AA%E5%BC%80%E6%BA%90%E7%9A%84%E5%BA%95%E9%83%A8%E8%8F%9C%E5%8D%95%E7%BB%84%E4%BB%B6%E6%9D%A5%E8%AE%B2%E4%B8%80%E4%B8%8B%E5%A6%82%E4%BD%95%E5%B0%81%E8%A3%85%E4%B8%80%E4%B8%AAReactNative%E7%BB%84%E4%BB%B6/"/>
<id>https://github.com/knightsj/knightsj.github.io/2017/10/10/结合一个开源的底部菜单组件来讲一下如何封装一个ReactNative组件/</id>
<published>2017-10-10T13:27:22.000Z</published>
<updated>2019-03-17T13:39:02.864Z</updated>
<summary type="html">
<h2 id="简介"><a href="#简介" class="headerlink" title="简介"></a>简介</h2><p>前几天写了一个React Native组件:一个可定制性比较高的底部弹出菜单(ActionSheet)。该组件符合React Native的特性:同时支持iOS和Android双平台,一份相同的代码会在两个平台上展示几乎完全相同的样式。</p>
<p>先看一下效果(上排为iOS模拟器,下排为Android模拟器):</p>
<p><img src="https://jknight-blog.oss-cn-shanghai.aliyuncs.com/react_native/action_sheet/rn_as_show.png" alt=""></p>
<p>上图展示的是该组件的默认样式。由于该组件具有较高的定制性,所以只需要通过设置一些属性就可以得到更多不同的样式。</p>
<p>开源项目地址:<a href="https://github.com/knightsj/react-naive-highly-customizable-action-sheet">GitHub:react-naive-highly-customizable-action-sheet</a></p>
</summary>
<category term="Production" scheme="https://github.com/knightsj/knightsj.github.io/categories/Production/"/>
<category term="React Native" scheme="https://github.com/knightsj/knightsj.github.io/tags/React-Native/"/>
</entry>
<entry>
<title>从一个实战项目来看一下React Native开发的几个关键技术点</title>
<link href="https://github.com/knightsj/knightsj.github.io/2017/08/30/%E4%BB%8E%E4%B8%80%E4%B8%AA%E5%AE%9E%E6%88%98%E9%A1%B9%E7%9B%AE%E6%9D%A5%E7%9C%8B%E4%B8%80%E4%B8%8BReactNative%E5%BC%80%E5%8F%91%E7%9A%84%E5%87%A0%E4%B8%AA%E5%85%B3%E9%94%AE%E6%8A%80%E6%9C%AF%E7%82%B9/"/>
<id>https://github.com/knightsj/knightsj.github.io/2017/08/30/从一个实战项目来看一下ReactNative开发的几个关键技术点/</id>
<published>2017-08-30T15:13:58.000Z</published>
<updated>2019-03-17T13:39:02.853Z</updated>
<summary type="html">
<p>在进行了2个星期的基础学习(Flexbox, React.js, JSX, JavaScript)之后,想通过一个实战项目来提高React Native的开发水平,于是找到了下面这个项目:</p>
<h1 id="一-项目介绍"><a href="#一-项目介绍" class="headerlink" title="一. 项目介绍"></a>一. 项目介绍</h1><p>这是我在学习<a href="http://www.devio.org/" target="_blank" rel="noopener">贾鹏辉</a>老师在慕课网上的一个很火的<a href="http://coding.imooc.com/class/89.html" target="_blank" rel="noopener">React Native实战的教程</a>后,写出的课程Demo。该课程是慕课网里很火的一个React Native课程,当初在看了课程介绍和课程安排觉得讲解的点还是很全的,所以毫不犹豫地买了下来。</p>
<p>从看视频,敲代码到重构,改bug,大概花了2个多星期的时间,除了调用友盟的SDK以及CodePush集成之外,其他的部分都基本完成了,而且同时可以在iOS和Android设备上运行:<br><img src="https://jknight-blog.oss-cn-shanghai.aliyuncs.com/react_native/imooc_demo/rn_p_header.png" alt="上排是iOS模拟器 | 下排是Android模拟器"></p>
<p>而且比较吸引人的是该项目可以实现多个主题的切换:<br><img src="https://jknight-blog.oss-cn-shanghai.aliyuncs.com/react_native/imooc_demo/rn_p_theme.png" alt="多主题切换"></p>
<blockquote>
<p>切换的技术实现会在下文给出。</p>
</blockquote>
<p>用一个动图来过一遍大致的需求:<br><img src="https://github.com/knightsj/blog-image-storage/blob/master/react-native/imooc-demo/show_1.gif?raw=true" alt=""></p>
<p>Demo GitHub地址:<a href="https://github.com/knightsj/GitHubPopular-SJ">GitHubPopular-SJ</a><br>可以按照README文件里的方法运行该项目。</p>
<blockquote>
<p>已经贾老师允许上传到GitHub</p>
</blockquote>
<p>值得一提的是:这确实是一门物有所值的课程,可以让想入门React Native的开发者少走很多弯路。虽然我上传的Demo可以实现视频里大部分功能,但是经过调试,修改后的代码信息量还是很有限的,而且老师在视频中讲解的很多关于实际开发的知识点在代码中并没有体现出来,所以还是建议各位报名参加课程来提高自己的开发水平。</p>
</summary>
<category term="React Native" scheme="https://github.com/knightsj/knightsj.github.io/categories/React-Native/"/>
<category term="React Native" scheme="https://github.com/knightsj/knightsj.github.io/tags/React-Native/"/>
</entry>
<entry>
<title>YTKNetwork源码解析</title>
<link href="https://github.com/knightsj/knightsj.github.io/2017/07/18/YTKNetwork%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/"/>
<id>https://github.com/knightsj/knightsj.github.io/2017/07/18/YTKNetwork源码解析/</id>
<published>2017-07-18T15:35:14.000Z</published>
<updated>2019-03-17T13:26:23.442Z</updated>
<summary type="html">
<p>对于iOS开发来说,就算是没有用过<a href="https://github.com/yuantiku/YTKNetwork">YTKNetwork框架</a>,应该也见过,听过了。它是猿题库技术团队开源的一个网络请求框架,内部封装了AFNetworking。它把每个请求实例化,管理它的生命周期,也可以管理多个请求。<br><br>在正式讲解源码之前,我会先讲一下该框架所用的架构和设计模式。我总觉得对架构和设计有一定的了解的话,会有助于对源码的理解。</p>
<h1 id="1-架构"><a href="#1-架构" class="headerlink" title="1. 架构"></a>1. 架构</h1><hr>
<p>先上图:</p>
<p><img src="http://upload-images.jianshu.io/upload_images/859001-054321f909402be5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="YTKRequest架构图"></p>
<blockquote>
<p>在这里简单说明一下:</p>
<ol>
<li>YTKNetwork框架将每一个请求实例化,YTKBaseRequest是所有请求类的基类,YTKRequest是它的子类。所以如果我们想要发送一个请求,则需要创建并实例化一个继承于YTKRequest的自定义的请求类(CustomRequest)并发送请求。 </li>
<li>YTKNetworkAgent是一个单例,负责管理所有的请求类(例如CustomRequest)。当CustomRequest发送请求以后,会把自己放在YTKNetworkAgent持有的一个字典里,让其管理自己。</li>
<li>我们说YTKNetwork封装了AFNetworking,实际上是YTKNetworkAgent封装了AFNetworking,由它负责AFNetworking请求的发送和AFNetworking的回调处理。所以如果我们想更换一个第三方网络请求库,就可以在这里更换一下。而YTKRequest更多的是只是负责缓存的处理。</li>
<li>YTKNetworkConfig与YTKPriviate的具体职能现在不做介绍,会在后文给出。</li>
</ol>
</blockquote>
<p>OK,现在我们知道了YTKNetwork中类与类之间的关系以及关键类的大致职能,接下来我会告诉你YTKNetwork为什么会采用这种关系来架构,以及采用这种架构会有什么好处。</p>
</summary>
<category term="iOS" scheme="https://github.com/knightsj/knightsj.github.io/categories/iOS/"/>
<category term="iOS" scheme="https://github.com/knightsj/knightsj.github.io/tags/iOS/"/>
<category term="Objective-C" scheme="https://github.com/knightsj/knightsj.github.io/tags/Objective-C/"/>
<category term="源码解析" scheme="https://github.com/knightsj/knightsj.github.io/tags/%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/"/>
</entry>
<entry>
<title>iOS 代码规范</title>
<link href="https://github.com/knightsj/knightsj.github.io/2017/06/14/iOS%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83/"/>
<id>https://github.com/knightsj/knightsj.github.io/2017/06/14/iOS代码规范/</id>
<published>2017-06-14T13:16:32.000Z</published>
<updated>2019-03-17T13:26:23.446Z</updated>
<summary type="html">
<p><img src="http://upload-images.jianshu.io/upload_images/859001-a9d78ce3d5e7114f.jpeg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="配图来自:nipic.com"></p>
<p>利用上周的业余时间把这篇规范整理了出来,我会将这篇规范作为我们iOS团队的代码规范,并且还会根据读者的反馈,项目的实践和研究的深入做不定时更新,还希望各位朋友看了多多指正和批评。</p>
<p>这篇规范一共分为三个部分:</p>
<ol>
<li>核心原则:介绍了这篇代码规范所遵循的核心原则。</li>
<li>通用规范:不局限于iOS的通用性的代码规范(使用C语言和Swift语言)。</li>
<li>iOS规范:仅适用于iOS的代码规范(使用Objective-C语言)。</li>
</ol>
</summary>
<category term="Production" scheme="https://github.com/knightsj/knightsj.github.io/categories/Production/"/>
<category term="iOS" scheme="https://github.com/knightsj/knightsj.github.io/tags/iOS/"/>
<category term="Objective-C" scheme="https://github.com/knightsj/knightsj.github.io/tags/Objective-C/"/>
</entry>
<entry>
<title>2017年5月iOS招人心得(附面试题)</title>
<link href="https://github.com/knightsj/knightsj.github.io/2017/06/08/2017%E5%B9%B45%E6%9C%88iOS%E6%8B%9B%E4%BA%BA%E5%BF%83%E5%BE%97%EF%BC%88%E9%99%84%E9%9D%A2%E8%AF%95%E9%A2%98%EF%BC%89/"/>
<id>https://github.com/knightsj/knightsj.github.io/2017/06/08/2017年5月iOS招人心得(附面试题)/</id>
<published>2017-06-08T11:35:49.000Z</published>
<updated>2019-03-17T13:26:23.435Z</updated>
<summary type="html">
<p><img src="http://upload-images.jianshu.io/upload_images/859001-62c64645adc0ec72.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="配图来自:https://pixabay.com"></p>
<blockquote>
<p>就在上个月中旬,技术老大让我招两个1-2年的iOS开发,把简历的筛选和第一轮技术面试的任务交给了我。</p>
</blockquote>
<p>从筛选第一份简历,准备面试题,到成功招到两个人一共花了两个星期多一点,总体来说还是比较顺利的。两位通过者都比较稳重踏实,而且对技术也比较有追求。这也可能和我筛选简历比较谨慎有关系,这次筛选简历所花费的精力是不比面试花费的少的。</p>
<p>虽然时间跨度不是很长,但是毕竟是第一次,所以有些感触,想总结出来分享给大家。这篇总结分为两个部分:</p>
<ul>
<li>第一部分是我当时准备的面试题</li>
<li>第二部分是我的心得</li>
</ul>
<p>我重点在本文的第二部分说一下这次面试别人的心得体会。而关于第一部分的面试题,文中不提供答案(因为不是本文的重点)。</p>
</summary>
<category term="Career" scheme="https://github.com/knightsj/knightsj.github.io/categories/Career/"/>
<category term="Life" scheme="https://github.com/knightsj/knightsj.github.io/tags/Life/"/>
<category term="Job" scheme="https://github.com/knightsj/knightsj.github.io/tags/Job/"/>
</entry>
</feed>