-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsearch.xml
330 lines (156 loc) · 557 KB
/
search.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
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>Paper-Reading-Notes</title>
<link href="/2023/10/23/Paper-Reading-Notes/"/>
<url>/2023/10/23/Paper-Reading-Notes/</url>
<content type="html"><![CDATA[<h1 id="research-paper-notes">Research-paper-notes</h1><p>zwm的论文阅读笔记,聚焦于recommender systems, educational data mining, reinforcement learning. 笔记顺序按阅读的时间顺序记录。</p><h2 id="towards-open-world-recommendation-with-knowledge-augmentation-from-large-language-models">Towards Open-World Recommendation with Knowledge Augmentation from Large Language Models</h2><p>这是实验室学长姐在2023年初发表的文章,也是一个best paper。这篇文章主要聚焦于利用LLM的universal open-world knowledge来辅助进行推荐,是模型无关的。框架叫KAR,从LLMs获取两类外部知识:关于用户偏好的推理知识和关于项目的事实性知识。</p><p>KAR主要分为三个阶段:</p><ul><li>knowledge reasoning and generation,主要是怎么由数据集产生两方面的知识</li><li>knowledge adaptation,主要是如何对产生的知识进行encoding和alignment</li><li>knowledge utilization,将augmented vectors与现有推荐模型结合</li></ul><p><img lazyload src="/images/loading.svg" data-src="kar1.png" alt="kar-1"></p><p>这篇文章我主要要学习的是adaptation模块,这边分为两个部分:knowledge encoder和hybrid-expert adaptor。knowledge encoder很好理解,我也实现了用大语言模型抽取隐层。后者使用了一个MoE模块,聚合不同方面的知识(<strong>what does the “experts” represent here</strong>)</p><p><img lazyload src="/images/loading.svg" data-src="kar2.png" alt="kar-2"></p><p>对于如何应用进CTR模型,直接将这些增广向量作为额外的输入特征,允许它们显式地与其他类别特征进行交互。</p><p>我觉得这篇文章的壁垒主要在于太贵了,如果生成文本的阶段都用gpt去生成那费用恐怖如斯,但是又不知道一般的13B大模型能不能有与之媲美的生成效果。针对用户情况和题目情况分别生成文本时可借鉴的,两段文本的表征进行聚合后如何嵌入CDM模型也是需要思考的。</p><h2 id="towards-universal-sequence-representation-learning-for-recommender-systems">Towards Universal Sequence Representation Learning for Recommender Systems</h2><p>这是人大和阿里发表的一篇文章,提出了还算有名的UniSRec,也是利用项目的关联描述文本来学习跨不同场景的可迁移表示。其实我不太懂这里cross-domain和transfer learning的东西,只是想看一下这篇文章是如何将文本利用起来的。</p><p>这篇文章主要通过两方面的学习:</p><ul><li>通用商品表征:通过对商品的文本进行BERT编码得到对应的表征;为了得到同性语义并且环节不同域之间的语义差异,作者提出带参数的白话特征进行变换,用MoE的方法进行处理</li><li>通用序列表征:通过Transformer对序列进行编码,为了缓解不同域中的行为序列的反应的行为模式的差异性,以及缓解跷跷板问题。对比学习构建序列-商品对比任务和序列序列对比任务捕获相关性。</li></ul><p><img lazyload src="/images/loading.svg" data-src="unisrec1.png" alt="unisrec-1"></p><p>一些没见过的点:</p><ul><li><p>参数白化进行语义转换:BERT为一般文本引入了非平滑的各向异性语义空间。于是用线性变换变换原始BERT表征。</p></li><li><p>通过MoE进行域融合和适应:为一个商品学习多个白化embedding,利用这些embedding的自适应组合作为通用商品表征。</p></li><li><p>sequence-item对比学习:对于给定的序列,采用跨域商品作为负样本。这里s是指序列,v是指应该的下一个商品。B的batch是来自不同域的。</p><p><img lazyload src="/images/loading.svg" data-src="unisrec2.png" alt="unisrec-2"></p></li><li><p>相比较而言,sequence-sequence用的就是老套路了,增强序列与其他序列进行对比:</p><p><img lazyload src="/images/loading.svg" data-src="unisrec3.png" alt="unisrec-3"></p></li></ul><p>这篇文章主要是针对跨域的序列预测,这边用了对比学习的方法去分别对sequence和item操作,感觉可以借鉴到KT上,主要还是结合text先进行adaptation。其实这个方法好像挺common的。</p><h2 id="text-is-all-you-need-learning-language-representations-for-sequential-recommendation">Text Is All You Need: Learning Language Representations for Sequential Recommendation</h2><p>这篇文章也是讲序列预测的,是lqy学长在组会分享过的一篇文章。这篇文章也是利用了文本,将每个item整理成一个sentence,将item sequence formulate成一个sequence of sentences。这篇文章提出的框架叫做<strong>RECFORMER</strong>。</p><p>像这种用文本的motivation好像都提了如果基于ID就不能用于跨域推荐和场景的迁移。具体的做法是将物品表示为键值属性对,可以包含各个方面的文本信息,用Longformer对序列进行编码。</p><p>对于item i,它的sentence可以表示为$T_i={k_1, v_1, k_2, v_2,\cdots,k_m,v_m}$</p><p>model input 表示为$X={[CLS],T_n, T_{n-1}, \cdots,T_1}$</p><p>它这里embedding分为四个,先看图:</p><p><img lazyload src="/images/loading.svg" data-src="recformer1.png" alt="recformer"></p><ul><li>Token Embedding:表征对应的token,商品属性中文字token对应的embedding,这样就脱离了商品ID的embedding了</li><li>Token Position Embedding:表征token在序列中的位置</li><li>Token type Embedding:表征token的类型,有三种,分别是CLS,key,和value</li><li>Item Position Embedding:表征商品在序列中的位置</li></ul><p>对于给定序列中的一个word w,表征表示为$E_w = LayerNorm(A_w+B_w+C_w+D_w)$</p><p>序列表征表示为$E_X=[E_{[CLS]},E_{w_1},\cdots,E_{w_l}]$</p><p>Recformer计算d维单词表征的方式$[h_{CLS},h_{w_1},\cdots,h_{w_l}]=Longformer(E_X)$</p><p>如果对于单个商品,那么就构造sentence$X= {[CLS], T_i}$得到商品表征$h_i$</p><p>那么就用余弦相似性来预测下一个商品(序列和item)</p><p>我们关注这个框架的学习模式,要学习哪些参数,固定哪些东西。</p><ul><li><p>首先是预训练:</p><ul><li>Masked Language Modeling(MLM)</li><li>item-item对比学习。使用真实的下一个交互item作为正样本。负样本采用当前batch其他序列中对应的真实的下一个交互item。</li></ul></li><li><p>两阶段微调。保持一个商品特征矩阵,<strong>这个矩阵是从Recformer中编码得到的</strong>。</p><p>阶段1中每个epoch会把item进行编码,更新矩阵,相当于重新encode,模型和矩阵都会更新;</p><p>阶段2中冻结特征矩阵,更新模型中的参数。</p></li></ul><h2 id="ctrl-connect-collaborative-and-language-model-for-ctr-prediction">CTRL: Connect Collaborative and Language Model for CTR Prediction</h2><p>这是华为的一个工作,表格数据和转换后的文本被视作两种不同的模态,分别输入到协同CTR模型和预训练语言模型中。主要的工作就在于一个对齐,然后对CTR模型进行微调。相当于是找一个对齐的东西辅助tune CTR模型。<strong>在线推理时,只用轻量级微调后的CTR模型。</strong></p><p><img lazyload src="/images/loading.svg" data-src="ctrl1.png" alt="ctrl1"></p><p>他这里好像没有具体写用什么方法进行text的embedding,应该就是可以直接用LLM做一个抽取表征。两边的模型分别得到抽取的特征:<br>$$<br>h^{tab}=M_{col}(x^{tab})W^{tab}+b^{tab}<br>\<br>h^{text}=M_{sem}(x^{text})W^{text}+b^{text}<br>$$<br>这边就是应用contrastive learning的方法分别对text和tab两边的数据用loss。For example,$L^{text2tab}=-\frac{1}{N}\sum\limits_{k=1}^Nlos\frac{exp(sim(h_k^{text},h_k^{tab})/\tau)}{\sum\limits_{j=1}^Nexp(sim(h_k^{text},h_j^{tab})/\tau)}$</p><p>这边其实提到了fine-grained对齐,也就是加一层W和b。</p><p>最后的finetune其实就是仅仅用CTR模型。</p><p>这篇文章好像构思不算复杂,其实就是应用了一个对齐,然后只tune一边,利用语言模型这边去辅助调整一下CTR模型。这个思路如果应用于CDM的话应该实现起来是不难的,就是改变一下训练的模式,以及加入对比学习(抽取隐层已经写好了)。但是这篇文章的代码还没有开源(</p><h2 id="rella-retrieval-enhanced-large-language-models-for-lifelong-sequential-behavior-comprehension-in-recommendation">ReLLa: Retrieval-enhanced Large Language Models for Lifelong Sequential Behavior Comprehension in Recommendation</h2><p>同学的paper,听学长说做的很有效果,于是也拜读一下。这篇文章主要是用了retrieval的方法去直接应用大模型进行推理,然后如果用few-shot的话就是选取一部分训练语料这样去构建训练数据然后tune大模型(这里用的是vicuna-13B)</p><p>我觉得首先需要学习的是这篇文章对于prompt的设计,从而让大模型直接去推理对于一个物品,是否会点击。(之前竟然没看过这样用大模型去做ctr的,是我孤陋寡闻了)</p><p><img lazyload src="/images/loading.svg" data-src="rella1.png" alt="rella1"></p><p>这里相当于把一个人相关的浏览信息连接了一下,并且附上他的喜好,然后让大模型去推理需要预测的电影,让它直接输出结果。</p><p>然后这篇文章的主要工作就是如何进行retrieval,用文本表示。这里采用的方法就是提前对题目的信息用大模型进行encoding,然后从隐层抽取表征,用PCA降维得到一堆向量。之后检索的时候就直接用余弦相似度去减索了,然后拼接成prompt。</p><p><img lazyload src="/images/loading.svg" data-src="rella2.png" alt="rella2"></p><p>这篇文章还提到了可以将recent和semantically similar的进行混合,可以更好预测,这都是后面的trick了,可以不管。</p><p>还有一个点在于,这篇文章提到了few-shot,在这里few-shot的意思是选取N个这样的prompt(即(x,y)对)来tune大模型,从而让大模型更好地去做预测,效果是出乎意料的好,可以击败原来full shot的performance.</p><p>总而言之,这篇文章好像没有什么框架上的创新点,主要就是在于prompt engineering,用了retrieval的方法去构建prompt让大模型直接去预测。但是如果用在教育上,其实教育的数据是否能支撑这样的方法其实是未知的,文本信息毕竟不如推荐的丰富。</p><h2 id="llm-rec-personalized-recommendation-via-prompting-large-language-models">LLM-Rec: Personalized Recommendation via Prompting Large Language Models</h2><p>这篇文章的核心也是用LLM来做prompt engineering来产生augmented text。主要还是看下作者是如何用LLM去产生prompt的。</p><p><img lazyload src="/images/loading.svg" data-src="llmrec1.png" alt="llmrec1"></p><p>这边需要注意的是engagement-guided prompting,这边会通过寻找几个相似的item,然后总结他们的共性。然后结合recommendation的prompting产生最终的model output作为增强文本。这大概就是本篇工作最核心的东西了。</p><p>这篇文章的encoder采用的是sentence-BERT,倒是用过;但是这边值得注意的是,选取相似的item这边并不是通过简单的semantic的方式,而是用importance measurement,具体是采用Personalized PageRank score的方式来做的,这个倒是没见过。</p><p>这里的user embedding采用128维的向量,然后item侧则把增强向量和原始的向量拼接然后经过MLP最后得到128维度。最后加入baseline,这里采用的是DCN-V2的模型。</p><p><img lazyload src="/images/loading.svg" data-src="llmrec2.png" alt="llmrec2"></p><p>这大概就是整个的框架。这篇文章和先前看的KAR是有一定的相似之处的同样是模型无关的,核心在于prompt engineering,但是好像这个工作更加简单,直接连结过MLP就行了,其实感觉是有点草率的。</p>]]></content>
<tags>
<tag> Notes </tag>
</tags>
</entry>
<entry>
<title>大三下总结与夏令营回忆</title>
<link href="/2023/08/16/%E5%A4%A7%E4%B8%89%E4%B8%8B%E6%80%BB%E7%BB%93%E4%B8%8E%E5%A4%8F%E4%BB%A4%E8%90%A5%E5%9B%9E%E5%BF%86/"/>
<url>/2023/08/16/%E5%A4%A7%E4%B8%89%E4%B8%8B%E6%80%BB%E7%BB%93%E4%B8%8E%E5%A4%8F%E4%BB%A4%E8%90%A5%E5%9B%9E%E5%BF%86/</url>
<content type="html"><![CDATA[<h1 id="大三下总结与夏令营回忆">大三下总结与夏令营回忆</h1><p>三年之期,此诚危急存亡之秋也。大三以来,我便把自己的规划定在了本校直研上:出国,还是觉得成本太高了,虽然我觉得出国非常香,但是我还是不想给家庭带来比较重的负担;工作,感觉今年也是就业的低谷,从这样的写报告专业出来真的很难说能不能找到什么工作;考研,必不可能了,保不上我也会选择出国。于是便走保研这一条路了,也是最按部就班的路。前五学期最终的排名是14/108,虽然给计网硬生生拖下来三名,但是保本校还是绰绰有余,清北就别想了,想想,保研其实选择面也比较狭窄。</p><h2 id="进组">进组</h2><p>其实这本来是我计划在上学期完成的事情,但是由于分手导致我整整停滞了一个月,最终整个学期都在补债。寒假经过多方了解,准备报张伟楠老师的APEX实验室,做数据挖掘的方向,但其实当时的我对数据挖掘并没有什么概念。一开楼就来了学校,整栋楼当时也没几个人,每天去包图看李沐的d2l动手学深度学习。在2月10号中午鼓起勇气给zwn老师发了邮件,并附上了自己的微信号和简历。惊喜地发现下午四点他加我的微信了,并约我五点打电话聊。他也没有对我进行面试,只是和我介绍了方向便好像就默许我进入了实验室的DM组。</p><p>进组以后就没信了,我也是正常开学。开学那周和室友迷上了桌游《风声》,每天晚上十点回来风声,倒也是挺有意思的。<strong>每周二晚上开始和同学去听DM组里的论文分享会</strong>,一开始去直接是战战兢兢一头雾水,只是为现场增添一个人头,每次我都会惊叹,这些学长学姐真的好厉害。第三周我才和组长ljh对接上,他给我安派了“三步走”战略,但由于我的<strong>计算理论重考</strong>,却也稍稍搁置了一个月。重考真的给这学期的开头带来了不小的压力,因为计算理论真的学不会(这是可以说的吗),最后3月8号的考试也是奇难无比(本科第二难的考试,第一难是计组),不过好在平稳度过了,88分,尚且看得过去。就在我准备好好阅读ljh学长推荐的《深度学习推荐系统》时,组长突然给我对接了一位学姐,让我去做<strong>CAT(计算机自适应测试)<strong>的课题,其实是属于</strong>教育数据挖掘</strong>的领域。我一开始还想说,考虑考虑,但是转念一想,哪轮得到我来考虑啊,老师给饭吃就已经不错了,于是赶紧去和学姐交接了。第二天的晚上就安排了一次1v1的腾讯会议,学姐跟我介绍了CAT的课题,以及现在课题的情况,我自然是听得一头雾水,同时她也给我布置了我的“养成任务”,比如看李沐的论文阅读和CAT相关领域的代码。刚进组的我自然是想要好好表现一番,争取能够有所作为,于是也积极响应着学姐,但是这样子以来,我立即感觉到强度上来了。每周有两到三次腾讯会议交流(或者是图书馆线下交流),还有周二的DM组分享会和周四的教育组分享会,一开始的我确实是有点手忙脚乱,但是想想夏令营要讲什么,我还是非常努力地去按照学姐的指示做了。我也用课余时间学了元学习和强化学习的相关内容(<strong>真正进组才发现这个时候学习的速度比自己慢慢计划看要快得多</strong>),看了强化学习的论文像看天书一般,每一次汇报交流之前我都非常焦虑,以至于周日我一直拖到汇报完再吃晚饭,长舒一口气——一周的休息时间感觉就只有周日晚上的那几个小时呐。</p><h2 id="鏖战">鏖战</h2><p>这学期是课最少的一学期,但却是最忙碌最焦虑的一学期,因为紧接着这学期的,便是决定你命运的夏令营。虽然嘴上说着机考是一刀切,但是我还是把大部分时间花在了项目上,毕竟对学姐要尽心尽力。</p><p>这学期的前半学期我最担心的其实是,能不能留在APEX读研?毕竟我进组是相对比较迟的了,而且APEX也是交大的AI顶尖实验室,人才济济。思想斗争了快半个学期,也和学长了解了情况,终于在4月中旬我开始向导师出击了(<strong>别学我,这个时候真的已经迟了</strong>)。而zwn老师也是日理万机,但偏偏我真的很幸运,他那天在学校里陪他的家人散步,刚好我给他发消息,他便要我去线下面谈,这也是我和导师第一次的交流。他给我解答了很多我担心的点,并且跟我聊了实验室可能的科研方向和趋势,强调了大模型这个方向。我也问了他名额的情况,想在他这边读研,好巧不巧,如果按去年的名额数量的话,<strong>刚好是最后一个名额,且还不能保证</strong>。但是也算是先占个坑,后面就尽人事听天命了,悬着的大石头算是先放着了。(后来五月底在报名夏令营之前我又和他确认了一遍,他说的比较隐晦,但好像默许我通过夏令营就可以留在APEX了)</p><p>其实一直说着放弃课内,却一直都没有完全放弃。平时的小作业还是会比较认真地做完,偶尔有实在卡壳的也非常感谢铮铮大爹的指导。两门工科创都和驰先生组队了(专业第一的他甚至愿意主动和我组队,我真的哭死),其中一门也是和铮铮一起,所以两门工科创其实心里大概是有底的。Prof S.B. 的工科创我们最终做了医疗影像——视网膜图片分类。其实是个不难的任务,一开始驰先生写了哥ResNet草稿,然后我搭建框架跑通,发现已经干过上学期zjm的"baseline"了,但是后来发现被神秘的“team2”超了,于是我们五一假期的末尾紧急聚头,用augmentation和其他模型往上刷,终于又刷到第一,再后来铮铮神之一手提出ensemble和pseudo label,直接<strong>干到全球第一</strong>!;另一门工科创推进更加艰难一些,可怜我与Jeston Nano周旋甚久,配置环境配置了两周,终于在5月底的某个夜晚在学创C200和驰先生搞出了demo,当时真的是快喜极而泣了,感觉这学期要活了(其实最棘手的问题都还是驰先生解决的,抱紧大腿www)。课内比较刺激的就是这两个工科创了,至于数据科学和机器学习,基本是保持一贯方针——<strong>平时划水,期末补天</strong>。</p><p>5月份强度骤升,不仅因为课内的大作业小作业强度上来了,更直接的原因是学姐直接让我接管了现在正准备投稿的项目的主体实验。深知责任重大,然而水平太差,花了大半个五一假期在图书馆阅读学姐的代码,才终于略懂一二。后面便是漫长的跑实验环节,一开始倒还顺利,但是到了换数据集和跑meta的baseline的时候,状况百出,各种我从未见过的报错,每次一报错我都感觉天要塌了。因为是准备投月底的CIKM的稿,所以时间是非常紧张的。报错的实验一度让我精神崩溃,再加上每周周四早上加了和华为的例会要汇报,更是让我压力山大。转机在于另一位师姐的加入,很热心地帮我们解决了很多棘手的问题,我也得以在最后几天匆忙跑出实验的结果。5月底的几天真的如同噩梦,各种大作业交织,还得关心着同时跑的几十个实验,但结果是好的,也多亏了学姐最后奋力肝锅,最终在截稿前10分钟投出了我们的作品(最新战报from August:被拒了)。</p><p>就这样高强度了大半个学期,还没来得及喘息,便来到了期末。期末我是必不能放松的,毕竟两门课我是几乎没怎么学,想想上学期计组的惨案,还是要奋力冲刺一下。这学期的期末根据地定在了主图三楼的走廊,靠近厕所的“张炜”位子,倒也是有点缘分。投稿完,距离第一门数据科学其实就只有3天了,好在我提前两周很草率地过了第一轮,这三天我就比较耐心的看了第二轮,虽然很多东西都是囫囵吞枣,但是在铮铮的抽查中感觉尚可,毕竟我也不知道考试形式。Newly强调,ppt中的内容会考得事无巨细,考前没有get到这句话,但是在考场上,真的有一题我完全没有印象,于是十分拱手相让,最后数据科学喜提90分。机器学习则是更让人头疼,因为涂涂平时讲得真的太难了,虽然有一星期的时间,但是我看回放就看了一大半时间,却仍然有很多不理解的地方。这个时候是6月10号前后,距离机考还有20天左右的时间,我一道题目还没有刷,且考完试还有机器学习的大作业要三天速成,当时的我心理状态也难以言说。准备了个六七成就上了考场,自然是有题目没做出来,但是掐指一算,大概也能到90,也尚可啦(最后91)。大作业是和铮铮和廖神组队的,真的神仙队友,稳稳当当地完成了大作业,并提前一天提交。ddl的晚上,我们去王子公主唱了一次KTV,也算是难得的放松。</p><p>下面,真正的决战,才刚刚开始。</p><h2 id="最后的冲刺">最后的冲刺</h2><p>时间线来到6月17日,此时距离夏令营还有两个星期出头的时间,我第一次翻开了《王道考研机试指南》,其实当时是非常惶恐的,没想到时间挥霍着挥霍着就还剩这么屈指可数的天数了。我决定从这本王道考研入手,把基本的题型和技巧都过个手熟,比如<strong>并查集</strong>啊什么的,每天再练几个书后的练习题,准备第一周如此,第二周就开始刷题模式,leetcode和牛客都可。但是其实前几天我上手是比较慢的,当初和风流倜傥jcg豪言壮志说一天十题,其实一开始根本达不到这样的速度,每天也只能做三五题,而且也不是真的自己做,很多都是要看一眼题解才能自己慢慢扒拉出来。</p><p>这段时间自己一直在主图B400的多媒体座位,用他的键盘和显示器,当时以为是台式机考试,后来发现这种浪费效率的“模拟”其实根本没有必要。这段时间大多还是和铮铮一起的,他从期末周就已经开始刷leetcode了,进度远远领先于我,我感觉压力很大。大概花了一个星期才把王道考研上面的基本内容全过完一遍。但记得多少,我心里其实虚的一。</p><p>复旦夏令营的初审通过了,但是时间非常尴尬,6.26-6.29四天,且每天都有安排要去现场。其实我本意并不想去复旦的计算机的,只是想体验一下机考的感觉,甚至连面试也不想去,因为外校嘛,肯定把你怼死里问,我的脆弱心灵受不住。真正到了25号26号的节骨眼上,我已经紧张地没心思跋涉整个上海去复旦了,遂决定鸽了复旦专心准备交大的机考。铮铮26号去河南社会实践,我于是转移主阵地去了包图三楼,和sr、mx、zh他们一起备考了。mx准备得极其认真,一上来就看见他在硬啃leetcode上hard的dp题,给我看得瑟瑟发抖,但是我还是按我自己的节奏做着铮铮丢给我的75题题单,有很多简单题,也就做着找找信心,就这样我其实也只能保持着一天七八题的速度。也是26号当天,交大初审出来了,顺理成章地过掉了,但是计算机系夏令营的时间却让我大惊失色:**5号机考,3号面试!面试甚至在机考之前!**这个设定打破了我之前的许多设想,本来想考完机考再准备面试,现在反而要先抽出准备机考的时间准备面试了。</p><p>27号开始,就着那个75题题单狠狠刷了一些搜索的题目,bfs/dfs,之前对这类题目完全望而却步,但是在这种节骨眼上,当然不能睁一只眼闭一只眼了,也是硬着头皮慢慢去感悟这种搜索题怎么做。做这种题的效率明显慢了下来,因为对于我这种小白来说,搜索非常陌生,每次只能过一点点样例,要debug好长时间才能过大部分点或者AC。我相信刷搜索是有好处的,至少如果考一些魔幻的dp我做不出来,也可以用dfs苟延残喘一下。</p><p>28日高中同学子仪来了交大参加外院的夏令营,请她喝了杯小眷村,但是那天我完全没有心思跟她聊很多,因为晚上19点就是机考的宣讲了。提前十分钟坐定在图书馆的座位上等待着宣讲的开始。这十分钟可能是我整个夏令营备考期间最紧张的时刻之一,不知道为什么,就有着一种给你宣判死刑如何执行的感觉,让人头皮发麻坐立不安。cyt老师用他别具一格的口音为我们介绍了机考的规则,我惊奇地发现里面竟然有几个外系的熟人,以及大部分是不认识的,就给人一种高手云集的感觉。**今年竞争十分激烈,一共过了140个人,大概一半外校一半本校(包括cs,ai,ieee,acm班,还有外系同学),据说收到的来自全国的报名里面,有150个专业第一。。。**直听得我心里一抽一抽的。今年与去年不同,是3道题,综合去年线上和往年线下的考法,在机房用在线评测的方式进行考核,平台就是我们熟悉的Educoder。**最搞人心态的其实是机考的限时,第一题限30分钟,第二题限40分钟,第三题限70分钟,第一题是“如果水平不是很差都能够做出来”的难度,第二题第三题难度依次递增,实打实按过的样例换算机考成绩。**当时就觉得很绝望,绝望之中就意识到,自己所有的命运其实就决定于你13:30-14:00的那个第一题能不能做出来。听完宣讲感觉整个人像被定在椅子上一样,像是等待着几天后命运的审判。</p><p>29号开始,我放弃了leetcode的刷题(过不了全部用例真的很让人绝望),开始转向牛客网,开刷一个题集,叫“上海交通大学往年考研复试上机题”,一开始做了几题,感觉非常送分,如果第一题是这个难度其实倒也不用这么紧张,但是后来做着做着发现其实除了那几个送分的,其他的题目却是相当地难搞,比如手写计算器,高精,需要处理繁琐输入输出的搜索等等。我也把题单发给和我一起备考的兄弟们一起做了,铮铮比较强一点,做出来的题目比较多,剩下的我们似乎都是差不多水平,这样模拟下来,感觉心里掂量着自己大概是1题-1题半的水平。</p><p>我和铮铮是最紧张的,其他几个倒是看起来比较淡定。当时我们一起吃饭,铮铮问我们,如果再选一次,你选直博还是直硕。他们都想选直博,就免了机考的痛苦了,点击即送他不香吗?但是我还是会选择直硕,宁愿做败者,也不愿做赌狗。就这样,很快就来到了7月份(复旦就这样不知不觉被我鸽穿了)</p><p>7月1号开始准备面试了,因为我是3号早上第一批。其实一开始并没有什么思路,我写了中英文分别的自我介绍,并且写了英文介绍各个项目的稿子,然后不停地在脑海里过可能问我的问题。这算得上是大学以来,甚至是我这辈子参加的第一次正式的面试,说不紧张那是假的,虽然我极力安慰自己会偏袒本校的学生。很紧张,在1号和2号吃完晚饭都和铮铮在思源湖散步散了一圈,想想之前中考高考也有这种大考前散步的习惯,不禁感慨万千。2号晚上去打印了材料,和hqg借了西裤,晚上早早回到了寝室(第一次没有去联楼呆到十一点半)。回来让我的室友们给我模拟了一遍面试,我全程用英文对答如流,心里才有了一些底。</p><p>于是,就迎来了念叨了两年的夏令营。</p><h2 id="夏令营">夏令营</h2><p>3号起了个大早,神清气爽,提前50分钟就来到了面试休息室东中院,也是第一个就见到了面试的顺序,<strong>竟然是直博和直硕混起来面的</strong>。我在隔壁小教室的第四个,感觉顺序尚可,但前面有两个都是APEX实验室直博选手,让我有些压迫感。人逐渐多了起来,我和ln搭了几句话——他也比较紧张。很快第一批选手就进去了,休息室里也逐渐安静了下来,大家都在紧张地看着自己的面试材料,做着最后的准备。时间过的很快,一会儿就有人回来了,我们这边的果酱楷哥哥第一时间就跟我们分享了见闻,总体蛮友好,但他们那个房间会问基础知识,属实把我吓得不轻。越来越紧张的我去面试考场门口溜达,也碰见了我考场第一个出来的,直接化身社牛和他讨教了一波,他说非常轻松,没有问基础知识,我倒也稍稍放松了些。</p><p>正交谈着,第二个选手出来了,结果找了一圈,第三个选手不在现场!我大呼不好,赶紧跑回去拿上我的材料,就很匆忙地进入了考场。面试的老师我只认识一个,是教我问题求解的胖老师。我进去就满面春风地给老师们点头哈腰发材料,老师们也跟我笑笑,之后便低头翻阅我的材料。中文自我介绍,英文介绍项目,和我预想的一模一样。只是这个完了之后话题逐渐跑偏,老师们莫名其妙对我的成绩单感兴趣了,问了许多奇怪的问题比如“你寄网为什么这么低”云云。闲聊我在行啊,于是非常愉悦地结束了本场面试,出考场感到莫大的轻松,虽然和我预想的大差不差,但是还是比较愉悦。在休息室里,南大同时给我和铮铮打了电话,我甚至都没接(南大对不起),铮铮放弃了南大的考核。于是,我们真的就只有本校这一条路了。</p><p>大家的面试似乎都还比较顺利,可见交大cs夏令营的面试总体来说还是比较友好的,除了可怜的mx的神级对话“你为什么退了计网”+“你相对于你前面几个同学有什么优势”+“你能吃苦吗”+“你能吃苦为什么退了计网”。中午用餐券在五餐吃了小龙虾,虽然很丰盛但不太好吃。中午回去睡了一觉,起身要面对最后的考验——机考了。</p><p>说实话,其实时间也不太够了,3号我就把考研机试真题题单又过了一遍,没做的继续做完了,越做越焦虑,因为真的就只剩下这一条路了,面试感觉尚可,可不能被机试拖了后腿啊。4号我最终决定,再过一遍王道考研书上的图论题目,放弃了刷dp——遇到dp,就算我倒霉吧。4号晚上紧张的一,根本已经做不下去题目了,和去年APEX的学长聊,和风流倜傥jcg聊,和身边的战友聊,都不能缓解紧张的心情。早点回去了,中午考试,精神状态最重要。</p><p>早上本来准备自己悄咪咪去东下再背背快速幂并查集什么的,结果路上被铮铮逮个正着,于是只得和他一起去东下。找了个小教室,看了会书,铮铮给我找了条巨简单的题目,我俩迅速秒了,苦笑:要是下午也是这个难度就好了。中午去五餐吃了猪肚鸡,吃了半碗,没胃口,便直接前往了最后的战场——电院四号楼。</p><p>见到了很多熟人,我在最大的那个考场,有将近90个人,每人一台笔记本电脑。一开始以为是随便坐,我直接坐在了第一排,防止万一身边是个AK大佬自己心态崩塌。但是后来才直到要按座位坐,一下子坐在了最后排,身边都是不认识的,我暗自叫苦,外校的都不是好惹的。13:00不到发布了热身题,是一条字符串处理,乍一看感觉做过,但其实处理起来还是很麻烦的。我先用近两天刚学的那种方法,发现根本过不了测试点,急了,赶忙又重新写最笨重的方法,终于在13:20左右AC了这道题。这道题比我预想的“第一题”的难度要高。别第一题比这个还难吧,我真的紧张起来了。我左右的大佬都很轻松过了这题,前面的一直到开考都没过,<strong>右前方的女生没做这题,一个劲地在网上搜索“最小生成树”</strong>,我暗自笑笑,怎么还有这种考前还在补知识点的人,看啥不考啥。</p><p>决定命运的半小时,我深吸一口气。拿到题目的一瞬间傻眼了,图论,且node是奇怪的字符串。我心中暗道不妙,定睛仔细一分析,像是一条最大生成树,我吃惊地想起了刚才右前方的女生,不过没时间浮想联翩了,赶紧自己就当着最大生成树做吧。这字符串恶心死我了,我第一遍的时候,输入都没处理对,直到13:50的时候我才把图都存好,还有十分钟。。。我当时就感觉非常绝望和窒息,脑子里止不住地已经在想是润坡还是润港了。但是我决定做最后的拼杀,用了一个大胆的想法,所有的东西用map存,火速打了一个map形式的并查集,脑子里拼命回忆着昨天晚上刚看的最小生成树的原理和代码。在13:58的时候我过了测试样例,心里猛地一颤,赶紧点了评测。几秒钟后,绿色的Accept跳了出来!一遍AC!我差点激动地哭出来,在最后几分钟的时间,进行了一次逆风翻盘。左边的大佬在我之前就做出来了,已经在试题纸上画画了;前面的几个同学好像都没做出来,我长舒一口气。</p><p>不一会儿第二题发布了,我一看,又tnnd是图论,而且好像是我比较熟悉的搜索题。我梳理了一下题目的脉络,发现可以过个循环用bfs直接解决,就是不知道会不会卡时间。40分钟,时间还充裕,我先按照这个思路写了,大概15分钟的时间写出了一个版本,发现过了一半,自己又仔细看了看代码,发现一个循环的位置写错了,重新提交,又是那个熟悉的Accept!我突然觉得世界明朗了,我已经可以是,交大的cs学硕了?不过第二题似乎大家大部分都做出来了,大家都是休息的休息,等待着第三题的到来。</p><p>第三题巨长,写满了整整一页A4纸,是一个具体情境的调度题,贼nm复杂。我心里有底了,随缘写,能过几个算几个。老师把这道题的时间延长到了90分钟,真的逆天。我慢慢悠悠地梳理着条件,构造着存储数据的结构,写了一个简单的堆。直接评测,欸嘿,过了2个点。又想起今天早上刚背的运算符重载,于是也写了进去,虽然半生不熟,抱着尝试的态度,魔改了自己刚才写的堆。一下子过了8个点!一共15个。这时候我身边的大佬直接潇洒AC交卷离去,好家伙,我的身边真的是一个AK佬。我又不紧不慢继续乱调试,其实这个堆写出来,我就已经不会debug了,但是在我胡改之下,最多一次过了11个点。看了看时间,16点了,想了想,直接交了。在这最重要的一次考试,也来一次提前交卷吧!</p><p>出门,站在4号楼的电梯,忽然感觉感慨万千,自己奋力鏖战的这一学期,努力的三年,似乎都在这一刻,画上了一个句号,还是比较完美的。出门发现ln也随着我出来了,他也做了两条半,第三题AC了,但第一题没做完。苦笑,第一题真的是害人不浅呐,这样看来,我真的很幸运很幸运。</p><p>往事堪堪亦澜澜,前路漫漫亦灿灿,全新的生活,即将开始。</p>]]></content>
<tags>
<tag> summary </tag>
</tags>
</entry>
<entry>
<title>大三上总结</title>
<link href="/2023/02/03/%E5%A4%A7%E4%B8%89%E4%B8%8A%E6%80%BB%E7%BB%93/"/>
<url>/2023/02/03/%E5%A4%A7%E4%B8%89%E4%B8%8A%E6%80%BB%E7%BB%93/</url>
<content type="html"><![CDATA[<h1 id="大三上学期总结与思考">大三上学期总结与思考</h1><h2 id="快乐">快乐</h2><p>这可能是这么多学期来第一次以“快乐”为开始的学期。说起来可能令人难以置信,我感觉大学最快乐的时光是大三上学期前的军训。没有学业的压力,每天和已经熟悉的同学们一起训练、活动,也认识了很多新的朋友,真的是弥足珍贵的一段时间。我的军训生活不是三点一线的疲惫的训练生活,而是很丰富多彩的。前两天和大部队一起进行了基本动作的训练,然后就感冒了,请假了三天。我试着去参与了连队政工的工作,结果发现可以大有作为,于是每天和朋友排合唱、剪视频,闲暇时摸鱼,非常地自由快乐。就这样再加上断断续续的下雨天,很快就到了最后,最后回归队列参加分列式,有始有终。</p><p>这段时间真的是很纯粹的快乐,无论是白天,还是夜晚回寝室,没有一点学习压力,和很多好朋友过着很有律动的生活,真的是一件很带感的事情。这段时间说着要补补暑假的进度,其实很多时间都摸了,看了几集李宏毅的视频,配了一些deep learning的环境学了学anaconda,就仅此而已了。开学前中秋还进行了一次说走就走的旅行,去了杭州找淏,接下来就开学了。</p><p>开学第一天学校出现阳性,上了半天课紧急封校、封楼,这是我们大家都没想到的,太戏剧性了。但是学期初的节奏非常轻松,学习之余,我教会了寝室他们掼蛋。同时也策划着国庆前后的高邮-南京计划,也计划着国庆节后联系导师进实验室入门一下科研工作——本以为快乐会延续,整个顺风顺水的学期,却发生了一件彻底改变了我一学期的事情。</p><h2 id="劫">劫</h2><p>这学期,发生了两件巨变,颠覆了前两年生活的那种,彻底颠覆了我这学期的学习生活,所以在讲学习之前,我必须先讲一讲第一件。</p><p>9月底幸福满满地计划前往南京陪伴她,一切也都顺利进行,直到十月三号的中午,一直非常正常的,她突然变脸,说想要先分开,感觉没有以前那样喜欢我了。我整个人木然,在沟通了半小时之后也只能目送她离开宾馆回学校。我当时也不会想到,这就是我最后一次见到她。那天我追着仙林大道的夕阳,沿着二号线走了好久,直到走到夜幕完全笼罩,走到筋疲力尽。</p><p>我冒着疫情和学校管控的风险想要来南京陪她,最后落得这样的结果,骤然的冷淡让我的心跌堕至谷底,在隔离期间我每天恍恍惚惚,作业也没做,导师也没联系——我付出了这么多,突如其来的这样的打击,直接把我的心理击垮了。她没说要分手,只是冷淡着却吊着我,并且经常地说我的不好,挑我的刺,一个劲地论证我达不到她男友的标准,我不适合做她的男友。</p><p>“和你一起出去会没面子。”</p><p>“你已经没有让我迷恋的资本了。”</p><p>“她的对象有一米八,你怎么说也不如他。”</p><p>这是真真切切她对我说的话,像是我两年多的付出狗屁不如,像是把我踩在地上蹂躏也不足惜一样。</p><p>她可能是忘了,她高中的时候是我一直鼓励安慰她,毫无保留地将自己的资料资源全部倾斜于她;她可能是忘了,她任何有烦心的事情,都会找我倾泻和吐槽,我再忙也会积极地回应她的情绪;她可能是忘了,怕影响她报志愿,我没敢说让她报上海的学校,最后她去了南京,但我忘不了20年我拒清来交和她聊天的那几个晚上;她可能是忘了,每次是她想我陪伴的时候,我会力排万难,从我家到她家、从上海到南京,到她的身边;她可能是忘了,我帮她做了多少条数学题,给她的生活带来了多少建议,或许是忘了,我熬大夜帮她写的一条又一条编程题,不厌其烦帮她de的一个有一个bug。她可能都忘了吧。</p><p>我都记得,但是当我想要努力回想她为我付出过什么,我真的什么也想不出来。</p><p>11月16号晚上,上海久违地下了雨,她和我提了分手——我就算卑微到了骨子里,都在托着,只等待她主动提分手。我云淡风轻地答应了。</p><p>我最痛苦的时光在于10月份我苦苦纠缠胡思乱想的她还吊着我的日子。但是真的很感谢,有朋友陪伴我:艾尔希介、王团、大太阳,他们每天陪伴我自习,让我在这样痛苦的精神状态下能够坚持下去,稳住心态不落下学习。</p><p>分手之后,我慢慢释然了,生活也步入了正轨,不再多么熬夜,计算理论也不翘课了,开始补着十月份欠下的债——一直补到了期末。这件事极大地影响了我这一学期的学习,让我把本可以较轻松的一学期过得如此艰难。这确实是我大学中的一劫,但劫数过后,所有的疮痂会变成勋章。</p><h2 id="补债">补债</h2><p>大三上学期的学习,其实大部分都是一个“补债”的姿态。第一个月过于放松,第二个月由于感情问题很大程度影响了效率。心大的我五选三环节直接选了四门专业课(人工智能、计网、计算理论和图形学),还有一门专业选修课(互联网信息抽取技术)和伦理学,还有交叉课初等数论,第一个月过后就感觉,这学期的课程压力还是不小的,虽然看起来不如大二下学期的炼狱。</p><p>简单说下几门课吧。互联网信息抽取技术是两个老师合上的,lf老师讲的非常催眠,且感觉完全学不到啥有用的,但是wr老师讲的还不错,大作业也是归wr老师负责,这门课很水,平时几乎没有什么事情,期末一个大作业。计算理论是慕名已久的龙环姐姐,我单纯是想了解一下tcs以及体验一下龙姐妹的课堂才选了这门课,龙老师讲的确实不错,深入浅出,和学生的关系也很好。计算机网络是xgt和cyc合上的,其实主要是cyc老师讲,台湾腔听的很温柔,但是中午的时间段难免会困,后期我就没有怎么听过他讲课了,反正也不签到。 计算机图形学是大名鼎鼎的Prof S.B. ,我非常识趣,自己提前在b站上看完了闫令琪,顿时拨云见日,斌斌子的课也不怎么听了。不过斌斌子的课搞心态不在课程内容,而在于极其恶心的大作业:第一次还好,是自己设计完成一个光线追踪;第二个就很诡异了,完成人脸风格迁移或者三维人体重建(这不是重型炼丹吗?压根一点都没学过)。ls老师的人工智能是全英文,但大部分都是CS188的精致重组版,ls老师其实算是上课质量比较高的了,但这学期的CDCL相关的真的是折磨了我一学期。</p><p>学期中途其实主要是图形学和人工智能的压力,以及一些计算理论和数论的小作业。图形学和xhc组队,半期的时候就要做完第一个大作业光线追踪。感谢xhc大佬没有嫌弃我十月份几乎停滞的进度和效率,虽然也狠狠被push了。真的哭死,他帮我写了大多的框架和类的实现,我只要写关键的bvh加速和多面体类的光线追踪,经过跌跌爬爬我也终于写出来了。最后的效果相当不错,感受到了被carry的感觉。但是人工智能却让我感到了隐隐的不安:第三次作业CDCL我做了一周都没能完成好,而且组队组的也比较随意,很担心期末大作业。所有的大作业都在十二月集中火力,这是一场硬仗。</p><p>好不容易熬完了十一月,却又发生了年度的另一件大事:疫情放开了。始于2020高三寒冬的那个缠绕了人们三年的疫情,终于在2022年12月彻底放开了。一放开我立刻申请回家,怕自己在学校感染了,也不知道威力如何,期末周不敢这么赌。回家前后那段时间就一直在搞图形学的三维重建了,主力还是在于xhc大佬,竟然真的把颜色网络加入了PIFuHD论文实现了PIFuHDC,我就另辟其他道路开始探究NeRF的论文,费了好大力气终于完成了一个比较新的工作HumanNeRF的工作,就算大概结束了这个大作业。紧接着开始做信息抽取的大作业,这个大作业没有图形学那么离谱,找到工作进行复现和调整改进就好了。和廖神的配合也非常紧凑,大概三天的时间,我们大概结束了这个工作。再紧接着,开始处理人工智能的大作业,在我做抽取的时候就让两个组员开始做前面的部分了,但是直到我加入,他们的进度聊胜于无。恰巧我在那两天阳了,看着他们两星期了连第一个模块都没完成好,真的心里开始着急,拖着阳了的身子照常起床工作写代码,写了一整天,帮他们俩写完了他们的部分。紧接着,我开始做我的部分,又花了一天多的时间完成了restart部分。到了这里基本部分算是完成了,但是求解速度依旧很慢,效果不是那么明显。我又debug了两三天,实在没有办法改进了,最后只能这样提交。pre的时候也是状况百出,被问住了却又是我来回答老师的提问。AI搞完继续忙着图形学的报告和伦理学的大作业。整个12月份忙得焦头烂额,压力达到了顶峰,同时全国放开人心惶惶,这真的是2022年的至暗时刻。</p><p>直到元旦过后,才真正开始处理两门课的期末考试(计算理论实在顶不住了,申请了重考)。前三天猛攻人工智能,最后惊险写完全卷,还好老师手下留情了。最后三天极限猛刷计网,买了本王道考研从头开始刷,但是这次我真的大意了,计网的内容真的太多太多了,怎么复习也还是有疏漏,虽然9号跌跌撞撞做完了全卷。这学期的成绩,多多少少还是受了这么多波波折折的影响,其他其实发挥也正常,只是一门计网83分,直接让我的排名翻倍。“<strong>开局一群4.0,结尾王炸3.3</strong>”.这个3.3让我郁闷了好久,这学期的<strong>学积分也只有90.06,已经是系四十名了</strong>,惨不忍睹。当计网计入系统的时候,我的总排名也一下掉了整整3名,从11掉到了14,真的是细思极恐。</p><h2 id="未来">未来</h2><p><strong>到了这个时间点,基本上我也只剩下保研这条道路了。</strong></p><p>上文也提到,这学期发生的种种事情,严重打乱了我的生活节奏和学习计划。本来准备国庆节后就联系导师进入实验室开始熟悉科研,但是生活给那件事情搞的一团糟,连补债都非常的艰难。所以一直到学期结束,我都没能进入实验室。在这个时间点,虽然一门计网给我重重一棒槌,但是我觉得到了这个时间点<strong>推免应该是没问题了,再摆应该也不会掉出20%</strong>。那么这时候就得盯着夏令营做准备了,夏令营考两场,一场机试一场面试。所以我分别要准备机试刷题,以及一些基本的科研经历。在寒假我依旧秉持了拖拉的坏习惯,自己继续看李宏毅而不是早早联系导师,<strong>后来发现这样拖着是极不正确的,因为只有进组了才能真正学到东西。</strong></p><p>到了大三上学期结束,真正已经到了大学生活的一个关键点了,有一个学长和我说“夏令营整个大三下用来准备都不为过”,再加上我毫无算法基础,确实应该紧迫起来了。这学期应该平时就带着刷题,然后到了机考前一个月开始极限冲刺——机考是真真切切能够一刀切你的命运的,冰冷而残酷。</p><p>下学期预期想联系APEX实验室,做数据挖掘方向,希望能够平稳地入门一下该方向的科研。</p><p>最后一个学期了,该冲刺了,该结束这罪恶的一切了。</p>]]></content>
<tags>
<tag> summary </tag>
</tags>
</entry>
<entry>
<title>Computer Graphics ICU</title>
<link href="/2022/11/02/Computer%20Graphics%20ICU/"/>
<url>/2022/11/02/Computer%20Graphics%20ICU/</url>
<content type="html"><![CDATA[<h1 id="computer-graphics-icu">Computer Graphics ICU</h1><p>计算机图形学期末笔记整理</p><h2 id="lecture_1_pipeline">Lecture_1_pipeline</h2><h3 id="rendering-pipeline">Rendering Pipeline</h3><p><img lazyload src="/images/loading.svg" data-src="1.png" alt="1"></p><ul><li><p>Pixels refers to the dots on the display. A pixel is 2-dimensional, with a (<em>x</em>, <em>y</em>) position and a RGB color value .</p></li><li><p>A fragment is 3-dimensional, with a (<em>x</em>, <em>y</em>, <em>z</em>) position. The (<em>x</em>, <em>y</em>) are aligned with the 2D pixel-grid. The z value (not grid-aligned) denotes its depth.</p></li></ul><p><img lazyload src="/images/loading.svg" data-src="2.png" alt="2"></p><p>main stages:</p><ul><li>Vertex Processing: Process and transform individual vertices and normals.</li><li>Rasterization: Convert each primitive (connected vertices) into a set of fragments. A fragment can be treated as a pixel in 3D spaces, which is aligned with the pixel grid, with attributes such as position, color, normal and texture.</li><li>Fragment Processing: Process individual fragments.</li><li>Output Merging: Combine the fragments of all primitives (in 3D space) into 2D color-pixel for the display</li></ul><h3 id="z-buffer">Z-Buffer</h3><p><img lazyload src="/images/loading.svg" data-src="3.png" alt="3"></p><p><img lazyload src="/images/loading.svg" data-src="4.png" alt="4"></p><h2 id="lecture_2_transformation">Lecture_2_transformation</h2><p>Basic 2-D transformations: refer to my hand-written notes.</p><h3 id="homogenous-coordinates-均质坐标">Homogenous Coordinates 均质坐标</h3><p>Add a third coordinate (w-coordinate)</p><p>2D point = (𝑥, 𝑦, 1) 𝑇 2D vector = (𝑥, 𝑦, 0)</p><p><img lazyload src="/images/loading.svg" data-src="5.png" alt="5"></p><p>rotate around a given point c: 先将中心点转移到原点,旋转,转换回去</p><p><img lazyload src="/images/loading.svg" data-src="6.png" alt="6"></p><p>3D Rotations——Rodrigues’ Rotation Formula:</p><p><img lazyload src="/images/loading.svg" data-src="7.png" alt="7"></p><h3 id="viewing-and-perspective">Viewing and Perspective</h3><p>viewing 观测 projection 投影 (Orthographic 正交)(Perspective 透视)</p><p>standard camera space:</p><p><img lazyload src="/images/loading.svg" data-src="8.png" alt="8"></p><p><img lazyload src="/images/loading.svg" data-src="9.png" alt="9"></p><p>How about that we always transform the camera to the origin, up at Y, look at -Z.</p><p><img lazyload src="/images/loading.svg" data-src="10.png" alt="10"></p><p><img lazyload src="/images/loading.svg" data-src="11.png" alt="11"></p><p>for orthographic projection: Looking at / along -Z is making near and far not intuitive (n > f)</p><p><img lazyload src="/images/loading.svg" data-src="13.png" alt="13"></p><p>how to do perspective projection:</p><ul><li>First “squish” the frustum into a cuboid (n -> n, f -> f) (Mpersp->ortho)</li><li>Do orthographic projection (Mortho, already known!)</li></ul><p><img lazyload src="/images/loading.svg" data-src="15.png" alt="15"></p><p>Any point on the near plane will not change.</p><p>Any point’s z on the far plane will not change.</p><p><img lazyload src="/images/loading.svg" data-src="16.png" alt="16"></p><p><img lazyload src="/images/loading.svg" data-src="18.png" alt="18"></p><p>What’s next after MVP?</p><p>Canonical Cube to Screen.</p><h2 id="lecture_3_rasterization">Lecture_3_rasterization</h2><h3 id="aliasing-and-antialiasing-走样失真">Aliasing and Antialiasing 走样?失真?</h3><p>Why triangles?</p><ul><li>Most basic polygon - Break up other polygons</li><li>Triangles have unique properties<ul><li>Guaranteed to be planar 平坦的</li><li>Well-defined interior 内部</li><li>Well-defined method for interpolating values at vertices over triangle (barycentric interpolation) 重心坐标插值</li></ul></li></ul><p>如果我们单纯用采样点判断是否点在三角形内:<strong>Jaggies!</strong> <strong>锯齿状!</strong></p><p><strong>Sampling artifacts: Jaggies, Moire patterns(摩尔纹)(skip odd rows and columns), wagon wheel illusion</strong></p><p><img lazyload src="/images/loading.svg" data-src="19.png" alt="19"></p><p>如何 Antialiasing ?</p><p><strong>Blurring (Pre-Filtering) Before Sampling</strong> 采样前的模糊处理</p><p>Note antialiased edges in rasterized triangle where pixel values take intermediate values</p><p>为什么采样不足会导致aliasing</p><p><img lazyload src="/images/loading.svg" data-src="20.png" alt="20"></p><p>filter: Getting rid of certain frequency contents</p><p>留下高频:边界 留下低频:模糊</p><p>原理?Convolution 卷积求平均</p><p><img lazyload src="/images/loading.svg" data-src="21.png" alt="21"></p><p><strong>Sampling = Repeating Frequency Contents</strong></p><h3 id="antialiasing">Antialiasing</h3><p>how to?</p><ul><li><p>increase sampling rate:</p><p>Sampling theorem——The sampling frequency has to be <strong>more than twice</strong> the maximum frequency of the signal to be sampled</p></li></ul><p>costly! may need very high resolution.</p><ul><li><p>antialiasing: filtering out high frequencies <strong>before sampling</strong>.</p></li><li><p>MSAA, multisampling antialiasing</p><p>Approximate the effect of the 1-pixel box filter by sampling</p><p>multiple locations within a pixel and averaging their values</p></li><li><p>Super sampling</p><p>Take NxN samples in each pixel. Average the NxN samples “inside” each pixel. This is the corresponding signal emitted by the display</p></li></ul><h2 id="lecture_4_illumination-amp-shading">Lecture_4_illumination & shading</h2><p>光照和着色</p><p>shading models: To describe how the object’s color should vary based on factors such as surface, orientation, view direction, and light</p><p>Gooch Shading Model</p><p><img lazyload src="/images/loading.svg" data-src="22.png" alt="22"></p><p><img lazyload src="/images/loading.svg" data-src="23.png" alt="23"></p><h3 id="light-sources">Light sources</h3><ul><li><p>directional lights 方向光</p><p><img lazyload src="/images/loading.svg" data-src="24.png" alt="24"></p></li><li><p>punctual lights 精确光</p><p>point/ omni lights 点/泛光源 spotlights 聚光灯</p><p><img lazyload src="/images/loading.svg" data-src="25.png" alt="25"></p><p><img lazyload src="/images/loading.svg" data-src="26.png" alt="26"></p></li></ul><h3 id="transparency">Transparency</h3><p><img lazyload src="/images/loading.svg" data-src="27.png" alt="27"></p><h3 id="blinn-phong-reflectance-model">Blinn-Phong Reflectance Model</h3><p>主要搞三个东西:Specular highlights 镜面高光 Diffuse reflection 漫反射 Ambient lighting 环境光</p><p><img lazyload src="/images/loading.svg" data-src="28.png" alt="28"></p><p><img lazyload src="/images/loading.svg" data-src="29.png" alt="29"></p><p><img lazyload src="/images/loading.svg" data-src="30.png" alt="30"></p><p><img lazyload src="/images/loading.svg" data-src="31.png" alt="31"></p><p>cosine power plot: increasing p narrows the reflection lobe.</p><p><img lazyload src="/images/loading.svg" data-src="32.png" alt="32"></p><p><img lazyload src="/images/loading.svg" data-src="33.png" alt="33"></p><h3 id="shading-frequencies">Shading Frequencies</h3><ul><li><p>Flat shading: triangle face is flat: one normal vector(not good for smooth surfaces)</p></li><li><p>Gouraud shading: <strong>interpolate</strong> colors from vertices across triangle</p><p><img lazyload src="/images/loading.svg" data-src="34.png" alt="34"></p></li><li><p>Phong shading: <strong>interpolate normal vectors</strong> across each triangle</p><p>compute full shading model at <strong>each pixel</strong></p></li></ul><p>phone 是最贵的模型(frequency 最大),blinn-phong 比漫反射贵</p><h3 id="recap-of-the-graphics-pipeline">Recap of the Graphics Pipeline</h3><p><img lazyload src="/images/loading.svg" data-src="35.png" alt="35"></p><h2 id="lecture_5_texturing-mapping">Lecture_5_texturing mapping</h2><p>In computer graphics, texturing is a process that takes a surface and modifies its appearance at each location using some image, function, or other data source.</p><p>In order to use textures, three steps: <strong>acquisition, texture mapping, texture filtering</strong></p><h3 id="acquisition">Acquisition</h3><ul><li><p>texture compositing 纹理合成</p><p>Synthesize a large texture from a specific sample. Obviously, this method is very popular with users. Because using this algorithm, the user only needs to provide a small sample of the image。</p><ul><li><p>pixel-based texture compositing</p><p><img lazyload src="/images/loading.svg" data-src="36.png" alt="36"></p><p><img lazyload src="/images/loading.svg" data-src="37.png" alt="37"></p><p><img lazyload src="/images/loading.svg" data-src="38.png" alt="38"></p><p><img lazyload src="/images/loading.svg" data-src="39.png" alt="39"></p><p><img lazyload src="/images/loading.svg" data-src="40.png" alt="40"></p><p><img lazyload src="/images/loading.svg" data-src="41.png" alt="41"></p><p><img lazyload src="/images/loading.svg" data-src="42.png" alt="42"></p><p><img lazyload src="/images/loading.svg" data-src="43.png" alt="43"></p><p><img lazyload src="/images/loading.svg" data-src="44.png" alt="44"></p><p><img lazyload src="/images/loading.svg" data-src="45.png" alt="45"></p></li></ul></li></ul><h3 id="texture-mapping">Texture Mapping</h3><p>Manually specify texture coordinates:</p><ul><li>Assign a texture coordinate to each vertex</li><li>Reflects a triangle in image space into object space</li></ul><p>Mesh parameterization : Construct a mapping from the 3D model to the plane domain</p><p>Conformal parameterization and area retention: Conformal parameterization requires maintaining right angles</p><h3 id="text-filtering">Text Filtering</h3><ul><li><p>Isotropic filtering 各向同性过滤</p><p><strong>Mipmapping</strong>: Constructs an image pyramid consisting of a set of prefiltered -and resampled images. These images are samples of the original image at the scales of 1/2, 1/4, 1/8, etc.</p><p>problem: <strong>over-blur !!</strong> 远处过度模糊了</p></li><li><p>Anisotropic filtering 各向异性过滤</p><p>Construct a ripmap by precomputing the filtering of each heterosexuality instead of a mipmap (multi-level texture)</p></li></ul><p><img lazyload src="/images/loading.svg" data-src="46.png" alt="46"></p><p>But what happens if the projected square covers ten times as many pixels as the original image contains (called <strong>magnifification</strong>), or if the projected square covers only a small part of the screen (<strong>minifification</strong>)?</p><p><img lazyload src="/images/loading.svg" data-src="47.png" alt="47"></p><p>texels/pixels<1 近处,一个结构包含多个像素 Magnification(blurring)</p><p>texels/pixels>1 远处,一个像素包含多个结构 Minification(mipmapping)</p><h3 id="bump-mapping">Bump Mapping</h3><p><img lazyload src="/images/loading.svg" data-src="48.png" alt="48"></p><p><img lazyload src="/images/loading.svg" data-src="49.png" alt="49"></p><p>通过改变表面的法向来改变光照着色的效果,从而实现凹凸贴图。不改变几何</p><p><img lazyload src="/images/loading.svg" data-src="50.png" alt="50"></p><p><img lazyload src="/images/loading.svg" data-src="51.png" alt="51"></p><h3 id="displacement-mapping">Displacement Mapping</h3><p>Realistically move surface points with texture maps.</p><p>Before visibility can be determined, the geometry must be shifted</p><p>Must be done at preprocessing, not hardware rendering</p><h2 id="lecture_6_shadow">Lecture_6_shadow</h2><p>Shadow is important: With the hint of the shadow, we can clearly know the position of the ball. Different shadows can correspond to different pellet positions</p><p><img lazyload src="/images/loading.svg" data-src="52.png" alt="52"></p><p><img lazyload src="/images/loading.svg" data-src="53.png" alt="53"></p><p>Hard or soft?</p><ul><li><p>Hard shadow: in a binary state, each point either in the shadow or not. This understanding corresponds to hard shadows, which are produced by point lights.</p><p>Hard shadows can give the image a rather unreal feeling.</p></li><li><p>however, under finite extent lights (usually area lights), it is often difficult to determine the umbra and penumbra regions, because this means that fan 1 needs to solve the visible relationships in 3D space. This is a very difficult question.</p></li></ul><h3 id="planar-shadow">Planar Shadow</h3><p>When the shadow of an object is projected onto a flat surface, a planar shadow is produced, and a planar shadow is one of the simplest kinds of shadows.</p><p>In the shadow projection method, objects in three-dimensional space need to be drawn twice to achieve a shadow effect. Specifically, a matrix is used to project points on the surface of the occlusion onto the plane on which the shadow needs to be calculated</p><p><img lazyload src="/images/loading.svg" data-src="54.png" alt="54"></p><p><img lazyload src="/images/loading.svg" data-src="55.png" alt="55"></p><p><img lazyload src="/images/loading.svg" data-src="56.png" alt="56"></p><p><img lazyload src="/images/loading.svg" data-src="57.png" alt="57"></p><p><img lazyload src="/images/loading.svg" data-src="58.png" alt="58"></p><p><img lazyload src="/images/loading.svg" data-src="59.png" alt="59"></p><p><img lazyload src="/images/loading.svg" data-src="60.png" alt="60"></p><p><img lazyload src="/images/loading.svg" data-src="61.png" alt="61"></p><p>if on surfaces?</p><p>To extend the calculation of the previous planar shadows to curved surfaces, a natural idea is to use the shadow image as the projective texture.</p><p>Imagine using the light source as the viewpoint: the area seen from the light source is drawn; The area that cannot be seen from the light source is the shadow</p><p><img lazyload src="/images/loading.svg" data-src="62.png" alt="62"></p><p>disadvantages: Objects cannot cast shadows onto themselves</p><h3 id="shadow-rendering-algorithm">Shadow rendering algorithm</h3><ul><li><p>Shadow volume algorithm</p><p>First, imagine a point and a triangle in three-dimensional space, connect the points to the three vertices of the triangle and extend them, <strong>resulting in a triangular pyramid derived to infinity</strong></p><p>Think of a point as a point light source, then any part of any object, <strong>as long as the top of the triangular pyramid is cut out in the following image, it belongs to the shadow area</strong></p><p><img lazyload src="/images/loading.svg" data-src="63.png" alt="63"></p><p><img lazyload src="/images/loading.svg" data-src="64.png" alt="64"></p><p>Improve: using template caching(Stencil Buffer)</p><p>The stencil buffer can store an integer value for each pixel; It differs from the depth cache z-buffer only in that the z-buffer stores a depth value in real terms.</p><p><img lazyload src="/images/loading.svg" data-src="65.png" alt="65"></p><p><img lazyload src="/images/loading.svg" data-src="66.png" alt="66"></p><p><img lazyload src="/images/loading.svg" data-src="67.png" alt="67"></p><p><strong>Advantages</strong>:</p><ul><li>First, it can be implemented using general-purpose graphics hardware, but only requires a stencil buffer.</li><li>Second, since it is <strong>not an image-based method</strong> (unlike the shadow map algorithm described below), the shadow volume calculation <strong>does not create all kinds of problems caused by sampling and resolution</strong>, so that correct and sharp shadows can be generated anywhere.</li></ul><p><strong>Inadequacy</strong>:</p><p>Since the number of polygon patches of the shadow volume is usually large, and it will cover a large number of pixels, this greatly affects the speed of the algorithm operation and the rasterization process, making the drawing efficiency low.</p></li><li><p>Shadow Map</p><p>Using the depth cache z-buffer, the distance from the light source to the nearest point in either direction can be obtained and stored in the form of an image, as shown in the figure:</p><p><img lazyload src="/images/loading.svg" data-src="68.png" alt="68"></p><p><img lazyload src="/images/loading.svg" data-src="69.png" alt="69"></p><p><img lazyload src="/images/loading.svg" data-src="70.png" alt="70"></p><p><strong>Advantage</strong>:</p><ul><li>Most hardware can directly support the shadow map algorithm for drawing shadow effects for any scene.</li><li>The shadow map algorithm is very fast, and the cost of building a shadow map is proportional to the number of rendered primitives to be drawn; When using a shadow plot for shadow drawing for any viewpoint, each pixel requires only one additional query for the shadow map and a comparison of distances, which can be done in a constant time.</li></ul><p><strong>Deficiencies</strong>:</p><p>Its drawing quality is affected by the resolution of the shadow map and the accuracy of the z-buffer’s value.</p></li></ul><p>Problems with the shadow graph algorithm:</p><ul><li><p>When the <strong>epsilon value used in distance comparison is too small</strong>, it may produce a <strong>moire pattern</strong> similar to the one below on the surface of the object</p></li><li><p>When the epsilon value used for distance comparison is <strong>too large</strong>, the shadow <strong>shape is deformed</strong> and a feeling similar to the floating of an object is created.</p><p>变形,影子浮动</p></li></ul><h2 id="lecture_7_geometry">Lecture_7_geometry</h2><p>two categories: <strong>Implicit</strong> and <strong>explicit</strong></p><p>Implicit: Level sets, Algebraic surface, Distance functions</p><p>Explicit: Point cloud, Polygon mesh, Subdivision, NURBS</p><ul><li><p>Implicit</p><p>Based on classifying points: Points satisfy some specified relationship</p><p><img lazyload src="/images/loading.svg" data-src="71.png" alt="71"></p></li><li><p>Explicit</p><p>All points are given directly or via parameter mapping</p><p><img lazyload src="/images/loading.svg" data-src="72.png" alt="72"></p></li></ul><h3 id="implicit-representations">Implicit Representations</h3><p>Constructive Solid Geometry(Implicit)</p><p><img lazyload src="/images/loading.svg" data-src="73.png" alt="73"></p><p>Distance functions(Implicit)</p><p>Instead of Booleans, gradually blend surfaces together using Distance functions:</p><p>giving minimum distance (could be signed distance) from anywhere to object.</p><p><img lazyload src="/images/loading.svg" data-src="74.png" alt="74"></p><p><img lazyload src="/images/loading.svg" data-src="75.png" alt="75"></p><p><img lazyload src="/images/loading.svg" data-src="76.png" alt="76"></p><h3 id="explicit-representations">Explicit Representations</h3><ul><li><p>Point cloud</p><p>Easiest representation: list of points (x,y,z)</p><p>Easily represent any kind of geometry</p><p>Often converted into polygon mesh</p><p>Difficult to draw in undersampled regions</p></li><li><p>Polygon Mesh 多边形网格</p><p>Store vertices & polygons (often triangles or quads)</p><p>Easier to do processing / simulation, adaptive sampling</p><p>More complicated data structures</p><p>Perhaps most common representation in graphics</p></li></ul><h3 id="bezier-curves-贝塞尔曲线">Bezier Curves 贝塞尔曲线</h3><p><img lazyload src="/images/loading.svg" data-src="77.png" alt="77"></p><p><img lazyload src="/images/loading.svg" data-src="78.png" alt="78"></p><p><img lazyload src="/images/loading.svg" data-src="79.png" alt="79"></p><p><img lazyload src="/images/loading.svg" data-src="80.png" alt="80"></p><p>Higher-Order Bezier Curves? n=10 hard to control!</p><p>Instead, <strong>chain many low-order Bezier curve.</strong></p><p>贝塞尔曲面:用曲线生成</p><p><img lazyload src="/images/loading.svg" data-src="81.png" alt="81"></p><h2 id="lecture_8_geometry_cont">Lecture_8_geometry_cont</h2><p><img lazyload src="/images/loading.svg" data-src="82.png" alt="82"></p><p><img lazyload src="/images/loading.svg" data-src="83.png" alt="83"></p><h3 id="local-mesh-operations">Local Mesh Operations</h3><p><img lazyload src="/images/loading.svg" data-src="84.png" alt="84"></p><h3 id="global-mesh-operations">Global Mesh Operations</h3><ul><li><p>Mesh subdivision(upsampling)</p><ul><li>Loop subdivision: create more triangles and tune their positions.</li></ul><p><img lazyload src="/images/loading.svg" data-src="85.png" alt="85"></p><p><img lazyload src="/images/loading.svg" data-src="86.png" alt="86"></p><ul><li>Caimull-Clark Subdivision</li></ul><p><img lazyload src="/images/loading.svg" data-src="87.png" alt="87"></p><p><img lazyload src="/images/loading.svg" data-src="88.png" alt="88"></p></li><li><p>Mesh Simplification</p><p>reduce number of mesh elements while maintaining overall shape</p><p>Collapse an edge: 把三角形坍缩成一个点</p><p><img lazyload src="/images/loading.svg" data-src="89.png" alt="89"></p><p>how much does it cost to collapse an edge?</p><p><strong>compute edge midpoint, measure quadric error</strong></p><p>choose point that minimize the quadric error</p></li></ul><h2 id="lecture_9_raytracing">Lecture_9_raytracing</h2><p>Rasterization couldn’t handle global effect well, and especially when the light bounces more than once.</p><p>Ray tracing is accurate, but is very slow.</p><p>Rasterization: real time raytracing: offline</p><p>basic:</p><p><img lazyload src="/images/loading.svg" data-src="90.png" alt="90"></p><p>pinhole camera model</p><p><img lazyload src="/images/loading.svg" data-src="91.png" alt="91"></p><p>Recursive Ray Tracing</p><p><img lazyload src="/images/loading.svg" data-src="92.png" alt="92"></p><p>递归地跟踪射线,直到到达非镜面曲面或者递归终止深度。</p><h3 id="ray-intersection">Ray Intersection</h3><p><img lazyload src="/images/loading.svg" data-src="93.png" alt="93"></p><p><img lazyload src="/images/loading.svg" data-src="94.png" alt="94"></p><p>如何判定相交?</p><p>首先计算出光线和三角形所在平面的交点,然后判断是否交点在三角形内。</p><p><strong>Barycentric coordinates 重心坐标</strong></p><p><img lazyload src="/images/loading.svg" data-src="95.png" alt="95"></p><p><img lazyload src="/images/loading.svg" data-src="96.png" alt="96"></p><p><img lazyload src="/images/loading.svg" data-src="97.png" alt="97"></p><p><strong>With polygon? 与多边形相交?</strong></p><p><img lazyload src="/images/loading.svg" data-src="98.png" alt="98"></p><p>A point on the plane is located inside a polygon, if and only if any ray from this point <strong>has an odd number of intersections with the boundary of the polygon</strong>, so the intersection detection algorithm based on this theorem is also called the parity detection algorithm.</p><p><img lazyload src="/images/loading.svg" data-src="99.png" alt="99"></p><p><img lazyload src="/images/loading.svg" data-src="100.png" alt="100"></p><p><strong>With Sphere?</strong></p><ul><li><p>Mathematical solutions:</p><p><img lazyload src="/images/loading.svg" data-src="101.png" alt="101"></p><p>There is a lot of room for improvement and speedup of the previous algebraic methods: for example, we don’t actually need to compute the second intersection that is stalled.</p></li><li><p>Geometry solutions<br><img lazyload src="/images/loading.svg" data-src="102.png" alt="102"></p><p><img lazyload src="/images/loading.svg" data-src="103.png" alt="103"></p></li></ul><p><img lazyload src="/images/loading.svg" data-src="104.png" alt="104"></p><p><img lazyload src="/images/loading.svg" data-src="105.png" alt="105"></p><p><img lazyload src="/images/loading.svg" data-src="106.png" alt="106"></p><p><img lazyload src="/images/loading.svg" data-src="107.png" alt="107"></p><p><strong>With box!</strong></p><p><img lazyload src="/images/loading.svg" data-src="108.png" alt="108"></p><p><img lazyload src="/images/loading.svg" data-src="109.png" alt="109"></p><h3 id="accelerating">Accelerating</h3><p><img lazyload src="/images/loading.svg" data-src="110.png" alt="110"></p><p><img lazyload src="/images/loading.svg" data-src="111.png" alt="111"></p><p>Uniform Spatial Partitions(Grid)</p><p>find bounding box->create grid->store each object in overlapping cells->test intersection</p><p>one cell: no speed up. too many cells: inefficiency due to extraneous grid traversal</p><p><strong>Spatial Partitions</strong></p><ul><li><p>K-D Tree</p><p><img lazyload src="/images/loading.svg" data-src="112.png" alt="112"></p><p>每次换一个轴进行partion,遍历的时候沿着树遍历判断intersection</p></li><li><p>Bounding Volume Hierarchy</p><p><img lazyload src="/images/loading.svg" data-src="113.png" alt="113"></p><p>better? choose the longest axis in node</p></li><li><p>Comparision</p><p><img lazyload src="/images/loading.svg" data-src="114.png" alt="114"></p></li></ul><h2 id="lecture_12_raytracing_cont">Lecture_12_raytracing_cont</h2><h3 id="radiometry">Radiometry</h3><p>the basics of Path Tracing</p><p><img lazyload src="/images/loading.svg" data-src="115.png" alt="115"></p><p><img lazyload src="/images/loading.svg" data-src="116.png" alt="116"></p><ul><li><p>Radient Intensity</p><p>Definition: The radiant (luminous) intensity is the power per unit solid angle (<strong>立体角</strong>) emitted by a point light source.</p><p>单位立体角的功率</p><p><img lazyload src="/images/loading.svg" data-src="117.png" alt="117"></p><p>Solid angle: ratio of subtended area on sphere to radius squared</p><p><img lazyload src="/images/loading.svg" data-src="118.png" alt="118"></p></li><li><p>Irradiance</p><p>Definition: The irradiance is the power per (perpendicular/ projected) unit area incident on a surface point.</p><p>输入到曲面点上的每个单位面积的功率。</p><p><img lazyload src="/images/loading.svg" data-src="119.png" alt="119"></p><p><img lazyload src="/images/loading.svg" data-src="120.png" alt="120"></p></li><li><p>Radiance</p><p>Definition: The radiance (luminance) is the power emitted, reflected, transmitted or received by a surface, per unit solid angle, per projected unit area.</p><p>每单位立体角、单位投影面积的表面发射反射传输或接收的功率</p><p>Definition: power per unit solid angle per projected unit area.</p><p><img lazyload src="/images/loading.svg" data-src="121.png" alt="121"></p></li><li><p>Incident Radiance</p><p>Incident radiance is the irradiance per unit solid angle arriving at the surface.</p><p><img lazyload src="/images/loading.svg" data-src="122.png" alt="122"></p></li><li><p>Exiting Radiance</p><p>Exiting surface radiance is the intensity per unit projected area leaving the surface.</p><p><img lazyload src="/images/loading.svg" data-src="123.png" alt="123"></p></li></ul><p><img lazyload src="/images/loading.svg" data-src="124.png" alt="124"></p><h3 id="bidirectional-reflectance-distribution-function">Bidirectional Reflectance Distribution Function</h3><p>Radiance from direction ωi turns into the power E that dA receives.</p><p>Then power E will become the radiance to any other direction ωo.</p><p><img lazyload src="/images/loading.svg" data-src="125.png" alt="125"></p><p><img lazyload src="/images/loading.svg" data-src="126.png" alt="126"></p><p><img lazyload src="/images/loading.svg" data-src="127.png" alt="127"></p><p>how to deal with the <strong>recursive</strong> equation?</p><p><img lazyload src="/images/loading.svg" data-src="128.png" alt="128"></p><p><img lazyload src="/images/loading.svg" data-src="129.png" alt="129"></p><p><img lazyload src="/images/loading.svg" data-src="130.png" alt="130"></p><p><img lazyload src="/images/loading.svg" data-src="131.png" alt="131"></p><p><img lazyload src="/images/loading.svg" data-src="132.png" alt="132"></p><p><img lazyload src="/images/loading.svg" data-src="133.png" alt="133"></p><p><img lazyload src="/images/loading.svg" data-src="134.png" alt="134"></p>]]></content>
<tags>
<tag> notes </tag>
</tags>
</entry>
<entry>
<title>大二下总结</title>
<link href="/2022/09/12/%E5%A4%A7%E4%BA%8C%E4%B8%8B%E6%80%BB%E7%BB%93/"/>
<url>/2022/09/12/%E5%A4%A7%E4%BA%8C%E4%B8%8B%E6%80%BB%E7%BB%93/</url>
<content type="html"><![CDATA[<h1 id="大二下总结与思考">大二下总结与思考</h1><h2 id="炼狱">炼狱</h2><p>大二下是20级CS人最难熬的一学期,虽然我其实早有预感,但是真正面临专业课的全面上线的时候,还是无力招架。这学期一共有27学分,5门实在的专业课(操作系统、系统结构、计组、数学基础和算法),还有一门大物三也需要花时间,以及一门比较硬的通识课政治经济学经典导读。课比上学期的要多要难,必定是炼狱般的一学期。之前的总结文章也提到,我“立志”为这学期做着准备,但由于个人的惰性和假期里的颓靡,准备的微乎其微:大概看了一大半的csapp,学了一点点汇编,大抵如此就没有其他的了,所以我是完全以一个平民角度来看的,学期开始之前我其实很担心我的coding能力。</p><p>刚开学的时候其实还好,就是有点不适应作业全部用latex写,感觉有点小题大做而且费时间,后来我取了折中的方案,大部分用typora写markdown交上去。讲的最好的是算法的陈翌佳老师,真正的儒雅随和学者风范深入浅出,朱弘恣老师也不错,但是就是讲的内容过于复古了,古早的8086汇编放在当今的培养计划里有些格格不入。李颉的数学基础完全是自己看书做作业,上课根本学不到任何东西,不过老师温柔。邓倩妮老师是老熟人了,说实话我感觉她讲的还可以,就是有些忽快忽慢,个人有点不太适应。吴帆老师像大BOSS般的存在,讲的课很水,但是总感觉隐藏着杀机。</p><p>真正开始上强度是从3月份开始,而且一上强度便是持续到期末。3月份操作系统第一个大作业发布,做一个进程树和网络编程,配置环境配置了两三天,也是参考了一些学长代码才完整地做出来,但是也算是对内核编程有个基本的了解吧。在各个作业之下逐渐有些开始力不从心,特别是三月底系统结构实验的加入更是增加重压。熬完清明节发现还是无穷无尽的ddl,当时真的崩溃了,生理和心理上都是的,每天熬夜肝作业,充满绝望。自己定下心来发现无意间向好多人倾诉了负能量,决定要好好改变。</p><p>当时加了方天宬学长的好友,得以了解到方神去年大二下的生活。看见他一条条破防的说说,我非常感同身受,但是也佩服他的韧劲和毅力。我根据他的经验,重新调整了自己目前的学习计划——实行以“<strong>以操作系统为中心,实验为首要任务,保证全线基本能懂</strong>”,并且熬过了最艰难的第八周第九周,倒也缓和了些。<strong>当时系统结构看CS61C的视频,操作系统看王道考研的视频</strong>,倒也明白了些。后来就是系统结构实验,想摆烂又不甘心,还是自己制作一遍才踏实,耗费了大量的精力(甚至在某个ALU的debug上浪费了一两天时间),最终也完成了。但其实最担心的还是操作系统的第二次大作业,忙来忙去始终没能开个头。</p><p>五月份自习室开了,每天和铮铮和dty去中院自习,虽然任务很繁重,逐渐有点节奏起来了,大作业也在稳步推进,感觉逐渐回到了正轨。操作系统大作业是在面向github的缝缝补补中艰难完成的,最后写测试程序一度找不出来错,最后是善良的助教哥哥帮我找出了bug,真的很感激。</p><p>六月的考试周其实也非常高能,先是数学基础毛概大物系统结构四天连考,后面又是三门重量级的课。一开始力挽狂澜大物,靠着王先智老师的ppt终于算是搞懂了脉络;系统结构按照理力的复习模式,对照慕课复习,但是真是由于后面并行这边听的太少了,导致复习不力,考试选择题错了好多,好在大题稳住了。一波小高潮过去,狂看两天计组,但是没想到计组的考试如此之难,直接考场上当场给我干碎了。最后的算法和操作系统只能说感谢老师不杀之恩,倒也平稳度过。</p><p>这个学期的考试周显然比上学期的更加有紧迫感,除了计组大翻车其他都还不错:操作系统课程设计和大物满绩了,其他的专业课都是在90出头的样子,不高不低,然鹅计组大翻车,但被老师捞到了80,丑陋不堪。学积分比上学期有退步,毕竟少了我有优势的基础课,<strong>91.59排名14,绩点4.004排名12</strong>,算是正常吧。但是,<strong>真正熬完了整个学期,没有放弃任何一门课,没有缓考任何一门,我是觉得真的不容易。</strong></p><h2 id="疫情">疫情</h2><p>开学第一周的时候计划着去南京,当时战战兢兢生怕南京出个什么事,因为是偷摸着去的。最后倒也安稳回来了。没想到这竟是一个极其正确的选择,谁也不会想到接下来会发生如此惊天动地是事情。</p><p>3月初的时候我约dty自习,8号晚上突然说学校三餐便利店出了一个阳性,校内阳性可是第一次见。第二天清晨发消息说封校了,全面转为线上。当时我们是有些措手不及的,没想到真的扩散开来了。于是有了<strong>首次“全员核酸”</strong>,但是当时完全没有组织,是大家自行下楼检测,很混乱。随着疫情变得更加严重,我们逐渐转变成足不出户的模式,终于在3月12号我们封楼了,实行三餐配送。</p><p>全校封楼是一件很难想象的事情,学校真的有魄力这样去决策,每天三万份饭,教授老师们也帮忙开私家车送饭,虽然一开始由于巨大的调度量我们很难准时吃上饭,但是大家戮力同心共渡时艰的场面确实震撼又温暖人心。但是疫情却是不好的态势,随着一个又一个同学被感染,学校情况愈加严重,每天上网课上一半出来做核酸已成为日常的流程。直到一星期后,<strong>瑞金医院正式接手交大</strong>的防控,我们看到了希望。瑞金医院一改之前拖沓隔离的方式,非常果断地连夜派几十辆救护车<strong>包围东十五全楼转运</strong>——这是交大疫情防控战的转折点。瑞金就是交大的希望,当时真的是泪目了,在大家的共同努力下,三月底,交大终于实现了第一次“清零”。</p><p>到了四月的时候,上海成为了全国的焦点。很难想象享誉全球的魔都竟因为这一波疫情落得完全瘫痪的程度。每日新增两万多,持续了半个月,而且显然真实数据比这个严重得多,交通完全瘫痪,大街空无一人,居民们抢菜而不得,空腹空叹息。上海死要面子活受罪,坚持不封城,但其实已经到了比封城更严重的地步,于是有了著名的**“鸳鸯锅”——浦西封完浦东封**。在一幕幕闹剧之下,终于到了五月慢慢从日增两万变成一万甚至于更少了。惨不忍睹。</p><p>然而很幸运的是,交大内部却在走整体向好的趋势。先是<strong>通行证制度</strong>——一个寝室一张通行证去食堂排队打饭;再到<strong>快团团上线</strong>,大家每天准时准点抢咖啡奶茶等;学校每天会<strong>发各种各样的物资</strong>,小吃零食饮料,真的很丰盛;教超排队制度到摇号预约制度的转变,从每天排队几小时购物到每天看朋友圈里有多少欧皇买了千百块吃的……交大人开拓创新,当着疫情后期提升生活质量的先锋,确实比同期还在苦苦与疫情封控鏖战的其他高校要领先得多。</p><p>到了五月,自习室陆续开放,于是我得以和老朋友们继续约自习了。这时候上海疫情向好,学生们也很多都润回家了——当时我们还有神秘组织来跟当地拉扯隔离的问题,还费了不少心思,但是我最终决定不回去,等在学校考完再回去。事实证明我的选择是正确的,在学校考试极其舒服,<strong>交大又开创了“线上线下考”</strong>,我们得以坐在教室里考试,正合我意。回家的前一天说不用集中隔离了,于是很幸运的是,我能够直接回家,免受隔离之苦。</p><p>这一学期我亲身体验了魔都的瘫痪,处在疫情中间的感受,也曾没有东西吃,也曾天天奔波于核酸——回望一路,真的满是感慨。会放开吗?等通知。</p><h2 id="生活">生活</h2><p>这学期一开始,我本来以为会是一个向好的平衡的一学期——和很多小伙伴玩的更熟了,也认识了不少新的朋友。开学和泓桥哥真宝马兴聚了几次,感觉有那么点带节奏感的生活;3月份当任务重起来时,也结识了和我一起卷的扬中巨佬dty以及系里的acm大神Marcythm。但是这一切都被这次疫情打乱了,之后的一切就只有核酸,核酸,核酸,吐槽一日日的餐饭。但是整日在寝室的日子也更多地给了有和室友更多相处的机会,彼此之间也更加熟络了。</p><p>但是这样的生活终究难以有丰富的色彩,每日都是重复单调的内容,再加以繁重的学习任务,更多的却是负能量。当时打趣道“生活苦了,莲花清瘟都是甜的”,其实很好地描述了生存状态。南大520校庆的时候我和她闹了点矛盾,她觉得我的生活过于单调枯燥——我能有什么办法呢…我其实内心十分纠结,但是又不得不负重前行,或许这学期过去会好一些的吧。</p><p>这学期的生活是灰色的,但是从5月到6月掩盖不住似乎将要喷薄欲出的光亮。</p><h2 id="前路">前路</h2><p>在度过这学期的时候已经累到无法顾及以后的路了。但当真正熬过这学期,我感觉这学期所学的都是计算机专业基础知识,如计组操作系统这些,但如果真正要做这些却是需要非常强大的功底的。在这方面,我深知自己的大作业是如何做出来的(这方面造火箭真的很折磨)。所以我感觉不太适合去加这方面的实验室。</p><p>于是将目光更多投在还完全陌生的人工智能上。说实话我对下学期的课表示严重更多怀疑,完全没有AI的基础,如何一上来就去做那些花里胡哨的项目?我决定暑假需要先学一些东西。我选择了CS188的人工智能导引课作为自学课程,并跟着做了相关的项目。但是由于暑假的颓靡,我一个暑假竟然只完成了这一个任务,然而我的朋友一个暑假相继完成了吴恩达,CS188,CS186,MIT6.S081等各大课程项目,让我瞠目结舌。我还是缺少相关的决绝去做这些事情,根源在于我由于自身能力的囿限,对代码的motivation不足,导致了一拖再拖。好在CS188看了,李宏毅的机器学习开了个小头,不算一事无成(虽然也差不多)。</p><p>想加实验室,但是觉得自己真的做好这个准备了吗?我其实有点冒险,但是我还是想一步一个脚印,走一步看一步。</p><p>到了大三我想会把人工智能相关的课程好好吸收消化,并辅以网上很多课程和项目,希望能得到一些提升。相信这也是至关重要的一学期了,希望不至跌堕。</p><h2 id="总结与规划">总结与规划</h2><p>这学期是非常崎岖坎坷的一学期,真的让我体会到了很多痛的震撼和打击,但是我要带着这些继续走下去。大三上的课说多不算多,但似乎内容还是比较硬核的。希望能进一步提高效率,减少花在课内时间的无用功,能真正去理解感悟到自己所在做的事情。还有一年,坚持过去就是胜利!</p>]]></content>
<tags>
<tag> summary </tag>
</tags>
</entry>
<entry>
<title>新机开荒指北</title>
<link href="/2022/08/08/%E6%96%B0%E6%9C%BA%E5%BC%80%E8%8D%92%E6%8C%87%E5%8C%97/"/>
<url>/2022/08/08/%E6%96%B0%E6%9C%BA%E5%BC%80%E8%8D%92%E6%8C%87%E5%8C%97/</url>
<content type="html"><![CDATA[<h1 id="新机开荒指北">新机开荒指北</h1><p>2022年入了新机子,联想y9000x,机子很好,配置很烦,遂记录自己新机子的开荒过程。主要是一些环境和软件的配置,之前在老机子上走了很多弯路,现在要重走一遍。</p><h2 id="vscode">Vscode</h2><p>首先我们先下载安装<a class="link" href="https://bit.ly/mingw10">MinGW编译器 <i class="fa-regular fa-arrow-up-right-from-square fa-sm"></i></a>。</p><p>如图所示下载:</p><p><img lazyload src="/images/loading.svg" data-src="1.png" alt></p><p>然后正常安装就行了,我直接安装在了D盘直属里面。</p><p>之后我们需要手动导入MinGW的环境变量设置,打开电脑高级系统设置,然后在用户变量里的Path里手动添加bin的路径。</p><p><img lazyload src="/images/loading.svg" data-src="2.png" alt></p><p>官网下载Vscode,然后按照要求安装。我准备把这些东西都配置在D盘的Env文件夹内。</p><p>然后打开Vscode,我们需要安装相应的扩展,来实现我们基础的功能(写C或者C++):在这里我们需要的扩展是**CodeRunner和C/C++**扩展,点击下载即可。如图所示。</p><p><img lazyload src="/images/loading.svg" data-src="3.png" alt></p><h2 id="pycharm">Pycharm</h2><p>首先在官网下载Anaconda和Pycharm Community版。同Vscode,我也是安装在了D盘的Env文件夹。</p><p>装好了我们需要重启电脑,然后开始搞Pycharm.</p><p>让我们新建项目,此时会让我们选Interpreter,我们选择Previously那一个,因为我们的Conda已经有这方面的配置了。</p><p><img lazyload src="/images/loading.svg" data-src="4.png" alt></p><p>然后我们手动把Conda里python解释器的路径导进去:</p><p><img lazyload src="/images/loading.svg" data-src="5.png" alt></p><p>测试了一下,能跑!于是我们pycharm也配置好了。</p><p><img lazyload src="/images/loading.svg" data-src="6.png" alt></p><h2 id="qt">QT</h2><p>QT是我大二上学期问题求解与实践这门课的课程大作业,用QT来设计一个数据分析系统,做了我快一个月的时间。虽然我现在可能不怎么用到了,但是我还是决定把它配置起来,一方面自己偶尔可能会打开,另一方面下一届有问题了或许可以参考参考。</p><p>首先QT我们不要在官网上面找下载,好像都是online安装版本的,而我们需要的好像是开源开发版本。</p><p>没有关系,我把下载链接搞到了,在某个<a class="link" href="https://download.qt.io/archive/qt/">青青草原网站 <i class="fa-regular fa-arrow-up-right-from-square fa-sm"></i></a></p><p>在这里<strong>我们选择5.14的版本</strong>,你会发现5.15及以上好像不好直接下载了。</p><p>下载下来之后就是我们很熟悉的安装环节,首先我们需要创建一个qt账号好像,然后就没有什么区别了。</p><p>选择安装配件的时候,我们如下选择:</p><p><img lazyload src="/images/loading.svg" data-src="7.png" alt></p><p>然后就顺着安装啦。安装完我们试着运行一下我的大作业,发现非常丝滑。</p><p><img lazyload src="/images/loading.svg" data-src="8.png" alt></p><h2 id="typora">Typora</h2><p>想了想还是没舍得花90块钱买正版软件(看看身边的同学都是用的各种小操作来直接用的)</p><p>于是我上万能的github一搜,果就找到所谓破解的办法,于是便暂时用在自己的电脑上试试,这篇文档就是我用这个码出来的。</p><p><a class="link" href="https://github.com/zhizhuoshuma/Typora1.3.6">链接奉上 <i class="fa-regular fa-arrow-up-right-from-square fa-sm"></i></a></p><p><strong>记住一定要记得在设置里取消勾选自动更新!</strong></p><h2 id="gitamphexo-blog">Git&Hexo blog</h2><p>我一直以为这是最复杂的一步,因为去年此时我配置hexo blog的时候配置了很长很长时间才配置成功,不过猜想如果是仅仅搬迁会稍稍简单一点点?话不多说,开始实践。</p><h3 id="git的下载">git的下载</h3><p>首先我们要下载Git,同上,直接在<a class="link" href="https://git-scm.com/downloads">官网下载 <i class="fa-regular fa-arrow-up-right-from-square fa-sm"></i></a></p><p>安装配置,好像要勾很多东西,我直接全部按照默认去勾选了。</p><p>打开Git Bash,我们需要进行一步初始的设置。</p><div class="highlight-container" data-rel="Bash"><figure class="iseeu highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">git config --global user.name <span class="string">"你的名字"</span>(注意前边是“- -global”,有两个横线)</span><br><span class="line">git config --global user.email <span class="string">"你的邮箱"</span></span><br></pre></td></tr></table></figure></div><p>这是给本地设置一个用户名字,然后方便上传的时候显示。</p><p>我们还需要把git添加到环境变量中,否则后期用hexo的时候会报错。</p><p>找到你git的安装目录,把bin的地址加入到<strong>系统环境变量</strong>path中即可。</p><h3 id="ssh的配置">SSH的配置</h3><p>第二步我们需要配置SSH,来实现与github的连接。</p><p>首先我们在电脑上检查是否有SSH,我们直接在Bash中输入以下代码:</p><div class="highlight-container" data-rel="Bash"><figure class="iseeu highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">~/.ssh</span><br></pre></td></tr></table></figure></div><p>如果没有的话,它会显示”No such file or directory“,所以我们要创建一个。</p><div class="highlight-container" data-rel="Bash"><figure class="iseeu highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ssh-keygen -t rsa -C <span class="string">"你的邮箱"</span></span><br></pre></td></tr></table></figure></div><p><img lazyload src="/images/loading.svg" data-src="9.png" alt></p><p>此时会让你输密码,为了省事你可以直接回车到最后,最后出来一阵方的奇怪的符号就代表成功了。</p><p>现在我们要把它连接到自己的github,我们需要打开github的设置界面,打开<strong>SSH and GPG Keys</strong>一栏,点击<strong>New SSH key</strong>.</p><p>此时我们要找到刚刚自己配置的ssh,它位于自己的用户目录内的.ssh文件夹,里面有个id.rsa文件,复制粘贴到github上即可。</p><p>这时候你会收到一封邮件,代表你搞定了。</p><h3 id="nodejs配置">Node.js配置</h3><p>同样,我们在<a class="link" href="https://nodejs.org/zh-cn/">官网 <i class="fa-regular fa-arrow-up-right-from-square fa-sm"></i></a>下载好安装好这些前期的东西。</p><p>我们可以通过cmd来查看是否安装成功了:</p><p><img lazyload src="/images/loading.svg" data-src="10.png" alt></p><p>此时我们用npm命令的话,我们发现会有个warning,且无法正常运行。</p><p><img lazyload src="/images/loading.svg" data-src="11.png" alt></p><p><strong>此时我们需要修改nodejs里面的两个文件!</strong></p><p>首先是npm文件,我们把第23行的prefix这边改成</p><div class="highlight-container" data-rel="Llvm"><figure class="iseeu highlight llvm"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">prefix</span> --location<span class="operator">=</span><span class="keyword">global</span></span><br></pre></td></tr></table></figure></div><p>效果如下:</p><p><img lazyload src="/images/loading.svg" data-src="12.png" alt></p><p>同样,我们把npm.cmd文件也需要改一下,在第12行,相同的改法:</p><p><img lazyload src="/images/loading.svg" data-src="13.png" alt></p><p>此时我们再在Bash里用npm指令,就完全没有问题啦。</p><p>这时候我们用npm装上hexo,命令如下:</p><div class="highlight-container" data-rel="Bash"><figure class="iseeu highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install hexo-cli -g</span><br></pre></td></tr></table></figure></div><p>这时候我们把原来的hexoblog文件夹可以搬运过来了,搬过来之后可以npm install一下,就大功告成了。</p><h2 id="wsl2配置">WSL2配置</h2><p>如果不想体验虚拟机的麻烦,很多轻量级的工作是可以直接在windows系统上装一个小Linux来完成的,便捷而轻巧。受泓桥哥的启发于是决定在电脑上装WSL2,一个windows上的ubuntu子系统。</p><p>首先我们在windows的powershell中通过命令行来使得支持WSL2,输入以下几条命令。</p><div class="highlight-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">wsl --install</span><br><span class="line">dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart</span><br><span class="line">dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart</span><br><span class="line">wsl --set-default-version 2</span><br></pre></td></tr></table></figure></div><p>这时候我们就已经安装好WSL2并能够查看版本了。<strong>记得重启电脑!</strong></p><p>我们要做的第二步就是在电脑里安装一个Ubuntu系统。在旧电脑中我是直接通过Microsoft商店下载的,但这次我想把它装在D盘,所以我采用了命令行下载的方式。</p><p>即在D盘建好相应的文件夹,然后在文件夹内打开终端,输入以下命令:</p><div class="highlight-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Invoke-WebRequest -Uri https://wsldownload.azureedge.net/Ubuntu_2004.2020.424.0_x64.appx -OutFile Ubuntu20.04.appx -UseBasicParsing</span><br></pre></td></tr></table></figure></div><p>然后我们会发现文件夹会多了个包,不要慌,我们继续执行命令:</p><div class="highlight-container" data-rel="Shell"><figure class="iseeu highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">Rename-Item .\Ubuntu20.04.appx Ubuntu.zip</span><br><span class="line">Expand-Archive .\Ubuntu.zip -Verbose</span><br></pre></td></tr></table></figure></div><p>然后我们直接点击Ubuntu20.04可执行文件便可以开始初始化自己的Ubuntu了(设置用户名和密码)。</p><p>当然我在最后一步设置Ubuntu的时候也给我报了错:<strong>WslRegisterDistribution failed with error: 0x800701bc</strong></p><p>于是上网搜了搜,是因为wsl1到wsl2安装包没有升级,我们需要下载一个wsl的安装包(<a class="link" href="https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi">下载地址 <i class="fa-regular fa-arrow-up-right-from-square fa-sm"></i></a>),安装即可。</p><p>于是WSL2便基本成功啦,妈妈再也不用担心我不会用虚拟机(bushi)。</p><h2 id="github连接本地">Github连接本地</h2><p>之前学习github的时候踩了很多坑,甚至连怎么上传代码都不会,只会妥妥拽拽地上传,暑假才会通过git来搞事情,在这里顺便也记录下如何实现github的本地连接的,也算是半个配置或者git的应用吧。</p><p>在这里我们先打开一个我们自己的仓库,在页面我们可以看到该仓库的ssh链接,我们复制下来。</p><p><img lazyload src="/images/loading.svg" data-src="14.png" alt></p><p>然后我们在自己的文件夹内用git bash来输入命令,从而将github上的仓库给搞到本地来。</p><p>命令格式如图所示:</p><p><img lazyload src="/images/loading.svg" data-src="15.png" alt></p><p>下面我们这个文件夹就和github上关联起来了,如果我们要添加文件的话,我们可以直接用add命令:</p><div class="highlight-container" data-rel="Bash"><figure class="iseeu highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git add README.md</span><br></pre></td></tr></table></figure></div><p>如果我们想要整体更新到网站上,我们采用下面的连招:</p><div class="highlight-container" data-rel="Bash"><figure class="iseeu highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">1. git add .</span><br><span class="line">2. git commit -m <span class="string">"你的描述,尽量是修改的内容"</span></span><br><span class="line">3. git push -u origin master</span><br></pre></td></tr></table></figure></div><p>这样一发操作下来我们就可以方便地更新github了,从而更好更方便地实现代码管理。</p>]]></content>
<tags>
<tag> notes </tag>
</tags>
</entry>
<entry>
<title>Hello World</title>
<link href="/2022/08/08/hello-world/"/>
<url>/2022/08/08/hello-world/</url>
<content type="html"><![CDATA[<p>Welcome to <a class="link" href="https://hexo.io/">Hexo <i class="fa-regular fa-arrow-up-right-from-square fa-sm"></i></a>! This is your very first post. Check <a class="link" href="https://hexo.io/docs/">documentation <i class="fa-regular fa-arrow-up-right-from-square fa-sm"></i></a> for more info. If you get any problems when using Hexo, you can find the answer in <a class="link" href="https://hexo.io/docs/troubleshooting.html">troubleshooting <i class="fa-regular fa-arrow-up-right-from-square fa-sm"></i></a> or you can ask me on <a class="link" href="https://github.com/hexojs/hexo/issues">GitHub <i class="fa-regular fa-arrow-up-right-from-square fa-sm"></i></a>.</p><h2 id="quick-start">Quick Start</h2><h3 id="create-a-new-post">Create a new post</h3><div class="highlight-container" data-rel="Bash"><figure class="iseeu highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo new <span class="string">"My New Post"</span></span><br></pre></td></tr></table></figure></div><p>More info: <a class="link" href="https://hexo.io/docs/writing.html">Writing <i class="fa-regular fa-arrow-up-right-from-square fa-sm"></i></a></p><h3 id="run-server">Run server</h3><div class="highlight-container" data-rel="Bash"><figure class="iseeu highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo server</span><br></pre></td></tr></table></figure></div><p>More info: <a class="link" href="https://hexo.io/docs/server.html">Server <i class="fa-regular fa-arrow-up-right-from-square fa-sm"></i></a></p><h3 id="generate-static-files">Generate static files</h3><div class="highlight-container" data-rel="Bash"><figure class="iseeu highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo generate</span><br></pre></td></tr></table></figure></div><p>More info: <a class="link" href="https://hexo.io/docs/generating.html">Generating <i class="fa-regular fa-arrow-up-right-from-square fa-sm"></i></a></p><h3 id="deploy-to-remote-sites">Deploy to remote sites</h3><div class="highlight-container" data-rel="Bash"><figure class="iseeu highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo deploy</span><br></pre></td></tr></table></figure></div><p>More info: <a class="link" href="https://hexo.io/docs/one-command-deployment.html">Deployment <i class="fa-regular fa-arrow-up-right-from-square fa-sm"></i></a></p>]]></content>
<categories>
<category> 说明 </category>
</categories>
</entry>
<entry>
<title>大二上总结</title>
<link href="/2022/02/02/%E5%A4%A7%E4%BA%8C%E4%B8%8A%E6%80%BB%E7%BB%93/"/>
<url>/2022/02/02/%E5%A4%A7%E4%BA%8C%E4%B8%8A%E6%80%BB%E7%BB%93/</url>
<content type="html"><![CDATA[<h1 id="大二上的总结与思考">大二上的总结与思考</h1><h2 id="过渡">过渡</h2><p>一言以蔽之,我对大二上学习的总体感觉就是,一种过渡:从质量高的课到离谱的课的过渡,从磨炼到炼狱的过渡。虽然这学期我只有十门课,相对于电院其他专业的课来说确实要轻松一些,但这学期还是战战兢兢,如履薄冰。</p><p>这学期仍是给我分出了四大基础课还有一门专业课:离散概统大物理力and问题求解与实践,其实在学期开始之前我对问求是最恐惧的因为我遥远地听说了这门课有个难缠的大作业,其他课我倒觉得都是可以期末强攻,毕竟大一下的魔鬼期末周给了我一定的自信,我觉得这些课不至于有电路理论恶心。但事实上,问求平时几乎不花我心力,因为根本不怎么听得懂,作业都是面向CSDN编程,而其他几科的作业给我轮流轰炸忙的我措手不及,学期的学习阶段,就是说学了个寂寞。</p><p>点名说几个学科。首先离散,是让我这学期受气最大的学科,我从学期一开始就对离散老师和助教抱有极大的抵触心理,我觉得老师水平不行助教过于严苛,而且小测和作业让我感觉到非常地不友好,所以我上课也不听,基本靠抄作业答案来理解上课内容,甚至有一次被助教点名批评抄答案(答案书上错了)。不过到了期末我却又觉得这老师和助教是还不错的,这门课也确实是简单而老师努力在给我们拓展。问求课,我最想学好的一门课却又无可奈何划水的一门课,小姐姐很漂亮,胖老师很好说话,这门课感觉非常modern,但是确实有点鸡肋。平时的编程作业没啥有意思的东西基本就是上课内容复刻与拓展,但是每一次做作业的时候我都有着深切的危机感:这门课重头戏在大作业。事实上之前的k-d tree,完全不懂的基因编程和深度学习确实造成了一定麻烦,但和大作业的100小时硬肝相比确实是小巫见大巫。其他的课老师都非常好,我非常喜欢,虽然都不听课。</p><p>这学期的四个半月其实是截然不同的学习模式。9月份非常地温和,还有时间自己捣鼓博客和csapp这些;10月份自己开始带着做了点数学竞赛,问求一周一次的作业难度略有加大,开始忙碌起来;11月份担任钢伴排练挤掉了不少学习的时间,前半个月忙着刷数学竞赛和写实验报告,后面应付着各种小测和问求的奇怪作业;12月份我愿称之为“大作业月”,从头自己自学qt,看网课学基本语法、学多线程、设计UI、上千次debug、写报告录demo等等,为了大作业我完全放弃了其他基础课,课完全不听作业甚至开始不写了,每天沉浸在qt中,投入了上百个小时终于完成了大作业,虽然map最终没来得及做;1月份就完全进入了女娲补天的考试周模式,把欠下的债一一还清,我和几个室友们朋友们近乎在东中院2-206定居,每天早上9点去晚上12点回,力挽狂澜,每天十几张大白纸地写,我室友们有的比我更难顶,我们都在与时间赛跑努力创造奇迹,高强度复习了两个星期,大二下终于落下帷幕。</p><p>这是我过得强度最大的一个考试周和期末周,也是我三学期学习深度起伏最大的一学期。事实上我专业方面的能力这学期并没有得到提升,但我明显对自己“会考试”的能力又自信了一分。但这真的能持久吗?我持有深深的疑虑与不安。</p><p>超高强度的考试周,让我的期末成绩呈现出一个壮观的景象:概统大物问求和理力满绩,理力满分(要知道前两学期只有一门军理满绩),虽然马原老师很不友好怒给83形策也只有85,但这学期总学积分到了一个新高度:93.178分,绩点4.073。<strong>但是排名并没有明显的提升,依旧是十几名</strong>,你寄系真的卷翻天了,我有点惶恐。</p><h2 id="奔波">奔波</h2><p>到了大二,像大一时候的迷茫感和压抑感似乎少了许多,主要自己逐渐地能支配起自己的时间了,但或许也是这学期课比较少。</p><p>众所周知在你交蹲牢我是很少出校的,这学期也不例外,但是出去的几次都还是比较舒适的就是了——一次是中秋节去徐汇漫步,在一个陌生的地方用脚步去感受好像就能感受到当地的生活气息似的;一次是和谢睿去欢乐谷放飞自我,平时太压抑了,那一天超级刺激的玩耍属实是洗涤了灵魂。另外就是不多的聚餐,却也都有着烟火气。国庆节的时候回家了一次,忙着酒席,只和昌委蒲苇匆匆聚了一次遍匆匆回校了。</p><p>这学期和班上的同学进一步熟络了起来,一起上课一起<s>抄</s>写代码。思政建立了一个匿名群,感觉大家还是比较热心的,大佬也确实非常非常强。到了最后写qt大作业的时候同系的交流真的是很重要的。怕的不是打代码,怕的是你一个人孤独地打代码。</p><p>10月底的时候报名了129歌会的钢伴,这或许是我第一次参加学校的大型活动了。认识了另一位又强又帅的钢伴弟弟,以及很多亲切友好的学长学姐,给我的枯燥生活带来了一定的活力,也让我的钢琴技能得到不错的展现。看着电院逐渐拿下《娄山关》,作为钢伴我也是感到很有成就感的。虽然整个过程耗费了不少的时间,但收获到了不错的归属感(以及补贴和最强输出的特殊关怀真的不错哇)</p><p>或许我的大学生活不像他人那样社交丰富,多姿多彩,但是在小圈子内如若能取得一个带来不错幸福感的平衡,或许也是不错的呢。毕竟在这样一个专业,活着本身就实属不易啊。</p><h2 id="危机感">危机感</h2><p>大二上过完,如果以大三下的人生选择作为参考点,我感觉大学生活已经过完了一半。在这一年半的时间内,逐渐会应付了你交的各种考试,但是,危机感却也逐渐加重:你交这个专业培养是确实不太行啊。</p><p>首先足以说明问题的就是我的csapp(《深入理解计算机系统》)仍旧没有读完,甚至还停留在第七单元,后面的系统级编程还完全陌生——这对下学期的操作系统课是非常不利的,偏偏这门课又很难,还生在全是专业课的大二下。买了一本《操作系统真象还原》,感觉这确实是一本实操的好书,但很可惜我寒假没把它啃下来,于是我决定这本书等到大三再过一遍吧。</p><p>在这个时间点回望自己上一篇的大一下总结真感觉是莫大的讽刺,一学期自己的专业能力没有提升,甚至没有OJ的磨炼码力还下降了也说不定。此时已经开学,我确实应该有着宏观的对策了。</p><p>最硬的肯定还是OS英文班,据说大作业难破天际。上课用的《操作系统概念》(恐龙书)过于厚(1300页),我打算先迅速撸完csapp的后几章再生啃这本大书,此外,我还必须动手去做lab,先是csapp的lab,然后我决定啃一下mit6.s081的lab,自己做不来抄也要抄明白了。以及在中期我必须要看自己买的那本《linux内核设计与实现》,因为大作业肯定要写内核代码,别给自己整的啥也看不懂。</p><p>剩下来的几门比如组成和系统结构这些,跟着老师走吧,该做的lab做做好应该还ok。算法和数学就靠自己悟和看书了,数学基础的书非常不错,但碰上了个不太行的老师,anyway自求多福,我是从来不排斥自学的。</p><p>有时间再看CAAQA这些书了,先保命要紧。</p><p>如果成功苟过这学期,暑假就找个组打工,或者自己上网刷一些项目等等,手不能生,以及练算法。</p><p>我只想说一句话,<strong>csapp真的是一本非常非常值得看的书,而且最好在大二下之前看完</strong>!</p><p>多读代码!多写代码!危机感中,我要时刻提醒自己。</p><h2 id="总结与规划">总结与规划</h2><p>不多说了,活过大二下即是胜利。半天早八还是比较舒适的。勇敢鸣鸣不惧困难</p>]]></content>
<tags>
<tag> summary </tag>
</tags>
</entry>
<entry>
<title>Data Analysis and Visualization of POI Checking-In Data</title>
<link href="/2021/12/02/Data%20Analysis%20and%20Visualization%20of%20POI%20Checking-In%20Data/"/>
<url>/2021/12/02/Data%20Analysis%20and%20Visualization%20of%20POI%20Checking-In%20Data/</url>
<content type="html"><![CDATA[<h1 id="data-analysis-and-visualization-of-poi-checking-in-data">Data Analysis and Visualization of POI Checking-In Data</h1><ul><li>CS2309-2 问题求解与实践 FinalProject 心路历程</li></ul><h2 id="0-开胃菜qt-初体验-design-a-gui">0: 开胃菜:QT 初体验 Design a GUI</h2><p>这是问求英文班的最后一次小作业,要求如下:</p><blockquote><p>We provide a .csv file about the statistics of checking-in data over time of a POI, which contains two columns named week and num. Design a GUI that can</p><ol><li><p>provide a dialog that allows users to select the .csv file and load it from disk.</p></li><li><p>provide boxes that allow users to tune the starting and ending week for display.</p></li><li><p>draw a line chart using week as x axis and num as y axis, from the starting week to the ending week set by 2.</p></li></ol></blockquote><p>也就是说要实现三个功能,要能从磁盘中提取csv文件读数据,然后通过交互方框获取用户的输入值,最后通过输入值和数据作出x-y 折线图。</p><h3 id="version-10">Version 1.0</h3><p>在做小作业之前我苦苦思索,花了一天时间阅读 <a class="link" href="https://www.devbean.net/2012/08/qt-study-road-2-catelog/">Qt学习之路 <i class="fa-regular fa-arrow-up-right-from-square fa-sm"></i></a>,除了了解一些函数和类的基本功能外(这是当时边学边复制粘贴来的<a href="https://yevzh.github.io/2021/12/01/Qt%20GUI%20Programming%20Notes/">笔记</a>,并没有学会怎么去运用这些去实际解决问题。上最后一次问求课的时候,同学提醒我面向CSDN编程,我恍然大悟,开始直接着手捣鼓这个小作业。</p><p>我觉得画图比较简单,于是先从第三部分做起,上CSDN搜索发现一个宝贝类:<code>QLineSeries</code>。我选择了一些基本功能的代码加入我的程序:</p><p>(先修改pro文件并添加名称空间)</p><div class="highlight-container" data-rel="C++"><figure class="iseeu highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"> <span class="comment">//设置line和point</span></span><br><span class="line">QLineSeries*line=<span class="keyword">new</span> <span class="built_in">QLineSeries</span>();</span><br><span class="line"> line-><span class="built_in">setName</span>(<span class="built_in">QString</span>(<span class="string">"POI"</span>));</span><br><span class="line"> line-><span class="built_in">setVisible</span>(<span class="literal">true</span>);</span><br><span class="line"> line-><span class="built_in">setPointLabelsVisible</span>(<span class="literal">false</span>);</span><br><span class="line"> line-><span class="built_in">setPointsVisible</span>(<span class="literal">true</span>);</span><br><span class="line"><span class="comment">//假设我们的数据存储在本地一个p数组内,这里添加进line</span></span><br><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i=front;i<=rear;i++)</span><br><span class="line"> {</span><br><span class="line"> line-><span class="built_in">append</span>(i,p[i]);</span><br><span class="line"> }</span><br><span class="line"><span class="comment">//进行画图的一些设置</span></span><br><span class="line"> QChart*chart=<span class="keyword">new</span> <span class="built_in">QChart</span>();</span><br><span class="line"> chart-><span class="built_in">setAnimationOptions</span>(QChart::AllAnimations);<span class="comment">//动画效果</span></span><br><span class="line"> chart-><span class="built_in">setLocalizeNumbers</span>(<span class="literal">true</span>);</span><br><span class="line"> chart-><span class="built_in">addSeries</span>(line);</span><br><span class="line"> chart-><span class="built_in">createDefaultAxes</span>();</span><br><span class="line"> chart-><span class="built_in">setTitle</span>(<span class="string">"POI checking-in data"</span>);</span><br><span class="line"><span class="comment">//画图</span></span><br><span class="line">QChartView*chartView=<span class="keyword">new</span> <span class="built_in">QChartView</span>(chart);</span><br><span class="line"> chartView-><span class="built_in">setRenderHint</span>(QPainter::Antialiasing);</span><br></pre></td></tr></table></figure></div><p>这样我们画图的设置便已经完成,在这里我是直接在main函数里写的,所以直接用<code>mainwindow</code>来进行操作:</p><div class="highlight-container" data-rel="C++"><figure class="iseeu highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">MainWindow w;</span><br><span class="line">w.<span class="built_in">setCentralWidget</span>(chartView);</span><br><span class="line">w.<span class="built_in">resize</span>(<span class="number">900</span>,<span class="number">600</span>);</span><br><span class="line">w.<span class="built_in">show</span>();</span><br></pre></td></tr></table></figure></div><p>这样我们第一步大体完成,然后考虑<code>p[]</code>中的数据何来,于是我搜了搜有关读取.csv文件。</p><p>这里用的最关键的是一个<code>QFileDialog</code>类,来实现选择文件的对话框。原理就是我们用<code>QString</code>来存储读取的文件的路径名,然后用<code>QFile</code>打开,用<code>QTextStream</code>来读取数据。.csv文件比较容易,一行一行读取即可,读取的数据以<code>QString</code>存在,我们用一个<code>QStringList</code>来写成类似坐标形式,然后用<code>at</code>函数来获取右边一栏的数值,用<code>toInt</code>强制转换成<code>int</code>存储。</p><p>代码实现如下:</p><div class="highlight-container" data-rel="C++"><figure class="iseeu highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">QString name=QFileDialog::<span class="built_in">getOpenFileName</span>(<span class="literal">NULL</span>,<span class="string">"Open File"</span>,<span class="string">"/home"</span>,<span class="string">"Excel(*.csv)"</span>);</span><br><span class="line"> <span class="comment">//if(name=="")return;</span></span><br><span class="line"> <span class="function">QFile <span class="title">file</span><span class="params">(name)</span></span>;</span><br><span class="line"> <span class="keyword">if</span>(!file.<span class="built_in">open</span>(QIODevice::ReadOnly))</span><br><span class="line"> <span class="built_in">qDebug</span>()<<<span class="string">"OPEN FILE FAILED!"</span>;</span><br><span class="line"> QTextStream *out=<span class="keyword">new</span> <span class="built_in">QTextStream</span>(&file);</span><br><span class="line"> QStringList tempOption=out-><span class="built_in">readAll</span>().<span class="built_in">split</span>(<span class="string">'\n'</span>);</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<tempOption.<span class="built_in">count</span>();i++)</span><br><span class="line"> {</span><br><span class="line"> n++;</span><br><span class="line"> QStringList tt=tempOption.<span class="built_in">at</span>(i<span class="number">-1</span>).<span class="built_in">split</span>(<span class="string">","</span>);</span><br><span class="line"> <span class="keyword">int</span> tmp=tt.<span class="built_in">at</span>(<span class="number">1</span>).<span class="built_in">toInt</span>();</span><br><span class="line"> p[i<span class="number">-1</span>]=tmp;</span><br><span class="line"> }</span><br></pre></td></tr></table></figure></div><p>这样以来第二步也完成了。最后我们要获取输入值,我搜了搜,发现一个很方便的类<code>QInputDialog</code>,可以直接满足我们的需求,只需强制存储我们输入的值即可,代码如下:</p><div class="highlight-container" data-rel="C++"><figure class="iseeu highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">bool</span> isOK;</span><br><span class="line"><span class="keyword">int</span> front=QInputDialog::<span class="built_in">getText</span>(<span class="literal">NULL</span>,<span class="string">"Input Dialog :"</span>,<span class="string">"The starting week:"</span>,QLineEdit::Normal,<span class="string">""</span>,&isOK).<span class="built_in">toInt</span>();</span><br><span class="line"><span class="keyword">int</span> rear=QInputDialog::<span class="built_in">getText</span>(<span class="literal">NULL</span>,<span class="string">"Input Dialog :"</span>,<span class="string">"The starting week:"</span>,QLineEdit::Normal,<span class="string">""</span>,&isOK).<span class="built_in">toInt</span>();</span><br></pre></td></tr></table></figure></div><p>至此我们已经完成全部功能,全部在<code>main</code>函数里实现的,main.cpp 代码如下:</p><div class="highlight-container" data-rel="C++"><figure class="iseeu highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">"mainwindow.h"</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><QApplication></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><QtCharts/QChartView></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><QtCharts/QLineSeries></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><QDoubleSpinBox></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><QFileDialog></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><QFile></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><QDebug></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><QString></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><QInputDialog></span></span></span><br><span class="line"></span><br><span class="line">QT_CHARTS_USE_NAMESPACE</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> p[<span class="number">100</span>]={<span class="number">0</span>};</span><br><span class="line"><span class="keyword">int</span> n=<span class="number">0</span>;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">(<span class="keyword">int</span> argc, <span class="keyword">char</span> *argv[])</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"></span><br><span class="line"> <span class="function">QApplication <span class="title">a</span><span class="params">(argc, argv)</span></span>;</span><br><span class="line"> MainWindow w;</span><br><span class="line"> <span class="comment">//Part 1</span></span><br><span class="line"> QString name=QFileDialog::<span class="built_in">getOpenFileName</span>(<span class="literal">NULL</span>,<span class="string">"Open File"</span>,<span class="string">"/home"</span>,<span class="string">"Excel(*.csv)"</span>);</span><br><span class="line"> <span class="comment">//if(name=="")return;</span></span><br><span class="line"> <span class="function">QFile <span class="title">file</span><span class="params">(name)</span></span>;</span><br><span class="line"> <span class="keyword">if</span>(!file.<span class="built_in">open</span>(QIODevice::ReadOnly))</span><br><span class="line"> <span class="built_in">qDebug</span>()<<<span class="string">"OPEN FILE FAILED!"</span>;</span><br><span class="line"> QTextStream *out=<span class="keyword">new</span> <span class="built_in">QTextStream</span>(&file);</span><br><span class="line"> QStringList tempOption=out-><span class="built_in">readAll</span>().<span class="built_in">split</span>(<span class="string">'\n'</span>);</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<tempOption.<span class="built_in">count</span>();i++)</span><br><span class="line"> {</span><br><span class="line"> n++;</span><br><span class="line"> QStringList tt=tempOption.<span class="built_in">at</span>(i<span class="number">-1</span>).<span class="built_in">split</span>(<span class="string">","</span>);</span><br><span class="line"> <span class="keyword">int</span> tmp=tt.<span class="built_in">at</span>(<span class="number">1</span>).<span class="built_in">toInt</span>();</span><br><span class="line"> p[i<span class="number">-1</span>]=tmp;</span><br><span class="line"> }</span><br><span class="line"> <span class="comment">//Part 2</span></span><br><span class="line"> <span class="keyword">bool</span> isOK;</span><br><span class="line"> <span class="keyword">int</span> front=QInputDialog::<span class="built_in">getText</span>(<span class="literal">NULL</span>,<span class="string">"Input Dialog :"</span>,<span class="string">"The starting week:"</span>,QLineEdit::Normal,<span class="string">""</span>,&isOK).<span class="built_in">toInt</span>();</span><br><span class="line"> <span class="keyword">int</span> rear=QInputDialog::<span class="built_in">getText</span>(<span class="literal">NULL</span>,<span class="string">"Input Dialog :"</span>,<span class="string">"The starting week:"</span>,QLineEdit::Normal,<span class="string">""</span>,&isOK).<span class="built_in">toInt</span>();</span><br><span class="line"></span><br><span class="line"> <span class="comment">//Part 3</span></span><br><span class="line"> QLineSeries*line=<span class="keyword">new</span> <span class="built_in">QLineSeries</span>();</span><br><span class="line"> line-><span class="built_in">setName</span>(<span class="built_in">QString</span>(<span class="string">"POI"</span>));</span><br><span class="line"> line-><span class="built_in">setVisible</span>(<span class="literal">true</span>);</span><br><span class="line"> line-><span class="built_in">setPointLabelsVisible</span>(<span class="literal">false</span>);</span><br><span class="line"> line-><span class="built_in">setPointsVisible</span>(<span class="literal">true</span>);</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=front;i<=rear;i++)</span><br><span class="line"> {</span><br><span class="line"> line-><span class="built_in">append</span>(i,p[i]);</span><br><span class="line"> }</span><br><span class="line"> QChart*chart=<span class="keyword">new</span> <span class="built_in">QChart</span>();</span><br><span class="line"> chart-><span class="built_in">setAnimationOptions</span>(QChart::AllAnimations);</span><br><span class="line"> chart-><span class="built_in">setLocalizeNumbers</span>(<span class="literal">true</span>);</span><br><span class="line"> chart-><span class="built_in">addSeries</span>(line);</span><br><span class="line"> chart-><span class="built_in">createDefaultAxes</span>();</span><br><span class="line"> chart-><span class="built_in">setTitle</span>(<span class="string">"POI checking-in data"</span>);</span><br><span class="line"> chart-><span class="built_in">legend</span>()-><span class="built_in">setVisible</span>(<span class="literal">true</span>);</span><br><span class="line"> chart-><span class="built_in">legend</span>()-><span class="built_in">setAlignment</span>(Qt::AlignBottom);<span class="comment">//底部对齐</span></span><br><span class="line"> chart-><span class="built_in">legend</span>()-><span class="built_in">setBackgroundVisible</span>(<span class="literal">true</span>);<span class="comment">//设置背景是否可视</span></span><br><span class="line"> chart-><span class="built_in">legend</span>()-><span class="built_in">setLabelColor</span>(<span class="built_in">QColor</span>(<span class="number">255</span>,<span class="number">128</span>,<span class="number">255</span>));<span class="comment">//设置标签颜色</span></span><br><span class="line"> chart-><span class="built_in">legend</span>()-><span class="built_in">setVisible</span>(<span class="literal">true</span>);<span class="comment">//设置是否可视</span></span><br><span class="line"> QFont font = chart-><span class="built_in">legend</span>()-><span class="built_in">font</span>();</span><br><span class="line"> QChartView*chartView=<span class="keyword">new</span> <span class="built_in">QChartView</span>(chart);</span><br><span class="line"> chartView-><span class="built_in">setRenderHint</span>(QPainter::Antialiasing);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> w.<span class="built_in">setCentralWidget</span>(chartView);</span><br><span class="line"> w.<span class="built_in">resize</span>(<span class="number">900</span>,<span class="number">600</span>);</span><br><span class="line"> w.<span class="built_in">show</span>();</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> a.<span class="built_in">exec</span>();</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div><h3 id="version-20">Version 2.0</h3><p>但是,我转念一想,第二个要求上课的时候小姐姐讲了很长时间如何自己设计构件,我觉得这样直接用<code>QInputDialog</code>太不负责任了,于是我打算推倒重建,结合上课所讲的知识来完成任务。</p><p>首先我打算把代码全部从<code>main</code>里面撤销,也不用<code>mainwindow</code>,而是自己定义一个<code>widget</code>来实现功能,我一开始其实只是想用widget来实现自定义输入的box,后来发现这样的话在不同文件间传输数据很麻烦,且不能满足各个功能的时序性。</p><p>我在将box的样式构建好之后,应该如何触发画图呢?思来想去发现应该在<code>main</code>函数里调用<code>QObject::connect</code>函数,但是直接调用会报错,为什么呢? 发现这里的<code>button</code>是在<code>widget</code>函数里调用的,而不是<code>widget</code>类,所以我们要把里面的一些小构建写在<code>widget.h</code>头文件的类里。</p><div class="highlight-container" data-rel="C++"><figure class="iseeu highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line">QLabel*label=<span class="keyword">new</span> <span class="built_in">QLabel</span>(<span class="string">"Please input the beginning week:"</span>);</span><br><span class="line">QLabel*labelbel=<span class="keyword">new</span> <span class="built_in">QLabel</span>(<span class="string">"Please input the ending week:"</span>);</span><br><span class="line">spinbox=<span class="keyword">new</span> <span class="built_in">QSpinBox</span>(<span class="keyword">this</span>);</span><br><span class="line">spinboxbox=<span class="keyword">new</span> <span class="built_in">QSpinBox</span>(<span class="keyword">this</span>);</span><br><span class="line">QSlider*slider=<span class="keyword">new</span> <span class="built_in">QSlider</span>(Qt::Horizontal,<span class="keyword">this</span>);</span><br><span class="line">QSlider*sliderder=<span class="keyword">new</span> <span class="built_in">QSlider</span>(Qt::Horizontal,<span class="keyword">this</span>);</span><br><span class="line">spinbox-><span class="built_in">setRange</span>(<span class="number">1</span>,<span class="number">52</span>);</span><br><span class="line">spinboxbox-><span class="built_in">setRange</span>(<span class="number">1</span>,<span class="number">52</span>);</span><br><span class="line">slider-><span class="built_in">setRange</span>(<span class="number">1</span>,<span class="number">52</span>);</span><br><span class="line">sliderder-><span class="built_in">setRange</span>(<span class="number">1</span>,<span class="number">52</span>);</span><br><span class="line">QObject::<span class="built_in">connect</span>(slider,&QSlider::valueChanged,spinbox,&QSpinBox::setValue);</span><br><span class="line"><span class="built_in"><span class="keyword">void</span></span> (QSpinBox:: *spinBoxSignal)(<span class="keyword">int</span>)=&QSpinBox::valueChanged;</span><br><span class="line">QObject::<span class="built_in">connect</span>(spinbox,spinBoxSignal,slider,&QSlider::setValue);</span><br><span class="line">QObject::<span class="built_in">connect</span>(sliderder,&QSlider::valueChanged,spinboxbox,&QSpinBox::setValue);</span><br><span class="line">QObject::<span class="built_in">connect</span>(spinboxbox,spinBoxSignal,sliderder,&QSlider::setValue);</span><br><span class="line">QVBoxLayout*layout=<span class="keyword">new</span> QVBoxLayout;</span><br><span class="line">btn=<span class="keyword">new</span> <span class="built_in">QPushButton</span>(<span class="string">"I have entered the value!"</span>);</span><br><span class="line">layout-><span class="built_in">addWidget</span>(label);</span><br><span class="line">layout-><span class="built_in">addWidget</span>(spinbox);</span><br><span class="line">layout-><span class="built_in">addWidget</span>(slider);</span><br><span class="line">layout-><span class="built_in">addWidget</span>(labelbel);</span><br><span class="line">layout-><span class="built_in">addWidget</span>(spinboxbox);</span><br><span class="line">layout-><span class="built_in">addWidget</span>(sliderder);</span><br><span class="line">layout-><span class="built_in">addWidget</span>(btn);</span><br><span class="line"><span class="keyword">this</span>-><span class="built_in">setLayout</span>(layout);</span><br><span class="line"><span class="keyword">this</span>-><span class="built_in">show</span>();</span><br></pre></td></tr></table></figure></div><p>而在<code>main</code>函数里,我们如此调用:</p><div class="highlight-container" data-rel="C++"><figure class="iseeu highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">(<span class="keyword">int</span> argc, <span class="keyword">char</span> *argv[])</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="function">QApplication <span class="title">a</span><span class="params">(argc, argv)</span></span>;</span><br><span class="line"> widget w;</span><br><span class="line"> QObject::<span class="built_in">connect</span>(w.btn,&QPushButton::clicked,&w,&widget::showline);</span><br><span class="line"> QObject::<span class="built_in">connect</span>(w.btn,&QPushButton::clicked,&w,&widget::close);</span><br><span class="line"> <span class="keyword">return</span> a.<span class="built_in">exec</span>();</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div><p>也就是在外层操控,一旦按钮被点开,直接用<code>main</code>函数来关闭窗口并运行画图函数<code>widget::showline()</code>。我们也只能无奈地把<code>showline</code>写在<code>widget</code>里了。</p><p>其他的部分改动不大,我们把数组也写进了类的头文件里,把读取文件的代码块直接移植到``widget`里,于是我们改进版大功告成。(改bug改了五个小时一直到ddl前半小时才提交……)</p><p>最后放一下最终的<code>widget.cpp</code>代码:</p><div class="highlight-container" data-rel="C++"><figure class="iseeu highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">"mainwindow.h"</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">"widget.h"</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><QApplication></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><QStringList></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><QTextStream></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><QtDebug></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><QChart></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><QSlider></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><QSpinBox></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><QHBoxLayout></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><QWidget></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><QLabel></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><QWidget></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><QLineSeries></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><QChartView></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string"><QPushButton></span></span></span><br><span class="line"><span class="function">QT_CHARTS_USE_NAMESPACE</span></span><br><span class="line"><span class="function"><span class="title">widget::widget</span><span class="params">(QWidget *parent)</span> : QWidget(parent)</span></span><br><span class="line"><span class="function">{</span></span><br><span class="line"> <span class="comment">//load a csv file from the disk</span></span><br><span class="line"> QString name=QFileDialog::<span class="built_in">getOpenFileName</span>(<span class="literal">NULL</span>,<span class="string">"Open File"</span>,<span class="string">"/home"</span>,<span class="string">"Excel(*.csv)"</span>);</span><br><span class="line"> <span class="comment">//if(name=="")return;</span></span><br><span class="line"> <span class="function">QFile <span class="title">file</span><span class="params">(name)</span></span>;</span><br><span class="line"> <span class="keyword">if</span>(!file.<span class="built_in">open</span>(QIODevice::ReadOnly))</span><br><span class="line"> <span class="built_in">qDebug</span>()<<<span class="string">"OPEN FILE FAILED!"</span>;</span><br><span class="line"> QTextStream *out=<span class="keyword">new</span> <span class="built_in">QTextStream</span>(&file);</span><br><span class="line"> QStringList tempOption=out-><span class="built_in">readAll</span>().<span class="built_in">split</span>(<span class="string">'\n'</span>);</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">1</span>;i<tempOption.<span class="built_in">count</span>();i++)</span><br><span class="line"> {</span><br><span class="line"> n++;</span><br><span class="line"> QStringList tt=tempOption.<span class="built_in">at</span>(i<span class="number">-1</span>).<span class="built_in">split</span>(<span class="string">","</span>);</span><br><span class="line"> <span class="keyword">int</span> tmp=tt.<span class="built_in">at</span>(<span class="number">1</span>).<span class="built_in">toInt</span>();</span><br><span class="line"> p[i<span class="number">-1</span>]=tmp;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="comment">//design the box to get the beginning and ending week</span></span><br><span class="line"> QLabel*label=<span class="keyword">new</span> <span class="built_in">QLabel</span>(<span class="string">"Please input the beginning week:"</span>);</span><br><span class="line"> QLabel*labelbel=<span class="keyword">new</span> <span class="built_in">QLabel</span>(<span class="string">"Please input the ending week:"</span>);</span><br><span class="line"> spinbox=<span class="keyword">new</span> <span class="built_in">QSpinBox</span>(<span class="keyword">this</span>);</span><br><span class="line"> spinboxbox=<span class="keyword">new</span> <span class="built_in">QSpinBox</span>(<span class="keyword">this</span>);</span><br><span class="line"> QSlider*slider=<span class="keyword">new</span> <span class="built_in">QSlider</span>(Qt::Horizontal,<span class="keyword">this</span>);</span><br><span class="line"> QSlider*sliderder=<span class="keyword">new</span> <span class="built_in">QSlider</span>(Qt::Horizontal,<span class="keyword">this</span>);</span><br><span class="line"> spinbox-><span class="built_in">setRange</span>(<span class="number">1</span>,<span class="number">52</span>);</span><br><span class="line"> spinboxbox-><span class="built_in">setRange</span>(<span class="number">1</span>,<span class="number">52</span>);</span><br><span class="line"> slider-><span class="built_in">setRange</span>(<span class="number">1</span>,<span class="number">52</span>);</span><br><span class="line"> sliderder-><span class="built_in">setRange</span>(<span class="number">1</span>,<span class="number">52</span>);</span><br><span class="line"> QObject::<span class="built_in">connect</span>(slider,&QSlider::valueChanged,spinbox,&QSpinBox::setValue);</span><br><span class="line"> <span class="built_in"><span class="keyword">void</span></span> (QSpinBox:: *spinBoxSignal)(<span class="keyword">int</span>)=&QSpinBox::valueChanged;</span><br><span class="line"> QObject::<span class="built_in">connect</span>(spinbox,spinBoxSignal,slider,&QSlider::setValue);</span><br><span class="line"> QObject::<span class="built_in">connect</span>(sliderder,&QSlider::valueChanged,spinboxbox,&QSpinBox::setValue);</span><br><span class="line"> QObject::<span class="built_in">connect</span>(spinboxbox,spinBoxSignal,sliderder,&QSlider::setValue);</span><br><span class="line"> QVBoxLayout*layout=<span class="keyword">new</span> QVBoxLayout;</span><br><span class="line"> btn=<span class="keyword">new</span> <span class="built_in">QPushButton</span>(<span class="string">"I have entered the value!"</span>);</span><br><span class="line"> layout-><span class="built_in">addWidget</span>(label);</span><br><span class="line"> layout-><span class="built_in">addWidget</span>(spinbox);</span><br><span class="line"> layout-><span class="built_in">addWidget</span>(slider);</span><br><span class="line"> layout-><span class="built_in">addWidget</span>(labelbel);</span><br><span class="line"> layout-><span class="built_in">addWidget</span>(spinboxbox);</span><br><span class="line"> layout-><span class="built_in">addWidget</span>(sliderder);</span><br><span class="line"> layout-><span class="built_in">addWidget</span>(btn);</span><br><span class="line"> <span class="keyword">this</span>-><span class="built_in">setLayout</span>(layout);</span><br><span class="line"> <span class="keyword">this</span>-><span class="built_in">show</span>();</span><br><span class="line">}</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">widget::showline</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="comment">//draw the chart based on the data</span></span><br><span class="line"> QLineSeries*line=<span class="keyword">new</span> <span class="built_in">QLineSeries</span>();</span><br><span class="line"> line-><span class="built_in">setName</span>(<span class="built_in">QString</span>(<span class="string">"POI"</span>));</span><br><span class="line"> line-><span class="built_in">setVisible</span>(<span class="literal">true</span>);</span><br><span class="line"> line-><span class="built_in">setPointLabelsVisible</span>(<span class="literal">false</span>);</span><br><span class="line"> line-><span class="built_in">setPointsVisible</span>(<span class="literal">true</span>);</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=spinbox-><span class="built_in">value</span>();i<=spinboxbox-><span class="built_in">value</span>();i++)</span><br><span class="line"> {</span><br><span class="line"> line-><span class="built_in">append</span>(i,p[i]);</span><br><span class="line"> }</span><br><span class="line"> QChart*chart=<span class="keyword">new</span> <span class="built_in">QChart</span>();</span><br><span class="line"> chart-><span class="built_in">setAnimationOptions</span>(QChart::AllAnimations);</span><br><span class="line"> chart-><span class="built_in">setLocalizeNumbers</span>(<span class="literal">true</span>);</span><br><span class="line"> chart-><span class="built_in">addSeries</span>(line);</span><br><span class="line"> chart-><span class="built_in">createDefaultAxes</span>();</span><br><span class="line"> chart-><span class="built_in">setTitle</span>(<span class="string">"POI checking-in data"</span>);</span><br><span class="line"> chart-><span class="built_in">legend</span>()-><span class="built_in">setVisible</span>(<span class="literal">true</span>);</span><br><span class="line"> chart-><span class="built_in">legend</span>()-><span class="built_in">setAlignment</span>(Qt::AlignBottom);</span><br><span class="line"> chart-><span class="built_in">legend</span>()-><span class="built_in">setBackgroundVisible</span>(<span class="literal">true</span>);</span><br><span class="line"> chart-><span class="built_in">legend</span>()-><span class="built_in">setLabelColor</span>(<span class="built_in">QColor</span>(<span class="number">255</span>,<span class="number">128</span>,<span class="number">255</span>));</span><br><span class="line"> chart-><span class="built_in">legend</span>()-><span class="built_in">setVisible</span>(<span class="literal">true</span>);</span><br><span class="line"> QFont font = chart-><span class="built_in">legend</span>()-><span class="built_in">font</span>();</span><br><span class="line"> QChartView*chartView=<span class="keyword">new</span> <span class="built_in">QChartView</span>(chart);</span><br><span class="line"> chartView-><span class="built_in">setRenderHint</span>(QPainter::Antialiasing);</span><br><span class="line"> chartView-><span class="built_in">resize</span>(<span class="number">900</span>,<span class="number">600</span>);</span><br><span class="line"> chartView-><span class="built_in">show</span>();</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div><p>“小作业”艰难完成。</p><h2 id="1qt-多线程的学习">1:Qt 多线程的学习</h2><p>由于大作业需要处理的数据量十分庞大,所以为了减少界面的卡顿,换而言之防止程序直接卡死,我们需要采用多线程的方式去优化我们的project.</p><p>本节参照bilibili上的一个<a href="%5BQt%E4%B8%AD%E5%A4%9A%E7%BA%BF%E7%A8%8B-%E7%BA%BF%E7%A8%8B%E6%B1%A0%E7%9A%84%E4%BD%BF%E7%94%A8-C/C++/qt_%E5%93%94%E5%93%A9%E5%93%94%E5%93%A9_bilibili%5D(https://www.bilibili.com/video/BV1iN411f7dY?from=search&seid=12670501396286840941&spm_id_from=333.337.0.0)">教程</a>而画大饼大致学习完成。</p><h3 id="线程类-qthread">线程类 QThread</h3><p>常用的共用成员函数:</p><div class="highlight-container" data-rel="C++"><figure class="iseeu highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// QThread 类常用 API</span></span><br><span class="line"><span class="comment">// 构造函数</span></span><br><span class="line">QThread::<span class="built_in">QThread</span>(QObject *parent = Q_NULLPTR);</span><br><span class="line"><span class="comment">// 判断线程中的任务是不是处理完毕了</span></span><br><span class="line"><span class="function"><span class="keyword">bool</span> <span class="title">QThread::isFinished</span><span class="params">()</span> <span class="keyword">const</span></span>;</span><br><span class="line"><span class="comment">// 判断子线程是不是在执行任务</span></span><br><span class="line"><span class="function"><span class="keyword">bool</span> <span class="title">QThread::isRunning</span><span class="params">()</span> <span class="keyword">const</span></span>;</span><br><span class="line"></span><br><span class="line"><span class="comment">// Qt中的线程可以设置优先级</span></span><br><span class="line"><span class="comment">// 得到当前线程的优先级</span></span><br><span class="line"><span class="function">Priority <span class="title">QThread::priority</span><span class="params">()</span> <span class="keyword">const</span></span>;</span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">QThread::setPriority</span><span class="params">(Priority priority)</span></span>;</span><br><span class="line">优先级:</span><br><span class="line"> QThread::IdlePriority --> 最低的优先级</span><br><span class="line"> QThread::LowestPriority</span><br><span class="line"> QThread::LowPriority</span><br><span class="line"> QThread::NormalPriority</span><br><span class="line"> QThread::HighPriority</span><br><span class="line"> QThread::HighestPriority</span><br><span class="line"> QThread::TimeCriticalPriority --> 最高的优先级</span><br><span class="line"> QThread::InheritPriority --> 子线程和其父线程的优先级相同, 默认是这个</span><br><span class="line"><span class="comment">// 退出线程, 停止底层的事件循环</span></span><br><span class="line"><span class="comment">// 退出线程的工作函数</span></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">QThread::exit</span><span class="params">(<span class="keyword">int</span> returnCode = <span class="number">0</span>)</span></span>;</span><br><span class="line"><span class="comment">// 调用线程退出函数之后, 线程不会马上退出因为当前任务有可能还没有完成, 调回用这个函数是</span></span><br><span class="line"><span class="comment">// 等待任务完成, 然后退出线程, 一般情况下会在 exit() 后边调用这个函数</span></span><br><span class="line"><span class="function"><span class="keyword">bool</span> <span class="title">QThread::wait</span><span class="params">(<span class="keyword">unsigned</span> <span class="keyword">long</span> time = ULONG_MAX)</span></span>;</span><br></pre></td></tr></table></figure></div><p>信号槽:</p><div class="highlight-container" data-rel="C++"><figure class="iseeu highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 和调用 exit() 效果是一样的</span></span><br><span class="line"><span class="comment">// 代用这个函数之后, 再调用 wait() 函数</span></span><br><span class="line">[slot] <span class="function"><span class="keyword">void</span> <span class="title">QThread::quit</span><span class="params">()</span></span>;</span><br><span class="line"><span class="comment">// 启动子线程</span></span><br><span class="line">[slot] <span class="function"><span class="keyword">void</span> <span class="title">QThread::start</span><span class="params">(Priority priority = InheritPriority)</span></span>;</span><br><span class="line"><span class="comment">// 线程退出, 可能是会马上终止线程, 一般情况下不使用这个函数</span></span><br><span class="line">[slot] <span class="function"><span class="keyword">void</span> <span class="title">QThread::terminate</span><span class="params">()</span></span>;</span><br><span class="line"></span><br><span class="line"><span class="comment">// 线程中执行的任务完成了, 发出该信号</span></span><br><span class="line"><span class="comment">// 任务函数中的处理逻辑执行完毕了</span></span><br><span class="line">[signal] <span class="function"><span class="keyword">void</span> <span class="title">QThread::finished</span><span class="params">()</span></span>;</span><br><span class="line"><span class="comment">// 开始工作之前发出这个信号, 一般不使用</span></span><br><span class="line">[signal] <span class="function"><span class="keyword">void</span> <span class="title">QThread::started</span><span class="params">()</span></span>;</span><br></pre></td></tr></table></figure></div><p>静态函数:</p><div class="highlight-container" data-rel="C++"><figure class="iseeu highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 返回一个指向管理当前执行线程的QThread的指针</span></span><br><span class="line">[<span class="keyword">static</span>] <span class="function">QThread *<span class="title">QThread::currentThread</span><span class="params">()</span></span>;</span><br><span class="line"><span class="comment">// 返回可以在系统上运行的理想线程数 == 和当前电脑的 CPU 核心数相同</span></span><br><span class="line">[<span class="keyword">static</span>] <span class="function"><span class="keyword">int</span> <span class="title">QThread::idealThreadCount</span><span class="params">()</span></span>;</span><br><span class="line"><span class="comment">// 线程休眠函数</span></span><br><span class="line">[<span class="keyword">static</span>] <span class="function"><span class="keyword">void</span> <span class="title">QThread::msleep</span><span class="params">(<span class="keyword">unsigned</span> <span class="keyword">long</span> msecs)</span></span>;<span class="comment">// 单位: 毫秒</span></span><br><span class="line">[<span class="keyword">static</span>] <span class="function"><span class="keyword">void</span> <span class="title">QThread::sleep</span><span class="params">(<span class="keyword">unsigned</span> <span class="keyword">long</span> secs)</span></span>;<span class="comment">// 单位: 秒</span></span><br><span class="line">[<span class="keyword">static</span>] <span class="function"><span class="keyword">void</span> <span class="title">QThread::usleep</span><span class="params">(<span class="keyword">unsigned</span> <span class="keyword">long</span> usecs)</span></span>;<span class="comment">// 单位: 微秒</span></span><br></pre></td></tr></table></figure></div><p>任务处理函数:</p><div class="highlight-container" data-rel="C++"><figure class="iseeu highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 子线程要处理什么任务, 需要写到 run() 中</span></span><br><span class="line">[<span class="keyword">virtual</span> <span class="keyword">protected</span>] <span class="function"><span class="keyword">void</span> <span class="title">QThread::run</span><span class="params">()</span></span>;</span><br></pre></td></tr></table></figure></div><h3 id="使用方式一到线程搞">使用方式一:到线程搞</h3><p>我们需要创建一个线程类的子类,继承QT中的线程类<code>QThread</code>。</p><p>我们需要这个线程处理的任务,写在父类的<code>run()</code>函数里面。重写父类的<code>run()</code>,编写子线程要处理的具体的业务流程。</p><p>在主线程里我们直接创建子线程的对象,用指针new一个出来,然后调用<code>start()</code>就可以直接启动了。(<code>start</code>相当于是间接启动<code>run()</code>)</p><p>父子线程之间的通信可以通过信号槽的方式。</p><p>看起来有手就行,写起来手呢?看一个<strong>示例</strong>:</p><p>首先我们需要捋顺<code>mainwindow.cpp</code>的逻辑:</p><div class="highlight-container" data-rel="C++"><figure class="iseeu highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">"mainwindow.h"</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">"ui_mainwindow.h"</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">"mythread.h"</span></span></span><br><span class="line"></span><br><span class="line">MainWindow::<span class="built_in">MainWindow</span>(QWidget *parent)</span><br><span class="line"> : <span class="built_in">QMainWindow</span>(parent)</span><br><span class="line"> , <span class="built_in">ui</span>(<span class="keyword">new</span> Ui::MainWindow)</span><br><span class="line">{</span><br><span class="line"> ui-><span class="built_in">setupUi</span>(<span class="keyword">this</span>);</span><br><span class="line"></span><br><span class="line"> <span class="comment">// 1. 创建子线程对象</span></span><br><span class="line"> Generate* gen = <span class="keyword">new</span> Generate;</span><br><span class="line"> BubbleSort* bubble = <span class="keyword">new</span> BubbleSort;</span><br><span class="line"> QuickSort* quick = <span class="keyword">new</span> QuickSort;</span><br><span class="line"></span><br><span class="line"> <span class="built_in">connect</span>(<span class="keyword">this</span>, &MainWindow::starting, gen, &Generate::recvNum);</span><br><span class="line"> <span class="comment">// 2. 启动子线程</span></span><br><span class="line"> <span class="built_in">connect</span>(ui->start, &QPushButton::clicked, <span class="keyword">this</span>, [=]()</span><br><span class="line"> {</span><br><span class="line"> emit <span class="built_in">starting</span>(<span class="number">10000</span>);</span><br><span class="line"> gen-><span class="built_in">start</span>();</span><br><span class="line"> });</span><br><span class="line"> <span class="built_in">connect</span>(gen, &Generate::sendArray, bubble, &BubbleSort::recvArray);</span><br><span class="line"> <span class="built_in">connect</span>(gen, &Generate::sendArray, quick, &QuickSort::recvArray);</span><br><span class="line"> <span class="comment">// 接收子线程发送的数据</span></span><br><span class="line"> <span class="built_in">connect</span>(gen, &Generate::sendArray, <span class="keyword">this</span>, [=](QVector<<span class="keyword">int</span>> list){</span><br><span class="line"> bubble-><span class="built_in">start</span>();</span><br><span class="line"> quick-><span class="built_in">start</span>();</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>; i<list.<span class="built_in">size</span>(); ++i)</span><br><span class="line"> {</span><br><span class="line"> ui->randList-><span class="built_in">addItem</span>(QString::<span class="built_in">number</span>(list.<span class="built_in">at</span>(i)));</span><br><span class="line"> }</span><br><span class="line"> });</span><br><span class="line"> <span class="built_in">connect</span>(bubble, &BubbleSort::finish, <span class="keyword">this</span>, [=](QVector<<span class="keyword">int</span>> list){</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>; i<list.<span class="built_in">size</span>(); ++i)</span><br><span class="line"> {</span><br><span class="line"> ui->bubbleList-><span class="built_in">addItem</span>(QString::<span class="built_in">number</span>(list.<span class="built_in">at</span>(i)));</span><br><span class="line"> }</span><br><span class="line"> });</span><br><span class="line"> <span class="built_in">connect</span>(quick, &QuickSort::finish, <span class="keyword">this</span>, [=](QVector<<span class="keyword">int</span>> list){</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>; i<list.<span class="built_in">size</span>(); ++i)</span><br><span class="line"> {</span><br><span class="line"> ui->quickList-><span class="built_in">addItem</span>(QString::<span class="built_in">number</span>(list.<span class="built_in">at</span>(i)));</span><br><span class="line"> }</span><br><span class="line"> });</span><br><span class="line"></span><br><span class="line"> <span class="built_in">connect</span>(<span class="keyword">this</span>, &MainWindow::destroy, <span class="keyword">this</span>, [=]()</span><br><span class="line"> {</span><br><span class="line"> gen-><span class="built_in">quit</span>();</span><br><span class="line"> gen-><span class="built_in">wait</span>();</span><br><span class="line"> gen-><span class="built_in">deleteLater</span>(); <span class="comment">// delete t1;</span></span><br><span class="line"></span><br><span class="line"> bubble-><span class="built_in">quit</span>();</span><br><span class="line"> bubble-><span class="built_in">wait</span>();</span><br><span class="line"> bubble-><span class="built_in">deleteLater</span>();</span><br><span class="line"></span><br><span class="line"> quick-><span class="built_in">quit</span>();</span><br><span class="line"> quick-><span class="built_in">wait</span>();</span><br><span class="line"> quick-><span class="built_in">deleteLater</span>();</span><br><span class="line"> });</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">MainWindow::~<span class="built_in">MainWindow</span>()</span><br><span class="line">{</span><br><span class="line"> <span class="keyword">delete</span> ui;</span><br><span class="line">}</span><br><span class="line"></span><br></pre></td></tr></table></figure></div><p>而分别的线程我们是如何实现的呢?看线程类的cpp函数,注意观察不同的类传递不同的信号:</p><div class="highlight-container" data-rel="C++"><figure class="iseeu highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">"mythread.h"</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><QElapsedTimer></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><QDebug></span></span></span><br><span class="line"></span><br><span class="line">Generate::<span class="built_in">Generate</span>(QObject *parent) : <span class="built_in">QThread</span>(parent)</span><br><span class="line">{</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">Generate::recvNum</span><span class="params">(<span class="keyword">int</span> num)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> m_num = num;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">Generate::run</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="built_in">qDebug</span>() << <span class="string">"生成随机数的线程的线程地址: "</span> << QThread::<span class="built_in">currentThread</span>();</span><br><span class="line"> QVector<<span class="keyword">int</span>> list;</span><br><span class="line"> QElapsedTimer time;</span><br><span class="line"> time.<span class="built_in">start</span>();</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>; i<m_num; ++i)</span><br><span class="line"> {</span><br><span class="line"> list.<span class="built_in">push_back</span>(<span class="built_in">qrand</span>() % <span class="number">100000</span>);</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">int</span> milsec = time.<span class="built_in">elapsed</span>();</span><br><span class="line"> <span class="built_in">qDebug</span>() << <span class="string">"生成"</span> << m_num << <span class="string">"个随机数总共用时:"</span> << milsec << <span class="string">"毫秒"</span>;</span><br><span class="line"> <span class="function">emit <span class="title">sendArray</span><span class="params">(list)</span></span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">BubbleSort::<span class="built_in">BubbleSort</span>(QObject *parent) : <span class="built_in">QThread</span>(parent)</span><br><span class="line">{</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">BubbleSort::recvArray</span><span class="params">(QVector<<span class="keyword">int</span>> list)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> m_list = list;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">BubbleSort::run</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="built_in">qDebug</span>() << <span class="string">"冒泡排序的线程的线程地址: "</span> << QThread::<span class="built_in">currentThread</span>();</span><br><span class="line"> QElapsedTimer time;</span><br><span class="line"> time.<span class="built_in">start</span>();</span><br><span class="line"> <span class="keyword">int</span> temp;</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>; i<m_list.<span class="built_in">size</span>(); ++i)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> j=<span class="number">0</span>; j<m_list.<span class="built_in">size</span>()-i<span class="number">-1</span>; ++j)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(m_list[j] > m_list[j+<span class="number">1</span>])</span><br><span class="line"> {</span><br><span class="line"> temp = m_list[j];</span><br><span class="line"> m_list[j] = m_list[j+<span class="number">1</span>];</span><br><span class="line"> m_list[j+<span class="number">1</span>] = temp;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">int</span> milsec = time.<span class="built_in">elapsed</span>();</span><br><span class="line"> <span class="built_in">qDebug</span>() << <span class="string">"冒泡排序用时"</span> << milsec << <span class="string">"毫秒"</span>;</span><br><span class="line"> <span class="function">emit <span class="title">finish</span><span class="params">(m_list)</span></span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">QuickSort::<span class="built_in">QuickSort</span>(QObject *parent) : <span class="built_in">QThread</span>(parent)</span><br><span class="line">{</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">QuickSort::recvArray</span><span class="params">(QVector<<span class="keyword">int</span>> list)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> m_list = list;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">QuickSort::run</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="built_in">qDebug</span>() << <span class="string">"快速排序的线程的线程地址: "</span> << QThread::<span class="built_in">currentThread</span>();</span><br><span class="line"> QElapsedTimer time;</span><br><span class="line"> time.<span class="built_in">start</span>();</span><br><span class="line"> <span class="built_in">quickSort</span>(m_list, <span class="number">0</span>, m_list.<span class="built_in">size</span>()<span class="number">-1</span>);</span><br><span class="line"> <span class="keyword">int</span> milsec = time.<span class="built_in">elapsed</span>();</span><br><span class="line"> <span class="built_in">qDebug</span>() << <span class="string">"快速排序用时"</span> << milsec << <span class="string">"毫秒"</span>;</span><br><span class="line"> <span class="function">emit <span class="title">finish</span><span class="params">(m_list)</span></span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">QuickSort::quickSort</span><span class="params">(QVector<<span class="keyword">int</span>> &s, <span class="keyword">int</span> l, <span class="keyword">int</span> r)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">if</span> (l < r)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">int</span> i = l, j = r;</span><br><span class="line"> <span class="comment">// 拿出第一个元素, 保存到x中,第一个位置成为一个坑</span></span><br><span class="line"> <span class="keyword">int</span> x = s[l];</span><br><span class="line"> <span class="keyword">while</span> (i < j)</span><br><span class="line"> {</span><br><span class="line"> <span class="comment">// 从右向左找小于x的数</span></span><br><span class="line"> <span class="keyword">while</span> (i < j && s[j] >= x)</span><br><span class="line"> {</span><br><span class="line"> <span class="comment">//左移, 直到遇到小于等于x的数</span></span><br><span class="line"> j--;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span> (i < j)</span><br><span class="line"> {</span><br><span class="line"> <span class="comment">//将右侧找到的小于x的元素放入左侧坑中, 右侧出现一个坑</span></span><br><span class="line"> <span class="comment">//左侧元素索引后移</span></span><br><span class="line"> s[i++] = s[j];</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="comment">// 从左向右找大于等于x的数</span></span><br><span class="line"> <span class="keyword">while</span> (i < j && s[i] < x)</span><br><span class="line"> {</span><br><span class="line"> <span class="comment">//右移, 直到遇到大于x的数</span></span><br><span class="line"> i++;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span> (i < j)</span><br><span class="line"> {</span><br><span class="line"> <span class="comment">//将左侧找到的元素放入右侧坑中, 左侧出现一个坑</span></span><br><span class="line"> <span class="comment">//右侧元素索引向前移动</span></span><br><span class="line"> s[j--] = s[i];</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="comment">//此时 i=j,将保存在x中的数填入坑中</span></span><br><span class="line"> s[i] = x;</span><br><span class="line"> <span class="built_in">quickSort</span>(s, l, i - <span class="number">1</span>); <span class="comment">// 递归调用</span></span><br><span class="line"> <span class="built_in">quickSort</span>(s, i + <span class="number">1</span>, r);</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div><p>以上是多线程的第一种实现方式,直接用<code>QThread</code>写类,简单粗暴。</p><h3 id="使用方式二搞到线程">使用方式二:搞到线程</h3><p>Qt 提供的第二种线程的创建方式弥补了第一种方式的缺点,用起来更加灵活,但是这种方式写起来会相对复杂一些,我们看一看具体操作:</p><p>首先我们创建一个继承<code>QObject</code>的类,这个类后面我们用来执行第一种方式<code>QThread</code>类中<code>run()</code>函数所做的事情。</p><p>在类里添加一个公共的成员函数,函数体就是我们要子线程中致性的业务逻辑。</p><div class="highlight-container" data-rel="C++"><figure class="iseeu highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">MyWork</span>:</span><span class="keyword">public</span> QObject</span><br><span class="line">{</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"> .......</span><br><span class="line"> <span class="comment">// 函数名自己指定, 叫什么都可以, 参数可以根据实际需求添加</span></span><br><span class="line"> <span class="function"><span class="keyword">void</span> <span class="title">working</span><span class="params">()</span></span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div><p>在主线程中创建一个<code>QThread</code>对象,此即子线程的对象。在主线程中创建工作的类对象(注:不要给创建的对象指定父对象)。</p><p>将工作类对象移动到创建的子线程对象中,需要调用<code>QObject</code>类的<code>moveToThread()</code>方法。</p><p>启动子线程,调用工作函数,这时候线程便启动了,但是移动到线程中的工作对象并没有工作,这时我们调用工作对象的工作函数,让这个函数开始执行,这时候便在移动到的那个子线程中运行。</p><p>与方式一的代码功能相同,我们用方式二也实现一个:</p><p>首先理解这个代码,先看<code>mainwindow.cpp</code>文件的代码逻辑:</p><div class="highlight-container" data-rel="C++"><figure class="iseeu highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">"mainwindow.h"</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">"ui_mainwindow.h"</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">"mythread.h"</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><QThread></span></span></span><br><span class="line"></span><br><span class="line">MainWindow::<span class="built_in">MainWindow</span>(QWidget *parent)</span><br><span class="line"> : <span class="built_in">QMainWindow</span>(parent)</span><br><span class="line"> , <span class="built_in">ui</span>(<span class="keyword">new</span> Ui::MainWindow)</span><br><span class="line">{</span><br><span class="line"> ui-><span class="built_in">setupUi</span>(<span class="keyword">this</span>);</span><br><span class="line"></span><br><span class="line"> <span class="comment">// 1. 创建子线程对象</span></span><br><span class="line"> QThread* t1 = <span class="keyword">new</span> QThread;</span><br><span class="line"> QThread* t2 = <span class="keyword">new</span> QThread;</span><br><span class="line"> QThread* t3 = <span class="keyword">new</span> QThread;</span><br><span class="line"></span><br><span class="line"> <span class="comment">// 2. 创建任务类的对象</span></span><br><span class="line"> Generate* gen = <span class="keyword">new</span> Generate;</span><br><span class="line"> BubbleSort* bubble = <span class="keyword">new</span> BubbleSort;</span><br><span class="line"> QuickSort* quick = <span class="keyword">new</span> QuickSort;</span><br><span class="line"></span><br><span class="line"> <span class="comment">// 3. 将任务对象移动到某个子线程中</span></span><br><span class="line"> gen-><span class="built_in">moveToThread</span>(t1);</span><br><span class="line"> bubble-><span class="built_in">moveToThread</span>(t2);</span><br><span class="line"> quick-><span class="built_in">moveToThread</span>(t3);</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> <span class="built_in">connect</span>(<span class="keyword">this</span>, &MainWindow::starting, gen, &Generate::working);</span><br><span class="line"> <span class="comment">// 2. 启动子线程</span></span><br><span class="line"> <span class="built_in">connect</span>(ui->start, &QPushButton::clicked, <span class="keyword">this</span>, [=]()</span><br><span class="line"> {</span><br><span class="line"> emit <span class="built_in">starting</span>(<span class="number">10000</span>);</span><br><span class="line"> t1-><span class="built_in">start</span>();</span><br><span class="line"> });</span><br><span class="line"> <span class="built_in">connect</span>(gen, &Generate::sendArray, bubble, &BubbleSort::working);</span><br><span class="line"> <span class="built_in">connect</span>(gen, &Generate::sendArray, quick, &QuickSort::working);</span><br><span class="line"> <span class="comment">// 接收子线程发送的数据</span></span><br><span class="line"> <span class="built_in">connect</span>(gen, &Generate::sendArray, <span class="keyword">this</span>, [=](QVector<<span class="keyword">int</span>> list){</span><br><span class="line"> t2-><span class="built_in">start</span>();</span><br><span class="line"> t3-><span class="built_in">start</span>();</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>; i<list.<span class="built_in">size</span>(); ++i)</span><br><span class="line"> {</span><br><span class="line"> ui->randList-><span class="built_in">addItem</span>(QString::<span class="built_in">number</span>(list.<span class="built_in">at</span>(i)));</span><br><span class="line"> }</span><br><span class="line"> });</span><br><span class="line"> <span class="built_in">connect</span>(bubble, &BubbleSort::finish, <span class="keyword">this</span>, [=](QVector<<span class="keyword">int</span>> list){</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>; i<list.<span class="built_in">size</span>(); ++i)</span><br><span class="line"> {</span><br><span class="line"> ui->bubbleList-><span class="built_in">addItem</span>(QString::<span class="built_in">number</span>(list.<span class="built_in">at</span>(i)));</span><br><span class="line"> }</span><br><span class="line"> });</span><br><span class="line"> <span class="built_in">connect</span>(quick, &QuickSort::finish, <span class="keyword">this</span>, [=](QVector<<span class="keyword">int</span>> list){</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>; i<list.<span class="built_in">size</span>(); ++i)</span><br><span class="line"> {</span><br><span class="line"> ui->quickList-><span class="built_in">addItem</span>(QString::<span class="built_in">number</span>(list.<span class="built_in">at</span>(i)));</span><br><span class="line"> }</span><br><span class="line"> });</span><br><span class="line"></span><br><span class="line"> <span class="built_in">connect</span>(<span class="keyword">this</span>, &MainWindow::destroy, <span class="keyword">this</span>, [=]()</span><br><span class="line"> {</span><br><span class="line"> t1-><span class="built_in">quit</span>();</span><br><span class="line"> t1-><span class="built_in">wait</span>();</span><br><span class="line"> t1-><span class="built_in">deleteLater</span>(); <span class="comment">// delete t1;</span></span><br><span class="line"></span><br><span class="line"> t2-><span class="built_in">quit</span>();</span><br><span class="line"> t2-><span class="built_in">wait</span>();</span><br><span class="line"> t2-><span class="built_in">deleteLater</span>();</span><br><span class="line"></span><br><span class="line"> t3-><span class="built_in">quit</span>();</span><br><span class="line"> t3-><span class="built_in">wait</span>();</span><br><span class="line"> t3-><span class="built_in">deleteLater</span>();</span><br><span class="line"></span><br><span class="line"> gen-><span class="built_in">deleteLater</span>();</span><br><span class="line"> bubble-><span class="built_in">deleteLater</span>();</span><br><span class="line"> quick-><span class="built_in">deleteLater</span>();</span><br><span class="line"> });</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">MainWindow::~<span class="built_in">MainWindow</span>()</span><br><span class="line">{</span><br><span class="line"> <span class="keyword">delete</span> ui;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div><p>可以看到我们先开线程后各自工作,然后信号传输还是如方式一,不过细化到具体的工作类更加直观。</p><p>再来看一下工作类是如何实现的:</p><div class="highlight-container" data-rel="C++"><figure class="iseeu highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">"mythread.h"</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><QElapsedTimer></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><QDebug></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><QThread></span></span></span><br><span class="line"></span><br><span class="line">Generate::<span class="built_in">Generate</span>(QObject *parent) : <span class="built_in">QObject</span>(parent)</span><br><span class="line">{</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">Generate::working</span><span class="params">(<span class="keyword">int</span> num)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="built_in">qDebug</span>() << <span class="string">"生成随机数的线程的线程地址: "</span> << QThread::<span class="built_in">currentThread</span>();</span><br><span class="line"> QVector<<span class="keyword">int</span>> list;</span><br><span class="line"> QElapsedTimer time;</span><br><span class="line"> time.<span class="built_in">start</span>();</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>; i<num; ++i)</span><br><span class="line"> {</span><br><span class="line"> list.<span class="built_in">push_back</span>(<span class="built_in">qrand</span>() % <span class="number">100000</span>);</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">int</span> milsec = time.<span class="built_in">elapsed</span>();</span><br><span class="line"> <span class="built_in">qDebug</span>() << <span class="string">"生成"</span> << num << <span class="string">"个随机数总共用时:"</span> << milsec << <span class="string">"毫秒"</span>;</span><br><span class="line"> <span class="function">emit <span class="title">sendArray</span><span class="params">(list)</span></span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">BubbleSort::<span class="built_in">BubbleSort</span>(QObject *parent) : <span class="built_in">QObject</span>(parent)</span><br><span class="line">{</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">BubbleSort::working</span><span class="params">(QVector<<span class="keyword">int</span>> list)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="built_in">qDebug</span>() << <span class="string">"冒泡排序的线程的线程地址: "</span> << QThread::<span class="built_in">currentThread</span>();</span><br><span class="line"> QElapsedTimer time;</span><br><span class="line"> time.<span class="built_in">start</span>();</span><br><span class="line"> <span class="keyword">int</span> temp;</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>; i<list.<span class="built_in">size</span>(); ++i)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> j=<span class="number">0</span>; j<list.<span class="built_in">size</span>()-i<span class="number">-1</span>; ++j)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span>(list[j] > list[j+<span class="number">1</span>])</span><br><span class="line"> {</span><br><span class="line"> temp = list[j];</span><br><span class="line"> list[j] = list[j+<span class="number">1</span>];</span><br><span class="line"> list[j+<span class="number">1</span>] = temp;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">int</span> milsec = time.<span class="built_in">elapsed</span>();</span><br><span class="line"> <span class="built_in">qDebug</span>() << <span class="string">"冒泡排序用时"</span> << milsec << <span class="string">"毫秒"</span>;</span><br><span class="line"> <span class="function">emit <span class="title">finish</span><span class="params">(list)</span></span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">QuickSort::<span class="built_in">QuickSort</span>(QObject *parent) : <span class="built_in">QObject</span>(parent)</span><br><span class="line">{</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">QuickSort::working</span><span class="params">(QVector<<span class="keyword">int</span>> list)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="built_in">qDebug</span>() << <span class="string">"快速排序的线程的线程地址: "</span> << QThread::<span class="built_in">currentThread</span>();</span><br><span class="line"> QElapsedTimer time;</span><br><span class="line"> time.<span class="built_in">start</span>();</span><br><span class="line"> <span class="built_in">quickSort</span>(list, <span class="number">0</span>, list.<span class="built_in">size</span>()<span class="number">-1</span>);</span><br><span class="line"> <span class="keyword">int</span> milsec = time.<span class="built_in">elapsed</span>();</span><br><span class="line"> <span class="built_in">qDebug</span>() << <span class="string">"快速排序用时"</span> << milsec << <span class="string">"毫秒"</span>;</span><br><span class="line"> <span class="function">emit <span class="title">finish</span><span class="params">(list)</span></span>;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">QuickSort::quickSort</span><span class="params">(QVector<<span class="keyword">int</span>> &s, <span class="keyword">int</span> l, <span class="keyword">int</span> r)</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="keyword">if</span> (l < r)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">int</span> i = l, j = r;</span><br><span class="line"> <span class="comment">// 拿出第一个元素, 保存到x中,第一个位置成为一个坑</span></span><br><span class="line"> <span class="keyword">int</span> x = s[l];</span><br><span class="line"> <span class="keyword">while</span> (i < j)</span><br><span class="line"> {</span><br><span class="line"> <span class="comment">// 从右向左找小于x的数</span></span><br><span class="line"> <span class="keyword">while</span> (i < j && s[j] >= x)</span><br><span class="line"> {</span><br><span class="line"> <span class="comment">//左移, 直到遇到小于等于x的数</span></span><br><span class="line"> j--;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span> (i < j)</span><br><span class="line"> {</span><br><span class="line"> <span class="comment">//将右侧找到的小于x的元素放入左侧坑中, 右侧出现一个坑</span></span><br><span class="line"> <span class="comment">//左侧元素索引后移</span></span><br><span class="line"> s[i++] = s[j];</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="comment">// 从左向右找大于等于x的数</span></span><br><span class="line"> <span class="keyword">while</span> (i < j && s[i] < x)</span><br><span class="line"> {</span><br><span class="line"> <span class="comment">//右移, 直到遇到大于x的数</span></span><br><span class="line"> i++;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">if</span> (i < j)</span><br><span class="line"> {</span><br><span class="line"> <span class="comment">//将左侧找到的元素放入右侧坑中, 左侧出现一个坑</span></span><br><span class="line"> <span class="comment">//右侧元素索引向前移动</span></span><br><span class="line"> s[j--] = s[i];</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> <span class="comment">//此时 i=j,将保存在x中的数填入坑中</span></span><br><span class="line"> s[i] = x;</span><br><span class="line"> <span class="built_in">quickSort</span>(s, l, i - <span class="number">1</span>); <span class="comment">// 递归调用</span></span><br><span class="line"> <span class="built_in">quickSort</span>(s, i + <span class="number">1</span>, r);</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br></pre></td></tr></table></figure></div><p>内容与方式一类似,注意继承的父类是不同的,这只是单纯工作的类!</p><p>使用这种多线程方式,假设有多个不相关的业务流程需要被处理,那么就可以创建多个类似于 MyWork 的类,将业务流程放多类的公共成员函数中,然后将这个业务类的实例对象移动到对应的子线程中 moveToThread() 就可以了,这样可以让编写的程序更加灵活,可读性更强,更易于维护。</p>]]></content>
<tags>
<tag> notes </tag>
</tags>
</entry>
<entry>
<title>Qt GUI Programming Notes</title>
<link href="/2021/12/01/Qt%20GUI%20Programming%20Notes/"/>
<url>/2021/12/01/Qt%20GUI%20Programming%20Notes/</url>
<content type="html"><![CDATA[<h1 id="qt-gui-programming-notes">Qt GUI Programming Notes</h1><ul><li>Yevzwming Dec.1 2021</li></ul><h2 id="1-helloworld">1. hello,world</h2><p>创建一个 widget application, 先认识一下这个main函数:</p><p>我们将 main.cpp 修改如下:</p><div class="highlight-container" data-rel="C++"><figure class="iseeu highlight c++"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><QApplication></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><QLabel></span></span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">(<span class="keyword">int</span> argc, <span class="keyword">char</span> *argv[])</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="function">QApplication <span class="title">app</span><span class="params">(argc, argv)</span></span>;</span><br><span class="line"></span><br><span class="line"> <span class="function">QLabel <span class="title">label</span><span class="params">(<span class="string">"Hello, world"</span>)</span></span>;</span><br><span class="line"> label.<span class="built_in">show</span>();</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> app.<span class="built_in">exec</span>();</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div><p><img lazyload src="/images/loading.svg" data-src="http://files.devbean.net/images/2012/08/qt-hello-world.png" alt="Qt HelloWorld 程序运行结果"></p><p>前两行是 C++ 的 include 语句,这里我们引入的是<code>QApplication</code>以及<code>QLabel</code>这两个类。<code>main()</code>函数中第一句是创建一个<code>QApplication</code>类的实例。对于 Qt 程序来说,<code>main()</code>函数一般以创建 application 对象(GUI 程序是<code>QApplication</code>,非 GUI 程序是<code>QCoreApplication</code>。<code>QApplication</code>实际上是<code>QCoreApplication</code>的子类。)开始,后面才是实际业务的代码。这个对象用于管理 Qt 程序的生命周期,开启事件循环,这一切都是必不可少的。在我们创建了<code>QApplication</code>对象之后,直接创建一个<code>QLabel</code>对象,构造函数赋值“Hello, world”,当然就是能够在<code>QLabel</code>上面显示这行文本。最后调用<code>QLabel</code>的<code>show()</code>函数将其显示出来。<code>main()</code>函数最后,调用<code>app.exec()</code>,开启事件循环。我们现在可以简单地将事件循环理解成一段无限循环。正因为如此,我们在栈上构建了<code>QLabel</code>对象,却能够一直显示在那里(试想,如果不是无限循环,<code>main()</code>函数立刻会退出,<code>QLabel</code>对象当然也就直接析构了)。</p><h2 id="2-信号槽">2. 信号槽</h2><p>所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣,它就会使用连接(connect)函数,意思是,用自己的一个函数(成为槽(slot))来处理这个信号。也就是说,当信号发出时,被连接的槽函数会自动被回调。这就类似观察者模式:当发生了感兴趣的事件,某一个操作就会被自动触发。</p><div class="highlight-container" data-rel="Arduino"><figure class="iseeu highlight arduino"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><QApplication></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><QPushButton></span></span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">(<span class="keyword">int</span> argc, <span class="keyword">char</span> *argv[])</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="function">QApplication <span class="title">app</span><span class="params">(argc, argv)</span></span>;</span><br><span class="line"></span><br><span class="line"> <span class="function">QPushButton <span class="title">button</span><span class="params">(<span class="string">"Quit"</span>)</span></span>;</span><br><span class="line"> QObject::<span class="built_in">connect</span>(&button, &QPushButton::clicked, &QApplication::quit);</span><br><span class="line"> button.<span class="built_in">show</span>();</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> app.<span class="built_in">exec</span>();</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div><p>点击运行,我们会看到一个按钮,上面有“Quit”字样。点击按钮,程序退出。</p><p>我们这里要仔细分析<code>QObject::connect()</code>这个函数。</p><p>我们先来看看<code>connect()</code>函数最常用的一般形式:</p><div class="highlight-container" data-rel="Qml"><figure class="iseeu highlight qml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">connect(sender, <span class="keyword">signal</span><span class="string"></span>, receiver, slot);</span><br></pre></td></tr></table></figure></div><p><code>connect()</code>一般会使用前面四个参数,第一个是发出信号的对象,第二个是发送对象发出的信号,第三个是接收信号的对象,第四个是接收对象在接收到信号之后所需要调用的函数。也就是说,当 sender 发出了 signal 信号之后,会自动调用 receiver 的 slot 函数。</p><p>当我们的 button 发出了<code>clicked()</code>信号时,会调用<code>QApplication</code>的<code>quit()</code>函数,使程序退出。</p><p>借助 Qt 5 的信号槽语法,我们可以将一个对象的信号连接到 Lambda 表达式,例如:</p><div class="highlight-container" data-rel="Arduino"><figure class="iseeu highlight arduino"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><QApplication></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><QPushButton></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><QDebug></span></span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">(<span class="keyword">int</span> argc, <span class="keyword">char</span> *argv[])</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="function">QApplication <span class="title">app</span><span class="params">(argc, argv)</span></span>;</span><br><span class="line"></span><br><span class="line"> <span class="function">QPushButton <span class="title">button</span><span class="params">(<span class="string">"Quit"</span>)</span></span>;</span><br><span class="line"> QObject::<span class="built_in">connect</span>(&button, &QPushButton::clicked, [](<span class="keyword">bool</span>) {</span><br><span class="line"> <span class="built_in">qDebug</span>() << <span class="string">"You clicked me!"</span>;</span><br><span class="line"> });</span><br><span class="line"> button.<span class="built_in">show</span>();</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> app.<span class="built_in">exec</span>();</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div><p>注意这里的 Lambda 表达式接收一个 bool 参数,这是因为<code>QPushButton</code>的<code>clicked()</code>信号实际上是有一个参数的。Lambda 表达式中的<code>qDebug()</code>类似于<code>cout</code>,将后面的字符串打印到标准输出。</p><h2 id="3-添加动作">3. 添加动作</h2><p>Qt 使用<code>QAction</code>类作为动作。顾名思义,这个类就是代表了窗口的一个“动作”,这个动作可能显示在菜单,作为一个菜单项,当用户点击该菜单项,对用户的点击做出响应;也可能在工具栏,作为一个工具栏按钮,用户点击这个按钮就可以执行相应的操作。有一点值得注意:无论是出现在菜单栏还是工具栏,用户选择之后,所执行的动作应该都是一样的。因此,Qt 并没有专门的菜单项类,只是使用一个<code>QAction</code>类,抽象出公共的动作。当我们把<code>QAction</code>对象添加到菜单,就显示成一个菜单项,添加到工具栏,就显示成一个工具按钮。用户可以通过点击菜单项、点击工具栏按钮、点击快捷键来激活这个动作。</p><p><code>QAction</code>包含了图标、菜单文字、快捷键、状态栏文字、浮动帮助等信息。当把一个<code>QAction</code>对象添加到程序中时,Qt 自己选择使用哪个属性来显示,无需我们关心。同时,Qt 能够保证把<code>QAction</code>对象添加到不同的菜单、工具栏时,显示内容是同步的。也就是说,如果我们在菜单中修改了<code>QAction</code>的图标,那么在工具栏上面这个<code>QAction</code>所对应的按钮的图标也会同步修改。</p><p>示例:</p><div class="highlight-container" data-rel="Arduino"><figure class="iseeu highlight arduino"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// ========== mainwindow.h</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">ifndef</span> MAINWINDOW_H</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> MAINWINDOW_H</span></span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><QMainWindow></span></span></span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">MainWindow</span> :</span> <span class="keyword">public</span> QMainWindow</span><br><span class="line">{</span><br><span class="line"> Q_OBJECT</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"> <span class="built_in">MainWindow</span>(QWidget *parent = <span class="number">0</span>);</span><br><span class="line"> ~<span class="built_in">MainWindow</span>();</span><br><span class="line"></span><br><span class="line"><span class="keyword">private</span>:</span><br><span class="line"> <span class="function"><span class="keyword">void</span> <span class="title">open</span><span class="params">()</span></span>;</span><br><span class="line"></span><br><span class="line"> QAction *openAction;</span><br><span class="line">};</span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="meta-keyword">endif</span> <span class="comment">// MAINWINDOW_H</span></span></span><br><span class="line"></span><br><span class="line"><span class="comment">// ========== mainwindow.cpp</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><QAction></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><QMenuBar></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><QMessageBox></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><QStatusBar></span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string"><QToolBar></span></span></span><br><span class="line"></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span> <span class="meta-string">"mainwindow.h"</span></span></span><br><span class="line"></span><br><span class="line">MainWindow::<span class="built_in">MainWindow</span>(QWidget *parent) :</span><br><span class="line"> <span class="built_in">QMainWindow</span>(parent)</span><br><span class="line">{</span><br><span class="line"> <span class="built_in">setWindowTitle</span>(<span class="built_in">tr</span>(<span class="string">"Main Window"</span>));</span><br><span class="line"></span><br><span class="line"> openAction = <span class="keyword">new</span> <span class="built_in">QAction</span>(<span class="built_in">QIcon</span>(<span class="string">":/images/doc-open"</span>), <span class="built_in">tr</span>(<span class="string">"&Open..."</span>), <span class="keyword">this</span>);</span><br><span class="line"> openAction-><span class="built_in">setShortcuts</span>(QKeySequence::Open);</span><br><span class="line"> openAction-><span class="built_in">setStatusTip</span>(<span class="built_in">tr</span>(<span class="string">"Open an existing file"</span>));</span><br><span class="line"> <span class="built_in">connect</span>(openAction, &QAction::triggered, <span class="keyword">this</span>, &MainWindow::open);</span><br><span class="line"></span><br><span class="line"> QMenu *file = <span class="built_in">menuBar</span>()-><span class="built_in">addMenu</span>(<span class="built_in">tr</span>(<span class="string">"&File"</span>));</span><br><span class="line"> file-><span class="built_in">addAction</span>(openAction);</span><br><span class="line"></span><br><span class="line"> QToolBar *toolBar = <span class="built_in">addToolBar</span>(<span class="built_in">tr</span>(<span class="string">"&File"</span>));</span><br><span class="line"> toolBar-><span class="built_in">addAction</span>(openAction);</span><br><span class="line"></span><br><span class="line"> <span class="built_in">statusBar</span>() ;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">MainWindow::~<span class="built_in">MainWindow</span>()</span><br><span class="line">{</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">MainWindow::open</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> QMessageBox::<span class="built_in">information</span>(<span class="keyword">this</span>, <span class="built_in">tr</span>(<span class="string">"Information"</span>), <span class="built_in">tr</span>(<span class="string">"Open"</span>));</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div><p>上面的代码分别属于两个文件:mainwindow.h 和 mainwindow.cpp。为了让 MainWindow 运行起来,我们还需要修改 main() 函数如下:</p><div class="highlight-container" data-rel="Aspectj"><figure class="iseeu highlight aspectj"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">(<span class="keyword">int</span> argc, <span class="keyword">char</span> *argv[])</span></span></span><br><span class="line"><span class="function"></span>{</span><br><span class="line"> <span class="function">QApplication <span class="title">app</span><span class="params">(argc, argv)</span></span>;</span><br><span class="line"></span><br><span class="line"> MainWindow win;</span><br><span class="line"> win.show();</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">return</span> app.<span class="title">exec</span><span class="params">()</span></span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div><p><img lazyload src="/images/loading.svg" data-src="http://files.devbean.net/images/2012/08/mw-action.png" alt="Main Window with Action"></p><p>首先,我们在<code>MainWindow</code>类中添加了一个私有函数<code>open()</code>和一个私有变量<code>openAction</code>。在 MainWindow 的构造函数中,第一行我们调用了<code>setWindowTitle()</code>,设置主窗口的标题。注意我们的文本使用<code>tr()</code>函数,这是一个用于 Qt 国际化的函数。在后续章节中我们可以看到,我们可以使用 Qt 提供的国际化工具,将<code>tr()</code>函数的字符串提取出来,进行国际化。由于所需进行国际化的文本应该被大多数人认识,所以,<code>tr()</code>函数里面一般会是英文文本。</p><p>然后,我们在堆上创建了<code>openAction</code>对象。在<code>QAction</code>构造函数,我们传入了一个图标、一个文本和 this 指针。我们将在后面的文章中解释 this 指针的含义。</p><p><code>QAction</code>第二个参数中,文本值前面有一个 &,意味着这将成为一个快捷键。注意看截图中 File 的 F 有一个下划线。下面一句,我们使用了<code>setShortcut()</code>函数,用于说明这个<code>QAction</code>的快捷键。</p><p><code>setStatusTip()</code>则实现了当用户鼠标滑过这个 action 时,会在主窗口下方的状态栏显示相应的提示。</p><p>后面的<code>connect()</code>函数,将这个<code>QAction</code>的<code>triggered()</code>信号与<code>MainWindow</code>类的<code>open()</code>函数连接起来。当用户点击了这个<code>QAction</code>时,会自动触发<code>MainWindow</code>的<code>open()</code>函数。这是我们之前已经了解过的。</p><p>下面的<code>menuBar()</code>、<code>toolBar()</code>和<code>statusBar()</code>三个是<code>QMainWindow</code>的函数,用于创建并返回菜单栏、工具栏和状态栏。我们可以从代码清楚地看出,我们向菜单栏添加了一个 File 菜单,并且把这个<code>QAction</code>对象添加到这个菜单;同时新增加了一个 File 工具栏,也把<code>QAction</code>对象添加到了这个工具栏。我们可以看到,在菜单中,这个对象被显示成一个菜单项,在工具栏变成了一个按钮。至于状态栏,则是出现在窗口最下方,用于显示动作对象的提示信息的。</p><p>我们看这个代码片段:</p><div class="highlight-container" data-rel="Lisp"><figure class="iseeu highlight lisp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">openAction = new QAction(<span class="name">QIcon</span>(<span class="string">":/images/doc-open"</span>), tr(<span class="string">"&Open..."</span>), this)<span class="comment">;</span></span><br><span class="line">openAction->setShortcuts(<span class="name">QKeySequence</span>:<span class="symbol">:Open</span>)<span class="comment">;</span></span><br><span class="line">openAction->setStatusTip(<span class="name">tr</span>(<span class="string">"Open an existing file"</span>))<span class="comment">;</span></span><br><span class="line">connect(<span class="name">openAction</span>, <span class="symbol">&QAction</span>:<span class="symbol">:triggered</span>, this, <span class="symbol">&MainWindow</span>:<span class="symbol">:open</span>)<span class="comment">;</span></span><br><span class="line"></span><br><span class="line">QMenu *file = menuBar()->addMenu(<span class="name">tr</span>(<span class="string">"&File"</span>))<span class="comment">;</span></span><br><span class="line">file->addAction(<span class="name">openAction</span>)<span class="comment">;</span></span><br><span class="line"></span><br><span class="line">QToolBar *toolBar = addToolBar(<span class="name">tr</span>(<span class="string">"&File"</span>))<span class="comment">;</span></span><br><span class="line">toolBar->addAction(<span class="name">openAction</span>)<span class="comment">;</span></span><br></pre></td></tr></table></figure></div><p>使用<code>menuBar()</code>函数,Qt 为我们创建了一个菜单栏。<code>menuBar()</code>是<code>QMainWindow</code>提供的函数,因此你是不会在<code>QWidget</code>或者<code>QDialog</code>中找到它的。这个函数会返回窗口的菜单栏,如果没有菜单栏则会新创建一个。这也就解释了,为什么我们可以直接使用<code>menuBar()</code>函数的返回值,毕竟我们并没有创建一个菜单栏对象啊!原来,这就是<code>menuBar()</code>为我们创建好并且返回了的。</p><p>Qt 中,表示菜单的类是<code>QMenuBar</code>(你应该已经想到这个名字了)。<code>QMenuBar</code>代表的是窗口最上方的一条菜单栏。我们使用其<code>addMenu()</code>函数为其添加菜单。</p><p>当我们创建出来了菜单对象时,就可以把<code>QAction</code>添加到这个菜单上面,也就是<code>addAction()</code>函数的作用。</p><p><code>QToolBar</code>部分非常类似。顾名思义,<code>QToolBar</code>就是工具栏。我们使用的是<code>addToolBar()</code>函数添加新的工具栏。为什么前面一个是<code>menuBar()</code>而现在的是<code>addToolBar()</code>呢?因为一个窗口只有一个菜单栏,但是却可能有多个工具栏。如果我们将代码修改一下:</p><div class="highlight-container" data-rel="Reasonml"><figure class="iseeu highlight reasonml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">QToolBar *toolBar = add<span class="constructor">ToolBar(<span class="params">tr</span>(<span class="string">"&File"</span>)</span>);</span><br><span class="line">toolBar->add<span class="constructor">Action(<span class="params">openAction</span>)</span>;</span><br><span class="line"></span><br><span class="line">QToolBar *toolBar2 = add<span class="constructor">ToolBar(<span class="params">tr</span>(<span class="string">"Tool Bar 2"</span>)</span>);</span><br><span class="line">toolBar2->add<span class="constructor">Action(<span class="params">openAction</span>)</span>;</span><br></pre></td></tr></table></figure></div><p><img lazyload src="/images/loading.svg" data-src="http://files.devbean.net/images/2012/09/qtoolbar-2.png" alt="在 QMainWindow 中添加两个 QToolBar"></p><h2 id="4-布局管理">4. 布局管理</h2><p>看一个例子:</p><div class="highlight-container" data-rel="Reasonml"><figure class="iseeu highlight reasonml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">int</span> main(<span class="built_in">int</span> argc, <span class="built_in">char</span> *argv<span class="literal">[]</span>)</span><br><span class="line">{</span><br><span class="line"> QApplication app(argc, argv);</span><br><span class="line"></span><br><span class="line"> QWidget window;</span><br><span class="line"> window.set<span class="constructor">WindowTitle(<span class="string">"Enter your age"</span>)</span>;</span><br><span class="line"></span><br><span class="line"> QSpinBox *spinBox = <span class="keyword">new</span> <span class="constructor">QSpinBox(&<span class="params">window</span>)</span>;</span><br><span class="line"> QSlider *slider = <span class="keyword">new</span> <span class="constructor">QSlider(Qt::Horizontal, &<span class="params">window</span>)</span>;</span><br><span class="line"> spinBox->set<span class="constructor">Range(0, 130)</span>;</span><br><span class="line"> slider->set<span class="constructor">Range(0, 130)</span>;</span><br><span class="line"></span><br><span class="line"> QObject::connect(slider, &QSlider::valueChanged, spinBox, &QSpinBox::setValue);</span><br><span class="line"> void (QSpinBox:: *spinBoxSignal)(<span class="built_in">int</span>) = &QSpinBox::valueChanged;</span><br><span class="line"> QObject::connect(spinBox, spinBoxSignal, slider, &QSlider::setValue);</span><br><span class="line"> spinBox->set<span class="constructor">Value(35)</span>;</span><br><span class="line"></span><br><span class="line"> QHBoxLayout *layout = <span class="keyword">new</span> QHBoxLayout;</span><br><span class="line"> layout->add<span class="constructor">Widget(<span class="params">spinBox</span>)</span>;</span><br><span class="line"> layout->add<span class="constructor">Widget(<span class="params">slider</span>)</span>;</span><br><span class="line"> window.set<span class="constructor">Layout(<span class="params">layout</span>)</span>;</span><br><span class="line"></span><br><span class="line"> window.show<span class="literal">()</span>;</span><br><span class="line"></span><br><span class="line"> return app.exec<span class="literal">()</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div><p><img lazyload src="/images/loading.svg" data-src="http://files.devbean.net/images/2012/09/layout-demo.png" alt="Qt Layout 原始大小示例"></p><p>我们在这段代码中引入了两个新的组件:<code>QSpinBox</code>和<code>QSlider</code>。<code>QSpinBox</code>就是只能输入数字的输入框,并且带有上下箭头的步进按钮。<code>QSlider</code>则是带有滑块的滑竿。我们可以从上面的截图中清楚地辨别出这两个组件。当我们创建了这两个组件的实例之后,我们使用<code>setRange()</code>函数设置其范围。既然我们的窗口标题是“Enter your age(输入你的年龄)”,那么把 range(范围)设置为 0 到 130 应该足够了。</p><p>注意connect里参数的顺序不能对调。编译器认为<code>QSpinBox::valueChanged</code>是一个 overloaded 的函数。我们看一下<code>QSpinBox</code>的文档发现,<code>QSpinBox</code>的确有两个信号:</p><ul><li><code>void valueChanged(int)</code></li><li><code>void valueChanged(const QString &)</code></li></ul><p>当我们使用<code>&QSpinBox::valueChanged</code>取函数指针时,编译器不知道应该取哪一个函数(记住前面我们介绍过的,经过 moc 预处理后,signal 也是一个普通的函数。)的地址,因此报错。解决的方法很简单,编译器不是不能确定哪一个函数吗?那么我们就显式指定一个函数。方法就是,我们创建一个函数指针,这个函数指针参数指定为 int:</p><div class="highlight-container" data-rel="Dts"><figure class="iseeu highlight dts"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">void (QSpinBox:: *spinBoxSignal)(int) = <span class="variable">&</span>QSpinBox::valueChanged;</span><br></pre></td></tr></table></figure></div><p>然后我们将这个函数指针作为 signal,与 QSlider 的函数连接。</p><p>下面的代码,我们创建了一个<code>QHBoxLayout</code>对象。显然,这就是一个布局管理器。然后将这两个组件都添加到这个布局管理器,并且把该布局管理器设置为窗口的布局管理器。这些代码看起来都是顺理成章的,应该很容易明白。并且,布局管理器很聪明地做出了正确的行为:保持<code>QSpinBox</code>宽度不变,自动拉伸<code>QSlider</code>的宽度。</p><p>Qt 提供了几种布局管理器供我们选择:</p><ul><li><code>QHBoxLayout</code>:按照水平方向从左到右布局;</li><li><code>QVBoxLayout</code>:按照竖直方向从上到下布局;</li><li><code>QGridLayout</code>:在一个网格中进行布局,类似于 HTML 的 table;</li><li><code>QFormLayout</code>:按照表格布局,每一行前面是一段文本,文本后面跟随一个组件(通常是输入框),类似 HTML 的 form;</li><li><code>QStackedLayout</code>:层叠的布局,允许我们将几个组件按照 Z 轴方向堆叠,可以形成向导那种一页一页的效果。</li></ul><h2 id="5-文件对话框">5. 文件对话框</h2><p><code>QMessageBox</code> Qt标准对话框。</p><p>下面讨论另外一个标准对话框:<code>QFileDialog</code>,文件对话框。下面例子将使用<code>QFileDialog</code>打开一个文本文件,并将修改过的文件保存到硬盘。</p><p>首先创建一个带有文本编辑功能的窗口:</p><div class="highlight-container" data-rel="Reasonml"><figure class="iseeu highlight reasonml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">openAction = <span class="keyword">new</span> <span class="constructor">QAction(QIcon(<span class="string">":/images/file-open"</span>)</span>, tr(<span class="string">"&Open..."</span>), this);</span><br><span class="line">openAction->set<span class="constructor">Shortcuts(QKeySequence::Open)</span>;</span><br><span class="line">openAction->set<span class="constructor">StatusTip(<span class="params">tr</span>(<span class="string">"Open an existing file"</span>)</span>);</span><br><span class="line"></span><br><span class="line">saveAction = <span class="keyword">new</span> <span class="constructor">QAction(QIcon(<span class="string">":/images/file-save"</span>)</span>, tr(<span class="string">"&Save..."</span>), this);</span><br><span class="line">saveAction->set<span class="constructor">Shortcuts(QKeySequence::Save)</span>;</span><br><span class="line">saveAction->set<span class="constructor">StatusTip(<span class="params">tr</span>(<span class="string">"Save a new file"</span>)</span>);</span><br><span class="line"></span><br><span class="line">QMenu *file = menu<span class="constructor">Bar()</span>->add<span class="constructor">Menu(<span class="params">tr</span>(<span class="string">"&File"</span>)</span>);</span><br><span class="line">file->add<span class="constructor">Action(<span class="params">openAction</span>)</span>;</span><br><span class="line">file->add<span class="constructor">Action(<span class="params">saveAction</span>)</span>;</span><br><span class="line"></span><br><span class="line">QToolBar *toolBar = add<span class="constructor">ToolBar(<span class="params">tr</span>(<span class="string">"&File"</span>)</span>);</span><br><span class="line">toolBar->add<span class="constructor">Action(<span class="params">openAction</span>)</span>;</span><br><span class="line">toolBar->add<span class="constructor">Action(<span class="params">saveAction</span>)</span>;</span><br><span class="line"></span><br><span class="line">textEdit = <span class="keyword">new</span> <span class="constructor">QTextEdit(<span class="params">this</span>)</span>;</span><br><span class="line">set<span class="constructor">CentralWidget(<span class="params">textEdit</span>)</span>;</span><br></pre></td></tr></table></figure></div><p>在菜单和工具栏添加了两个动作:打开和保存。在这里我们添加了一个QTextEdit类,用于显示富文本文件,不仅仅可以显示文本,还可以显示图片和表格等等,在这里先实现纯文本文件。<code>QMainWindow</code>有个<code>setCentralWidget()</code> 函数,可以将一个组件作为窗口的中心组件放在窗口中央显示区。在一个文本编辑器中,文本编辑区就是这个中心组件,用<code>QTextEdit</code>。</p><p>在这里<code>connect()</code>的用法如下,为<code>QAction</code>对象添加响应的动作(我们希望打开新的窗口):</p><div class="highlight-container" data-rel="Lisp"><figure class="iseeu highlight lisp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">connect(<span class="name">openAction</span>, <span class="symbol">&QAction</span>:<span class="symbol">:triggered</span>, this, <span class="symbol">&MainWindow</span>:<span class="symbol">:openFile</span>)<span class="comment">;</span></span><br><span class="line">connect(<span class="name">saveAction</span>, <span class="symbol">&QAction</span>:<span class="symbol">:triggered</span>, this, <span class="symbol">&MainWindow</span>:<span class="symbol">:saveFile</span>)<span class="comment">;</span></span><br><span class="line"></span><br></pre></td></tr></table></figure></div><p>重点看<code>openFile()</code>和<code>saveFile()</code>两个函数的代码:</p><div class="highlight-container" data-rel="Css"><figure class="iseeu highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><td class="code"><pre><span class="line">void MainWindow::<span class="built_in">openFile</span>()</span><br><span class="line">{</span><br><span class="line"> QString path = QFileDialog::<span class="built_in">getOpenFileName</span>(this, <span class="built_in">tr</span>(<span class="string">"Open File"</span>), <span class="string">"."</span>, <span class="built_in">tr</span>(<span class="string">"Text Files(*.txt)"</span>));</span><br><span class="line"> if(!path<span class="selector-class">.isEmpty</span>()) {</span><br><span class="line"> QFile file(path);</span><br><span class="line"> if (!file<span class="selector-class">.open</span>(QIODevice::ReadOnly | QIODevice::Text)) {</span><br><span class="line"> QMessageBox::<span class="built_in">warning</span>(this, <span class="built_in">tr</span>(<span class="string">"Read File"</span>), <span class="built_in">tr</span>(<span class="string">"Cannot open file:\n%1"</span>).<span class="built_in">arg</span>(path));</span><br><span class="line"> return;</span><br><span class="line"> }</span><br><span class="line"> QTextStream in(&file);</span><br><span class="line"> textEdit->setText(in<span class="selector-class">.readAll</span>());</span><br><span class="line"> file<span class="selector-class">.close</span>();</span><br><span class="line"> } else {</span><br><span class="line"> QMessageBox::<span class="built_in">warning</span>(this, <span class="built_in">tr</span>(<span class="string">"Path"</span>), <span class="built_in">tr</span>(<span class="string">"You did not select any file."</span>));</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">void MainWindow::<span class="built_in">saveFile</span>()</span><br><span class="line">{</span><br><span class="line"> QString path = QFileDialog::<span class="built_in">getSaveFileName</span>(this, <span class="built_in">tr</span>(<span class="string">"Save File"</span>), <span class="string">"."</span>, <span class="built_in">tr</span>(<span class="string">"Text Files(*.txt)"</span>));</span><br><span class="line"> if(!path<span class="selector-class">.isEmpty</span>()) {</span><br><span class="line"> QFile file(path);</span><br><span class="line"> if (!file<span class="selector-class">.open</span>(QIODevice::WriteOnly | QIODevice::Text)) {</span><br><span class="line"> QMessageBox::<span class="built_in">warning</span>(this, <span class="built_in">tr</span>(<span class="string">"Write File"</span>), <span class="built_in">tr</span>(<span class="string">"Cannot open file:\n%1"</span>).<span class="built_in">arg</span>(path));</span><br><span class="line"> return;</span><br><span class="line"> }</span><br><span class="line"> QTextStream out(&file);</span><br><span class="line"> out << textEdit->toPlainText();</span><br><span class="line"> file<span class="selector-class">.close</span>();</span><br><span class="line"> } else {</span><br><span class="line"> QMessageBox::<span class="built_in">warning</span>(this, <span class="built_in">tr</span>(<span class="string">"Path"</span>), <span class="built_in">tr</span>(<span class="string">"You did not select any file."</span>));</span><br><span class="line"> }</span><br><span class="line">}</span><br><span class="line"></span><br></pre></td></tr></table></figure></div><p>具体看一下期中的函数:在<code>openFile()</code>函数中,我们用<code>QFileDialog::getOpenFileName()</code>来获取需要打开的文件的路径。函数如下:</p><div class="highlight-container" data-rel="Nix"><figure class="iseeu highlight nix"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">QString getOpenFileName(QWidget * <span class="attr">parent</span> = <span class="number">0</span>,</span><br><span class="line"> const QString & <span class="attr">caption</span> = QString(),</span><br><span class="line"> const QString & <span class="attr">dir</span> = QString(),</span><br><span class="line"> const QString & <span class="attr">filter</span> = QString(),</span><br><span class="line"> QString * <span class="attr">selectedFilter</span> = <span class="number">0</span>,</span><br><span class="line"> Options <span class="attr">options</span> = <span class="number">0</span>)</span><br></pre></td></tr></table></figure></div><ul><li>parent:父窗口。我们前面介绍过,Qt 的标准对话框提供静态函数,用于返回一个模态对话框(在一定程度上这就是外观模式的一种体现);</li><li>caption:对话框标题;</li><li>dir:对话框打开时的默认目录,“.” 代表程序运行目录,“/” 代表当前盘符的根目录(特指 Windows 平台;Linux 平台当然就是根目录),这个参数也可以是平台相关的,比如“C:\”等;</li><li>filter:过滤器。我们使用文件对话框可以浏览很多类型的文件,但是,很多时候我们仅希望打开特定类型的文件。比如,文本编辑器希望打开文本文件,图片浏览器希望打开图片文件。过滤器就是用于过滤特定的后缀名。如果我们使用“Image Files(<em>.jpg <em>.png)”,则只能显示后缀名是 jpg 或者 png 的文件。如果需要多个过滤器,使用“;;”分割,比如“JPEG Files(</em>.jpg);;PNG Files(</em>.png)”;</li><li>selectedFilter:默认选择的过滤器;</li><li>options:对话框的一些参数设定,比如只显示文件夹等等,它的取值是<code>enum QFileDialog::Option</code>,每个选项可以使用 | 运算组合起来。</li></ul><p><code>QFileDialog::getOpenFileName()</code>返回值是选择的文件路径。我们将其赋值给 path。通过判断 path 是否为空,可以确定用户是否选择了某一文件。只有当用户选择了一个文件时,我们才执行下面的操作。</p><p>我们创建一个QFile对象,将用户选择的文件路径传递给这个对象。用<code>QFile::open()</code>来打开这个文件,其参数是指定的打开方式,这里我们使用只读方式和文本方式。<code>QFile::open()</code>打开成功返回true, 由此继续下面的操作:使用<code>QTextStream::readAll()</code>读取文件所有内容赋值给<code>QtextEdit</code>显示出来。</p><p><code>saveFile()</code>函数也是类似的,最后一步我们用<<重定向,将QTextEdit的内容输出到一个文件中。文件操作我们后续介绍。</p><h2 id="6-事件">6. 事件</h2><p>事件(event)是由系统或者 Qt 本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件。一些事件在对用户操作做出响应时发出,如键盘事件等;另一些事件则是由系统自动发出,如计时器事件。</p><p>Qt 中的事件和信号槽却并不是可以相互替代的。信号由具体的对象发出,然后会马上交给由<code>connect()</code>函数连接的槽进行处理;而对于事件,Qt 使用一个事件队列对所有发出的事件进行维护,当新的事件产生时,会被追加到事件队列的尾部。前一个事件完成后,取出后面的事件进行处理。但是,必要的时候,Qt 的事件也可以不进入事件队列,而是直接处理。信号一旦发出,对应的槽函数一定会被执行。但是,事件则可以使用“事件过滤器”进行过滤,对于有些事件进行额外的处理,另外的事件则不关心。总的来说,如果我们<strong>使用</strong>组件,我们关心的是信号槽;如果我们<strong>自定义</strong>组件,我们关心的是事件。因为我们可以通过事件来改变组件的默认操作。比如,如果我们要自定义一个能够响应鼠标事件的<code>EventLabel</code>,我们就需要重写<code>QLabel</code>的鼠标事件,做出我们希望的操作,有可能还得在恰当的时候发出一个类似按钮的<code>clicked()</code>信号(如果我们希望让这个<code>EventLabel</code>能够被其它组件使用)或者其它的信号。</p><p>下面看一个例子:</p><div class="highlight-container" data-rel="Verilog"><figure class="iseeu highlight verilog"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> EventLabel : public QLabel</span><br><span class="line">{</span><br><span class="line"><span class="keyword">protected</span>:</span><br><span class="line"> <span class="keyword">void</span> mouseMoveEvent(QMouseEvent *<span class="keyword">event</span>);</span><br><span class="line"> <span class="keyword">void</span> mousePressEvent(QMouseEvent *<span class="keyword">event</span>);</span><br><span class="line"> <span class="keyword">void</span> mouseReleaseEvent(QMouseEvent *<span class="keyword">event</span>);</span><br><span class="line">};</span><br><span class="line"></span><br><span class="line"><span class="keyword">void</span> EventLabel::mouseMoveEvent(QMouseEvent *<span class="keyword">event</span>)</span><br><span class="line">{</span><br><span class="line"> <span class="keyword">this</span>->setText(QString(<span class="string">"<center><h1>Move: (%1, %2)</h1></center>"</span>)</span><br><span class="line"> <span class="variable">.arg</span>(QString::number(<span class="keyword">event</span>->x()), QString::number(<span class="keyword">event</span>->y())));</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">void</span> EventLabel::mousePressEvent(QMouseEvent *<span class="keyword">event</span>)</span><br><span class="line">{</span><br><span class="line"> <span class="keyword">this</span>->setText(QString(<span class="string">"<center><h1>Press: (%1, %2)</h1></center>"</span>)</span><br><span class="line"> <span class="variable">.arg</span>(QString::number(<span class="keyword">event</span>->x()), QString::number(<span class="keyword">event</span>->y())));</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">void</span> EventLabel::mouseReleaseEvent(QMouseEvent *<span class="keyword">event</span>)</span><br><span class="line">{</span><br><span class="line"> QString msg;</span><br><span class="line"> msg<span class="variable">.sprintf</span>(<span class="string">"<center><h1>Release: (%d, %d)</h1></center>"</span>,</span><br><span class="line"> <span class="keyword">event</span>->x(), <span class="keyword">event</span>->y());</span><br><span class="line"> <span class="keyword">this</span>->setText(msg);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> main(<span class="keyword">int</span> argc, char *argv[])</span><br><span class="line">{</span><br><span class="line"> QApplication a(argc, argv);</span><br><span class="line"></span><br><span class="line"> EventLabel *label = <span class="keyword">new</span> EventLabel;</span><br><span class="line"> label->setWindowTitle(<span class="string">"MouseEvent Demo"</span>);</span><br><span class="line"> label->resize(<span class="number">300</span>, <span class="number">200</span>);</span><br><span class="line"> label->show();</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> a<span class="variable">.exec</span>();</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div><p><code>EventLabel</code>继承了<code>QLabel</code>,覆盖了<code>mousePressEvent()</code>、<code>mouseMoveEvent()</code>和<code>mouseReleaseEvent()</code>三个函数。我们并没有添加什么功能,只是在鼠标按下(press)、鼠标移动(move)和鼠标释放(release)的时候,把当前鼠标的坐标值显示在这个<code>Label</code>上面。由于<code>QLabel</code>是支持 HTML 代码的,因此我们直接使用了 HTML 代码来格式化文字。</p><p><code>QString</code>的<code>arg()</code>函数可以自动替换掉<code>QString</code>中出现的占位符。其占位符以 % 开始,后面是占位符的位置,例如 %1,%2 这种。</p><div class="highlight-container" data-rel="Less"><figure class="iseeu highlight less"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-tag">QString</span>(<span class="string">"[%1, %2]"</span>)<span class="selector-class">.arg</span>(x, y);</span><br></pre></td></tr></table></figure></div><p>语句将会使用 x 替换 %1,y 替换 %2,因此,这个语句生成的<code>QString</code>为 [x, y]。</p><p>在<code>mouseReleaseEvent()</code>函数中,我们使用了另外一种<code>QString</code>的构造方法。我们使用类似 C 风格的格式化函数<code>sprintf()</code>来构造<code>QString</code>。</p><h2 id="7-绘制">7. 绘制</h2><p>Qt 的绘图系统允许使用相同的 API 在屏幕和其它打印设备上进行绘制。整个绘图系统基于<code>QPainter</code>,<code>QPainterDevice</code>和<code>QPaintEngine</code>三个类。</p><p><code>QPainter</code>用来执行绘制的操作;<code>QPaintDevice</code>是一个二维空间的抽象,这个二维空间允许<code>QPainter</code>在其上面进行绘制,也就是<code>QPainter</code>工作的空间;<code>QPaintEngine</code>提供了画笔(<code>QPainter</code>)在不同的设备上进行绘制的统一的接口。<code>QPaintEngine</code>类应用于<code>QPainter</code>和<code>QPaintDevice</code>之间,通常对开发人员是透明的。除非你需要自定义一个设备,否则你是不需要关心<code>QPaintEngine</code>这个类的。我们可以把<code>QPainter</code>理解成画笔;把<code>QPaintDevice</code>理解成使用画笔的地方,比如纸张、屏幕等;而对于纸张、屏幕而言,肯定要使用不同的画笔绘制,为了统一使用一种画笔,我们设计了<code>QPaintEngine</code>类,这个类让不同的纸张、屏幕都能使用一种画笔。</p><p>下面我们通过一个实例来介绍<code>QPainter</code>的使用:</p><div class="highlight-container" data-rel="Angelscript"><figure class="iseeu highlight angelscript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="symbol">PaintedWidget</span> : <span class="symbol">public</span> <span class="symbol">QWidget</span></span><br><span class="line">{</span><br><span class="line"> Q_OBJECT</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line"> PaintedWidget(QWidget *parent = <span class="number">0</span>);</span><br><span class="line"><span class="keyword">protected</span>:</span><br><span class="line"> <span class="built_in">void</span> paintEvent(QPaintEvent *);</span><br><span class="line">};</span><br></pre></td></tr></table></figure></div><div class="highlight-container" data-rel="Reasonml"><figure class="iseeu highlight reasonml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">PaintedWidget::<span class="constructor">PaintedWidget(QWidget <span class="operator">*</span><span class="params">parent</span>)</span> :</span><br><span class="line"> <span class="constructor">QWidget(<span class="params">parent</span>)</span></span><br><span class="line">{</span><br><span class="line"> resize(<span class="number">800</span>, <span class="number">600</span>);</span><br><span class="line"> set<span class="constructor">WindowTitle(<span class="params">tr</span>(<span class="string">"Paint Demo"</span>)</span>);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">void PaintedWidget::paint<span class="constructor">Event(QPaintEvent <span class="operator">*</span>)</span></span><br><span class="line">{</span><br><span class="line"> QPainter painter(this);</span><br><span class="line"> painter.draw<span class="constructor">Line(80, 100, 650, 500)</span>;</span><br><span class="line"> painter.set<span class="constructor">Pen(Qt::<span class="params">red</span>)</span>;</span><br><span class="line"> painter.draw<span class="constructor">Rect(10, 10, 100, 400)</span>;</span><br><span class="line"> painter.set<span class="constructor">Pen(QPen(Qt::<span class="params">green</span>, 5)</span>);</span><br><span class="line"> painter.set<span class="constructor">Brush(Qt::<span class="params">blue</span>)</span>;</span><br><span class="line"> painter.draw<span class="constructor">Ellipse(50, 150, 400, 200)</span>;</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div><p>在构造函数中,我们仅仅设置了窗口的大小和标题。而<code>paintEvent()</code>函数则是绘制的代码。首先,我们在栈上创建了一个<code>QPainter</code>对象,也就是说,每次运行<code>paintEvent()</code>函数的时候,都会重建这个<code>QPainter</code>对象。</p><p><code>QPainter</code>接收一个<code>QPaintDevice</code>指针作为参数。<code>QPaintDevice</code>有很多子类,比如<code>QImage</code>,以及<code>QWidget</code>。注意回忆一下,<code>QPaintDevice</code>可以理解成要在哪里去绘制,而现在我们希望画在这个组件,因此传入的是 this 指针。</p><p><code>QPainter</code>有很多以 draw 开头的函数,用于各种图形的绘制,比如这里的<code>drawLine()</code>,<code>drawRect()</code>以及<code>drawEllipse()</code>等。当绘制轮廓线时,使用<code>QPainter</code>的<code>pen()</code>属性。比如,我们调用了<code>painter.setPen(Qt::red)</code>将 pen 设置为红色,则下面绘制的矩形具有红色的轮廓线。接下来,我们将 pen 修改为绿色,5 像素宽(<code>painter.setPen(QPen(Qt::green, 5))</code>),又设置了画刷为蓝色。这时候再调用 draw 函数,则是具有绿色 5 像素宽轮廓线、蓝色填充的椭圆。</p><p><img lazyload src="/images/loading.svg" data-src="http://files.devbean.net/images/2012/10/paint-demo.png" alt="绘制示例"></p><p>将<code>QPainter</code>的逻辑坐标与<code>QPaintDevice</code>的物理坐标进行映射的工作,是由<code>QPainter</code>的变换矩阵(transformation matrix)、视口(viewport)和窗口(window)完成的。</p><p>在 Qt 的坐标系统中,每个像素占据 1x1 的空间。你可以把它想象成一张方格纸,每个小格都是1个像素。方格的焦点定义了坐标,也就是说,像素 (x, y) 的中心位置其实是在 (x + 0.5, y + 0.5) 的位置上。这个坐标系统实际上是一个“半像素坐标系”。我们可以通过下面的示意图来理解这种坐标系:</p><p><img lazyload src="/images/loading.svg" data-src="http://files.devbean.net/images/2012/11/coordinate-system-demo.png" alt="坐标系统图示"></p><p>进行一个示例:</p><div class="highlight-container" data-rel="Less"><figure class="iseeu highlight less"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-tag">void</span> <span class="selector-tag">PaintDemo</span>::<span class="selector-tag">paintEvent</span>(QPaintEvent *)</span><br><span class="line">{</span><br><span class="line"> <span class="selector-tag">QPainter</span> <span class="selector-tag">painter</span>(this);</span><br><span class="line"> <span class="selector-tag">painter</span><span class="selector-class">.fillRect</span>(<span class="number">10</span>, <span class="number">10</span>, <span class="number">50</span>, <span class="number">100</span>, <span class="attribute">Qt</span>::red);</span><br><span class="line"> <span class="selector-tag">painter</span><span class="selector-class">.save</span>();</span><br><span class="line"> <span class="selector-tag">painter</span><span class="selector-class">.translate</span>(<span class="number">100</span>, <span class="number">0</span>); <span class="comment">// 向右平移 100px</span></span><br><span class="line"> <span class="selector-tag">painter</span><span class="selector-class">.fillRect</span>(<span class="number">10</span>, <span class="number">10</span>, <span class="number">50</span>, <span class="number">100</span>, <span class="attribute">Qt</span>::yellow);</span><br><span class="line"> <span class="selector-tag">painter</span><span class="selector-class">.restore</span>();</span><br><span class="line"> <span class="selector-tag">painter</span><span class="selector-class">.save</span>();</span><br><span class="line"> <span class="selector-tag">painter</span><span class="selector-class">.translate</span>(<span class="number">300</span>, <span class="number">0</span>); <span class="comment">// 向右平移 300px</span></span><br><span class="line"> <span class="selector-tag">painter</span><span class="selector-class">.rotate</span>(<span class="number">30</span>); <span class="comment">// 顺时针旋转 30 度</span></span><br><span class="line"> <span class="selector-tag">painter</span><span class="selector-class">.fillRect</span>(<span class="number">10</span>, <span class="number">10</span>, <span class="number">50</span>, <span class="number">100</span>, <span class="attribute">Qt</span>::green);</span><br><span class="line"> <span class="selector-tag">painter</span><span class="selector-class">.restore</span>();</span><br><span class="line"> <span class="selector-tag">painter</span><span class="selector-class">.save</span>();</span><br><span class="line"> <span class="selector-tag">painter</span><span class="selector-class">.translate</span>(<span class="number">400</span>, <span class="number">0</span>); <span class="comment">// 向右平移 400px</span></span><br><span class="line"> <span class="selector-tag">painter</span><span class="selector-class">.scale</span>(<span class="number">2</span>, <span class="number">3</span>); <span class="comment">// 横坐标单位放大 2 倍,纵坐标放大 3 倍</span></span><br><span class="line"> <span class="selector-tag">painter</span><span class="selector-class">.fillRect</span>(<span class="number">10</span>, <span class="number">10</span>, <span class="number">50</span>, <span class="number">100</span>, <span class="attribute">Qt</span>::blue);</span><br><span class="line"> <span class="selector-tag">painter</span><span class="selector-class">.restore</span>();</span><br><span class="line"> <span class="selector-tag">painter</span><span class="selector-class">.save</span>();</span><br><span class="line"> <span class="selector-tag">painter</span><span class="selector-class">.translate</span>(<span class="number">600</span>, <span class="number">0</span>); <span class="comment">// 向右平移 600px</span></span><br><span class="line"> <span class="selector-tag">painter</span><span class="selector-class">.shear</span>(<span class="number">0</span>, <span class="number">1</span>); <span class="comment">// 横向不变,纵向扭曲 1 倍</span></span><br><span class="line"> <span class="selector-tag">painter</span><span class="selector-class">.fillRect</span>(<span class="number">10</span>, <span class="number">10</span>, <span class="number">50</span>, <span class="number">100</span>, <span class="attribute">Qt</span>::cyan);</span><br><span class="line"> <span class="selector-tag">painter</span><span class="selector-class">.restore</span>();</span><br><span class="line">}</span><br></pre></td></tr></table></figure></div><p>Qt 提供了四种坐标变换:平移 translate,旋转 rotate,缩放 scale 和扭曲 shear。在这段代码中,我们首先在 (10, 10) 点绘制一个红色的 50x100 矩形。保存当前状态,将坐标系平移到 (100, 0),绘制一个黄色的矩形。注意,<code>translate()</code>操作平移的是坐标系,不是矩形。因此,我们还是在 (10, 10) 点绘制一个 50x100 矩形,现在,它跑到了右侧的位置。然后恢复先前状态,也就是把坐标系重新设为默认坐标系(相当于进行<code>translate(-100, 0)</code>),再进行下面的操作。之后也是类似的。由于我们只是保存了默认坐标系的状态,因此我们之后的<code>translate()</code>横坐标值必须增加,否则就会覆盖掉前面的图形。所有这些操作都是针对坐标系的,因此在绘制时,我们提供的矩形的坐标参数都是不变的。</p><p><img lazyload src="/images/loading.svg" data-src="http://files.devbean.net/images/2012/11/coordinate-transformations-demo.png" alt="坐标变换示例"></p>]]></content>
<tags>
<tag> notes </tag>
</tags>
</entry>
<entry>
<title>大一下总结</title>
<link href="/2021/10/02/%E5%A4%A7%E4%B8%80%E4%B8%8B%E6%80%BB%E7%BB%93/"/>
<url>/2021/10/02/%E5%A4%A7%E4%B8%80%E4%B8%8B%E6%80%BB%E7%BB%93/</url>
<content type="html"><![CDATA[<h1 id="大一下总结与思考">大一下总结与思考</h1><h2 id="痛感">痛感</h2><p>大一上学期过得胆战心惊,数分荣誉的阶段考试、C++的一串串编程作业、期末周噼里啪啦的考试,可谓让我的第一学期过来得跌跌爬爬。虽然最后学积分绩点排名比预期好一点,但是我认识到自己的学习存在问题,不能很高效地完成手头的任务,集中注意力的能力有待提升……看看大一下的课表,看着就很麻,四大硬课——数分大物基电数据结构,下学期必定是一场艰苦的鏖战。</p><p>我知道它艰苦,但没想到它这么艰苦。</p><p>当两个星期之后,魔鬼般的OJ像黑洞般吞噬我的时间,有的时候从早肝到凌晨,也只换来“听取WA声一片”;基电老师催眠般的声音中不知不觉已经跟不上其迷惑般快的速度,复频域之后人完全处于懵的状态;数学分析越来越听不下wkz的讲课内容,于是转向室友checkyin的笔记续命;后续一份接一份写到半夜的大物实验、基电实验报告;泡在学生创新中心的一个个周末……历历在目。</p><p>也有三次心态的崩溃。第一次是拜一门叫工程实践与科技创新的课所赐。叫你全名是对你最后的尊重。当那天焊万用表从早上焊到下午但debug不出来被一个助教漫不经心地建议重做时,饥饿与酸楚,无助和绝望在心中交织,心态崩塌了。(第二次做的时候一个很细心的助教一下子就给我debug出了问题quq)第二次崩溃是在高考结束的那天,看见学弟学妹们欢天喜地地庆祝着解放,我一个人在包图对着一本电路实验不知所措,真的背不下来啊……而第二天考试的重要性不言而喻我却对这个实验考试根本没一个概念……(后来考试我确实出了个重大失误,但老师心善留了我一个活口)第三次是考试周最后一天的数据结构考试之前,6月24号也是高考出分的日子,我的心思完全无法定下来预习,那一天时已经连续好多天熬大夜起大早死磕这几门课的考试,最后一天依旧。到了晚上我依旧没有学明白数据结构后期的一些知识,特别是一些树结构和图算法。努力对抗着高考出分一个一个消息的干扰强制镇定复习,一直到夜里两点半才筋疲力尽地睡觉准备早八考试慷慨赴义,当深夜里一盏孤灯一本数据结构,大学生的崩溃就在一瞬间。</p><p>痛感是前所未有地真实的。</p><p>我永远忘不了这个考试周,大家齐心合力共同面对着巨艰苦的试炼,互相帮助互相分享,一天一本考研书,一天一本教材的高强度,一天14个小时的坐图。真的有种望尽天涯路既视感啊。</p><p>但是我又是幸运的,有一些光让我不至于在黑夜里彻底绝望。</p><p>工程实践有幸和爽佬一起上课一起做项目,我们做的project是基于树莓派的LED声控灯阵,是一个从youtube上借鉴的一个比较精致的项目。爽佬真的很有领导力和执行力,成熟丰富的经验知识carry我们一波又一波。从一开始的打亚克力板钻孔,到灯的串联调试,到搭建框架逐层debug,到设计电路美化成品,过程中和爽佬学习到了很多很多。真的很幸运,心态也从一开始的能被大佬carry到真的能向大佬学到很多很多。此处友链爽佬的哔站视频也就是我们的项目成果<a class="link" href="https://www.bilibili.com/video/BV1Yq4y1j7wU?spm_id_from=333.999.0.0">LED3D声控灯阵 <i class="fa-regular fa-arrow-up-right-from-square fa-sm"></i></a>。</p><p>大一下学期的学习生活给了我各方面巨大的磨练,自己除了专业方面的能力,其他都感受到了一定的提升和改进。痛,但真实。</p><p>最后在一波力挽狂澜后,结果也还不错。所有课都在85以上,可惜的是两门大课数分和大物94痛失满绩。学积分88.37,绩点3.79, 排名计算机系十名出头:这也告诉我,CS的其他人也丝毫不松懈努力地向上攀登着。马上又会空降一批国奖大佬,来啊翻滚吧。</p><h2 id="生活">生活</h2><p>这一学期我几乎没有参加什么活动,真的是很累啦。但是还是和班上同学渐渐熟络了起来。</p><p>比如二月底304班的春游团建,前往闵行博物馆然后玩桌游撸串,逐渐认识了班上的同学。而后亦来班风大赛的一系列活动也拉近了班里同学的一些距离。同时也有一些一起的课,于是也有了交流的机会,比上学期朋友<br>更多了,社交面也更广了(虽然还是很小)。</p><p>每个月都出去放松了次把次,比如二月的春游,三月去了莲花路那边探亲,四月份去五角场和宋神面基畅聊,五月份假期怒回高邮放肆浪释放了许多四月的压抑,六月份一考完就闪现高邮有了一些甜甜蜜蜜的饭的约。<br>真的,要让日子有盼头,就像劳动节回家放纵之后回来充满了干劲,真的是有不错的调节效果的。</p><p>已经渐渐地融入大学生活啦,我觉得可以进一步参加一些活动了,虽然AC面试未果(很迷惑),但是我想去Robomaster搞点事情或者钢协砸场子,或者去歌联也行,总之要多点乐子的来源。</p><p>其实渐渐发现,大家的交集也不止于利益的纵横,是我上学期的思想过于闭塞了。其实我很羡慕致远学院他们总是一起欢笑,这种同学的氛围确是我有点后悔没去致远的一个原因。也希望自己能够有交心的朋友,有同甘共苦的朋友们一起面对未来的风雨吧。</p><p>或许就有了呢。</p><h2 id="专业">专业</h2><p>到了大一结束步入大二,我才渐渐认识了计算机这个专业。</p><p>寒假的时候看到迟先生的文章<a class="link" href="https://survivesjtu.gitbook.io/survivesjtumanual/fu-lu/ben-ke-sheng-zhuan-ye-jie-shao-todo/cs-zi-jiu-zhi-bei">《CS自救指北》 <i class="fa-regular fa-arrow-up-right-from-square fa-sm"></i></a>,看迟先生批判地好像很有道理,但对他的“指北”部分云里雾里,他学的都是些什么感觉直接好高深的样子。到了暑假我才发现,不是他高深是我菜了,不是他太快是我迟了。<br>在OJ昏天黑地的磨练下,我确实对前路还十分迷茫,搞算法?不像啊,这时候起步投身这个根本搞不过别人OI佬的,像迟先生说的那些,可是我直接看不懂啊。寒假买了本《深入理解计算机系统》,也就是CSAPP英文版,在宿舍吃了一学期灰,当时立志大二上要把它看完。<br>学期结束我才看到<a class="link" href="https://github.com/keithnull/TeachYourselfCS-CN/blob/master/TeachYourselfCS-CN.md">TeachYourselfEnglish <i class="fa-regular fa-arrow-up-right-from-square fa-sm"></i></a>, 这才对这个专业要如何去学有了一个比较清晰的了解。才恍然大悟:原来迟先生的自救指北是十分实用且高瞻远瞩的。</p><p>于是暑假我开始看CSAPP,看英文书,对照着中文电子书一章一章地读,但是也只限于阅读和做题,并没有动手去做其精品lab,据说lab才是精华,预备寒假去把lab做一做。暑假其实效率很低…一直到开学前天天坐包图才好不容易看到了第五章,大概一半左右。定下一个小目标,在课业的同时,最好能把六七章读完吧。</p><p>同时我了解到,要学习组成原理和体系结构,以及可怖的操作系统,而这些都是我从未涉足过的领域。大二下的课程包括了这些所有课,据说大作业都是地狱级别的难度,我觉得确实要未雨绸缪提前保命了。</p><p>准备入手CAAQA,以及一本OS的入门书,寒假逐渐可以试着看MIT6.828和Linux内核,都是好硬的内容啊。</p><p>希望能活过大二下学期。(哦虽然这学期的问题求解与实践的魔鬼大作业还没挺过去)</p><p>在未来的出路方面也做了一定的思考。上学期结束我觉得我不想读研,但逐渐又感觉到,读研或许真的是有必要的,而且目前的状态下,卷一卷确实有希望保研,唉。但是听了迟先生的奶茶会,现实确实要复杂地多,究竟是走实习秋招呢,还是走夏令营保研呢,究竟是四处找门路进实验室呢,还是早点去厂里混混呢。我还有半个大二的时间思考这个问题,我觉得我确实不适合搞科研,或许让大厂看到我的能力进大厂是比较好的选择吧。每一个选择都有深不见底的未来。</p><h2 id="总结与规划">总结与规划</h2><p>大一下过得是很充实了,但专业方面我必须花得更多额外的精力才能为未来抢占一些先机。愈来愈认识到卷是没有意义的,学到东西才是真的,我会尽量端正自己的眼观,以一个正确的态度去面对未来的种种机遇和挑战。</p><p>以及,24学分和3天早八是真的舒服啊……</p>]]></content>
<tags>
<tag> summary </tag>
</tags>
</entry>
<entry>
<title>大英lexicon</title>
<link href="/2021/06/13/%E5%A4%A7%E8%8B%B1lexicon/"/>
<url>/2021/06/13/%E5%A4%A7%E8%8B%B1lexicon/</url>
<content type="html"><![CDATA[<h1 id="2020-2021-advanced-english-lexicon">2020-2021 advanced English lexicon</h1><h2 id="106-lexicon-210223">106-lexicon-210223</h2><h3 id="prenew-words">pre:new words</h3><p>lancet [ˈlɑ:nsɪt] n.柳叶刀; 刺血针; 口针<br>morale [məˈrɑːl] n.士气,精神面貌<br>trance [trɑːns] n.出神,恍惚<br>apparatus [ˌæpəˈreɪtəs] n.机构,组织;器械,设备<br>falcon [ˈfɔ:lkən] n.猎鹰<br>wrath [rɒθ] n.愤怒,激怒<br>compost [ˈkɒmpɒst] n.堆肥;混合,合成 vt.施堆肥;把…制成堆肥<br>depot [ˈdepəʊ] n.仓库;车库;公共汽车站,火车站<br>amenity [əˈmiːnəti] n.愉快;礼仪;举止;(环境等的)舒适<br>esoteric [ˌesəˈterɪk] adj.秘传的;机密的;难解的<br>proprietary [prəp’raɪətri] adj.专有的,专利的;专卖的<br>salutary [ˈsæljətri] adj.有益的,效果好的<br>defamatory [dɪˈfæmətri] adj.诽谤的,中伤的<br>desultory [ˈdesəltri] adj.散乱的;东拉西扯的;不合程序的;不按条理的<br>inflammatory [ɪnˈflæmətri] adj.令人激动的; 有煽动性的; 炎性的,发炎的<br>statutory [ˈstætʃətri] adj.法定的;依照法令的<br>nonchalent [ˈnɒnʃələnt] adj.漠不关心的,冷淡的;漫不经心的<br>docile [ˈdəʊsaɪl] adj.温顺的,驯服的<br>juvenile [ˈdʒuːvənaɪl] adj.少年的;幼稚的 n.青少年;雏鸟<br>versatile [ˈvɜːsətaɪl] adj.(指工具、机器等)多用途的; 多才多艺的; 有多种学问、技能或职业的; 多功能的<br>speculative [ˈspekjələtɪv] adj.投机的; 思考的; 推理的,揣摩的</p><h2 id="106-lexicon-210302">106-lexicon-210302</h2><h3 id="phrases-and-words-in-the-text">phrases and words in the text</h3><p>salvage the peace process 挽救和平进程<br>reject the deal 拒绝提案<br>amend 修正,修订<br>landmark 里程碑<br>lambast 鞭打(鞭策?促使?)<br>shirk one’s responsibility towards 逃避责任<br>truce 休战,停止<br>acrimonious 剧烈的,严厉的,辛辣的<br>cessation 暂时停止,休止,中断<br>pristine outdoor spaces 原始的,全新的,未开发的</p><h3 id="daily-vocabulary-learningcet6">daily vocabulary learning(CET6)</h3><p>spite n.恶意,怨恨;不顾(in spite of)vt.刁难,欺侮 out of spite<br>tenure n.任期;保有期;(教授)终身职位<br>eradicate v.消灭,解决(根除) eradicate the problems<br>primarily adv. 首先,主要地<br>eg:The article is primarily concerned with pollution.<br>deadlock n.僵局 v.僵持不下 break the deadlock 打破僵局 adj.deadlocked 相持不下的<br>arrogant 傲慢的 conceited 自负的<br>erode v.侵蚀,逐渐破坏,削弱 eg:This system of production eroded workers’ condition of labour.<br>severe adj.朴素的,不加装饰的 a rather severe red-brick building<br>propel vt.推进,推动;激励,驱使 n. propeller 螺旋桨<br>lure n.吸引力,诱惑 vt.吸引,诱惑 be lured by<br>sponge off n. 海绵 vt. 用湿海绵擦,揩 sponge off 依赖他人生活<br>feeble adj. 虚弱的,衰弱的,无力的;无效的,无益的<br>spontaneous adj.自发的,无意识的;自然的,天真率直的<br>ensue vi. 接着发生,接踵而来,因…而产生 eg: After the heavy rain, flood ensued.<br>eg: His illness ensued from malnutrition.<br>notion n.理念,观念;意图,想法 the central notion<br>be comparative to 与…相似<br>clutch n.离合器;掌握控制 vt. 抓紧,紧握 vi. 企图抓住 clutch at 企图抓住</p><h2 id="106-lexicon-210309">106-lexicon-210309</h2><h3 id="language-points">language points</h3><ol><li>fabric: cloth used for making clothes, curtains etc</li><li>call to someone: to shout to one in an attempt to draw their attention</li><li>loom: a machine on which thread is woven into cloth</li><li>confide in somebody: to tell someone about something very private or secret, especially a personal problem, because you feel you can trust them</li><li>prod: to make someone do something persuading or reminding them that it is necessary, especially when by they are lazy or unwilling</li><li>to death: informal used to emphasize that a feeling or emotion is very strong</li><li>set sb to doing sth: to make someone do work for you, especially when they do not want to do this</li><li>grind: to break something such as corn or coffee beans into small pieces or powder</li><li>sway: to influence someone so that they change their opinion; Don’ t allow yourself to be swayed by</li><li>hysterical: informal extremely funny; It was absolutely hysterical! Ive never laughed so much</li><li>infiltrate: to secretly join an organisation or enter a place in order to find out information about it or harm it</li><li>sweat: perspiration, hard physical work</li><li>LEX Downsizing (verb)</li></ol><ol><li>dismiss: to remove someone from their job; Bryant was unfairly dismissed from his post</li><li>dispense with sb’s services: no longer employ someone; Ex-tottenham boss Mauricio Pochettino is another contender to succeed Ole Gunnar Solskjaer if Manchester United dispense with the Norwegian</li><li>downsize: if a company or organization downsizes, it reduces the number of people it employs in order to reduce costs: The airline has downsized its workforce by 30%</li><li>ease out: to make someone leave their job in a way that makes it seem as if they have chosen to leave; He had been eased out of office in an attempt to prevent a political crisis<br>5)fire: to force someone to leave their job; She didn,t want to get fired<br>6)lay off: to stop employing someone because there is no work for them to do; The company laid off 250 workers in December</li><li>let somebody go: to make someone leave their job; We’ve had to let two members of staff go<br>8)make somebody redundant: to make someone leave their job because they are no longer needed, Five staff will be made redundant at the end of this month 9)out on your ear: informal to be forced to leave a job, organisation etc, especially because you have done something wrong: You d better start working harder, or you’ii be out on your ear</li><li>pink-slip: to dismiss(someone) from employment; Along with thousands of other steelworkers, I got pink-slipped something wrong. Used especially to avoid saying this directly, and also when the job is a powerfi/ one</li><li>relieve somebody of their post/position: formal to make someone leave their job because they have one: The colonel and two other senior officers were relieved of their posts</li><li>sack: informal to dismiss someone from their job; They couldn’t sack me II. workforce: all the people who work in a particular industry or company, or are available to work in a particular country or area, Schools are working increasingly with businesses to fill gaps in the workforce</li></ol><ol start="14"><li>restructure: to change the way in which something such as a government, business, or system is organized proposals to radically restructure Britain’ s electronics industry The President of Venezuela, Nicolas Maduro, has offered a 40% pay rise in the increment this year. The latest rise comes a day after hundreds of thousands of people took to the streets to protest against the government.</li><li>increment: a regular increase in the amount of money someone is paid; Most staff will receive an annual increment .</li><li>abstain: to choose not to vote for or against something: Six countries voted for the change, five voted against, and two abstained .</li><li>expel: to force a foreigner to leave a country, especially because they have broken the law or for political reasons; Foreign priests were expelled from the country deport: to make someone leave a country and return to the country they came from, es do not have a legal right to stay.</li><li>LEX Diplomatic Missions<br>01)embassy: a diplomatic mission generally located in the capital city of another country which offers a full range of services, including consular services: LDR ambassador 02)high commission: an embassy of a Commonwealth country located in another Commonwealth country, LDR high commissioner<br>03)permanent mission: a diplomatic mission to a major international organisation; LDR permanent representative(UN, WTO, NATO, EU), permanent delegate (UNESCO)</li></ol><ol start="4"><li>consulate-general: a diplomatic mission located in a major city, usually other than the capital city, which provides a full range of consular services; LDR consul-general<br>05)consulate: a diplomatic mission that is similar to a consulate-general, but may not provide a full range of services: LDR consul More than a million people have signed a petition, demanding that a captive polar bear in China be moved Animal rights groups have released a video of the creature, named Pizza, in a small glass enclosure in a shopping mall etition: a written request signed by a lot of people, asking someone in authority to do something or change something; Local residents have drawn up a petition to protest the hospital closure .</li></ol><ol start="19"><li>captive: kept in prison or in a place that you are not allowed to leave; His son had been taken captive during the raid.</li><li>enclosure: an area surrounded by a wall or fence, used for a particular purpose; the bear enclosure at the zoo.</li><li>orientate/orient: to give a lot of attention to one type of activity or one type of person; A lot of the training is orientated around communications skills .</li><li>self-righteous: derogatory believing that your ideas and behaviour are morally better than those of other people, She’s a vegetarian, but she’s not at all self-righteous about it .</li><li>grasp: to completely understand a fact or an idea, especially a complicated one; At that time, we did not fully grasp the significance of what had happened.</li><li>pay lip service to somebody/something: to say that you support or agree with something without doing anything to prove it; organizations that pay lip service to career development.</li><li>litany: derogatory a long list of problems, excuses etc; a litany of complaints</li><li>the crux: the most important part of a problem, question, argument etc, The crux of the matter is how do we prevent a flood occurring again.</li><li>buzz: if a group of people or a place is buzzing, there is a lot of activity or excitement; a classroom buzzing with activity.</li></ol><h2 id="106-lexicon-210321">106-lexicon-210321</h2><h3 id="language-points">language points</h3><ol><li>class-elected speaker/valedictorian: the student who has received the best marks all the way through school, and who usually makes a speech at the graduation ceremony.</li><li>get off to a good/bad start: to begin well or badly: On your first day of work, you want to get off to a good start</li><li>prestigious: admired as one of the best and most important: a prestigious literary award.</li><li>ingredient: a quality you need to achieve something;</li><li>conviction: a very strong belief or opinion; The Dotens have a deep conviction that marriage is for life.</li><li>dimensions: [P] how great or serious a problem is; a catastrophe of enormous dimensions.</li><li>delinquency: illegal or immoral behaviour or actions, especially by young people; the ever-rising statistics of delinquency and crime.</li><li>calamity: a terrible and unexpected event that causes a lot of damage or suffering, It will be a calamity for farmers if the crops fail again</li><li>distinctly: used to say that something has a particular quality or character that is easy to recognise, dishes with a distinctly Jewish flavour.<br>distinctive: having a special quality, character, or appearance that is different and easy to recognize; Male birds have distinctive blue and yellow markings</li><li>crop up: if a problem crops up, it happens or appears suddenly and in an unexpected way, New problems crop up every day.</li><li>ensue: formal to happen after or as a result of something; problems that ensue from food and medical shortages</li><li>predate: to happen or exist earlier in history than something else; The kingdom predates other African cultures by over 3, 000 years.</li><li>transpire: formal to happen; Exactly what transpired remains unknown</li><li>superfluous: formal more than is needed or wanted:; a modern building with no superfluous decoration.</li><li>LEX A Large Amount/Number of Something</li></ol><ol><li>a body of something: [C] a large amount or mass of something, especially something that has been collected; a considerable/growing body of knowledge/evidence/opinion<br>02)a cascade of something: [S] a large number or amount of something occurring or arriving in rapid succession: a cascade of anti-war literature<br>03)a clutter of something: [S] a large number of things that are scattered somewhere in an untidy way; a clutter of motels and restaurants<br>04)a great/good deal of something: [S] a large quantity of something, His work has been attracting a great deal of attention</li><li>a load of something: [C informal a lot of something: We got a load of complaints about the loud music</li><li>a myriad of something: [C] a very large number of things; We’re still studying a myriad of options</li><li>an orgy of something: [S] used to emphasize that people suddenly do a lot of a particular especially far too much of it; an orgy of spending<br>08)a panoply of something: [S] formal a large number of people or things; a panoply of men in grey suits<br>10)a raft of something: [S]a large number of things; The company has launched a whole raft of new software products a shedload of something: [C] informal a lot of something; A shedload of sludge and rubble has sparked traffic delays across Liverpool today<br>12)a slew of something: [S] informal a large number of things; a whole slew of cheap motels<br>13)a torrent of something: [S] a lot of words spoken quickly, especially in order to insult or criticise someone; When I asked him to move, he unleashed a torrent of abuse.<br>14)a volley of something: [S] a lot of questions, insults, attacks etc that are all said or made at the same time; a volley of abuse<br>15)many a something: formal old-fashioned a large number of people or things; Many a parent has had to go through this same painful process.</li><li>the weight of something: a large amount of something; The weight of evidence is that unemployment leads to all sorts of health problems</li></ol><ol start="16"><li>know of: to have heard of someone or something and be able to give a small amount of information about him, her, or it; I only know of one case in which this has happened.</li><li>dysfunctional: not following the normal patterns of social behaviour, especially with the result that someone cannot behave in a normal way or have a satisfactory life; dysfunctional family relationships.</li><li>the proverbial something: used when you describe something using part of a well-known expression; The store had everything including the proverbial kitchen sink.</li><li>the something/somebody from hell: informal not polite something or someone that is the worst you can imagine.</li></ol><h2 id="106-lexicon-210404">106-lexicon-210404</h2><h3 id="language-points">language points</h3><ol><li>LEX Something Increases</li></ol><ol><li>creep: to increase very slowly; The unemployment rate crept upwards from 16.7% to 16. 8%<br>02)mount: [I-UIP] to increase gradually in amount or degree, Tension here is mounting, as we await the final result<br>03)rocket(up): to increase quickly and suddenly; Interest rates rocketed up<br>04)shoot up: to increase very quickly and suddenly; Demand for water has shot up by 70% over the last 30 years</li><li>soar: to increase quickly to a high level; Her temperature soared<br>06)spike: if the number or rate of something spikes, it increases quickly and by a large amount; New telephone orders have spiked in the last two years 07)surge: to suddenly increase; Oil prices surged</li></ol><ol start="2"><li>LEX Something Decreases<br>01)decline: to decrease in quantity or importance; Spending on information technology has declined. 02)diminish: to become or make something become smaller or less; The partys share of the electorate has diminished steadily.<br>03)dive: if numbers, prices etc dive, they suddenly become much lower than before, The dollar dived against the yen in Tokyo today</li></ol><ol start="4"><li>drop: to fall to a much lower level or amount; The number of deaths on the roads has dropped sharply. 05)dwindle: to gradually become less and less or smaller and smaller, The elephant population is dwindling</li><li>fall: to go down to a lower level, amount, price etc, especially a much lower one; The rate of inflation was falling</li><li>fall away: to diminish gradually in size; Demand for our more theoretical courses has fallen away<br>08)nosedive: if a price, value, or condition of something nosedives, it suddenly goes down or gets much worse, Sales have nosedived since January.<br>09)plummet: to suddenly and quickly decrease in value or amount; Profits plummeted from to<br>10)plunge: if a price, rate etc plunges, it suddenly decreases by a large amount; The unemployment rate plunged sharply.</li><li>slide: if prices, amounts, rates etc slide, they become lower; Stocks slid a further 3% on the major markets today<br>12)slump: to suddenly go down in price, value, or number: Sales slumped by 20% last year. 13)taper off: to decrease gradually; Profits may be tapering off in the near future<br>14)tumble: if prices or figures tumble, they go down suddenly and by a large amount: Oil prices have tumbled</li></ol><ol start="3"><li>level off/out: to stop rising or falling and become steady; After climbing steeply, the path levelled off</li><li>account for: to give a satisfactory explanation of why something has happened or why you did something Can you account for your movements on that night?</li><li>decay: the gradual destruction of ideas, beliefs, social or political systems etc; During the war, the area fell Into decay</li><li>spell: to do someone else’s work for them for a short period so that they can rest; I can spell you if you get tired.</li><li>outlive its/your usefulness: to become no longer useful; The docks have outlived their usefulness.</li><li>intimacy: a state of having a close personal relationship with someone, a close sense of intimacy between parent and child</li><li>in your own right: used to say that you have something or achieve something on your own, without depending on other people, She’s a very wealthy woman in her own right.</li><li>egalitarian: based on the belief that everyone is equal and should have equal rights, an egalitarian society</li><li>apprenticeship: the job of being an apprentice, or the period of time in which you are an apprentice; He’s serving an apprenticeship as a printer.</li><li>roughhouse: to play roughly or pretend to fight; No more roughhousing</li><li>denude: formal to take something away from someone or something: The fact that people have left farm work has denuded many villages of their working populations</li><li>rehabilitate: to help someone to live a healthy, useful, or active life again after they have been seriously ill or in prison; a special unit for rehabilitating stroke patients.</li><li>refrain: formal to not do something that you want to do: Please refrain from smoking in this area</li><li>tender something to somebody: formal to formally offer or show something to someone; The seller has the right to keep the goods until payment is tendered to him</li><li>consolation: something that makes you feel better when you are sad or disappointed; The only consolation for the team is that they get a chance to play the game again</li><li>assuage: literary to make an unpleasant feeling less painful or severe; Nothing could assuage his guilt</li><li>anguish: written mental or physical suffering caused by extreme pain or worry; the anguish of not knowing what had happened to her</li><li>bereavement: formal when someone loses a close friend or relative because they have died, depression caused by bereavement or divorce</li><li>get (somebody )the hell out(of somewhere): informal not polite to leave a place quickly and suddenly; Lets get the hell out of here!</li><li>disembodied: existing without a body or separated from a body; disembodied spirits</li><li>protracted: used to describe something that continues for a long time, especially if it takes longer than usual necessary, or expected; the expense of a protracted legal battle</li><li>epiphany: an occasion when you suddenly understand something</li><li>fidget: to keep moving your hands or feet, especially because you are bored or nervous, The kids had started to fidget.</li><li>box off: to separate a particular area from a larger one by putting walls around it; Were going to box off that corner to get extra storage space</li><li>tensile strength: the ability of steel or concrete etc to bear pressure or weight without breaking compressive strength/compression strength: the capacity of a material or structure to withstand loads tending to reduce size, as opposed to which withstands loads tending to elongate</li><li>aspire: to desire and work towards achieving something important; At that time, all serious artists aspired to go to Rome</li><li>weather: if rock, wood, or someones face is weathered by the wind, sun, rain etc, or if it weathers, it changes colour or shape over a period of time; The brick has weathered to a lovely pinky-brown</li><li>foster: to help a skill, feeling, idea etc develop over a period of time; The bishop helped foster the sense of a community embracing all classes</li><li>pivot: to turn or balance on a central point, or to make something do this; The table-top pivots on two metal</li><li>do justice to somebody/something: to treat or represent someone or something good, beautiful etc in a way that is as good as they deserve; The photo doesn’t do her justice</li></ol><h2 id="106-lexicon-210502">106-lexicon-210502</h2><h3 id="language-points">language points</h3><ol><li>avert: to prevent something unpleasant from happening: The last-minute agreement averted renewed fighting</li><li>brace: to mentally or physically prepare yourself or someone else for something unpleasant that is going to happen; Nancy braced herself for the inevitable arguments</li><li>endure: written to accept an unpleasant or difficult situation for a long time; The victims of this war have endured tremendous pain and suffering</li><li>foil: to prevent something bad that someone is planning to do: A massive arms-smuggling plan has been foiled by the CIA</li><li>foment: formal to cause trouble to develop; foment revolution/trouble/discord: The song was banned on the grounds fhat it might foment racial tension</li><li>fuel: to make something, especially something bad, increase or become stronger; His words fuelled her</li><li>have had my fill of: informal to have done something or experienced something, especially something ad my fill of screaming kids for one day</li><li>instigate: to persuade someone to do something bad or violent: He accused union leaders of instigating the disturbances</li><li>perpetuate: to make a situation, attitude etc, especially a bad one, continue to exist for a long time; ar education system that perpetuates the divisions in our society</li><li>provoke: to cause a reaction or feeling, especially a sudden one; The proposal provoked widespread</li><li>)spell: if a situation or action spells trouble etc, it makes you expect trouble etc; The lack of rain could spell disaster for farmers</li><li>stamp out: to prevent something bad from continuing; We aim to stamp out poverty in our lifetimes</li><li>proclivity: a tendency to behave in a particular way, or to like a particular thing-used especially about something bad; The child showed no proclivity towards aggression</li><li>LEX Phrase Noun(Something Bad)<br>01)a litany of: a long list of problems, excuses etc; a litany of complaints<br>02)a spate of: a large number of similar things that happen in a short period of time, especially bad things, a pate of burglar<br>03)be caught up in something: to be or get involved in something, especially something bad; I didnt want to get caught up in endless petty arguments<br>04)be fraught with something: full of something, especially something bad; Their marriage has been fraught with difficulties<br>05)be prone to something: likely to do something or suffer from something, especially something bad or harmful; Kids are all prone to eat junk food<br>06)be subject to something: if someone or something is subject to something, especially something bad, it Is possible or likely that they will be affected by it; All flights are subject to delay<br>07)be tantamount to something: if an action, suggestion, plan etc is tantamount to something bad, it has the same effect or is almost as bad; To leave a dog home alone is tantamount to cruelty<br>08)be in the grip of something: to be experiencing a very unpleasant situation that cannot be controlled or stopped; a country in the grip of famine</li></ol><ol start="9"><li>in the wake of something: if something happens in the wake of something bad. it happens after and often because of it; Airport security was extra tight in the wake of yesterdays bomb attacks</li><li>on top of something: if something bad happens to you on top of something else, it happens when you have other problems; On top of everything else, I now have to go to work next Saturday</li><li>the onset of something: the beginning of something, especially something bad; An active and healthy lifestyle can delay the onset of disease in later life</li></ol><ol start="15"><li>LEX Kill(verb)</li></ol><ol><li>assassinate: to murder an important person, especially a politician; He was part of a plot to assassinate Hitler<br>02)butcher: to kill someone cruelly or unnecessarily, especially to kill a lot of people; They rounded up and butchered 250 people<br>03)cull: to kill animals so that there are not too many of them, or so that a disease does not spread; The plan to cull large numbers of seals has angered environmental groups<br>04)eliminate: slang to kill someone in order to prevent them from causing trouble; a ruthless dictator who eliminated all his rivals<br>05)execute: formal to kill someone as a punishment for a crime; Mcveigh, who killed 168 people in a bombing attack, was executed by lethal injection<br>06)exterminate: to kill large numbers of people or animals of a particular type so that they no longer exist; Staff use the poison to exterminate moles and rabbits</li><li>massacre: to kill a large number of people in a violent way: Thousands of peaceful demonstrators were massacred by the soldiers.<br>08)slay(PT slew PP slain): journalism to kill someone or something in a violent way, Two teenagers were slain in the shootings<br>09)slaughter: to kill a lot of people in a cruel or violent way: Hundreds of innocent civilians had been slaughtered by government troops caver: a North American animal that has thick fur and a wide flat tail, and cuts down trees with its teeth</li></ol><ol start="16"><li>virus: a very small living thing that causes infectious illnesses<br>endemic: [A] an endemic disease or problem is always present in a particular place epidemic: [C/A] a disease with a large number of cases that happen at the same time pandemic: [C/A] a disease that affects people over a very large area or the whole world</li><li>LEX Cheat for Money (verb)</li></ol><ol><li>con: informal to get money from someone by deceiving them; He conned me out of #300<br>02)defraud: to trick a person or organisation in order to get money from them; She defrauded her employers of thousands of pounds<br>03)stitch someone up: to deceive someone, especially in order to gain money from them: I dont want to stitch you up.<br>04)swindle: to get money from someone by deceiving them; a businessman who swindled investors out of millions of pounds</li></ol><ol start="18"><li>LEX Very Surprising(adjective)</li></ol><ol><li>amazing: very surprising, especially about good or impressive things 02)astonishing: very surprising</li><li>astounding ng: formal very surprising or shocking<br>04)staggering: very surprising, especially by being so large 05) stunning: very surprising or shocking</li></ol><ol start="19"><li>reversal: a change to an opposite arrangement, process, or way of doing something; Some Internet firms have suffered a painful reversal of fortune</li><li>conspire: to secretly plan with someone else to do something illegal; conspire(with somebody)to do something: All six men admitted conspiring to steal cars. conspirator, conspiracy, conspiratorial</li><li>disruptive: causing problems and preventing something from continuing in its usual way, Night work can be very disruptive to home life</li><li>through thick and thin: in spite of any difficulties or problems</li><li>LEX Increase Something(transitive verb)<br>01)augment: formal to increase the value, amount, effectiveness etc of something: Any surplus was sold to augment their income.<br>02)beef up: informal to increase or improve something, or to make it more interesting: The hotel plans to beef up its marketing effort<br>03)boost: to increase something and make it more successful; The new resort area has boosted tourism 04)pump up: informal to increase the value, amount, or level of something; The US was able to pump up exports</li></ol><ol start="5"><li>ramp up: to increase something such as a rate or level, especially the rate at which goods are produced;<br>Producers can quickly ramp up production<br>ratchet up: to increase something by a small amount, especially after a series of increases, or to increase in this way: Raising the minimum wage would ratchet up real incomes in general</li><li>scale up: to increase the amount or size of something; Production at the factory is being scaled up 08) step up: to increase the amount of an activity or the speed of a process in order to improve a situation</li></ol><ol start="24"><li>LEX Decrease Something(transitive verb</li></ol><ol><li>curtail: formal to reduce or limit something: The new law will curtail police powers<br>02)dampen down/dampen: to make something such as a feeling or activity less strong; The light rain dampened the crowd’s enthusiasm<br>03)dial down: to reduce or diminish in effect or intensity; Nobody wants a war-we ought to dial down the rhetoric<br>04)diminish: to become or make something become smaller or less; These drugs diminish blood flow to the<br>05)eat into: to gradually reduce the amount of time, money etc that is available; Johns university fees have been eating into our savings<br>06)whittle away: to gradually reduce the amount or effectiveness of something, especially something that you think should not be reduced; The museum is worried that government funding will be whittled down: to gradually reduce the work of a business or organization so that it can be closed down completely; They’re winding down their overseas operation because it is losing money</li></ol><ol start="25"><li>envoy: someone who is sent to another country as an official representative; The United Nations is sending a special envoy to the area</li><li>annex: to take control of a country or area next to your own, especially by using force; The Baltic republics were annexed by the Soviet Union in 1940</li><li>distort: if you distort a statement, fact, or idea, you report or represent it in an untrue way, The media distorts reality<br>falsify: to change figures, records etc so that they contain false information; The file was altered to falsify the evidence<br>skew: if something skews the results of a test etc, it affects them, making them incorrect; All the people we questioned lived in the same area, which had the effect of skewing<br>vist: to change the true or intended meaning of a statement, especially in order to get some advantage for yourself; He’s always trying to twist my words and make me look bad</li></ol><h2 id="106-lexicon-210512">106-lexicon-210512</h2><h3 id="language-points">language points</h3><ol><li>the weight of something: a large amount of somethings The weight of evidence is that unemployment leads to all sorts of health problems</li><li>something is not for the faint-hearted/the faint of heart: something is an extreme or very unusual example of its kind, and is not suitable for people who like only safe and familiar things; It’s a film about a serial killer and not for the faint-hearted.</li><li>the faint of heart: someone who is lacking the courage to face something difficult or dangerous; This is a difficult climb that is not for the faint of heart.</li><li>runaway: [A-OBNJ happening very easily or quickly, and not able to be controlled; The film was a runaway success.</li><li>strain: to make excessive demands upon: strain nnes ability/finances/luck/relations/resource</li><li>a flurry of something: [C]a small amount of snow or rain that is blown by the wind; a flurry of snow</li><li>cascade: a large number or amount of something occurring or arriving in rapid succession; a cascade of anti-war literature</li><li>set/put something in motion: to start a process or series of events that will continue for some time; The Church voted to set in motion the process allowing women to be priests</li><li>LEX Forces</li></ol><ol><li>friction: the natural force that prevents one surface from sliding easily over another surface; Putting oil on both surfaces reduces friction<br>02)gravitation: the force that causes two objects such as planets to move towards each other because of thei Ir mass; Newton’s law of gravitation<br>03)momentum: the force that makes a moving object keep moving; The wheel was allowed to roll down the slope, gathering momentum as it went</li><li>propulsion: the force that drives a vehicle forward; research into iquid hydrogen as a means of propulsion</li><li>tension: the amount of force that stretches something; This wire will take 50 pounds tension</li><li>traction: the force that prevents something such as a wheel sliding on a surface; The tires were bald and lost traction on the wet road</li></ol><ol start="10"><li>fully-fledged/full-fledged: [A-OBN] completely developed, trained, or established: After seven years of training, she’s now a fully-fledged doctor</li><li>scatter: if someone scatters a lot of things, or if they scatter, they are thrown or dropped over a wide area in an irregular way</li><li>confound: to confuse and surprise people by being unexpected</li><li>knavish: old-fashioned dishonest and unscrupulous</li><li>LEX Prepositional Differences<br>01)advocate/advocate for: to publicly support a particular way of doing something: Extremists were openly advocating violence.<br>02)go off on a tangent/go off at a tangent: to suddenly start thinking or talking about a subject that is only slightly related, or not related at all, to the original subject; Lets stay with the topic and not go off at a tangent<br>03)harp on about something /harp on something: informal to repeat or complain about something many times in an annoying way; Don’t keep harping back to that.<br>04)in the hot seat/on the hot seat: informal in a difficult position where you have to make important decisions, answer questions etc; It’s been a bad week for the men in the hot seat</li></ol><ol start="5"><li>protest against/about protest: to come together to publicly express disapproval or opposition to something: Thousands of people blocked the street, protesting against the new legislation</li></ol><h2 id="106-lexicon-210602">106-lexicon-210602</h2><h3 id="language-points">language points</h3><ol><li>LEX A Group of Things<br>01)a bunch of something: [S] a group of things that are fastened, held, or growing together; I’ll send her abunch of flowers<br>02)a convoy of something: [S] a group of vehicles or ships travelling together, sometimes in order to protect one another; The British left in a convoy of 20 cars<br>03)a clump of something: [S] a group of trees, bushes, or other plants growing very close together; a thick clump of grass<br>04)a cluster of something: [S] a group of things of the same kind that are very close together; a cluster of low farm buildings<br>05)a clutch of something: [S] a small group of similar things; a clutch of eggs<br>06)a crop of something: [S]a group of things that happen at the same time; The judges will select the best from this year’s crop of first novels<br>07)a mass of something: [C] a large amount or quantity of something; a huge mass of data<br>08)a mosaic of something: [S] a group of different things that exist next to each other or together; The forest floor was a mosaic of autumn colours<br>09)a string of something: [S] a group of similar things:; She owns a string of health clubs<br>10)a(treasure)trove of something: [S] a group of valuable or interesting things or pieces of information; Our Science Shop is a treasure trove of curiosities and gadgets.<br>11)a volley of something: [S]a large number of bullets, rocks etc shot or thrown through the air at the same time: a volley of bullets<br>12)an array of something: [S] a group of things, especially one that is large or impressive: There was a vast array of colors to choose from</li><li>LEX A Group of People<br>01)a bunch of people: [S] a group of people: a friendly bunch of people</li></ol><ol start="2"><li>a cabal of people: [S] a small group of people who make secret- plans, especially in order to haveO2, political power; He was assassinated by a cabal of aides within his own regime.<br>3)a cluster of people: [S] a group of people all in the same place, A cluster of children stood around the ice cream van<br>04)a cohort of people: [S] technical a group of people of the same age, social class etc, especially when they are being studied; a cohort of 386 patients aged 65 plus<br>05)a crop of people: [S] a group of people who arrive at the same time; South Korea’s present crop of elected politicians<br>06)a cult of people: [S] a group of people who are very interested in a particular thing, O’Brien has a cult of devoted readers.</li><li>a faction of people: [C] a small group of people within a larger group, who have different ideas from the other members, and who try to get their own ideas accepted: A faction of people today only had one intention-to be violent and unlawful<br>08)a harem of women: [S] the group of wives or women who lived with a rich or powerful man in some Muslim societies in the past: A harem of women created the treat</li><li>a horde of people: [C] a large crowd: A horde of people was screaming for tickets</li><li>a legion of people: [C] literary a large number of people; Legions of fans attended the concert</li><li>a mass of people: [C] a large crowd; There was a mass of people around the club entrance<br>12)a party of people: [S] a group of people who go somewhere together or do a job together; a party of tourists</li><li>a posse of people: (S) informal a group of the same kind of people; I was surrounded by a posse of photographers</li><li>a rabble of people: [S] a noisy group of people who are behaving badly; He was met by a rabble ofnoisy angry youths.</li><li>an array of people: [S] a large number or wide range of people; A dazzling array of celebrities are expected at the Mayfair gallery to see the pictures</li></ol><ol start="3"><li>schadenfreude: (formal) a feeling of pleasure that you get when something bad happens to someone else</li><li>gloat: to show in an annoying way that you are proud of your own success or happy about someone else’s failure; gloat over something: The fans are still gloating over Scotlands victory.</li></ol><h2 id="106-lexicon-210613">106-lexicon-210613</h2><h3 id="language-points">language points</h3><ol><li>catharsis: formal the act or process of removing strong or violent emotions by expressing them through writing, talking, acting etc; Music is a means of catharsis for me.<br>cathartic formal helping you to remove strong or violent emotions: a cathartic experience</li><li>Taste(adjective)<br>01)highbrow: a highbrow book, film etc is very serious and may be difficult to understand: The Divine<br>Comedy( Dante), The Iliad(Homer), Hamlet (William Shakespeare)<br>02)middlebrow: middlebrow books, television programmes ete are of fairly good quality but are not very difficult to understand: The Huger Games(Suzanne Collins), The Twilight Saga(Stephenie Meyer), A<br>Game of Thrones(George Martin)<br>03)lowbrow: lowbrow entertainment, newspapers, books etc are easy to understand and are not concerned with serious ideas about art, culture etc; Undisputed Truth: M biography(Mike Tyson)<br>04)frothy: a frothy book, film etc is enjoyable but not serious or important; Her first novel was a frothy romantic comedy</li><li>stunt something that is done to attract peoples attention, especially in advertising or politics; Todd flew over the city in a hot-air balloon as a publicity stunt.</li><li>contrived: seeming false and not natural; The characters are as contrived as the plot</li><li>trademark: to secure trademark rights for or register the trademark of something</li><li>brazed: used to describe a person, or the actions of a person, who is not embarrassed about behaving in a wrong or immoral way; her brazen admission that she was cheating on him</li><li>lecture somebody about/on something: to talk angrily or seriously to someone in order to criticize or warn them, in a way that they think is unfair or unnecessary; He began to lecture us about making too much noise.</li><li>mightily: formal with great effort; He spent ten years struggling mightily with the bureaucracy.</li><li>merit : to be good, important, or serious enough for praise or attention; It’s a fascinating book which merits attention</li><li>fleece: to take someones money dishonestly, by charging too much money or by cheating them; That restaurant really fleeced us!</li><li>refurbish: to decorate and repair something such as a building or office in order to improve its appearance, The Grand Hotel has been completely refurbished</li><li>malign: to say unpleasant things about someone that are untrue; She had seen herself repeatedly maligned in the newspapers</li><li>flavorful: having a strong pleasant taste; flavorful cheese</li><li>textured: having a surface that is not smooth; textured wallpaper</li><li>get something straight: spoken to understand the facts of a situation and be able to tell them correctly: I wanted to get the facts straight.</li><li>launch into something: to suddenly start a description or story: He launched into a speech about the importance of new products</li><li>unplugged: if a group of musicians perform up/egged, they perform without electric instruments: Eric Clapton unplugged.</li></ol>]]></content>
<tags>
<tag> notes </tag>
</tags>
</entry>
<entry>
<title>20江苏高考数学拾忆</title>
<link href="/2021/06/07/20%E6%B1%9F%E8%8B%8F%E9%AB%98%E8%80%83%E6%95%B0%E5%AD%A6%E6%8B%BE%E5%BF%86/"/>
<url>/2021/06/07/20%E6%B1%9F%E8%8B%8F%E9%AB%98%E8%80%83%E6%95%B0%E5%AD%A6%E6%8B%BE%E5%BF%86/</url>
<content type="html"><![CDATA[<h1 id="20江苏高考数学拾忆">20江苏高考数学拾忆</h1><p>14:50发答题卡了,看了看区域,发现19题的区域有一页多,心里倒有点期待奇奇怪怪的题目。</p><p>14:55发试卷,我没有急着开始默做填空题,而是浏览了一下17、18、19、20,发现1718的题型还是比较常规的,预示着大部分题都比平时送分,19题看见有二根号二和根号七,且第三问的不等式我猜想是比较难啃的切线处理,20题拿手的数列看起来也不简单,k分之1次方让人难免有些没底。5分钟之内勘探好敌情,得出结论,前18题送分,最后两题可能会是10年来前所未有的送命题。</p><p>15:00开考,稳扎稳打地做完填空题,13题当时没有考虑长度为0的情况直接过去了,14题一看隐去坐标系用几何写出表达式一步基本不等式瞬杀。填空题做完大概用了12分钟,正常速度,没有急着做15题,又花了10分钟仔细核对了填空答案,确认无误继续做题。</p><p>1516,其中16是不常见的解三角形。做的很小心,每步谨记注意点,花了十几分钟写完并誊写到答题卡上。</p><p>17把每处的数据都标在了图上,按部就班求点列式,很熟悉的函数求导极值应用题,定义域检查了好几遍,放心无误了转入解几。解几不是平常所做的那些技巧性比较强的定点定值或是证明题,而是暴力求解的计算题,轻松解决前两问,第三问直接用点到直线的距离求出两边的直线方程,代入求解,答案并不是很简洁,我又用另一种方法验算了一遍才结束这题。</p><p>至此,16:10分左右,距离一卷结束还剩50分钟。本可以更快,但控制在了和平时差不多的速度,因为最后一次要写得漂亮。</p><p>导数题,前两问简单得有些诡异,但也没敢浪费时间,研究第三问。做出函数图像,同时看了眼四次函数,和我考前5分钟想的应该一样,果然是切线形式。看着四次函数的切线与二次函数的交点距离,我一时有点懵,当时有点慌了,导数怎么会做不出来呢。硬着头皮联立方程,韦达定理,准备求两点间坐标差,但当时对于t的意义还比较模糊。其实方向是对的!只要继续算下去再回溯求过程就行了,但是一看表还剩不到30分钟了,于是果断先放着这个可能还会耗用一定时间的第三问开始搞最后一题。</p><p>前两问都是非常简单的,我做到第二问猜想第三问的方法应该也大致如此。首先一看有An+1,用Sn+1-Sn代了,发现是齐次式,心中一喜,这题已在掌握之中了。不慌不忙做两次换代,把三分之一次方立方展开,得到一个带参的三次方程,可因式分解的三次方程!和我猜想一致!不同的数列就是指方程不同的根!这时候距离考试结束还有15分钟左右,我把二次方程用判别式解出最后范围为(0,1),其实这就是最后的答案!还有一个呢,Sn+1=Sn,an=0?突然一阵慌张晃过脑子,0的开方有意义吗,0的0次方……我一时有点混乱,但是经过一番思索,我最终把一个解舍去了(为什么为什么为什么。。。)最后落笔,不存在。</p><p>这时候距离考试结束还有10分钟不到,我回望了下15-18,再战19题,继续…韦达定理,坐标差,根号下6次方程,求导,最后解出来个三分之一,不太对劲,往里一代果然不是,于是一卷结束了,我长呼一口气,当时还没意识到自己20题结论写错了,认为还可以二卷做的好190+还是有希望的,稳住心情做二卷。</p><p>前面都是再熟悉不过的常规题,空间解几算得很快很顺利,14分钟解决前三题,决战最后的23题递推概率。其实我是有点没底的,因为递推题我做的不是太熟练。一直在认真分析,可是式子却一直没列对,pnqn混杂眼睛都快看花了,一直到17:25的时候才列出了最终的递推式,我的手已经开始微微颤抖了,还有最后的解递推数列。</p><p>事情并没有那么顺利,还挺难算的,27的时候我有点力不从心了,但是我不甘心啊,这样的卷子我想创造历史啊,怎么能功亏一篑呢!于是我冷静了几秒钟大胆换元简化形式,直接在答题卡上笔走如蛇开飙,然后以极快的速度跳步直接写通项,写出来了!抬头看一眼钟,已经28了!还有最后的数学期望,拆解形式往里面一代化简,最后的答案很简洁漂亮,1+3^-n!</p><p>此时此刻,17点29分,还有15秒打铃。我松开笔,瘫倒在桌上,再也没力气去回望这场荡气回肠的考试,余光里身边奋笔疾书的人渐渐模糊,直到刺耳的铃声响彻校园,像是释放了很多疲惫的灵魂。</p>]]></content>
<tags>
<tag> 回忆录 </tag>
</tags>
</entry>
<entry>
<title>大一上总结</title>
<link href="/2021/01/31/%E5%A4%A7%E4%B8%80%E4%B8%8A%E6%80%BB%E7%BB%93/"/>
<url>/2021/01/31/%E5%A4%A7%E4%B8%80%E4%B8%8A%E6%80%BB%E7%BB%93/</url>
<content type="html"><![CDATA[<h1 id="大一上学期总结与思考">大一上学期总结与思考</h1><h2 id="落差">落差</h2><p>其实最后兜兜转转从邮中考到交大,倒也是意料之中的结果。高一那时候写的目标大学就是上海交通大学,虽然到了最后更接近于以前交大学长口中经常说的“考败来交”,其实这些都是无所谓的,当我步入交大校园的那一刻,还满满的是新鲜和憧憬。</p><p>校园很大,大到第一个月在校园里还时不时能迷路;食堂很多很丰富,各种美食、小吃总是在上课的时候就催促我计划晚饭去一二三四五六七餐玉兰苑哈乐哪边吃饭;环境很好,无论是鸟语花香的校园环境还是先进舒适的教室环境都让我觉得比较舒心。</p><p>其实大家进入大学之前,都曾构想过美好的大学生活——有一个精致的小窝,认真学好基础知识,参加丰富多彩的活动,培养兴趣爱好,积累社会经验…虽然我早有预料这些无法实现,但落差感仍无法避免。</p><p>我第一次认识到了<strong>地域差距是如此的大</strong>。一线大城市的学生,和小县城做题家,进入校园碰触到的校园生活是完全不一样的;我们所构想的美好生活,其实往往是假定我们已经拥有了其所需要的资源和经历。总之,强者越来越强,做题家们无所适从,从而也带来新鲜生活下的淡淡隐忧。</p><h2 id="学习">学习</h2><p>我拥有着差不多我所有高中同学中强度最大的课表课程。一周5或6天早八,一周有三天从早到晚满课,总共有33.5学分的课程。</p><p>从头说起。</p><p>先是刚进校的英语分级考,难度奇大,超过六级难度,听力基本连猜带猫。最后分级教学进入了大英三(英四为最高层次)事实上绝大部分上海考生都在英四,江浙的有很多在英三。</p><p>没过两天之后又是大学物理分级考,考全国卷高考样子的选择题。作为江苏考生表示考不过全国卷考生,虽然搞过物竞,最后全寝最低,虽然也能去了大学物理A班,没能选拔上荣誉班罢了。</p><p>9月底有一个数学分析分级考,提供免修高数进入数分荣誉班学习数学分析的机会。我很轻松做完了整张卷子并提前交卷,顺利进入王楷植老师的数分荣誉班学习。后来数分考了三场试,81,84,85,非常稳,每次都有小遗憾,当然每次也非常难。</p><p>9月份的分级考考了84,最后以电院第9的排名进入了计算机科学与技术专业。</p><p>这样一来大概课程体系就全了,数分、程设、线代、心理、大英、军理、思修、排球、大化、工导、大化实验、形策、中医药、都市农业(最后两个是选修课)。</p><p>首先我要吐槽,第一个肯定是工导。工程学导论这门课,就是老师在上面扯皮“如何做工程一类”,学生各忙各的,学期任务需要学生组队完成一个工程项目(类似于发明创新)。什么技术也不教,就让你造各种东西,这门课存在的意义是什么?对于县城做题家来说,稀里糊涂水完了,能学到的东西微乎其微。我说,如果少了这门课,我的生活质量会上升很多。其次就是学校眉毛胡子一把抓统一让工试学生学大化和大化实验我觉得只是徒增学生负担,虽然课程难度并不大。</p><p>最重要的课当然是数学和计算机了。数分这门课学的稍稍还有点感觉,平时也会偶尔找一些资料啊题目啊练手,但学校的高数营里面大佬讨论的我实在是感觉自己差了一个档次,所以我也不怎么活跃于群(感觉和其他大佬的差距越来越大)。<br>程设我学起来特别痛苦,主要是以前没有接触过,以及会犯一些比较粗心的语法错误。经常性的上机作业一条题目耗几个小时,经常抓狂但自己做出来又特别开心这样子。程设我只能说,勉强跟上教学进度,这门课我真真认识到了地域差距和信竞生的优越感,强者高高在上,弱者苦苦挣扎。</p><p>其他的课大半都在划水,到了期末考试周的时候开始突击复习,比如线代抱李永乐大腿,大英小测抱佛脚大测裸考,思修军理考前慌不择路地背书,选修课考前三小时极限预习……</p><p>每一门都学得不够深入,但是最后出来的成绩还算可观:核心学积分87.96/100,核心GPA3.79/4.3,在CS系里面排名学积分和GPA都在前百分之二十.有一门满绩(95),有5门A(90-95),没有低于80分的科目。</p><p>当然我心里很清楚,在上交最卷的cs系里,待下学期各专业第一转进来后,排名就不容乐观了。</p><h2 id="社交">社交</h2><p>首先我庆幸有比较好的室友,和对面室友。大家脾气都很好也有着不同的特点,相处也都愉快,一起学习一起打游戏一起宿舍嗨皮等等。</p><p>对于社团活动,我的方针是,静观其变,上学期不参与任何社团。事实上我的室友或朋友也拉拢过我进歌手联盟&钢琴协会&艺术中心,也有一些私下的招新,比如歌联、比如水灯节招新大会…艺术中心是我记性不好错过了招新,其他两个不仅仅是“静观其变”的原因,更加在于我对社团内部风气和氛围的一些质疑和不确定。我是不想加入可能会带来不适的社团的,即使这个领域我很感兴趣。</p><p>至于班级管理和学生工作这方面,我是一点也没有触及,我对这些工作敬而远之。</p><p>大一上最有趣的一次经历可能就是上海马拉松志愿者了,经过一些坎坷终于混到了起点管理位置,凌晨两点出发,也是第一次体验通宵。站岗站到7点多还欣赏了外滩的美景(毕竟难得中的难得来上海),虽然这对我社交没有任何益处,但是是一次不错的体验。</p><p>班级方面,比较无语。老班级只有过一次小班会,那次混个脸熟,之后就没有更多的交集了。后来分到新班,一次班会见了思政和班主任。班里同学也不说话几乎没几个认识的,思政似乎比较懒于忙我们的学习生活,班主任更是只是来走个场子丝毫不关心我们的样子。我对这样的班级氛围感到不适,希望下一学期能够稍微有点班级的归属感和集体感吧。(到现在也不认识几个人)</p><p>总之,与其说是社恐,更不如说是我暂时不想让一些杂七杂八的活动打乱我适应大学的节奏,下学期会好一些的。也不是说疏于社交啦,也是认识不少有趣的同学和学长的。</p><p>以及,到了大学,才发现,社交,真的很少很少有朋友的。大家都是利益关系的互相交错认识了彼此,其实,能像从前一样听你倾诉的,也许再也不会有了。</p><p>有些路啊,只能一个人走。always.</p><h2 id="思考">思考</h2><p>首先,从来交大之前,交大所看重的“致远荣誉计划”就让我感到很疑惑。上交专门选出一部分学生组成致远学院,学习难度较大的课程,着重培养科研人才,保研率百分之百同时每学期5000元奖学金。(当然淘汰制度是免不了的)这个听起来极其类似国家新出台的“强基计划”。当初一批次招生其实就差不多按高考成绩,不过当时出于对强基的不爽和对科研的无感,<s>以及面试那天我过生日</s>,我没有去致远学院。</p><p>但后来我感觉到,致远学院自带人上人的光环,荣誉的称号,似乎他们才是交大的人才,其他人大多只是走场子的炮灰而已。交大的一个所谓“荣誉”,自动带来了学生的层级地位的划分,虽然我自己是单科数分荣誉班,但我还是对此表示略有不适。一种割裂感。</p><p>同时我也看出了一个严重的不好导向——学校过于看重科研,从大一就开始将学生哄入科研的道路,和强基计划不谋而合。但,科研不同于职场啊,你必须在最领先的领域有突破才能叫科研,换句话说,学校送这么多人头,只是为了最顶尖的那几个而已,而其他的大部分人,没有了利用价值学校还会继续对你倾注心血吗。而且中国的科研环境,实在是一言难尽。</p><p>在这样的时代需求背景下,处处都是博弈和利益纵横。</p><p>于是,很多评优保研的标准就和科研挂钩,导致学生在政策导向下开始没有方向的卷,为卷而卷。这样多累啊。科研是国家需求,但科研不应是大势所趋,当越来越多的人漫无目的地卷,变成水军,我更觉得这是一种资源的浪费。</p><p>我个人是很厌恶为卷而卷的。在交大卷心cs系里,我也不指望去拼科研拼gpa去保研,因为这样所投注的无意义的时间过多了。我更在乎的是,这些时间我能学到什么,能怎么提升自己的水平,能缩小地域间的差距。我宁愿去考研,或者说提前规划实习看看有没有能力本科就业。你只有知道自己想要什么,才会成为什么。</p><p>我觉得迟先生是一个很厉害的人,我跟他的差距也实在是太大太大,但他的态度和想法,我是认同的。</p><p>前一段时间看到了一个贴吧,讲劝退专业现在在就业领域的艰难处境,深深感觉到这个社会还是充满了冷漠和残酷。现在硕士越来越成为一个缓冲地带,那么多人读硕士某种原因也是他们对于未来惶惑不知所措。但是现在企业大厂对硕士文凭的看法呢?以及硕士期间科研成果的比重呢?这些都为未来带来来了深深的不确定性。劝退专业早转码早好已经貌似成为自救的稀有道路,而IT领域呢,则是卷上加卷,供大于求,实是残酷。</p><p>或许我在大一的时候不该去被这些残酷所困扰的。但真的压力很大。高中结束,能望见头的拼搏日子就已经结束了,下面永远是深渊遍布的未来。</p><h2 id="总结与规划">总结与规划</h2><p>第一学期总体来说过的是比较混的,没有什么亮点,只是还在艰难地想要融入大学生活。但是我真的想要融入这样的生活吗?</p><p>对于社交我觉得倒是次要的了,且这也是不能强求的,得之我幸吧。还是学习为主,下学期选了36.5学分的课,感觉要爆炸,有好多物理相关的课。我希望在把课内平稳学好的同时能够再加强一下自己的代码能力,为日后做项目稍稍做一些准备。以及,如果有时间的花,大概可以慢慢开始啃csapp了吧…</p><p>上学期高中情结还挺多,也在高三投入了不少精力和时间,总是想做一个好人hhh。下学期尽量减少在此方面的时间吧,争取提高时间的利用效率。</p><p>以及,争取少熬夜,多睡觉。比起以上思考规划,我更希望下学期结束时还是各健康快乐的小伙子。</p>]]></content>
<tags>
<tag> summary </tag>
</tags>
</entry>
<entry>
<title>甘雨园拾花</title>
<link href="/2020/10/30/%E7%94%98%E9%9B%A8%E5%9B%AD%E6%8B%BE%E8%8A%B1/"/>
<url>/2020/10/30/%E7%94%98%E9%9B%A8%E5%9B%AD%E6%8B%BE%E8%8A%B1/</url>
<content type="html"><![CDATA[<h1 id="甘雨园拾花">甘雨园拾花</h1><h2 id="1-从赞化宫到甘雨园">1. 从赞化宫到甘雨园</h2><p>2017年6月28日的下午,临近平时放学的那一刻,我站在赞化楼和瞻星楼之间的衔接廊上,夕阳透过窗照了进来。忽然意识到,这似乎也像是过去和未来的衔接点。</p><p>眼前浮现出周主任特意从五楼年级处下来向我转达状元的喜报的场景,浮现出与老郭在战前握手的场景,以及中考结束和贾在校园里无忧无虑乱晃、串门,期末代表初三学生的动员发言,汉字听写大会的翘课备战、挥手扬州,每个星期的培优班划水,每个星期的赞化学堂讲座,吕老师的火锅…历历在目。</p><p>当时心中其实也并不完全是喜悦,还有一种怅然若失之感,看见旁边有些失落的贾,心里却也有点不是滋味,于是老郭的庆功宴我也没去,便径直回家了。当天晚上,相比于同学亲友的祝贺,我更在意的是,他们都去了哪儿。于是我跟他们联系,jcg,zl,sc,lyt…结果是,贾在徘徊的边缘和我一起去了邮中,zl他们都选择去了扬中。我的九(23)班有三个人和我一起来到了高邮中学的竞赛班。</p><p>第二天早上便是去邮中竞赛班提前报道了,是在教务处(日后打交道最多的地方之一)。记得蒲苇(比我少一分的榜眼)在帮忙分发暑期衔接教材,家长们有一句没一句地跟我道贺。同时我也看了暑期安排——7月初就开始上课了,太不好了,不过对于北京研学营我还是很期待的。</p><p>离开教务处,第一次自己骑车绕着校园晃了一圈。橙色的楼宇,整洁漂亮的建筑结构,树木葱茏,鸟语花香,还有一座大体育馆。还是挺满意的,心里慢慢便有了这样的感觉:以后这里就是我的新家啦!</p><hr><h2 id="2初识邮中">2.初识邮中</h2><p>竞赛班第一次上课是在实验楼的江苏省物理课程基地,地方不大,一进门便是熟悉的面孔。有两个老师在场,分别便是我高一兼高三后期的班主任、高中三年的英语老师Hannah 孙,以及负责招生的、我近两年的班主任李hl。孙给我的第一印象是一个和蔼的年轻女老师,仅是初印象),hl则略有一点油腻大叔的味道。</p><p>大概是按照中考成绩分小组,我们B1组差不多像是第一梯队的样子,很幸运地,和老熟人贾cg成为了同桌,当时同一组的还有之后慢慢认识的查伟,文涛等等…当时还缺一个人,我知道这便是我听闻已久却从未谋面的南海大神子昂了。</p><p>第一天上课上到一半,一个略高略胖身材(其实不胖)的同学冒冒失失地进来了,搬个小凳子就坐在了我的旁边,这便是和子昂的第一次相遇。简单互相认识了一下,他在我的新生手册上留下了他的qq,那本书我至今还留着。</p><p>于是便有了各科的第一堂课。语文是老杨,后来我高一的语文老师授课的。老杨上课轻松愉悦,总是问一些难以回答的问题。第一堂课我知道我肯定会中奖,“他年我若为青帝,报与桃花一处开”。以及老杨的“si不si啊”深入人心,有同学特意记录老杨一堂课说了六十几次。英语呢,第一堂课便让我初次体会到了灭绝之感,提问,答不出来就站着了,成功中奖的仍有我一个,前几堂课抄笔记抄的手酸。数学是hj和jcz老师都上过,我对数学课向来无感,上的是4-1的平面几何(后来从我们这届开始4-1不考了)。物理化学感觉跟初中没有什么太大的难度提升,也是划划水…</p><p>但作业是真的害怕,第一天就给我们做高三的英语阅读,直接做到心态崩,于是首开十二点记录。数学倒是还好,都在课上写完了,以及衔接教材我花了一个晚上就做掉了。语文要求练字,积累词语…怎么说呢,就是暑假还没开始就结束的感觉。</p><p>后来我们搬到了大会议室上课,随着大家的慢慢熟悉,也逐渐油条起来。一桌几个人,语文课,物理课开始惊心动魄的五子棋大战,数学课开始肆意刷平面几何,我,贾胖,子昂间的竞速,英语课大家倒是安分守己…夏日的酷暑,报告厅的清凉,没有压力忧虑,只有欢声笑语,真好。</p><p>于是这段时间也渐渐对高中生活有了一些了解,而我没有一丝概念的,却是高中的学科竞赛。</p><hr><h2 id="3世纪明德">3.世纪明德</h2><p>来邮中前早已期待的,便是邮中组织的两次研学游,一次南京,一次北京。</p><p>南京一日游是在7月6号,去了南大和南理工。高中似乎与南大有说不清的缘分,这就是开始叭,那时走了走图书馆,吃了吃食堂,我想着,希望高中结束就能来这里上学吧!现在想想也挺怀念。</p><p>上了十几天的课,由于酷暑天气提前放假,于是便提前到20号晚上出发去北京。这是我第一次独自离家出游,很是兴奋。家长们聚集在厅外也兴奋地讨论着,我们学生在厅里也第一次见到了将伴随我们三年的领导、老师——李校,戚主任,蟹老板等等。各色的行李箱,也衬出了我们五颜六色的心情。</p><p>晚上上了火车,玩到0点多才回床睡觉,早上四点多起床看了日出,在渐起的叽叽喳喳中,到达了北京。下面就是一系列世纪明德的活动,有些印象的就是李hl版李jj,曹萎昂萎的“大王叫我来巡山”,以及那个可爱的领队发箍男。</p><p>宾馆在很遥远很遥远的地方,叫什么红旗酒店,连个wifi都没有,导致我上个网还要蹲在门口。晚上1101房间大头和蒲苇开网馆,里面掼蛋,门口一排蹲着蹭无线网打游戏(我),混乱串门,鬼哭狼嚎到一两点才睡觉……同期6楼盛萎,金鱼,昂,草鱼彻夜狼人杀,于是我的另一个称呼“雷雷”也诞生于游戏之中。和我同房的是子昂,虽然有两天都彻夜不归,但让我至今怀念的还是早上起床的《让我留在你身边》。</p><p>爬长城倒是我觉得旅途中最有意思的事。几个男生毅然决然从左侧的陡坡开始爬,连续翻过三座烽火台,最后剩下我,大师,大头和香香四个人,我们一直爬到了比对面顶端高了很多的一座烽火台,由于体力和时间原因返回了。一路汗水一路欢乐。</p><p>回想起来,世纪明德研学实在是没有什么意思,但是它带来的无忧无虑的快乐与放纵,确是日后看来,弥足珍贵的。</p><hr><h2 id="4第一次与第一">4.第一次与第一</h2><p>从北京回来后,很多人在帅林的劝说下报了三级的物理竞赛培训,由于对竞赛没有什么概念和兴趣,我便留在了家里,而且看他们学习的微积分基础,我好像都了解一些的样子。就这样颓到了开学。</p><p>开学前由于暑假已经见过灭绝的威力,自然有一点怕分到Hannah Sun 的班上,往往怕什么来什么,8月11号得知分到了高一(6)班,和昂昂,草鱼,大头等人。班委选举倒是挺有意思,大头莫名成了英语课代表,;昂昂不出所料自荐成为班长;我本来无心选举却也被安排了个学习委员——我们啊,一当就是三年。</p><p>军训倒不算太苦,而提供了让我和同学们进一步熟悉的机会。每天放学和大头,JJ他们并排骑车,在路上拉歌,偶尔大家一起去蝶园路上的久久鸭脖来几串爽口的鸭心……这大概就是正式开学前的生活。</p><p>9月开学,再次迎来了许多第一次。第一次的语数外理化生地政史体音美的正式上课。语文还是老杨,多了个课前演讲环节,上课谈笑风生,喜欢突然发出奇怪的语调喊人回答问题。数学是长征,鸡窝头很温柔憨厚,然而这并不能成为我上课听讲的理由,事实上开学的时候必修一我已经学的差不多了。英语孙开始了超级大招,令人欲罢不能的英语听写,从此每天多了往政教处跑的人。物理仍是帅林,“速度是一个si niang,奥si niang”。化学换成了山哥(这个称呼后来才有),中年男人,镇定稳重,时不时扔一个让人猝不及防的冷段子。生物是姜静老师,穿衣达人,很温柔漂亮讲得很好;政治是陆晔老师,本就是让我想睡觉的学科我也没有办法;历史是戚主任,上课挺有趣的,我基本还是听的玩玩的,虽然从来不做笔记;以及最最重点——彭大仙!全能全才,集大成者,当代二十四大家,上他的课直接飘乎九天之外,还听什么地理?!美术课没啥印象了,要么是看电影要么是英语课;音乐课是华华老师,自我介绍时意外得我发现,她的女儿就是当年和我交手数次,和我一起考演奏级的钢琴大神华炜洁。</p><p>总之,当时上课体验就是,语文划水,英语警觉,数理化自习,小科目不做笔记听课看心情。</p><p>9月7号迎来了高中第一次考试,考语数外。语文和英语考的很吃力,数学由于我自学过一些做得还是比较顺利。数学分数第一个出来,6班2个150以上的,10班没有,普通班的有个女生156最高。我151,昂昂150,我错了条简单的填空题。第一次考试我总分排名年级第二,6班第一。考完孙老师就找我谈话了,我比年级第一,10班的芃低了9分,不应该的balabala…虽然我觉得考的还可以了。</p><p>等了快一个月终于来了第二次考试,是第一次大型的月考,国庆期间考的。于是这一次我迎来了第一次第一名,且总分创下了保持了一年半的届记录—390。9门我拿了4门单科第一,语文数学物理和地理。当我春风得意时,孙把我拉出来由谈了一次,我只比第二名芃高一分哦。</p><p>当时老油不条的我只是认为,考试嘛,考个开心就行了。</p><hr><h2 id="5滋味生活">5.滋味生活</h2><p>这一章主要写一些高一上学期的一些有滋有味的杂事。</p><p>2017年十月六号七号好像,是一年一度的校运动会。作为爱出风头的小伙子我自然也报名了,一个引体向上,还有一个便是1500m长跑。<s>作为学习委员</s>,我为班级购置了一袋葡萄糖粉并冲了一桶带来学校给运动员补充能量。第一天引体向上我硬核做了十几个,成功拿下第二名,为班级加了6分,很开心。第二天早上是1500m,我分在一个不是太强的小组,子昂在我旁边陪跑,成功拿下小组第二(可惜差一秒进名次),最后班上十几个男生一起陪我冲刺的场面实在是太感动了。</p><p>当然经常被孙老师找谈话是家常便饭。第一节晚自习下我、同桌<s>盛萎</s>盛lz、昂昂班长、草鱼等人悄悄来到拖把间,一人一个拖把在厕所旁<s>开演唱会</s>唱<s>班歌</s>女儿情。有一次还和楼上10班对嗨。后来被班主任当场抓获回班认罪。</p><p>之后没多会儿我们班来了实习老师,一个是实习班主任一个小胖搞音乐的,一个是漂亮姐姐语文老师。yysy那段时间是我语文课听得最认真的时期,且老师能和我们玩成一片,是非常快乐的时光。音乐小胖给我们排练大合唱,给我们看班会自习,每天早晚读睡觉一抬头总能看见…可是他们总是走的这样快啊,当我们在绚丽的灯光下《想唱就唱》的时候已经不见小胖了,而语文的实习老师回忆也定格在我图书馆炸钠所迸出的火花中…</p><p>说到钠,那时好像是从黄ly那边传来的,我手上多了一批化学药品。单质金属钠,一包在手,乐趣我有。英语课上在桌上悄悄ci火,大仙上课正嗨的时候扔一块在他屁股后面放个炮,男厕的一阵闪光一阵尖叫…某堂生物课我配制碱式碳酸铜,特别好看的蓝色。<s>以及初尝盐酸、硫酸铜</s></p><p>滋润的生活总是会被孙的约谈打破。孙有一天找了我的家长谈话,想让我入坑竞赛。其实在大家之前我已经自学了高等数学的一些内容,如简单的微分积分。但事实上当时我对竞赛没有任何概念,只是帅林拐过去上一些“非惯性系”“摩擦角”一类的稀里糊涂的知识。正巧当天季cz看晚自习,于是他主动提出借我课本让我学完高中知识并搞数学竞赛,我也稀里糊涂答应了,于是撇开必修一开始刷圆锥曲线。过了一项时就是周二周五周日的<s>竞赛</s>培优,非常没意思,我去上很大一部分原因是可以和熟悉的十班同学一起<s>上课</s>划水。(然后我就经常被杨xy等人拖到十班里锁门,就很尴尬)</p><p>学习方面,11月期中模拟英语暴毙,高中最低纪录92,可是由于数学158的发挥再次险拿第一。期中考试是高邮市统考,第一次地,我考了年级第六,并且被昂昂反超,第一被10班贾胖收入囊中。这可不行啊,于是加把劲了一段时间,下一次的月考,又一次不错的发挥,追平了之前我的390记录,并且拉了年级第二22分,这大概是高一时期的巅峰了(数学做的欢起来了最后一题用导数被扣6分154)。</p><p>于是这样的生活像是有着连续不断的盼头,有着不同源头的欢乐,跌跌宕宕,曲折美好。</p><hr><h2 id="6思源轩">6.思源轩</h2><p>以前只知道吃饭的地方,大学叫餐厅,高中叫食堂。进了邮中有了一会儿才知道食堂有个名字叫思源轩。</p><p>思源轩分为6个小分食堂,其中5个常年开放(另一个是专门为澳洲同学来访时准备的好像)。一楼西是师生一起吃饭的地方,一楼东和二楼东类似,与西餐厅略有不同,二楼西好像没去过。?三楼是小吃,有奶茶,香酥鸡,汉堡等等,东侧窗口卖面条馄饨等面食。<s>听起来还不错的样子</s></p><p>作为新生,自然对三楼的小吃餐厅更感兴趣,不过由于三楼人流量过大其实吃的次数也不多。我记得东西餐厅的差别就是西餐厅的鸡腿是红烧,东餐厅是脆皮油炸,当时我可能偏好后者,于是一楼二楼东我是常客。但到了高三之后基本爱上了一楼西的鸡腿~</p><p>高一上的时候,当时学校办了个名曰校本课程的水水的课,每周三下午的最后一堂课。我当时跟风报了上一届的李bc老师的初等数论。待到我后来入坑竞赛后回望发现其实当时几乎啥也没讲,师生都在划水。不过乐趣还是有的,比如和10班同学们一起上课欢快交流。校本课程总会提前下课的,于是难得地我们两个班地一些让你会一起去吃饭,不慌不忙。当时好像很喜欢这种感觉,比如还有周日下午的竞赛课,划水完了之后大家早早地来到三楼食堂,只有两个班,在热气腾腾前其乐融融。</p><p>其他日子基本都是教室食堂两点一线,最后一堂课老早就开始想着晚饭吃什么,老师一说下课立刻冲出教室冲向食堂。于是这样子,跑过去,走回来,日子也就一天天过去了。</p><p>食堂不远处有个小卖部,饭点时间都是很忙很忙的。偶尔师太拖课了,食堂吃不到了我就会来到小卖部吃泡面。或者说哪天吃的快了,也会来小卖部买点吃的晚自习吃(当然没怎么被发现过),带瓶AD钙或者芒顿回去慢慢喝。记得有一天活动课来吃了火鸡面,放了全辣,直接get烈焰红唇,回去被师太抽查背新概念,直接芜湖。</p><p>跟这两个地方最亲的时候也就是高一了,所以特此写此篇以简单记录。</p><hr><h2 id="7元旦晚会">7.元旦晚会</h2><p>作为稀有的钢琴演奏级选手,自然期待着能有一个舞台给自己展示一波,于是等来了邮中的元旦晚会。事实上初中三年我就积极踊跃报名参加赞化大舞台,每次都被华老老师把我的节目毙掉,最后只有毕业典礼才勉强有机会在台上碰到钢琴。如今来了邮中,晚会总策划是华老先生的女儿华华老师。</p><p>初次见面的音乐课上老师要求自我介绍,我说我过了演奏级,华华轻轻一笑,听说过华炜洁吗,我说我屡战屡败,她说,这是我女儿。。然后大概她就认得我了。元旦晚会海选我去现场,华华老师大手一挥,你不用弹了,选好曲子直接过来给你排。</p><p>我选的曲目是郎朗曾在白宫演奏过的《我的祖国》,十二月初我翘了一堂美术课去找华老师磨了一遍曲子。讲真,这一次的训练着实让我对曲子的演奏感觉提升了一个档次,感觉很专业。同时段,子昂很顺利地当选了2017年度最美邮中人。于是我们都将在元旦晚会上登台——</p><p>元旦晚会前成绩出了点小插曲,12月月考首次数学栽掉,再次败于贾之手。29号刚考完,晚上去体育馆彩排,正好听到歌曲节目《凉凉》,直戳我心,记忆犹新。</p><p>30号便是正式登台演奏了,下午便翘了课去音乐教室练手,早早地去吃了饭,换上西装候场。我的钢琴和思聪的二胡从初中一直一起演出到高中,《战马奔腾》确实震撼。我的节目被安排在最美邮中人领奖之后,第一批的“美人”是子昂,雍亚文和郭增嘉。盛大的场面让我有些紧张,不过既然在南京奥体和郎朗一起演出过,这又虚啥呢。</p><p>正式演出,弹奏没有问题,但是音响效果并不很好,当然我在台上感觉不到,只是享受着台下的声音和绚丽的灯光。紧接着我的是当时高二的百渡人乐队,一首《成都》,主场高榈声音实在是好听,以及后面小妹妹上台的温馨场面,直接让我拥抱温暖。</p><p>回班大家开开心心地互送了新年祝福,我的2017,落下帷幕。</p><hr><h2 id="8初雪">8.初雪</h2><p>18年的1月初,高邮迎来了第一场大雪。难得有这么大的雪,快要与2016年冬天的雪相当。漫天飞舞的雪花中,大地、楼宇、树木都裹上了一层厚厚的银衣。</p><p>但是,想让邮中放假是不可能的。尽管地上已经结成了冰,非常打滑,但还是要老老实实去上学。家里的车都不好开,于是那两天有几趟是我徒步走过去的(家离学校还是很远的)。在路上走几步就能看见有人滑倒(事实上我也滑过很多次)。有一天中午我都没有回家,结果在食堂楼梯上摔了一大跤,然后初次体验邮中宿舍,和赵jz睡的一张床。</p><p>这么难得的雪,不玩起来也是不可能的。于是一下课,我就从二楼奔向一楼开始团雪球打雪仗,从一楼往二楼三楼的班上扔,也有十班的同学溜下来偷袭,于是混乱中玩得不亦乐乎。回班时鞋全部湿了,手被冻得发紫。</p><p>不出所料,我再次被班主任找过去谈话。这次谈话我还是有点触动的,对我进行了“深度剖析”,说我远不如贾有定力,坐不住——这其实也是一段时间来我自我认知到的一个问题。12月的月考很能反映问题,虽然1月初的模考再次拿了次第一,当时的我没有料到的是,从这便开始了我的第一荒。</p><p>期末复习备考期间,有时仍飘会儿小雪,但我没有再怎么下去玩了,有时候晚自习会悄咪咪想,我的学习是不是真的所谓吃老本,其实在慢慢被稳重的贾他拉开差距,我自己提升的点到底在哪里。我又回顾了下之前的学习历程,刚进赞化初中的时候我基础不大行只是年级几十名徘徊,初二以来开始刷题模式于是成绩上去了,然后基本这样子到今天。但这半学期以来的学习模式其实我并不是很满意,总感觉除了题海之外还应该做点什么——总之怅然若失。看着贾,浦等人回家上晚自习,我也去找孙去试着申请。孙语重心长跟我交流了一番,确实如她所说我心态有点乱,她的意思是让我不要瞎想不要从众,就在教室里安心复习。</p><p>我能说什么呢,也就按部就班吧,但最后一阶段换了种学习模式,一直到期末考试——第一次扬州市统考。<br>语文倒是平稳,就是作文写了篇小学生记叙文;数学是真难,以往的卷子都是一小时以内做完的,这次一直到最后一分钟,最后一题魔鬼题目,分了很多段奇奇怪怪区间讨论才勉强做出;英语也有难度,阅读做的头皮发麻。</p><p>最后考完,回家没有骑车,走到校门口在路旁抓了一把雪,揉成团,转身奋力向后扔去。</p><hr><h2 id="9竞赛与下沙">9.“竞赛”与下沙</h2><p>期末考试考了372分,惜败于子昂一分,很奇妙,我数学高他9分,他语文高我10分(某名场面)。排名还算不错,比中考高,大市排名昂第5,我第7;扬州市第一是董元哲388.5分。成绩出来倒也不是太在意的了。</p><p>寒假之前在帅林的渲染下跟着大家报名了杭州培尖物理竞赛培训。当时的我没有任何竞赛基础,甚至连高中物理才只学了一小部分,自身底子虚,于是在期末考试之后开始看高中物理学勉强学完简单的动量。</p><p>2月5号,也就是出发前一晚,孙老师邀请到了2016届邮中毕业生、清华大学数学系的宋神回校给我们谈了谈竞赛——这是我第一次对竞赛有了一些基本的认知。宋神7张省一奖状,数理化生信五科省一全面开花,战绩骄人。他主攻的是信息,然后高二搞了数学我记得,高二暑假去了清华丘成桐夏令营拿到降分进了清华数院。宋神给我们讲了一些竞赛的基本模式,让我开了眼界,同时也给我们推荐了一些竞赛的书籍——这些都在我后来的竞赛路上助我一臂之力,我的第一本竞赛书奥赛经典几何也就是在这时候入手的。</p><p>6号一行十几人包车前往杭州培训,入住一个条件很不咋地的警官学院。我和贾,詹,芦苇三位10班同学住的一间,宿舍条件很不好。本来立志好好学习的,结果第一晚几个人就颓着聊天不知道聊到多晚。第二天早上起来困得一比,讲的是运动学,一开始还听得懂,后来由于倦意袭来便不怎么听得进去了。几天都是这样,晚上颓废白天划水,左手边是子昂和金成,俩人一起睡觉一起打游戏,右手边是蒲苇和子骞,倒是一直在拍照和听讲。处在中间,又困却又良心不安。两次考试,直接傻眼,都只做了一两题,当时我连微分方程还不会用呢。</p><p>也是第一次,小年夜是在异乡度过的。当时总会有着一些莫名其妙的情感波动,但他们只是笑,我只能默默吞进肚里。于是整次培训便在困倦和颓废中度过了。说实话,没有学到什么,除了一些力学进阶知识比如动量角动量等。很巧的是,扬州中学的物理竞赛选手也和我们参加的同一次培训,也初步认识了茅tq等巨佬,也算是略开眼界吧。</p><p>“壮志凌云几分愁,知己难逢几人留,再回首,却闻笑传醉梦中。”</p><hr><h2 id="10初春的烦恼">10.初春的烦恼</h2><p>邮中老传统了,大概年初七这边竞赛班就开学了。寒假期间没有学什么充实的内容,提前学了一些数列,以及还认认真真地写了语文英语的寒假作业。<s>学弟学妹们不要学我</s></p><p>开学后大家就都又忙碌起来,我呢跟上学期的学习模式有了不同:上学期是稳扎稳打学到哪就会练题把那一块题目练透,而这学期明显课内刷题量少了,开始转战后面的内容。上学期购置的五年高考三年模拟的数学,在下学期初便一鼓作气刷了大半,并学了点二项式和排列组合的知识。</p><p>除此之外,由于宋神的影响,我也开始看第一本入手的竞赛书——奥赛经典。一上来就是线段题目梅氏定理塞瓦定理等等,以及后面纷杂的共圆,直接是头皮发麻。那时候我才初步了解到了竞赛的恐怖,独立做出一条竞赛几何题对于当时的我来说是绝对不可能的。于是一有闲工夫便掏出几何大本有模有样地看起来,也不知什么时候失去了一开始地激情,这本书渐渐又躺在抽屉里不怎么露面了。</p><p>在一次又一次的挣扎无果中,虽然自己还没入竞赛的门,却有种隐约的挫败感,感觉自己啥也搞不出来走不下这条路。虽然表面自封“高一年级竞赛总负责人”,也在月考时放肆写了篇作文“竞赛路上的追光者”,但一次又一次看答案也看不懂的经历中,涌来的是此起彼伏的自我怀疑和惆怅。</p><p>与此同时课内成绩似乎失去了第一学期的锐气,考了次第二下面连续几次都是第六名,心有余而力不足,当然也被找过谈话很多次,有时候会想把搞竞赛当作借口,但想想自己啥成果也没有,却也只能羞愧低下头。</p><p>初春的烦恼就像渐起飘扬的柳絮,轻轻地,而挥之不去。</p><hr><h2 id="11long-live-the-friendship-between-china-and-australia">11.long live the friendship between China and Australia</h2><p>当然春天也是有很多美好的!比如,澳洲小朋友的如期而至。邮中和澳洲的汉密尔顿亚历山德拉学院有着姊妹学校的关系,并每年派出学员互访。澳洲小朋友们基本是在每年的三四月份春暖花开之际来到中国。</p><p>某天傍晚,我注意到三楼东常年紧锁的餐厅亮起了灯光,结合最近听到的风声,意识到,客人要来了。那天第一节晚自习下,我便悄咪咪一路杀到食堂,里面传来欢声笑语,路上看到两个金发碧眼的外国小孩!这便是日后的小jason和高个milo。他们很热情地主动跟我用中文打了招呼。</p><p>于是第二天早上便是欢迎仪式,场面一度十分欢快融洽,大家还和澳洲小朋友们握了手。于是从那天起,每天晚饭时间,在食堂的西边,澳洲朋友们会出来活动,打橄榄球,打篮球等等,我们也可以自由上前进行交谈。有的人还把辣条什么的介绍给他们吃了哈哈。</p><p>真正的友谊开始,是正好碰上的春游。2018年4月1日,当时我和子昂,查伟报名领了一组小朋友接待,半天集体出游半天自行玩耍。我起了个大清早赶往学校去见朋友们,和子昂查伟一起,接到了我们组的小伙伴——George,高个子的帅气眼镜男孩,特别温和友好;Clancy,小个子小朋友,走起路来一扭一扭的,很是可爱,也很爱说话;Michael,也是个子不大,不爱说话但很友好,喜欢体育。于是最为美好的一天开始了。</p><p>一路跋涉来到油菜花海踏青,一路欢声笑语。我们热情地带着外国友人们到处游玩,给他们介绍我们地家乡等等。我还给他们展示了魔方速拧和数独。下午一起去了子昂家里坐了坐,也是我第一次去子昂家,大家坐成一圈互相分享家乡和朋友。晚上去了秦邮宴吃晚饭,我还记得蛊惑小朋友们吃intestine一些奇奇怪怪的食物……七点之前把他们送回了学校,我和Clancy拥抱了一下,这一天就在许多尬笑和pardon中(当然更多的是欢乐)结束了。感觉口语莫名得到了训练)</p><p>一连很多天,都是快速奔向食堂三楼随意快速吃了碗面,便火速跑到澳洲生活区去找我的朋友们玩,update on ourselves。4月7日晚,两个高一竞赛班举办了中澳联谊晚会,节目大部分由两个竞赛班和澳洲同学组成。我临时将钢琴曲目大胆改成了《摇滚卡农》,全力上线,也收获了澳洲同学的惊叹和掌声。<br>歌唱,跳舞,踩气球,拥抱……确实是一个令人难以忘怀的夜晚~</p><p>十几号的时候,他们要走了,我们买了一些礼物送给了朋友们。最后一天吃完晚饭,我站在食堂前停下了脚步,然后两个星期来第一次地,没有回头,渐渐远离了澳洲生活区中地喧闹。我没有去见朋友们,我不知道这样做是否正确,但我知道去了我会不舍,我更希望把最后一面的欢笑留在心中。</p><p>Anyway,long live the friendship between China and Australia.</p><hr><h2 id="12竞赛路上的追光者正式入坑">12.“竞赛路上的追光者”:正式入坑</h2><p>又回归了正常的学习生活。4月份的某一天,学校把我们几个人家长喊来学校说,学校请了南京的教授来给我们讲数学竞赛,建议高一搞竞赛的同学们报名参加,交2000元。我们这一届似乎对竞赛很不重视,平时几乎没有竞赛的培训和指导,难得也是班主任随便找的培训机构让我们随便出去上课。所以没有人指路没有人同行,我一直以来也只是学点皮毛自娱自乐罢了。于是我决定抓住这次机会,和子昂,贾胖,查伟几人一起去听一听正式的竞赛课。</p><p>一个周六晚上,我们一行人来到陌生的智慧教室,当时里面已经坐了很多学生,一看,是高二的竞赛党们——早有听闻,也难得看见了当时早有听闻的上届的ztt,zn,mcg大神。第一次课是平面几何,是顾冬华老师讲的相似与共圆。当时印象就是,顾神每条题目都给我们很长时间思考,而我就有点坐不住因为我啥也做不出来啊…题目还是有难度的,勉勉强强撑住了第一堂课,也确实学到了一些美妙的平几证明。就这样,每个星期六都会来到智慧教室听课,座位也渐渐从最后几排移到了第一排第二排,尽管还是做不出来题目,但我渐渐开始喜欢这种感觉了。</p><p>于是就这样,2018年5月,我正式入坑数学竞赛。</p><p>当时不只是顾冬华,更有萌萌的杨全会老师来上数论。数论比平面几何要更加复杂更加难,在数竞二试中也一直是压轴题,那段时间学到了不少数论的基本知识,而基本上我的数论水平也就差不多停止于那儿了。<s>如果我进一步学数论的话</s></p><p>2018年5月6日是一年一度的江苏省数学初赛,也是踌躇满志的我期待已久的,虽然也比较紧张,因为听说历年要过90分(满分150)才有出线的可能,而拿90分对当时刚入坑的我也并不是很容易的事。6号下着大雨,我来到考场,身边都是熟悉的人一起考,子昂就坐在我前面。9点开考,10条填空题我做得很顺利,第九题第十题有难度,但在我神奇得思路下竟然逐一破解,于是继续杀向大题,轻松解决解几平几,结果在数列被卡住了没做出来(这条数列是高三后期的压轴题)。回家在助教的微信群里对了答案,填空题全对,就很舒服,悬着的心放了下来。</p><p>一个星期后,周日帅林上课的时候消息传来,我首战告捷,高一组最高分115,在高二竞赛党中排第五。我们这一届过了四五个人,高二则有二三十个人,将在7月份去扬州参加夏令营及江苏省复赛。</p><p>这样也让高二竞赛教练黎小平老师认识了我,我向他提出每个星期考一次复赛的模拟卷,高一去高二客场作战。于是某个星期三我和贾胖去了高二11班,也很神奇,复赛样式的一试卷子(120分),考了74分——填空题全对,大题惨不忍睹拿了十分,不过已经比大多数高二党高了。</p><p>就这样,我成为了17级的数竞主力选手,开始了下面的漫漫征途。</p><hr><h2 id="13pmo绞肉机">13.PMO绞肉机</h2><p>6月份初,贾联系我一起去参加数竞培训。是文武光华工作室的潘成华老师,高邮老乡,平面几何高手,坐标在南京他家附近。于是小小队集合,我、贾cg、桂ry三个数竞选手,预计期末一结束便出发。</p><p>当然扬州市统考是不能放松的。语文直接考崩,作文生平第一次写了篇丑陋的小说,不忍直视;数学依旧有难度,不过好在数列这块我还是练了的平稳做完;英语记不得了,也许是最后一天了叭。考完下午的政治飞速撤离考场回家洗了个澡,便上车前往南京。</p><p>晚上潘老师来宾馆把我们接到了他的家里,随便出了三条题目试了我们试,“中考题”,结果显然我们一题都没做出来。</p><p>第一天上课直接就心态爆炸,从来没有做过如此诡异而复杂的平面几何题,动辄就是潘式“变相同一法”,正余弦与边的变换令人眼花缭乱。私下里我们称这里的题目PMO(潘式奥林匹克竞赛题)绞肉机。潘说,他这里是全南京最难的地方,这几天已经是比较基础的了。于是我们坚持着,即使听不懂也记了下来,虽然晚上回去已经累瘫看不动了…潘老师当时对我们说了一句话我一直记在心里:“笨鸟先飞,先飞不一定先到。”</p><p>潘老师对我们很好,经常把我们带到他家里坐坐、参观参观,还给我们吃零食,还有“丁力煌的冰淇淋”,在如此亲切的环境下上数竞倒也是难得的经历。晚上回宾馆呢却没什么劲学习了,于是和贾同学看电视。当时正值世界杯,看了西班牙被淘汰,看了德国队被锁,看了梅西与姆巴佩…之余还看了会爱情公寓,增添一点欢乐与轻松。</p><p>第三天晚上金成给我发来消息说成绩出来了,我考了378分,年级第二(扬州第十),第一是爆发的草鱼——384分扬州市第三。其实也还不错了,数学156分拉回了语文可怜的11小几分。于是我们面对着残酷的分班,两个竞赛班并成一个,我也和很多好朋友聊了聊,互相传递了鼓励与勖勉。</p><p>6天艰难的集训就这么结束了,接触了很多远高于我能力的知识和方法(记住倒没记住多少)。3号下午离开了南京回了家,休息了好几天才恢复过来。于是,再振旗鼓,准备杀向扬州中学。</p><hr><h2 id="14扬州中学二三事">14.扬州中学二三事</h2><p>从文武光华回来后一直无精打采,歇息了一个星期便又准备出发了。由于文武光华期间学校里杨全会来上二试代数内容划掉了,我艰难和当时身患小儿手足口病的昂昂接头拿了笔记回家看。走之前特意学了学高等数学的偏微分,心想或许能够耍赖皮用一用。</p><p>于是7月14号,顶着烈日,我、子昂、贾cg、大天来四个男生和芃一个女生加入了高二竞赛联队一同乘坐巴士前往扬州中学。住的是女生宿舍411(因为似乎男寝比较好留给女生住了),就靠着校门口。晚上还约了去了扬中的lyt会面,还简单逛了逛扬中,很温馨的一个校园。结果不知道要上晚自习,差点滑掉,匆匆忙忙赶到教室坐在角落。晚自习很早就下了,回去不慌不忙,还点了外卖。结果——十点钟洗澡的时候突然一片漆黑直接把我整蒙了,不知所措,所幸管理处大发仁慈又短暂通电了会才勉强把澡洗完;以及锁寝,和阿姨和班主任通融了会才跌跌爬爬搞到外卖。</p><p>这次出来没像第一次那样熬到很晚,所以早上还是挺有精神的。占了前排的座听讲,可是课让我很失望——难度太低速度太慢导致我不大想听。于是渐渐地,满怀期待的课逐渐变成划水,听讲逐渐变成漫无目的地刷题。<br>我依稀记得,一试内容除了向量复数那边还可以其他都很水,平几数论组合更是谈不起来。</p><p>当然去扬中也是有些有趣的事情的。比如我们和高二的小摩擦。大天来独自坐在高二他们中间,有一回莫rz根大天来搭话,把大天来恼到了,因为天来是我们这届物竞扛把子然后也没客气地回怼,总之场面一度很有趣。陆x,好像是当时男生负责人,扔给了子昂一条偏导数的题目把昂昂吓坏了,然后我给他做出来了,也挺有意思。</p><p>其实在来扬中以前,就对扬中一个大明星有所耳闻——黄老板!黄老板是一只橘色大猫,居于扬中校园,每日于校园内自由游荡,可远观亦可近玩。我们上晚自习的时候,黄老板就会来巡查教室,悄悄进来,然后大摇大摆地在教室走来走去。遇见晚自习吃鸡排的同学,直接跳到桌子上欲收其赃货!场面十分劲爆,黄老板不愧是黄老板!</p><p>Moreover,扬州中学的食堂是极其不错的!(不愧是市直中学)每顿都会有满满当当的肉菜还有水果,味道也还可以。不过我们还是偷偷摸摸混到时代广场吃了顿火锅。最怀念的是扬州中学门口的鸡排,我们出来买过好几次,复赛前一天我们吃着最后一顿鸡排啊,说,吃了鸡排,复赛就可以过了。事实也真如此。</p><p>其实在集训的几天我是一直很不安的,因为晚自习做爱尖子的模拟卷的时候,一直只能做四五十分,因为去年复赛的线是五十几分,所以还是担心有不过的风险。虽然我暗自嘲讽自己这个如果过不了还搞什么数竞。夏令营期间有一次小测,试卷有难度直接把我做崩了,平几代数组合都没做出来(<s>我是fw</s>)代数我用的偏微分切线法不知道给没给分。但是很诡异地,我拿到了夏令营测试一等奖,邮中一共有4个其余三个是高二的。</p><p>但真正算数的是23号的复赛。22号晚上我们出奇一致地都早点休息了,准备一齐以最好地精神状态迎接这场考试。进入考场,监考老师是一个很漂亮很漂亮的小姐姐!我们四个人坐一路排,我前面和左边都是邮中高二的学长学姐。8:00考试开始,我状态很好,一下子飙了六条填空题,第七题第八题直接无思路便跳过了。解答题第一题是简单的同构题,可惜我当时太菜了也没看出来,硬生生空着了。然后就是解析几何椭圆,倒像是个高三模拟题,对我倒是很友好,花了一定时间成功做出。最后一题一开始没有思路快要结束突然灵光一现用数学归纳法做了一半,刚好交卷。<s>一试连看小姐姐的时间都没有</s></p><p>9:40二试开始,以我习惯先做几何,事实上卷子刚拿到手的时候我便已经看出了几何题的解法,几分钟快速写完心里长舒一口气,稳了。于是继续肝第一题代数,是个绝对值题,不管三七二十一,暴力求导,花了快一个小时整理于是也完成了。我快结束的时候故意上去换草稿纸监考小姐姐还跟我笑了笑。我的任务结束了,放下笔看看旁边,我前面的和我左边的还没怎么动笔…11:00的时候我肚子已经开始饿了,无所事事于是有了提前交卷的想法。一番心理斗争后(我在想是再看会小姐姐还是去吃饭),我决定提前交卷,也成为了邮中地带第一个交卷的人。我给子昂使了个眼色于是他也交卷了。走出来阳光灿烂,颇有“春风得意马蹄疾”之感。</p><p>就这样,扬中之旅落下帷幕,体验还是挺不错的。30号那天助教在群里发了成绩,我拿了78+80=158,高邮中学第一,扬州市rank10。就非常开心,没心没肺的开心掩盖了我虚高的实力——虽然考过了所有高二同学但毕竟经历的磨练还不够。但这样的经历却也是我难以忘怀的。</p><hr><h2 id="15智慧之始">15.智慧之始</h2><p>数学复赛考完后没有休息几天,就又踏上了另一次竞赛之途——三级培训在扬州树人中学九龙湖校区办的物理竞赛培训。由于我根本没有认真搞过物理所以水平不高,分班都没分到好班去。不过好胜的我不甘心,在中级班的课上学高级班的课程,就这样又苟下了一次培训。以及与学弟学妹的第一次一起培训,后面文章会提到。</p><p>回来后立即就开学了,进入到物化竞赛班6班,走了很多熟人也来了不少新面孔。整个暑假没有写任何暑假作业,还与老师周旋了一顿功夫。与新老师初次见面后我又消失了——主动申请翘课自习。一开始是在隔壁,之后感觉老师们走来走去的不自在,恰巧我也有很多电子资料,于是我便想去遥远的建模教室。去了发现里面设备尘封已久,且漏水。李校长让我到图书馆的智慧教室自习,用大电脑,于是我开启了智慧教室的生活。</p><p>一开始是一个人,大晚上一个人来到黑黢黢的图书馆,很是吓人,学习效率不是很高,大电脑操作起来也不是很方便。过了两天,新高三竞赛党由于翘考试也杀到了智慧教室,气氛瞬间热闹起来。在那里逐渐和秦yx、史my大佬变熟了起来,化身小学弟跟着他们一起学竞赛。</p><p>史用外面的希沃白板放着轻音乐,伴着时有时无的嘈杂声,于是智慧教室对我来说不再像学习的地方了。一开始是“黑色卡西欧”上面的游戏忍者必须死,高三竞赛党们轮流上场玩的不亦乐乎;后来随着子昂的加入,“科学英雄榜”上子昂与史一回合又一回合地对决;突然开局的炉石,突然杀进来的老师……生活逐渐颓废化,似乎忘却了距离联赛还剩十天的时间了。</p><p>不过秦神和史神还是挺认真准备的,一份又一份的模拟题。我也跟着做,却总是做的不怎么样,还不停自我安慰。把近年联赛几何都做了一遍,只有14年的没做出来,便产生了盲目自信。</p><p>虽然颓废,但是回想这却是我珍藏的时光。每天清晨来到智慧教室自由自在,与秦神史神马神他们交流竞赛与学习,和他们出来走走,一起做卷子互相问题目,与秦神的五子棋对弈…这段时间让我感到陪伴的温馨与美好。</p><p>八月底回班考了次试,很奇妙的毫无准备考了第一,然后不觉又飘了一点。就这样,9月它悄然而至。</p><hr><h2 id="16折戟沉沙">16.折戟沉沙</h2><p>9月8日上午考了物竞初赛,下午便出发去扬州了。我没和学校一起走住宿舍,跟家长一起去的。下午快四点的时候和大部队碰了头——我和秦、陆、史他们一个考场,在扬州的第一梯队聚集处决战。那是我第一次走过邗江中学的大门,走过操场,走到后花园似的考场。</p><p>晚上和爸妈在附近的商场吃了鸭血粉丝,晚上还买了个汉堡就早早回去了。其实那天晚上是不怎么复习得下去的,看一试和平几看得心情有些烦乱,好在早点睡也调整过来了。早晨醒得很早,吃了酒店早餐,很贵。</p><p>到了邗江中学,人山人海,穿过人群来到了机动教室,看着爸爸妈妈逐渐走远,独自一人来到考场坐下,秦就坐我右右方,史就坐我斜前前方。8点钟准时开考,比较冷静顺完填空前五题,第六题复数突然卡住了,顿时心态就有点不对了,过了会转战第七题三角,亦是无功而返。心里一阵凉凉,又来到解答题,第一题倒是很容易秒掉,第二题见过!是某次邮中学案上的构型,不过——我再次大意认为这又是一条高考题,自己想当然多添了个条件,做完后无所适从,一试完结。考完心态略崩,不过我告诉自己,能否省一关键还是看平面几何,一定得拿下!</p><p>二试9:40开考,拿起来就做第二题几何。奇怪的构型,一点也不美观。画图的手逐渐开始颤抖起来,我发现对这题我好像没有什么突破的想法。一个小时过去了,两个小时过去了,我的草稿纸画了一整面的平几(我现在依旧能记住这个罪恶的图),用尽了变相同一法、三角法、甚至代数法,就是没想到基础的全等。12:00的时候,我放下了笔,望向窗外——蓝天白云阳光灿烂。我心想这一切结束了,结束了。从心底涌出无尽的心酸和委屈,却只是在窗外的绿色和生机中看到自己心底的干涸。</p><p>12:10收卷,秦神和史神都做出了平几,我苦笑了下,一个人再次穿过操场来到门外。爸爸妈妈在门口接我,满面笑容问我战况,我突然很想哭,觉得对不起他们,对不起学校,对不起自己。</p><p>于是不再抱有省一的幻想,我的第一年的竞赛梦,在享受过荣光之后,在决战之时黯淡了。我也不甘心,那条复数和三角,甚至平几的全等我怎么会丢掉的呢。。我发了条说说,是兰德的一首诗(事实上打击得我把之前的说说全部删尽):I strove with none ,for none was worth my strife;Nature I loved,and next to nature ,art;I warmed both hands before the fire of <a class="link" href="http://life.It">life.It <i class="fa-regular fa-arrow-up-right-from-square fa-sm"></i></a> sinks,and I am ready to depart.</p><p>回去也没闲着,还没从数竞的阴影中走出来,又被拉过去准备物竞复赛。依旧翘课(已经两个多月了),在智慧教室。由于我们这届过了15个,直接把智慧给占领了——一个个颓废得不得了,又是什么画画了,又是什么看奥特曼了,又是什么胡言乱语八卦了……被帅林抓到也很多次。</p><p>那时学校还请了神秘教授温志强来上课,上课一边吹牛一边神乎其神地讲些有的没的,什么磁矢势(到今天也没弄懂),还发了很多原创模拟题。就这样,颓着颓着就到了物竞复赛之前。</p><p>学校还把我们又一次拉过去三级培训考前指导(指导nima)。和帅林住地金陵新城饭店,很是高档,考前住的萎萎的汉庭,和滑浩住的一间。晚上也没怎么太认真复习,拉着隔壁高一的谈谈复习了一下考纲并压了一波题目,便愉快地睡觉了。</p><p>早上起来去考场,倒也平静,高一高二高三混编联队一起杀向考点。9点开考,第一题天体,我镇定地做了大半,极坐标积分没搞出来;第二题弹簧,给它绕昏了,有模有样地写得满满当当;第三题刚体特地准备过,但是写的好像略有问题;下面就全不会了,35届是真的难。不过物竞波动不是很大,毕竟不是主攻科目。</p><p>一出考场,px妈妈就告诉了我们数竞的成绩。61+10,惨不忍睹。秦神132国一,史神126高分省一,贾胖72+20也是省一。我一个人坐在大巴后面,埋下头去……</p><p>第一年(半年)的竞赛,折戟沉沙,沉沦深渊。</p><hr><h2 id="16高一的回望">16*高一的回望</h2><p>高一的一年,总体来说是自我慢慢摸索的一年。从一开始进校的一无所知被老师吓到说高中知识多难啊balabal,到后期成为学科上的老油条,经历了也发现了很多无意义的事情。</p><p>高一是拥有许多无畏而放纵的快乐的,放在学习之外的时间很多,也会自己主动跳出普通的生活去寻找乐趣。下课出去疯玩,晚饭时间乱逛,翘课溜达,甚至有时候触犯某些校规校纪…现在回想确是很多有趣的回忆。</p><p>情感层面,似乎和石乐志做了一段时间同桌有了莫名的提升,虽然常常在心中大惊小怪地有些无所谓地触动与波折。逐渐感觉身旁的感情更像是某种意义上的轮回,自己没有机会体会,也没有必要置身其中去受一些自我矫作的伤害。</p><p>学习一开始劲头很猛,第一学期冲了四次第一也是很难得。不过发现那还是得益于初中那种刷题模式,题海战术,而我逐渐对这种模式感到厌恶。所以渐渐地刷题量少了,课内成绩也逐渐下降,而投入竞赛的时间渐渐多了起来。但是毕竟到了初赛通过才真正算是入门,所以这一年的竞赛更像是用来娱乐的借口,并没有下足功夫,也间接导致了9月份的折戟沉沙。</p><p>高一身为小学弟的感觉是很棒的,棒在于有机会去和高我一届的学长学姐们同台竞技,与他们同行一起去竞赛场上竞技。认识了不少上一届的朋友,也是一种幸运。</p><p>刚上高一的时候孙老师让我们填一填目标大学,很巧地,我当时填地就是上海交通大学。但是随着心逐渐高起来,大概在心里埋下了清华五步计划:高一省一,高二上期末争取综合营,高二国一,高三寒假学堂,以及最后地高考裸分。难度其实是依次增大的。而相对容易的省一已经离我而去。联赛的失败让我久久不能平复,我既倔强不肯否认自己数竞的水平,却面对着老师同学们期待消散而无所适从。</p><p>是这样结束的。但总要有新的开始——Let me win, but if I cannot win,let me be brave in the attempt.</p><hr><h2 id="17身为学长">17.身为学长</h2><p>当了一年可爱学弟,经历了一年的摸爬滚打,我也成为所谓<strong>学长</strong>了。</p><p>最初是在8月1号前往扬州树人物竞培训的时候,第一次和18级的学弟学妹们接触。我创建了一个叫扬州物竞的群,并拉了新高一高二的进群,可是群并不像我想象的那么活跃,都没有人水群,可能大家都比较拘束吧,毕竟学弟学妹们我当时几乎没有认识的。</p><p>培训期间倒是经常去斜对面的高一寝室串门,于是结识了zcy,chy和cha。zcy和chy都蛮温和友好的,于是略话唠的我也会去那边谈谈竞赛啥的。这时候另一位——cha同学就会不耐烦地想让我出去,像是看我略不爽…后来的后来我才领会到,其实cha已经是一个信竞巨佬啦<s>我是有眼不识泰山</s>。于是我只能把chy,zcy带到我的房间里…玩狼人杀,很融洽也很欢快。</p><p>物竞复赛有两位高一小朋友入围了,又认识了两位,tyz和bll,也一起去培训参赛了。其实我和谈谈在初中时就见过面了,当时我考了次高邮市第一,正巧谈谈也同期考了一次,于是由业琉牵线吃了顿饭。谈谈很谦虚友好,我跟他一起复习了物理竞赛,然后一起拿了省二。</p><p>竞赛结束以后,上文说了嘛,受了极大的打击。有一天,侯老师来找我说,新高一开始上竞赛课了,问我有没有兴趣去旁听一些课。我是有些犹豫的,毕竟还没恢复过来,而且我不是以省一的身份去,但是想到能和下一届的小朋友们一起上课,也许会有点意思呢。</p><p>于是11月左右空降会议室。第一次去的很早,很不自觉地往第一排一坐,旁边三三两两来的小同学看的一愣一愣的,等到zcy,谈谈他们来了才有话说。于是听zcy说见到了中考状元小邓,对接了朱tt,结识了坐我旁边下象棋的龚神和czy他们……都是很有趣的小朋友啊。</p><p>是姚佳斌老师上平面几何课,题目也确实有难度,总体就是老师在上面自讲自嗨。这好吗?这不好。身为学长的我总不能跟学弟学妹们像我第一年一样一起划水叭。于是我开始做题。虽然我败给了18年的平几,但我平几的水平应该还是可以的。于是一份学案能做出不少的题目,从高联难度到MO难度,也逐渐给姚老师留下了印象。于是姚老师和学弟学妹的目光推动着我在有限的时间内最大发挥自己的竞技水平做出尽量多的题目,这种feeling是非常不错的。</p><p>说来也有趣,第一年的我去学长学姐们中间学习竞赛,第二年却混入学弟学妹中韬光养晦,两种截然不同的经历和感受叭。不过,在大家的目光中,我逐渐重新拾起了对竞赛的信心和热情,也渐渐重新理解了当年写下的“竞赛路上的追光者”——Anyway,身为学长在小朋友们面前要重新站起啊!</p><hr><h2 id="18七度灰">18.七度灰</h2><p>竞赛落幕,自然也就回归到了正常的学习生活。事实上8月12号开学后就没怎么在班上过课。拥有了新的同桌,亦是之后陪伴我两年的好同桌蒲苇,后桌是詹包包和贾胖。语文老师换了原10班的晏志新老师,第一堂课我回来上了,结果被问到寒假作业,一点没碰的我显得有点尴尬,于是之后的语文课我就没回来上。</p><p>高二开始学习议论文了,考试的时候非常不适应,毕竟以前记叙文都是拿来一些用烂了的素材语段而议论文要全程自己说理。我知道要开始整理素材了,正巧子昂带来了七彩语文的书,《归来吧》《秋叶满地》《千里之外》,我便借来抄了很多铿锵有力的议论段作为积累,也确实略略有效,我的作文里不再是天真无味的小孩儿说理了。</p><p>但这显然不够,我的语文底子显然不够扎实,于是我要多看书。我也的确这么做了,竞赛后第一本拾起的书是《乌合之众》,我惊恐地发现,自己的轨迹竟然可以被勒庞如此真切地描述与隐喻,就像跟风竞赛、翘课自习、智慧教室的日渐颓废…我突然就像很真实地认识到了自己潜藏的一些阴暗的惰性。除此之外,我那段时间看了很多书,每天晚自习写完作业没有掏出习题或者竞赛,而是收起笔拿出书慢慢地看——看书可以从里面找到自我认识自我,从而也许会带来能动改善自我。</p><p>其实更直接触动到我的是xq大佬的七度灰。xq是硬实力考进竞赛班并能稳居前列的大佬,而且让我佩服的是,他看书巨多,而且会记录下一些东西——他的文字冷峻而有穿透力,应用素材娴熟自如,让我自叹不如。<br>我觉得我很羡慕这样的大佬,不在理科的泥潭里摸爬滚打,而是能更加接近一个完整的自我,这样也许是更有意义的叭。xq大佬的七度灰让我看见了我潜藏在心底的空虚。所以我从高中进来便越来越反感刷题战术,更重要的是题海之外对自己的认知啊。</p><p>看起来很厉害的样子,但是虽说我将竞赛一部分时间用在了语文和阅读上,成绩却没有提升多少。期中考试拼老命也只考了年级第三(高邮市统考永远的噩梦),次于xq大佬和贾胖;除此之外似乎都在3到6名间徘徊了。</p><p>谁知道哪条路是对的呢,在七度灰的面前,我会选择暂时面向另一种意义。</p><h2 id="19诗酒趁年华">19.诗酒趁年华</h2><p>在高一快结束的时候,我报名参加了邮中新苗文学社的理事会选拔,然后过了审核成了新苗文学社理事会的一员。这个文学社嘛,除了社长副社长他们,其他人工作基本就是到时候举办个新苗晚会。</p><p>身为理事会的一员,我自然也会参与其中,在11月份的时候叭,我便充当了工具人,去高一教学楼跑宣传。普通班还好,进去说一通就跑,也有人认出我跟子昂然后略有躁动;尴尬的是竞赛班10班,一进去就被班主任sj拦住了说谁允许你们到这边来讲的…直接给爷整懵了,后来还好让讲了感觉在熟悉的小朋友们的憋笑中悻悻离开。其实一共跑了两轮,第二次就没敢去竞赛班。</p><p>12月就定节目了,理事会成员联合推出超级舞台剧——睡美人,并邀请到子昂女装表演!当时彩排翘晚自习还被帅林严厉批评过,甚至有一次他不由分说就认为是我带头狠狠地当众训斥了我一顿。我忍住心中的不爽,没有像初中和老郭硬刚那样,选择自己找他和解,最终他同意了…条件是期末考到年级前五名,还要我签字画押。</p><p>晚会主体是“诗酒趁年华”,我参与了两个节目,一个开场——三张联袂出演的吉他弹唱;一个压轴——睡美人剧组,我饰演一个跑台的小仙女。我从来没有学过吉他,于是在演出前一个星期临时和子昂学吉他,从零开始!很快啊,通过几堂下课偷偷溜到音乐教室的练手,我逐渐能够勉强跟上《理想三旬》和《春风十里》的小伴奏了。</p><p>12月22日考完月考(别问,问就是没考好),理事会便开始忙碌起来,我们三抓紧时间又准备了一会儿便来到现场候场了,我们的节目是第一个。19点准时开始,上台略紧张,毕竟自己是个几天前连吉他都没碰过的人,结果发挥没出问题,音响出问题了…翻车车。表演完了后,大家便来到三楼智慧教室准备后面的大节目,化妆啊戴道具啊等等,欢快愉悦,其间还偷摸着下去看了几个有趣的节目比如lcp他们的新白娘子~到了诗酒趁年华晚会的末尾,我们剧组上场了,公主昂昂的华丽亮相直接是刺眼,以及师太的乱入,王子的强吻……将晚会气氛推向高潮,大家一同准备了一个月的晚会圆满落幕。</p><p>除了新苗,第二年度的元旦晚会我又登台了。不过我嫌累没有报节目,只是提名了18年度的最美邮中人,然后自然而然地就选上了。反而是子昂加入了徐驰他们进入了一个歌曲节目。其实自己第一年竞赛拉垮本不太想上台丢脸的,但实在不太想高三的时候上于是就厚着脸皮报了。29号晚上我偷偷溜到彩排现场玩了玩,倒是高一竞赛班的熟人,jlh主持人、cy有个舞蹈、czy大佬极限弹《钟》。30号当天,我明目张胆地翘了最后一堂课,来到高一10班一本正经的叫出谈谈一起翘课(其实根本就没有翘课借口只是我表现地太老练了)。早早地吃完饭来到现场坐在了去年候场的位置,等待着一年一度盛会的开启。当时领奖的还有数竞国一秦神,以及千羽曜阳建模团队,半年未见格外亲切。</p><p>第二年的节目感觉比第一年的精彩(可能是第一年我是演出人员没认真看),有澎湃感人的《曾经的你》,czy技惊全场的《钟》(不得不说长江后浪推前浪),有首次出道的YZ少年团!总之,当天晚上很快乐,虽然奖杯是劣质塑料(bushi),捧起来还是挺帅气哒。</p><p>2018从欢笑中开始,最终也还是以欢笑结束叭,虽然中间经历了很多,但是的确——<br>休对故人思故国,且将新火试新茶。诗酒趁年华。</p><h2 id="20-含泪的微笑">20. 含泪的微笑</h2><p>19年伊始,便出大问题。从高一到那时,我所有考试大大小小全部稳定在年级前六名,虽然高一下学期后考了很多次第六,19年第一次,期末模拟考,我考了年级第12名。成绩出来我彻底慌了,不知所措——翘了大课间不自觉就踱步到了教务处,就和帅林交谈了会儿。他倒是很轻松,让我不要有压力啥的……但这次污点着实让我心里沉重了许多。</p><p>于是来到了第三次扬州市期末统考。语文做的倒是挺顺,作文考的“讲真话”,成功一段“孔马索”混合段将议论拉至高潮,自认为写的还不错;数学前面做的很快,第19题圆锥曲线,我算了一会发现不对劲…不对呀,怎么会有我做不出来的解析几何呢!但还是不由自主地慌了,鏖战半小时绕过此题秒了最后一题回头做到最后一刻也没能拿下,考完直接心态爆炸。出来一对答案,原来杀我的不只是这题53原题解几,更是18题应用题!应用题一错直接就没分了——八分之根号三十三减一,我会永远记得你。英语倒也正常,物化虽然很难但化学考的有机比较拿手也顺着做完了。成绩出来,创历史新低——数学140/160,没过班级平均分;总分372,年级16名,扬州市200左右,原地炸裂。其实邮中考的都不大行,第一芃385似乎也只是进了扬州前20。</p><p>我表现的并不像第一次那样慌张,倒像是熟悉了这种挫败的感觉。似乎别人都不相信呢,我也只能苦笑一声。脑中不免又浮想出当年的清华五步计划,暑校也灰飞烟灭了好叭——就感觉,梦一下子就终结了。但是这一次好像有了莫名其妙的韧性和坚强,没有去找这找那抱怨这抱怨那,而是默默翘起了课去重新拿起了竞赛。</p><p>考试过后的日子却是很温馨的,比如语文课看了好几个电影,有泪点有笑点。从高一下学期开始好久没有体会过这种大家在一起的快乐了,我们看了温暖的印度电影《小萝莉的猴神大叔》、一起看了《茶馆》,其乐融融。晚自习我也会回来,在刷一试模拟题的时候也加入他们的深夜话题,还有一次和子昂制作斗兽棋被山哥当场抓获。再次回到智慧教室学数学竞赛,我一个人蹲在大厅看着创之路的网课,讲的不等式——这一趟课下来,也算是我不等式代数方面的初步入门了叭。</p><p>放假,过年前突发奇想大年二十九三十学习了高等数学进阶的多元偏微分,虽然很快就淡忘了。过了个平平淡淡的年。这个寒假极其平静似的,谁能想到这是个再次受到重创的孩子啊,也许大家与我的生活我的心里还是有距离吧,含泪的微笑,远看也确实是平静而祥和呢。</p><hr><h2 id="21捍誉小高考">21.捍誉小高考</h2><p>短暂的寒假只有10天左右,懒惰的我自然是大部分作业都没有写,就连语文也只是混了两篇随笔结束。不过,我还是比较认真地做完了生地政史小科的作业,毕竟,距离小高考还有50天不到了,由于从来没有认真听讲做笔记所以保持很菜的水平。高二上学期期末考试那会学校专门腾出时间来给我们复习小四门了,考的马马虎虎,三门八十小几,政治七十几。</p><p>高二的老师呢,生物是王丽丽老师,讲得中规中矩还算细致;地理是李锦男神,上课光看他人了听倒没听进去多少;历史是宋国妹和柏品泉交替上,我也还是懒得动笔;政治是闵庆华华哥,和蒲苇听他说“什么西啊”反正上课一直在笑,他倒佛系的很完全不慌我们班摇摇欲坠的政治。</p><p>寒假回来不久就来了次小四门模拟,邮中命题,难的一批,完全给我考懵了。当时4门成绩还贴在了班门口。我只有一门上80的,生物七十小几,地理政治六十小几勉强及格——四门加起来离300分还差不少,在班上排名倒数。我被我的惨不忍睹的分数惊呆了,回家后我妈嘲讽我说我挂科复读才搞笑呢。被这种语气刺激到了,我心里暗暗立下flag,两星期内要全部搞上85。</p><p>于是弃了语数外理化还有竞赛,全力复习小高考——虽然今年不需要门门九十分高考加5分,但是我还是想尽力冲到九十分,来给自己一个交代。这时候必须感谢我的宝贝同桌蒲苇,高一以来的小四门王者,笔记齐全,讲题思路清晰。于是我一点一点地开始补笔记,开始翻卷子理错题,开始刷题……渐渐地政治和地理的客观题从错十几条变成了5条以内,生物逐渐能上90了,政治历史的主观题也答得没有那么难了……学校也把重心调到了小高考复习上来,卷子和资料一份接着一份,我也一份接着一份痛痛快快刷着,虽然仍然错的不少。</p><p>距离还有三周不到的时候,扬州市来了一次全市统考模拟。我信心十足应战,不过还是低估的试卷的难度和小看了我落下的知识点,最后生物上了90,政治历史都是八十几,地理还是比较菜七十几。不行啊,还得继续刷,于是我用学科网账号在网上搜寻卷子刷,并拖上了子昂和我一起刷(那段时间坐我旁边),子昂还就听话也放下了其他科目专心备考。一个星期后扬州市二模,这回没有80以下的了!不过也还是只有两门上九十,不过我已经能够考过班上大部分人了。</p><p>我突然发现,只要有决心且付诸行动,便有机会扭转战局。到了考前一星期模拟时,一次极难的考试,我上了三门九十,rank基本是第一了——你努力,可以从倒数刷到年级第一,此处如此,后来的高考亦如此。</p><p>3月16日放假,回家看了会生物,晚上回来对照复印的大纲(把最重要的考纲那本书丢了)背了背政治,看了看地理真题便睡觉了。17日上考场,第一次体验扫脸什么的,也还有趣。第一场政治,直接比平时简单不知道多少,一会儿就写完了……中午没有时间睡午觉便来考场了,最后一题那题课本实验变式做着略不踏实其他也是秒;去蒲苇妈妈办公室复习了会地理,地理倒是略略略有难度,不过在我花大功夫训练下也不足为惧了。第一天结束晚上轻松地复习了下历史,第二天早上秒完全卷便长舒了一口气——不出意外四门90应该稳了。</p><p>那天是一个晴天,也是难得心情放开的一天,就像是当时闭关很久初发说说写的那样——终于沐浴到了2019春日的第一缕阳光。</p><hr><h2 id="22杀向thussat">22.杀向THUSSAT</h2><p>在春暖花开之时,突然就迎来了一次短暂却严重的心理郁结。突然就感觉非常孤单,没有安全感,感觉自己所建立的脆弱的人际关系都像是虚无的,没有朋友,没有人真正关心我。其实我也不知道这是不是,到现在也不知道。只记得当时脑子一抽把qq里的好友删的没剩几个,以及把下一届高一小朋友全给删了(现在想想我这个做法实在是过于智障。)</p><p>后来也不知道是怎么好的,反正发作了一段之后也不知不觉恢复正常了。也不知道是不是成绩原因,反正回头一考三门似乎又是个不痛不痒的第六名。</p><p>言归正传,4月初某一天大课间,帅林点兵点将点了五个人到隔壁——我、贾胖、子昂、金鱼和滑浩,让我们参加清华大学举办的4月份中学生学术能力测试——这个测试考进前多少多少可以直接获得清华的综合营资格。于是,2017级的五人先锋作战小组便差不多这么组成了。我们拿到帅林印的一份又一份试题,在各门课上开刷,晚自习到隔壁自习(颓废)。</p><p>星期六帅林还不让我们走把我们留在隔壁教室考试。那天我打听到高一竞赛班他们举办和澳大利亚的联谊晚会。我和jcg明目张胆去了体育馆,谈谈和jlh当的主持人,还有其他比较熟悉的小朋友也有节目。想起了去年此时的欢乐不免略有感伤,已不是当年无忧无虑学学玩玩的高一小朋友了,现在有着一个又一个的任务。玩了一会儿就回去做题了。</p><p>28号要去淮安考试,26-27号高邮市期中统考,我们几个人还买了华夏园的网课直播,学校安排我们在智慧教室备考(放弃期中考试)。于是来了次彻彻底底的裸考——语文作文写崩了倒是。智慧教室总不是学习的地方,尤其是超过三个人一起的时候。一开始的数学还好,就是讲得略水略简单;后两天的物理直接是听得我想打人,这讲得不知道什么东西。。于是,于是就颓了呗……</p><p>28号大早没有回班直接坐学校包的车和帅林一同前往淮安。上午还忙里偷闲去周恩来故居坐了坐歇了歇,中午帅林请我们吃了黄焖鸡。中午学校不让进,我们一行东跑西跑找不到地方坐下来休息……最后在某不知名小区平时老爷子坐下来打牌的地方五人轮流坐下来恢复恢复体力。</p><p>全程机考,考数学和物理,全是选择题,要求贼严格,只准带一支黑笔进去,水都不允许带。我选择先考数学,一共只有几条选择题,却比较奇怪有难度,考验数学感觉和思维;物理好多选择题,最要命的是,选错<br>倒扣分,一路做的战战兢兢。杀完便回家了,路上期中考试成绩出来了,数学英语考的都还可以,唯独语文,110,班上倒数——总分年级第十。这一次由于试卷比较简单,年级第一芃打破了我一年半的高分记录,考到了395分,这也是不算附加时期最高的记录了。看着这分数怎么也高兴不起来。</p><p>30号成绩出了,我是数学80,物理60.5,总分击败全国所有考试的学校代表们百分之93.5,已经是比较高了,不过物理确实拉垮。滑浩比我还高一点,76+69=145,击败好像百分之95。不过我们的成绩都没能够到清华大学综合营的线,需要考进前百分之一才有直通综合营的机会。扬中大佬茅巨84+87=171成功入围。</p><p>总之,当时感觉捷径走不了,课内考不好,多半是要废了(bushi)。忙忙碌碌却只是一路坎坎坷坷啊。</p><hr><h2 id="23足球几事">23.足球几事</h2><p>学习谈多了,其实还有些体育课的些许碎片生活。由于自己算是个活泼好动的人,所以会抓住机会溜出去玩。比如高一的体育课、活动课,当时喜欢跟他们一行人混着打篮球,虽然我个子不高且无技术,但总是跃跃欲试。然后有两次把自己打受伤后就不怎么碰篮球了。</p><p>更加喜欢的是足球,从初中起便喜欢在体育场踢球踢的玩,虽然没有特意去练过球技,但上场踢还是勉强可以的。高二初期体育课还没分班,我们班便和同楼层的一起踢比赛,我发现自己有时竟然能在混乱的场上搞到球并打门打进,也是有趣。大概是体测之后的某次体育课吧,踢球,我带球过半场单刀的时候被对方后卫一晃不慎跌倒,整个人在地上滚了两圈把脚给折了。好吧也没那么严重,软组织受伤,不过对我来说走路都非常困难,所以那时去高一蹭课啊啥的都是一瘸一拐去的(<s>树立了新奇的学长形象</s>)</p><p>于是痛下决心报了乒乓球,和蒲苇戴亮他们一块去学乒乓球了,打的一般般,面对蒲苇这样的专业选手自然是无能为力,不过渐渐能够接住syl,dl他们几招了……寒假时候,高二竞赛班单独补课嘛,于是有一天放的早了他们就去操场上踢球,我当时恢复了几个月已经好了,心里痒痒也去了,一下子就进了两个球,爷青回,总之虽然是大冬天但踢得还是挺漂亮的,于是又重拾对足球的感觉了。</p><p>下学期便转课转到了足球课上,和熟悉的同学一起每堂课踢比赛。经常是我们6班自成一队踢七八九联队,踢都也很焦灼,我反正都踢的前锋位置,跟子昂接应着,虽然配合并不咋地,不过进球还是算比较多的。4月初,新一轮澳洲小朋友来访,我和jsb商量着让我们几个上场,也过了老师这关。不过当天由于上课没走开,一直到大课间才有机会到操场上增援高一校足球队。我们赶到的时候是1:2落后,高一他们后防过于薄弱(似乎是体力不支了?),以致被澳洲小朋友压着打,我一去澳洲一个漂亮的组合击便进了一球,虽然已经换了门神子秋上场也没防住。</p><p>于是我们临时上场,虽然一直踢的前锋,看前面高一的前锋踢得还可以便到后方去防守了,我和子昂,还有老队长刘tf,虽然后方屡遭进攻,但都被我们防守下来了(主要是刘tf太猛了)。后来一个机会谈谈在前线拿到了球,顺畅地过了澳洲的一道防线射中了一球,2:3惜败,不过已经挺好的了。</p><p>之后啊,就一直踢着球,于是几乎每节体育课都能看到我们在操场上快乐配合,肆意奔跑——直到高三下学期。</p><hr><h2 id="24全国畅游记">24.全国畅游记</h2><p>忙完THUSSAT便进入了5月,5月,是初赛的季节:化竞和数竞的初赛都在5月份。事实上四月底山哥便停了化学课进度给我们磨几份初赛卷子找找感觉,虽然感觉他对化竞并不是很上心。</p><p>其实我主攻的是数竞嘛,从来没有参加过化竞培训做过化竞卷子,当时做初赛卷子总是错上一大堆,可我这人偏偏就是好胜心挺强,觉得做成这样说不过去,便稍稍考前认真看了几份卷子。5月12号便考试了,在实验楼,主要参赛选手还是我们物化班的还有很多高一竞赛班的小朋友们。做的时候发现还挺顺的!——就是有一题,碳氧双键,我忘了它叫羰基了,白送两分,总体感觉还好,也许说不定还可以过呢哈哈哈。</p><p>一个星期后有一天山哥突然神秘地来半开玩笑跟我说,不如你弃了数竞来搞化竞吧,我一懵,之后发现我化竞考了全校最高分102/120…很无奈,惊呆了,虽然化竞总归不是我的道,不过看入围名单写在黑板上我排第一个的时候,还是挺开心的。</p><p>同期,侯通过图书馆购进了几十本全国高中数学联赛预赛试题集锦,于是我们班数竞党人手两本拿回来备考26号的初赛。其实2019年起到现在也还没正式地备战竞赛,5月份是时候了,就从初赛刷起,不眼高手低。于是便开始了畅游全国的计划——把各省的预赛试题统统过一遍,特别是浙江,四川,重庆湖南这些比较难的省份,开始找寻竞技状态。基本一天能游几个省份。贾胖,子昂也跟我一起刷着,不过我刷的比较多,语文英语思考平面几何、数理化开刷填空和大题——畅游全国基本结束,回到江苏,就这样完全不慌地来到了5月26号。</p><p>25号晚上我手机在手,颓掉了,没怎么复习,高一的谈谈还问了我几题稍难的题我给他解了,似乎状态还可以。26号还是一个下雨天,和18年初赛情景挺像,我在三楼考试,不过身边有不少一中的同学…我才不管,也许我的分数比我周围一圈人加起来还高吧……不狂了不狂了,认真考试。填空题似乎比较难,第5题立几我用了昨天刷手机偶然看见的一个公式给搞出来了,做了好一会才把填空完成;赶忙飙入解答,毫无压力地做完了前三题大题,最后一题组合嘛就直接放弃了。做的倒是比上次顺畅,填空题却比去年多错了两题,唉,老了老了,别被高一小朋友超掉就行。</p><p>过了几天出成绩了,高邮划线六十几分就过了……我考了97分,丢丢脸,比高一时考初赛还少了快20分,高邮rank2,仅次于贾胖104分,(其实我对下答案和他错的一样多不知道扣哪了)第三名是高一的!我打听了一下叫孙zw,并不认识,考了八十几,倒是很期待复赛时过过招呢。</p><p>这段时间到处辗转到处忙啊,后果就是课内成绩直接是——语文开了记录,97/160;作文连续拿了好几次四十小几分,虽然我感觉写的还行;数学一直考的挺好,不过卷子没啥区分度。这个语文是真的让我发愁啊,次次考试都是语文将我一击必杀,徘徊在110/160左右,似乎好久没考进前3名了……有感而发就写了条说说:“重蹈覆辙。谁能让我的语文提上来,我连人带命都是她的。”虽然啊,这高三才实现了啊哈哈哈。</p><p>浪够了,也该回来准备期末了。</p><hr><h2 id="25隐形守护者">25.隐形守护者</h2><p>刚忙完了数竞初赛,一波未平一波又起,帅林又又又又召集我们一些人开会,说扬州市联合爱尖子办自主招生培训,免费,让我们积极报名参加。高考三天放假的时候进行培训。压榨假期时间,谁想去啊?自然大家都没有明确表态。帅林着急了,毕竟这也涉及到老七所之间的面子问题,于是便找我们五个人,几乎是强制让我们参加,还说什么这次不参加以后什么清北的机会统统不给我们。我笑了,你名额不给我们第一梯队哈哈哈……</p><p>当时我其实是无所谓去不去的,然而其他几位非常坚决不去,当时还闹得略不愉快,不过经过一番讨论最后大家都是去了——其他人第一天就去打头阵,物理化学,我们还有几个人去听数学。8号大清早,查伟和我一起来到扬州,办理入住后便直接去上课了。果然不出我所料,像这种面对大众的培训必然是非常水的,我听了一会儿就开始划水了。于是子昂掏出手机,很快啊,买了个游戏,叫《隐姓守护者》,是个剧情游戏,玩起来巨耗时间,却也确实挺吸引人,同期金鱼也在玩这个。正巧上课我坐在子昂旁边,便有事做了,极限操作,坐第一排乐呵乐呵地观玩隐形守护者,不亦乐乎。</p><p>吃饭基本都在一起吃的外卖,于是有了“张牛逼先生”这一说,吃完了继续玩,他们还玩元气骑士,颓的一笔。晚上有一个爱尖子举办的数学能力测评,这回有意思了,扬州市的高手同台竞技一份数学自招试卷。说实距离THUSSAT那会刷自招已经过去挺长时间了,手感全无。压着时间连猜带猫写完了卷子,最后改出来只有70分(邮中好像就我一个及格的)——本来乖乖隆地动学校力请我们出山就考成这样,笑死。</p><p>不过既然出来了就好好浪一浪嘛!晚自习贾胖金鱼他们打拳皇,恐怖奶奶,昂昂依旧守护者,晚上和jys住的,也嗨皮到了凌晨才睡。早上起床发现子昂夜里一点多钟把我发的《借》录好了,也是我跟他高中期间唯一一次k歌合唱。早上吃了正宗的淮扬早餐,赞!元气满满去上课——把隐形守护者继续通了好多关!</p><p>于是这次“培训”就在完完全全的颓废中结束了。本以为暑假还会一起出去征战,像高一一样,可是并不是这样。培训结束了,2019高考也落下帷幕,于是我们,最后一届,即将走到最前线去——略有伤感。好叭其实是一回去第二天就要考试,浪了两天的我完全裸考…</p><p>期末复习平稳进行,终于丢下其他事情专心搞搞课内了。考试前几天,很突然,李校长悄悄把我喊到他的办公室,告诉了我关于暑期综合营的事情。北京大学给了两个名额,很抱歉,学校间经过沟通把名额确定为金鱼和昌国,你没能拿到机会上去,不过期末、竞赛好好准备说不定日后有机会……我想到,从高一开始,我搞竞赛、拼期末的目的是什么,就是为这高二暑校的名额,然而现在,一票否决……非常伤心,虽然没有表现得太明显,但是牵引着我走的那根<strong>线</strong>似乎,突然就<strong>断了</strong>。确实我们都是差不多水平的人且他们高一的竞赛确实成果比我好一点,可是,一直期盼的就这么直接的失去让我不知所措。</p><p>无奈,期末还是要好好考的,这次语数外都非常简单,我也发挥地很好——第一次算上附加分的大考,419分,邮中第四,扬州排100名左右……第一名是子仪,带着保持了很久的高分记录——425分,接着是同桌蒲苇,还有比我高一分的子昂。我尽力了啊。</p><p>线断了,那就自己飞吧。</p><hr><h2 id="26自由在高处">26.自由在高处</h2><p>期末考完放了一天假便开始忙碌的高三暑期补课了。我鼓起勇气下定决心,第一天早上上学先去政教处和孙老师请假,然后回班跟帅林打了声招呼,便开始了自由自在的翘课生涯,一节课都不上的那种。金鱼、尹浩、天来和昌国被帅林喊去南京培训物理竞赛了,于是就丢下我一个在学校里独自奋战。</p><p>一开始在教研中心,拿着本昌国的不等式的秘密,还有我新购进的平几书,还有一沓一试试卷,爽了就来一套。下课了便出去和蒲苇拿笔记,因为那时候语文讲唐宋八大家,英语讲模块9这边,量很大,翘课是个很冒险的决定。紧接着我的步伐朱巨也来跟我自习了,不过并没有让气氛活跃一点,还是各学各的。不幸的是,在教研吹空调吹受凉了,于是我便打算转移地点去一个没空调的地方,正好看见新高二竞赛班小朋友们来补课了,就在原高二六班隔壁,于是我心血来潮将阵地搬到他们隔壁备战。</p><p>那段时间确实是非常自由,想学了就学,不想学了就出来走走晃晃。下课了偶尔还有小朋友们来探望我,有一开始并不认识的wjz,还有比较熟的谈谈,jlh他们,就感觉很温馨,有人陪着。我那时在不停地刷平面几何,万喜人的习题册,很多,以及不间断的一试训练,新购进了一本联赛模拟试题,一份一份往下刷。渐渐地,几何题很多都能自己老练地做出来了,一试也逐渐能稳定到了七八十分左右,一连多少天的集训确实是有效果的。</p><p>有一天啊,高二理竞放学了,我跟着混出去买了晚饭,然后又混进来上晚自习,与高三教学楼紧张的气氛格格不入。我坐在空的教室里一个人享受着空调,享受着空旷,享受着独自刷题提升的充实。晚上不想学习了,便踱步到三楼的走廊上。倚靠着栏杆,左手边是正在上晚自习的高二文竞,右手边是灯火通明的高三教学楼,大家都在认真写着作业,不是有老师叫学生出来交流——突然感觉晚风吹在脸上非常舒服,就这样我像待机了似的开始在月色下冥想。突然感觉自己是一个既不幸,又幸运的人,一方面,我在竞赛什么的之中摸爬滚打为着高难度的目标努力,还没有参加暑校的机会…另一方面,我又庆幸自己能够跳脱出单一无聊的高三暑假,能够自由自在地跟着自己的感觉备战,这又何尝不是一种幸福呢。熊培云写过,自由在高处,此刻在三楼,在高二高三衔接之际吹着晚风沐着月光的我深有体会。竞赛为了什么呢,如果是为了那个荣誉,那个可有可无的名额,这样功利性的奋斗在不定的未来面前,有何意义。我真正珍惜的,是在高考的上空,盘旋的、珍贵的自由啊。</p><p>高处不胜寒,起舞弄清影,何似在人间。</p><hr><h2 id="27化竞一日游">27.化竞一日游</h2><p>上文提及,我5月份的化竞初赛高分通过,可以和大家一起去征战19暑假的夏令营了,不过我思来想去还是决定不去南京,原因有二——暑假我要专心搞数竞,如果只是为了化竞的小奖不值得;邮中六十多个人去培训,按照我的经验,人越多效率越低,在那学不如自己学。</p><p>7月6日风雨大作,雷电交加,我在高二六班教室自习,昏昏沉沉的下午,突然有好多个隔壁小朋友不经意来看望了我,感觉很惊喜。由于出去的人太多了嘛,我们班于是停课10天。7号他们就出发了,办理考试手续的时候告诉我没有我的名字,我当时就愣住了,在想这到底是苏化会的原因还是高邮中学的原因,尽管我没有说化竞拿个一等奖的信心,但你这直接不给我考的机会着实让我很不爽。于是我不断打听,坚持让山哥去问清楚,最后发现是学校和苏化会间交流障碍。</p><p>那段时间,我还特意跟lx借了两本书,一本大书基础有机化学还有一本奥赛经典。不过我拿回来基本没有翻过,似乎只是为了显现我在化竞中微弱的存在感。十天集训的时间里,我就在家里和南京扬子石化群远程连线,发现他们果然如我所预料很是颓,lx带头在那边不知道干些什么好事…在那期间认识了小邓他们更多的学弟学妹们,也自己做了半份夏令营试卷(只会做有机)。于是我看出来了,要拿分最效率的方法就是考前找找有机的感觉,14号花了小半天研究了会有机大本。14号傍晚山哥又突然打电话说我似乎又不能考了,我就非常不爽,我已经“准备”了这么多天了,后来又说能考了,让我第二天早上就起个大早和他一起上南京。一番周折后,我便单枪匹马过去了。</p><p>15号早上坐大巴去的,一路颠颠簸簸让我有点晕车。山哥先是摸错了路,带我横穿玄武大道,然后又绕了一大段,中途还跑路了说去办证,让我随便找个地方等他,就把我扔在了半路上。烈日炎炎,我突然有个大胆的想法——直接杀到他们上课的教室呗!于是说走就走,跋涉了一段时间终于孤身来到了教室,看见了正在<s>上课</s>划水的他们。一开始怕有人把关不敢进去,之后蒲苇出来跟我交接,我才从后门准备悄悄溜进去,那时感觉整个扬子石化群都在给我出谋划策hhh。说是悄悄,进去一不小心把门猛的一关,好了,前面的人全回头了……</p><p>中午初次尝试南师大的食堂,似乎还不错。中午去了昂昂和包包的宾馆,在昂昂的床上睡了一觉又去上课了。上了个寂寞,全程玩手机到下课。坐的蒲苇的车,南京街头的猎吧,挺怀念的。晚上和蒲苇包包子昂逛了宾馆旁边的金鹰广场,吃了一家解牛,很舒服很惬意,完全忘却了第二天考试的事情。晚上和山哥一起睡的,他喝了两瓶啤酒(迷惑行为)老早睡觉了,我继续玩手机到十二点才睡。</p><p>第二天匆匆忙忙用了山哥扫的小单车赶到考场便开始了。不出我所料,前面基本没几条会的题目,勉强连猜带蒙写了结构,然后开始肝有机,在我的奇妙感觉之下,竟然一会儿就把三条有机大题全部写出来了!有机写完又把全卷扫了几遍又写了一堆大概能蒙的题目便结束了。结束了没有和子昂他们杀向扬州数学夏令营直接回了高邮中学。化竞之旅到此结束。</p><p>两天后查到分,42分,似乎在高邮中学内部排已经蛮高的了。系统显示说没过但过几天又说可以参加国初了。短暂的化竞之旅,还挺有意思的呐。</p><hr><h2 id="28再战邗江">28.再战邗江</h2><p>化竞回来后,我们班又继续上课了,但我还是选择在高二教学楼自由自在地自习,那时候昌国和滑浩也回来了,于是一起在那边自习。我又逐渐增大了刷题量,每天做模拟题的同时,也带了一沓子复赛真题一份份地过。复赛卷子还是挺简单的,一试基本能做三位数,比去年同期显然是稳很多了。</p><p>当时金鱼子昂他们带队在扬中培训,我也跟他们远程连线,据说还压中了夏令营测试的压轴不等式。随着一天天过去,我也期待着下面一届有一个人能够在复赛这一轮和我酣畅淋漓地交手一次,像去年的我一样。</p><p>23号我和大天来一起去的扬州,住的一家普普通通的小酒店,就在美琪小区口处。下午去看了考场,又来到了熟悉的邗江中学。又是那熟悉的大门,熟悉的操场——残雪,心中的痛——十个月前就是在这个地方,折戟沉沙,这次可得好好地玩一局。</p><p>晚上我爸妈离开了,大天来也不复习,拖着我看电视剧《亲爱的热爱的》,我也还真就没咋复习颓了一个晚上。第二天早起去吃早饭,吃完后身体不适,最后没有坚持住在宾馆里呕吐了,极其难受,这时候距离考试还有一个小时不到了。我尽力调整好状态来到考场,贾胖就坐在我后面考。以及这次的监考老师跟去年的漂亮姐姐直接比不起来。</p><p>开考立即进入状态,很快速地顺完填空题,似乎扔了一题,然后开始飙解答。T9长着吓人并不难,我一边技巧一边暴算很快搞定;T2是题奇奇怪怪的解几,反正做了一会也搞定了;题三是奇怪的不等式题,题目看起来很简单但似乎不太好证,这题一直耗到最后也没写完…还不错,依旧是,一试做完,过线稳了。</p><p>开始考二试,这次依旧想冲一波高分吧!于是做第一题几何——做了半个小时还没有做出来?!很少碰到做不出来的几何题了啊…不行不能慌,定睛又看了会其实非常简单,长舒一口气写了证明转战代数。看了题目我笑了,不就是暴力求导嘛,有手就行,这也能作二试题?在做这题是我就预料到这次线估计比去年要高不少。顺完了导数还有一个半小时的时间呢,那不如看看组合题吧!是构造证明题,一下子就找到了正确答案了,然后分好多种情况证明,写的天花乱坠满满的,心满意足交卷了。考完贾胖说做了三题加试,我只能苦笑。</p><p>等了三四天的样子,在隔壁自习的时候hj说成绩出来了。很神奇地我又考了最高分,96+120=216,倒是从没考过这么高;贾胖仅次,76+130=206,他一试送了一题解析几何所以略低。这次考出来刷了不少人,最后只剩了十几个,包括高一过了5个。很遗憾高一没有高分的,最高也只是一百出头,没享受到被挑战的乐趣hhh。去年是06010,rank10,今年是06007,rank7——不过无论如何我是不会像上次那样虚的,这次是有备而来。九月等我。</p><hr><h2 id="29养老生活">29.养老生活</h2><p>复赛结束,同时被孙和帅林找谈话说翘的课太多了回来上课,其实这么多天没上课看见老师还挺尴尬的(因为我在高二教学楼自习)。考完复赛,正好新高二竞赛班放假我便选择暂时性回班养老一段时间。</p><p>金成和昌国在隔壁愉快地备战北大的夏令营,其实这时候我已经释然了,并且希望他们能够给我们这届带来好消息。我双语课倒是没有啥理由翘课了,于是便回班上了几天课(抄了几天笔记),以及零基础英语听写。数理化三科依旧翘课在隔壁自习,虽说如此,每天的一试模拟和平几训练还是必不可少的。</p><p>31号孤独的高三竞赛班终于放假了,开始了为期10天的假期。这十天我干什么呢?学校里发的几十份试卷当然是动都不会动的——事实上竞赛结束后我把抽屉里塞的试卷整理了下一沓几厘米厚。每天早上七点多起床,八点半准时开始模拟一份一试试卷(别问为什么不是按照8点,问就是起不来),考完后自由进行二试训练到12点。当时学数学的大砖已经刷得差不多了,于是借来金成的19年的中等数学集开刷,基本正常的卷子一试也能做到大几十分了,平几也基本都能做出来。还有两天平行在家做了同期考的东南地区奥林匹克,两条平几都成功做出了。总之,早上是效率极高的模拟,下午晚上就是慢节奏的保温和复习,还有颓废——因为在家里有电脑嘛!零点过后呢要么拿出手机听k歌,要么掏出万喜人的平几习题一题题继续往下刷,打开床帘,外面的灯光洒进,确是别有一番感觉。</p><p>那时和新高二的朋友们也渐渐熟了,和gzc拿了一堆物竞质心的网课,每天晚上闲来无事的时候看个把小时,于是把力学浅浅地过了一下,这也是我物竞的速成本第一部分的内容。以及在家嘛,白天偶尔去奶奶房间里蹭会儿电视剧(那时候前前后后蹭了不少来着),晚上去妈妈房间里蹭电视,这样暑假的热剧了解得倒是不少…</p><p>慢慢地我发现,与高一时候借学习之名颓废不同,现在的我确实是充实了许多了的——养老生活,却也像是另一种角度的,韬光养晦。</p><hr><h2 id="30流浪南京">30.流浪南京</h2><p>7月份复赛结束的时候,我在数竞群里招兵买马,准备找一个moer和我一起出去培训一次,我选择的是学大伟业的国奥集训班,难度较大。我们这届他们都不肯跟我去,去拉拢szv,lkp他们也都失败了,意识到,我可能要孤身一人前往南京。</p><p>8月份一开学我就翘课准备,14号和爸妈去了南京,那天人挺多,废了好番周折才办好手续,一开始是想和赣榆高级中学的学生拼房被嫌弃,后来和南通的通州高级中学的两个同学拼的一个大三人间,环境还挺不错的。14号傍晚爸妈就回去了,留下我一个人在南京,我突然就感觉很孤独无助,傍晚我一个人走在街上,看着人来人往,我却连一个可以丢放眼神的地方都寻觅不得,就很伤感——这条路走到后面注定是孤独的啊。街头随意吃了晚饭便回宾馆画图。准备第一天上课的平面几何。好在室友倒是挺温和的,话不多,一回来就玩游戏,很早就睡觉了。</p><p>第一天上课认识了同桌浩骋男神,是个帅气阳光的大高个儿,我们俩倒挺聊的来,他是南京高淳高级中学的学生。上课我们就一起紧跟着李建泉的快节奏边画图边抄解答(以及首次见识超难超难国集几何题,证明写上两页纸);下课便休息或者互相讲述着自己学校的故事。他喜欢唱歌,还给我分享了他的古风歌单,还给我讲了他的一些情感经历hh……说着还有点想念呢。</p><p>那边考了两次试,都是一试贼难二试比较简单。很神奇地,两次一试都跪了,二试倒正常:第一次四十几加130,加试数论比较水(我的两个室友一试九十几还有112);第二次六十几加60,因为几何题出错,所以除了几何还拿了60分——总之也算可观的了。晚上除了考试就是助教陈嘉昊漫无目的地讲题——其实我对这个助教印象一般,感觉他讲课总像在应付什么,没有太多实际的内容。</p><p>代数是我期待已久的李伟固老师,事实上也正是看到了李伟固的四天授课我才选择了这次培训。讲得确实好,有深度有难度,但是第三天突遇特殊情况——李教授家里出事了,不得不赶回家,我心里一慌,果然最不想发生的事情发生了,换老师,一天助教,一天武炳杰老师。我当时想抗诉来着,这个水平跟李伟固能比吗??你不是在坑人吗??大家却都是默不作声选择默许,我大概就对这个大环境产生了一丝不屑与鄙夷。</p><p>陈嘉昊上课抛弃了李伟固的讲义,开始讲他自己准备的三元不等式,我在下面听得非常恼火,感觉他就是在应付差事,讲些一点用都没有的东西。下课休息期间我直接冲上讲台和他开门见山:“老师我觉得不应该讲这些过分注重技巧却根本不会考的内容更应该讲些多元的代数杂题,这才是联赛的命题方向。”他被我问蒙住了,我说是不是因为这个比较好讲,他笑着承认了,我说我自己整理了几十题多元不等式代数题,要不老师你再给点题我整理,他说他自己整理的也不过就是几十题……无果而终,不过我也没有过分顶针,身边不听讲玩手机的人逐渐多起来了。第六天是武炳杰,原来是个年轻人,讲的大多数是多元不等式,不过讲得实在是,太,慢,了。我又上去跟他说把节奏快一点但没有效果,反而有几条题目我私下给了几个漂亮的证法给他留下了点印象。</p><p>最后两天是中科大的王健伟教授讲数论。好家伙,题目直接难破天际,一条数论题写了我四页纸……到后期基本已经没什么人听了。我周围一转,包括同桌和江西弟弟都开始打王者,而我仍然孜孜不倦抄着笔记…好一个孤军奋战的感觉啊,像是在一个不争气的地方努力地争着气。</p><p>那些天,说实话,体验到了一种完全不同的生活,与以前一同出来征战的感觉不同,这次是我一个人,流落在南京的街头,每天算计着午饭晚饭,穿梭于陌生的人潮间觅食,没有依靠,没有陪伴,没有可以交心的战友。流浪南京这一趟,说实话没有学到太多东西,但是我发现,自己已经慢慢地能够站起来了,心态也渐渐变得更加平稳。</p><p>22号回了家,和爸妈一起在街对面的饭店吃的饭,好几天没吃到这样的美味了,以及,终于可以回家了。孤军奋战这一趟,元气大伤,回来修养一番,便慢慢走近了那熟悉又陌生的九月。</p><hr><h2 id="31不能颓">31.“不能颓!”</h2><p>说来也巧,我从南京回来正好赶上邮中高三补课结束,于是又顺理成章地放了假;此时此刻出了昌国邮中所有的MOer都还在江都快乐集训。他们晚上还模拟考了一次,加试的时候那边高一小伙szw,lkp都来问我几何,我花了一个多小时做出来了,事实上我瞄一眼题目点拨了下szv他也和我差不多时间做出来,有种感觉——这小伙也许还可以呢。</p><p>虽说高三放假,帅林还是搞个什么到班自习,我一个人在家效率也不算高于是就约滑浩一起来学校了。8月底我重新开刷联赛真题,发现一试都可以轻轻松松刷上90分,甚至更高。同时也继续从中数上扒几何题做,也还可观。有一天高邮文体举办一个南大教授的文化讲座,我还报名参加去看了,难得回来和班上同学参加这样的集体活动hhh。</p><p>开学后,不太想再去智慧或者教研备战了,就在隔壁教室挺好,于是一行快十个人一起在隔壁自习。人一多就会颓,无论已经多么接近决赛…特别是昂昂和滑滑在,想不颓都难,尽管如此,我们竟也都能会心地一会儿一句“不能颓!”昌国在不断地刷题看题,滑滑由于之前没有刻意搞过数竞自己随便找了小数君的卷子做的玩玩,朱巨辅导滑浩;金鱼和查伟也开始刷真题了……我对比了下去年,决定放慢脚步,最后一周,每天模拟照常,剩下来的就大模块细细地复习,一个星期,必然够了。</p><p>还有一些小插曲——比如高邮零模。我们联名上书帅林翘考试被拒,大家都很不爽,都什么时候了还管高考。我阴阴的扔了句:“高联就是我们数竞生的高考。”昂昂听了后激动起来了,拉着lx直接找李校,成功。在家好好地体验了睡懒觉的感觉,破例推迟模拟。越临近高联,花在复习上的时间越来越少,人却越来越轻松,我想,相对于去年的庸庸碌碌,这是对的状态。</p><p>9月5号生日,忙碌中似乎已经淡忘了。回想高一过生日正逢高中第一次摸底测试前,那天大头他们带鸭心来学校和我一起分享的;去年在智慧教室平平淡淡度过;今年也是平淡吧,但上线一看多了很多祝福,心里却异样的温暖。</p><p>6号,子昂昌国金鱼他们就全部回家了,lx也带着化竞小队杀向了南京。子昂在黑板上留了一句话——“当时明月在,曾照彩云归。”我突然就想起了我们暑假隔壁教室飞飞的模拟卷,一摞又一摞的竞赛书,晚上虐杀小飞机的欢乐……而我和滑滑朱巨选择留在学校里上最后一个晚自习。正逢活动课,分别和syl,jys一起在操场上散了会心,看着他们踢了会足球便回去上最后一个异常诡异安静的晚自习。</p><p>晚上看到高二的gzc,祝福我高联加油。7号最后模拟了一份难度不大的模拟卷,也没算分数,过去吧。午后的出发。</p><hr><h2 id="32最后的高联">32.最后的高联</h2><p>7号下午简单睡了个午觉便出发了,住的一个比较远的奇奇怪怪的宾馆,不过环境还好。下午去拿了准考证,去得早了,在那里苦等学校大部队一个小时…那天第一次见到了高二竞赛小队szw他们,一起去看的考场。熟悉的考场,仍然要穿过那个大操场和后花园到后面的机动教室,不过这次出来一定会是昂着头的。收到了许许多多的加油祝福,很多都是我去年战友学长学姐们,更坚定辽。</p><p>晚上和爸妈出去到了万达逛了一圈才回去,回去没有再看多少题目,只是和爸妈闲聊了会儿,发现爸妈其实为我这个竞赛也烦了不少神了其实,这最后一场一定得考得尽兴。晚上稍稍翻了翻平面几何100题,23点不到就睡觉了(虽然没睡着)。</p><p>早上不到6点就醒了,爸妈起床给我买早饭虽然声音不大但还是吵醒了我,不过我精神状态还不错。吃完早饭便出发了,在大门口告别了爸妈,一个人径直走进去。来到考场,看了看我身边的考生——吴浩然,18年保送清华的国家集训队队员…孙鑫,也是扬中数竞巨佬,此二人在复赛rank2,3;这么强的大神在我身边,我蓦地眼前一亮。广播里放着音乐《我的未来不是梦》,考场里我侧耳听着吴浩然谈笑风生,心态平和,我发现自己一点也不紧张hhh。</p><p>8点开考一试,我很迅速地搞了前6题填空题,第七题是题立几,按理说很简单,我很快用两种办法双保险却发现算出了不一样的答案,心里一咯噔,选了一个写上去,T8看样子不适合,便跳过了。T9高考题,我一开始三角公式搞错了花费了我不少时间虽然最后一个和差化积秒了,但这题上的一个失误让我略措手不及。大概还有二十几分钟的时候还有两条大题,开始飙解几,突然发现这题与16年的压轴题有异曲同工之妙,设点,顺势5分钟秒了这题!一下子追回来了。到了最后一题,复数数列,难搞,思来想去发现了是个旋转构型,来不及写了,大概写了5分或者10分的过程这样子。回战T7,改了答案,交卷。休息间隙对答案发现T7错了……无语,一试上三位数的希望破灭了,好好考加试吧。</p><p>9:40开始,拿到卷子,第一题几何,觉得应该不难,按部就班地推理。几分钟我旁边的国集巨佬便秒了第一题,快二十分钟的时候我也get到了方法,一瞅,跟身边的sx差不多速度。我心里非常苦涩——这个暑假精心准备的平面几何,最后竟然考得如此简单,白费了那么多功夫,早点用来学数论了。代数很麻烦,不停地调试,国集选手也做了挺长时间才搞出来,写得满满的。我知道省一已经稳了,现在只要再做出这一题,便皆大欢喜。在我冷静的分析一个多小时之后,终于将各个部分拼凑写出了这个题的解答。长舒一口气,结束了。<br>sx却已经开写数论题,whr快速搞完数论组合题写了一句话就搁那不写了,复赛rank1的高一小朋友将最后一题组合写得满满的……我看了看数论,是朱巨前几天押的模数列,误了误了。</p><p>今年的天气和去年如此像,同样的阳光明媚天空高阔。最后的时间,我一点一点地倒计时,和我的全部全部的高中数竞生涯,say goodbye.收卷后,我和旁边的whr,sx对了下答案,当我和whr同时报出相同的“7400”时,当时就高兴得想哭出来,不过紧接着的组合数我犯了个小错误,不过尚可啦。的确,这一次穿过操场,我是抬起头走的。</p><p>看见爸妈,他们小心翼翼地问省一有没有,我笑了笑,国一差不多吧。大家都笑了。</p><p>对的,我努力了一年,这样的场景终于降临了:阳光明媚之下,决战结束,大家都笑了。</p><hr><h2 id="33转战物竞">33.转战物竞</h2><p>8号考完高联,作为乖宝宝(虽然翘了下午的课),晚上还是回班去上晚自习了。帅林大调了座位,现在金鱼也开始是我同桌了。当天晚上灰溜溜提着两打刚买的38套进入教室,似乎很有喜感。不出所料,帅林找我谈话,先是问我数竞情况,我说国一线左右吧,接着言归正传让我回归物竞最后再冲一波。我笑了笑,那是自然。</p><p>于是回班上了一天课,又重新开启了翘课生涯——五人竞赛小队还有大天来。荒废了一年已经几乎啥都不会了,于是重新拿起程稼夫崔弘滨开始学习,并开始写速成宝典。同时开始做帅林发的邮中翻印的预赛小本本,也做了不少题。14号考预赛,又是和高二的小朋友们一起考的,依稀记得jlh,cy好像跟我一个考场来着。不过都中途跑路了,最后一个考场只剩下两三个人。我算是坐到了最后不过最后一题力学写错了…回来便急匆匆地对答案,还好,能过复赛。</p><p>第二天预赛成绩出来,竟然考了162,出乎意料,高的有点虚…不过势头在,很好!继续准备复赛内容,继续刷程稼夫,已经开始学相对论,抱着也许能拿分的心态呢。模拟题倒是没做多少,几乎没多少会做的…据说高二这届非常强呢,我倒是经常跑到高二那边去串门,还跟他们分享了大天来的梅子()。复赛前几天,帅林召集我们说想让我们出去培训,我说这样不好,考前培训什么都是假的,效果完全不如自己刷题,帅林说不过我,让我去和李校长说。然后李校就开始高谈阔论说了一大堆不着边际的话,什么培训不是备考,是为了高观点看问题……我告诉你这个培训就是讲重复的题,如何在考试里投机取巧。不过我不便说太多话,便随大流吧,反正物竞我也是搞的玩玩。</p><p>19号早上出发的,高二和高三差不多人数,还有两个女生小邓和小柏。在车上高联成绩出来了——89+60=149.跟预期差不多,但听说这次分数普遍偏高似乎国一有点危险。上课期间基本就是划水,不是我说,讲的东西和去年一模一样,我直接呆了,自己和谈谈和滑滑借了真题开始做,才不听讲,事实gzc直接就翘课不来了hhh。贯穿培训始终的是我对于高联rank的担忧,扬州rank4,也不知道是什么水平。晚上和滑滑住的,凌晨一点了还跑到高二的谈谈房间里复习,谈谈似乎蛮紧张的hhh,不过比去年稳多了倒是。20号滑滑状态不对了,也开始略紧张,还问我21号应该穿什么颜色的衣服…我说紫色适合。</p><p>下午一番周折还坐了地铁来到鼓楼,南京大学。住南大宾馆似乎有点玩意头呢,还挺舒服。晚上大家一起吃的晚饭(就这?就这晚饭收我们这么多钱)然后便各自回宾馆休息了。子昂和金成出去南大校园里散步,我跑到查夫子的房间里草草复习了一下,并首次掏出江四喜看了会相对论的题目。我在我的草稿本上写了很多奇奇怪怪的话,我记得一句王小波我写了很多遍:“当我跨过沉沦的一切向永恒开战的时候,你是我的军旗。”</p><p>晚上十一点多,lx要查分了,化竞国初。我隔着屏幕也能感觉到他内心的复杂情感。查到分,擦肩而过,发了篇长文,看完直接泪目。收拾收拾心情没熬夜早点睡了。</p><p>第二天早上正常起床来到考点,跟扬中巨佬mtq一个考场。九点开考,第一题静力学直接懵,做了半小时一个字都写不出来,好吧第二题刚体,虽然重点准备了力学可还是不会写……心态较崩。第三题电磁炮,爽啊,我喜爱的小量近似,尽然一直做到底了;亥姆霍兹共振器,热学题,做个第一问就跑路,20分呢香死了;光学很和蔼,几何光学,做得略感不对劲,不管了继续;近代物理是相对论动量,和我昨晚看到的内容完全一致,非常开心地开写,此时还有半小时不到。11:50的时候开始向卡西欧里输入一个巨长的方程,56左右解出来一个,继续第二个,生死时速!打铃了我还在紧张摁着计算器,开算——当卷子收到距离我还剩几个,它解出来了,迅速把98%写上去,完结。考完出来晕头转向,在学校里迷路了,教学楼到处是锁着的,摸了快20分钟才摸出去与大部队会合。</p><p>回家路上,大天来说似乎国一稳了,已经踌躇满志地想准备实验,gzc坐我旁边和我一起吐槽着这份卷子,有种预感,他会考的挺高。在车上还玩了两局剧本杀玩到晕车…就这样,我们回家了。竞赛全剧终。</p><p>晚上我们高三一行一起吃了散伙饭,吃完去了都唛k歌,嚎了好久好久,纪念我们的竞赛生涯。记得那天最后的时候,昌国点了《光明》——这是我们高一第一次出去竞赛在去杭州的路上听的啊“当灰烬查封了凝霜的屋檐<br>当车菊草化作深秋的露水 我用固执的枯藤做成行囊 走向了那布满荆棘的他乡……也许迷途的惆怅 会扯碎我的脚步 可我相信未来会 给我一双梦想的翅膀 虽然失败的苦痛 已让我遍体鳞伤 可我坚信光明就在远方”</p><p>还有一首Beyond的《光辉岁月》,就像歌词里所说的啊——风雨中,抱紧自由。</p><hr><h2 id="34see-you-again">34.“see you again”</h2><p>22号正式回班上课了,不知不觉快三个月的翘课生活,我已经一不小心错过了三次高三的考试。回归正常生活的我一时有些不知所措,大家一轮复习已经下去好多了,我却连书的名字还没有写…索性就不写了吧,于是数学课我便一直划水,如果是hj自己弄的卷子学案我就做一做,不然的话上课就自己找点题目练练手或者歇歇,不过下课那个大一轮的绿皮橙皮还是做的,做的错了几条还要被找谈话。语文还在讲唐宋八大家文言文,我整本书基本没学,之前笔记补得很勤自己来上课反而倒懒掉了,于是自觉把语文课,甚至是英语课都当成了养老课。当时自己给自己找了个理由——刚回来,太累了,慢慢调整。</p><p>大概九月二十几号(不记得哪天了)学校让我去参加第一届新时代高邮好少年的颁奖,当时高二随便一报还真就选上去了,地点在汪曾祺学校,大概算半个母校吧。于是时隔两年多重返汪曾祺学校,先去的颁奖会场,当时就看到了九年级的化学老师张海波,以及其他一些认识的老师比如张明智等…颁奖仪式是和八礼四仪汇报演出一起的,当时和我一起领奖的大部分都是小孩子们,他们得奖的原因都是做过一些好人好事或者其他一些对社会有意义的事情,而我emm略羞愧。坐我旁边的是一个卸甲镇传承非物质文化遗产皮影戏的小姑娘,右边是一个职校参加过大型志愿活动的漂亮姐姐……完事以后邮中顾主任先回去了,我才不想回去呢,于是来到教学楼来看望看望自己以前的老师们。去了九年级工作处,会见了周主任和任主任,都很亲切,正好学生们跑操回来,我便在楼下截住了老郭,一下子他就咧开嘴笑了,和他当年听说我考了状元后笑得如此相似,还把我请到他们班坐了坐——估计是老郭不改他的性子在我毕业后把我的故事颠来倒去说来又说,学生见到真人都瞪大了眼睛…临走前去了裴老师班上——没有裴老师就没有我今天,裴老师的课堂依旧那么亲切轻松,我还给他们班小朋友们说了几句话,最后由于时间原因还是离开了。回到邮中已经下午大课间了,正好山哥在班上上课,我把参加活动用的大红旗往书包两侧一插大摇大摆地走进教室引发了一阵哄堂大笑。</p><p>回到之前,回班第二天物竞复赛成绩便揭晓了,成功拿下省一,不过分不好看只有96,虽然这对于突击两星期的我已经是不错的结果了。大天来与实验擦肩而过,而高二的gzc查分顺利杀进实验,按理说我们几个省一28号要去南大参加物理实验考核。于是28号再次翘了一天课,早上和查夫子一起去了南大等实验,分到的实验很简单,二极管的伏安特性曲线,不过笨手笨脚的我一开始还操作错了,10点多结束了任务,我们一行几个人还去混进了南大校园的百团大战。算算这已经是第多少次来到南大了啊,真的好喜欢这个校园,是不是10个月后我也要来到这里呢?临走前还跟上一届的秦神约的见了面留了个世纪合影hhh。</p><p>回来就是期待了一年的运动会啦,也是最后一次辽。我很铁头娃地同时报了400米和1500米。29号下午正式开始运动会,可怜的高三没有地方坐,帅林让我们在班上自习,不过怎么可能呢!我当然会溜出去玩了,于是借给金鱼跳远助威便到操场上了。下午大概是4点吧,我的400米到了,紧接着高二的400米。有意思的是高二的szv在一旁谈笑风生滑掉了比赛害的我看他差点也滑掉,在发令枪打出来之前惊险上道。这次400米跑的不错,一路加速冲过终点,小组第三(前面俩个谜之速度)。第二天早上是1500米,也是我最期待的一场。起跑后便听到了许许多多的加油声,还有px妈妈和孙老师…跑到高二区的时候赛道旁有学弟学妹给我加油,令我惊喜的是我当年跑1500米自己班没有多少喊加油的,这次经过高二9班听见了挺大的给我的加油声,直接心理一暖保持速度昂!最后一圈体力略不支,但金鱼在给我领跑也没有落下速度,最后成功5分多钟冲过终点线,长跑生涯完美落幕。跑完没一会儿,我们班4*100接力缺人了,我又临危受命…第一棒我跑的还可以,不过由于第二棒以前没跑过竟然不起速,站在原地等我的棒子毫无疑问棒子飞了…唉看着草鱼最后孤单的冲刺略有伤感。下午为看金鱼的跳高又翘了半天自习,金鱼稳定发挥拿了第二。于是运动会完美落幕。</p><p>经历了这么多,竞赛这一趟总是自嘲自己老了老了,但这些南征北战的经历,和运动会上对自我的突破,让我真切感受到——生命不息,青春不死。</p><p>See you again.</p><hr><h2 id="35有多少正在醒来">35.有多少正在醒来</h2><p>国庆节只放了1天,回来便开始了高三的第一次正式的月考,也是我退役归来后第一场考试,三个月没上课总会是有点虚的。语文写的“寻找自己”,还好这个话题还是有话说的,语文感觉还可以;数学垮了,到了高三卷子难度陡然增加(据说是长征出的卷子),英语正常,物化也崩了…本来以为这次要到各个老师办公室喝茶,结果却出乎意料地好,132+129+34+104,虽然数学直接垮了(满分160+40)但语文破天荒的考了第一,直接靠双语救到了年级第二,比第一dyt少了1分。当时考完还有点小高兴,哎嘿,也没有那么严重嘛。</p><p>第二次考是双周练,也没怎么准备,相反这段时间我还在打听我联赛排名的风声。双周练晚上考语文和数学附加,附加轻易秒掉。第二天早上数学,一开始我说,考个150分吧,一小时过去了,我想不好前面做的有点慢,算了算了135分得有吧(毕竟上次刚创过最低纪录)…还剩半个小时了,我想,这xxx什么x卷子,我反面四个大题除了第一问啥也做不出来,直接慌了,最后英勇就义。考完人都傻了。下午颁奖仪式我还在研究这份鬼卷子,似乎也没那么那么难。最后成绩出来数学神了,105分。。语文121分再次拿了第一也把我整傻了,不过这次没能救回来,总分年级第十,再次两位数了。</p><p>其实语文高了也是有一丝丝的原因的。当时我的两个同桌,一左一右,蒲苇和金鱼都在高二的郭斌老师手上磨作文,我一个啥也不会只会摘抄的就很难受,于是我便拜蒲苇为师也开始借鉴郭氏作文板块。那时候郭给他们训练的多是核心概念的阐释,我也是第一次听说,于是我便用蒲苇的题目开始练,一开始直接是挤牙膏似的啥也憋不出来,因为硬要把一个关键词定义成一整段话还不能用所谓“外围文字”。但一段时期过后发现逐渐有点习惯这样的写法了,虽然有的时候定义的自己都看不下去但要死要活也能撑起百十来字了。这个写法立即得到了应用,双周练的“推倒重建”和期中模拟的“分享”都拿到了高分并翻印,顿时有了一点点信心。</p><p>上面说,数学很惨,于是我下定决心好好把课内数学的感觉好好找一下。于是开刷手头的38套,一开始还是比班上同学慢几张的,不过——我上课时刷,作业写完了刷,有的时候下课不爽了也会找份填空题一试——这样子,基本保持两天三份试卷的进度,用了两个多星期,在期中考试之前就基本干掉了这一本试卷。也确实有效,感觉一些导数题和数列题不再看着干瞪眼了。</p><p>11月的时候来了一次期中模拟,我各科都稳定发挥,语文121,数学155+40,英语107,总分413,时隔快一年半多终于又拿了一次第一。数学比上次进步了整整50分…也首开数学高分记录。同期,我们五人先锋队也基本都杀到了年级前列,其实竞赛和高考也没有那么大的牵扯关系嘛。</p><p>虽说已经逐步步入备战高考的状态,但是10月份基本还是为悬而未决的联赛结果而隐隐揪心的。从刚考完以为国一有了,再到听说今年分高心里一紧,再到听说自己扬州大市的rank和扬中传来的消息说线140+,再到外面估计的150+,再到看到一张表上面写着江苏省高邮中学赛区一等奖人数1…这样的起起伏伏实在是很难受。10月27号的时候,数学学会公布了获奖名单,果然,国一的大梦终究是没有做成。当时发了篇说说,算是结束了,引了子昂竞赛祭文的一句歌词“在愿望的最后一个季节记得我曾深藏利刃。”</p><p>一场梦做了两年,也算是终于醒过来,面对高考了。</p><hr><h2 id="36重走长征路">36.重走长征路</h2><p>11月中旬,我们迎来了高三第一次大考——扬州市期中统测。据说很重要,我也挺认真准备的了,那时候数学38套已经差不多了,语文作文在我的两个小老师的训练下也渐有起色,英语也稳步训练虽然赶不上贾胖一周6份38套的疯狂速度。这次考试可是关乎到北大的寒假营的啊,认真对待认真对待。</p><p>第一场语文前面做的很慢,作文一看傻眼了,“配合”。这个词怎么个界定法…然后我脑海中完全没有有关配合的支撑文字,直接无了。还有30分钟不到的时候才刚开始动笔,一顿胡写,大段抄用自己以前有的没的写过的话,草草结尾。失败极了,气得我中午午觉都没睡着。下午数学稳住心态,很顺利,一个半小时便做完了所有的题目气定神闲地发呆等待附加,附加也很快做完了,一时间竟有了满分的错感,又有何用呢?剩下几门倒没什么印象了,也就一般般叭。期中考完放两天月假,我的心情就是失落失落再失落,自己排解郁闷骑自行车绕运河堤骑了一大圈。</p><p>成绩一出,不出我所料,最低纪录年级16名。语文110班上倒数十名,虽然数学194年级第一于事无补(过程分扣的也很迷)。金成班级第一年级第二比我高了九分,年级第一在物生班,邮中考得很惨这次。事后lhl开了一次班会,分析考试情况。我永远忘不了他在班会上大声说的,有的同学要不是数学考的好一点,直接是<strong>一无是处,一塌糊涂,一败涂地</strong>滴!这样的话,我实在是忘不了。</p><p>我开始频繁地和任课老师沟通,有主动的如语文,我继续加大作文的训练,开始搜刮江苏以前的模拟题练写提纲并每次和晏老师沟通交流;有被动的如数学,作业过程不认真写被猴哥杀到班上揪我到隔壁一顿谈话……我发现,<strong>与老师的交流虽然不能让你有什么实质上的提升,但对稳定心态确实有微妙的好处。</strong></p><p>因为帅林的三个一,我便不得不开始加紧脚步。看见金鱼买的一本压轴题书题量很丰富的样子,我也入手了一本,直接开刷,每堂数学课都拿出来一题题地过,并标注值得二刷的题目(毕竟不是每一题都能做得出来)。在我的极限速度下,一个多月,我刷完了压轴题书二十几个专题所有的例题练习题,并不定期地进行二刷,这样子我做压轴题的手感直接就上来了。语文基本隔天把就会自己写提纲,每周练全篇,以及每一次考试的作文都会互杀——当时我们这一片有一个很好的习惯,每次作文下来互相点评互相修改,很多都是不留情地”杀“那种,这样很有效果。英语自然是加快速度写完了38套开始养老(bushi)……为什么会有这样的时间呢,一是因为我上课不听啊hh,二是因为我作业都是看情况做的呐,我一直认为,<strong>自己对自己的训练是更有效果的</strong>。</p><p>不过考试起色倒是很慢。11-12月的两次双周练我记得一次考了第十一次考了第八来着,都是数学领先双语一般般,完全丢失了刚搞竞赛回来双语的优势。12月后半期有个高邮市统考似乎学校还挺重视的——我反正都挺重视的。语文作文写“变脸”,自以为把立意搞上去了但没组织好,,数学前面很轻松附加最后一题突然卡住竟然没做完。。英语什么的也还好。成绩出来,语文还剩一百零几了呜呜呜,数学整个高中第一次拿了一次一卷满分160/160,不过附加无脑扣了6分再一次破灭了我200的梦。年排第四和金鱼并列,四百零几分,第一是借读的物生普通班的一个女生,420+,语文怒甩我30分昂——</p><p>不过渐渐感觉到考试越来越顺畅了,刷题是真的有效果的昂。12月份开始入手金考卷,小黄卷小绿卷语文数学。开刷语基,每次五十几分六十小几实在是拉垮。于是增加了新的任务,每两天一份语文卷子,每做一份在卷首写上日期和分数,很有节奏感。数学快了的话一天就可以做两份。</p><p>奇妙的是,这段就很像我初中时候的奋斗史昂。初二的时候从年级一百多名练到大几名十几名,然后继续稳步刷题最后5,3,3,1,1…就像一个浓缩版的奋斗史呢。</p><p>至少,不会像所谓的一无是处一塌糊涂一败涂地。</p><hr><h2 id="37辞旧迎新2020">37.辞旧迎新,2020</h2><p>当然,作为一个不大坐的住的人,我还是能在高三的生活找到许许多多的盼头和亮色的。比如,偶然的定点蹲门口看去上机的高二竞赛班,比如,体育课照常六班内部开小球赛,比如,每天都会从音乐教室经过偶有兴致就来弄两手回味回味。</p><p>活动课的时候我是提前吃完饭来音乐教室好好弹琴的,有一天正巧碰上来排节目的jlh和cst,很高兴地弹奏了一曲摇滚卡农;没几天,听见三楼音乐教室的青花瓷忍不住上去看了下果然是高二九班的神奇节目,我也待那边玩了一会儿,玩到晚自习上才回去——反正老师也不问我嘛我就随便玩了)音乐教室总能带来奇奇妙妙的小惊喜的。</p><p>于是便来到了期待已久的元旦晚会,这次终于,我是以观众的身份坐在台下看节目了,心里非常激动。那天提前放了吃完晚饭我就去了彩排现场凑热闹,听说lhl在班上看晚读了我便决定不回班了hh。晚会开始,现场很挤,难得身边都是熟悉的同学——大头蒲苇省委等等。第三年的元旦晚会感觉格外精彩,无论是最美邮中人的颁奖,还是引发一阵又一阵尖叫的节目,都让我心率飙升融化在欢脱的气氛中。作为一个高三狗,作为一个还是喜欢热闹的高三小朋友,心中特别特别感动,感动得晚上回去作业都不写了回味着晚会哈哈哈。</p><p>2019结束了。31号晚上写了会小黄卷九点多就停笔了开始扒手机,漫无目的,想吧有没有人陪我跨年呢又凄凄惨惨戚戚,索性下定决心不跨年了。于是冷酷提前码好简洁的19年回顾,提前发祝福,但还是在跳到0点的那一刹那看见了那让我心动了一年的新年祝福。</p><p>带到2020的希冀,也不是什么高考夺魁什么金榜题名,我只是想平平稳稳平平安安地走过高考,走到未来。谁会想到,这会是如此不凡而惊心动魄的2020呢!</p><hr><h2 id="38fake">38.FAKE</h2><p>元旦假期过来当头就是一份精致的新年礼物——期末模拟考。很不幸,可怜放假一天直接把我身体放散的了,随机得了重感冒,还有轻微的发烧。考试前两天晚自习都没上,回家休息——事实上,回家了仍强撑身体做语基限时训练,真滴感人。</p><p>带病考试直接稀里糊涂,考语文是在晚自习,下午上课我全程倒在座位上,课间练啥的也没做,就难受。考试了感觉整个人飘飘欲仙,写到阅读实在不行了倒了会想想作文,“证书”?“证明”?脑中浮现一句从天边飘来的话“声名水上书”,于是很荣幸此作标题成为了晏老师口中我历史最佳。第二天临近考试爬来考数学,虽然我瞪大眼睛发现试卷不难,但还是差一点点做完,前面还错了一条简单题;英语直接人没了,阅读看都不看文章直接写题——最后成绩出来傻眼了,124+189+105=418排第一。恍恍惚惚……成绩一出来我感冒就好了。</p><p>从元旦起,我就退网了,一是想用时间酝酿小惊喜,一是期末大考前稳住心态。小高考放假期间我都没有上线。于是16号的时候迎来了期末考试,也就是所谓的“一模”。考前那天晚上我在班上作了动员讲话,自己把自己感动到了。考语文,前面一切顺利,但,不出我所料,最恶心的不过是扬州市作文——“解释”。该如何解释‘解释’?我人傻了,自暴自弃,随手写了个前夜看的扯皮书上“奥卡姆剃刀理论”,扯了整篇,结尾把自己都整笑了。语文结束跟期中一样的心情,没了,没了。下午考数学,前面做起来有点难度,解析几何算了不少时间,好了,导数题思路使烦了,最后算崩,最后一题数列题漏看了条件挣扎了好一会不会做,空着交了。考完身旁叽叽喳喳的碎语——“这次数学这么简单?最后一题不会真就是…”我直接裂开。</p><p>晚上回家整个人心态崩了,也没复习,躺在床上发了好久的呆,欲哭无泪。晚上渐渐想开了,于是,拿起手机,正值爱情公寓5开播,一下兴致来了飙了四五集,那叫一个爽。复习个der呢语文数学考成这样。也不知道剩下来几门是怎么考完的。考完英语那天晚上回来刷了份语文,重构了下作文,发了条说说意思直接考萎掉了,还有学弟学妹来安慰我)第二天去三垛玩,在那里做了三套大市期末数学卷(其实很快的)。</p><p>晚上上完风平浪静的晚自习,回去悄咪咪扒手机,炸了——扬州中学成绩出了,茅巨亮出了数学198的高分和总分428的强势,我直接心里一凉,随即听金成说高邮考的不行,最高分只有410,我一想又无了;再之后就是我和zza卖惨,zza妈去问了恒林成绩,结果410真就是我,122+177+111。紧随其后的是昌国,子昂,金成他们…在看完茅巨的FAKE,我成功地将FAKE文化带来了邮中,第二天去学校自然被“群殴”了。</p><p><strong>“我FAKE了。”</strong></p><p><strong>“我再也不信你了,你个划子。”</strong></p><p><strong>“你还是相信我能考第一吧,我以后多考几次。”</strong></p><p>当时谁也不会想到,这句话之后,高三的光荣榜上年级第一就再也没有出现过第二个人的名字。</p><hr><h2 id="39穹顶之下">39.穹顶之下</h2><p>期末刺激地拿了个第一(扬州市十几名)考完还是挺放松的,讲卷子期间上一届的学长学姐们来到了我们班宣讲,全是我以前的老战友啊哈哈哈,气氛十分融洽,还白嫖了许多小礼物,南大的那支笔我至今还带在身边。</p><p>然后就放假了,破天荒的,到了高三我们放的最早的一次。回家人立马颓了,因为有手机了,有电视了,手上的卷子突然他就不香了。自己隔三岔五地选卷子练习,并开始整理语文积累本。感谢文科班巨佬鲈鱼将她旧积累本丢给我,我学到了很多东西。</p><p>新冠它悄无声息地来了。</p><p>大年二十四之后,江苏就开始出现了零星的病例,全省进入戒备状态,我们这边小城也开始采取了一些预防措施,到了过年的时候,疫情已经很严重了。我坐在家里,看着全国扩散的速度和每天新增确诊人数的上升,感觉惊心动魄却又无可奈何,只能默默地为穹顶之下的生命们祈祷,为自己、大家心中所想的顺遂的一年祈愿。大年三十,我在空荡荡的街道上散步,突然来了一条来自北京大学的消息———“由于疫情,我校取消举办新春学堂。”最后一次机会,以这样一个原因,逐渐散去了,我心里一阵恍惚,但已经没有那么大的波澜了。</p><p>三十晚上,第一次主动提出不看春晚,在房间里写题目。然后我中途借对答案之名悄咪咪把手机带进了书房。除夕夜总是很热闹的,疫情的冰冷局势不能阻挡线上大家对于辞旧迎新的热情。这也是第一次,我除夕夜跨年,整零点的时候,我收到了两条祝福,一条是某位可爱的高二小朋友,一条来自于我老同桌戴亮,很感动。除夕夜过去真的给我一种焕然一新的感觉,我喜欢这种隆重气氛下的微妙幸福。</p><p>由于疫情,大家都少串门拜年走动,所以年初一年初二过的非常简单。年初一下午我就在家启动卷子了,初二上三垛,也难得没有在那留宿,晚上回家还做了份金考卷。初三就正式开始刷题节奏,语数外全线推进了。</p><p>其实当时也没有明确的复习目标,就当着短暂的假期别把手生了就好,所以初期做卷子、复习节奏还是比较随意而散漫的。同期,2020伊始真的发生了太多。疫情的疯狂扩散令人害怕,似乎架势已经超过了大人们口中的2003非典,全国上下万众一心,用中国速度与病魔赛跑,实在令人感叹。年初三凌晨,篮球巨星科比突然离开了我们,泪目……</p><p>太多太多的事情不断拨弄着情感神经,我模模糊糊意识到,迷迷糊糊的颓靡铺垫着这个世界许多的不幸,每个个体都应以不同程度的逆行,来为这个诡谲的时代增添生命的灵动,激浊扬清。</p><hr><h2 id="40超长寒假1">40.超长寒假(1)</h2><p>年初四大概吧,学校那边来通知了,说原本定于年初七开学的日程调改到最早2月17号开学。(1月24号年初一)全体同学从年初七开始开启网课模式。人傻了,这一下子就多了这么多天假期,本来指望放假就稍微休息会儿的,现在看来要颓学并进辽。那时手上大概还有双语各一本金考卷,以及疏桐学姐留的19年一整套基地密卷,数学寒假作业早已写完(最喜欢一两天秒完所有作业),于是我上网也搜刮到了去年的整套基地密卷——开刷呗!应该够我十几天刷的了。</p><p>网课一开始是高邮统一用的学习通,每天会有一定的网课任务和作业,老师可以实时查看学习情况。网课的第一天我还是装模作样在电脑前准时看的,不过,一天下来,我实在实在适应不了这个网课的慢节奏和低难度,于是从第二天起,便只看语文网课(老杨讲的还是不错的),其他的要么刷进度要么就放弃治疗了。。于是网课节省下来的时间我可以去做自己的题,我始终认为这才是提升能力的关键。网课是老师们挑出一些好讲的内容你方便我方便大家都方便,无形之间促成了一种低质的灌输,这些内容大多立足于大家能力的交集,对于各人的提升意义不大,我认为不可。</p><p>好在我的任课老师们认识到了这个问题,开始了6班特色课程直播体系,孙老师的cctalk,侯老师的钉钉,以及帅林的跟风…虽然是直播了,可以和老师互动了<s>被动</s>,不过我还是不老实,一心一意想着如何金蝉脱壳——于是有了英语课洗澡被喊回答问题,数学课听课3分钟被老师截图挂等等令人哭笑不得的场面。</p><p>一切开始网课化,包括我们特色英语听写还有各科的作业。英语听写这可是大事啊,自然不能懈怠——于是我们私下里成立了一个地下组织,8个人,建立了一个英语听写群,每当听写时,我们就开始实时“互相学习查漏补缺”,每次都很惊险刺激。作业老师大多采用学习通抽签的模式,抽到的私发查作业,以及还有学习通的deadline模式,真就跟如今的大学生活神似,每天晚上蹲答案赶ddl,为生计而苦苦奔波,那时小猿搜题用得可勤快啦。虽然我和px还是总因为不交作业被老师公开处刑。</p><p>在什么样的模式下我都能逐渐油条化,后期每天早上定时坐在电脑前打开网课——打开静音——缩小至后台——打开百度——开始surfing。那时候看了好多集奇葩说,看得我早上困意全无,网课可真给我带来了精神食粮。同时呢,自然也是挂着qq的,那时候qq群总异常活跃,大家都一遍听课一边线上扯皮,点名回答问题了幸灾乐祸一波或者乐于助人一波,很有韵律的体验。</p><p>当然,我的主战场可不是这里,不过这确实是寒假时期难得的快乐源泉了。</p><hr><h2 id="41超长寒假2">41.超长寒假(2)</h2><p>过年那会儿对自己寒假时期的学习是完全没有规划的,以为休息几天就去上学了。之后随着开学日期的一步步推迟,我逐渐开始有了这样的想法,既然寒假这么长,何不狠补短板让自己变得更强呢?于是我逐渐开始制定每天的一条条个性化学习计划,最满的时候一天做了语文数学各一套英语两套再加数学专题练习和语文作文训练,多出来的时间还要去划水网课——可谓非常充实了。</p><p>短板是什么?毫无疑问,语文,而语文的不确定性主要存在于那江苏风味的作文。当时看到金鱼在苦练语文和作文,更是坚定了我猛攻语文的决心。于是我开始我的作文训练,我扒出我的作文书以及历年的江苏模拟题,开始练提纲,写整篇,修改,打磨。每天都有煎熬的作文训练,有的时候怎么想也无法落笔,不过还是坚持下来了,大概每个星期写四五篇成文,并拍照发给晏老师评,再次打磨;同时我也会和金鱼互杀作文,互相学习。写多了,自己逐渐能从泛式议论转向小切口作文了,也有意无意自己开始准备话题打磨小切口,我觉得,这么长时间来,我欠缺的一种感觉,终于到来了。整个二月下来,我写满了超过一本半的作文本,满满的成就感。</p><p>相对而言其他几科花的时间稍微少一点。英语每日至少一份卷子,在孙开始训练之前我就一鼓作气刷完了2019年的全部基地密卷,做得惨不忍睹。后来孙开始三天两卷的训练,我仍是一天一卷,并提前了好多进度,以至于到最后已经没啥卷子做了,被孙建议去练字练作文。数学也是,很快啊,手头的卷子就被我刷完了,我陷入了题荒,我的压轴题大书已经三刷都不止了,于是我只得效率非常低地在网上找些奇奇怪怪的资源做题,跟老师要题吧我又觉得太简单了,事实上侯老师直播的二轮复习我几乎完全跳过了,纯靠自己刷题总结。对啊,可以总结啊,于是后半期我开始操笔写我的《数学宝典》——专门记录我解题时的心路历程和解题后的思考感悟,难度很大内容很精彩,我写得很认真,大概是已经料想到要传给下一届学弟学妹们看的样子了。</p><p>3月份的时候,我吃不消了,这种高强度的学习模式让我非常疲惫(况且还要切换自主学习模式和网课模式)。我陷入了迷茫期。那时我找疏桐学姐聊了会儿,也和晏老师孙老师有一定的交流,都说没有必要过于压榨自己,反而效果不好,有的时候停下来多思考思考会更好一些。于是渐渐调整了学习模式,是呀,何苦这么摧残自己呢?听从自己的心,想刷就刷,想写作了再写,持续性的勉强总不比间断性的轻松灵动。</p><p>不过虽说学习势头很猛,线上考试是真的让人迷惑。3月初有了个扬州市线上统考,一听线上,那卷子必然水啊。。。不过令我没想到的是,在考试之前,就有很多人拿到了考试试卷并全网流传——我很不屑于这种行为,这样子考试还有什么必要呢?第一次整体感觉还不错,语文终于慢慢开始有节奏了作文也写得很顺,数学我大意了啊,错一条填空题又错了一个什么的185,英语不记得了…反正,最后分数410左右,有趣的是,已经年级100多名了,我只想大喊一声邮中nb啊!第二次已经是后期了,卷子比第一次稍稍难点,也是稳健发挥,考了420+,这次没上次那么离谱,年级第4。不过这类成绩我也就看着笑笑罢了。但是我明显感到,就算是线上考试这样容易让我分神的考试,却也能从容不迫地顺畅做完了,这一阶段的训练还是有效果的。</p><p>线上多了,自然就开始怀念大家线下一起的时光了。</p><hr><h2 id="42超长寒假3">42.超长寒假(3)</h2><p>步入初春的三月,似乎一切都缓和了许多的样子。疫情似乎在好转,学习的压力感觉也在慢慢地变小(老师插查作业也没有以前那么频繁了)。春天到了,我的生活模式逐渐模式化,早晨起来早读(被迫),做读书笔记,写作文,上英语直播课关闭声音打开奇葩说开始兴致勃勃地观看(我发现奇葩说真的是挺不错的一个节目,对写议论文有很大帮助);下午就开始刷数学和英语,晚上开始!某八个人的群开始疯狂开车车搞黄色,到了半夜大家都睡了开始聊天或者看书到凌晨…真的很充实而美好啊。</p><p>说到聊天和看书,这也是这个寒假最与众不同的地方。透过手机屏幕的光,在夜深人静的夜晚,感受着那丝丝若有若无的情意和此起彼伏的小小期待和欢喜,是少年时代特有的生机,是疫情之下难得的温馨。也会有断断续续的小纠结和患得患失的苦恼,毕竟我也是要冲刺高考的人,我就拿起书——一开始看的朱良志的《生命清供》,国画素材很高大上,兴致勃勃的整理了好会;之后就是王开岭的《精神明亮的人》,不喜欢王开岭的文风和思想,不过汲取精华用来高考作文是真的香;不安的夜里,打开帕乌斯托夫斯基的《金蔷薇》,实在是能找到来自远方的些许慰藉……这一切的一切,为我的冬天注入了温热的血液。</p><p>到了最后两个星期的时候,确定三月底终于开学了,喜极而泣。最后帅林给我们分了学习小组,开始小规模的线下聚集性学习研讨。我,蒲苇,子昂,金鱼和昌国五个人集中在子昂家里进行小组学习。很有意思——就是大家坐下来写作业<s>偷偷聊天</s>然后任课老师来看望我们一番。语文当时我们还做了一个一卷小测试,我踌躇满志,毕竟练了一个寒假了,结果一考下来考了四十几分,全场最低,直接把我整蒙了,不过没关系,一次而已一次而已;数学自然就是给了侯老师单独嘲讽我过程的机会(bushi;英语师太来给我们讲作文,其实也聊了很多其他的,气氛很融洽……总之,憋了一个寒假大家聚在一起真的是,很激动很激动。</p><p>3月29号开学了,开学前还有点小忧伤——自由自在的寒假生活结束了,不过我已经相信自己有足够的底子去迎接这一学期的试炼。29号下午大家戴口罩齐聚一堂,啊,熟悉的日子回来了。大调位置,我的同桌,换成了张子昂,一直到高考——寒假作业检查蒙混过关后,我的快乐下学期终于开始了。</p><p>一来我们就面对着七市联考二模,我们的课程表完全变成了训练模式,大练小练安排的满满的。30号中午,我午觉被我爸叫醒,我看我爸露出诡异的微笑发觉不对劲,他把手机放到我眼前,几个大字“<strong>高考延期</strong>”重重锤了我几下。我直接从床上跳起开始骂,其实我是非常抗拒高考延期的,当时直接是,心态崩了呀。路上骑车遇见帅林,他倒云淡风轻,豪迈地跟我来了句“既是挑战又是机遇!”去你的,延期了,七市统考还考个寂寞,整个人都不好了。</p><p>于是就这样步入了四月,距离高考还有70+30天。</p><hr><h2 id="43雄关漫道">43.雄关漫道</h2><p>开学没几天,便迎来一次七市大联考,正好试刃。考试前,我又重新过了一过我的已经整理了很多的积累本(主要是鲈鱼的素材真的好),又整理了一波数学宝典,没有做太多的题。考前晚自习,我上讲台和侯老师分享了一个我觉得有意思的问题,他点头默许,于是这条题目出现在了第二天数学考试的最后一题上。</p><p>开考语文,亮白亮白的答题纸写起来就很舒适,给了我较愉快的心情。很顺溜地答完一卷开始作文,“记忆”,嗯,积累本上有素材,《二手时间》啊,再合适不过了,于是操笔一气呵成我的半小切口文章,奈斯,第一次语文如此顺畅地完成(虽然考后一对答案选择题错了3题)。数学拿到手一看最后一题真的好熟悉啊,顿时没有了压力,一个多小时快速干完等二卷,结果二卷最后一题估计是方法选择出了问题,竟然没有做完。出考场发现整个题目看错了,透心凉。第二天物理化学都有难度,不过勉强做完;英语很简单,一路顺风顺水飙到尾,写完作文都不累。考的应该还不算拉垮嗯嗯。</p><p>第二天成绩就出了,晚自习帅林看班,突然第一个把我喊过去谈话,第一句“虽然你这个总分还不错奥…”我知道有戏。果不其然,123+158+32+115=428,和dyt并列,邮中第一,扬州市rank7(时隔多年终于又进了扬州前十了我哭)。我这个附加全给扣了,极为拉垮,英语超神,扣作文五分单科扬州市第一。这次给480卷体上了一个新的高分记录,也是我人生有史以来第一次蝉联三次第一(以前都是两次必断。。。)</p><p>其实那段时间我的刷题节奏完全没有了寒假的强度,更多做的是保持节奏和手感的工作。数学就靠锤子数学定时投喂卷子,他来一份我消化一份不过还是吃不饱…语文依旧练语基啊,作文我觉得定时打磨一篇小切口就足够了,开始记背自己的小文库。英语很没有节奏地跟着孙老师做二轮资料,说实话宁愿一天一份卷子,英语的专题练习我感觉对我没有什么用。和子昂和金鱼和蒲苇坐在一块,经常交流,子昂去老杨那里看作文了,我也讨教讨教,然后锤子数学我也给他投喂,齐头并进是一件很带感的事情。</p><p>4月底来了一次邮中模拟,好家伙难度控制直接没有数。语文作文是我寒假作文训练的一条原题,可我没有占到任何便宜,只拿了52分好像;数学题量大,不过我当然是做完了,最后一题数列我觉得老师出题力度不够<br>,我在写完解答后,在空白区域把最后一问题目进行了推广并进一步证明——然后最后一问八分全扣。看到智学网数学分数那一刻我只想骂人。最后成绩402,唯一一个上四百的……(于是我猜想邮中是这个目的:“无论卷子怎么样难,分数要稳住啊兄dei”)好了这两次又fake了……</p><p>突然就想到了毛主席的一句诗,也是我留言板上一句:“雄关漫道真如铁,而今迈步从头越。”</p><hr><h2 id="44梦幻九连">44.梦幻九连</h2><p>5月初,发生了一件很不幸的事,我们亲爱的班主任帅林出了车祸在家疗养,竞赛班临阵换帅,孙接管班主任,高二竞赛班的居居来代物理。居居这个布作业检查作业就让我这样一个一直不做物理作业的很不适。</p><p>于是时间推进到了三模,也是学校口中的二模——一次扬州市统考,我猜想难度不会低。考试之前还是上次那样的复习思路。语文马马虎虎正常写,到作文一看,什么 随时代改变而改变 ,不愧是你,扬州作文。想起了蒲苇当时写过的63分作文变脸,以及见过的一个逼格开头“梁启超在盯着我”,便展开了一篇胡写,成功完篇。数学前面一切正常,做到最后一题心里咯噔一下,这是当年葛军命题的一条魔鬼题的魔鬼加强版,我做到考试结束也没做出来…出来对答案填空错了一题,暴击。考完前两门以为完了,回家自暴自弃又开始颓废,第二天抱着无所谓的态度考完了剩下的三门。</p><p>依旧是晚上出成绩,在此之前我已经完成了和zza卖惨的工作,师太将成绩单往我们之间一丢,他们蜂拥而上;子昂按捺不住了上去看,回来就狠狠给了我一拳,一不小心又fake了。128+190+100=418,比第二名高出了似乎要有10分,且直接快进到扬州大市第二……后几天的班会,孙让我,(终于想起我是学习委员了)举行一个研讨暨经验分享,于是我一边主持,一边毫无保留地和大家分享了我的学习经历……(有被自己感动到)然后……然后继续进行下一阶段的学习计划呗。这一阶段由于各地都来了个2.5模,于是又有一大套卷子刷了,语文的作文训练走起,数学也开始品尝,最后似乎南通自己给自己考的卷子还不错,以及泰州卷,其他似乎都挺水…进一步结合刷题写作《宝典》,这个倒越像是给别人看的而不是给自己看的了。</p><p>5月底的时候面对两场考试,一次是邮中内部二模,一次是七市统考全真模拟四模,我退网前和她半开玩笑的说,认真考一次不认真考一次。结果邮中那次难度飙升让我不得不认真,那次作文模仿17年的高考作文车,写的伞,我非常自信地落笔小切口《伞上风雨伞下人间》斩获一波高分,数学难破天际,最后一题出的尤其之精妙(我没做出来)然后最后一门数学184直接把我送到第一,虽然总分只有398。考完就面对全真模考了,我其实非常放松,就当是放一个久违的三天假穿插着考试而已。第一场语文直接考到心态爆炸,作文写完了,但出考场发现作文偏题了…数学一条诡异解几让我留下遗憾——最后一天考完我出去吃了顿晚饭,回校的路上看见孙,当时心情确实不好于是和她卖惨——第二天晚上成绩出来又是一波fake,那次我是真没想到我的偏题作文打到了58——118+195+103=416分,进了七大市前50名。</p><p>最后一个月过得非常平静,我把学习的重心转移到对高考题的研究分析中,也写在了宝典上,在基本保持竞技状态的练习之上,逐渐刷题量少了,回顾记忆和构架框架的工作多了起来,像当年第二年高联复习那样稳步前进。6月10几号邮中来了次小周考,不过我最讨厌不分考场考试和各班改各的试卷,我也没太当回事,数学卷子简单得我想撕试卷——最后419分班级第二年级第三,那次金鱼比我高一点点。后来6月19号左右,扬州市最后一卷考试,我稳定发挥,再创新高430;邮中五模再来一次数学第二次一卷满分二卷滑在抛物线上197,总分再微微破一下记录431分。至此,梦幻九连。最后一次7月热身训练没有排名,但我数学错了一条填空题,扣了过程分,语文写了最满意的一篇考场作文。</p><p>下面,就是高考了,一路开挂般的如梦如幻的FAKE九连,实在是痛快酣畅。</p><hr><h2 id="45共乘风归去">45.共乘风归去</h2><p>高三时期,我们班流传着本神奇的来去无踪的作文书——靖江,很多同学都多多少少借鉴着上面的作文(zza和我自然是做足了这方面工作的)我极其喜欢其中一个小作者wrd的一句话——“共乘风归去”,我说,高考作文我一定会用这个结尾。</p><p>高三下学期的课堂变得有趣了起来(在我这种平时不怎么听讲却喜欢凑热闹的人看来)语文课,由于考试和作文训练多了嘛,课堂就不时变成了大家杀作文的现场,最有意思的是昌国和晏老师的交火,理科男的倔强和风花雪月擦出的电光火石,确实给语文课带来几分亮色。数学课亦然,题目多了,侯老师就经常喊人上来讲题目,于是,“最强”“次强”“函数王”“求导王”一系列行业先锋神仙打架,精彩极了。虽然猴哥不怎么喊我hhh,不过偶尔我会上台给他找找漂亮的支撑点。也是这样的课堂,让我不自觉放下手中的笔,觉得值得融入进去感受难得的欢快与热烈。</p><p>哦对,还有体育课。本来体育课是我们班的足球内战,下学期由于疫情没了,于是体育课狼人杀风靡一时。大家不等整队就直接排坐坐开局,有的时候一直打到中午11点40了还在火热进行。(就记得我一波神奇女巫hhh)狼人杀真的是席卷了我们班,全真模拟排考场偷偷开局,活动课各自拿一本书装样子到空教室骗过李校长刺激杀,甚至到了7月了还不忘在操场上来一局……</p><p>5月中旬的时候,举行了成人仪式暨50日誓师大会,大家穿上一开始看起来怪土气的红马甲,戴着口罩,齐聚一堂。一切都还是熟悉的流程,不过这次却很有动感。活动结束大家在班上拍了一张特殊的合影,都带着口罩,藏着青春的微笑。最后一个月,每天晚读课前会一组一组轮流上台喊口号——“我会细心我会专注我会坚持我会稳定”,好多次上台喊都会出不同的有趣的划子。6月有一次数学高考讲座,本来是3次我听说最后一次高二她们班去我才去玩了一玩,坐在高二小朋友们中间感觉格外和谐…端午节的时候,学校请高三学生吃早饭啊哈哈哈,包子粽子,糕和牛奶,虽然我觉得粽子不好吃,不过集体吃早饭真的有意思呢。6月底参加了最后一次升旗仪式,这次高三和高一变换了位置,以为会很盛大不过zza和高二的樊响领誓的整体效果不大行啊哈哈,高三们完美落幕。</p><p>7月初的时候,孙老师开始在晚读前在班上播放《海绵宝宝》动画片,我从来没发现这个这么好玩昂!大家都早早地默契地聚在班上观看,不时一起笑着聊着……4号晚上,孙老师带了几箱旺仔牛奶到班上来分发,大家人手一瓶,然后分散开来摆出了各种样子合影,对,就在高考的前几晚,大家都挂着轻松的笑容,这才是应该有的样子啊!4号滑滑过生日,最后一次大家出去散步,我们把滑滑在楼下的路灯上轻轻阿了一下hh。晚自习其实大家都在收拾东西整理考场了,我坐在位置上,在数学宝典上写着最后一个部分,给7月7号下午的自己的一封信,等待我高考那天午觉醒来找到最佳的状态。</p><p>5号就是最后一天了,各科的最后一课。语文老师简单说了几句,就在教室里转啊转转啊转,看看我们,最后大家一起合了影,热烈的掌声。数学猴哥一个酷炫的ppt和无数课堂的整理,轻松快乐地结课…物理,化学,都是自主复习了,老师简单的几句考前寄语,几年不听课的我唯恐漏了一个字;最后是英语,其实也没说啥了,开始整理考场了。今年没有去年那样口号喊得震天响,但我们有着微妙的默契和对彼此真诚的祝愿,足矣。不多写了,要落泪了,真想念高三6班阿。</p><p>我们一起,放飞异彩纷呈的思想,让它们碰撞较量,撞落繁星一地,共乘风归去。</p><hr><h2 id="46小猪上秤">46.”小猪上秤“</h2><p>高邮中学又一批崽崽喂养了三年了,7月,是时候上秤来称称几斤膘几两肥了。作为一只养得还不错的,我还是比较气定神闲的。</p><p>言归正传,7月5号高三放了,也和该见的人见了面,该说拜拜的说了拜拜,就各回各家准备考试了。5号当天晚上主要还是复习语文,自己对照着步步高一轮和高考真题,拿一张大白纸写下自己对于历年江苏卷的一些套路的发现和感悟,写得挺多看样子还挺有道理。。又把大积累本拿出来背了好一会儿,2020年以来,这一本本子已经从空白变成了满满的干货,还挺有成就感的,有好多信手拈来的小切口等等。</p><p>6号没睡懒觉,7点多就起了,起来准备进行最后一份语文一卷的模拟,选的是一个四校联考卷子。9点准时开模,勉勉强强做到十点半对照答案——做崩了呀…不过不要紧,算是给明天攒人品!中午睡了个大午觉下午起来回顾南通小题…颠来倒去也没什么值得做的题就渐渐失去耐心了。后来就去看考场了,大家都拿着准考证,谈笑风生,这一幕挺壮观的。我是在高一教学楼一楼,就是在我第一次扬州市期末统考的那个考场,我还记得那次子昂拿了第一我1分惜败啊哈哈。考场外,还有人跟我搭话,要签名啥的,我感觉有点不适也没太理睬,到点试了试座位就回家了。回家瞅了瞅江苏数学高考真题,我猜应该也就跟13年差不多难度叭……晚上和爸妈出去散步了,说实话还是有一点点紧张,不过想想有什么大不了的呢,考试都考到今天了。。回来仔细品读我写的江苏卷感悟以及我的大积累本,11点就上床睡觉了,可惜过了好一会才睡着。</p><p>7号一大早也没复习,直接来到考场,老师们都穿着旗袍在政教处啊!和老师们轻松交谈了几句就上考场了,志愿者是我熟悉的下届竞赛班同学wy,祝我高考加油。坐定,一切按部就班——不过这个答题卡是真的硬,卷子还是黄卷子rua。不过没关系,看到作文整个人傻了,第一反应我要和江苏卷同归于尽了。迅速终止自我恐慌开始进入竞技状态,做到文言文懵了,读不懂啊。。然后我休息了一分钟,定睛一看,呔,大概看懂了些,于是胡乱往上写了,继续诗歌,现代文…每一篇都和平时的风格不同,所以做得磕磕绊绊,好在还剩1h的时候来到了作文。“同声相应,同气相求。”说实话我第一反应思考方向就是所谓“信息茧房”,先破后立——但是我想啊,整个段落都是积极的啊是不是这样写有偏题的风险,思来想去终究没敢冒险,虽然这样写如果不偏题的话有一定信心拿高分。于是从正面艰难立论,啥素材也没用上,光靠我这几个月来积累的论证感觉和论证技巧勉强完篇。11:28写完的,最后一句果然是“共乘风归去”。</p><p>中午午觉没睡着,闭目养神起床看自己4号写的寄语,便又上战场了,数学这波是主打戏。一发卷,我一眼便看出1-18送分,19-20送命——好了,2020江苏卷估计要创造历史了。果不其然,做到19还有50分钟左右,做完第一问就直接做不出来了,心态略崩,考场上从未有过我做不出来的导数题。半小时的时候跳20题,初看很难,不过我稍微处理了一下,经过一些神奇的计算,便做出了这题。不过,不知道当时抽风了还是什么,0的次幂,我当成是无意义了,所以舍去了一个答案(不过考场上的我并不知情出了点划子),19题到收卷也没做出来。附加一看是递推压轴,心想这一波要无,不过我很冷静,还剩最后5分钟最后一问还没动笔依旧很冷静,在28的时候写出式子开始疯狂解数列,回代求期望…距离考试结束还有10秒的时候我完结了这题。出考场比较快,有家长迫不及待问我数学卷子怎么样,我淡淡来了一句,没做过这么难的卷子hhh虽然当时我以为自己190还是有的。</p><p>晚上去二桥散步了,回家复习了会儿物理化学和英语作文,之后刷知乎发现数学最后一题有质疑,也没管他,不过心里确实有点忐忑。第二天上午回归了英语真题的感觉,好简单。所以下午上场毫无压力,就是考前的音乐有点催眠。前面一切正常,完型,阅读,也都是标准选项个数(比如完型ABCD各5个),写得很快到作文还剩50分钟左右,然后悠哉游哉慢慢写……英语结束。玩分的三门全部结束了,奈斯。考完就放松很多,晚上依旧出去散步,回来研究物化的高考真题,以及自己整理的一些化学tip,当然我还是没忍住刷了会知乎,听说了数学错掉和英语出原题的消息……</p><p>第二天早上考物理,已经全然没有了紧张的气氛,居居也来了,腼腆地笑着。物理是真的水,20分钟就把卷子基本做完了,然后到尾也没检查出什么来……下午最后一场了,按捺住激动的心情,山哥说考完请我喝酒。。化学做得到不是很顺,心理略慌,提前20分钟左右做完了,本不想检查让它去了,结果检查出条不确定的,改了(事实证明改错了。。2分啊真疼)然后就,结束了。收卷的时候,我凳子没稳住,整个人往后一栽,引起整个考场哄堂大笑,我意识到,解放了。</p><p>和李想,金鱼他们出门碰见了,再一次,也是最后一次,以考生的身份,看你一眼,从南到北。</p><hr><h2 id="47暴雨间的安宁">47.暴雨间的安宁</h2><p>9号下午从考场出来,感觉这个世界突然就充满了生机,门口有拉横幅的有献花的有拍照片拍视频的,热闹极了,不过我还是很快就回家了。时隔快20天终于登了QQ,啊满屏的祝福让我好感动,特别是她18连温暖留言,真的是与众不同的期待和关心。聊了会儿天,晚上就和昌国包包蒲苇沈委出来浪了,偶遇金鱼草鱼他们,去了ktv一直嗨到快23点。</p><p>10号11号就颓在家里整理东西,11号晚上江苏教育考试院出官方答案了,认真细致地对了答案,从心里一阵凉凉,预估125+180+105差不多(因为数学填空题有一题出问题了)当时发给孙她还坚决不信。没办法,12号的南大综评考试还是去一下吧,虽然还没想好要不要和南大签约。12号可真是坎坷,早上去金鹰的kfc休息,我简单看了会儿自招的书,(裸考真的有点虚)虽然也没看进去什么东西,不一会儿说家里车被交警大队拖走了,我直接一个好家伙,下午还是急急忙忙去的考场,还肚子疼…好在考试的时候恢复正常了。</p><p>南大的综评考试我们考的是数学+物理,4+4一共8题,总分100分。第一题是个奇奇怪怪的归纳法,一会儿做出来了,第二题积化和差秒掉,第三题一个复杂的立体几何模型计算,花了点时间做出来了,第四题函方我不大熟练,先丢着。还有一个多小时肝物理,其中一条磁我完全放弃,其他都写了,包括一条我用暴力积分解的电磁感应。大概做了6条半叭……也不算太难,厉害的人做8条也是有的。后来成绩出了,极其丑陋不愧是裸考,考了61分,虽然是这边最高但其实都差不多,可以和南大签约,但我思来想去终究没有把自己锁死在南大,虽然我爱死这个学校了。</p><p>回家就被孙要求到学校来准备强基计划,有那个什么爱尖子的网课。我吧是认为,听网课完全没有必要,会就是会不会就是不会,区别看你自己刷题能刷到什么程度。于是仍旧是五人先锋小队进驻教研中心,这熟悉的颓废感。后来昌国和金鱼走了,就剩我,昂仔和滑滑,这俩人打游戏打得快快乐乐,被孙抓个正着好几次。我呢经常出去晃,中考期间高三竞赛班在音乐教室上课我还去三楼钢琴处给居居的物理课堂加了一点美妙的钢琴伴奏hhh。</p><p>7月21号高三六班大聚,下午ktv巨大包间大家争相唱歌,大家都展现出了平时不外现的一面,令人欣喜。晚上冶春齐聚一堂,还有几位老师,大家啤酒一罐接着一罐,一箱又来一箱,轮流上场和老师们对干,最后直接是一口一杯,不醉不归。真的是很难忘的一晚~</p><p>这几天,虽说对了答案有点搞心态,不过总归过的还是无忧无虑舒舒服服颓颓废废。学校以为我们在学强基,事实上颓的一笔,这些天我都没认真写过一套强基模拟卷子,只顾玩了,以及每天的地下党交接。</p><p>谁知道,这几天的宁谧美好,接着的却是一场大的风雨呢。</p><hr><h2 id="48不是终点">48.不是终点</h2><p>轻松颓废中,于是到了7月24号,高考出分的日子。还记得去年此时我们在班上等着上一届高三竞赛班的消息,来一个消息我们便激动起来…今年又将是怎样一番场面呢。</p><p>早上照常起床,大早上先笑着问候了金鱼和子昂有没有PT招生办的偷偷联系了,大家都以为是轻谑之谈,毕竟这样互奶啊已经三年了啊。不过我确确实实到了当天很紧张,有点不知所措的感觉,于是我在电脑前开始码字,写下自己2020高考的经历,写完感觉稍微放松一点。中午想睡午觉自然是没睡着,我在自己的留言板留了一句话:”一切的一切都会是最好的安排。“</p><p>随着时间一点点推进啊,真的是越来越紧张,这时候我哪有什么心思看什么强基,英语呢,于是决定看电影——也不知道当时的我怎么想的,选的一部《霸王别姬》,看得怪压抑的…紧张感反而更重一分了。约莫16点的时候,几十秒刷一次qqvx的我发现空间炸了,江苏省的一本二本录取线出来了!令我大吃一惊的是,今年的分数线不降反升,什么鬼啊,原来改分比卷子更加诡异。</p><p>16:30左右的时候,突然手机一震动,VX来消息了,是孙老师的消息,图片。</p><p>我想也没想就点进去了。是一张表格。</p><p>首先映入眼帘的是连在一起的一个435,一个421,我顿时感觉呼吸都乱了,赶忙喊了喊正在拖地的妈妈,期间我定睛一看,435的是张子昂,421的是我。第一反应是zzanb,435为邮中长脸了,给为父添光了;第二反应是咦我好像考的还不错嘛;第三反应是看到了其他人,心里有种说不出的滋味。一向淡定的麻麻也被子昂的成绩惊到了,我反而很淡定,终究嘛,还是败了一次,确实服气。</p><p>不一会儿,孙老师打了个电话给我,我接听,她的第一句话是,”看到成绩了叭,不要太伤心啊,没事“我心头一暖,其实我对成绩挺满意的,一点也不伤心,但我仿佛感觉孙老师看到的不是一个冷冰冰的成绩,而是这个成绩背后活蹦乱跳的我,一个奋战竞赛一次又一次挑战自己的我,我很感激有这么一个好老师。</p><p>几乎是同时,子昂和金鱼给我发来消息问我情况,我和子昂收到了那张图,金鱼只知道他自己的成绩。渐渐地那张图开始疯狂网传了,大家也陆续知道自己的成绩……我很平静地恭喜完子昂,突然就陷入一种痛苦之中,我发誓不是虚伪,是真的为那些,我们一起奋斗过的兄弟们,而难过。金鱼,昌国,草鱼,戴亮,滑滑,蒲苇…我突然痛恨起2020的江苏高考,我为他们感到惋惜,安慰的话说不出口,我只能做无声的陪伴,我感到孤单。</p><p>高分密集地可怕,我已经排到省一百多名了,这个分估计复旦的本一批是比较悬的。中科大的老师联系我了,交大的学长学姐联系我了,高邮中学联系我了让我准备强基。zza的超高分立刻传遍全网,这确实是一个历史性的时刻,我为他感到高兴,我为他们感到惋惜,我为自己感到迷茫……刚得知分数的喜悦感逐渐被疲惫感和无力感冲刷,真的好累啊。</p><p>不是终点。</p><p>在子昂的期待下,在学校的呼唤中,在她的快乐祝福里——我联系子昂借自招的书(这恐怕是万千贺喜中的一股清流hhh),决心强基最后冲刺清华——</p><p>强弩之末,击水中流,再见你追光少年。</p><hr><h2 id="49强基计划">49.强基计划</h2><p>25号返校,大家也还都比较平静,仿佛就回到了当时成人仪式那一天。完事之后,中午和周湉恬学姐子昂一家以及高邮中学校领导和北大招生主任吃了顿饭,听得迷迷糊糊的,让一个清华仔和一个想考清华的仔在这属实有点违和……下午回家我就开始真正刷一波强基冲刺了,这次啊,这次是孤军奋战。</p><p>我白天肝,晚上肝,数学一份份卷子,物理一点点啃,大题看,小题做,边刷边记背——每天都准备到凌晨一点多钟,我想再给自己一次全力以赴的理由。29号早上在南京笔试,8月初面试。</p><p>26号晚上清华方特地赶来和子昂吃饭,学校也借此机会帮我和清华力争一个强基入清的机会。听子昂描述,黄校长一直求那边给我面试过,子昂妈妈也为我说了许许多多的好话,最后说是只要笔试不出划子,面试大概是操控直接让你过。于是我更努力准备笔试了,自招嘛,竞技状态刷上来就完事了。</p><p>27号到了晚上的时候,我开始思考强基计划本身的政策问题,和我爸分析了一个晚上。在我看来,这是一个国家给你优惠,给你资源,为国家培养科研学术人才的一个政策,我真的是要做这样的人吗??我又想到,这所谓的本硕博连读,会不会是一把锁,锁住你以后的一些方向;我又想到,我当时填志愿的时候报了物理这个选项,而基础物理这个前景emm真的很难说;我又想到这个政策本身也有很多不合理性,比如说生源什么的比如说不公平性……我在无限的未知面前感到深深的惶恐,而身后的鼓励和勖勉又在我心里暖和的实实在在,这样,面对这样的强基我更加感觉无所适从。</p><p>我和学姐和宋神交流了,他们为我提供了很多宝贵的看法,但强基的选择在他们看来也是很大的不确定性;我和子昂说了,子昂表示尊重我的选择。我没有告诉学校,我心里很乱,我整个28号在南京徘徊都没有学习,我打算先考它一考试一试。</p><p>29号早晨,轻装上阵。180分钟数理化三科,全部是多项选择题。数学当头五题就直接把我做懵了,我感到这个强基考试有难度,我硬着头皮不停做着标记终于花了一半的时间做完了数学,转战物理。物理题量较少,由于我也学过一定的物竞,所以…会就是会不会就是不会,做得挺快,化学就看人品了……于是手忙脚乱终于考完了这场要命的考试。考完舒畅了很多——终于被THU一脚踢出门外了。</p><p>但。30号傍晚成绩出来了,考得不差,从学校了解到除了免试的茅巨大概是扬州市最高,于是下面就面对着这么一个问题——面试,去,还是不去?我踌躇了好一会,先和孙老师通了电话,表示我想放弃强基,她吃了一惊,但似乎能够理解。过了一会儿,学校知道了这个消息表示不能相信,还很一本正经地和我商量去北京面试的安排。帅林和孙给我打了好几个电话,我不忍心直接拒绝,自己心里却也如刀绞般难受。晚上回去和子昂打了电话,他沉默了,最后和湉恬学姐说的一样的话——”听从你心,无问西东。“</p><p>彻夜未眠,思考着我的选择,以及第二天早上面对校领导时应该如何应对。黄校始终不愿相信这是真的,我坚定亲自告诉他的时候,他整个脸色都变了,李校也来,把我和我爸拉到小房间单独猛攻。很奇怪地,在李校的滔滔不绝中,我突然非常想拒绝这一切——他说的越多越逻辑混乱,我就越坚定了一分。我的回击让他们都无言以对。这还没有结束,中午回家本想休息一会(整夜没怎么睡),教育局副局长带领我的任课老师杀到我的家里,是家里!和我和家长面谈,这个局长倒是很平静,不过我依旧没有被说动,我只是太累了,太他妈累了。</p><p>送完客我倒头就睡,也不管帅林又给我手机发了好多好多长文短信。我拒绝。傍晚,我骑着自行车,悄悄骑入高邮中学的校园,正值高三放学——夕阳的光照在脸上,我是否还能和我的母校有着正常紧密的情谊呢?</p><p>谁也不知道,我的未来也不知道,我只是做出了一个惊世骇俗的选择,后果什么的,我都不知道,也不想知道。</p><p>不过,我感谢那些鼓励我支持我的人。强基一事,让我看清了许多许多……有透彻心扉的寒凉,更有跨越利益的温暖。真的是,再见,追光少年。</p><hr><h2 id="50记得歌时不记归时节">50.记得歌时,不记归时节</h2><p>其实正文(我在甘雨园的故事)已经结束啦</p><p>忽然就找到高考后说是要整一个毕业纪念册,每个人写小文章附小美照——可惜最后没做成。不过我还是碎碎念了一篇小文章叭——</p><blockquote><p>漫漫人生旅途,花开花落无数,沸腾的时光怎能被荒芜?<br>是夜深人静时迷迷糊糊的一些絮语。<br>维特根斯坦说:“我度过了极好的一生。”司汤达“活过,爱过,写过。”行至此,我的高中生活也可以说是能画上一个圆满的句号。</p></blockquote><blockquote><p>我们一同走过…<br>记得2017暑期上课的轻松与颓废,共同挥手南大逐梦北京;<br>记得合唱比赛,朗诵比赛我们向青春举杯;<br>记得元旦晚会绚丽的灯光和此起彼伏的尖叫和欢笑;<br>记得期末考试之前大家静心伏案的身影;<br>记得与澳大利亚友人短暂却真诚的邂逅;<br>记得暑假我们兜兜转转南征北战为九月的决战歃血;<br>记得运动会竞赛班自带buff的健儿们奋勇争先的雄姿;<br>记得2020寒假大家颓学并进的独特生活;<br>记得每天晚读前的我会细心我会专注我会坚持我会稳定;<br>记得圣诞的苹果,考前的旺仔,海绵宝宝和派大星……<br>我们一路劈风斩浪,逐渐接近我们当初想要的模样。</p></blockquote><blockquote><p>我的高中生活大概分为三个比较平均阶段——玩乐,竞赛和高考。我很庆幸的是,高考没有占据我高中阶段太多的时间,让我有一片自由的空间去呼吸新的生活中的空气。熊培云说,自由在高处,那短暂却真实、狭义却可感的自由确是高中给予我的最好的礼物。去年此时我选择了停课自习,晚自习我走上三楼,站在高二高三的教学楼间,吹着夜风冥想,我想,竞赛是没有出路的,终究还是要回到与大家一样的起跑线上,为何还要长途跋涉,而彼且奚适也?我想,是自己用自己双足探索漫游的自由,和更多未知的选择的权利;也正是这多元的生活,让我认识了更多的人,看到了更多的风景,带回了更多地歌谣。<br>孤城回望苍烟合,记得歌时,不记归时节。</p></blockquote><blockquote><p>我要感谢高邮中学,无私地给了我最好的资源,<br>我要感谢各位老师,在我倔强固执之时给予我包容和理解,在我迷茫困顿之时给予我安慰与方向<br>我要感谢各位同学,是你们的认真与执着让我坚持不懈怠,是你们的友好与坦诚让我的故事有人倾听<br>我要感谢陪我一起追光的竞赛党们,数竞物竞化竞书写属于我们自己的华章,<br>我要感谢我自己,在这么多风风雨雨中坚持到了最后。</p></blockquote><blockquote><p>离别时难免的,但我真心希望我们超级竞赛班的大家,一生温暖纯良,不舍爱与自由。六班永不散场!</p></blockquote><blockquote><p>在愿望的最后一个季节,记起我曾身藏利刃。<br>夜深了,我再次奔跑在邮中的大道上,穿过邗江中学的操场,走在南京喧哗的街坊,骑着单车向南师大的食堂,坐在南京大学的长椅上……好多星星落在了我的枕旁。</p></blockquote><p>是为结。</p>]]></content>
<tags>
<tag> 回忆录 </tag>
</tags>
</entry>
<entry>
<title>干货!我的高中学习发家史</title>
<link href="/2020/08/29/%E5%B9%B2%E8%B4%A7%EF%BC%81%E6%88%91%E7%9A%84%E9%AB%98%E4%B8%AD%E5%AD%A6%E4%B9%A0%E5%8F%91%E5%AE%B6%E5%8F%B2/"/>
<url>/2020/08/29/%E5%B9%B2%E8%B4%A7%EF%BC%81%E6%88%91%E7%9A%84%E9%AB%98%E4%B8%AD%E5%AD%A6%E4%B9%A0%E5%8F%91%E5%AE%B6%E5%8F%B2/</url>
<content type="html"><![CDATA[<h1 id="干货我的高中学习发家史">干货!我的高中学习发家史</h1><h2 id="语文可怜的发家史从110-130">语文:可怜的发家史(从110-130)</h2><p>语基部分:</p><p>文言文和诗歌建议每天一练,老师作业布置了可不额外训练,每天一练不必多,但认真做(<strong>文言文做完比对原文翻译积累实词</strong>)。题目来源可以直接学校配套的资料先自己往下顺着做,或者五年高考三年模拟。</p><p>现代文阅读前期可以不必要经常训练,做阅读时细心比对不分心就行了。后期的话建议选择阅读中的选择题单练,提速度。</p><p>阅读(包括诗歌)主观题的话,有个有效的方法叫做<strong>自己讲题!自己给自己讲或者给别人讲都行。选择早读课或晚读课时间,当觉得困的时候,拿出做过的阅读,把每点是怎么分析出来的顺畅地说一遍,此项工作重复进行是有效果的!避免了后期刷太多题消耗精力。</strong></p><p>(我认为语文早晚读的话,应该大部分时间花在阅读和作文上)</p><p>主观题建议积累题型,把不太熟悉的一些题目按点抄下来抄在专门的语基本上,日后反复理会。有余力的话可以分专题整理。</p><p><strong>重点!重点!作文!</strong></p><p><strong>我初期(高二)的时候,作文日常50/70这样的得分率,毫无章法一起乱写想哪写哪勉强凑完篇。高三初期,我一左一右两个同桌px,zjc都在gb那边补作文。我跟二位学到了不少。</strong></p><p>郭氏议论文范式结构(少林组合拳),分为几大板块。第一板块是引,用名言用例子引入主题,1-2段,120字左右即可。第二板块是论述,主体文字(核心)加支撑文字(辅助)!主体文字大概就是纯议论文字。这边一般分为3-4段。紧接着引的一般是核心概念的阐释。<strong>这一段是全文的核心,用纯文字定义文章的中心,是定义,是说是什么,不提及意义和原因。</strong>(gb说核心概念是基本功,一定要练扎实)。核心概念完了之后是多角度论述,可分析原因,意义,反面论述等。在此之间穿插例证(支撑文字)。至此约600-650字</p><p>第三板块有三种选择,联今,深化,辩证。联今是最简单的,深化和辩证是最易得高分的,这就要求再多挖角度分析,大概都是继续定义+论述。文章的倒数第二段很重要,可用混合段,观点和一句话例证镶嵌式(建议直接背现成的)。第四板块结,结尾,简洁而不简单。</p><p>以上是郭家班作文套路。</p><p>他们训练是怎么练的呢?基本每天练核心概念阐释,gb一般给的都是很奇怪的核心概念。自己打磨支撑文字。拟写提纲,提纲就按照上面的范式写,写出来不少字呢。</p><p>我那会天天跟着px一起练,极其吃力,但效果略有,之后拿了几次58/70.</p><p>下面是我初期摸爬滚打时的几例,<strong>千万别学我!!!我写的很差!!!大概给你看下怎么写的(定义式)</strong></p><p><img lazyload src="/images/loading.svg" data-src="1.png" alt="1"></p><p><img lazyload src="/images/loading.svg" data-src="2.png" alt="2"></p><p><img lazyload src="/images/loading.svg" data-src="3.png" alt="3"></p><p>这样训练以来,之后拿到作文题第一时间<strong>编</strong>核心概念,之后似乎确实有点顺畅了</p><p>没错这边就是<strong>编,不会写可以直接模仿某些范文大佬的核心概念。</strong></p><p><strong>但是,到后来发现,核心概念式的郭氏作文有的时候并不能很好的适应。(我期中期末扬州市统考都是50/70)因为有的时候真的定义不出来(但基本功还是要练的,不知道你们班有没有人在gb那里补课,可以跟他们交流交流看看他们的练习本)</strong></p><p><strong>之后我把重心转向提纲。练提纲。</strong></p><p><img lazyload src="/images/loading.svg" data-src="4.png" alt="4"></p><p><img lazyload src="/images/loading.svg" data-src="5.png" alt="5"></p><p><strong>这样列提纲成文就有感觉了。平时多积累一些套话,详情见王开岭和我的积累本。</strong></p><p>寒假我在家里积累了很多小切口式素材,又称一例到底式作文,平时我不大敢写,而且全国卷似乎不大这样写作文。。?</p><p>大概就是,一例引入,简要论述,概念界定,**回到引例,**多角度分析,第三板块,**再回到引例(要加语言气势了),**结尾。详情可见我的那篇二手时间(58/70)</p><p>这样写的话基本都能稳在54-58这边了(练多了有的时候直接不过脑子的直接写)</p><p>最后一阶段我做的最多的事就是,背素材,改写议论段(微调直接用),列点构思,<strong>参考分析佳作</strong>!</p><p><strong>对了,拿高分的关键还在于——漂亮的原因分析。对一个社会现象分析找出背后的原因,点出社会心理问题,是亮点。很普适。</strong></p><p><strong>当然,无论是联今还是原因分析,都应该最后给拉回正能量的调子上来(谈方法论),破而后立!(zza的高考作文就是,先敢于破了,然后立)。</strong></p><p><img lazyload src="/images/loading.svg" data-src="6.png" alt="6"></p><p><img lazyload src="/images/loading.svg" data-src="7.png" alt="7"></p><p><img lazyload src="/images/loading.svg" data-src="8.png" alt="8"></p><p><img lazyload src="/images/loading.svg" data-src="9.png" alt="9"></p><p><img lazyload src="/images/loading.svg" data-src="10.png" alt="10"></p><p><img lazyload src="/images/loading.svg" data-src="11.png" alt="11"></p><p>伞这个分析的还是挺好玩的)</p><p>最后一阶段我对一些佳作进行的结构分析</p><p><img lazyload src="/images/loading.svg" data-src="12.png" alt="12"></p><p><img lazyload src="/images/loading.svg" data-src="13.png" alt="13"></p><p><strong>参考下我大概怎么看的,多动手写写,多开口说说,这样会找到感觉的。</strong></p><p><strong>最后一阶段模仿佳作真的很重要</strong></p><p><strong>附一篇7.2考试的作文 题目是“对话”</strong></p><p><img lazyload src="/images/loading.svg" data-src="14.png" alt="14"></p><p><img lazyload src="/images/loading.svg" data-src="15.png" alt="15"></p><p><img lazyload src="/images/loading.svg" data-src="16.png" alt="16"></p><p><strong>给我写出信心来了,不过跟我给你的一些范文还是不能比。</strong></p><p><strong>总结一下,平时可以练练核心概念,挤牙膏也要挤出来),然后多看看佳作,写写提纲(一定要写详细了,观点要都表述出来),平时同期的模考作文一定要自己练练写写保持手感,且同学间互批非常重要!</strong></p><h2 id="数学附">数学:附</h2><p>我是10月份开始学数学的,因为考了一次一百二十几一次一百零几。我大概用了一个月不到的时间刷完了38套,感觉好多了,38套我基本是全做的。11月份入手压轴题,在2020年之前刷完了。同期外面各地的模拟试卷也都做了(一般只做压轴题,大市模拟仿真做)。——刷题是稳数学分数的最有效途径。</p><h3 id="关于一轮复习">关于一轮复习</h3><p>一轮复习上课可听可不听(一般来说老师上课节奏挺慢,<strong>容易困</strong>),把高一时有<strong>遗忘的知识点要听听</strong>,一些老生常谈的总结性的比如函数,导数,解几(新方法啥的还是要听听的)可以忽略。一轮复习的作业一定要认真做。认真做不代表花时间,而是<strong>尽量用最短的时间完成好的效果。作业建议下课,课余时间完成。</strong></p><p>那晚自习干啥呢?<strong>完成未完成的,然后刷课外题。</strong></p><p>38套的话做<strong>每份填空9-14,17-18以及导数</strong>即可。</p><p>短期集中刷题很有效果,比如选定一两个星期,每天2-3份试卷的练(上课也可以练的)</p><p>然后就会出现卷子不够的问题?——安利锤子数学公众号。里面全是外面的模拟卷子,只要做压轴题和解几题即可。群号790161390,里面全是卷子,答案在微信公众号上。</p><p>以及全国卷版本的金考卷(这个我还不太清楚)</p><p>数学额外要练就是练解几和导数,以及带着点其他蹊跷八怪的非典型压轴题(如概率,立几,有就做一下)</p><h3 id="关于整理">关于整理</h3><p><strong>算错了的无需整理,想错了的简单整理</strong>。所以我觉的整理应该少而精。我觉得整理不需要弄得太官方,我敢jio我搞的那个思路本本风格挺好,也看的下去。</p><p><strong>整理的核心不在整理的过程,而在隔一段时间把该题拿出来挡住所有思路重做时自己重新思考的感觉。我一般将重做放在考试之前的复习时间。不同的题目可以用不同的颜色标记,有的题目做n遍也不为过。</strong></p><p>有的错题无需整理。将平时练习啊考试的学案放在一起,每张开头大概写下错因就行了,考试之前一扫而过留个印象无需整理。</p><p>**整理的时间不多于隔天重做此题的时间。整理的时候不要写太多东西,留在重做之后有感而发写。**无感这条题目就可以扔啦。</p><p><strong>多和同学们交流题目做,不同的人有不同的资源。</strong></p><p><strong>上课刷题为主,听讲为辅。</strong></p><p><strong>自己额外训练多做中档题,适当做难题,少做简单题。</strong></p><p><strong>限时训练限时训练。</strong></p>]]></content>
<tags>
<tag> 回忆录 </tag>
</tags>
</entry>
<entry>
<title>我们抬起头仰望太阳</title>
<link href="/2020/08/16/%E6%88%91%E4%BB%AC%E6%8A%AC%E8%B5%B7%E5%A4%B4%E4%BB%B0%E6%9C%9B%E5%A4%AA%E9%98%B3/"/>
<url>/2020/08/16/%E6%88%91%E4%BB%AC%E6%8A%AC%E8%B5%B7%E5%A4%B4%E4%BB%B0%E6%9C%9B%E5%A4%AA%E9%98%B3/</url>
<content type="html"><![CDATA[<h1 id="我们抬起头仰望太阳">我们抬起头仰望太阳</h1><h2 id="前言">前言</h2><p>一切尘埃落定,这兜兜转转起起伏伏的一个月让我想起了2019的九月十月,呵,都是终点,也是起点。前些天上一届大佬xf问我,你后悔学竞赛吗。我没有犹豫,不后悔。为什么?我最终没有拿到满意的结果,我也曾在课内学业与竞赛探索的冲突中遍体鳞伤……其实我自己也不能给自己一个答案,大概来说,就是竞赛让我感受到了另一种生活,宽广自由。偶然间浏览了学弟cha(信竞大佬)的博客,心中有感而发。跟他们比起来,我可能都不能算是一个纯粹的竞赛er,我没有那样的热爱和付出,但我感激这一路所看到的光。</p><p>是为一些絮语。总觉得要写下什么来纪念下自己的竞赛生涯,说给自己听,也说给正在追光的你们听。</p><p><code> 坐标扬州某邮县城</code></p><h2 id="高一">高一</h2><p>我是以中考状元考进邮中top2竞赛班的,在此之前,我没有接触任何与竞赛有关的东西(本来邮中准备联合赞化办什么2.5+3.5之后这件事不了了之),起步较外面城市晚了不知道多少多少(事实上我们这届扬州市中考状元xyh在同年进入数学省队,差距啊…)</p><p>暑期补课初次接触平面几何,不过仅限于高考知识,但一次偶然的梅涅劳斯定理让我隐隐感觉到了竞赛的光,当时和jcg,zza一起上课比赛做平几,无忧无虑很是欢乐。仅此而已。接着就是欢脱的暑假生活,我竟然无所事事写暑假作业嗯?9月份的时候才知道邮中要开始竞赛培优了。美其名曰上竞赛,实质只是高中老师艰难地帮学生培优,连竞赛的边都擦不到。。当时被lhl忽悠着去学物竞了,花了个把星期自学了点微积分(用的同济教材),我只记得当时lhl讲什么非惯性系,摩擦角什么,嗯这就是竞赛嗯。。。10月份班主任hannah sun ,以及数学老师jcz单独找我谈话,让我学数竞,我稀里糊涂地答应了,于是听从老师的建议慢慢开始刷高考内容(后期直接刷53)。当时我对竞赛完全没个概念,还是将精力中心放在课内学业上(成绩保持的还不错,8次考了4次第一期末还进了扬州前十hhh)高一上学期就这么浑浑噩噩地过去了。</p><p>于是下届下下届的你们可以看下这时候你们已经领跑我许多了。</p><p>真正改变了我的竞赛观的是寒假sun请来邮中传奇thu巨佬sxr跟我们讲了下竞赛,这时我才对竞赛坑有了较为清晰的概念。勰神五门省一的经历让我大为向往,在他无意的推荐下,寒假我终于入手了第一本竞赛书——奥赛经典几何。在勰神来班的第二天,我跟同学十几人前往杭州第一次进行了竞赛培训,,是物理。美其名曰培训,日子颓废的不能再颓废,让我一度怀疑自己这是干嘛来了。在那里认识了扬中大神mtq,大概渐渐地开了眼界了吧。</p><p>寒假大概学完了高中数学,这样就来到了高一下学期。</p><p>开始时不时偷摸着上课掏出平几大本开始阅读(仅限于阅读),但我是属于不那么专心研究的那种人,高一活动多也经常溜出去玩那种,到了4月报名初赛我才意识到啊,试炼来了。</p><p>当时邮中终于请来了竞赛教练来给当时高二的学长学姐们讲数竞,我交钱报名去听了。</p><p>于是自此开始我算是真正地入了数竞坑,时间坐标2018.5</p><p>当时上的几何(顾冬华)和数论(杨全会),我是属于都听得懂但自己完全无法下笔那种,但yysy也确实学到了不少基本的东西。5月6号初赛,我平稳发挥,竟然填空题全对…以一个比较高的分数过了初赛(好像在邮中整个排第五),只是当时一条高三模考难度的数列大题送掉了,,不然就第一了。这样子我就大概有点让老师另眼相看了,是个苗子。当时我们这届过了5个人(到最后才发现初赛是最残忍的啊哈哈哈)</p><p>最后一阶段忙着期末复习自然又把竞赛断下来了…不过也勉强进了扬州前十。</p><p>6.28日下午考完便和jcg以及gry赶往南京去参加了文物光华潘成华老师的数竞培训。潘老师是高邮人,数竞水平非常高,自然课也非常非常难。PMO绞肉机一度让我失去希望,一道题都不会搞什么数竞。。有个人互相扶持多好,谢jcg陪我度过这最艰难的时光。与此同时有不少人在学校的支持下参加了苏大的数竞培训(度假),这条路毕竟不是给多数人走的啊,必定要走得遍体鳞伤。</p><p>回来修整了几天,7.14我,jcg,zza,ytl以及lyp代表高一和素未相识的高二们去参加了江苏省夏令营。夏令营的课极其水,基本都是自己自习。我们都在为过省复赛而努力着呢,夜里熄灯后打手电筒继续刷题(被通报piping的最认真宿舍)……复赛之前有点小彷徨,因为自己做的模拟卷有的只能做到四五十分,万一过不了怎么办呢?但最终我还是平定下来沉着应战了。</p><p>2018.7.23,我只记得顺着做了6条填空就直接肝大题,9题直接放弃,10题解几很庆幸做出来了,在最后的时间内把最后一题也归纳出来了…一试做完感觉稳了。于是从容肝二试,我前面的学长(邮中的)一直在跟第一题过不去,我果断先杀T2平几,结果真的瞬杀。。回过头看第一题,不大会做,分类求导,用最笨的方法花了三四十分钟终于写出来了(我抬了抬头前面的小哥哥还没有写出来)于是我的任务结束了。那天监考的小姐姐非常非常非常好看,接下来我就。。嗯。。(噢最后我还提前交卷去吃饭了)</p><p>7.30成绩出来,78+80=158(分数线56),全扬州 rank10,全邮中rank1,激动地我那天绕体育场跑了好多圈。</p><p>8.1号在lhl的怂恿下去了物理夏令营(现在想想这个操作是真sao,为什么要跑去物理),我当时算是物理小白,可能唯一的收获就是,,在那儿大概学完了高中内容。?也认识了一些可爱的学弟chy,zcy,cha,hylf等。挺好。</p><p>回来后基本就是翘课自习,跟着高三竞赛党跑到智慧教室颓废(现在想想是真的颓),后期也没刷多少题目,把历年真题做了一下,平几除了1415年其他都是水题嘛,对自己省一有了盲目的信心。当时高三学长smy和qyx一直陪我自习,让我感到一种归属与舒心。</p><p>9月初还被迫回班考了次试,拿了次久违的第一(事实上我好久没碰课内了),之后又安心回到智慧教室。于是终于那天来临了。</p><p>2018.9.9因为复赛rank10,所以身处扬州高手云集的考场,自然有点害怕,毕竟我心里清楚我不是高手,只是一个想混个省一的菜菜。一试下来填空只做了6题(还错了一题),时间原因直接转大题,9题秒杀,10题数列熟悉构型但把题目瞅错了导致证明全错,11题看都没看。。直接崩塌。</p><p>带着沉重的心情考二试,按照习惯先做T2平几,竟然连全等都没想到,只是固执地用三角法代数法硬刚,最后刚了2h都没成功。12.00的时候,还有十分钟结束,我放下了笔,看了看外面的天空,晴朗澄澈,我突然非常心酸委屈,难受……我那曾经清晰可触的理想似乎就这么灰飞烟灭了,晴朗的天空又承载着多少无声的悲哀。我的竞赛告一段落,坠入深渊。</p><p>这段时间是我整个高中生活的低谷,整天沉埋在失败的阴霾之中。当时关心我的人不多(有可能是我故作正常吧),自己却难以承受,没错你们看到我空间里说说最早是2018.9.9,之前的被我一气之下全部删了。。</p><p>然而我还硬着头皮去考物竞,压根没准备太多,大家都在智慧教室颓废不谈。最后我们被骗去三级培训搞什么考前培训(大家一定一定不要被坑了啊,考前培训个鬼,当然是要自己复习)。2018.9.22考物竞,35届hh,我把第一条天体做了一大半,最后的极坐标积分就不会了,题2弹簧不会写但我写满了…题3刚体不知道哪出了划子,做了三问,但最后0分。。后面基本就不会写了,35届太难。于是物竞也炸了。</p><p>出物竞考场知道了自己的数竞成绩,71分(离省一差一条填空),而qyx132smy126(国一线130),我一个人坐在大巴的后面角落,埋下头去。</p><p>竞赛生涯告一段落。也许在那时,我根本还没有入门吧……</p><h2 id="高二">高二</h2><p>高二的初期我好像都没怎么在竞赛上花心思,也许是还心碎于之前的失败吧。课内成绩略有下滑,在6名左右徘徊。</p><p>10月后,学校有请教练给高一的小同学们上课了,于是我决定重新入坑——去蹭竞赛课。在那里跟学弟学妹们一起,确实让我获得了一些释然和开心,也因此我认识了许多有趣的小朋友们。在那里我逐渐能够做出越来越多的题目,每次yjb老师在大家沉默时说这边zwm已经做出来了,我就又多了一份继续前行的动力。</p><p>大方向上,我决定弃了物竞专心数竞,虽然我没有因此在数竞上花过多的时间,也只是抽时间做做一试整理整理罢了。</p><p>寒假前的期末考试,我遭遇了一次惨败,邮中rank16,扬州rank190+,我突然意识到,这一次又一次的打击已经渐渐抹去了我的梦想和希望。高一未拿省一,期末垮掉一回,thu综合营怕是凉了。寒假里确实是彷徨了的,尤其是在大家的欢声笑语之中。</p><p>但我没有停下步子,我看完了创之路的不等式网课,这才大概算把代数给入门了。自此开始了一项浩大工程,整理多元不等式…不提。</p><p>短暂的寒假似乎就这么过去了,下面便来到了繁忙的高二下。</p><p>首先便是小高考,作为一个高一不怎么听课的娃,初期复习自然是比较吃力,一开始一次模考四门加起来都不足300分(当然我也没有认真考)。在家长的刺激下我怒了,于是撇下竞赛和语数外疯狂刷小四门,最后就算是比较难的试卷也能练上三百六七十七八十了。2019.3.17小高考平稳度过。</p><p>一波未平一波又起,4月被安排去参加THUSSAT测试,五人先锋队由此集结(zwm,zjc,zza,jcg,yh)于是开始不停地刷自招题(一向喜欢玩的我连体育课都给翘了)。考前两天是高邮的期中考试,我们晚上在智慧教室自习,期中考试完全划水(邮中rank10)。2019.4.27前往淮安考试,全是选择题,数学物理(物理还玩倒扣)。最后结果出来140.5/200,击败百分之九十左右(比yh低一点点,yh最强)大概一百六七十可以保thu综合营,这就跟我没啥关系了……</p><p>5月是初赛的季节——化学课划水2星期做初赛卷子,竟然把初赛给过了102/120(还是邮中最高分…)。下面重回数学,抱着本预赛手册畅游全国嗯(返璞归真),2019.5.26,仍旧是个雨天,考初赛,填空送了两条,最后一题完全不会,大概这样。出分倒是出乎我意料,只有97分,比jcg少7分。然后下面竟然是个高一的小伙,叫szw,也许有点玩意头呢吧。</p><p>6月又回归期末复习,试卷太水。。邮中rank4,扬州勉强rank进前100.</p><p>于是,最后的暑假开始了,这也是我提升最大的时期。(每天一份一试卷子是不可少的)</p><p>暑期补课第一天,我便申请自习,我来到教研中心抱着本不等式的秘密还有平几开始啃。一个人感觉好孤单,于是我搬迁到了原高二6班,就在高一竞赛班暑期补课的隔壁,下课有人走动我心里就舒坦的多,毕竟这些小朋友们我也比较熟悉啦。当偶尔有人也会来看望我,我就会越发坚定,嗯,他们是要看着我走向前线的呢!</p><p>每天我会抽一部分时间回班补当天的笔记(真的多。。)然后继续翘课。</p><p>购进了本学数学和平几题集,开始了计划性规律性的刷题。每天至少一份一试,然后连做带看20条平几,在这样强度的练习下,我感觉我的水平在快速提升,渐渐地我从在省一线徘徊逐渐向国一线进军了。</p><p>数竞之余,我还皮了点化竞。大牛lx带着邮中杀向nnu了,就我一个在家跟他们化竞们隔空连线,我除了看了点有机其他一窍不通。2019.7.15我跟着dzs悄悄来到nnu,我千米单骑一人杀到教室hhh,现在回想起来也挺有趣。7.16考试,裸考毫无压力,奇迹般的我将三条有机大题全部搞出来了,剩下的就都…瞎写写嘿嘿。最后水了个42分。尚可啦</p><p>2019.7.24来到邗中再战江苏省复赛,不过这次不是跟邮中大部队一起了,也没吃到扬中门口的鸡排。早上吃多了考前呕吐,调整好后进入考场。一试好像是做了7题填空,题9题10都秒,最后题11时间不够只写了一部分,一试考完过应该是稳了。二试题1平几,一条极简单的平几我做了30min+,好笑。代数这是什么呀,暴力求导就完事了。心血来潮再写一条组合吧,秒出答案,然后开始编织废话,写满就完事了…预测分数线会比以往高,题太水了……</p><p>出成绩,96+120=216,高的有点虚(分数线94),邮中rank1,扬州rank7.题外话扬州rank1是初三学生。。240+……于是决战我的战场又是第一梯队的考场了(jcg,gry也跟我在一个考场)</p><p>8月继续自习,开始捣中等数学上的题目,每天还是那个训练量,但我加大了代数方面的学习与练习,多元不等式逐渐多起来了hhh.</p><p>2019.8.15我独自前往南京参加学大伟业的刷题班。我与南通通州的大佬们住一间,同桌是南京高淳的(身高一米九几的帅哥呢)。学大有两次考试,我两次都是一试爆炸(40-60划水)二试腾飞,而我的室友们都是一试迫近三位数的大佬…原本非常期待的李伟固教授因突发情况回家了,取而代之的是水的不行的代课,为此我还跟助教cjh硬碰硬。不提。王建伟和李建泉讲的不错,就是题太难了,于是我的最后一次培训就这么结束了,没有学到太多,但我的水平大概也是可观的了。</p><p>回家后依旧翘自习自习…带着yh一起学数竞(期间还忙里偷闲参加了一次文化讲座)。步入九月,倒计时开始了。数竞化竞最后的队员们都来到了隔壁教室备战。我把最后一个星期都用来回归整理,当然每日早上一模拟必不可少。这时候做卷子基本都能拿到一百多分了可以在国一线左右徘徊甚至有时候能触碰到队线,国一就取决于代数是否能写点出来。</p><p>我主动放弃了参加化学国初的机会,专心备考联赛。</p><p>9.5号生日,心血来潮上线看了看,许多人的祝福与鼓励让我心中温暖而感动。9.6最后一天在学校,活动课我在操场上散散心,心里感到轻松与释然,也许,这次我是真的准备好了吧。</p><p>9.7来到扬州入住,晚上陪爸妈逛了下万达广场,回来看了看平几100就早点睡觉了。</p><p>9.8联赛。起得很早但精神挺好,早早地来到考场。嗯,我左边是扬州的rank2rank3选手,分别是去年国家集训队巨神whr和据说狙过巨神的sx两位扬中巨佬。不过我很平静。</p><p>考试开始,我顺着做了7条填空,题8跳过,题9水题和差化积结束(虽然中途算错浪费了一点时间),题10解几5min秒杀,题11复数数列感觉很难,写了一些,时间就到了。</p><p>中途对答案发现自己填空错了一条(本以为自己写对的),非常简单的一条。不管了,稳住吧,毕竟重点在二试。</p><p>题1是平几,whr率先秒杀题1,对于国集巨佬果然是分分钟的事。我大概跟着sx的节奏过了会也做出了平几。平几极其水,这一年我的功夫用错地方了,平几的功力无处施展。题2代数非常诡异,离散最值问题,从来没遇到过,而且似乎是一半代数一半组合的味道。whr仍是过了一会儿就做出来了,写了很多。sx想了好久在慢慢写。我不断试验不断证明,花了一个多小时终于较为清晰地将求解过程写在了答题卡上,确实过程很难写。但求种数让我懵了,最后出了点小问题多写了个组合数。。题3数论是模数列问题,完全不会,题4是图论,跟我没啥关系了。</p><p>sx很顺畅地写完了题3,whr在此之前老早干完题3就放下笔不写了(国集巨佬的任性),rank1的小朋友认认真真地将题4写的满满的。。。</p><p>12.30铃声响起,就结束了。跟whr对了下答案,代数我算对了,国一应该差不多吧…</p><p>戏剧性的是,那条错的匪夷所思的简单填空和代数手滑多写的组合数恰恰让我刚好和国一擦肩而过。最后是89+60=149.扬州rank5,江苏省rank70-100.算是最好战绩了吧。</p><p>回家后也没有闲,还有最后一次物竞。重操旧业,啥也不记得了,抱着程书和舒力看,一份一份刷模拟试卷。初赛高分通过(我也不知道为什么我个菜菜能162/200),这届新高二似乎很强呢。考前又被学校忽悠去三级培训,其实我心里是非常清楚这个培训的垃圾质量的,当ljj信口开河大放厥词我从心底涌出一股厌恶(这为我2020.7.31与校长们对刚做下铺垫),不过大家都被忽悠去了,我一个水平一般的也不便多说话,就当去玩玩吧。</p><p>最后一晚大家都没有颓废,都珍惜着这竞赛最后的一晚。我回顾了下相对论动量,然后跟yh又交流了会就睡觉了。</p><p>睡前看lx查了化学国初的分,发了一篇长文,很受触动。</p><p>2019.9.21,来到考场,巧的是我跟mtq一个考场hhh,我们考场指不定有个队爷。题1静力学,愣了30min还是放弃,题2刚体,本来想复仇的发现今年这个还是不会写,,呜呜呜我精心准备的力学啊(整个力学只拿4分,耻辱)……题3电磁感应+力学,我果断选择近似而非积分,倒大霉选择错误,而且第4问向后好像就错了。题4热学,亥姆霍兹共振器,果断拿了第一问的分就跑路;题5几何光学,水题,不过我好像算错了嗯?题6相对论,前晚刚复习记忆犹新,拿下(事实上铃声响完卡西欧仍在紧张计算最后在收到我旁边几个人的时候我把答案写上去了);题七超长阅读理解直接放弃。最后水了96分勉强拿了个省一,这对我一个刚摸了2星期的已经挺好的了——</p><p>9.21日晚上,我们物竞的八个人吃了散伙饭,到ktv里嚎了好久好久…</p><p>这样的日子就这样画上句号了……竞赛全剧终。</p><h2 id="结语">结语</h2><p>我不后悔竞赛,不是在于我最后获得的高分省一和低分省一,而在于这一路南征北战的经历,在于(短暂)跳脱出课内的自由,在于这一路遇见的你们。</p><p>我欲穿花寻路,直入白云深处,浩气展虹霓。只恐花深里,红露湿人衣。</p>]]></content>
<tags>
<tag> 回忆录 </tag>
</tags>
</entry>
</search>