-
Notifications
You must be signed in to change notification settings - Fork 0
/
atom.xml
413 lines (264 loc) · 146 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
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>More Than Codes</title>
<subtitle>怕什么真理无穷,进一步有进一步的欢喜。</subtitle>
<link href="/atom.xml" rel="self"/>
<link href="http://yoursite.com/"/>
<updated>2020-07-05T12:41:45.072Z</updated>
<id>http://yoursite.com/</id>
<author>
<name>金成能</name>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title>【技术分享】基于百度地图的中国人口跨地区迁徙数据抓取</title>
<link href="http://yoursite.com/2020/07/05/%E3%80%90%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB%E3%80%91%E5%9F%BA%E4%BA%8E%E7%99%BE%E5%BA%A6%E5%9C%B0%E5%9B%BE%E7%9A%84%E4%B8%AD%E5%9B%BD%E4%BA%BA%E5%8F%A3%E8%B7%A8%E5%9C%B0%E5%8C%BA%E8%BF%81%E5%BE%99%E6%95%B0%E6%8D%AE%E6%8A%93%E5%8F%96/"/>
<id>http://yoursite.com/2020/07/05/【技术分享】基于百度地图的中国人口跨地区迁徙数据抓取/</id>
<published>2020-07-05T11:51:56.000Z</published>
<updated>2020-07-05T12:41:45.072Z</updated>
<content type="html"><![CDATA[<p>这篇Blog分享了我在高级计量经济学课程论文研究过程中从百度地图慧眼抓取省市级人口跨地区迁徙数据和各省市迁徙规模指数数据的过程。<br><a id="more"></a></p><h2 id="使用提示与重要声明"><a href="#使用提示与重要声明" class="headerlink" title="使用提示与重要声明"></a>使用提示与重要声明</h2><ul><li><b>该脚本只是通过正常频率的模拟操作以实现数据的自动获取,调用的是百度地图慧眼的官方API,不对该系统进行任何形式的攻击与破坏;</b></li><li><b>本脚本完全开源,且保证初始参数设置不会对服务器造成显著影响,请在使用脚本的过程中遵守中华人民共和国网络安全法等相关法律法规,请勿通过高频率访问对服务器造成压力过载。因使用者滥用该脚本造成的一切责任,由使用者个人承担;</b></li><li><b>该脚本获取的数据归百度所有,仅限个人科研使用,应数据滥用造成的一切后果由使用者个人承担;</b></li></ul><h2 id="数据来源"><a href="#数据来源" class="headerlink" title="数据来源"></a>数据来源</h2><p>因为我在课程论文研究过程中想使用各省市之间的迁徙数据,但没有找到直接的数据文件,但发现<a href="https://qianxi.baidu.com/" target="_blank" rel="external">百度地图慧眼</a>提供了可视化的人口迁徙图表,其数据页面如下图所示。<br><img src="https://raw.githubusercontent.com/JinChengneng/images/master/baidumap.png" alt=""><br>我对页面中两处红框部分的数据比较感兴趣,分别是省级或市级人口跨地区迁徙数据和各省市迁徙规模指数数据,就想着将其原始数据抓取下来。</p><h2 id="数据接口"><a href="#数据接口" class="headerlink" title="数据接口"></a>数据接口</h2><p>通过分析页面加载过程中传输的数据,获取其数据访问接口。以武汉市为例,获取其2020年2月1日人口迁出到各城市的接口为:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">https://huiyan.baidu.com/migration/cityrank.jsonp?dt=city&id=420100&type=move_in&date=20200201</div></pre></td></tr></table></figure></p><p>其中<code>dt=city</code>表示市级迁徙数据,<code>id=420100</code>表示武汉市(即武汉市邮政编码),<code>type=move_in</code>表示人口迁出数据,<code>date=20200101</code>表示日期为2020年2月1日。<br>同理,湖北省2020年2月1日人口迁出到各省市的接口为:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">https://huiyan.baidu.com/migration/provincerank.jsonp?dt=province&id=420000&type=move_out&date=20200201</div></pre></td></tr></table></figure></p><p>湖北省历史人口迁出规模指数的接口为:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">https://huiyan.baidu.com/migration/historycurve.jsonp?dt=province&id=310000&type=move_in</div></pre></td></tr></table></figure></p><h2 id="批量获取"><a href="#批量获取" class="headerlink" title="批量获取"></a>批量获取</h2><p>既然有了数据获取接口,接下来调用接口并保存数据的过程就比较简单了。在这里给几个简单的小例子。<br>先导入需要的包,<br><figure class="highlight python"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">import</span> requests, json</div><div class="line"><span class="keyword">import</span> datetime, time</div><div class="line"><span class="keyword">import</span> pandas <span class="keyword">as</span> pd</div></pre></td></tr></table></figure></p><p>获取两个日期间的所有日期,以2020年1月10日至2020年3月15日为例,<br><figure class="highlight python"><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></pre></td><td class="code"><pre><div class="line"><span class="function"><span class="keyword">def</span> <span class="title">getEveryDay</span><span class="params">(begin_date,end_date)</span>:</span></div><div class="line"> date_list = []</div><div class="line"> begin_date = datetime.datetime.strptime(begin_date, <span class="string">"%Y-%m-%d"</span>)</div><div class="line"> end_date = datetime.datetime.strptime(end_date,<span class="string">"%Y-%m-%d"</span>)</div><div class="line"> <span class="keyword">while</span> begin_date <= end_date:</div><div class="line"> date_str = begin_date.strftime(<span class="string">"%Y%m%d"</span>)</div><div class="line"> date_list.append(date_str)</div><div class="line"> begin_date += datetime.timedelta(days=<span class="number">1</span>)</div><div class="line"> <span class="keyword">return</span> date_list</div><div class="line">date_list = getEveryDay(<span class="string">'2020-01-10'</span>,<span class="string">'2020-03-15'</span>)</div></pre></td></tr></table></figure></p><p>获取2020年1月10日至2020年3月15日武汉人口跨地区迁徙到各个城市的数据,<br><figure class="highlight python"><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></pre></td><td class="code"><pre><div class="line">df = pd.DataFrame(columns=[<span class="string">'date'</span>, <span class="string">'city_name'</span>, <span class="string">'province_name'</span>, <span class="string">'value'</span>])</div><div class="line"><span class="keyword">for</span> date <span class="keyword">in</span> date_list:</div><div class="line"> time.sleep(<span class="number">5</span>) <span class="comment"># 控制数据获取的频率</span></div><div class="line"> response = requests.get(<span class="string">"https://huiyan.baidu.com/migration/cityrank.jsonp?dt=city&id=420100&type=move_in&date="</span>+date)</div><div class="line"> j = json.loads(response.content[<span class="number">3</span>:<span class="number">-1</span>])</div><div class="line"> <span class="keyword">for</span> item <span class="keyword">in</span> j[<span class="string">'data'</span>][<span class="string">'list'</span>]:</div><div class="line"> df = df.append({<span class="string">'date'</span>:date, <span class="string">'city_name'</span>:item[<span class="string">'city_name'</span>], <span class="string">'province_name'</span>:item[<span class="string">'province_name'</span>],<span class="string">'value'</span>:item[<span class="string">'value'</span>] }, ignore_index=<span class="keyword">True</span>)</div><div class="line">df.to_csv(<span class="string">'wuhan_out.csv'</span>, encoding=<span class="string">'utf_8_sig'</span>)</div></pre></td></tr></table></figure></p><p>获取2020年1月10日至2020年3月15日湖北人口跨地区迁徙到各个省份的数据,<br><figure class="highlight python"><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></pre></td><td class="code"><pre><div class="line">df = pd.DataFrame(columns=[<span class="string">'date'</span>, <span class="string">'province_name'</span>, <span class="string">'value'</span>])</div><div class="line"><span class="keyword">for</span> date <span class="keyword">in</span> date_list:</div><div class="line"> time.sleep(<span class="number">5</span>)</div><div class="line"> response = requests.get(<span class="string">"https://huiyan.baidu.com/migration/provincerank.jsonp?dt=province&id=420000&type=move_out&date="</span>+date)</div><div class="line"> j = json.loads(response.content[<span class="number">3</span>:<span class="number">-1</span>])</div><div class="line"> <span class="keyword">for</span> item <span class="keyword">in</span> j[<span class="string">'data'</span>][<span class="string">'list'</span>]:</div><div class="line"> df = df.append({<span class="string">'date'</span>:date, <span class="string">'province_name'</span>:item[<span class="string">'province_name'</span>],<span class="string">'value'</span>:item[<span class="string">'value'</span>] }, ignore_index=<span class="keyword">True</span>)</div><div class="line">df.to_csv(<span class="string">"hubei_out.csv"</span>, encoding=<span class="string">'utf_8_sig'</span>)</div></pre></td></tr></table></figure></p><p>获取上海市历史人口跨地区迁徙迁入规模指数数据,<br><figure class="highlight python"><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></pre></td><td class="code"><pre><div class="line">response = requests.get(<span class="string">'https://huiyan.baidu.com/migration/historycurve.jsonp?dt=province&id=310000&type=move_in'</span>)</div><div class="line">j = json.loads(response.content[<span class="number">3</span>:<span class="number">-1</span>])</div><div class="line">my_dict = j[<span class="string">'data'</span>][<span class="string">'list'</span>]</div><div class="line">my_df = pd.DataFrame(my_dict,index=[<span class="number">0</span>]).T</div><div class="line">my_df.to_csv(<span class="string">'in_index_shanghai.csv'</span>, header = <span class="keyword">False</span>)</div></pre></td></tr></table></figure></p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>在计量经济学以及其他许许多多的领域中经常使用到人口迁移数据,非常感谢百度地图慧眼团队提供的细粒度的日度数据,相信会给很多科研人员带来便利,也希望我的小教程能帮到大家!</p>]]></content>
<summary type="html">
<p>这篇Blog分享了我在高级计量经济学课程论文研究过程中从百度地图慧眼抓取省市级人口跨地区迁徙数据和各省市迁徙规模指数数据的过程。<br>
</summary>
</entry>
<entry>
<title>【技术分享】上海财经大学选课系统课程余量监控脚本</title>
<link href="http://yoursite.com/2020/02/27/%E3%80%90%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB%E3%80%91%E4%B8%8A%E6%B5%B7%E8%B4%A2%E7%BB%8F%E5%A4%A7%E5%AD%A6%E9%80%89%E8%AF%BE%E7%B3%BB%E7%BB%9F%E8%AF%BE%E7%A8%8B%E4%BD%99%E9%87%8F%E7%9B%91%E6%8E%A7%E8%84%9A%E6%9C%AC/"/>
<id>http://yoursite.com/2020/02/27/【技术分享】上海财经大学选课系统课程余量监控脚本/</id>
<published>2020-02-27T02:37:56.000Z</published>
<updated>2020-02-27T08:52:07.001Z</updated>
<content type="html"><![CDATA[<p>最近正临选课,想选的课没选上,就写了一个课程余量监控的脚本,在有人退课的时候发送系统提醒,最后成功抢到课。这篇 blog 会分享这个课程余量监控脚本。<br><a id="more"></a></p><h2 id="使用提示与重要声明"><a href="#使用提示与重要声明" class="headerlink" title="使用提示与重要声明"></a>使用提示与重要声明</h2><ul><li><b>该脚本只是通过正常频率的模拟操作以实现课程容量监控的目的,调用的是上海财经大学教学管理信息系统的官方API,不对该系统进行任何形式的攻击与破坏;</b></li><li><b>本脚本完全开源,且保证初始参数设置不会对服务器造成显著影响,请在使用脚本的过程中遵守中华人民共和国网络安全法和上海财经大学的相关规章制度,请勿通过高频率访问对服务器造成压力过载。因使用者滥用该脚本造成的一切责任,由使用者个人承担;</b></li><li><b>为保证选课的公平、有序,本脚本不提供自动选课功能,仅提供余量监控与提醒功能,后续也不会更新提供抢课功能;</b></li><li><b>Coockies 可能记录了你的用户ID和密码等隐私信息,请勿随意分享。因 coockies 随意分享造成的一切个人损失,由使用者个人承担。</b></li></ul><h2 id="源代码"><a href="#源代码" class="headerlink" title="源代码"></a>源代码</h2><figure class="highlight python"><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><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">import</span> requests</div><div class="line"><span class="keyword">import</span> json</div><div class="line"><span class="keyword">import</span> time</div><div class="line"><span class="keyword">from</span> win10toast <span class="keyword">import</span> ToastNotifier</div><div class="line"></div><div class="line"><span class="comment"># 输入你的设置</span></div><div class="line">profileId = <span class="number">0000</span> </div><div class="line">wanted_course_ids = [<span class="string">'000000'</span>,<span class="string">'000000'</span>,<span class="string">'000000'</span>] </div><div class="line">cookies_raw = <span class="string">''</span> </div><div class="line">request_frequence = <span class="number">20</span> </div><div class="line"></div><div class="line">COURSE_URL = <span class="string">"http://eams.sufe.edu.cn/eams/stdElectCourse!queryStdCount.action?profileId="</span></div><div class="line"></div><div class="line">cookies={}</div><div class="line">cookies_arr = cookies_raw.split(<span class="string">';'</span>)</div><div class="line"><span class="keyword">for</span> ck <span class="keyword">in</span> cookies_arr:</div><div class="line"> name,value=ck.strip().split(<span class="string">'='</span>,<span class="number">1</span>)</div><div class="line"> cookies[name]=value</div><div class="line"></div><div class="line">request_count = <span class="number">0</span></div><div class="line"><span class="keyword">while</span> <span class="keyword">True</span>:</div><div class="line"> time.sleep(request_frequence)</div><div class="line"> request_count += <span class="number">1</span></div><div class="line"> print(<span class="string">"正在监控课程余量,已请求"</span>,request_count,<span class="string">"次"</span>)</div><div class="line"></div><div class="line"> response = requests.get(COURSE_URL+str(profileId),cookies=cookies)</div><div class="line"> student_count_text = response.text.split(<span class="string">'window.lessonId2Counts='</span>)[<span class="number">1</span>]</div><div class="line"></div><div class="line"> replace_list = [<span class="string">'sc'</span>, <span class="string">'lc'</span>]</div><div class="line"> <span class="keyword">for</span> replace_text <span class="keyword">in</span> replace_list:</div><div class="line"> student_count_text = student_count_text.replace(</div><div class="line"> <span class="string">'{}:'</span>.format(replace_text), <span class="string">'"{}":'</span>.format(replace_text))</div><div class="line"></div><div class="line"> student_count_text = student_count_text.replace(<span class="string">"'"</span>, <span class="string">'"'</span>)</div><div class="line"> student_count_list = json.loads(student_count_text)</div><div class="line"></div><div class="line"> <span class="keyword">for</span> wanted_course_id <span class="keyword">in</span> wanted_course_ids:</div><div class="line"> course_count = student_count_list[wanted_course_id]</div><div class="line"> <span class="keyword">if</span> course_count[<span class="string">'sc'</span>] != course_count[<span class="string">'lc'</span>]:</div><div class="line"> toaster = ToastNotifier()</div><div class="line"> toaster.show_toast(<span class="string">u'快抢课'</span>, <span class="string">u'课程有余量了!'</span>)</div><div class="line"> <span class="keyword">break</span></div></pre></td></tr></table></figure><h2 id="使用提示"><a href="#使用提示" class="headerlink" title="使用提示"></a>使用提示</h2><ol><li>确保 <code>requests、json、time、win10toast</code> 这四个包都安装好了,如果没有安装先 <code>pip install</code> ;</li><li>设置参数 <code>profileId、wanted_course_ids、cookies_raw、request_frequence</code>:<ul><li><code>profileId</code> 是你的个人Id,可以进入选课系统从选课页面的链接上获取;</li><li><code>wanted_course_ids</code> 是你希望检测课程余量的课程 Id,可以进入选课系统从课程介绍页面的链接上获取;</li><li><code>coockies_raw</code> 是你的coockies,可以按F12从 Network 里的 Request Headers 获取,或者搜索如何获取 coockies,coockies 可能包含隐私数据,建议不要随意分享;</li><li><code>request_frequence</code> 是你的请求频率,默认设置是20秒,选课系统本身的刷新频率为12秒左右,所以20秒请求一次完全不会对服务器造成影响,请勿过分修改该参数设置;</li></ul></li><li>如果当前监测课程有余量,则会发送系统通知进行提醒。该通知提醒目前还只在 Win10 上测试过,不一定有用。<br><img src="https://raw.githubusercontent.com/JinChengneng/images/master/notification.png" alt=""></li></ol><p>最后我靠着这个简单的小脚本一边打着王者荣耀一边抢到了最想要的课,祝大家也都选课顺利!因为抢课时间紧,这个小脚本大概只用了不到一个小时的时间完成,所以可能会有一些使用上的问题或者实现上不成熟的地方,欢迎多多交流!</p>]]></content>
<summary type="html">
<p>最近正临选课,想选的课没选上,就写了一个课程余量监控的脚本,在有人退课的时候发送系统提醒,最后成功抢到课。这篇 blog 会分享这个课程余量监控脚本。<br>
</summary>
</entry>
<entry>
<title>【技术分享】程序员是怎么下电影的?</title>
<link href="http://yoursite.com/2018/12/18/%E3%80%90%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB%E3%80%91%E7%A8%8B%E5%BA%8F%E5%91%98%E6%98%AF%E6%80%8E%E4%B9%88%E4%B8%8B%E7%94%B5%E5%BD%B1%E7%9A%84%EF%BC%9F/"/>
<id>http://yoursite.com/2018/12/18/【技术分享】程序员是怎么下电影的?/</id>
<published>2018-12-18T11:00:00.000Z</published>
<updated>2020-02-27T08:10:19.409Z</updated>
<content type="html"><![CDATA[<p>最近有很多小伙伴问我怎么在网络上下载最新的或者版权保护比较严格的电影,今天就跟大家分享一下一个程序员是怎么下载资源的(以电影为例)。<br><b>【重要声明】这篇博客仅供技术分享,仅探讨一种技术上可行的方案。在实际使用这种方案时,请确保该方案符合你所在地区的版权保护相关法律,并在技术测试后删除所有受保护的资源,切勿传播。</b></p><a id="more"></a><h2 id="需要的工具"><a href="#需要的工具" class="headerlink" title="需要的工具"></a>需要的工具</h2><ul><li>qBittorrent (下载工具)</li><li>PotPlayer (或者其他视频播放器,能导入字幕就行)</li><li>字幕库、人人字幕组、诸神字幕组等字幕搜索网站</li></ul><h2 id="下载流程"><a href="#下载流程" class="headerlink" title="下载流程"></a>下载流程</h2><ul><li>下载qBittorrent,安装并启动;</li><li>点击左上角的搜索Tab,进入搜索页面,然后选择右下角的“搜索插件”,添加一些你需要的搜索插件;<br> 【警告:在使用这些种子源时,请确认它符合您所在国家的版权法】<br> <img src="https://raw.githubusercontent.com/JinChengneng/images/master/Qbittorrent_1.jpg" alt=""> </li><li>然后搜索你想要的电影的名字,选择一个做种者比较多的种子,双击并等它检索完元信息,然后就可以下载啦。下载时你会感受到来自全世界各地网友磅礴的力量(比限速的某云不知道高到哪里去了)<br> <img src="https://raw.githubusercontent.com/JinChengneng/images/master/Qbittorrent_2.jpg" alt=""></li><li>因为高清的视频源基本不会把字幕嵌进画面里,所以等电影下载完成的过程中可以去上文提到的几个网站找到自己需要的字幕文件,放到视频同一个文件夹里;</li><li>等视频下载完成,就可以用PotPlayer导入字幕,然后愉快地看电影啦!</li></ul><h2 id="其他"><a href="#其他" class="headerlink" title="其他"></a>其他</h2><ul><li><b>【重要的事情】p2p下载重要的是分享精神,所以下载完电影后尽量把qBittorrent放在后台吧,它会给全球各地其他需要这个资源的网友做种,请不要做只下载不上传的“吸血鬼”。上传速度软件本身有限制,不会影响你网络的正常使用的。</b></li><li>很多视频播放软件也有内置的字幕搜索器,比如说小米手机自带的播放器就会自动搜索opensubtitle.org上的字幕文件,所以如果你惯用的视频播放器有这个功能的话,就可以跳过搜索字幕的步骤。</li><li>推荐搜索时首选英语,种子数量更多,质量更高。</li></ul><figure class="highlight python"><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><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">import</span> requests</div><div class="line"><span class="keyword">import</span> json</div><div class="line"><span class="keyword">import</span> time</div><div class="line"><span class="keyword">from</span> win10toast <span class="keyword">import</span> ToastNotifier</div><div class="line"></div><div class="line"><span class="comment"># 输入你的设置</span></div><div class="line">profileId = <span class="number">0000</span> <span class="comment">#输入你的profileId(从选课页面url中获取)</span></div><div class="line">wanted_course_ids = [<span class="string">'280030'</span>,<span class="string">'280031'</span>,<span class="string">'281135'</span>] <span class="comment">#输入你要监控的课程id(从选课页面点击课程介绍url获取)</span></div><div class="line">cookies_raw = <span class="string">''</span> <span class="comment">#输入你的cookies(按F12从Network里的Request Headers获取,或者搜索如何获取coockies)</span></div><div class="line">request_frequence = <span class="number">20</span> <span class="comment">#设定你的刷新频率(秒)</span></div><div class="line"></div><div class="line">COURSE_URL = <span class="string">"http://eams.sufe.edu.cn/eams/stdElectCourse!queryStdCount.action?profileId="</span></div><div class="line"></div><div class="line"><span class="comment"># 处理cookies</span></div><div class="line">cookies={}<span class="comment">#初始化cookies字典变量</span></div><div class="line">cookies_arr = cookies_raw.split(<span class="string">';'</span>)</div><div class="line"><span class="keyword">for</span> ck <span class="keyword">in</span> cookies_arr:</div><div class="line"> name,value=ck.strip().split(<span class="string">'='</span>,<span class="number">1</span>)</div><div class="line"> cookies[name]=value</div><div class="line"></div><div class="line">request_count = <span class="number">0</span></div><div class="line"><span class="keyword">while</span> <span class="keyword">True</span>:</div><div class="line"> </div><div class="line"> time.sleep(request_frequence)</div><div class="line"> request_count += <span class="number">1</span></div><div class="line"> print(<span class="string">"正在监控课程余量,已请求"</span>,request_count,<span class="string">"次"</span>)</div><div class="line"></div><div class="line"> response = requests.get(COURSE_URL+str(profileId),cookies=cookies)</div><div class="line"> count_text = response.text</div><div class="line"> student_count_text = count_text.split(<span class="string">'window.lessonId2Counts='</span>)[<span class="number">1</span>]</div><div class="line"></div><div class="line"> replace_list = [<span class="string">'sc'</span>, <span class="string">'lc'</span>]</div><div class="line"></div><div class="line"> <span class="keyword">for</span> replace_text <span class="keyword">in</span> replace_list:</div><div class="line"> student_count_text = student_count_text.replace(</div><div class="line"> <span class="string">'{}:'</span>.format(replace_text), <span class="string">'"{}":'</span>.format(replace_text))</div><div class="line"></div><div class="line"> student_count_text = student_count_text.replace(<span class="string">"'"</span>, <span class="string">'"'</span>)</div><div class="line"> student_count_list = json.loads(student_count_text)</div><div class="line"></div><div class="line"> <span class="keyword">for</span> wanted_course_id <span class="keyword">in</span> wanted_course_ids:</div><div class="line"> course_count = student_count_list[wanted_course_id]</div><div class="line"> <span class="keyword">if</span> course_count[<span class="string">'sc'</span>] != course_count[<span class="string">'lc'</span>]:</div><div class="line"> toaster = ToastNotifier()</div><div class="line"> toaster.show_toast(<span class="string">u'快抢课'</span>, <span class="string">u'课程有余量了!'</span>)</div><div class="line"> <span class="keyword">break</span></div></pre></td></tr></table></figure>]]></content>
<summary type="html">
<p>最近有很多小伙伴问我怎么在网络上下载最新的或者版权保护比较严格的电影,今天就跟大家分享一下一个程序员是怎么下载资源的(以电影为例)。<br><b>【重要声明】这篇博客仅供技术分享,仅探讨一种技术上可行的方案。在实际使用这种方案时,请确保该方案符合你所在地区的版权保护相关法律,并在技术测试后删除所有受保护的资源,切勿传播。</b></p>
</summary>
</entry>
<entry>
<title>【面试经验】EBay中国分析中心商业分析实习生</title>
<link href="http://yoursite.com/2018/08/09/%E3%80%90%E9%9D%A2%E8%AF%95%E7%BB%8F%E9%AA%8C%E3%80%91Intern%20for%20Business%20Analysis%20with%20eBay%20China%20Analytics%20Center/"/>
<id>http://yoursite.com/2018/08/09/【面试经验】Intern for Business Analysis with eBay China Analytics Center/</id>
<published>2018-08-09T10:11:42.000Z</published>
<updated>2018-12-18T06:15:07.849Z</updated>
<content type="html"><![CDATA[<p>这是我面试Intern for Business Analysis with eBay China Analytics Center(Ebay中国分析中心商业分析实习生)的经验分享,包括两轮面试,一轮技术面和一轮主管面,仅供参考。<br><a id="more"></a></p><h2 id="基本情况"><a href="#基本情况" class="headerlink" title="基本情况"></a>基本情况</h2><p>Responsibilities:</p><ul><li>Use data mining and text mining technologies to drive innovation and impact business results.- Apply quantitative methods to interpret business information- Visualize information, design and generate data reports upon clients’ requests</li><li>Support the development of business initiatives by quantitative analysis and generate business insights- Communicate with working peers, effectively deliver key business findings</li><li>Provide technical expertise in at least one of areas: data manipulation, automation, business reporting, text mining and Hadoop technologies </li><li>Conduct ad-hoc projects, collaborate with global teams and take part in international projects </li></ul><p>工作职责:</p><ol><li>从eBay数据库中提取有效数据,通过分析来量化各项业务,用数据说话,帮助业务成长和决策;</li><li>针对具体业务研究业务开拓中的局限性或亮点,通过数学建模得出优化方案,成型后标准化模型使其成为产品;</li><li>制作并维护各个业务生态报表,及时反馈和深入分析变化根源;</li><li>数据可视化,流程自动化;</li><li>完成其他经理布置的任务。</li></ol><h2 id="面试流程及问题"><a href="#面试流程及问题" class="headerlink" title="面试流程及问题"></a>面试流程及问题</h2><ol><li>HR确认本人投递简历,确认到岗时间和实习时长,然后约了面试时间,因为人离公司比较远所以约了视频面试。</li><li><p>第一轮面试可能是mentor面,主要问的是基础知识、具体问题分析和人生规划</p><ol><li>决策树的训练过程</li><li>线性回归的原理和效果评价</li><li>传统机器学习方法和深度学习方法的本质区别</li><li>数据库SQL中的表连接(左右连接、上下连接)</li><li>概率论与数理统计里面的q-value</li><li>如何评价promotion的效果,跟什么进行比较比较客观</li><li><p>有没有用过R语言</p><p>其他零零碎碎的知识点基本都答上来了,除了q-value忘得一干二净,超级尴尬,但是mentor人超好安慰说没关系的一两个知识点忘记了是正常的。</p></li></ol></li><li><p>第二轮应该是主管面,主要考察思维能力和沟通能力</p><ol><li><p>第一个问题是“如果你有共享单车的全部数据,你想做些什么?”<br>问完之后会让你一直讲idea,类似头脑风暴。开放性的题目我就开始天马行空,讲了六七个点。</p><ol><li>用单车轨迹数据做热力图,设计合理停车点</li><li>做使用率统计分析最佳维修时间</li><li>做短时间单车未来使用率预测来实现动态定价</li><li>做长时间单车未来使用率预测来辅助非节日性促销时间选择</li><li>做用户画像分析,寻找用户聚类位置,进行个性化车身图案投放</li><li>做不同车型的用车时间分析,比较不同车型的用户使用感受</li></ol><p>这个问题进行过程中面试官不会跟你进行沟通,会一直问你“还有吗”“还有吗”,等你想不出来之后会总结一下他对你这些想法的看法,哪些点很普通哪些点有打动到他,然后会分享他自己的idea。</p></li><li><p>第二个问题是“给你全国所有人的名字,不借助任何外部资料,找出所有的复姓”。<br>面试官说这个问题比较challaging,也会在我给出答案的过程中一直跟我沟通。我给出一个解决方案,先利用所有四个字的名字找出大概率复姓,然后对这些复姓在三个字的名字中出现的概率进行验证。然后对于父母双方姓氏组合的“假复姓”,通过拆分寻找组成这个“假复姓”的每个字在姓氏中存在的概率进行验证。<br>面试官说答得很好,然后又针对我的解决方案,进一步把问题改成“给你全国所有三个字的名字,找出所有的复姓”。然后我懵逼了一会,整个思考方向就偏掉了。我提出了通过语言学姓名语调的分布规律进行统计,面试官说不是很好,然后给出了自己的想法,基于条件概率来做。他一说完我就意识到这是自然语言处理里面的tf-idf,然而回答的时候一点都没有想到。</p></li></ol></li><li><p>最后主管说比较满意,然后就是等HR的背景审核啦,eBay的面试就到此结束啦。</p></li></ol><h2 id="个人感受"><a href="#个人感受" class="headerlink" title="个人感受"></a>个人感受</h2><p>整个流程非常快,从发简历到最后面试结束中间基本没有很长的间隔。面试流程也比较简单,只有一轮技术面一轮开放性面试和两次跟HR的沟通。面试过程非常愉快,面试官不会刻意营造压力,会很轻松地跟你聊天,而且面试过程中都很尊重,面试官会先做自我介绍然后介绍自己组的业务情况,虽然面试官感觉年纪有点大但是没有架子,面试过程很舒服,令人很有好感。</p>]]></content>
<summary type="html">
<p>这是我面试Intern for Business Analysis with eBay China Analytics Center(Ebay中国分析中心商业分析实习生)的经验分享,包括两轮面试,一轮技术面和一轮主管面,仅供参考。<br>
</summary>
</entry>
<entry>
<title>【经验分享】软件工程/金融工程保研推免夏令营</title>
<link href="http://yoursite.com/2018/08/07/%E6%8E%A8%E5%85%8D%E5%A4%8F%E4%BB%A4%E8%90%A5(%E5%90%8C%E6%B5%8E%20%E4%B8%8A%E8%B4%A2%20%E6%B8%AF%E4%B8%AD%E5%A4%A7)/"/>
<id>http://yoursite.com/2018/08/07/推免夏令营(同济 上财 港中大)/</id>
<published>2018-08-07T06:48:47.000Z</published>
<updated>2018-12-18T07:41:28.234Z</updated>
<content type="html"><![CDATA[<p>这是我参加2019级推免研究生夏令营总结,参加的三个夏令营分别是同济大学软件学院、上海财经大学交叉科学研究院和香港中文大学深圳高等金融研究院,并且应该都拿到了offer。我会重点介绍一下各个夏令营的考核方式以供大家参考。<br>(因为实在太懒了拖了很久才开始写这篇,所以回忆可能不完整或者不准确,仅供参考)</p><a id="more"></a><h2 id="同济大学软件学院"><a href="#同济大学软件学院" class="headerlink" title="同济大学软件学院"></a>同济大学软件学院</h2><p>同济大学软件学院的夏令营时间非常短,不算报道的话只有一天半,而且放在周末,所以跟其他学校夏令营时间一般都不会冲突,而且紧接着就是上财的夏令营也很方便,所以我就参加了这个夏令营感受学术氛围(并且拿个保底(逃….因为时间很短,所以基本全部都在考核。第一天上午是导师方向介绍,下午笔试,晚上一个讲座,第二天早上面试,下午就各回各家。<br>笔试分为专业笔试和英语笔试,面试分为专业面试和英语面试。</p><ul><li>专业笔试两个小时,考试内容是:<ul><li>一道数学分析的导数证明题</li><li>一道最短路径搜索的算法伪代码(Dijkstra’s algorithm)</li><li>一个MOBA游戏的面向对象设计(OOD),用UML来表示</li><li>一个MOBA游戏的数据库设计</li><li>自动检测停车位的人工智能模型训练流程(计算机视觉方向)</li></ul></li><li>英语笔试35分钟,考试内容是:<ul><li>十个英文缩略语写全称,内容很宽泛,看个人平时积累为主</li><li>两道英译中,第一道是两个最短路径搜索算法的差异比较,应该是英文教材上的摘录,第二道感觉是通讯信号领域的论文Abstract,讲的是视频流传输</li><li>一道中译英,材料是关于软件开发流程的</li></ul></li><li>专业面试因人而异,有些人的面试比较challenging,有些就很水,我碰到的就很水,问我本科的学校挺好的为什么不留在本校啊,报了哪些夏令营啊,要是给你offer了你会不会来啊之类的</li><li>英语面试会让你自我介绍,然后根据你的自我介绍提一两个问题就pass了,也比较轻松</li></ul><p>同济大学软件学院的夏令营入营100人,来了90多个人,给了50个左右的优秀营员,住的酒店很不错,吃的不是特别好,但整体流程比较轻松,还是值得一去的。</p><h2 id="上海财经大学交叉科学研究院"><a href="#上海财经大学交叉科学研究院" class="headerlink" title="上海财经大学交叉科学研究院"></a>上海财经大学交叉科学研究院</h2><p>上财X院就不像同济这么轻松了,入营25人,最终给8个offer,所以全程也比较紧张。报道那天有个欢迎晚宴,很高规格,然后是开营仪式和学姐交流,介绍了X院的情况和这次夏令营的安排。第一天早上是一门暑期课程体验和一个讲座,下午是一个讲座,然后参观了商学博物馆,晚上就是笔试。第二天早上是导师的方向介绍,下午是导师一对一沟通,晚上和第二天早上是面试,然后就各回各家。 </p><h3 id="笔试"><a href="#笔试" class="headerlink" title="笔试"></a>笔试</h3><p>笔试是完全考逻辑思维能力的,不会让你用任何要背的公式,哪怕是$y=ax^2+bx+c$的求导他都会备注告诉你是$y=2ax+b$。差不多每道题目前面都会有很长的文字需要阅读,给你一个基本没有见过的知识点,然后根据提供的知识点解决问题。</p><ul><li>一道将普通多项式转换成几个四次方多项式之和的题,感觉考点是线性代数的标准型和二次型,但是我没有做出来;</li><li>一道凸函数的几个相关性质的证明;</li><li>一道分硬币问题,像是小学竞赛题,考点应该是Recursion,应该要通过算递归式和停止条件来解,但我没解出来通过观察找到了规律拼拼凑凑就算做完了;</li><li>一道机器学习里面learning rate 的取值范围(题目没有直接说明,给的是数学化的情境,但是学过机器学习的话能发现是为了减少训练震荡)</li><li>一道小学竞赛题,四辆汽车给定量的汽油怎样让其中某一辆汽车开得最远,应该是运筹优化问题,但原问题实在太复杂了,我就强行加了一个假设作为限制条件,在那个限制条件下找到了最优解;</li></ul><h3 id="面试"><a href="#面试" class="headerlink" title="面试"></a>面试</h3><p>上财X院的面试之前有个下午是专门跟导师一对一沟通的,这也是这么多个夏令营里很独特的环节,可以向导师问问题聊聊天当然更多的肯定是推销自己,有些老师还会有个小面试针对你的简历问一些细节,不过都很nice。导师会很热情地跟你介绍他们组的科研情况,有些导师会跟你讲历史讲了四十多分钟,有些导师会提醒你选导师之前要多接触不然性格不合也很难相处的,总之这个一对一交流的环节真的让我一下对这个学院很有好感。然后一到第二天面试,导师们就变得超凶,葛院长全程扮黑脸一直怼,真的面到崩溃。</p><p>总体而言感觉每个老师都超级好,而且虽然是金融信息工程专业但是导师都普遍很喜欢学计算机的学生,特别是做机器学习人工智能相关的。住的宾馆比较破但是食堂吃的很不错,安排有一点赶基本没有午休的时间这个让人头大。</p><h2 id="香港中文大学深圳高等金融研究院数据科学项目"><a href="#香港中文大学深圳高等金融研究院数据科学项目" class="headerlink" title="香港中文大学深圳高等金融研究院数据科学项目"></a>香港中文大学深圳高等金融研究院数据科学项目</h2><p>深高金的夏令营真的全程贵宾级体验,宿舍很赞食堂超棒,所有的安排都很得体档次都很高,还去了深交所去了平安大厦顶楼,还有茶歇冷餐会结营晚会各种吃吃喝喝的活动,真的非常赞,即使不想拿offer也可以来感受一下资本主义学校的生活(事实上很多人都是这个想法,我们组五个人就有三个不想接offer的)。就是整个过程就是在赶schedule,时间安排非常紧凑,而且因为要做case所以基本都要熬两天夜,我全程累到崩溃一直在见缝插针地补觉。<br>夏令营期间要做一个case,大概时间是两天,组员是经济学金融学会计学数据科学四个方向同学的混合,但是题目是只偏一个方向的,所以真实情况可能就是一个或两个该方向的同学carry全场,剩下其他方向的就打打下手。做case的过程中会一直有观察员在旁边记录你的表现并且打分。最终会做一个case汇报,每组给一个分数计入最终的考核。<br>虽然安排都很不错整体环境都很高级,但是笔试面试感觉都有点low。笔试分成三个部分,编程+数学+逻辑。编程题就是背python API,看过API就会写,数学题是最简单的一道线性代数和一道数理统计,都是背公式就行了的,逻辑题同学说就是GRE中的文字推理。面试就是面试官对着一张纸一道一道地问问题,what is trace? what is eigenvalue? what is p-value?感觉就是考察你大学三年背得怎么样,瞬间对这个项目有点失望。</p><h2 id="浙江大学计算机学院大数据可视化暑期学校"><a href="#浙江大学计算机学院大数据可视化暑期学校" class="headerlink" title="浙江大学计算机学院大数据可视化暑期学校"></a>浙江大学计算机学院大数据可视化暑期学校</h2><p>这个不是保研夏令营,但是也可以作为一种接触导师的途径。整体的体验就是非常差,导致我直接中途quit了。<br>这个暑期学校是浙大CAD&CG实验室主办的,请了全球很优秀的可视化领域的导师来做讲座,导师都是非常厉害的大牛,但因为这些主讲人之间没有沟通,导致讲座的内容大面积重复,五个讲座讲了五遍introduction甚至举的例子都是一样的。课后留了三个项目要完成,项目跟讲座的内容也基本关系不大,整体感觉比骄傲割裂。<br>最崩溃的是住宿环境和食堂,宿舍是上下铺还带着一股霉味,宿舍走廊上都是散落的垃圾(可能因为是大四的搬宿舍之后还在清理),食堂又贵又难吃,外卖也很难吃,靠着宿舍外面的一条商业街存活,实在呆不下去了就直接提前退出回家了。</p>]]></content>
<summary type="html">
<p>这是我参加2019级推免研究生夏令营总结,参加的三个夏令营分别是同济大学软件学院、上海财经大学交叉科学研究院和香港中文大学深圳高等金融研究院,并且应该都拿到了offer。我会重点介绍一下各个夏令营的考核方式以供大家参考。<br>(因为实在太懒了拖了很久才开始写这篇,所以回忆可能不完整或者不准确,仅供参考)</p>
</summary>
</entry>
<entry>
<title>【基础算法】刷题记录 2018-04-23</title>
<link href="http://yoursite.com/2018/04/23/%E3%80%90%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%E3%80%91%E5%88%B7%E9%A2%98%E8%AE%B0%E5%BD%95%2020180423/"/>
<id>http://yoursite.com/2018/04/23/【基础算法】刷题记录 20180423/</id>
<published>2018-04-23T09:42:03.000Z</published>
<updated>2018-04-23T10:00:03.204Z</updated>
<content type="html"><![CDATA[<ul><li>乘法表</li></ul><a id="more"></a><h2 id="乘法表(百度2016实习生真题)"><a href="#乘法表(百度2016实习生真题)" class="headerlink" title="乘法表(百度2016实习生真题)"></a>乘法表(百度2016实习生真题)</h2><h3 id="题目描述"><a href="#题目描述" class="headerlink" title="题目描述"></a>题目描述</h3><p>度度熊和爷爷在玩一个乘法表游戏。乘法表的第i行第j列位置的元素为$i*j$,并且乘法表下标编号从1开始,比如2 × 3乘法表为<br>1 2 3<br>2 4 6<br>爷爷十分聪明,对于nm的乘法表,只要度度熊给出一个数k,爷爷就能立刻告诉度度熊乘法表中元素按照不减顺序排列之后,第k个元素是多少。你能重复这个游戏吗?</p><h4 id="输入"><a href="#输入" class="headerlink" title="输入"></a>输入</h4><p>输入数据是三个整数:n, m, k (1≤n, $m≤5*10^5$, 1≤k≤nm)。</p><h5 id="输出"><a href="#输出" class="headerlink" title="输出"></a>输出</h5><p>输出n*m乘法表按照不减顺序排列的第k个数。</p><h4 id="样例输入"><a href="#样例输入" class="headerlink" title="样例输入"></a>样例输入</h4><p>2 3 4</p><h4 id="样例输出"><a href="#样例输出" class="headerlink" title="样例输出"></a>样例输出</h4><p>3</p><h4 id="时间限制"><a href="#时间限制" class="headerlink" title="时间限制"></a>时间限制</h4><p>C/C++语言:1000MS其它语言:3000MS </p><h4 id="内存限制"><a href="#内存限制" class="headerlink" title="内存限制"></a>内存限制</h4><p>C/C++语言:65536KB其它语言:589824KB</p><h3 id="考点"><a href="#考点" class="headerlink" title="考点"></a>考点</h3><ul><li>二分查找法</li><li>巧算某个数在乘法表中是第几个数:对于每一列,如果k>=最后一个元素时,<=k的元素个数 = 总列数,否则个数 = k/行号,比如:n=6,m=3,k=6时,<=k的元素个数为:6+6/2+6/3 = 11</li><li>long long 数据类型: 1≤n, m≤5*10^5,则nm超过了int或long的范围,得用long long数据类型。</li></ul><h3 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h3><figure class="highlight c++"><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><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div></pre></td><td class="code"><pre><div class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><iostream></span></span></div><div class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</div><div class="line"></div><div class="line"><span class="function"><span class="keyword">long</span> <span class="keyword">long</span> <span class="title">count</span><span class="params">(<span class="keyword">long</span> <span class="keyword">long</span> x, <span class="keyword">long</span> <span class="keyword">long</span> n, <span class="keyword">long</span> <span class="keyword">long</span> m)</span></span>{</div><div class="line"><span class="keyword">long</span> <span class="keyword">long</span> count = <span class="number">0</span>;</div><div class="line"><span class="keyword">for</span>(<span class="keyword">long</span> <span class="keyword">long</span> i=<span class="number">1</span>; i<=n;i++){</div><div class="line"><span class="keyword">if</span>(x/i>m){</div><div class="line">count += m;</div><div class="line">}<span class="keyword">else</span>{</div><div class="line">count += x/i;</div><div class="line">}</div><div class="line">}</div><div class="line"><span class="keyword">return</span> count;</div><div class="line">}</div><div class="line"></div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</div><div class="line"><span class="keyword">long</span> <span class="keyword">long</span> n,m;</div><div class="line"><span class="keyword">long</span> <span class="keyword">long</span> k;</div><div class="line"><span class="keyword">while</span>(<span class="built_in">cin</span>>>n>>m>>k){</div><div class="line"><span class="keyword">long</span> <span class="keyword">long</span> left = <span class="number">1</span>;</div><div class="line"><span class="keyword">long</span> <span class="keyword">long</span> right = n*m;</div><div class="line"><span class="comment">//cout<<right<<endl;</span></div><div class="line"><span class="keyword">long</span> <span class="keyword">long</span> middle = (left+right)/<span class="number">2</span>;</div><div class="line"><span class="keyword">while</span>(left<=right){</div><div class="line"> <span class="comment">//cout<<count(middle,n,m)<<endl;</span></div><div class="line"><span class="keyword">if</span>(count(middle,n,m)>=k && count(middle<span class="number">-1</span>,n,m)<k){</div><div class="line"> <span class="built_in">cout</span><<middle<<<span class="built_in">endl</span>;</div><div class="line"><span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}<span class="keyword">else</span> <span class="keyword">if</span>(count(middle,n,m)<k){</div><div class="line">left = middle + <span class="number">1</span>;</div><div class="line">middle = (left + right) / <span class="number">2</span>;</div><div class="line">}<span class="keyword">else</span>{</div><div class="line">right = middle - <span class="number">1</span>;</div><div class="line">middle = (left+right)/<span class="number">2</span>;</div><div class="line">}</div><div class="line">}</div><div class="line">}</div><div class="line">}</div></pre></td></tr></table></figure>]]></content>
<summary type="html">
<ul>
<li>乘法表</li>
</ul>
</summary>
</entry>
<entry>
<title>【软件测试】场景法测试用例设计</title>
<link href="http://yoursite.com/2018/04/05/%E3%80%90%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E3%80%91%E5%9F%BA%E4%BA%8E%E5%9C%BA%E6%99%AF%E7%9A%84%E6%B5%8B%E8%AF%95%E7%94%A8%E4%BE%8B%E8%AE%BE%E8%AE%A1/"/>
<id>http://yoursite.com/2018/04/05/【软件测试】基于场景的测试用例设计/</id>
<published>2018-04-05T06:55:30.000Z</published>
<updated>2018-04-24T03:16:56.432Z</updated>
<content type="html"><![CDATA[<h2 id="问题"><a href="#问题" class="headerlink" title="问题"></a>问题</h2><p>用场景法完成ATM的取款功能的测试用例设计。</p><h2 id="步骤"><a href="#步骤" class="headerlink" title="步骤"></a>步骤</h2><ol><li>画出需要测试路径的流程图</li><li>分析基本流和备选流</li><li>根据基本流和备选流设计测试用例<a id="more"></a></li></ol><h2 id="流程图"><a href="#流程图" class="headerlink" title="流程图"></a>流程图</h2><p><img src="https://raw.githubusercontent.com/JinChengneng/images/master/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%AE%9E%E9%AA%8C%E4%BA%8C%E6%B5%81%E7%A8%8B%E5%9B%BE.png" alt=""></p><h2 id="事件流"><a href="#事件流" class="headerlink" title="事件流"></a>事件流</h2><h3 id="基本事件流"><a href="#基本事件流" class="headerlink" title="基本事件流"></a>基本事件流</h3><ol><li>用户向ATM提款机中插入银行卡,如果银行卡是合法的,ATM提款机界面提示用户输入提款密码;(<strong>基本流1</strong>)</li><li>用户输入该银行卡的密码,如果输入密码正确,提示用户输入取钱金额;(<strong>基本流2</strong>)</li><li>用户输入取钱金额,如果输入的金额正确,且用户账户中有足够的余额,则向用户出款,并且减掉数据库中该用户帐户中的存款金额;(<strong>基本流3</strong>)</li><li>向用户询问是否需要其他操作,若不需要则退卡,并初始化系统状态。(<strong>基本流4</strong>)</li></ol><h3 id="备选事件流"><a href="#备选事件流" class="headerlink" title="备选事件流"></a>备选事件流</h3><ul><li>在基本事件流1中:<ol><li>如果插入无效的银行卡,那么在ATM提款机界面上提示用户,自动退出该银行卡,并重置到初始状态;(<strong>备选流1</strong>)</li></ol></li><li>在基本事件流2中:<ol><li>如果用户输入的密码错误,则提示用户密码输入错误,并引导用户重新输入;(<strong>备选流2</strong>)</li><li>如果用户连续3次输入错误密码,ATM提款机吞卡,并且ATM提款机的界面恢复到初始状态;(<strong>备选流3</strong>)</li><li>用户输入错误的密码且不超过三次,也可以手动退卡;(<strong>备选流4</strong>)</li></ol><ul><li>在基本事件流3中:<ol><li>如果用户输入的单笔提款金额超过单笔提款上限,ATM提款机界面提示输入金额错误,并引导重新输入; (<strong>备选流5</strong>)</li><li>如果用户输入的单笔金额,不是以100RMB为单位的,那么ATM提款机提示用户输入金额错误,并引导重新输入; (<strong>备选流6</strong>)</li><li>如果用户在24小时内提取的金额大于限额,则ATM提款机提示用户输入金额错误,并引导重新输入;(<strong>备选流7</strong>)</li><li>如果用户账户中余额不足,则提示用户账户中余额不足,并引导重新输入;(<strong>备选流8</strong>)</li><li>如果ATM提款机中余额不足,则提示用户ATM提款机中余额不足,并引导重新输入;(<strong>备选流9</strong>)</li></ol></li></ul></li><li>在基本事件流4中:<ol><li>如果用户选择进行其他操作,则跳转到操作选择页面;(<strong>备选流10</strong>)</li></ol></li></ul><h2 id="测试用例设计"><a href="#测试用例设计" class="headerlink" title="测试用例设计"></a>测试用例设计</h2><h3 id="场景设计"><a href="#场景设计" class="headerlink" title="场景设计"></a>场景设计</h3><table><thead><tr><th>场景序列</th><th style="text-align:center">基本流</th><th style="text-align:center">备选流</th></tr></thead><tbody><tr><td>场景1——成功取款</td><td style="text-align:center">1 2 3 4</td><td style="text-align:center">无</td></tr><tr><td>场景2——银行卡无法读取</td><td style="text-align:center">无</td><td style="text-align:center">1</td></tr><tr><td>场景3——密码输入错误但未超过三次</td><td style="text-align:center">1</td><td style="text-align:center">2 4</td></tr><tr><td>场景4——密码输入错误且达到三次</td><td style="text-align:center">1</td><td style="text-align:center">3</td></tr><tr><td>场景5——用户输入提款金额超过单笔提款上限</td><td style="text-align:center">1 2</td><td style="text-align:center">5</td></tr><tr><td>场景6——用户输入金额不是整百数</td><td style="text-align:center">1 2</td><td style="text-align:center">6</td></tr><tr><td>场景7——用户24小时内提款金额超过当日限额</td><td style="text-align:center">1 2</td><td style="text-align:center">7</td></tr><tr><td>场景8——用户账户余额不足</td><td style="text-align:center">1 2</td><td style="text-align:center">8</td></tr><tr><td>场景9——ATM提款机中余额不足</td><td style="text-align:center">1 2</td><td style="text-align:center">9</td></tr><tr><td>场景10——用户取款成功后有其他操作需求</td><td style="text-align:center">1 2 3</td><td style="text-align:center">10</td></tr></tbody></table><h3 id="测试用例表"><a href="#测试用例表" class="headerlink" title="测试用例表"></a>测试用例表</h3><p>假设正确密码为0000.</p><table><thead><tr><th style="text-align:center">测试用例号</th><th style="text-align:center">场景号</th><th style="text-align:center">合法的银行卡</th><th style="text-align:center">输入密码</th><th style="text-align:center">密码错误次数</th><th style="text-align:center">取款金额</th><th style="text-align:center">当日取款限额</th><th style="text-align:center">账户余额</th><th style="text-align:center">取款机余额</th><th style="text-align:center">预期结果</th></tr></thead><tbody><tr><td style="text-align:center">1</td><td style="text-align:center">场景1——成功取款</td><td style="text-align:center">是</td><td style="text-align:center">0000</td><td style="text-align:center">0</td><td style="text-align:center">100</td><td style="text-align:center">10000</td><td style="text-align:center">200</td><td style="text-align:center">10000</td><td style="text-align:center">成功提款,账户余额被更新为100</td></tr><tr><td style="text-align:center">2</td><td style="text-align:center">场景2——银行卡无法读取</td><td style="text-align:center">否</td><td style="text-align:center">/</td><td style="text-align:center">/</td><td style="text-align:center">/</td><td style="text-align:center">/</td><td style="text-align:center">/</td><td style="text-align:center">/</td><td style="text-align:center">无法获取账户信息,退回银行卡</td></tr><tr><td style="text-align:center">3</td><td style="text-align:center">场景3——密码输入错误但未超过三次</td><td style="text-align:center">是</td><td style="text-align:center">1111</td><td style="text-align:center">1</td><td style="text-align:center">/</td><td style="text-align:center">10000</td><td style="text-align:center">/</td><td style="text-align:center">/</td><td style="text-align:center">发送警告消息,返回基本流2</td></tr><tr><td style="text-align:center">4</td><td style="text-align:center">场景4——密码输入错误且达到三次</td><td style="text-align:center">是</td><td style="text-align:center">1111</td><td style="text-align:center">3</td><td style="text-align:center">/</td><td style="text-align:center">10000</td><td style="text-align:center">/</td><td style="text-align:center">/</td><td style="text-align:center">发送警告消息,并吞卡</td></tr><tr><td style="text-align:center">5</td><td style="text-align:center">场景5——用户输入提款金额超过单笔提款上限</td><td style="text-align:center">是</td><td style="text-align:center">0000</td><td style="text-align:center">0</td><td style="text-align:center">20000</td><td style="text-align:center">10000</td><td style="text-align:center">10000</td><td style="text-align:center">200000</td><td style="text-align:center">发送提醒,并返回基本流3</td></tr><tr><td style="text-align:center">6</td><td style="text-align:center">场景6——用户输入金额不是整百数</td><td style="text-align:center">是</td><td style="text-align:center">0000</td><td style="text-align:center">0</td><td style="text-align:center">201.12</td><td style="text-align:center">10000</td><td style="text-align:center">10000</td><td style="text-align:center">20000</td><td style="text-align:center">发送提醒,并返回基本流3</td></tr><tr><td style="text-align:center">7</td><td style="text-align:center">场景7——用户24小时内提款金额超过限额</td><td style="text-align:center">是</td><td style="text-align:center">0000</td><td style="text-align:center">0</td><td style="text-align:center">20000</td><td style="text-align:center">10000</td><td style="text-align:center">10000</td><td style="text-align:center">200000</td><td style="text-align:center">发送提醒,并返回基本流3</td></tr><tr><td style="text-align:center">8</td><td style="text-align:center">场景8——用户账户余额不足</td><td style="text-align:center">是</td><td style="text-align:center">0000</td><td style="text-align:center">0</td><td style="text-align:center">20000</td><td style="text-align:center">10000</td><td style="text-align:center">100</td><td style="text-align:center">200000</td><td style="text-align:center">发送提醒,并返回基本流3</td></tr><tr><td style="text-align:center">9</td><td style="text-align:center">场景9——ATM提款机中余额不足</td><td style="text-align:center">是</td><td style="text-align:center">0000</td><td style="text-align:center">0</td><td style="text-align:center">20000</td><td style="text-align:center">10000</td><td style="text-align:center">10000</td><td style="text-align:center">2000</td><td style="text-align:center">发送提醒,并返回基本流3</td></tr><tr><td style="text-align:center">10</td><td style="text-align:center">场景10——用户取款成功后有其他操作需求</td><td style="text-align:center">是</td><td style="text-align:center">0000</td><td style="text-align:center">0</td><td style="text-align:center">100</td><td style="text-align:center">10000</td><td style="text-align:center">200</td><td style="text-align:center">10000</td><td style="text-align:center">返回基本流2</td></tr></tbody></table><h2 id="个人信息"><a href="#个人信息" class="headerlink" title="个人信息"></a>个人信息</h2><p>姓名:金成能 <br><br>学号:201530611838 <br><br>邮箱:[email protected] <br><br>指导老师: 李红</p>]]></content>
<summary type="html">
<h2 id="问题"><a href="#问题" class="headerlink" title="问题"></a>问题</h2><p>用场景法完成ATM的取款功能的测试用例设计。</p>
<h2 id="步骤"><a href="#步骤" class="headerlink" title="步骤"></a>步骤</h2><ol>
<li>画出需要测试路径的流程图</li>
<li>分析基本流和备选流</li>
<li>根据基本流和备选流设计测试用例
</summary>
</entry>
<entry>
<title>【基础算法】刷题记录 2018-03-23</title>
<link href="http://yoursite.com/2018/03/23/%E3%80%90%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%E3%80%91%E5%88%B7%E9%A2%98%E8%AE%B0%E5%BD%95%2020180323/"/>
<id>http://yoursite.com/2018/03/23/【基础算法】刷题记录 20180323/</id>
<published>2018-03-23T06:17:48.000Z</published>
<updated>2018-03-23T09:06:49.320Z</updated>
<content type="html"><![CDATA[<ul><li>最长回文子字符串</li><li>回文数字</li><li>最大多位数串</li><li>逆序整数</li></ul><a id="more"></a><h2 id="最长回文子字符串"><a href="#最长回文子字符串" class="headerlink" title="最长回文子字符串"></a>最长回文子字符串</h2><h3 id="题目"><a href="#题目" class="headerlink" title="题目"></a>题目</h3><p>Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.</p><h3 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h3><p>显然所有的回文串都是对称的。长度为奇数回文串以最中间字符的位置为对称轴左右对称,而长度为偶数的回文串的对称轴在中间两个字符之间的空隙。可否利用这种对称性来提高算法效率呢?答案是肯定的。我们知道整个字符串中的所有字符,以及字符间的空隙,都可能是某个回文子串的对称轴位置。可以遍历这些位置,在每个位置上同时向左和向右扩展,直到左右两边的字符不同,或者达到边界。对于一个长度为n的字符串,这样的位置一共有n+n-1=2n-1个,在每个位置上平均大约要进行n/4次字符比较,于是此算法的时间复杂度是O(n^2)。</p><h3 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h3><figure class="highlight java"><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><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div></pre></td><td class="code"><pre><div class="line"><span class="class"><span class="keyword">class</span> <span class="title">Solution</span> </span>{</div><div class="line"> <span class="function"><span class="keyword">public</span> String <span class="title">longestPalindrome</span><span class="params">(String s)</span> </span>{</div><div class="line"> <span class="keyword">int</span> max_len = <span class="number">1</span>;</div><div class="line"> <span class="keyword">int</span> start=<span class="number">0</span>;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>; i<s.length(); i++){</div><div class="line"> <span class="keyword">int</span> len=<span class="number">0</span>;</div><div class="line"> <span class="keyword">if</span>(i+<span class="number">1</span><s.length() && (s.charAt(i+<span class="number">1</span>)==s.charAt(i))){</div><div class="line"> len =<span class="number">2</span>;</div><div class="line"> <span class="keyword">if</span>(len>max_len){</div><div class="line"> max_len = len;</div><div class="line"> start = i;</div><div class="line"> }</div><div class="line"> <span class="keyword">while</span>((i+len)<s.length() && i-len+<span class="number">1</span>>=<span class="number">0</span> && (s.charAt(i-len+<span class="number">1</span>) == s.charAt(i+len))){</div><div class="line"> len++;</div><div class="line"> <span class="keyword">if</span>(len*<span class="number">2</span>-<span class="number">2</span> > max_len){</div><div class="line"> max_len = len*<span class="number">2</span>-<span class="number">2</span>;</div><div class="line"> start = i-len+<span class="number">2</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keyword">if</span>(i+<span class="number">1</span><s.length()){</div><div class="line"> len =<span class="number">1</span>;</div><div class="line"> <span class="keyword">while</span>(i+len<s.length() && i-len>=<span class="number">0</span> && s.charAt(i-len)==s.charAt(i+len)){</div><div class="line"> len++;</div><div class="line"> <span class="keyword">if</span>((len*<span class="number">2</span>-<span class="number">1</span>)>max_len){</div><div class="line"> max_len = len*<span class="number">2</span> -<span class="number">1</span>;</div><div class="line"> start = i-len+<span class="number">1</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line"> } </div><div class="line"> }</div><div class="line"> <span class="keyword">return</span> s.substring(start, start+max_len);</div><div class="line"> }</div><div class="line">}</div></pre></td></tr></table></figure><h2 id="回文数字"><a href="#回文数字" class="headerlink" title="回文数字"></a>回文数字</h2><h3 id="问题"><a href="#问题" class="headerlink" title="问题"></a>问题</h3><p>Determine whether an integer is a palindrome. Do this without extra space.</p><h3 id="技巧点"><a href="#技巧点" class="headerlink" title="技巧点"></a>技巧点</h3><p>将原数字倒转一半,判断前一半数字是否相同</p><h3 id="易错点"><a href="#易错点" class="headerlink" title="易错点"></a>易错点</h3><p>10及其倍数的处理</p><h3 id="代码-1"><a href="#代码-1" class="headerlink" title="代码"></a>代码</h3><figure class="highlight c++"><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"><span class="function"><span class="keyword">bool</span> <span class="title">isPalindrome</span><span class="params">(<span class="keyword">int</span> x)</span> </span>{</div><div class="line"> <span class="keyword">if</span>(x<<span class="number">0</span> ||(x%<span class="number">10</span>==<span class="number">0</span>&&x!=<span class="number">0</span>)){</div><div class="line"> <span class="keyword">return</span> <span class="literal">false</span>;</div><div class="line"> }<span class="keyword">else</span>{</div><div class="line"> <span class="keyword">int</span> rx=<span class="number">0</span>;</div><div class="line"> <span class="keyword">while</span>(x>rx){</div><div class="line"> <span class="keyword">int</span> digit = x%<span class="number">10</span>;</div><div class="line"> x = x/<span class="number">10</span>;</div><div class="line"> rx = rx*<span class="number">10</span>+digit;</div><div class="line"> }</div><div class="line"> <span class="keyword">if</span>(x==rx || x==rx/<span class="number">10</span>){</div><div class="line"> <span class="keyword">return</span> <span class="literal">true</span>;</div><div class="line"> }<span class="keyword">else</span>{</div><div class="line"> <span class="keyword">return</span> <span class="literal">false</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line">}</div></pre></td></tr></table></figure><h2 id="最大多位数串"><a href="#最大多位数串" class="headerlink" title="最大多位数串"></a>最大多位数串</h2><h3 id="问题-1"><a href="#问题-1" class="headerlink" title="问题"></a>问题</h3><p>设有n个正整数,将他们连接成一排,组成一个最大的多位整数。<br><br>如:n=3时,3个整数13,312,343,连成的最大整数为34331213。<br><br>如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613。</p><h3 id="思路-1"><a href="#思路-1" class="headerlink" title="思路"></a>思路</h3><p>本题可以理解为对N个数进行排序,只不过排序的标准不是数值的大小,而是两个字符串组合到一起转化成整形后的数值大小。</p><h3 id="代码-2"><a href="#代码-2" class="headerlink" title="代码"></a>代码</h3><figure class="highlight c++"><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><div class="line">22</div></pre></td><td class="code"><pre><div class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><iostream></span></span></div><div class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><algorithm></span></span></div><div class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</div><div class="line"></div><div class="line"><span class="function"><span class="keyword">bool</span> <span class="title">compare</span><span class="params">(<span class="built_in">string</span> i, <span class="built_in">string</span> j)</span></span>{</div><div class="line"> <span class="keyword">return</span> (i+j)>(j+i);</div><div class="line">}</div><div class="line"></div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</div><div class="line"> <span class="keyword">int</span> n;</div><div class="line"> <span class="keyword">while</span>(<span class="built_in">cin</span>>>n){</div><div class="line"> <span class="built_in">vector</span><<span class="built_in">string</span>>arr(n,<span class="string">""</span>);</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i =<span class="number">0</span>; i< n; i++){</div><div class="line"> <span class="built_in">cin</span>>>arr[i];</div><div class="line"> }</div><div class="line"> sort(arr.begin(),arr.end(),compare);</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>; i<n; i++){</div><div class="line"> <span class="built_in">cout</span><<arr[i];</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div></pre></td></tr></table></figure><h3 id="注意点"><a href="#注意点" class="headerlink" title="注意点"></a>注意点</h3><ol><li>vector容器(构造函数参数,常用函数)</li><li>sort函数(algorithm头文件)</li></ol><h2 id="逆序整数"><a href="#逆序整数" class="headerlink" title="逆序整数"></a>逆序整数</h2><h3 id="题目-1"><a href="#题目-1" class="headerlink" title="题目"></a>题目</h3><p>Given a 32-bit signed integer, reverse digits of an integer.</p><h3 id="易错点-1"><a href="#易错点-1" class="headerlink" title="易错点"></a>易错点</h3><ol><li>负数的逆序</li><li>逆序后发生溢出<h3 id="代码-3"><a href="#代码-3" class="headerlink" title="代码"></a>代码</h3><figure class="highlight c++"><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><div class="line">22</div><div class="line">23</div><div class="line">24</div></pre></td><td class="code"><pre><div class="line"><span class="class"><span class="keyword">class</span> <span class="title">Solution</span> {</span></div><div class="line"><span class="keyword">public</span>:</div><div class="line"> <span class="function"><span class="keyword">int</span> <span class="title">reverse</span><span class="params">(<span class="keyword">int</span> x)</span> </span>{</div><div class="line"> <span class="keyword">int</span> rx=<span class="number">0</span>;</div><div class="line"> <span class="keyword">int</span> sign=<span class="number">0</span>;</div><div class="line"> <span class="keyword">if</span>(x>=<span class="number">0</span>){</div><div class="line"> sign = <span class="number">1</span>;</div><div class="line"> }<span class="keyword">else</span>{</div><div class="line"> sign = <span class="number">-1</span>;</div><div class="line"> x =-x;</div><div class="line"> }</div><div class="line"> <span class="keyword">while</span>(x!=<span class="number">0</span>){</div><div class="line"> <span class="keyword">int</span> digit = x%<span class="number">10</span>;</div><div class="line"> <span class="keyword">int</span> old_rx = rx;</div><div class="line"> rx = rx*<span class="number">10</span>+digit;</div><div class="line"> <span class="keyword">if</span>(rx/<span class="number">10</span> != old_rx){</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line"> }<span class="keyword">else</span>{</div><div class="line"> x = x/<span class="number">10</span>;</div><div class="line"> } </div><div class="line"> }</div><div class="line"> <span class="keyword">return</span> rx*sign;</div><div class="line"> }</div><div class="line">};</div></pre></td></tr></table></figure></li></ol>]]></content>
<summary type="html">
<ul>
<li>最长回文子字符串</li>
<li>回文数字</li>
<li>最大多位数串</li>
<li>逆序整数</li>
</ul>
</summary>
</entry>
<entry>
<title>【基础算法】刷题记录 2018-03-13</title>
<link href="http://yoursite.com/2018/03/13/%E3%80%90%E5%9F%BA%E7%A1%80%E7%AE%97%E6%B3%95%E3%80%91%E5%88%B7%E9%A2%98%E8%AE%B0%E5%BD%95%2020180313/"/>
<id>http://yoursite.com/2018/03/13/【基础算法】刷题记录 20180313/</id>
<published>2018-03-13T06:58:56.000Z</published>
<updated>2018-03-13T07:46:41.606Z</updated>
<content type="html"><![CDATA[<ul><li>二维数组中的查找</li><li>二分查找</li><li>连续子数组的最大和</li></ul><a id="more"></a><h2 id="二维数组中的查找"><a href="#二维数组中的查找" class="headerlink" title="二维数组中的查找"></a>二维数组中的查找</h2><h3 id="问题"><a href="#问题" class="headerlink" title="问题"></a>问题</h3><p>在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。</p><h3 id="解法"><a href="#解法" class="headerlink" title="解法"></a>解法</h3><p>矩阵是有序的,从左下角来看,向上数字递减,向右数字递增,因此从左下角开始查找。当要查找数字比左下角数字大时,右移;要查找数字比左下角数字小时,上移。</p><h3 id="代码"><a href="#代码" class="headerlink" title="代码"></a>代码</h3><figure class="highlight java"><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></pre></td><td class="code"><pre><div class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Solution</span> </span>{</div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">boolean</span> <span class="title">Find</span><span class="params">(<span class="keyword">int</span> target, <span class="keyword">int</span> [][] array)</span> </span>{</div><div class="line"> <span class="keyword">int</span> x = <span class="number">0</span>;</div><div class="line"> <span class="keyword">int</span> y = array[<span class="number">0</span>].length -<span class="number">1</span>;</div><div class="line"> <span class="keyword">while</span>(x<array[<span class="number">0</span>].length && y>=<span class="number">0</span>){</div><div class="line"> <span class="keyword">if</span>(array[x][y] > target){</div><div class="line"> y -= <span class="number">1</span>;</div><div class="line"> <span class="keyword">continue</span>;</div><div class="line"> }</div><div class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(array[x][y] < target){</div><div class="line"> x += <span class="number">1</span>;</div><div class="line"> <span class="keyword">continue</span>;</div><div class="line"> }</div><div class="line"> <span class="keyword">else</span>{</div><div class="line"> <span class="keyword">return</span> <span class="keyword">true</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keyword">return</span> <span class="keyword">false</span>;</div><div class="line"> }</div><div class="line">}</div></pre></td></tr></table></figure><h2 id="二分查找"><a href="#二分查找" class="headerlink" title="二分查找"></a>二分查找</h2><h3 id="问题-1"><a href="#问题-1" class="headerlink" title="问题"></a>问题</h3><p>对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。<br>给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。</p><h3 id="易错点"><a href="#易错点" class="headerlink" title="易错点"></a>易错点</h3><p> [4,4,8,10] 4 4 按常规二分查找返回的是1,本题应返回的是0</p><h3 id="代码-1"><a href="#代码-1" class="headerlink" title="代码"></a>代码</h3><figure class="highlight java"><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><div class="line">22</div><div class="line">23</div><div class="line">24</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">BinarySearch</span> </span>{</div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">int</span> <span class="title">getPos</span><span class="params">(<span class="keyword">int</span>[] A, <span class="keyword">int</span> n, <span class="keyword">int</span> val)</span> </span>{</div><div class="line"> <span class="keyword">int</span> left = <span class="number">0</span>;</div><div class="line"> <span class="keyword">int</span> right = n-<span class="number">1</span>;</div><div class="line"> <span class="keyword">while</span>(left<=right){</div><div class="line"> <span class="keyword">int</span> current = (left+right)/<span class="number">2</span>;</div><div class="line"> <span class="keyword">if</span>(val < A[current]){</div><div class="line"> right = current -<span class="number">1</span>;</div><div class="line"> <span class="keyword">continue</span>;</div><div class="line"> }</div><div class="line"> <span class="keyword">else</span> <span class="keyword">if</span> (val > A[current]){</div><div class="line"> left = current +<span class="number">1</span>;</div><div class="line"> <span class="keyword">continue</span>;</div><div class="line"> }</div><div class="line"> <span class="keyword">else</span>{</div><div class="line"> <span class="keyword">while</span>(current > <span class="number">0</span> && A[current-<span class="number">1</span>] == A[current]){</div><div class="line"> current -= <span class="number">1</span>;</div><div class="line"> }</div><div class="line"> <span class="keyword">return</span> current;</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keyword">return</span> -<span class="number">1</span>;</div><div class="line"> }</div><div class="line">}</div></pre></td></tr></table></figure><h2 id="连续最大和"><a href="#连续最大和" class="headerlink" title="连续最大和"></a>连续最大和</h2><h3 id="问题-2"><a href="#问题-2" class="headerlink" title="问题"></a>问题</h3><p>一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3 </p><h3 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h3><p>动态规划。<br>如果用函数 f(i)表示以第 i 个数字结尾的子数组的最大和,那么我们需要求出 max[f(i)],其中 0 <= i < n。我们可用如下边归公式求 f(i):</p><span>$$f(i)=\begin{cases}pData[i]& \text{i=0 or f(i-1) <= 0}\\f(i-1)+pData[i]& \text{i!=0 and f(i-1)>0}\end{cases}$$</span><!-- Has MathJax --><p>这个公式的意义:当以第 i-1 个数字结尾的子数组中所有数字的和小于 0 时,如果把这个负数与第 i 个数累加,得到的结果比第 i 个数字本身还要小,所以这种情况下以第 i 个数字结尾的子数组就是第 i 个数字本身。如果以第 i-1 个数字结尾的子数组中所有数字的和大于 0,与第 i 个数字累加就得到以第 i 个数字结尾的子数组中所有数字的和。</p><h3 id="易错点-1"><a href="#易错点-1" class="headerlink" title="易错点"></a>易错点</h3><p>很容易忽略全都是负数的情况,例如[-1,-2,-3,-4]。</p><h3 id="代码-2"><a href="#代码-2" class="headerlink" title="代码"></a>代码</h3><figure class="highlight c++"><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><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div></pre></td><td class="code"><pre><div class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><iostream></span></span></div><div class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</div><div class="line"> </div><div class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>{</div><div class="line"> <span class="keyword">int</span> n;</div><div class="line"> <span class="built_in">cin</span>>>n;</div><div class="line"> <span class="keyword">int</span> a[n];</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>; i<n; i++){</div><div class="line"> <span class="built_in">cin</span>>>a[i];</div><div class="line"> }</div><div class="line"> <span class="keyword">int</span> max =a[<span class="number">0</span>];</div><div class="line"> <span class="keyword">int</span> curMax = <span class="number">0</span>;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> j=<span class="number">1</span>; j<n; j++){</div><div class="line"> <span class="keyword">if</span>(curMax < <span class="number">0</span>){</div><div class="line"> curMax =a[j];</div><div class="line"> }<span class="keyword">else</span>{</div><div class="line"> curMax += a[j];</div><div class="line"> }</div><div class="line"> <span class="keyword">if</span>(max < curMax){</div><div class="line"> max = curMax;</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="built_in">cout</span><<max;</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line">}</div></pre></td></tr></table></figure>]]></content>
<summary type="html">
<ul>
<li>二维数组中的查找</li>
<li>二分查找</li>
<li>连续子数组的最大和</li>
</ul>
</summary>
</entry>
<entry>
<title>【面试经验】微信搜索推荐团队机器学习数据挖掘实习生</title>
<link href="http://yoursite.com/2018/03/13/%E3%80%90%E9%9D%A2%E8%AF%95%E7%BB%8F%E9%AA%8C%E3%80%91%E5%BE%AE%E4%BF%A1%E6%90%9C%E7%B4%A2%E6%8E%A8%E8%8D%90%E5%9B%A2%E9%98%9F%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98%E5%AE%9E%E4%B9%A0%E7%94%9F/"/>
<id>http://yoursite.com/2018/03/13/【面试经验】微信搜索推荐团队机器学习数据挖掘实习生/</id>
<published>2018-03-13T05:10:56.000Z</published>
<updated>2018-03-13T06:02:38.409Z</updated>
<content type="html"><![CDATA[<p>简单记录了面试微信搜索推荐团队机器学习数据挖掘实习生(广州)过程中的问题,以供自己复习归纳和同方向的同学参考借鉴。</p><a id="more"></a><h2 id="职业规划"><a href="#职业规划" class="headerlink" title="职业规划"></a>职业规划</h2><ul><li>你能在公司工作工作到几月?每星期能到岗多久?</li><li>你打算读研吗?</li></ul><h2 id="算法"><a href="#算法" class="headerlink" title="算法"></a>算法</h2><ul><li>在一个经过排序的数组中插入一个数,返回该数的下标。(二分查找)</li></ul><figure class="highlight plain"><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></pre></td><td class="code"><pre><div class="line">find the index of the insert position: </div><div class="line">[1,3,5,9] 3 return 1</div><div class="line">[1,3,5,9] 0 return 0 </div><div class="line">[1,3,5,9] 40 return 4</div></pre></td></tr></table></figure><ul><li>找到一个数组中的最大和子数组。(动态规划)<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">find the subarray in a list has the largest sum</div><div class="line">[-2, 1,-3,4,-1,2,1,-5,4] [4,-1,2,1] has the biggest return 6</div></pre></td></tr></table></figure></li></ul><h2 id="机器学习和项目经验"><a href="#机器学习和项目经验" class="headerlink" title="机器学习和项目经验"></a>机器学习和项目经验</h2><ol><li>有哪些聚类方法?讲一下工作原理。</li><li>什么是过拟合?有哪些防止过拟合的方法?</li><li>有哪些正则化的方法?</li><li>有哪些降维的方法?你用过哪些?(深度学习和机器学习领域)</li><li>你了解L(1) L(2)吗?原理是什么?</li><li>机器学习有哪些常用的包?用过sklearn吗?</li><li>讲一个你喜欢的人工智能的现实应用。</li><li>你打的这几道赛题数据量是多少?有数据量大的项目经验吗?</li><li>项目里用过深度学习吗?RNN和LSTM有什么区别?LSTM的原理是什么?</li><li>linear regression和logistic regression的区别在哪里?</li></ol>]]></content>
<summary type="html">
<p>简单记录了面试微信搜索推荐团队机器学习数据挖掘实习生(广州)过程中的问题,以供自己复习归纳和同方向的同学参考借鉴。</p>
</summary>
</entry>
<entry>
<title>【TAIL CAMP】NLP Task:手写作文自动评分</title>
<link href="http://yoursite.com/2018/02/10/TAIL%20CAMP%20NLP%20Task2/"/>
<id>http://yoursite.com/2018/02/10/TAIL CAMP NLP Task2/</id>
<published>2018-02-10T06:55:30.000Z</published>
<updated>2018-02-10T07:00:42.473Z</updated>
<content type="html"><![CDATA[<h2 id="主要目标"><a href="#主要目标" class="headerlink" title="主要目标"></a>主要目标</h2><ul><li>学习使用textblob</li><li>学习readability的计算方法和相关工具</li><li>自动作文评分理论与方法学习</li></ul><a id="more"></a><h2 id="Day-1-安装并学习使用-textblob-工具,学习parsing相关知识"><a href="#Day-1-安装并学习使用-textblob-工具,学习parsing相关知识" class="headerlink" title="Day 1: 安装并学习使用 textblob 工具,学习parsing相关知识"></a>Day 1: 安装并学习使用 textblob 工具,学习parsing相关知识</h2><p> 今天我们将学习使用另一个nlp常用工具textblob,通过使用这个工具,学习其中的Part-of-speech Tagging,Spelling Correction,n-gram等概念</p><ol><li>阅读<a href="http://www.nltk.org/book/ch08-extras.html" target="_blank" rel="external">nltk book 第八章节</a>,学习parsing概念</li></ol><ol><li>安装<a href="http://textblob.readthedocs.io/en/dev/install.html" target="_blank" rel="external">textblob</a></li></ol><ol><li>学习<a href="http://textblob.readthedocs.io/en/dev/quickstart.html#quickstart" target="_blank" rel="external">textblob功能点</a></li></ol><h2 id="Day2-学习Readability的定义和计算方法,学习使用工具textstat-和-readability。"><a href="#Day2-学习Readability的定义和计算方法,学习使用工具textstat-和-readability。" class="headerlink" title="Day2: 学习Readability的定义和计算方法,学习使用工具textstat 和 readability。"></a>Day2: 学习Readability的定义和计算方法,学习使用工具textstat 和 readability。</h2><p>今天我们学习nlp中文章可读性的定义和计算方法,同时会用工具去计算。文章的可读性在自动作文评分,分级阅读等领域都有应用。 </p><ol><li><p>学习<a href="https://en.wikipedia.org/wiki/Readability_test" target="_blank" rel="external">readability的定义</a></p></li><li><p>学习使用工具 <a href="https://pypi.python.org/pypi/textstat/" target="_blank" rel="external">textstat</a></p></li><li><p>学习使用工具 <a href="https://pypi.python.org/pypi/readability" target="_blank" rel="external">readability</a></p></li></ol><h2 id="Day3-学习Keras的安装和使用"><a href="#Day3-学习Keras的安装和使用" class="headerlink" title="Day3: 学习Keras的安装和使用"></a>Day3: 学习Keras的安装和使用</h2><p>今天我们学习Keras,掌握一种快速搭建和使用深度神经网络的工具,可选择用于后面建立基于深度学习的自动作文评分</p><ol><li><p>Keras 的介绍和安装 <a href="http://keras-cn.readthedocs.io/en/latest/" target="_blank" rel="external">中文版本</a><br><a href="https://keras.io/#installation" target="_blank" rel="external">英文版本</a></p></li><li><p>学习使用keras <a href="http://keras-cn.readthedocs.io/en/latest/getting_started/sequential_model/" target="_blank" rel="external">中文教程</a></p></li></ol><ol><li>使用keras对文本进行处理和编码 <a href="https://keras-cn.readthedocs.io/en/latest/preprocessing/text/" target="_blank" rel="external">中文教程</a></li></ol><h2 id="Day4-amp-5-阅读论文,学习自动作文评分的理论和方法"><a href="#Day4-amp-5-阅读论文,学习自动作文评分的理论和方法" class="headerlink" title="Day4&5: 阅读论文,学习自动作文评分的理论和方法"></a>Day4&5: 阅读论文,学习自动作文评分的理论和方法</h2><p>前面几天我们已经学习了可以用来进行自动作文评分的一些概念和方法,接下来,我们通过阅读几片论文,了解和学习目前自动作文评分的主流的理论和方法。人工进行特征选择的方案,能够给写作文的用户带来更多的反馈信息,一定程度可以指导用户在弱项上进行提升;相比之下,基于深度学习的方法可能可以得到好的性能,但是是一个黑盒,从中没有办法获得更多的反馈;大家根据个人情况,可以充分发挥,例如做一些混合的系统等。以下内容作为同学们实现系统的参考:</p><p>参考阅读材料:</p><p><a href="https://www.researchgate.net/publication/278383803_Task-Independent_Features_for_Automated_Essay_Grading" target="_blank" rel="external">人工进行特征选择的评分系统</a></p><p><a href="http://www.aclweb.org/old_anthology/D/D16/D16-1193.pdf" target="_blank" rel="external">基于深度学习方法的评分系统</a></p><p>目前市面上比较权威的一个系统:<a href="https://www.ets.org/Media/Research/pdf/RR-04-45.pdf" target="_blank" rel="external">ETS的e-rater评分系统</a></p><h2 id="Day6-设计方案,进行机器自动评分"><a href="#Day6-设计方案,进行机器自动评分" class="headerlink" title="Day6: 设计方案,进行机器自动评分"></a>Day6: 设计方案,进行机器自动评分</h2><p>下面的链接是使用基于深度学习的方法进行作文自动评分的样例(前面提供论文的一个实现),可以作为一个实现方案的参考,同时大家可以自行设计自己的网络拓扑去做一些实验尝试。</p><p>此外,需要注意的是,我们选择的数据比样例少,所以考虑使用cpu模式去做实验,而样例使用了gpu模式。</p><p> <a href="https://github.com/nusnlp/nea" target="_blank" rel="external">参考链接</a></p>]]></content>
<summary type="html">
<h2 id="主要目标"><a href="#主要目标" class="headerlink" title="主要目标"></a>主要目标</h2><ul>
<li>学习使用textblob</li>
<li>学习readability的计算方法和相关工具</li>
<li>自动作文评分理论与方法学习</li>
</ul>
</summary>
</entry>
<entry>
<title>【TAIL CAMP】NLP Task:句子语义相似度预测</title>
<link href="http://yoursite.com/2018/02/01/TAIL%20CAMP%20NLP%20Task1/"/>
<id>http://yoursite.com/2018/02/01/TAIL CAMP NLP Task1/</id>
<published>2018-02-01T06:54:29.000Z</published>
<updated>2018-02-01T07:25:17.212Z</updated>
<content type="html"><![CDATA[<h2 id="主要目标"><a href="#主要目标" class="headerlink" title="主要目标"></a>主要目标</h2><ul><li>学习nltk,gensim等基本自然语言处理工具</li><li>学习机器学习基本工具Sklearn</li><li>相似度计算理论与方法学习</li></ul><a id="more"></a><h2 id="Day1-nltk,python"><a href="#Day1-nltk,python" class="headerlink" title="Day1 nltk,python"></a>Day1 nltk,python</h2><p>学习使用nltk,python,同时掌握nlp的一些基本处理技巧和方法,例如tokenize,stem等</p><p>今天主要把推荐书籍的第五章节前面的内容,选择性看一遍(根据自身的情况选择),同时把里面涉及的python代码敲一敲(做文中的example)。主要学习python的数据类型和使用,以及nlp的一些基本概念。</p><ol><li><p>安装nltk <a href="http://www.nltk.org/install.html" target="_blank" rel="external">安装教程</a></p></li><li><p>学习<a href="http://www.nltk.org/book/" target="_blank" rel="external">《Natural Language Processing with Python》</a>一书前6章节,进行文本tokenize,stem等操作</p></li></ol><h2 id="Day-2-gensim"><a href="#Day-2-gensim" class="headerlink" title="Day 2: gensim"></a>Day 2: gensim</h2><p> 今天我们主要学习使用nlp中比较流行的一种词向量生成方法word2vec,gensim是其在python环境下的实现。除此之外,gensim本身还带有其他的一些例如特征提取,主题模型计算等功能</p><ol><li><p>安装gensim <a href="https://radimrehurek.com/gensim/install.html" target="_blank" rel="external">安装教程</a></p></li><li><p><a href="https://radimrehurek.com/gensim/tutorial.html" target="_blank" rel="external">Gensim主要功能介绍</a>,学习tf-idf提取等功能</p></li><li><p><a href="https://radimrehurek.com/gensim/models/word2vec.html" target="_blank" rel="external">Gensim工具例子</a>: 学习使用gensim来提取,词向量等特征</p></li></ol><h2 id="Day3-scikit-learn"><a href="#Day3-scikit-learn" class="headerlink" title="Day3: scikit-learn"></a>Day3: scikit-learn</h2><p>scikit-learn安装和例子学习,学习使用工具进行拟合。</p><p>scikit-learn是机器学习领域广泛被使用的一个python工具,里面集成了大量的机器学习算法。今天我们学习其中的Ridge Regression 和 svr方法,Ridge Regression使用比较简单,svr是深度学习前的主流方法(里面现在也集成了深度学习的工具,有兴趣的同学可以尝试)。后面可以选择使用这些方法对相似度数据进行拟合。</p><ol><li><p><a href="http://scikit-learn.org/stable/" target="_blank" rel="external">官网主页</a></p></li><li><p><a href="http://scikit-learn.org/stable/install.html" target="_blank" rel="external">安装 scikit-learn 教程</a></p></li><li><p>学习使用 scikit-learn 进行拟合 </p><ul><li><a href="http://scikit-learn.org/stable/modules/linear_model.html#ridge-regression" target="_blank" rel="external">Ridge Regression教程</a> </li><li><p><a href="http://scikit-learn.org/stable/modules/svm.html#regression" target="_blank" rel="external">Svr教程</a></p><p>说明:</p></li></ul><ol><li><p>若由于某些原因链接打不开,可以从主页点进去试试</p><p>Ridge Regression:主页 -> Regression -> 1.1.2 Ridge Regression</p><p>svr: 主页 -> Regression -> 1.4.2. Regression</p></li><li><p>对拟合概念不太理解的同学可参考:</p><p> <a href="https://zh.wikipedia.org/wiki/%E6%9B%B2%E7%B7%9A%E6%93%AC%E5%90%88" target="_blank" rel="external">维基百科</a></p><p> <a href="http://open.163.com/special/opencourse/machinelearning.html" target="_blank" rel="external">Andrew Ng课程第三章</a></p></li></ol></li></ol><h2 id="Day4-amp-5-阅读论文,学习语义相似度计算的方法"><a href="#Day4-amp-5-阅读论文,学习语义相似度计算的方法" class="headerlink" title="Day4&5:阅读论文,学习语义相似度计算的方法"></a>Day4&5:阅读论文,学习语义相似度计算的方法</h2><p>前面几天已经学习了一些基本的工具和方法,接下来需要开始思考如何使用自己所学习到的内容(可以不在这几天的课程之类)来完成相似度预测的任务。以下几篇论文作为参考方法,可以采用提到的任意一种方法作为最终的实现方案,有余力的同学也可以实现多个方案。</p><p>参考阅读材料:</p><p> <a href="http://nlp.arizona.edu/SemEval-2017/pdf/SemEval025.pdf" target="_blank" rel="external">http://nlp.arizona.edu/SemEval-2017/pdf/SemEval025.pdf</a></p><p> <a href="http://www.aclweb.org/anthology/S/S14/S14-2039.pdf" target="_blank" rel="external">http://www.aclweb.org/anthology/S/S14/S14-2039.pdf</a></p><p> <a href="http://nlp.arizona.edu/SemEval-2017/pdf/SemEval001.pdf" target="_blank" rel="external">http://nlp.arizona.edu/SemEval-2017/pdf/SemEval001.pdf</a></p><h2 id="Day6-参考方案,进行相似度预测"><a href="#Day6-参考方案,进行相似度预测" class="headerlink" title="Day6: 参考方案,进行相似度预测"></a>Day6: 参考方案,进行相似度预测</h2><p> 如果大家已经完成自己系统的搭建并提交预测数据,那么恭喜。如果没有,可以参考<a href="http://www.52nlp.cn/%E5%A6%82%E4%BD%95%E8%AE%A1%E7%AE%97%E4%B8%A4%E4%B8%AA%E6%96%87%E6%A1%A3%E7%9A%84%E7%9B%B8%E4%BC%BC%E5%BA%A6%E4%BA%8C" target="_blank" rel="external">本链接</a> 中的做法,计算两个句子的相似度后再和人工的语义打分进行拟合。最后提交结果。</p><h2 id="个人总结"><a href="#个人总结" class="headerlink" title="个人总结"></a>个人总结</h2><p>主办方自诩难度比价高,任务量比较大,但这一论断应该是就新手而言。有过相关大数据与人工智能开发经验的人很多概念都应该已经掌握了,甚至能直接上手建模型了。事实情况也确实如此,任务发布三天半之后,超过一半的学员已经有过结果提交记录了,打榜也比较激烈,证明前期的学习难度确实不大。</p>]]></content>
<summary type="html">
<h2 id="主要目标"><a href="#主要目标" class="headerlink" title="主要目标"></a>主要目标</h2><ul>
<li>学习nltk,gensim等基本自然语言处理工具</li>
<li>学习机器学习基本工具Sklearn</li>
<li>相似度计算理论与方法学习</li>
</ul>
</summary>
</entry>
<entry>
<title>【论文笔记】词向量的生成与语言模型(开发中...)</title>
<link href="http://yoursite.com/2018/01/20/%E3%80%90%E8%AE%BA%E6%96%87%E7%AC%94%E8%AE%B0%E3%80%91%E8%AF%8D%E5%90%91%E9%87%8F%E7%9A%84%E7%94%9F%E6%88%90%E4%B8%8E%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/"/>
<id>http://yoursite.com/2018/01/20/【论文笔记】词向量的生成与语言模型/</id>
<published>2018-01-20T09:31:32.000Z</published>
<updated>2018-02-01T07:27:15.244Z</updated>
<content type="html"><![CDATA[<p>这篇博客介绍了六种生成词向量的模型,分别是神经语言模型(NNLM)、对数双线性语言模型(LBLM)、C&W模型、CBOW模型、skip-gram模型、(Order模型)、GloVe模型。</p><a id="more"></a><h2 id="神经语言模型(NNLM)"><a href="#神经语言模型(NNLM)" class="headerlink" title="神经语言模型(NNLM)"></a>神经语言模型(NNLM)</h2><p><img src="figure3.png" alt=""></p><p>Yoshua Bengio及其同事首先提出了一种同时学习词向量和语言模型的神经网络语言模型(NNLM)。 对于语料库中的每个样本,给出前面的词,我们使最后一个词的概率的对数似然最大化。 例如,对于语料库中的序列$w_1,w_2,…,w_n$,我们需要最大化$P(w_n|w_1,w<em>2,…,w</em>{n-1})$的对数似然性,其中我们把要预测的单词 $(w_n)$作为目标词。这个模型使用前面的词向量的串联作为输入:<br> <span>$$\begin{align} \begin{split} x=[e(w_1),...,e(w_{n-2}),e(w_{n-1})] \end{split}\end{align}$$</span><!-- Has MathJax --></p><p> 模型结构是一个带有一个隐藏层的前馈神经网络:<br> <span>$$\begin{align} \begin{split} h &= tanh(d + Hx) \\ y &= b + Uh \end{split}\end{align}$$</span><!-- Has MathJax --></p><p>其中$U$是变换矩阵,$b$和$d$是偏差向量。最后一步是应用softmax层来获得目标词的概率。</p>]]></content>
<summary type="html">
<p>这篇博客介绍了六种生成词向量的模型,分别是神经语言模型(NNLM)、对数双线性语言模型(LBLM)、C&amp;W模型、CBOW模型、skip-gram模型、(Order模型)、GloVe模型。</p>
</summary>
</entry>
<entry>
<title>【论文笔记】评价词向量性能的八个任务</title>
<link href="http://yoursite.com/2018/01/18/%E3%80%90%E8%AE%BA%E6%96%87%E7%AC%94%E8%AE%B0%E3%80%91%E8%AF%84%E4%BB%B7%E8%AF%8D%E5%90%91%E9%87%8F%E6%80%A7%E8%83%BD%E7%9A%84%E5%85%AB%E4%B8%AA%E4%BB%BB%E5%8A%A1/"/>
<id>http://yoursite.com/2018/01/18/【论文笔记】评价词向量性能的八个任务/</id>
<published>2018-01-18T13:02:42.000Z</published>
<updated>2018-01-18T13:10:27.509Z</updated>
<content type="html"><![CDATA[<p>词向量的优劣可以从三个任务类型的八个任务进行综合评定。此篇博文简述了评价词向量性能的八个任务。</p><a id="more"></a><h2 id="语义属性(Sementic-Properties"><a href="#语义属性(Sementic-Properties" class="headerlink" title="语义属性(Sementic Properties)"></a>语义属性(Sementic Properties)</h2><h3 id="词语相似度(Word-Similarity)"><a href="#词语相似度(Word-Similarity)" class="headerlink" title="词语相似度(Word Similarity)"></a>词语相似度(Word Similarity)</h3><p>测试过程用的是WordSimilarity-353测试集,他包含353对英文词汇和人工对这些词对之间的语义相关度的评测值。词向量的效果比较的是两个词向量的余弦距离的Pearson相关性与人工打分的平均分数的相似程度。</p><h3 id="同义词选择题-Synonym-Question"><a href="#同义词选择题-Synonym-Question" class="headerlink" title="同义词选择题(Synonym Question)"></a>同义词选择题(Synonym Question)</h3><p>测试过程用的是托福考试中的80个同义词选择题,每道选择题有四个选项,选择问题与选项中余弦距离最近的选项,并评估最终整体的准确性。</p><h3 id="语义类比问题(Semantic-Analogy-Question)"><a href="#语义类比问题(Semantic-Analogy-Question)" class="headerlink" title="语义类比问题(Semantic Analogy Question)"></a>语义类比问题(Semantic Analogy Question)</h3><p>完成大约9000个语义类比问题,问题类似于“ man is to (woman) as king is to queen”。通过计算(queen-king+man)的最近词向量作为问题的答案,并评估整体的准确性。</p><h3 id="语法类比问题(Syntactic-Amalogy-Question)"><a href="#语法类比问题(Syntactic-Amalogy-Question)" class="headerlink" title="语法类比问题(Syntactic Amalogy Question)"></a>语法类比问题(Syntactic Amalogy Question)</h3><p>完成大约10500个语法类比问题,问题类似于“ predict is to (predicting) as dance is to dancing”, 通过计算(dancing - dance + predict)的最近词向量作为问题的答案,并评估整体的准确性。</p><h2 id="将词向量作为特征-Embedding-as-Features"><a href="#将词向量作为特征-Embedding-as-Features" class="headerlink" title="将词向量作为特征 (Embedding as Features)"></a>将词向量作为特征 (Embedding as Features)</h2><h3 id="文本分类-Text-Classification"><a href="#文本分类-Text-Classification" class="headerlink" title="文本分类 (Text Classification)"></a>文本分类 (Text Classification)</h3><p>使用词向量的加权平均值作为文本的表示,然后应用逻辑回归来执行文本分类。 每个单词的权重是其出现频率。使用的数据集是IMDB数据集。</p><h3 id="命名实体识别-Named-entity-recognization"><a href="#命名实体识别-Named-entity-recognization" class="headerlink" title="命名实体识别 (Named entity recognization)"></a>命名实体识别 (Named entity recognization)</h3><h2 id="用词向量初始化神经网络-Embedding-as-the-Initialization-of-Neural-Networks"><a href="#用词向量初始化神经网络-Embedding-as-the-Initialization-of-Neural-Networks" class="headerlink" title="用词向量初始化神经网络 (Embedding as the Initialization of Neural Networks)"></a>用词向量初始化神经网络 (Embedding as the Initialization of Neural Networks)</h2><p> 在最近的NLP任务的神经网络方法中,词向量被用来初始化第一层。</p><h3 id="句子情感分析-sentence-level-sentiment-classfication"><a href="#句子情感分析-sentence-level-sentiment-classfication" class="headerlink" title="句子情感分析 (sentence-level sentiment classfication)"></a>句子情感分析 (sentence-level sentiment classfication)</h3><p>使用卷积神经网络(CNN)在斯坦福情绪树库数据集上进行句子情感分类,重复实验五次,并展示这些实验的平均准确性。</p><h2 id="词性标注-Part-of-speech-Tagging"><a href="#词性标注-Part-of-speech-Tagging" class="headerlink" title="词性标注 (Part-of-speech Tagging)"></a>词性标注 (Part-of-speech Tagging)</h2><p>们使用Ronan Collobert及其同事提出的神经网络对华尔街日报数据进行词性标注,并评估准确性。</p>]]></content>
<summary type="html">
<p>词向量的优劣可以从三个任务类型的八个任务进行综合评定。此篇博文简述了评价词向量性能的八个任务。</p>
</summary>
</entry>
<entry>
<title>【基础定义】异构数据融合与共享项目基础定义总结</title>
<link href="http://yoursite.com/2017/11/18/%E3%80%90%E5%9F%BA%E7%A1%80%E5%AE%9A%E4%B9%89%E3%80%91%E5%BC%82%E6%9E%84%E6%95%B0%E6%8D%AE%E8%9E%8D%E5%90%88%E4%B8%8E%E5%85%B1%E4%BA%AB%E5%9F%BA%E7%A1%80%E5%AE%9A%E4%B9%89%E6%80%BB%E7%BB%93/"/>
<id>http://yoursite.com/2017/11/18/【基础定义】异构数据融合与共享基础定义总结/</id>
<published>2017-11-18T04:27:56.000Z</published>
<updated>2017-11-18T04:59:24.000Z</updated>
<content type="html"><![CDATA[<h2 id="AOP思想"><a href="#AOP思想" class="headerlink" title="AOP思想"></a>AOP思想</h2><p>AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。</p><p>这样看来,AOP其实只是OOP的补充而已。OOP从横向上区分出一个个的类来,而AOP则从纵向上向对象中加入特定的代码。有了AOP,OOP变得立体了。如果加上时间维度,AOP使OOP由原来的二维变为三维了,由平面变成立体了。从技术上来说,AOP基本上是通过代理机制实现的。</p><a id="more"></a><p>refs:</p><ul><li><p><a href="https://baike.baidu.com/item/AOP/1332219?fr=aladdin" target="_blank" rel="external">AOP (面向切面编程)</a></p></li><li><p><a href="https://www.zhihu.com/question/24863332" target="_blank" rel="external">什么是面向切面编程AOP?</a></p></li></ul><h2 id="CAP原理"><a href="#CAP原理" class="headerlink" title="CAP原理"></a>CAP原理</h2><ul><li>Consistency(一致性), 数据一致更新,所有数据变动都是同步的</li><li>Availability(可用性), 好的响应性能</li><li>Partition tolerance(分区容错性) 可靠性</li></ul><p>定理:任何分布式系统只可同时满足二点,没法三者兼顾。</p><p>忠告:架构师不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍。</p><p>refs:</p><ul><li><a href="http://www.jdon.com/37625" target="_blank" rel="external">CAP原理和BASE思想</a></li></ul><h2 id="ACID模型"><a href="#ACID模型" class="headerlink" title="ACID模型"></a>ACID模型</h2><p>关系数据库的ACID模型拥有 高一致性 + 可用性 很难进行分区:</p><ul><li>Atomicity 原子性:整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。</li><li><p>Consistency 一致性. 一个事务可以封装状态改变(除非它是一个只读的)。事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少。</p></li><li><p>Isolation 隔离性. 如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。事务将假定只有它自己在操作数据库,彼此不知晓。</p></li><li>Durability 持久性. 在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。</li></ul><p>refs:</p><ul><li><a href="http://www.jdon.com/37625" target="_blank" rel="external">CAP原理和BASE思想</a></li><li><a href="https://baike.baidu.com/item/acid/10738?fr=aladdin" target="_blank" rel="external">acid (数据库事务正确执行的四个基本要素的缩写)</a></li></ul><h2 id="BASE思想"><a href="#BASE思想" class="headerlink" title="BASE思想"></a>BASE思想</h2><p>BASE模型反ACID模型,完全不同ACID模型,牺牲高一致性,获得可用性或可靠性:</p><ul><li>Basically Available 基本可用。基本可用是指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。</li><li>Soft state 软状态 状态可以有一段时间不同步,异步。软状态是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。</li><li>Eventually consistent 最终一致,最终数据是一致的就可以了,而不是时时高一致。最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。</li></ul><p>ACID是传统数据库常用的设计理念,追求强一致性模型。BASE支持的是大型分布式系统,提出通过牺牲强一致性获得高可用性。</p><p>ACID和BASE代表了两种截然相反的设计哲学,在分布式系统设计的场景中,系统组件对一致性要求是不同的,因此ACID和BASE又会结合使用。</p><p>refs:</p><ul><li><a href="http://www.jdon.com/37625" target="_blank" rel="external">CAP原理和BASE思想</a></li><li><a href="http://www.cnblogs.com/exceptioneye/p/5452601.html" target="_blank" rel="external">分布式系统的BASE理论</a></li></ul><h2 id="ASR"><a href="#ASR" class="headerlink" title="ASR"></a>ASR</h2><p>ASR:重要的架构需求,会对架构产生深远影响的需求;</p><p>ASR的几种获取方法:需求文档,采访利益相关者,理解商业目标,效应数;</p><h2 id="SOA模型"><a href="#SOA模型" class="headerlink" title="SOA模型"></a>SOA模型</h2><p>面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。</p><p>SOA的精髓是严格的松散耦合,大家按照一个契约(service interface)来进行交流,不允许shared memory,不允许back door,不允许直接访问其它服务的数据。</p>]]></content>
<summary type="html">
<h2 id="AOP思想"><a href="#AOP思想" class="headerlink" title="AOP思想"></a>AOP思想</h2><p>AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。</p>
<p>这样看来,AOP其实只是OOP的补充而已。OOP从横向上区分出一个个的类来,而AOP则从纵向上向对象中加入特定的代码。有了AOP,OOP变得立体了。如果加上时间维度,AOP使OOP由原来的二维变为三维了,由平面变成立体了。从技术上来说,AOP基本上是通过代理机制实现的。</p>
</summary>
</entry>
<entry>
<title>【机器学习】(开发中...)</title>
<link href="http://yoursite.com/2017/11/18/%E3%80%90%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E3%80%91%E7%BA%BF%E6%80%A7%E5%88%86%E7%B1%BB%E3%80%81%E7%BA%BF%E6%80%A7%E5%9B%9E%E5%BD%92%E5%92%8C%E6%A2%AF%E5%BA%A6%E4%B8%8B%E9%99%8D/"/>
<id>http://yoursite.com/2017/11/18/【机器学习】线性分类、线性回归和梯度下降/</id>
<published>2017-11-18T04:27:56.000Z</published>
<updated>2018-01-18T13:21:14.154Z</updated>
<content type="html"><![CDATA[<p>正在开发中…<br><a id="more"></a><br>$F_{\mu}$<br>$F_a + F_b = F_c$</p><p>$F_a = F_b + F_c + F_{\mu}$</p><p>公式是这样的 <span>$F_a = F_b + F_c + F_{\mu}$</span><!-- Has MathJax -->,你必须理解它,才能看懂下面这些公式:</p><span>$$\begin{aligned}\dot{x} & = \sigma(y-x) \\\dot{y} & = \rho x - y - xz \\\dot{z} & = -\beta z + xy\end{aligned}$$</span><!-- Has MathJax --><h2 id="实验目的"><a href="#实验目的" class="headerlink" title="实验目的"></a>实验目的</h2><ul><li>进一步理解线性回归和梯度下降的原理。</li><li>在小规模数据集上实践。</li><li>体会优化和调参的过程。</li></ul><h2 id="数据集"><a href="#数据集" class="headerlink" title="数据集"></a>数据集</h2><ul><li>线性回归使用的是LIBSVM Data中的Housing数据,包含506个样本,每个样本有13个属性。请自行下载scaled版本,并将其切分为训练集,验证集。 </li><li>线性分类使用的是LIBSVM Data中的australian数据,包含690个样本,每个样本有14 个属性。请自行下载scaled版本,并将其切分为训练集,验证集。</li></ul><h2 id="实验步骤"><a href="#实验步骤" class="headerlink" title="实验步骤"></a>实验步骤</h2><h3 id="线性回归和梯度下降"><a href="#线性回归和梯度下降" class="headerlink" title="线性回归和梯度下降"></a>线性回归和梯度下降</h3><ol><li>读取实验数据,使用sklearn库的load_svmlight_file函数读取数据。</li><li>将数据集切分为训练集和验证集,本次实验不切分测试集。使用train_test_split函数切分数据集。</li><li>线性模型参数初始化,可以考虑全零初始化,随机初始化或者正态分布初始化。<br>选择Loss函数及对其求导,过程详见课件ppt。<br>求得所有样本对Loss函数的梯度。<br>取梯度的负方向,记为。<br>更新模型参数,。为学习率,是人为调整的超参数。<br>在训练集上测试并得到Loss函数值,在验证集上测试并得到Loss函数值。<br>重复步骤5-8若干次,画出和随迭代次数的变化图。<br>$F$</li></ol><p>$$<br>\begin{eqnarray}<br>\nabla\cdot\vec{E} &=& \frac{\rho}{\epsilon_0} \<br>\nabla\cdot\vec{B} &=& 0 \<br>\nabla\times\vec{E} &=& -\frac{\partial B}{\partial t} \<br>\nabla\times\vec{B} &=& \mu_0\left(\vec{J}+\epsilon_0\frac{\partial E}{\partial t} \right)<br>\end{eqnarray}<br>$$</p>]]></content>
<summary type="html">
<p>正在开发中…<br>
</summary>
</entry>
<entry>
<title>【项目笔记】iGEM wiki项目总结</title>
<link href="http://yoursite.com/2017/11/08/iGEM-wiki/"/>
<id>http://yoursite.com/2017/11/08/iGEM-wiki/</id>
<published>2017-11-08T12:05:14.000Z</published>
<updated>2017-11-08T11:30:58.000Z</updated>
<content type="html"><![CDATA[<h2 id="项目描述"><a href="#项目描述" class="headerlink" title="项目描述"></a>项目描述</h2><p>该项目是为SCUT—China_A队伍制作wiki主页。项目比较简单,就是用基本的HTML+CSS+JavaScript写一个网站,大约有20个页面。页面设计是扁平化的极简风格的三栏式布局。项目因为一直没有收到设计稿,项目无法进行,最终在wiki freeze前四天正式开始编码,用时近两天半完成了整个网站的制作。开发过程中基本采用敏捷式开发方法,跟设计组采用流水线的工作形式,迭代开发每一个网页。</p><h2 id="项目成果"><a href="#项目成果" class="headerlink" title="项目成果"></a>项目成果</h2><p><a href="http://2017.igem.org/Team:SCUT-China_A" target="_blank" rel="external">http://2017.igem.org/Team:SCUT-China_A</a></p><a id="more"></a><h2 id="项目收获"><a href="#项目收获" class="headerlink" title="项目收获"></a>项目收获</h2><ul><li>重新熟悉了基础的前端语法</li><li>所在的队伍极有可能拿到一个国际级奖项</li><li>认识了一群非常可爱而优秀的小伙伴</li></ul><h2 id="项目难点"><a href="#项目难点" class="headerlink" title="项目难点"></a>项目难点</h2><ul><li>iGEM官方提供了服务器,这减少了搭建网站的工作量,但官方提供的代码编辑器非常难用,而且默认模板样式很诡异,而且会覆盖所提及网页的样式,需要自己再重新把平台覆盖的样式覆盖掉。</li><li>wiki tools平台会先解析一遍上传的代码,并做出一些匪夷所思的更改,比如说把 && 替换成 &amp ;&amp ;。这个问题怀疑是平台传输代码数据时造成的更改,但一时间难以找到真正原因,所以采取的解决办法就是用嵌套选择语句代替&&语句。</li><li>设计组的设计稿交付不及时,这导致严重的项目赶工情况的发生。编码的那两天半里每天熬夜到三四点,以后一定要催促设计组及时交付文档。</li><li>项目难度不大,但是工作量大,基本是重复性的搬砖工作。所以将图片上传等简单的工作交给其他人来完成,并且教会了一至两个人写简单的HTML代码,这大大减少了我的工作量。</li></ul>]]></content>
<summary type="html">
<h2 id="项目描述"><a href="#项目描述" class="headerlink" title="项目描述"></a>项目描述</h2><p>该项目是为SCUT—China_A队伍制作wiki主页。项目比较简单,就是用基本的HTML+CSS+JavaScript写一个网站,大约有20个页面。页面设计是扁平化的极简风格的三栏式布局。项目因为一直没有收到设计稿,项目无法进行,最终在wiki freeze前四天正式开始编码,用时近两天半完成了整个网站的制作。开发过程中基本采用敏捷式开发方法,跟设计组采用流水线的工作形式,迭代开发每一个网页。</p>
<h2 id="项目成果"><a href="#项目成果" class="headerlink" title="项目成果"></a>项目成果</h2><p><a href="http://2017.igem.org/Team:SCUT-China_A" target="_blank" rel="external">http://2017.igem.org/Team:SCUT-China_A</a></p>
</summary>
</entry>
<entry>
<title>【解决方案】robo3t 1.1在ubuntu 16.04中无法打开的解决方案</title>
<link href="http://yoursite.com/2017/08/10/16-04%E4%B8%AD%E6%97%A0%E6%B3%95%E6%89%93%E5%BC%80%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/"/>
<id>http://yoursite.com/2017/08/10/16-04中无法打开的解决方案/</id>
<published>2017-08-10T00:27:56.000Z</published>
<updated>2018-02-01T07:42:33.861Z</updated>
<content type="html"><![CDATA[<h2 id="问题描述"><a href="#问题描述" class="headerlink" title="问题描述"></a>问题描述</h2><p>robo3t 1.1在ubuntu 16.04中无法打开,具体表现为双击robo3t可执行文件无反应,用终端 ./robo3t 命令报错为</p><figure class="highlight plain"><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></pre></td><td class="code"><pre><div class="line">This application failed to start because it could not find or load the Qt platform plugin "xcb"</div><div class="line">in "".</div><div class="line"></div><div class="line">Available platform plugins are: xcb.</div><div class="line"></div><div class="line">Reinstalling the application may fix this problem.</div><div class="line">已放弃 (核心已转储)</div></pre></td></tr></table></figure><h2 id="解决方案"><a href="#解决方案" class="headerlink" title="解决方案"></a>解决方案</h2><p>删除lib中的libstdc++*</p><a id="more"></a><p> 按顺序执行这三句命令:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">mkdir ~/robo-backup</div><div class="line">mv robo3t-1.1.1-linux-x86_64-c93c6b0/lib/libstdc++* ~/robo-backup/</div><div class="line">robo3t-1.1.1-linux-x86_64-c93c6b0/bin/robo3t</div></pre></td></tr></table></figure><p>即可完美解决该问题</p><p>ref:<a href="https://github.com/Studio3T/robomongo/issues/1385" target="_blank" rel="external">https://github.com/Studio3T/robomongo/issues/1385</a></p>]]></content>
<summary type="html">
<h2 id="问题描述"><a href="#问题描述" class="headerlink" title="问题描述"></a>问题描述</h2><p>robo3t 1.1在ubuntu 16.04中无法打开,具体表现为双击robo3t可执行文件无反应,用终端 ./robo3t 命令报错为</p>
<figure class="highlight plain"><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></pre></td><td class="code"><pre><div class="line">This application failed to start because it could not find or load the Qt platform plugin &quot;xcb&quot;</div><div class="line">in &quot;&quot;.</div><div class="line"></div><div class="line">Available platform plugins are: xcb.</div><div class="line"></div><div class="line">Reinstalling the application may fix this problem.</div><div class="line">已放弃 (核心已转储)</div></pre></td></tr></table></figure>
<h2 id="解决方案"><a href="#解决方案" class="headerlink" title="解决方案"></a>解决方案</h2><p>删除lib中的libstdc++*</p>
</summary>
</entry>
<entry>
<title>【解决方案】Chrome更新至58.0后XX.net无法使用,提示“请检查浏览器代理设置”的解决方案</title>
<link href="http://yoursite.com/2017/05/26/Chrome%E6%9B%B4%E6%96%B0%E8%87%B358-0%E5%90%8EXX-net%E6%97%A0%E6%B3%95%E4%BD%BF%E7%94%A8%EF%BC%8C%E6%8F%90%E7%A4%BA%E2%80%9C%E8%AF%B7%E6%A3%80%E6%9F%A5%E6%B5%8F%E8%A7%88%E5%99%A8%E4%BB%A3%E7%90%86%E8%AE%BE%E7%BD%AE%E2%80%9D%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/"/>
<id>http://yoursite.com/2017/05/26/Chrome更新至58-0后XX-net无法使用,提示“请检查浏览器代理设置”的解决方案/</id>
<published>2017-05-26T07:24:53.000Z</published>
<updated>2018-02-01T07:42:22.254Z</updated>
<content type="html"><![CDATA[<p>chrome 更新至58.0后,部分用户会发现xx-net无法使用,并提示“请检查浏览器代理设置”,且日志中反复出现 con failed(连接失败),解决方法如下:</p><p>1.将xx-net更新至测试版3.3.2或者稳定版3.3.1<br>下载地址: <a href="https://github.com/XX-net/XX-Net/blob/master/code/default/download.md" target="_blank" rel="external">https://github.com/XX-net/XX-Net/blob/master/code/default/download.md</a><br>2.删除安装文件夹/data/gae_proxy文件夹下的certs文件夹和CA.crt文件<br>3.在Chrome游览器的设置中删除已导入的xx-net的证书,删除方法参考官方文档<a href="https://github.com/XX-net/XX-Net/wiki/%E8%AF%81%E4%B9%A6%E9%94%99%E8%AF%AF" target="_blank" rel="external">https://github.com/XX-net/XX-Net/wiki/%E8%AF%81%E4%B9%A6%E9%94%99%E8%AF%AF</a><br>(删除后,如有必要请重新手动添加证书,不过大多数情况下该步骤都能自动完成)<br>4.检查SwitchyOmega的代理设置(如果没有更改过可跳过该步骤)<br>5.启动xx-net,如无意外,xx-net可正常运行<br>(升级xx-net可能需要重新部署服务端并配置,可参考官方文档<a href="https://github.com/XX-net/XX-Net/wiki/how-to-create-my-appids" target="_blank" rel="external">https://github.com/XX-net/XX-Net/wiki/how-to-create-my-appids</a> )</p><p>如有疑问,请留言讨论</p>]]></content>
<summary type="html">
<p>chrome 更新至58.0后,部分用户会发现xx-net无法使用,并提示“请检查浏览器代理设置”,且日志中反复出现 con failed(连接失败),解决方法如下:</p>
<p>1.将xx-net更新至测试版3.3.2或者稳定版3.3.1<br>下载地址: <a hre
</summary>
</entry>
<entry>
<title>【LeetCode刷题记录】9. Palindrome Number</title>
<link href="http://yoursite.com/2017/04/26/Number/"/>
<id>http://yoursite.com/2017/04/26/Number/</id>
<published>2017-04-26T14:25:30.000Z</published>
<updated>2017-11-08T11:46:22.000Z</updated>
<content type="html"><![CDATA[<h1 id="Description"><a href="#Description" class="headerlink" title="Description:"></a>Description:</h1><p>Determine whether an integer is a palindrome. Do this without extra space.</p><p>这道题目实现并不难,但题目要求空间复杂度为O(1), 有一定的技巧性。</p><h1 id="Solutions"><a href="#Solutions" class="headerlink" title="Solutions:"></a>Solutions:</h1><h2 id="Solution-1"><a href="#Solution-1" class="headerlink" title="Solution 1:"></a>Solution 1:</h2><figure class="highlight c++"><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></pre></td><td class="code"><pre><div class="line"><span class="function"><span class="keyword">public</span> boolean <span class="title">isPalindrome</span><span class="params">(<span class="keyword">int</span> x)</span> </span>{</div><div class="line"> <span class="keyword">int</span> palindromeX = <span class="number">0</span>;</div><div class="line"> <span class="keyword">int</span> inputX = x;</div><div class="line"> <span class="keyword">while</span>(x><span class="number">0</span>){</div><div class="line"> palindromeX = palindromeX*<span class="number">10</span> + (x % <span class="number">10</span>);</div><div class="line"> x = x/<span class="number">10</span>;</div><div class="line"> }</div><div class="line"> <span class="keyword">return</span> palindromeX==inputX;</div><div class="line"> }</div></pre></td></tr></table></figure><p>受到LeetCode 7.Reverse Integer 的启发,将原int型的数据完全反转后,比较反转后的数据与原数据是否相同,相同则为回文,反之不是。</p><a id="more"></a><p>Question:这个算法没有考虑到int型数据反转后可能存在的溢出情况,是不是有错误?<br>Answer: 若反转后的数据比原数据大,那么它一定与原数据不相同,肯定不是回文了,所以这个算法隐性地排除了溢出的情况。</p><p>但进一步思考,判断是否为回文需要将整个数字完全反转吗?反转到一半不久可以进行比较了吗?这就引出了Solution 2。</p><!-- more --><h2 id="Solution-2"><a href="#Solution-2" class="headerlink" title="Solution 2:"></a>Solution 2:</h2><figure class="highlight c++"><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></pre></td><td class="code"><pre><div class="line"><span class="function"><span class="keyword">bool</span> <span class="title">isPalindrome</span><span class="params">(<span class="keyword">int</span> x)</span> </span>{</div><div class="line"> <span class="keyword">if</span>(x<<span class="number">0</span>|| (x!=<span class="number">0</span> &&x%<span class="number">10</span>==<span class="number">0</span>)) <span class="keyword">return</span> <span class="literal">false</span>;</div><div class="line"> <span class="keyword">int</span> sum=<span class="number">0</span>;</div><div class="line"> <span class="keyword">while</span>(x>sum)</div><div class="line"> {</div><div class="line"> sum = sum*<span class="number">10</span>+x%<span class="number">10</span>;</div><div class="line"> x = x/<span class="number">10</span>;</div><div class="line"> }</div><div class="line"> <span class="keyword">return</span> (x==sum)||(x==sum/<span class="number">10</span>);</div><div class="line"> }</div></pre></td></tr></table></figure><p>这个算法要额外考虑能被10整除的数,需要特别注意。</p><h2 id="Solution-3"><a href="#Solution-3" class="headerlink" title="Solution 3:"></a>Solution 3:</h2><figure class="highlight c++"><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><div class="line">22</div><div class="line">23</div><div class="line">24</div></pre></td><td class="code"><pre><div class="line"><span class="function"><span class="keyword">bool</span> <span class="title">isPalindrome</span><span class="params">(<span class="keyword">int</span> x)</span> </span>{</div><div class="line"> <span class="comment">//negative number</span></div><div class="line"> <span class="keyword">if</span>(x < <span class="number">0</span>)</div><div class="line"> <span class="keyword">return</span> <span class="literal">false</span>;</div><div class="line"> </div><div class="line"> <span class="keyword">int</span> len = <span class="number">1</span>;</div><div class="line"> <span class="keyword">while</span>(x / len >= <span class="number">10</span>)</div><div class="line"> len *= <span class="number">10</span>;</div><div class="line"> </div><div class="line"> <span class="keyword">while</span>(x > <span class="number">0</span>) { </div><div class="line"> <span class="comment">//get the head and tail number</span></div><div class="line"> <span class="keyword">int</span> left = x / len;</div><div class="line"> <span class="keyword">int</span> right = x % <span class="number">10</span>;</div><div class="line"> </div><div class="line"> <span class="keyword">if</span>(left != right)</div><div class="line"> <span class="keyword">return</span> <span class="literal">false</span>;</div><div class="line"> <span class="keyword">else</span>{</div><div class="line"> <span class="comment">//remove the head and tail number</span></div><div class="line"> x = (x % len) / <span class="number">10</span>;</div><div class="line"> len /= <span class="number">100</span>;</div><div class="line"> }</div><div class="line"> } </div><div class="line"> <span class="keyword">return</span> <span class="literal">true</span>;</div><div class="line"> }</div></pre></td></tr></table></figure><p>解题思路: 每次提取头尾两个数,判断它们是否相等,判断后去掉头尾两个数。</p>]]></content>
<summary type="html">
<h1 id="Description"><a href="#Description" class="headerlink" title="Description:"></a>Description:</h1><p>Determine whether an integer is a palindrome. Do this without extra space.</p>
<p>这道题目实现并不难,但题目要求空间复杂度为O(1), 有一定的技巧性。</p>
<h1 id="Solutions"><a href="#Solutions" class="headerlink" title="Solutions:"></a>Solutions:</h1><h2 id="Solution-1"><a href="#Solution-1" class="headerlink" title="Solution 1:"></a>Solution 1:</h2><figure class="highlight c++"><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></pre></td><td class="code"><pre><div class="line"><span class="function"><span class="keyword">public</span> boolean <span class="title">isPalindrome</span><span class="params">(<span class="keyword">int</span> x)</span> </span>&#123;</div><div class="line"> <span class="keyword">int</span> palindromeX = <span class="number">0</span>;</div><div class="line"> <span class="keyword">int</span> inputX = x;</div><div class="line"> <span class="keyword">while</span>(x&gt;<span class="number">0</span>)&#123;</div><div class="line"> palindromeX = palindromeX*<span class="number">10</span> + (x % <span class="number">10</span>);</div><div class="line"> x = x/<span class="number">10</span>;</div><div class="line"> &#125;</div><div class="line"> <span class="keyword">return</span> palindromeX==inputX; </div><div class="line"> &#125;</div></pre></td></tr></table></figure>
<p>受到LeetCode 7.Reverse Integer 的启发,将原int型的数据完全反转后,比较反转后的数据与原数据是否相同,相同则为回文,反之不是。</p>
</summary>
</entry>
</feed>