-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
306 lines (273 loc) · 17.8 KB
/
index.html
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
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>
<meta http-equiv="Cache-Control" content="no-transform" />
<meta http-equiv="Cache-Control" content="no-siteapp" />
<meta name="theme-color" content="#f8f5ec" />
<meta name="msapplication-navbutton-color" content="#f8f5ec">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="#f8f5ec">
<meta name="description" content="Stedfast as thou art."/><link rel="alternate" href="/atom.xml" title="Calios' Eden"><link rel="shortcut icon" type="image/x-icon" href="/favicon.ico?v=2.11.0" />
<link rel="canonical" href="http://www.caliosd.gq/"/>
<link rel="stylesheet" type="text/css" href="/lib/fancybox/jquery.fancybox.css" />
<link rel="stylesheet" type="text/css" href="/css/style.css?v=2.11.0" />
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-71292392-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-71292392-1');
</script><script id="baidu_push">
(function(){
var bp = document.createElement('script');
var curProtocol = window.location.protocol.split(':')[0];
if (curProtocol === 'https') {
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
}
else {
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
}
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();
</script>
<script>
window.config = {"leancloud":{"app_id":null,"app_key":null},"toc":true,"fancybox":true,"pjax":"","latex":false};
</script>
<title>Calios' Eden</title>
<link rel="alternate" href="/atom.xml" title="Calios' Eden" type="application/atom+xml">
</head>
<body><div id="mobile-navbar" class="mobile-navbar">
<div class="mobile-header-logo">
<a href="/." class="logo">Calios' Eden</a>
</div>
<div class="mobile-navbar-icon">
<span></span>
<span></span>
<span></span>
</div>
</div>
<nav id="mobile-menu" class="mobile-menu slideout-menu">
<ul class="mobile-menu-list"><a href="/">
<li class="mobile-menu-item">Home
</li>
</a><a href="/archives/">
<li class="mobile-menu-item">Archives
</li>
</a><a href="/tags/">
<li class="mobile-menu-item">Tags
</li>
</a><a href="/about/">
<li class="mobile-menu-item">About
</li>
</a></ul>
</nav>
<div class="container" id="mobile-panel">
<header id="header" class="header"><div class="logo-wrapper">
<a href="/." class="logo">Calios' Eden</a>
</div>
<nav class="site-navbar"><ul id="menu" class="menu"><li class="menu-item">
<a class="menu-item-link" href="/">
Home
</a>
</li>
<li class="menu-item">
<a class="menu-item-link" href="/archives/">
Archives
</a>
</li>
<li class="menu-item">
<a class="menu-item-link" href="/tags/">
Tags
</a>
</li>
<li class="menu-item">
<a class="menu-item-link" href="/about/">
About
</a>
</li>
</ul></nav>
</header>
<main id="main" class="main">
<div class="content-wrapper">
<div id="content" class="content"><section id="posts" class="posts"><article class="post">
<header class="post-header">
<h1 class="post-title"><a class="post-link" href="/2020/03/22/issue-reflect-200322/">记一次线上故障处理及思考</a>
</h1>
<div class="post-meta">
<span class="post-time">
2020-03-22
</span></div>
</header>
<div class="post-content"><p>下午正在翻看刚刚读过的一本书,业务群里报了个线上的问题,紧急修复了之后测试、部署上线。<br>乍一看,出现问题的点在一个长达 171 行的方法中,出错的原因是在对一个 map 变量操作之前没有正确赋值。但仔细看来,这段代码已经开始有些坏味道了。<br>核心的问题是:<strong>逻辑复杂,方法过长</strong>。</p>
<div class="read-more">
<a href="/2020/03/22/issue-reflect-200322/" class="read-more-link">Read more..</a>
</div>
</div></article>
<article class="post">
<header class="post-header">
<h1 class="post-title"><a class="post-link" href="/2020/03/15/go-reflect/">Go 的反射</a>
</h1>
<div class="post-meta">
<span class="post-time">
2020-03-15
</span></div>
</header>
<div class="post-content"><h2 id="1-概述"><a href="#1-概述" class="headerlink" title="1.概述"></a>1.概述</h2><p>什么是反射?反射是程序能够查看自身结构、类型、甚至能够操纵自身的能力,是元编程的一种形式。</p>
<p>我们说某个语言具有元编程的能力,通常分成两类:</p>
<ul>
<li>一类是宏,即在编译期生成代码,比如C;</li>
<li>另一类是在运行时修改代码的行为,比如 Objective-C,比如 Golang。</li>
</ul>
<p>Go 通过 reflect 库提供了在运行时操控数据的能力,就是后面的一种。本篇将结合 reflect 库来讲解 Go 是如何提供反射的功能、并为我们的开发提供便利的。</p>
<div class="read-more">
<a href="/2020/03/15/go-reflect/" class="read-more-link">Read more..</a>
</div>
</div></article>
<article class="post">
<header class="post-header">
<h1 class="post-title"><a class="post-link" href="/2020/02/23/go-versioning/">Go 的版本管理</a>
</h1>
<div class="post-meta">
<span class="post-time">
2020-02-23
</span></div>
</header>
<div class="post-content"><h2 id="Semantic-Versioning-2-0-0"><a href="#Semantic-Versioning-2-0-0" class="headerlink" title="Semantic Versioning 2.0.0"></a>Semantic Versioning 2.0.0</h2><p>在软件管理的版本控制中,存在一个可怕的领域,名为<del>“手冢领域”</del>“依赖地狱”,为了解决这个问题,<a href="https://tom.preston-werner.com/" target="_blank" rel="external">Tom Preston-Werner</a> 提出了一组简单的规则来明确版本号应该如何指定和增加,这个系统就叫做 <a href="https://semver.org/" target="_blank" rel="external">“Semantic Versioning”</a>。</p>
<div class="read-more">
<a href="/2020/02/23/go-versioning/" class="read-more-link">Read more..</a>
</div>
</div></article>
<article class="post">
<header class="post-header">
<h1 class="post-title"><a class="post-link" href="/2020/01/30/oop-in-golang/">Go 的面向对象编程</a>
</h1>
<div class="post-meta">
<span class="post-time">
2020-01-30
</span></div>
</header>
<div class="post-content"><p>在我的印象中,正经而严肃认真地看“面向对象”这个概念,有这么几次:第一次,是大学时老师上课讲的,Car和Taxi,Animal和Dog、Cat,Teacher和Student,如此如此;第二次,是在臧成威老师的 iOS 黑魔法课中,学习如何用 C 语言实现面向对象的各种特性;第三次,应该就是最近,在学习设计模式中遇到最形而上之、又被最广泛使用的编程思想——面向对象。这一次,就从我写后端以来最常用的语言 Go 入手,研究一下它是如何体现面向对象思想、日常开发中又是如何使用 Go 进行面向对象编程的吧。</p>
<h2 id="使用-Go-如何实现面向对象编程?"><a href="#使用-Go-如何实现面向对象编程?" class="headerlink" title="使用 Go 如何实现面向对象编程?"></a>使用 Go 如何实现面向对象编程?</h2><p>首先,第一个问题是:“Go 是一门面向对象的语言吗?”</p>
<div class="read-more">
<a href="/2020/01/30/oop-in-golang/" class="read-more-link">Read more..</a>
</div>
</div></article>
<article class="post">
<header class="post-header">
<h1 class="post-title"><a class="post-link" href="/2019/12/19/from-proto-to-go/">从 .proto 到 .pb.go</a>
</h1>
<div class="post-meta">
<span class="post-time">
2019-12-19
</span></div>
</header>
<div class="post-content"><p>proto buffer在平时开发中使用很多,比如下面这个,就是一个最简单的 .proto 文件:<br><figure class="highlight protobuf"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div></pre></td><td class="code"><pre><div class="line">syntax = <span class="string">"proto3"</span>;</div><div class="line"></div><div class="line"><span class="keyword">package</span> demopb;</div><div class="line"></div><div class="line"><span class="class"><span class="keyword">service</span> <span class="title">Demo</span> </span>{</div><div class="line"> <span class="function"><span class="keyword">rpc</span> Hello (HelloRequest) <span class="keyword">returns</span> (HelloResponse) {}</span></div><div class="line">}</div><div class="line"></div><div class="line">message HelloRequest {</div><div class="line"> string name = 1;</div><div class="line"> <span class="built_in">string</span> greeting = <span class="number">2</span>;</div><div class="line">}</div><div class="line"></div><div class="line"><span class="class"><span class="keyword">message</span> <span class="title">HelloResponse</span> </span>{</div><div class="line"> <span class="built_in">string</span> name = <span class="number">1</span>;</div><div class="line"> <span class="built_in">string</span> greeting = <span class="number">2</span>;</div><div class="line">}</div></pre></td></tr></table></figure></p>
<p>那么它是如何从 .proto 转化成我们可以直接调用的 .go 文件呢?我们接下来依次拆解这几部分:</p>
<ol>
<li>package</li>
<li>message</li>
<li>field</li>
<li>service</li>
</ol>
<div class="read-more">
<a href="/2019/12/19/from-proto-to-go/" class="read-more-link">Read more..</a>
</div>
</div></article>
<article class="post">
<header class="post-header">
<h1 class="post-title"><a class="post-link" href="/2017/10/26/WWDC-2017-412-Auto-Layout-Techniques-in-IB/">WWDC 2017-412: Auto Layout Techniques in Interface Builder</a>
</h1>
<div class="post-meta">
<span class="post-time">
2017-10-26
</span></div>
</header>
<div class="post-content"><p>Here’s a summary for WWDC 2017, Session 412: Auto Layout Techniques in Interface Builder<br><a href="https://developer.apple.com/videos/play/wwdc2017/412/" target="_blank" rel="external">https://developer.apple.com/videos/play/wwdc2017/412/</a></p>
<div class="read-more">
<a href="/2017/10/26/WWDC-2017-412-Auto-Layout-Techniques-in-IB/" class="read-more-link">Read more..</a>
</div>
</div></article>
<article class="post">
<header class="post-header">
<h1 class="post-title"><a class="post-link" href="/2017/06/29/memory-management-with-ARC/">iOS的内存管理之ARC部分总结</a>
</h1>
<div class="post-meta">
<span class="post-time">
2017-06-29
</span></div>
</header>
<div class="post-content"><p>在《Objective-C高级编程:iOS与OS X多线程和内存管理》一书中,对于ARC的部分有详尽的讲解。我将这一部分整理成思维导图,算是一个归档吧。</p>
<div class="read-more">
<a href="/2017/06/29/memory-management-with-ARC/" class="read-more-link">Read more..</a>
</div>
</div></article>
<article class="post">
<header class="post-header">
<h1 class="post-title"><a class="post-link" href="/2017/06/28/copy/">关于copy的常见问题</a>
</h1>
<div class="post-meta">
<span class="post-time">
2017-06-28
</span></div>
</header>
<div class="post-content"><h3 id="1-property中的copy关键字如何使用?"><a href="#1-property中的copy关键字如何使用?" class="headerlink" title="1.@property中的copy关键字如何使用?"></a>1.<code>@property</code>中的<code>copy</code>关键字如何使用?</h3><ul>
<li>对于<code>NSString</code>、<code>NSArray</code>、<code>NSDictionary</code>而言:见下面几个问题的回答。</li>
<li>对于block而言:需要使用<code>copy</code>是为了在原有上下文范围外,继续追踪它捕获的状态。在使用ARC的时候不需要担心这个问题,因为是自动进行的,但是最佳实践是为property属性标记上这个必然的行为(即,添加上copy关键字)。</li>
</ul>
<div class="read-more">
<a href="/2017/06/28/copy/" class="read-more-link">Read more..</a>
</div>
</div></article>
<article class="post">
<header class="post-header">
<h1 class="post-title"><a class="post-link" href="/2017/05/30/issue-of-lazy-loading-property/">Issue of lazy loading property</a>
</h1>
<div class="post-meta">
<span class="post-time">
2017-05-30
</span></div>
</header>
<div class="post-content"><p>I’ve got some <code>readonly</code> properties in my .h file. And when I tried to lazy loading them as usual like this.<br><figure class="highlight sqf"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div></pre></td><td class="code"><pre><div class="line"><span class="comment">// MyView.h</span></div><div class="line">@property (nonatomic, strong, readonly) UIImageView *imageView;</div><div class="line"></div><div class="line"><span class="comment">// MyView.m</span></div><div class="line">- (UIImageView *)imageView</div><div class="line">{</div><div class="line"> <span class="keyword">if</span> (!<span class="variable">_imageView</span>)</div><div class="line"> {</div><div class="line"> <span class="variable">_imageView</span> = [UIImageView new];</div><div class="line"> <span class="variable">_imageView</span>.translatesAutoresizingMaskIntoConstraints = NO;</div><div class="line"> <span class="variable">_imageView</span>.backgroundColor = [UIColor clearColor];</div><div class="line"> <span class="variable">_imageView</span>.contentMode = UIViewContentModeScaleAspectFit;</div><div class="line"> <span class="variable">_imageView</span>.userInteractionEnabled = NO;</div><div class="line"> <span class="variable">_imageView</span>.accessibilityIdentifier = @<span class="string">"empty set image view"</span>;</div><div class="line"></div><div class="line"> <span class="variable">_imageView</span>.<span class="built_in">image</span> = <span class="variable">_defaultImage</span>;</div><div class="line"></div><div class="line"> [<span class="variable">_contentView</span> addSubview:<span class="variable">_imageView</span>];</div><div class="line"> }</div><div class="line"> return <span class="variable">_imageView</span>;</div><div class="line">}</div></pre></td></tr></table></figure></p>
<p>Then…bang! It threw out errors in bulk, yelling “Use of undeclared identifier ‘_imageView’”. What the hell have I done!</p>
<div class="read-more">
<a href="/2017/05/30/issue-of-lazy-loading-property/" class="read-more-link">Read more..</a>
</div>
</div></article>
<nav class="pagination"><a class="next" href="/page/2/">
<span class="next-text">Next</span>
<i class="iconfont icon-right"></i>
</a>
</nav></section></div></div>
</main>
<footer id="footer" class="footer"><div class="social-links"><a href="mailto:[email protected]" class="iconfont icon-email" title="email"></a>
<a href="http://github.com/caliosd" class="iconfont icon-github" title="github"></a>
<a href="/atom.xml" class="iconfont icon-rss" title="rss"></a>
</div><div class="copyright">
<span class="power-by">
Powered by <a class="hexo-link" href="https://hexo.io/">Hexo</a>
</span>
<span class="division">|</span>
<span class="theme-info">
Theme -
<a class="theme-link" href="https://github.com/ahonn/hexo-theme-even">Even</a>
</span>
<span class="copyright-year">©2015 - 2020<span class="heart">
<i class="iconfont icon-heart"></i>
</span>
<span class="author">Calios</span>
</span>
</div>
</footer>
<div class="back-to-top" id="back-to-top">
<i class="iconfont icon-up"></i>
</div>
</div><script type="text/javascript" src="/lib/jquery/jquery.min.js"></script>
<script type="text/javascript" src="/lib/slideout/slideout.js"></script>
<script type="text/javascript" src="/lib/fancybox/jquery.fancybox.pack.js"></script>
<script type="text/javascript" src="/js/src/even.js?v=2.11.0"></script>
</body>
</html>