Fork me on GitHub

Day1

Day1

写下这些文字的时候,Day1已经过去好几天了。

尤其是在凌晨的时候,醒来许多次。总觉得鼻上有股若隐若无的臭味。

回头来看,我或许错怪了这酒店,或许我在厦门买的那双橡胶拖鞋才是散发出那股莫名气味的罪魁祸首。

但那卫生间也不无关系吧。

早上走的时候线上入职的流程。中午,我急不可耐地企望前往工区。在飞书上和mentor联系,然后打的前往。

尚浦中心,那些在阳光下反射出刺眼光线的楼围在一起,形成了一片园区。中午的时候,这里有许多带着工牌的人在结伴而行。带着工牌的,大部分是字节员工。

我的mentor是一个中年人了。这从他的飞书和微信头像上也得以窥见:他的头像是自己的孩子。

在向上,mentor的直属上级、mentor直属上级的直属上级、mentor直属上级的直属上级的直属上级,他们用的都是自己孩子的头像。

那些云淡风轻的某一天,回头看来,其实是人生一个重大的转折点。

人生总有很多第一次。第一次上学,第一次谈恋爱,第一次工作……当某天回忆过去的时候,才发现生命不过是以“帧”为单位的幻灯片而已。

这一天或许也是这样吧。

……

我和同组的几个同学,以及leader一起去吃饭。

在组内大家一起结伴去吃饭似乎是一种常态。

几位同学看上去非常年轻,和学校里的同学没有什么差别。着装也是这样。这多少冲淡了一些我的拘谨。

字节的食堂是流水线形式的自助餐。排队,走,取餐。称不上特别丰盛,但足以满足任何口味的人的胃口。另有水果、饮料可以自取。而且全免费。这一点来说,确实是很划算了。

我挑的东西不多。大抵是因为那一天太热的原因,实在是没有胃口。自助餐总是容易浪费,特别是在不要求你全部吃完的情况下。而得以我只拿了寥寥几个菜的缘故,我是吃的最干净的。

回到工区,坐下没多久。听到外面有封楼的消息。同学全部站在楼边向外看了,我却还有些不以为然。

我打趣道”不会我的线下实习生活只有这么半小时吧。“

是的,成真了。

这时候我才意识到,疫情给我们生活真的带来了改变。

EVE

昨晚,没有睡好。

这并不是由于失眠,或者精神衰弱。仅仅是甘于沉溺在精神鸦片营造的虚拟里。

窗帘渐渐泛起亮光的时候,我意识到不得不睡了。

凌晨两点收拾行李的时候,我带了一条空调被,严实地压缩在一半的行李箱空间里;从抽屉里拿了半抽屉的衣物,短袖、短裤、袜子。又置了一件黑色的衬衣外套,这是女友给我买的,以及一条长裤。然后是身份证、学生证、剃须刀,指甲刀,风油精,伞……

它们被一股脑塞进电脑包前面的夹层里。

可还是总觉得少了些什么。

于是拿走了桌面上的那张照片——我们在长沙用拍立得拍的,那时她微卷了头发,侧站在帘前,傍晚的阳光穿过半透明的纱,拂在我们的脸上。

在学校的时候,我把这张照片贴在桌上的小书架旁。于是我也期望今后也能把这张照片带着。

可我仍感觉少了些什么。

……

前些日子,又和她吵架了。

关于未来要去哪个城市定居的事。关于未来要如何生活的事。

想着这些事,总觉得太早。不想,总觉得太慌。想想,多少就有了些期盼。再想想,又觉得要战胜的困难实在太多。

我说,大城市生活压力大,要还三十年房贷。小城市工作机会少,只能去开滴滴。

我说,考虑未来十年买房实在不是好时机。

我说,现在的国际形势和经济情况似乎不容乐观。

我说,就业一年不如一年了。

我说,我们还是应该从理性的角度出发,作出更符合长远利益的选择。

但她说,我只是想要一个家而已。

那么,我会给你一个家的。

……

母亲载我到嘉定北。

我不是第一次到嘉定北乘地铁,但这次的感受似乎不太一样。

一班公交车停了下来,然后快步走出一群年轻男女。

这些通勤的人们,无一例外脸上带着淡漠。他们以一种近乎麻木的状态快速行进着。

他们的身上裹挟着大上海争分夺秒的焦虑,这焦虑同样体现在处心积虑设计的地铁时间表上:你只有快走,快走,快走,才能伴着关门的铃声赶上下一班换乘的车。

我在车站下的肯德基解决了自己的早餐。

猪肉芝士帕尼尼、美式咖啡、一个蛋挞、一根肠,十五块。

咖啡实在是很烫,直到其他食物都吃完,我才能开始用那根细吸管去啄咖啡。

约莫八点二十,我上了地铁。转一站。十一号线坐一小时,八号线坐一小时,顶着太阳步行一点六公里。

于是到了提前预定的海友酒店。

当然,你不能对位于上海五角场旁边的一百六十元一晚的酒店抱有期待。但它在网站上写着“2020年开业“,想着应该也不会那么差。

可当目睹它真容的时候,我感到一阵失望。

走廊和电梯像是切尔诺贝利核爆炸之后无人维护二十年的废墟。

房间表面上是整洁的,但禁不住打量。

卫生间的水渍未干。枕头是湿的,或许是我的汗浸润的。插上房卡的一瞬间,电视机开始自动打开并且播放东方卫视的电视节目。从它的显示画质和方式来看,出生日期应该在十年之前。

马桶圈有裂纹。坐上去能让你的下体享受天然瓷砖纹理按摩服务,当然,这是智能马桶所不具备的高级享受。

至于空调漏水和房间里有小飞虫这些事,则显得无关紧要了。

……

对于未来的实习生活,我不由得产生一些陌生、焦虑与恐惧的情绪。

mentor加了我微信。

不知该如何去和他打招呼。第一句话,说“你好”是否显得太陌生,说“hello或者哈喽”是否显得太轻佻。说“您好”又是否太疏离。或许我该先做一个自我介绍,那又会不会显得太多余。

巧,他的名字第二个字也是下雨的意思。

他唯一的朋友圈,发在半年前。是二十三点下班打车回家的事情。

中午做了个幻想职场美好生活的梦。

带着一身汗臭入睡,醒来的时候去楼下做了个核酸。天空中忽然飘起淅淅沥沥的小雨,竟没有那么闷热了。

点了一份脆皮五花肉。原价40,会员5元的券可以减11,但会员要8元买两张5元的券。这算数太过复杂,我算不过来。

所幸刷脸让付钱变得很容易。

糟糕的一餐。

店家发明了脆皮五花肉和北京烤鸭结合的吃法,也即是用面皮包着肉,附上生菜和酱汁。这是我头一次吃到。

这脆皮脆的也太过正宗,坚硬如石头。咬下一口,只觉得舌头被搅得生疼。

到晚上七点,我再次啃了几块剩下的脆皮五花肉。

……

洗了个澡,无可避免地把卫生间的地面弄湿了。卫生间渐渐升腾起一股湿臭的下水道气息。所幸有门隔绝,算得是两个世界。

窗外巨大的防盗窗,如同一座牢房笼罩在我的头上。这窗户看不到夕阳,只能看到一点点阴沉的破旧街道。

于此时,心中升起一股可怖的寂寥。

独自一人生活,还属头一回。

在这座城市里,没有友人,没有爱人,没有亲人。

曾以旅客心态路过她的时候,只觉得对一切好奇。因为我心里知道,我有一个能回去的地方。

而今天,面临未知的职场。还无头绪的租房,濒临爆发的疫情,日益增长的就业和生活压力。

这个社会不停地创造着无形的手臂,缠住你、拖住你、拉扯你、直到撕裂你。

然后又用那些虚拟的快乐麻痹你,让人可以短暂忘却现实的苦楚。

可悲的是,我即将要做的,正是这样要将人推入深渊的事情。

TheNight

我不太会写信。

在信里,我做的最多的事情是解构自己,暴露自己,以这样的行为来渴望贴近距离。

还剩一面墙的墙纸没贴。

发觉自己做事总是在燃烧热情,而渐渐对生活失去掌控。

如布置房间,打印了很多照片,买了钉子,想着贴。如修理屋子里那些不好用的设备,像洗衣机和热水器。

明知道这些事是要做的,却打不起去做的精神。

打开冷水洗澡的时候,觉得水冰冷得可怕。淋到身上的时候,又觉得不是那么难以忍受。

空调的冷气带走水汽的过程吸走了最后一点热量,头皮像被针刺般的麻木了。

有着这样出人的折磨自己的忍耐力。也在想,是否我的灵魂在痛恨着这个躯壳。

我想我要做的事情还要很多,我有必要让我的家变得更温馨一些,我有必要去看看我的牙,看看我的胃。我有必要再为了工作和生活努力一把。

又觉得好累。最享受的时间,是我躺在床上,侧躺着看小说。其实小说并不好看,但直到精神被麻醉了,眼睛感到困倦了,才能睡得安心。

睡一场周六的午觉是我最觉得安心的时候。

我想起在家被肿瘤缠身的那只老狗。狗已经很老了,但她应该还能活。我的父母,我的爷爷,他们把狗当成亲爱的家人,却不愿意给她出个几千块钱去治好这瘤子。他们把消炎药塞到香肠里给狗吃,狗好了一些了。

狗的瘤子仍然烂了,像个破皮的石榴,不断地向外涌着脓血。她不再上沙发睡觉。沙发是她最爱的地方。

她躺在冰冷的地板上,不再有脚力快乐地奔跑了。她的脓血在家的大厅里散发出一阵阵腥气。母亲用拖把拖了好多遍,还是有。

他们不断地把这只狗赶出大厅,然后拖地。

父亲又捉了一只狗回家,卷毛。

我梦到那只狗了。我觉得心里无比的疼痛。

我想起小学的时候我养的狗。有一只是圣诞节一个叔叔给我的礼物,伴随着他的是一只小白狗玩偶,我给他们都取名叫圣诞。我抱着那只毛茸茸的小白狗玩偶睡觉。圣诞被养在厨房后面的一个小房间。我爸养了一只大黄狗,把我的圣诞咬死了。

我想起另外一只狗,它生了不知道什么病,浑身流脓。躺在家里二楼的走廊里,血和脓水淌在地上。我想求我爸爸治好他。一天,他被我爷爷扔了。

我想起我孵的一个蛋。那个蛋本来是不该活的。我用电筒照它,用餐巾纸给它做巢,不知道怎么把它孵出来了。小鸡来到这个世界上,活了两天。

我想起那只小鸭子,从我家后面的河里游过来的。来的时候,它的脚上流着血。我给它喂东西,给它包扎。它也活了两天。我把它葬在它来的那条河里。

我想起我姐姐家养的一只小黑狗,我们是那么的爱它。然后姐姐家的狗被我姐姐的家人杀了吃狗肉。那天晚上我伤心极了,离家出走了。那是我第一次离家出走。

我梦到阿黄了。

我想如果我再回去,她可能已经死了。

我或许是可以救她的,但我没有。

我相信父母和爷爷说爱那只狗,不是假的。

但他们不愿意为了这只狗付出几千块的医药费。

因为说到底,狗就只是狗。

我感到心里无比的疼痛,而泪流满面了。

我和我的世界

十年回忆录,我和我的世界。深夜有所感想,所以想写些东西,聊以自娱。多年来记忆已经模糊,如有错漏之处,还请谅解。不知道我的经历是否会引起你的共鸣,也让你回想起最初面对一个波澜壮阔的世界时的感动呢?

最近,我又开始玩Minecraft。

第一次接触这个游戏,还是在我小学四年级的时候。Minecraft的贴吧注册会员似乎也只有几千个,国内最大的服务器大概也不过几十人、百来人。彼时流行的还是1.0版本。对我而言,一切都是新奇的。记得我的一个存档是在一个树木很少的冰原,玩的创造模式。我掏出了一个山洞,然后把所有的墙壁都换成了钻石块和金块。

我在一个叫1.3原版生存直播的帖子里学到很多知识,作者是defanive2。然后,也开始学会看wiki。了解了游戏的更多机制,便越发对这个能够自由创造的世界着迷了。还有几位印象比较深的实况主,如蓝色铁卷门、12dora。

在每一节能够自由活动的体育课和活动课上,别的同学去踢球、打乒乓,而我总是坐在树下的椅子上,不遗余力地向小伙伴们推荐这个游戏。说来也奇怪,那时我总是能滔滔不绝讲上很久的游戏内容和各种机制。也有好几个小伙伴被我说动,但却止步于安装Java、以及联机各种操作的繁琐。现在想来是有些遗憾的。

上了初中之后,换了新电脑。学业有些紧张了,而我却更沉迷于建造自己的世界。有了几个固定玩耍的、和我年纪相仿的朋友。我用小笔记本,开着供几个人玩耍的小服务器。是用hamachi联机的。每次打开电脑,我就会使用hamachi。其频率比QQ还高。

我用自己的昵称当做种子,生成了一个海岛地图,离出生点大概一两百格的地方,就有一个蘑菇岛。也学会开始用WE,照着贴吧里的各种教程来建房子,然后建一座自己的城市。

可我的存档常常丢——那时我电脑的主板烧坏了许多次,或是因为可乐泼在键盘上了,或是因为电脑放在被子上没关就睡着了。那时做的东西很稚嫩,却总能乐在其中。

这段日子我在找实习,就业形式的急转直下、对于未来的迷惘都一度使我陷入难眠的焦虑。不止一次回想起少年时期的那段日子,在互联网构成的虚拟世界中度过的时光,它们好像已经太渺远,但又太精彩而美好。

我和我的小伙伴们不仅玩MC,也玩泰拉瑞亚、teeworlds、cubeworld、王牌黑桃、pokemmo等等游戏。其中一个叫Siu12321,另一个叫MmMmM。我们从未在现实中见过一面,也已经很长时间没有交往。可那段时光是我至今看来都无比快乐的。我和MmMmM的正版账号是Siu送的。那时国内想要买正版并不容易,许是要找人代购的。Siu是澳门人,有一次去香港旅游,买到了Minecraft的礼品卡。然后我们三个人起了格式一样的名字,XxRyexX,XxSiuxX,XxMmMmMxX。我想起写这些文字,也是在用玩家头颅做一些装饰的时候,突然想起了这三个ID。

事实上在那个年代,很多人是视游戏为洪荒猛兽的。在家长眼里,网上认识的朋友都是骗子。而对我来说,一百多元的人民币的MC账号可真是巨款——校门口的汉堡大概五块,或是六七块,总之不超过十块。我自己是不敢想象能够花钱给网友送礼物的。直到今天,我仍然很感谢这个赠送我正版账号的朋友,以及那些我们一起度过的时光。现实中,有些人即使和你近在咫尺,也不会真正了解。有些人虽和你远隔千里,却能有相同的志趣、相同的爱好,能够分享快乐也彼此依赖。这或许就是信息时代带给我们的宝贵东西吧。

1.6和1.7都是经典的版本,到那时玩这个游戏的人可是真多了,称得上是勃勃生机万物竞发的场面。后来我在一个服务器里,靠建筑获得了服主的赏识,做了op。那时候搞过暮色森林和神奇宝贝服。服务器里有比较懂的技术人员,也有靠谱的管理。大家为了一起办好服务器做了很多努力。之后,服主去当兵了,约定三年回来之后重新开服。

高中终于有了晚自习。九点多、十点多才能回家,以及周六也得上学。即使偶有闲暇功夫,也必须埋头在雪花一般的试卷堆里。终于没有时间玩MC了。之前的服主退役回来后,服务器却也没有再开了。高考结束,好歹是考上了大学,似乎终于解放了。看着好友列表里灰暗的头像,几年没有联系过的朋友,终究是没有再联系的勇气。

凭借着小时候对计算机的着迷——即使一直都是瞎玩,从来没有学过编程或是专业的计算机技术,我毅然决然选择了计算机专业。由于做实验需要开虚拟机编译内核,而我的电脑硬盘又不太够,于是买了一个云服务器。在写完实验之后,又拿它来开服。我建造了一些学校里的建筑,以此来祭奠我即将结束的、被疫情搅乱的大学生活,我怀念的美丽校园和其他一切的美好。这些年间,并不是完全没有再玩过MC,只是终究不像以前一样,对每一个机制都如数家珍。当我时隔许久重新踏足这个由像素和方块组成的土地时,我对很多东西都感到陌生:为什么会有黑脸的村民?为什么水下会长草?为什么晚上不睡觉会被奇怪的生物袭击?这些重又勾起我的好奇,而这个世界仍然让我心潮澎湃。前段时间流行一句话,叫“走出半生,归来仍是少年”。对我而言,十一年可真真称得上是半生了。

这半生,称得上是愚钝,作为国内很早的一批MC玩家,我可以说是什么都不会。建筑、红石样样不通,虽然是计算机专业的,却也还没试着写模组或者插件。精心建设的存档,一次次丢失了。就像我们人生的一个个阶段,总是要不断地和过去说再见。

到了今天,让我烦恼的事情已经不再是考试没考好、或是假期快要结束了而作业没开始写。甚至我已经逐渐开始难以理解,那不就是一些很小的事情吗,为什么那时候我会觉得好像天要塌了一样?而或许,我今天所烦恼的,在将来的我看来也不过是很小的事情罢。

那么就让我们再次启程出发,重新怀着对世界的好奇和热爱。

谢谢你读到这里,祝你好。

面经整理

[TOC]

求职八股文整理

C++

1、指针和引用的区别

  • 指针是一个变量,存储的是一个地址;引用是原来变量的别名。
  • 指针可以有多级(指针的指针),引用只有一级。
  • 指针可以为空,引用不能为空且必须初始化。存在指向空值的指针,不存在指向空值的引用。
  • 指针在初始化后可以改变指向,引用不行。
  • sizeof指针得到本指针的大小,sizeof引用得到引用所指变量的大小。

2、堆和栈的区别

  • 申请方式不同。栈由系统自动分配,堆是自己申请、释放的。
  • 申请大小限制不同。栈顶和栈底是之前预设好的。栈向栈底拓展,向下增长,大小固定。堆向高地址拓展,是不连续的内存区域,大小可以灵活调整。
  • 申请效率不同。栈由系统分配,速度快,不会有碎片。堆由程序员动态分配,速度慢,会有碎片。
  • 栈默认空间是4M,堆一般是1G - 4G

3、C++11有哪些新特性?

  • nullptr代替NULL
  • 引入了auto和decltype这两个关键字实现类型推导。
    • auto能让编译器替我们去分析表达式所属的类型。auto必须有初始值。
    • decltype选择并返回操作数的数据类型,但不进行实际的计算表达式的值。
  • Lambda表达式(匿名函数)
    • 可以编写内联的匿名函数,用以替换独立函数或函数对象。
  • 右值引用和move语义。
  • 基于范围的for循环。for(auto& i : res){}

4、智能指针的原理、常用的智能指针。

原理:智能指针是一个类,用来存储指向动态分配对象的指针,负责自动释放动态分配的对象,防止堆内存泄漏。类对象声明周期结束时,自动调用析构函数释放资源。

为了更好地管理堆内存。

常用的智能指针有(1)shared_ptr,(2)unique_ptr,(3)weak_ptr,(4)auto_ptr

(1)shared_ptr采用引用计数,每一个shared_ptr的拷贝都指向相同的内容,当最后一个shared_ptr析构的时候,内存被释放。

代码实现:

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
template <typename T>
class Shared_ptr {
public:
// 空参构造 空指针
Shared_ptr():count(0), _ptr((T*)0) {}
// 构造函数 count必须new出来
Shared_ptr(T* p) : count(new int(1)), _ptr(p) {}
// 拷贝构造函数 使其引用次数加一
Shared_ptr(Shared_ptr<T>& other) : count(&(++ *other.count)), _ptr(other._ptr) {}
// 重载operator*和operator-> 实现指针功能
T* operator->() { return _ptr; }
T& operator*() { return *_ptr; }
// 重载operator=
// 如果原来的Shared_ptr已经有对象,则让其引用次数减一并判断引用是否为0.(是否调用delete)
// 然后将新的对象引用次数加一。
Shared_ptr<T>& operator=(Shared_ptr<T>& other)
{
if (this == &other)
return *this;

++*other.count;
if (this->_ptr && 0 == --*this->count)
{
delete count;
delete _ptr;
cout << "delete ptr = " << endl;
}
this->_ptr = other._ptr;
this->count = other.count;
return *this;
}

//析构函数,使引用次数减一并判断引用是否为0
~Shared_ptr()
{
if(_ptr && --*count == 0)
{
delete count;
delete _ptr;
cout << "delete ptr ~" << endl;
}
}

int getRef() { return *count; }
private:
int* count;
T* _ptr;
}

5、简要说明C++的内存分区。

分别有栈、堆、自由存储区、全区/静态存储区、常量存储区和代码区。

:在执行函数时,函数内局部变量的存储单元可以在栈上创建,函数执行结束时,这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率高但内存容量有限。

:由new分配到的内存块,需要手动delete释放。

自由存储区:通过new和delete动态分配和释放对象的抽象概念。

全局/静态存储区:全局变量和静态变量被分配到同一块内存中。若没有初始化则会自动初始化。

常量存储区:存放常量不允许修改。

代码区:存放函数体的二进制代码。

6、什么是内存池

内存池是一种内存分配方式。是在真正使用内存之前,先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块。若内存块不够再继续申请新的内存。

避免了内存碎片,使得内存分配效率得到提高。

7、C++中的重载、重写(覆盖)和隐藏

  • 重载(overload)

    • 重载是在同一范围定义中的同名成员函数才存在重载关系。主要特点是函数名相同,参数类型和数目有所不同。返回值也可以不同。
  • 重写(覆盖)(override)

    • 重写指的是在派生类中覆盖基类中的同名函数。重写就是重写函数体,函数必须是虚函数且与基类的虚函数有相同的参数个数、类型、返回值。
  • 隐藏(hide)

    • 隐藏指的是某些情况下,派生类中的函数屏蔽了基类中的同名函数。

8、深拷贝和浅拷贝的区别

  • 浅拷贝
    • 浅拷贝只是拷贝一个指针,并没有新开辟一个地址,拷贝的指针和原来的指针指向同一块地址,如果原来的指针所指向的资源释放了,那么再释放浅拷贝的指针的资源就会出现错误。
  • 深拷贝
    • 深拷贝不仅拷贝值,还开辟一块新空间来存放新的值。即使原来的对象被释放掉内存也不会影响深拷贝得到的值。

9、面向对象的三大特性(字节1)

面向对象的思想是从客观存在的事物出发来构造软件系统,以事物为中心来思考问题,认识问题,这样子构建起来的系统才符合现实世界的本来面目。

面向对象对应的是面向过程。面向对象不围绕功能来构造系统。

三大特性:继承、封装和多态

(1)继承

让某种类型对象获得另一个类型对象的属性和方法。

可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行拓展:

继承有三种方式:

  1. 实现继承:指使用基类的属性和方法而无需额外编码的能力
  2. 接口继承:指仅使用属性的方法和名称、但是子类必须提供实现
  3. 可视继承:指子窗体(类)使用基窗体(类)的外观和实现代码

(2)封装

数据和代码捆绑在一起,避免外界干扰和不确定访问。

封装,也就是把客观事物封装成抽象的类

(3)多态

允许将父对象设置成和一个或更多的子对象相等的技术。

将子类类型的指针赋值给父类类型的指针。

实现多态:覆盖(override),重载(overload)

10、虚函数(字节1)

虚函数主要是为了实现多态的机制。

在基类的函数前面加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。

存在虚函数的类内部有一个一维的虚函数表叫做虚表,虚表存放着该类所有的虚函数对应的函数指针,指明了实际需要调用的函数。

纯虚函数是在基类中生命的虚函数,要求派生类去定义自己的实现方法。虚函数加载上一个 = 0。抽象类是指包括至少一个纯虚函数的类。抽象类必须在子类实现这个函数,现有名称,没有内容,在派生类实现内容。

11、构造函数有几种

  • 默认构造函数
  • 初始化构造函数
    • 默认构造函数和初始化构造函数,在定义类的对象的时候,完成对象的初始化工作。
  • 拷贝构造函数
    • 默认实现浅拷贝。
    • 只定义析构函数,就会生成拷贝构造函数和默认构造函数。
  • 移动构造函数
    • 用于将其他类型的变量,隐式转换为本类对象。

12、一个类默认会生成哪些函数

  • 无参的构造函数
  • 拷贝构造函数
  • 赋值运算符
  • 析构函数

13、类的初始化顺序

父类构造函数——>成员类对象构造函数——>自身构造函数

14、什么是内存泄漏?内存泄漏怎么检测

申请了一块内存空间,使用完之后没有释放掉。

(1)new和malloc申请资源使用后,没有用delete和free释放。

(2)子类继承父类时,父类析构函数不是虚函数

(3)Windows句柄资源使用后没有释放

怎么检测?

1.人工检测:养成良好的编码习惯,使用完毕之后用函数释放

2.使用智能指针

3.用一些工具插件

15、malloc和new的区别(字节1)

malloc

开辟一块长度为size的连续内存空间,返回类型为void的指针。开辟失败返回NULL。

new

返回所分配的内存单元的起始地址,需要把返回值保存在一个指针变量中。

  1. malloc/free是标准库函数,new/delete是c++运算符
  2. malloc失败返回空,new失败抛出异常
  3. new/delete会调用构造析构函数,malloc/free不会,所以他们无法满足动态对象的要求。
  4. new返回有类型的指针,malloc返回无类型的指针。
  5. malloc从堆上动态分配内存,new从自由存储区为对象分配内存。自由存储区不仅可以为堆,还可以是静态存储。

16、C++ volatile关键字

类型修饰符,指示说明对它所修饰的对象不应该执行优化。如果没有volatile,没有办法在多线程并行中使用到基本变量。

如果一个基本变量被volatile修饰,编译器不会把它保存到寄存器中,而是每一次都去访问内存中实际保存该变量的位置,可以避免变量在多线程读写中因为编译器优化所导致的问题。

操作系统

1、进程和线程和协程的比较(字节1)

1、进程是资源调度的基本单位,线程是程序执行的基本单位。协程是微线程。

2、线程的启动速度快,轻量级,系统开销小。进程系统开销大。

3、一个线程从属于一个进程,一个进程可以包含多个线程。

4、进程在执行时拥有独立的内存单元。

​ 多个线程共享进程的内存,如代码段,数据段等,但拥有自己的栈段和寄存器组。线程需要处理数据一致性的问题。

5、通信方式不一样。进程通信需要借助操作系统,线程可以直接读写进程数据段(如全局变量)来通信。

6、进程切换需要刷新TLB并获取新的地址空间,然后切换硬件上下文和内核栈。线程切换只需要切换硬件上下文和内核栈。

进程:进程是程序的运行实例,包括程序计数器、寄存器和变量。

线程:微进程,一个进程里包含多个线程并发执行任务。

协程:协程是微线程,在子程序的内部执行,可以在子程序内部中断,转而执行别的子程序,在适当的时侯回来接着执行。协程上下文切换非常快,效率快。

2、进程通信方式?

在不同的操作系统下,进程有不同的通信方式。

Linux下进程通信方式:

  • 管道
    • 无名管道(内存文件):管道是一种半双工的通信方式,数据只能单向流动,只能在有亲缘关系的进程之间使用。
    • 有名管道(FIFO文件,借助文件系统):有名管道也是半双工的通信方式,但是允许在没有亲缘关系的进程之间使用,先进先出。
    • 实现原理:在内核中开辟一块缓冲区用于通信。管道本质是一种文件。
  • 共享内存:映射一段能被其它进程访问的内存。往往与信号量配合使用来实现进程的同步和通信。
  • 消息队列:消息队列是有消息的链表,存放在内核中,并由消息队列标识符标识。消息队列克服了信号传递少、管道只能承载无格式字符流以及缓冲区大小等缺点。
  • 套接字:适用于不同机器间进程通信,在本地也可作为两个进程通信的方式。
  • 信号:用于通知接收进程某个事件已经发生,比如按下ctrl + C就是信号。
  • 信号量:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,实现进程、线程的对临界区的同步及互斥访问。

3、系统中具有快表后,地址的转换过程变成什么样了?

① CPU给出逻辑地址,由某个硬件算得页号、页内偏移量,将页号与快表中的所有页号进行比较。

② 如果找到匹配的页号,说明要访问的页表项在快表中有副本,则直接从中取出该页对应的内存块号,再将内存块号与页内偏移量拼接形成物理地址,最后,访问该物理地址对应的内存单元。因此,若快表命中,则访问某个逻辑地址仅需一次访存。

③ 如果没有找到匹配的页号,则需要访问内存中的页表,找到对应页表项,得到页面存放的内存块号,再将内存块号与页内偏移量拼接形成物理地址,最后,访问该物理地址对应的内存单元。

​ 若快表未命中,则需要两次访存。

4、内存交换和覆盖有什么区别?

交换技术主要是在不同进程(或作业)之间进行,而覆盖则用于同一程序或进程中。

5、动态分区算法有哪几种?

1、首次适应算法

算法思想:每次都从低地址开始查找,找到第一个能满足大小的空闲分区。

2、最佳适应算法

算法思想:优先使用更小的空闲区,尽可能多地留下大片的空闲区。

3、最坏适应算法

算法思想:每次分配时优先使用最大的连续空闲区。

4、邻近适应算法

算法思想:每次都从上次查找结束的位置开始检索。

6、进程状态的切换/进程的生命周期

1
2
3
4
5
6
7
8
9
10
11
12
graph LR
1[就绪态]
2[运行态]
3[阻塞态]
4[创建态]
5[终止态]
4--创建-->1
1--调度-->2
2--I/O或者等待事件-->3
3--I/O或者事件完成-->1
2--打断-->1
2--退出-->5
  • 创建状态(created):需要获取系统资源创建进程管理块(PCB:Process Control Block)完成资源分配。
  • 就绪状态(ready):等待被调度。在创建状态完成后,已经准备好,但还没获得处理器资源无法运行。
  • 运行状态(running):获取处理器资源,被系统调度。
  • 阻塞状态(waiting):在运行状态过程中,如果进行了阻塞的操作,如耗时的I/O操作,导致该进程暂时无法操作就进入阻塞状态。在这些操作完成后进入就绪状态再次等待获取处理器资源。
  • 终止状态(dead):进程结束或者被系统终止。

7、程序从开始到结束的完整过程

(1)预编译:处理源代码文件中以“#”开头的预编译指令。包括删除#define展开宏定义,处理预编译指令,删除注释等。

(2)编译:进行词法分析、语法分析、语义分析和优化后,生成汇编代码文件。

(3)汇编:将汇编代码转变为机器可以执行的指令(机器码文件)。

(4)链接:将不同的源文件产生的目标文件进行链接,从而形成一个可以执行的程序。链接分为静态链接和动态链接。

8、虚拟内存的目的是什么?

虚拟内存是为了让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。

为了更好地管理内存,操作系统将内存抽象成地址空间。每个程序拥有自己的地址空间,被分成多个页。页被映射到物理内存中,但不需要映射到连续的物理内存,也不需要所有页都在物理内存中。

例如有一台计算机可以产生16位地址,那么一个程序的地址空间范围是0~64K。该计算机只有32KB的物理内存,虚拟内存技术允许该计算机运行一个64K大小的程序。

9、死锁产生的原因

四个必要条件,缺一不可。

1、互斥条件:进程对所需求的资源具有排他性,若有其他进程请求该资源,请求进程只能等待。

2、非抢占条件:进程在所获得的资源未释放前,不能被其他进程强行夺走,只能自己释放。

3、请求和保持条件:进程当前所拥有的资源在请求其他新资源时,由该进程继续占有。

4、循环等待条件:存在一种进程资源循环等待链,链中每个进程已获得的资源同时被链中下一个进程所请求。

解决死锁的对策:

  1. 完全不管。

  2. 银行家算法,死锁避免

  3. 在检测到死锁之后剥夺资源

10、线程通信/同步的方式有哪些?

包括读写锁、信号量、条件变量、互斥量、临界区。

  • 临界区:每个线程中访问临界资源的代码片段。必须互斥地访问。
  • 互斥量:只有拥有互斥对象的线程才可以访问。也称互斥锁。其实就是一个bool变量。
  • 信号量:计数器,允许多个线程同时访问同一个资源。有P(sv)操作和V(sv)操作。
  • 条件变量:通过条件变量通知操作的方式来保持多线程同步。
  • 读写锁:与互斥量类似,互斥量要么是加锁、要么是不加锁。读写锁一次只允许一个线程写,但允许一次多个进程读。

11、Linux的fork的作用

fork函数用来创建一个子进程。对于父进程,fork()函数返回新创建的子进程的PID。对于子进程,fork()函数调用成功会返回0。如果创建出错,fork()函数返回-1.

12、什么是孤儿进程、什么是僵尸进程,如何解决僵尸进程

  • 孤儿进程:是指一个父进程退出后,它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。
  • 是指一个进程使用fork函数创建子进程,如果子进程退出,而父进程没有调用wait()或waitpid()系统调用取得子进程的终止状态,那么子进程的进程描述符仍然保存在系统中,占用系统资源,这种进程称为僵尸进程。

如何解决僵尸进程:

​ 在fork子进程之后即时使用wait系统调用;

​ 使用kill命令。

13、内核态和用户态

用户态和内核态的区别:

(1)用户态和内核态是操作系统的两种运行级别。大部分用户直接面对的程序都运行在用户态上。当程序运行在0级特权级时,可以称之为运行在内核态。

(2)运行在用户态的程序不能直接访问操作系统内核。

(3)处于用户态运行时,进程所能访问的内存空间和对象受到限制,占有的处理机可以被抢占。

​ 处于核心态运行中的进程,可以访问所有的内存空间和对象,所占有的处理机不允许被抢占。

导致用户态到内核态的切换:

(1)系统调用(主动)

(2)异常(被动)

(3)外围设备的中断(被动)

14、进程调度算法有哪些?

  1. 先来先服务调度算法

  2. 短作业优先调度算法

  3. 高优先级优先调度算法

  4. 时间片轮转法

  5. 多级队列反馈/多级队列调度

    有抢占式和非抢占式的区别。

计算机网络

1、OSI的七层模型分别是?各自的功能是什么?TCP/IP四层模型是什么?

OSI七层模型

  • 应用层:各种应用软件,包括Web应用。
  • 表示层:数据格式标识,基本压缩加密功能。
  • 会话层:控制应用程序之间会话能力,如不同软件数据分发给不同软件。
  • 传输层:端到端传输数据的基本功能,如TCP、UDP。传输层数据称为(Segments)
  • 网络层:定义IP编址,定义路由功能,如不同设备的数据转发。网络层数据称为(Packages)
  • 数据链路层:定义数据的基本格式,如何传输,如何标识,如网卡MAC地址。数据链路层数据称为(Frames)
  • 物理层:底层数据传输,如网线,网卡标准。数据称为比特流(Bits)

TCP/IP五层模型

  • 应用层:对应OSI参考模型的应用、表示、会话层。处理应用程序的逻辑。DNS协议。
  • 传输层:为两台主机上的应用程序提供端到端的通信。TCP协议,UDP协议。
  • 网络层:实现数据包的选路和转发。核心的协议是IP协议(因特网协议),ICMP协议(因特网控制报文协议)。
  • 数据链路层:实现了网卡接口的网络驱动程序,处理数据在物理媒介上的传输。
  • 物理层(如果是四层就没有这一层)

分层的好处:独立,灵活,低耦合,让每一层专注其功能,减少各层的依赖。

2、说一下一次完整的HTTP请求过程包括哪些内容?

  • 建立起客户机和服务器连接。

  • 建立连接后,客户机发送一个请求给服务器。

  • 服务器收到请求给予响应信息。

  • 客户端浏览器将返回的内容解析并呈现,断开连接。

    HTTP请求方法有:GET、HEAD、POST、PUT、DELETE等

3、 在浏览器中输入URL地址后显示主页的过程?

  • 根据域名,进行DNS域名解析。
  • 拿到解析的IP地址,建立TCP连接。
  • 向IP地址,发送HTTP请求。
  • 服务器处理请求。
  • 返回响应结果。
  • 关闭TCP连接。
  • 浏览器渲染HTML;
  • 浏览器布局渲染。

4、HTTPS和HTTP的区别

1、HTTP协议是超文本传输协议,传输的数据都是未加密的明文数据,因此HTTP比较不安全。

​ HTTPS是由HTTP+SSL协议构建的可进行加密传输、身份认证的网络协议,更安全。

​ SSL代表安全套接字层,是用于加密和验证应用程序和Web服务器之间发送的数据的协议。非对称加密,公钥公开。

2、HTTPS协议需要申请证书,需要一定费用。

3、HTTPS的端口是443,HTTP的端口是80.二者使用的连接方式不一样。

5、简述TCP和UDP的区别

1、TCP协议是有连接的,在数据开始传送之前需要通过三次握手建立连接,会话结束之后要结束连接。UDP是无连接的。

2、TCP协议保证数据按序发送,按序到达,提供超时重传来保证可靠性;UDP不保证可靠性。

3、TCP头部需要20字节,UDP只需要8个字节。TCP速度慢,UDP速度快。TCP发送是重量级,UDP发送是轻量级。

4、TCP有拥塞控制和流量控制,UDP没有,网络拥堵不影响发送效率。

5、TCP是一对一的连接,UDP支持一对一,多对多,一对多的通信。

6、TCP面向的是字节流的服务,UDP面向的是报文的服务。TCP不保存数据边界,UDP保证。

7、TCP适用于金融领域等,UDP使用在游戏和娱乐场所。

基于TCP协议的:Telnet,FTP和SMTP;

基于UDP协议的:DHCP,DNS,SNMP,TFTP,BOOTP;

6、三次握手、四次挥手(TCP连接和关闭的具体步骤)

三次握手的目的:连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号,并交换TCP窗口大小信息。

三次握手建立连接:

(1)第一次握手:建立连接时,客户端向服务器发送SYN包(seq=x),请求建立连接,等待确认。

(2)第二次握手:服务端收到客户端的SYN包,回一个ACK包(ACK=x+1)确认收到,同时发送一个SYN包(seq=y)给客户端。

(3)第三次握手:客户端收到SYN+ACK包,再回一个ACK(ACK=y+1)告诉服务端已经收到。

(4)三次握手完成,成功建立连接,开始传输数据。

四次挥手关闭连接:

(1)客户端发送FIN包给服务端,告诉它自己的数据已经发送完毕,请求终止连接。此时客户端不发送数据,但还能接收数据。

(2)服务端收到FIN包,回一个ACK包给客户端告诉它已经收到包了。此时没有断开socket连接,而是等待剩下的数据传输完毕。

(3)服务端等待数据传输完毕后,向客户端发送FIN包,表示可以断开连接。

(4)客户端收到后,回一个ACK包表示确认收到。等待一段时间确保服务端不再发送数据过来然后彻底断开连接。

(服务端)close wait: 客户端不发送数据,服务端仍然接收数据,直到服务端发送关闭请求(半双工状态)

(客户端)time wait: 等待2倍的最长报文段寿命的时间,以接收服务端最后的报文

为什么要四次挥手

因为客户端想断开连接的时候,服务端可能还有消息传,如果改成三次,客户端可能会因为迟迟等不到确认而再次发送关闭请求。

三次握手每次握手信息没收到怎么办:

(1)第一次握手消息丢失,第二次握手消息丢失,都收不到ACK消息,会超时重传。

(2)第三次握手消息丢失,Server端在TCP连接的状态为SYN_RECV,并且会根据TCP的超时重传机制,等待3秒,6秒,12秒后重新发送SYN+ACK包。

状态转移

三次握手

  1. CLOSED:起始点,在超时或者链接关闭时候进入此状态,并不是一个真正的状态,而是这个状态图的假想起点和终点。
  2. LISTEN:服务端等待连接的状态。服务器经过socket,bind,listen函数之后进入此状态,开始监听客户端发过来的连接请求。
  3. SYN_SENT:第一次握手发生阶段,客户端发起连接。客户端调用connect,发送SYN给服务端,然后进入SYN_SENT状态,等待服务端确认。如果服务端不能连接,进入CLOSED状态。
  4. SYN_RCVD:第二次握手发生阶段,跟 3 对应,这里是服务端收到了客户端的SYN,此时服务器由LISTEN进入SYN_RCVD状态,同时服务端回应一个ACK,再发送一个SYN即SYN+ACK给客户端。
  5. ESTABLISTHED:第三次握手发生阶段,客户端收到服务端的ACK包之后,也会发送一个ACK确认包。客户端进入ESTABLISTHED状态,表示客户端这边已经准备好。服务端接收到客户端的ACK之后会从SYN_RCVD状态转移到ESTABLISHED状态,表明服务端也准备好进行数据传输了。

四次挥手

  1. FIN_WAIT_1:第一次挥手。主动关闭的一方(可以是客户端也可以是服务端)终止连接时发送FIN给对方,然后等待对方返回ACK。调用close(),第一次挥手就进入此状态。

  2. CLOSE_WAIT:接收到FIN之后,被动关闭的一方进入此状态。

  3. FIN_WAIT_2:主动端先执行主动关闭发送FIN,然后接收到被动方返回的ACK后进入此状态。

  4. LAST_ACK:被动方发起关闭请求,由状态2进入此状态。

  5. CLOSING:两边同时发起关闭请求时(即主动方发送FIN,等待被动方返回ACK;同时被动方也发送了FIN,主动方接收到FIN之后发送ACK给被动方)。主动方会由FIN_WAIT_1进入此状态,然后等待被动方返回ACK。

  6. TIME_WAIT:经过这个状态进入CLOSED状态。

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
graph 
CLOSED(CLOSED)
LISTEN(LISTEN)
SYN_RCVD(SYN_RCVD)
SYN_SENT(SYN_SENT)
ESTABLISTHED(ESTABLISTHED)
CLOSE_WAIT(CLOSE_WAIT)
LAST_ACK(LAST_ACK)
FIN_WAIT_1(FIN_WAIT_1)
CLOSING(CLOSING)
FIN_WAIT_2(FIN_WAIT_2)
TIME_WAIT(TIME_WAIT)
CLOSED-.被动打开.->LISTEN
LISTEN-.收到SYN,发送SYN,ACK.->SYN_RCVD
SYN_RCVD-.收到ACK.->ESTABLISTHED
ESTABLISTHED-.收到FIN,发送ACK.->CLOSE_WAIT
CLOSE_WAIT-.关闭发送FIN.->LAST_ACK
LISTEN--关闭-->CLOSED
SYN_RCVD--收到RST-->LISTEN
SYN_SENT--收到SYN,发送SYN,ACK同时打开-->SYN_RCVD
LISTEN--发送SYN-->SYN_SENT
CLOSED==主动打开,发送SYN==>SYN_SENT
SYN_SENT==>ESTABLISTHED
ESTABLISTHED==关闭,发送FIN==>FIN_WAIT_1
SYN_RCVD--关闭发送ACK-->FIN_WAIT_1
FIN_WAIT_1--收到FIN,发送ACK-->CLOSING
CLOSING--收到ACK-->TIME_WAIT
FIN_WAIT_1--收到FIN,ACK,发送ACK-->TIME_WAIT
FIN_WAIT_1==收到ACK==>FIN_WAIT_2
FIN_WAIT_2==收到FIN,发送ACK==>TIME_WAIT
TIME_WAIT==定时经过两倍报文段长度后==>CLOSED
SYN_SENT--关闭或超时-->CLOSED

7、MAC地址和IP地址

(1)IP地址是逻辑地址,MAC地址是物理地址。MAC地址定义网络设备的位置。

(2)IP地址分配根据的是网络的拓扑结构。

(3)计算机之间的通信最终都表现为将数据包从某种形式的链路上的初始节点出发,从一个节点传递到另一个节点,最终传送到目的节点。数据包在这些节点之间的移动都是由ARP负责将IP地址映射到MAC地址上来完成的。

8、两次握手行不行

  • 不行。TCP协议的通信双方必须维护序列号来标识发送的数据包中哪些是对方已经收到的。
  • 如果只是两次握手,只有连接发起方的序列号能被确认,另一方的序列号没办法被确认。

9、TCP如何保证有序/超时重传

​ 主机每次发送数据时,TCP给每个数据包分配一个序列号,并且在特定的时间内等待接收主机对分配的这个序列号进行确认。

​ 如果发送主机在一个特定时间内没有收到接收主机的确认,发送主机就会重传这个数据。

​ 接收主机利用序列号对接收的数据进行确认,以便检测对方发送的数据是否有丢失或者乱序。

​ 接收主机将这些数据按正确的顺序重组成数据流并传递到高层进行处理。

10、Cookie和Session的关系和区别

  • Cookie和Session都是会话的一种方式。
  • Cookie数据存放在客户的浏览器上,Session存放在服务器上。
  • Cookie不是很安全,别人可以分析本地的Cookie进行Cookie欺骗,Session比较安全。
  • Session会在一定时间内保存在服务器上,当访问增多会占用服务器资源。
  • 单个Cookie保存的数据不能超过4k,一个站点一般最多保存20个Cookie。

11、简述HTTPS的加密与认证的过程

加密:客户端在浏览器输入一个https网址,然后链接到服务器的443端口。采用https协议的服务器必须有一套数字证书(一套公钥和密钥)。

​ 首先服务器将公钥传送到客户端,客户端解析证书验证成功,就会生成一个随机数(私钥),并用证书将该随机数加密后传回服务器。服务器对其进行解密后,获取这个随机值,然后将要传输的信息和私钥通过某种加密算法混合在一起传到客户端。客户端根据之前的私钥随机数来解密。

认证:首先浏览器会从内置的证书列表中索引,找到服务器下发证书对应的机构。如果没有找到就会提示该证书不可信任。如果找到了就取出该机构颁发的公钥。

用机构的证书公钥解密得到证书的内容和证书签名,内容包括网站的网址、公钥、证书的有效期。浏览器先验证证书签名的合法性。

签名通过后,浏览器验证证书记录的网址和当前网址是否一致,不一致的话会提示用户。然后检查证书有效期,证书过期了也会提示用户。

都通过认证后,浏览器就可以安全使用证书中的网站公钥。

12、TCP可靠性保证

TCP提供了检验和、序列号/确认应答、超时重传、最大消息长度、滑动窗口控制等方法实现了可靠性传输。

  • 检验和

    • 通过检验和可以检测数据是否有差错和异常。计算检验和的时候,会在TCP首部加上12字节的伪首部。
  • 序列号/确认应答

    • 发送端发送信息给接收端,接收端会回应一个包。如果接收到没有回应确认包(ACK包)就会重发。接收端的应答包发送端没有收到也会重发。
  • 超时重传

    • 发送出去的数据包到接受到确认包之间的时间,如果超过了就会被认为是丢包了需要重传。
  • 最大消息长度

    • 在建立TCP连接的时候,双方约定一个最大的长度作为发送的单位,理想情况下该长度的数据刚好不被网络层分块。
  • 滑动窗口控制

    • 滑动窗口协议是接收方通告发送方自己的窗口大小,从而控制发送方的发送速度。

    • 窗口的大小就是在无需等待确认包的情况下,发送端还能发送的最大数据量。

    • 滑动窗口过小就会导致需要不停地对数据进行确认。

  • 拥塞控制

    • 慢开始->拥塞避免 -> 快重传/快恢复:一旦收到三个相同的冗余ACK,就知道传输丢失,立刻重传丢失的分组, 阈值降为窗口的一半,重新开始拥塞避免阶段
慢开始,拥塞窗口一开始指数增长,超过一定阈值后变线性增长,进入拥塞避免阶段。

遇到阻塞,会重新开始,且慢开始的阈值变成当前窗口的一半(快恢复)

13、网络编程

网络变成对信息的发送接收,通过操作相应API调度计算机资源硬件,并且利用管道(网线)进行数据交互的过程。

套接字、数据包、网络模型。

Socket:简单来说是ip地址与端口的结合协议。一种地址与端口的结合描述协议。是网络API的集合实现。

Socket的组成与作用:在网络传输中用于唯一标识两个端点的链接。端点包括(ip+port)。

14、HTTP状态码

  • 1XX:信息类状态码(表示接受请求状态处理)

  • 2XX:成功状态码(表示请求正常处理完毕)

  • 3XX:重定向(表示需要进行附加操作,已完成请求)

    • 301:跳转,代表永久性重定向(请求的资源已被分配了新的URL)
    • 302:临时性重定向(请求的资源已经分配了新的URL,希望用户能使用新的URL来进行访问。)
  • 4XX:客户端错误(表示服务器无法处理请求)

    • 404:服务器上无法找到请求的资源
  • 5XX:服务器错误状态码(表示服务器处理请求的时候出错)

15、HTTP 1.0,1.1,2.0的主要区别

http/1.0:

  • 默认不支持长连接,需要设置 keep-alive 参数指定
  • 强缓存expired,协商缓存 last-modified\if-modified-since 有一定缺陷。

http/1.1:

  • 默认长连接(keep-alive),http请求可以复用TCP连接,但是同一时间只能对应一个http请求。
  • 增加了强缓存cache-control,协商缓存etag\if-none-match 是对http/1.0 缓存的优化

http/2.0:

  • 多路复用,一个TCP中多个http请求是并行的。
  • 二进制格式编码传输。
  • 服务端推送。
  • 使用HPACK算法做header压缩。

16、说说GET请求和POST请求的区别

(1)GET请求在URL中传送的参数是有长度限制的,而POST没有。

(2)GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

(3)GET参数通过URL传递,POST放在Request body中。

(4)GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

(5)GET请求只能进行URL编码,而POST支持多种编码方式。

(6)GET请求会被浏览器主动cache,而POST不会,除非手动设置。

(7)GET产生的URL地址可以被Bookmark,而POST不可以。

(8)GET在浏览器回退时是无害的,而POST会再次提交请求。

17、对称加密和非对称加密

对称加密:对称加密和解密使用同一个密钥。

非对称加密:使用不同的密钥。

安全性不同:对称加密有可能被窃听,非对称加密只有公钥公开,解密需要用私钥,更安全。

数据库(MySQL)

1、关系型和非关系型数据库的区别你了解多少?

  • 关系型数据库的优点
    • 容易理解。采用关系模型来组织数据。
    • 可以保持数据的一致
      • ·性。
    • 数据更新的开销比较小。
    • 支持复杂查询(带where子句的查询)
  • 非关系型数据库的优点(NoSQL not only SQL)
    • 不需要经过SQL层的解析,读写效率高。
    • 基于键值对,数据的拓展性很好。
    • 可以支持多种类型数据的存储,如图片,文档等。

2、数据库隔离级别

  • 读未提交,事务中发生了修改,即使没有提交,其他事务也可见。可能会导致脏读、幻读、不可重复读。
  • 读已提交,一个事务从开始直到提交之前,所做的修改是其他事务不可见的。执行两次SQL语句可能导致查询结果不同。可以阻止脏读,但是有可能会导致幻读或者不可重复读。这个是大多数数据库的隔离级别。
  • 可重复读,(MySQL InnoDB默认支持的隔离级别。但是使用了间隙锁算法,可以避免幻读。通过MVCC(多版本并发控制)来解决不可重复读。)对一个记录读取多次的结果是相同的。可以阻止脏读和不可重复读,有可能会导致幻读。
  • 可串行化,在并发情况下和串行化读取结果一致。可以防止脏读、不可重复读和幻读。
  • 隔离级别越低,性能越高,越不安全。隔离级别越高,性能越差,越安全。

3、数据库并发事务会带来那些问题?

  • 脏读:读取到了其他事务未提交的数据。在第一个修改事务和读取事务进行的时候,修改某一值,但是第二个事务读取到该值时,前一个事务因为某种原因比如事务一致性撤销了对该值的修改。
  • 不可重复读:前后多次读取,数据内容不一致。在一个事务内,最开始读到的数据和事务结束前的任意时刻读到的同一批数据出现不一致的情况。
  • 幻读:前后多次读取,数据总量不一致。T1在某个范围内进行新增或删除,T2读取该范围导致读到的数据是修改之间的。
    • 解决幻读:串行化,可重复读+间隙锁

4、MySQL索引主要使用的两种数据结构是什么?

  • 哈希索引,底层的数据结构是哈希表。
  • B+Tree索引。

5、事务的四大特性。

ACID四大特性:

  • 原子性:事务包含的所有操作要么全部成功,要么全部失败回滚。
    • 实现方式:利用Innodb的undo log(回滚日志),记录回滚需要的信息,当事务执行失败的时候,可以回滚到修改之前的样子。
  • 一致性:事务开始前和结束后,数据库的完整性约束没有被破坏。
    • 通过其他三个特性来保证一致性。
  • 隔离性:多个并发事务相互隔离,每个事务不被其他事务的操作所干扰。
    • 通过锁机制或者MVCC来实现隔离性。
  • 持久性:事务一旦被提交了,对数据的改变是永久性的。
    • 利用Innodb的redo log(重写日志)。当做数据修改的时候,不仅在内存中操作,还会在redo log中记录这次操作。当数据库宕机重启的时候,会将redo log中的内容恢复到数据库中。
    • 刷盘效率比数据页刷盘高。redo log是顺序IO。

6、数据库设计的范式

关系数据库有六种范式,一般来说,数据库满足第三范式(3NF)就足够了。

  • 第一范式(1NF):是指在关系模型中,对于添加的一个规范要求,所有的域都应该是原子性的。即数据库表的每一列都是不可分割的原子数据项,而不能是集合、数组、记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分为不同的属性。属性不能再分割。
  • 第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于候选码。(消除非主属性对主码的部分函数依赖)。
  • 第三范式(3NF):在2NF基础上,任何非主属性不依赖于其他非主属性。(在2NF基础上消除非主属性对码的传递依赖)。
  • BCNF:消除主属性对码的部分和传递函数依赖。

7、说说你对redo log、undo log、binlog的了解

  • binlog(Binary Log):
    • 二进制日志文件就是常说的binlog。记录了MySQL所有修改数据库的操作,还包括每条语句所执行的时间和所消耗的资源。
  • redo log:
    • 重写日志,用来实现事务的持久性。由两部分组成,一是内存中的重写日志缓冲(redo log buffer),易失;二是重写日志文件(redo log file),是持久的。redo log基本是顺序写的。
    • 当事务提交时,必须将该事务的日志写入到重做日志(redo log+undo log)文件中进行持久化,该事务的COMMIT操作才算完成。
  • undo log:
    • redo log进行重做,undo log进行回滚。undo log是需要进行随机读写的。undo log存放在数据库内部的一个特殊段(segment)中,称为undo 段。
  • relay log

8、谈谈你对MVCC的了解。

​ MVCC全程Multi-Version-Concurrency Control,多版本的并发控制协议。最大的优点是读不加锁,读写不冲突,并发性能好。

​ InnoDB实现MVCC,主要基于以下技术和数据结构:

  • 隐藏列,包含本行事务的事务id,指向undo log的指针。
  • 基于undo log的版本链:每行数据的隐藏列中包含了指向undo log的指针,而undo log也会指向更早版本的undo log,形成一条版本链。
  • ReadView:通过隐藏列和版本链,MySQL可以将数据恢复到指定版本。但是具体要恢复到哪个版本,需要根据ReadView来确定。

9、MySQL主从同步是如何实现的?

分为以下三个步骤:

(1)主服务器,把数据更改记录到二进制日志(binlog)中。

(2)从服务器,把主服务器的二进制日志复制到自己的中继日志(relay log)中。

(3)从服务器,重做中继日志中的日志,把更改应用到自己的数据库上,以达成数据的一致性。

​ 复制是异步实时。

10、你知道哪些数据库结构优化的手段?

  • 范式优化:消除冗余。
  • 反范式优化:适当加冗余(减少join)
  • 限定数据的范围:禁止不带任何限制数据范围的查询语句。
  • 读/写分离:经典的数据库拆分方案,主库负责写,从库负责读。
  • 拆分表:分为垂直拆分和水平拆分。分区将数据在物理上分隔开来。
  • 建立索引

11、锁

innodb支持行级锁和表级锁

表级锁:对当前操作的整张表加锁,不会死锁,资源消耗小,并发低

行级锁:对当前操作的行加锁,会死锁,并发高,资源消耗大

算法:记录锁,间隙锁,临键锁

记录锁:只锁数据本身

间隙锁:锁一段区间,不锁记录本身

行级锁:共享锁(读锁),排他锁(写锁)

表级别锁:意向共享,意向排他

意向锁与自己和行锁之间不冲突

意向锁:就是,比如我上一个行 排他锁,就要也上一个意向排他锁,告诉表锁,我这个表里面有排他锁

解决表锁要整个遍历行锁的问题

死锁:两个事务争抢资源导致相互等待

InnoDB减少死锁:

  • 自动死锁检测,优先回滚小事务。
  • 超时设置
  • 尽快提交事务,小事务不容易发生死锁
  • 减少扫描/锁范围,降低概率

乐观锁:每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据

悲观锁:每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。

12、索引

是帮助MySQL高效获取数据的一种数据结构,存储在磁盘文件里。

数据结构:B树,B+树,hash

B+:叶子节点放数据,叶子有个指针,形成有序链表

B:内部节点也放数据

主键索引:以主键建立索引,innodb默认6byte的自增主键

辅助索引:叶子节点存主键,通过其他的字段去查主键

辅助索引的类别:

唯一索引:表示唯一的,不允许重复的字段。主键自动有唯一索引。

普通索引:数据允许重复

前缀索引:字符串

全文索引:检测大文本数据中的关键字。检索长文本效果较好。

如何添加索引:

  1. 图形界面操作
  2. 通过SQL语句创建

索引失效:最佳左前缀法则

索引失效主要针对联合索引。

最左有序,其他相对有序。

聚集索引:数据索引放一起(主键索引)

非聚集索引:数据索引分开存

覆盖索引:索引与值一样,无需回表

13、B树、B+树、红黑树

B+树是B树的一种变形形式,B+树的叶子结点存储关键字以及相应记录的地址,叶子结点以上作为索引使用。一棵m阶的B+树定义如下:

(1)每个结点至多有m个子女。

(2)除根结点外,每个结点至少有[m/2]个子女,根结点至少有两个子女。

(3)有k个子女的结点必有k个关键字。

当索引部分某个结点关键字与所查关键字相等时,并不停止查找,继续沿着这个关键字左边的指针向下,一直找到该关键字所在的叶子结点。

为什么不能用二叉查找树:

索引存在磁盘上,数据量比较大的时候,索引大小可能有很多G,没办法全部加载到内存,只能逐一加载磁盘页。需要减少高度。

B+树比B树的好处:

所有叶子结点形成有序链表,便于范围查询。

所有查询都需要查询到叶子结点,性能稳定。

单一结点存储更多的元素,树变得矮胖,查询IO次数更少。

红黑树是一种自平衡二叉树,有以下性质:

(1)结点是红色或者黑色

(2)根节点是黑色

(3)所有叶子结点都是黑色

(4)每个红色结点的子结点都是黑色

(5)从任一结点到其每个结点的所有路径都包含相同数目的黑色结点

关键性质:从根到叶子的最长的可能路径不多于最短的可能路径的两倍。

14、银行家算法

银行家算法是死锁避免算法。

在系统中设置四个数据结构,用来描述系统中可利用的资源,进程对资源的最大需求,系统中的资源分配,以及所有进程还需要多少资源的情况。

当一个进程申请使用资源的时候,银行家算法通常先试探分配给该进程的资源,然后通过安全性算法判断分配后的系统是否处于安全状态,若不安全则试探分配作废,让该进程继续等待。

Redis

c写的内存形数据库

作用:分布式缓存(能提高并发量),分布式锁,消息队列

基本数据结构:string list hash set sorted_set bitmap

redis如何保证持久化:快照(创建副本),追加文件(记录操作的指令)

缓存击穿:缓存没有,大量查找数据库(也没有)

解决:对于无效key写入缓存告诉无效,或者布隆过滤器

缓存雪崩:缓存失效,导致大量请求落在数据库上

解决:redis集群

如何保证数据库与缓存一致:

数据库更新触发缓存更新,缓存更新失败触发缓存更新重试机制

设计模式

1、什么是单例设计模式,如何实现

1、单例模式定义

​ 保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。

​ 保证:(1)该类不能被复制。(2)该类不能被公开的创造。

​ 在C++中,它的构造函数,拷贝构造函数和复制函数都不能被公开调用。

2、单例模式实现方式

​ 分为懒汉式单例和饿汉式单例。

​ 懒汉模式:特点是延迟加载。比如配置文件。采取懒汉式的方法,配置文件的实例直到用到的时候才会加载,不到万不得已就不会去实例化类。

​ a. 静态指针 + 用到时初始化

​ b. 局部静态变量

​ 饿汉模式:

​ a. 直接定义静态对象

​ b. 静态指针 + 类外初始化时new空间 实现

找工作记录

字节 2.22 投递 ——> 2.27笔试(AK) ——> 被转岗 ——> 一面 电商后端面试 3.11 16:00-17:00(通过)——> 二面 3.18 17:00-18:00

网易有道 2.22 投递 ——> 简历被刷 ——> OVER

网易互娱 2.22 投递 ——> 03-17 19:30:00 – 22:00:00 笔试

拼多多 2.22 投递 ——> 笔试 3.6 19:00 ——> 一面 3.12 13:00 (通过)——> 二面 3.17 15.00

微软提前批 12.28投递 ——> 没过,转正式批 ——> 笔试 ——> 没消息

阿里 2.28 投递(内推)——> 笔试 3.4 19:00(通过) ——> 3.9 20:00 面试(通过) ——> leader面,等通知

美团 2.26 投递 ——> 笔试 3.5 10:00(错过)——> 3.12 16:00 笔试(AK)——> 一面 3.16 14:00

华为 3.8 投递 ——>

腾讯,待投递。

心路历程

其实在十二月份的时候,就已经开始投递微软提前批了。但是微软提前批似乎简历并没有过,而后不了了之。

从二月底开始海投各家公司,而在几个同学中间,我的进度其实是最慢的。在我还没有接到一个HR的电话和面试的时候,其他人已经有走到三面、二面的了。3月9号是我接到第一个HR电话,阴间作息的我在12点钟堪堪醒来,字节HR和我约面试。

在投递了之后,我才开始背面经,花了很长时间整理面经。实际上面试问的八股文如果不深挖的话,还是相当好背的。

我又重新拿起forest种树,上一次还是在2018年的暑假,一暑假我种了几百棵树。我觉得自己考上大学forest功不可没。我一直自认为是个专注能力很差的人,但是如果钻进去了某一件事情,效率还是可以的。之后,我就对于八股文背的比较熟了。

投递的时候,一开始非常兴奋,也没仔细看岗位要求就投了。字节投到算法岗去了(还好后来给我转岗了)。

笔试对我们acmer来说还是相当简单的,而且基本都采用能看到结果的赛制。美团和字节是AK了,阿里和拼多多的笔试剩半道题没写出来,但是感觉自己已经过了也就交卷了。其中阿里的笔试是时间最紧张的。

而我的第一个面试是周四,罗峰直推的阿里,也是目前为止唯一一个电话面试,我非常非常紧张,但是其实没有问什么东西。唯一做的一道题是面试官自己出的,让罗峰验题,结果罗峰还验错了。后来我把代码交给他的时候,得知我的答案和他不一样,心惊胆战了一晚上。想着,只有一道题,我还做错了,凉凉。

第二次面试是字节,时间在当周周五。字节的面试官长得很像我高一时候的班主任许峰。总是带着点笑意,也不知道在笑什么。那次面试我觉得自己答得并不算好。以上来就让我做题,做一道链表找环并且找到起点的题(后来美团也问了这题),我一开始说了个思路,但是不完全对。担心自己花上太多时间写这道题,让面试官对我的印象变差,于是要求他换一道题。来了两道很简单的题都秒了。

当晚通知我面试过了,约二面在下周五。

后来进度就慢慢开始好起来了。投的网易、拼多多、美团也都有了消息。拼多多的面试在周六,谁是996公司不用多说了吗?面试官相当和蔼,问的问题的非常简单,当场就宣布我通过,等约二面。而拼多多的HR在下周周二的时候才给我发邮件。

美团在3.16周三面试,对于我的项目挖得很深。做题只让我说了一下思路,甚至都没有要求写代码。然后问数据库一步一步深挖,真是问倒我了。面完感觉不是太好,但是没有发感谢信,似乎还存在过的可能。

今天3.17要面拼多多二面,晚上互娱笔试,明天字节二面。希望能加油,早日拿到offer。近日听说互联网寒冬的传闻,很是担心。

课业所不重,要做的作业却也不少。又贪玩。每天都是三四点睡觉,十一二点起床,略感疲惫了。

退役感言

算法竞赛打到今天,大概也有两年多了。大三的区域赛已经全部打完,没进FINAL。我的ACM生涯就到此为止了。

好像很少想过自己退役之后是什么样子的。回看这两年走来,真不容易。没有想到最后是以如此惨烈的结局收场。写一些流水账,也算是祭奠我的青春了。

初高中的时候在县中,是一个名不见经传的小城市。小学的时候参加过打字比赛,接触电脑也比较早,初中的时候在一个学风并不怎么好的学校,当时大概是初二的时候,有过选拔一些数学好的同学去打OI。在一个中考人数只有3000的小城市里面,竞赛资源是相当匮乏的,但当时的学校里也是有保送苏中匡亚明班然后保送南航的前辈。具体是什么水平的奖,并不清楚。那时我和几个同学玩得好,一起去了第一次之后,听了大致的介绍,其实大概也没有记住什么,然后就没有然后了。同班的同学第二次课都没去,我也就随波逐流了。初中的时候参加过化学竞赛,成绩并不是很好。

现在回想起来,如果从那时候就开始打,或许就会不一样。

高中的时候考入小城市里最好的高中,班级里有几个同学是年年参加信息学竞赛,年年三等奖。直到上了大学以后才知道我们班的那位打oi的同学,也是在我原来初中,是唯一坚持到最后的,而且我们也是网上有点交集的网友。得知这个消息的我感叹世界真小。那时我也想过参加竞赛,但周围的人都说,高中才开始,已经太晚了。而且学校里也没有什么培训的老师。化学、生物、物理竞赛,都参加过,但都没打好。

高中的时候文化课学的还可以,两次模考都排在年级前几,按照当时的分数不说上交复旦,去个南大应该没问题。什么竞赛奖都没有,没有一点综测和减分的机会。然后高考来了苏大。

大一的时候,班级里有导生制度,是大三的学长学姐担任。导生见面会的时候,当时的导生唐诚就介绍了各种竞赛,包括ACM。他是拿了铜牌然后大三退役了。那是我第一次知道ACM。后来加入了院科协的图文中心,有一位部长陈彦至是大二的,当时也是ACM队员,也拿了一个铜牌。他极力推荐我们参加ACM竞赛。

我的编程课学得很好,基本上不费什么力气就可以轻易满分,而且由于小时候参加过打字比赛,并且长时间网上冲浪的缘故,我敲代码敲得很快,常常是第一个交卷的。之后我参加了两次新生赛,都拿了二等奖。我们那一届没有很强的oi选手,排在我前面的同级学生不过寥寥数人。那时候我踌躇满志。

寒假集训去了两天就翘了,当时中学的朋友来苏州找我玩,就在外面玩了两天。

大一下的排位赛一直排在七八名到十名的样子。

当时和楠哥和6+组队,算是队里的一队二队。6+是一指禅,敲键盘的速度很慢,用两根手指,还不能盲打,一开始并不怎么突出,我对他的印象是期中考试的时候很多课都考了满绩。楠哥是编程的大佬,似乎对于程序设计早有了解的样子。

6+一直很努力学,排位赛的时候经常是第一第二。楠哥和我的成绩差不多。另外一队也是类似这个组成。

我的第一次和正式程序设计相关的比赛应该是CSP,第20次CCF竞赛,我考了240分。于立恒考了290分。当时第三题的大模拟是带拓扑排序的一个模拟,我没有完全写出来。之后,就参加了2020年的CCSP竞赛,华东赛区铜牌,也是我的第一个省奖。后来我们参加了ICPC上海站,线上比赛,打了铁,大概是铁牌靠前,同级的于立恒队伍拿了铜首。然后线下去了河海打江苏省赛,竞争难度比较低,拿了个铜牌,于立恒队伍比我们多做一题,但也是铜。18级的学长拿了金牌,还有noi银的20学妹和17的学长组队拿了银牌。那是我第一个XCPC的牌子,领奖的时候心里很开心。

那时候好像比较非主流,染了绿头发。有一队18的学长打的不好,但是拿了个一血,他们提前跑路了,我就替他们领奖。上去了好几次,旁边南大的队伍说“又是那个绿毛怪”,路过他们的时候,对我说“太强了”。那个时候虽然不是自己拿的一血,但还是觉得心里无比虚荣和开心。能和更好的学校在一个环境下同台竞技是一种很难得的体验。

寒假的时候队伍做了调整,6+跑去于立恒队伍,然后我们和后面队伍的一个1700多分蓝名的孙孜斌组队。和斌斌打比赛的大二时光是我ACM生涯最快乐的一段日子。斌的个人实力很强,做题数是19的队员里应该是最多的。他主图论,我主计算几何,楠哥主数据结构,我和斌辅数学,不过那时候没学得很深。其他的算法主要看运气。

斌那时候嫌弃楠哥很多时间没有放在算法竞赛上,希望和我和另外一个蓝名王品正组队(那时我还是青名)。但是我不太喜欢把队友撂下的事情,然后和楠哥说希望他能多把时间拿来搞ACM,并且如果我们之后的比赛打得好,就继续组队。

我们大二下的时候可以说是疯狂训练,一周至少两场的模拟赛。后来磨合的很好,渐渐缩小了和一队的差距,输一手罚时。我有好几场都做出了比较难的计算几何,有一题是沈阳的金牌题,还有旋转卡壳求直径、旋转卡壳求内接三角形(好像是这个)之类的。我们大二课多,有的时候下课了五六点才开始打比赛,一直到九点十点结束。三个人一起出去吃饭,逛街,觉得很开心。后来我和楠哥也上蓝了,但是我的分数一直还是在1600上下徘徊。

这一段时间我学的算法比较多,但是其实学的都不太牢靠。斌很猛,我们队主要靠他写,另外两个人当挂件。楠哥偶尔开一道很难得数据结构题能够猛出,也能提供一些很好的思路。我和斌前期快速签到,后期我们讨论、他写。我们比赛的节奏大概就是这个样子的。我们的优势是图论和计算几何,当时我的计算几何确实比较猛,几场训练赛都很碰巧,碰到正好可做的题,信心大增。后来很久不练,比较生疏,也开不了难题了。

计算几何要么签到,大家都会,要么金牌难度,或者防AK题。防AK题基本大家都不会做,但是其实很多金牌难度的计算几何并没有那么难。计算几何码量大,而且很多oi选手其实高中的时候不会深入学这个,所以我认为学这个是可以弯道超车的。其他的算法,我都没有太深入研究,就会个基本的。现在想来其实有点可惜,这也导致了我大三的比赛失利。

因为疫情很多比赛延迟的缘故,大二下还有昆明、沈阳等没打。我们先打了一场湘潭邀请赛,和另外一个19的队伍去。打之前,我梦想能拿金,结果打了个铜首。那场发挥其实很差,好像是有一道矩阵快速幂加速DP的题没写出来。沈阳是线下赛,当时的学长已经两场打满,所以轮到我们有名额了。

沈阳其实发挥的也不好,但还是拿了银尾。斌一个人签了四道题,签完就银了。我和楠哥一直在讨论一个几何皮的数学思维题,虽然主体思路是对的,但并没有写出来。赛后小改一下就过了。五题也不能金,没有觉得很可惜。

那时候滚榜真的是好激动哇,第一次坐在几百人的体育馆里,看着天顶上彩旗飘扬,赛场里的队牌,很多都是耳熟能详的名校。我们一度以为自己是铜,比赛结束之后就哭丧着脸坐着,比死了家人还难看。结果从后往前,念完了铜牌,也没有我们。直到我们出现在银牌区,那心情可真叫个欣喜若狂。

这也是我唯一一个银牌。

后来飞机延误,我们多住了一个晚上。如果打得不好的话,就算延误了飞机也会灰溜溜走人的。但还是没去沈阳故宫,因为来不及。吃了鸡架和什么泥炉烤肉啥的,还有奉天小馆,据说是很有名的东北菜馆,东西又贵菜量又少,味道也一般。

斌在打湘潭邀请赛的时候就若隐若无地和我透露可能大三要和其他人组队。之后,原本和18队长罗峰组队的丁誉洋,还有20的学妹殷九思,他们组成了超级银河战舰。暑假回来之后开始多校训练。我们和18汤添文组队,但学长在北京实习,只能线上训练,还有一段时间被隔离了。那段时间训练比较划水,成绩也比较不好。

殷九思没有参加暑假的训练,斌和丁两个人发挥巨猛。但后来他们三个人打的时候很长一段时间效果平平,有一段时间勉强拿银,后来发挥得比较好了。我觉得ACM毕竟是团队的比赛,还是比较需要磨合的。三个青名或者蓝名,只要训练得当,也能拿银牌。但有的时候不恰当的讨论可能适得其反。

汤在11月才回来苏州,还因为不能进学校,在外面自费住了一周的酒店。我们的训练量很少。大三的时候,我做了ACM队的队长。也不是因为我实力强,我比较乐于去干一些组织活动的事情,然后就接了这个郭。我觉得自己的威信不够,碰到事情都尽量和丁、斌、于他们商量。

教练比较信任我,大三的时候我们有很多的比赛名额,一场CCPC,两场ICPC,一场CCPC打星,基本是除了丁队和于队以外最多的。广州打星,我和楠哥两个人打,快乐摆烂,不提也罢。沈阳比赛,我们和21的noi铜学弟韩则进临时组队。我们临时也练了三四场训练赛,学弟每次都从阳澄湖赶过来,要起得很早,赶很久的路。训练赛的成绩其实还可以,但是打了沈阳却烂了。我以前不承担主码手的工作,虽然CF题做的不少,但是碰到区域赛的时候,感觉自己没有一颗大心脏,写错的很多。由于前期几题签到的失误,导致后面开不起银铜题。

我觉得很对不起学弟。凭借noi铜的实力,哪怕是单挑,也能银,至少也铜了。我们当时的配合很差,楠哥经常喂我假思路,我不想清楚就直接写,又浪费时间,又破坏心态。队里没有数学选手,一道树上背包的容斥系数搞烂了,没调出来,遗憾铁牌。

我很早就想给学弟争取更多的机会,效仿殷九思的待遇,但是19的队伍有5支,20的队伍更多,我们要尽量保证有训练记录的队伍都有参赛机会。而我们的网络赛打得很差,并没能打出成绩来,给的名额很少,挤不出来给学弟参加更多比赛的机会。20年之后由于竞赛政策的改变,强基计划,给苏大搞来了很多以前没有的OI选手,因为之前我们的选手都是大学才开始学的,都是大二才开始比赛的,大一的选手没有比赛机会。这些OI选手不得不被埋没一年,作为ACM队的队长,这是我感到惭愧的地方。

我很想进EC-FINAL,但当时已经静不下心来学习新的算法。以前拿手的计算几何,算下来也很久没有写难题而生疏了。CF开始稳步上分,两个号都打到1700多分,基本上每场稳定1000名上下了。我这时候感到自己做题才刚刚找到感觉,思路才刚刚开始开拓,而我的ACM生涯已经接近尾声了。

哈尔滨的红肠很香。做哈尔滨的时候我的状态很差,大概是经常熬夜,然后早上比赛很困。仰仗汤哥哥签完了到拿了个铜牌。

南京是最惨烈的,据说被称为诸神之战,其实和我们也没什么关系。南京的热身赛的题我几乎都做过,拿了个D题一血,这也是我唯一的一个首杀吧,虽然是热身赛的。正式赛,最简单的签到题WA了2发,还有一道很简单的签到题一个小时才出,WA了6发,另外一道3个小时才出,WA了7发。这已经完全打烂了。之后一个树上DP,我们居然想不出来。三题铁牌高罚时收尾,连两个学弟队都没打过,在苏大所有队伍里面排最后。

打到最后的时候,我已经感觉脸色发白,浑身冰凉。这一站抽去了我所有的信心,让我觉得自己像个小丑。我的ACM生涯就到此结束了。

回望这几年,做题的时光真是痛苦兼快乐。从大二开始进入101,一天的大部分时间几乎都待在里面。到今天,也不知道自己到底学了什么,或许只是#include<bits/stdc++.h>敲的更快了一些。

我们当时的队名叫痛苦三人众,最后的队名叫痛苦绝响。做题做不出来真的是很痛苦,而ACCEPT的瞬间也是无比的满足和快乐。

我首先要感谢教练对我的信任支持和鼓励。朱晓旭老师是很好的老师,在平时给我们非常多的帮助和关心,申请到很干净整洁的训练室,也一直在做努力让苏大ACM更好。朱老师尤其给了我很多机会,让我受宠若惊。但是国内的教练老师们,对于算法竞赛的内容,基本并不能够提供很好的指导。对于大学才开始学的同学来说,或许只能靠CAMP,网上自己看课,和学长教等办法自学。我现在回忆,只觉得自己一路上做了很多题,却做了很多无用的、重复的努力,最终提升的效果并不大。缺乏有效的学习方法,或许也是我最终失败的原因。

然后要感谢女朋友对我的陪伴和支持,在很晚的时候仍然陪我聊天,消化我的情绪,给我安慰。如果没有她的鼓励我或许不能坚持到最后。

感谢101的学长们,罗峰,徐伟,徐一,崔耘旗,乔丹,对我的帮助和指导,感谢我的历届队友孙楠,孙孜斌,汤添文,陆佳浩,韩则进,我们一起训练的时光或长或短,都很开心。感谢我的同届其他队的成员丁誉洋,殷九思,周泓余,冯泽森,王品正,于立恒,王志庞,唐瑞珑。一路走来有你们的支持和陪伴,是我人生中绝难忘记的一段宝贵经历。

我的CCPC和ICPC结束了,但之后还有省赛、CCSP要打,还需要再接再厉。作为苏大ACM队的队长,我也要把新生赛办好,把之后的事务寒假集训、排位赛等处理好,也许能给现在的制度再带来一些新的改变和活力,希望苏大ACM能够蒸蒸日上。希望学弟们继续加油,make suda acm greate again,能给我们带来两年没见的区域赛金牌!希望余下的final中,我校成员能取得好成绩。

一封信

​ 展信佳。一眨眼马上就要到2022年了,大三的生活也要过去一半。第一次给你写信的时候,对于大学生活仍是陌生的,到了今年,我们的本科生涯将走入尾声了,已不得不为将来盘计出路。

​ 中秋节后,和朱铭澄一起回了高中探望老师。太高一直还是那个太高,我们却已经不是原来的我们。学弟学妹们都穿上了统一的校服,而我们在其中格外显眼,是一眼被称作“社会人”的范畴了。想到这,不免觉得有些发愁和沮丧。

​ 当初教我们的语数英三科老师,孔老师调走了,王老师也升了教研员,只剩下宋老师还坚守在太高。回去的时候,特地给王晖买了费列罗,然而并不知道王老师已高升,一时举足无措。最后在路上偶遇魏传传,给他塞手里了(别告诉他我们不是给他买的)。老师们越来越好,真是好事。可我们对太高的联系也越来越淡了。

​ 朱铭澄的上高三时候认识的高一学妹,在去年毕业了。小我三岁的表弟,今年读了高三,不久也要面临高考升入大学。

​ 没有人永远年轻,但永远有人年轻。回访的时候,刚步入门口,就听到有女生喊“大课间马上结束了!下节课政治大默写!”。这声音一下子将我们带回了三四年前,我和朱铭澄都笑了。笑着笑着,觉得有些莫名的情感滋生。

​ 楼还是那些楼,但也仅此而已。我突然意识到这样的探访似乎也并不能持续多少年,待我们继续深造、或是步入社会之后,还能这样回去吗?从高三教学楼到食堂的那一处,各级校友栽种的树上,写着理想的红丝带仍然飘扬——却难觅我们的痕迹。想来那些红丝带,应该不会有人特意将它们取下来。可经过了风吹,日晒,雨打之后,也不免腐烂变质吧。

​ 原来回不去了。不是我们离开了青春,是青春离开了我们。

​ 今天的我们仍还年轻,但比起高中时候的我们,已经大为不同。也得算是人生的两种阶段了。前一个阶段尚且是青葱的高中岁月,下一段日子已经不免要提上成家立业的话题。在高中时候的我,可从来没想过这些。

​ 我是那样害怕初心丧失。看看自己,与曾经还有几分相像?是我在一点点改变吗,亦或是在所谓的成长和成熟之中,一点一点地被另外一个人占据呢?前些天,偶然发现自己十年前在网络上留下的痕迹,读那些文字,和现在的自己真真是若两人了。当时自己作何想,也已然完全无印象。

​ 我一直以为自己是从未迷茫过的。从高中时期,我就怀有那样清晰的目标和理想。直到今天,我也觉得自己始终走在我所设想的道路上。可是当我一次次投入刷分、学生组织、竞赛、推免资格、入党……然后身心俱疲的时候,终于也觉得困惑了。

​ 生活也在不断的变化着,如果说起我自己,从摄影这件事就可以看出。

​ 能走上摄影这条路,不得不说是因为你的鼓励。谢谢你当时夸赞我拍的那些照片,给了我很多的信心。

​ 在高中的时候,常常在周末,去南洋的新华书店找一些摄影的书自己看,骑着自己的小电瓶车(记得那时候还没有要求戴头盔)在太仓市里瞎逛,拍下很多隐秘的角落,比如在墙头生长的小草,手牵手蹦蹦跳跳的小朋友。在为数不多的闲暇时间,那是我最大的乐趣。

​ 大一的时候,我仍然对未知的风景怀有无限的憧憬,孤身一人坐了一晚上的长途大巴,在陌生的乡音里踏足向往的土地。我在安徽桐城的龙眠河下,沿着河一直走,看云,看天,看水,看来往的我所不熟悉的人群和车流。我追逐着夕阳,和紫红色的晚霞,一直到月亮升上来,一直到灯光的倒影在水面浮动。那样的景色至今让我难忘且感动。

​ 后来渐忙,拿起相机的时间逐渐少了。只有在和远隔千里的女友见面的时候,才会继续用镜头去记录生活。这些经历,概括而来就是一次次地等待,奔赴,然后离别。

​ 当我越来越多地把时间投入到大家所公认我们”应该“去做的事情的时候,花在我自己”想“做的事情上的时间就越来越少了。说不清这是妥协还是选择,也不知道这到底算是成长,还是变质。不知道将来,我的相机是否会成为柜子里的一件摆设。

​ 我还是很怀念高中的那些日子,窗外的夕阳总是美得离谱。我们怀着对未来的无限憧憬,同学之间互相鼓励,在试卷的海洋中身体是劳累的,精神是亢奋的。我想我或许不会选择考研这条路,而那样子准备考试的经历也就是青春的绝响了。三年前,我们年方十八,意气风发。今天走在人生的十字路口上,尚且年轻。或许再过了三年,或是再过了三年的三年,或许已经有很多当年的同学谈婚论嫁,组建家庭,为了生计奔波劳碌,有的大腹便便,有的油光满面,大家觥筹交错之间,相视一笑。

​ 继续深造也不过是再在学校里待三年。可以预见,我们将走出这些阳光明媚的日子,毫无防备地面对这社会的真实了。在我们仨中,或许最早面对这些的会是我吧。

​ 人的一生到底是该怎么过的,我一直在想这个问题。我想过要激起千层浪,做一番留名的事业,不一定是什么大事业,哪怕是在一个很小的领域作出贡献,让自己的名字被一些人记得,也就不虚此生了;我想过要看遍人间,去陌生的城市漂泊打拼,闯下自己的天地,或许会在北京上海广州某个不知名的小蜗居里吃着泡面,卑微而怀揣着理想,一心一意投入到自己崇尚的工作中;我想过要去偏远的地区,做一名山村教师,帮助那些求学困难的孩子,致力于人民的事业。我确凿无比地认真考虑过这些事。后来我遇见了爱的人,我想过或许就此安定一生。和她,有一栋自己的房子,墙上贴满我们的照片,养一只猫,一只乌龟,从此柴米油盐酱醋茶,在落日的时候散步,在下班之后一起窝在沙发里看经典的电影,在闲暇的周末前往临近的城市露营,也一起去旅行。

​ 我从来没有真正得到答案。我想,每一种人生都是值得的。人生本就不该有什么评判的尺度,赚得多的并不比收入微薄的高贵,而住大房子的也未必比飘泊羁旅的安心。我很不喜欢如今这物欲横流的世界用一些量化的指标来衡量一个人。应该有些谋生的手段,但不能为物质所役。有许多人因为来钱快选择计算机,但我钟情于用键盘敲出编码,让程序运作,完成我想要的功能带来的快乐——这让人觉得自己好像一个创造世界的神。想过让自己的名字不被遗忘,也是出于对死亡的恐惧,而非对名利的向往。

​ 但今后如何,怕是难说。我担心自己的变质,遗忘了初心,杀死了心里的少年,做了那样虚与委蛇而带着面具的“大人”。如果是你,如果是我,如果有一天我们走在这样的路口上,一边是利益,一边是本心,我们会如何抉择?

​ 至少应该怀揣着对生命和生活的热情和爱。如果年少的热血都渐凉,至少也留存对世界的善和希望。

​ 写的有些太多了,已是不知所云。愿你好。

沈阳,沈阳

不知心中是从何时开始,种下了对ACM的憧憬。

刚进入大学的我,因郁结而踌躇。大学的生活选择很多,丰富多彩,刚从单调枯燥的高中过渡而来的我们很难一下子适应。我对ACM最初的认识大概是在班级的导生见面会上,唐诚学长第一次介绍了大学里的相关竞赛。或许,种子就是从那时种下的。

大一的时候加入了科协的图文中心,部门里的部长陈彦至当时作为ACM队员正在参加比赛,能够见识各个学校的风采,和最优秀的同龄人同台竞技。类似电竞比赛的制度,让当时的我感到新奇有趣。

进入大学之前,并没有什么编程基础,空怀一腔热血,觉得自己能够学好计算机。至少在学习Python的时候,还是相当得心应手的,这或许也归结于学校的课程对于学生培养的要求并不高的缘故。大一的时候成绩不好,Python是唯一满绩的课。

参加了两场新生赛,靠着自己并不高人一等的编程能力,居然得了两次二等奖。其中,第二次还是现场的第三名。这下,我一下子膨胀了,觉得自己是极其富有天赋的。

这种浮躁的心理,一直伴着我很久。相较于高中时期,大学的我能够真正静下心来学习的时刻没那么多了。有外力因素,也有自身因素。

大二上的时候,开始参加一些比赛。CCF考了两百多分,因为疫情的缘故,正好可以参加线上的CCSP,只做了40分,当时那场比赛国赛和省赛一起算,有分就有奖,60分就有国奖。大三的主力队员学长几乎无一例外都是金牌,而我是个卑微的铜奖。之后,参加了第一场线下赛,江苏省赛。没抱着能拿牌的想法,却拿到了人生第一块XCPC铜牌。上海站ICPC线上赛,打铁了。

之后,我经历了很长时间的挫败,一度怀疑自己是否是不是根本不适合打ACM。一方面,作为19届一开始排名比较靠前的队员,学长和老师都给予了我很多的期望。另一方面,鉴于自己的愚蠢和懒惰,又一直没能取得很好的成绩。直到大二下学期的时候,才堪堪上了蓝名。我也得过奖,比如CCF考了325分,天梯赛个人国二(大概是242分)……但这些奖又没什么说服力。

令我印象很深的是蓝桥杯。蓝桥杯,人称究极水赛,我打得究极烂。省赛,省二第三还是第四名。邝老师于心不忍,给了我一个珍贵的外卡参赛名额,然后就去打国赛了。优秀奖,也就是参与奖。

至今,我都不太理解我为什么只拿了个参与奖。回顾所有这些我参加过的比赛中,IOI赛制的成绩普遍好于ACM赛制的成绩,而如果是OI赛制,简直是烂中烂。但归根结底,其实还是自己学的很不扎实,写代码的能力也不够强。

大二下的一学期,队伍经过了重组,应该说是非常尽心尽力地训练了。我,孙孜斌,孙楠,我们的训练频率是一周两场,CF几乎每一场都打。到后来,国内赛区的ICPC和CCPC做完了,就开始做国外的。做不出题目的时候,常常感觉到焦灼,煎熬和痛苦。于是队伍命名为痛苦三人众。

我们的做题数在整个集训队里面都是非常多的。我是队伍里的计算几何选手,偶尔能出金牌难度的计算几何。斌哥是图论选手,也是主代码手和大腿。一次训练赛,有一道题他直接用带花树算法秒过了,而我并没有听说过什么是带花树,从那以后我对斌哥的敬仰如滔滔黄河连绵不绝。楠哥是数据结构选手,给他一道很难的题,让他一个人在那里自闭,他也能出。对于其他的部分,数学,DP,字符串等,我们其实并没有非常明确地划分,会一点,但并不精通。而思维尤其是我们的弱项。

而我擅长的计算几何,斌哥擅长的图论,直到痛苦三人众的最后一场比赛结束后,我们都没有开到一题。

蓝桥杯的第二天就前往湖南参加湘潭邀请赛。那是痛苦三人众的第一场线下赛。打得很不好,罚坐了两个小时,泪提铜首。在参赛之前,是自认为有争金夺银的实力的,与预期相差甚大。

沈阳站推迟到暑假举行,这打乱了我和小李在暑假初去东山岛旅行看海的计划,也直接让我期末周般紧张的节奏一直延续。

当我乘上前往沈阳的飞机时,我是害怕的。沈阳站的对手大多是985,211双一流高校的尖子生,而湘潭站的对手有很多普通本一本二的同学;沈阳站的获奖比例并不高,而出题风格与我们往常训练时候也有所差异。

如果这一次失败了,大三恐怕机会就很少了。

沈阳站的比赛是在体育馆举行的,我第一次看到那样整齐排列的机器,高高升起的旗帜和气球,播放着宣传片的大屏幕,体育馆前的红地毯……当我们踏入赛场时,仿佛是走上征途的战士。我突然能理解奥运会赛场上那些运动员们的自豪了。

从发挥来看,沈阳站打得并不好。结束的时候,我们几乎认定自己无缘银牌了。我们三人哭丧着脸,相顾无言,沉默着。同行的其他队伍的队友看到我们,觉得空气几乎凝滞了。

可是我们足够幸运——有76支队伍能拿银牌,而我们排在第74。

滚榜到铜牌前列的时候,屏幕突然坏了。这时候我们的紧张升到了极点。主持人开始继续报铜牌队伍,一个,两个,三个……十个……没有,没有我们,还是没有我们。

我的紧张一点点积累。当他念完的时候,所有的紧张都化为了一点点的希冀。我忍不住颤抖着……

银牌——痛苦三人众。

最后的最后,我们不再痛苦。这一年是值得的。

我和小李的故事(长篇,持续更新)

拾穗集

这是一本私人的散文集,写给你,祝贺你的二十岁生日。取谐音,于是叫“拾穗”。它由零散的文字拼凑而成,所以就叫它是“拾穗集”。

你知道我是一个很珍视回忆的人。我喜欢摄影,喜欢用照片来定格时间的原因大抵也因为这样吧。

人生就像一片麦田,我们的经历就像是其中的麦穗。当你有一天步入终点,回望这一片麦田,你发现你曾经经历过许多,但最后只能两手空空。

我希望通过这些文字,能让我们在这流失的岁月中捡到些珍贵的回忆。

这么做的初衷,仅仅是在自己老去之后的耄耋之年,对于记忆已经模糊褪色的时候,能够聊以回味自己的一生。

我们的一天,无论如何都是二十四小时,一年年就这样过去。然而有些日子在你的记忆里会格外深刻,有些日子则被模糊在了其他的几千个日夜里。是什么决定了这区别呢?是什么让那些记忆在多年以后回望还显得熠熠生辉呢?

第一章 平生不会相思,才会相思,便害相思

2021年1月16日,一夜未眠。

在过去的几年中,我以独自一人的身份去过了很多地方。一个人在绿皮火车上层逼仄的卧铺里等待天亮,也曾在开往八百里之外的大巴车上被不知名的乡音所淹没。但像这样担心自己赶不上车,以至于一夜难眠,还是第一次。

我要和小李见面了。

第一章 平生不会相思

1. 过客

“浮生若梦,为欢几何。如果命中注定,两个将要结伴同行的过客,是不会擦肩而过的。”

我和小李初识,是在一个名为 Gorker 的软件上。

这是一个交友APP。在里面,用户唯一的通讯方式就是写信。用户拥有的信箱数量是有限的,也就是说,你没办法同时和很多的人写信。你的每一封信都不是即时通讯,需要贴上4小时或者8小时的邮票才能送达。你没有办法定向给某人写信,纯靠缘分。而一旦删除了笔友,就再也无法找回。

在当今的互联网时代,这种交流方式简直是一股清流。

而你不得不很珍惜每一个认真和你通信的人。

因为,你们仅仅是人生中的过客罢了。

你不知道我的音讯和面容,不知道我的一切现实状况,也是否会在下一次回信的时候永远消失。

有些人仅仅是拿写信当做自己的树洞,在匿名的面具下倾诉自己的苦闷。有些人永远只回几行字,回复像是例行公事,让你提不起沟通的热情。

在你出现之前,我也有过几个有趣的笔友。

我第一次写信的笔友,收到来信的时候是18年,后来通信了几次之后人间蒸发了。直到两年后再次出现,给我回信。收到我的回信之后,言语中充满着对我仍然在使用这个APP的惊喜,信誓旦旦地保证自己再也不会无故消失——然后再也没有出现过。

一位是断断续续联络了一年多的,年龄和我一样大。我们通过很多的信,在高中的时候互相诉说自己的学习生活和压力。高考的时候,我们仍然相互鼓励。

高考结束之后,我们就断了联系。就像是遥远的高中同学一样,一起战斗,然后又各奔东西。时至今日我仍然不知道她的消息,她的高考成绩是否如意,又或是选择了复读,又或是考上了理想的大学呢?

如此这般的,还有很多。在茫茫人海中萍水相逢,然后在某个云淡风轻的午后突然离开。我并不责怪任何不辞而别,过客的含义本就如此。

其实不管是在现实中,还是网络中,我们和大多数朋友的关系,或许也仅仅是擦肩而过的过客而已。

小李是我的最后一位笔友。

2. 交织

2020年6月9日,你寄给我的第一封信的第一句话是“嗨!最近做的还好吗?”

多年以后,我站在久违的宿舍楼前,准会想起20年的夏天收到小李第一封信的那个遥远的下午。

从那以后,两条相隔千里的平行线开始转过方向,一点一点,奔赴彼此。

我们在信中交流生活的琐事,学习的压力,兴趣爱好,看过的电影,读过的书,听过的音乐,还有对人生未来的憧憬。

你的文风是淡淡的,似乎在我的印象里,那就是初夏该有的味道。你的文字里有养鸽子的邻居,演奏萨克斯的路人,阳光穿透的书桌,夏日的蝉鸣,空调和冰棍。

我们也渐渐聊到感情问题,聊到自己暗恋过的异性,那些不怎么成功的爱情故事。就如同所有在青春期懵懂而悸动的少年少女一样,我们有过幻想的对象,也曾让那些无处安放的温柔最终沉淀在岁月里。

至少从我的经验来看,当男女开始聊到情感的话题的时候,多半对彼此抱有这若有若无的好感,至少认为对方是可以信任的。

但彼时的我,未曾想过在不远后的将来,我们会真的走进彼此的现实中,然后走到一起。

3. 黎明破晓时

2021年1月17日凌晨四点。

学校已经正式放了寒假,但宿舍里还有两个舍友没有离开。我从床上爬起来的时候,对铺的舍友还醒着。

外面的天还没有亮,而行李已经早早地收好了。穿衣服,刷牙,洗脸,提着行李箱静静地离开。之所以是提着,是怕拖着走的行李箱在地上摩擦弄出太多的动静,吵醒这座还在沉睡的校园。

刚出了宿舍楼的大门,又迈回去了。

突然想起应该喷一点香水。没想到后来见面的时候小李说不喜欢那个味道,于是再也没用过。

坐上前往上海的列车,这时候天刚刚亮。

4. 初见

2021年1月17日中午12点半,两辆列车抵达了长沙南站。来自株洲的那辆先到,然后是来自上海虹桥的那辆。

很难说那时候究竟是怀着怎样的心情,夹杂着期待,也有忐忑和紧张。心怦怦直跳,就和所有人生中即将揭晓的重要结果——比如高考查成绩时一样。当虚幻铸成现实,当我们无比真切地走向这一刻,却又觉得如此不真实。

在拥挤的人潮中,我在出站口之前见到了穿着白色羽绒服的你。

我们相约见面拥抱一下,只是轻轻地抱了一下。我忽然觉得手也无处安放了。

我们一起坐上地铁,并排坐着。然后,那是我们第一次牵手——我说,你的手好小呀,你伸出手来和我比大小——十指相扣。

我们一起去往了居住的民宿,在一家商场对面的小区里。装修风格是日式的,两房一厅一卫,还有一个厨房。价格也很实惠,印象里是两三百元一晚上,两个人住是绰绰有余了。

我们第一次一起吃的饭是一家烤肉,就在那家对面的商场里。说不上好吃,或是难吃,天下的烤肉大抵都是一个样。只是因为有你,所以记得格外清晰。

你的美夹在你的一颦一笑里。

5. 长沙

长沙,我们在一起度过8天。

走过烈士公园,去过湖南省博物馆,看了马王堆,也拜访了没有围墙的湖南大学。在湘江旁和江水近距离接触,夜晚在橘子洲散步。也一起喝了茶颜的幽兰拿铁,在傍晚窝在沙发里看电影,吃着甜蜜的小蛋糕,喝着RIO微醺撸串。

在长沙的时候,拍了很多照片。我很喜欢拍照片,拍照是一个记录的过程,可以把时间凝固在这一刻。我想,我是个记忆力很差的人,如果不用这样的办法去记录的话,恐怕有一天会把自己曾经经历的事情全都忘光吧。

初到一个城市,总是抱着一种一定要去哪去哪的焦虑。或许是觉得,以后来的机会也不多。有些地方仅仅是作为一个过客去参观,因此格外争分夺秒。然而还是觉得,最好的旅行不需要规划,也不是一定要去那些人多的网红景点。而是能够真正融入到那个城市的生活中去,才能体会一个地方的文化、历史和情感。

长沙是一个悠闲的城市。房价不高,生活的压力没有那么大。于是长沙人的生活很大一部分是由吃喝玩乐组成起来的。我喜欢他们带着湘味的普通话,听上去很可爱。或许是本就可爱,或许是因为认识了小李,而觉得这种语调可爱。

丫丫是个很可爱的女孩。你的身上有的这种纯真,和好奇,每每显露出来,都会让我会心一笑。丫丫很爱我,而我一想到我那么深深地被爱着,就觉得幸福无比。这种爱是一种不掺杂利益关系的纯粹的爱。我庆幸我遇到丫丫的时候,也还只有十九岁,也还年轻,也还葆有一颗少年人的热心。

上了大学这几年,不说成长了多少,似乎越来越开始挣脱理想主义而迈入现实的泥潭,很少再去感受浪漫和温暖。这好吗?难说。如果把我从时间线的这一刻抽出来,我会惊异地发现自己逐渐变得陌生。

少年有一天也会死去吗?

说回长沙,而长沙如果不是因为丫丫,也未必有多特别。毕竟,现代化的省会大都市其实所差无几,几乎是一个模板里印出来的。高楼大厦,车水马龙和灯红酒绿。

长沙的天气是不怎么好的,而我去的那几天似乎也还晴朗。

而因为有了丫丫,长沙就是特别的。长沙于是成了一个能够把心寄托和安放的地方了。只是我们还没有一个自己的家。我想,如果我们将来在长沙定居也是极好的。

我们俩在长沙度过了八天七夜,然后各自分别。我从前就觉得自己以后会谈一次异地恋,也幻想过离别是如何滋味。对于刚上了大学的我们来说,金钱是个很大的问题。只有假期才能相距,而每碰一次面,就要花去三四五千元,是两三个月的生活费。

钱,倒还是次要的。别后的苦楚是多么让人心酸啊!特别是送着你离开,又要开始下一轮的倒计时,才能再度见面。在你的影子消失在人群中的时候,多么想不顾一切冲上去拥抱你,让你留下来吧。“你也知道这是不可能的。”,每每想到这里,就觉得,相逢的日子遥远的好像在下一个世纪。

6. 电影

先不说到见面与离别,谈谈我们的日常吧。

我们的生活有很大一部分是由电影组成的,我们都很爱看电影。从刚见面开始,我们就几乎保持着一周一次的看电影频率。异地的时候,就打着语音电话,好像对方就在身边。在一起的时候,就一起窝在沙发里,或者去电影院里看。

电影被称为第七艺术是有原因的。而我认为正如所有的其他艺术一样,这些美好的感性是用语言无法解读的,你需要去感受。

和谁去感受又是大不相同的心境了。无人分享乐趣才是最大的孤独。认识你之前我常常觉得孤独,爱上你之后,即使我们的常态是天各一方,我也没有觉得凄冷。感谢我的快乐和悲伤都有你在听。

说回电影,我们一起看过好多的电影。恋恋笔记本,时空恋旅人,朝花夕誓,悬崖之上,中国医生,金陵十三钗,小妇人,布达佩斯大饭店,十二夜,心灵捕手,蒙太奇……

我依然记得我们在看《恋恋笔记本》的时候,男女主多年之后重逢泛舟湖上,耳机里传来了你的轻语,你说我们以后也要去好多好多地方。

有那么多向往的地方,在现在看来仍然是遥不可及的,但至少在电影里,它离我们那么近。我想定时的看电影并不仅仅是我们维系感情的方法,更是我们心灵的碰撞和沟通。

在复习繁忙的考试周,我们才停了这项活动。

7. 想过我们的未来

想过我们的未来,有诗酒年华,也有油盐米柴

想过我们的未来,住在一个不大的房子

进门的走廊上要挂着相片,用颜色好看的木头做相框

有一个大大的懒人沙发,和一张柔软的床

清晨的时候,你在我的怀里醒来,窗帘透过阳光的芬芳

我们会养着一只小乌龟,也得有一只小猫

我们会一起出去旅行,也看过很多风景

要见过花海,见过大大的榕树

要泛舟于湖上,轻抚天鹅和白鹭

要走过雪山白头,也听见大海亲吻沙滩

也要路过许多城市,留下很多回忆

对坐在摩天轮上,等夜幕降临

在深夜的路边摊吃烧烤,在江畔用捡来的石头打水漂

爬上高楼仰望城市,也幻想着云上的世界如何绮丽

一起在陈奕迅的演唱会上欢呼,在凌晨的沙滩散步,然后等到天亮——

等到初升的太阳,把我们的影子投射到一起

想和你说

来这人间一趟,谢谢有你

8. 第二次见面-苏州

五月份的时候,借由劳动节的机会,我们见了第二次面。这时候距离上次见面已经过去了一百多天。

我去虹桥机场接你,我仍然记得见面的时候我是不知所措的。我似乎从来没有习惯自己有过一个女朋友,因为她几乎没有来过我现实的生活里。那一刹那我感到惊讶,手,不知如何安置。

而几秒钟之后,我们便消除了一百多天的生疏,又仿佛这么长时间你一直在我身边一样自然了。

你是五月一号才来苏州的,而五月五号就要离开了。我们能玩的时间,满打满算也只有三天四夜而已。

在这个我所熟悉的城市,我提前做了好多规划。

我们第一天晚上夜游网师园,看了昆曲,评弹,古琴等表演。我们逛了我的学校,也和我妈妈、同学一起吃了饭。去了拙政园和苏州博物馆,也去了诚品书店,金鸡湖,去了独墅湖和白鹭园教堂。吃了东吴面馆的苏式汤面,也踩了平江路上的雷。还有让你始终念念不忘的莉莉小炒。还一起去看了电影,应该是在观前街的几何影城,看了悬崖之上。这也是我们第一次一起坐在电影院里看电影。

三天的时间去了很多地方,似乎并不比长沙时候玩的少。也许是因为这样,离别的时候才格外念念不忘。第二次来苏州的时候,就没有那么多可以去的地方了。

时间终究是很短暂的,我们每次即将接近离别的时候,我都会数着。倒数第三天,倒数第二天……最后一天,最后几个小时……

这时候我们终将深感无力。

9. 第二次离别

2021年5月5日上午9点,上海虹桥。

21号A检票口前面的座椅上,你倚着我的手臂。我们数着,一秒一秒。彼此没有说太多话。

通知检票的铃声已经响起,我看了看票上显示的列车班次。这时候我们似乎都意识到了某些不同寻常的东西。第二次见面,先离开的人是我。

在那些离别的车站,目送着对方离开,频频回望,被人流裹挟着前进,直至背影消失在某个转角。噙住眼角的泪花,直到视野里对方不再出现的时候,才敢流下。

终于体会到离别的苦楚,尤其建立在短暂的重逢之后。空气中隐隐还残留着你的气息,手臂上尚有余温。回到那个曾与你一同走过的城市,路上都是我们俩欢笑的影子。那个路灯,那个街角。不由得把手往后伸出,想给你牵,回头望去,已不在身边。

终于明白什么叫相见时难别亦难。

说不想奔去你怀里,留你在此,是假的。知道这不可能,是真的。那些漫步在夜里的时候,看着别人手牵手,说不羡慕也是假的。希望风能把我的思念带给你啊,但那么远,那么远,它该何时才能到呢?

10. 第三次见面-湘潭

我第二次来长沙,是借由2020年CCPC湘潭邀请赛的机会,能够公费旅游——好处是不用自己花钱,坏处是只能停留一天。

我们在车站见面,一起去了湘潭。

湘潭站在湘潭大学举办,我有一位高中同学在那里上学。他高中的时候志向很远大,想考中国科学技术大学,以后做化学的研究。他是一个相当纯粹的人。他高考没考好,于是去了湘潭大学。在大学里,学习也很认真努力。在大二的时候已经确认拿到了保研资格,参加了很多学术会议。

印象里,他刚上大学的时候,对于大学生活的一切,对于异地他乡的一切都相当的不习惯。其实我和他关系也并没有很熟,但是他仍然愿意大晚上九十点钟穿过好几公里的马路,满头大汗地来找我,然后带我们去湘大附近吃饭。吃饭的时候,他也并不吃,只是看着我们。我心里很惭愧。

我们住的地方在荒郊野外,妥妥的一个城乡结合部。但这一切都让我亲切,或许是因为从小也就在这样的地方长大的缘故。没有高楼大厦,只有小镇和荒地。上一个与这类似的城市大概是桐城。而湘潭大学附近的小吃街,在我看来是一种类似于九十年代的热闹。我喜欢这种贴地气的感觉。长沙也与此类似,不过湘潭的味更浓。

我从小生活在中国生活条件最优渥的东部沿海地带,虽然在一个小县城,但是离上海只有一步之遥。而对于中国普遍的真实的景况,大抵是缺乏认识的。这也是我对于家乡以外的地方都充满向往的原因。我始终觉得,人须要多走多看,然后才能充实了自己,以期成为更强大的人,更善良,更真实的人。

湘潭站的比赛,打得并不很好。混了个铜首。这也是第一次现场赛拿牌,然而与预期所差甚大的缘故,并不觉得兴奋。之后便去了长沙,与队友分别,和小李同住长沙医学院外面。

长沙医学院的建筑在我看来,是有些风格的,那些石灰色的教学楼和宿舍楼就像是欧洲中世纪的堡垒一样肃穆。望城区离长沙市区也远得很,但看上去城建规划也是规整美观的。

附近有一个小公园,很想去走走。但一路舟车劳顿,实在没有这个精力。入住的时候,因为一些小插曲,给我们升级了更好的房间,有一个大大的投影屏。阳台的风景也很好,我们一起在阳台拍了照片。

那是在期末前一个月了,我们的压力都很大。晚上的时候,小李在我的怀里哭。从“异地恋怎么这么难啊”到“微生物怎么这么难啊”,现在想想好像每次见面小李都会哭。离别的时候我也常常落泪,只是不能让她看见。

真的要好多的努力,才能最后走到一起吧。

第二章 你曾是少年

取自S.H.E的一首歌《你曾是少年》,你可以听着这首歌,来读下面的文章。

二十岁对于我们来说是一个人生的分界线,还记得我曾经在信里给你写过的那句话吗?

“如果有一天,你发现我向平庸低了头,请你向我开炮。”

爱这世界吧!热烈地,勇敢地去爱,你会发现生命的意义就在于此——在于叶上的露水,林间的蝉声,荷塘里的蛙鸣,在于那片像爱心一样的银杏叶,冬天落到指尖的雪花……在于你身边时时刻刻存在着的美丽呀。

希望你永远年轻,永远善良,永远充满希望,永远相信浪漫和爱情。

11. 献给二十岁

临近傍晚的时候,天上开始飘下雪花。

明天,或者说三十分钟后,是我的二十岁生日。对于这个日子,我已经期待了很久,但当它真的要来临的时候,却又心生恍然的淡漠。

遥望人生的第三个十年,在这十年里我会完成自己的学业、步入社会,成家立业,有可能要为人父母了。回想昨日,高考的情景还历历在目,在上一刻,还是孩子,下一刻就要走向成熟。

我仍然难忘,小学时候我是一个腼腆害羞的男孩,总是觉得自己比同龄人早熟一点,身体瘦弱,自恃聪明,总是以恶劣的态度对待朋友和家人。成绩还算优秀,但心底却是深深地自卑。上初中了之后,沉迷于电子网络世界——致使我如今选择计算机专业,一度影响了学业。那时的我不能理解,为何父母老师向我投着期待的眼光,于是我选择逃避。

高中时的我,开始追问人生和社会。我总是花上很长的时间去思索生老病死,盯着川流不息的车辆发呆。有一段时间我只和自己相处,从不对身边的朋友吐露心里话,从不信任别人。我穿梭在大街小巷里,偶尔为了克服自己对陌生人的恐惧而和别人攀谈。我和开饮品店的阿婆交朋友,和古居的门卫阿姨聊天,也接受过很多冷眼相待。周末的时候,学校放半天的假,我常常在傍晚的时候在天镜湖畔奔跑,看着日落,想着自己渺茫的前程,化自己的思念在火烧的云彩里。我常在闲暇的午后拜访南园,让自己的影子融化在荡漾的波纹里。我内心的彷徨未曾找到过地方安放。于是我开始尝试恋爱,而那些都是不怎么成功的经历了。

离开了高中,步入大学的校门。一下子失落了自己的目标。我如同所有可恨的成年人一样,放弃了自己的梦想而屈从于现实。我仍然在喘息的时候仰望星空,却找不到方向。我读了马克思主义的著作,他解释了很多关于我从前思考的困惑,于是我开始信仰共产主义。

我仍然努力让自己的生活过得充实,以一种积极的态度,去试着做“大人们”眼中应该做的事情。有些事情能让我感到由衷的快乐,有些则不能。

我曾经想过爱情,却从未想过自己能遇见爱情。之前我试过喜欢别人,到头来发现一直都是自己的情感在纠缠自己。直到爱情的流星击中了我,击晕了我,让我眼冒金星不知所措,我才真正开始学着怎么样去爱一个人。

首先她的到来让我不再思考关于死。我并不是说,之前的我就想着自杀,只是在此之前我不明白自己为什么而活。可当你遇见了人世间所有的美好,你就会明白生命的意义。爱上她之后,我的人生燃起这样一股生的活力。而我不愿意用美好去形容她,我将以她形容美好。

我仍然对自己的未来怀有疑问。而现在有人陪我一起走了。

因为你,我的二十岁,以及以后所有的生命岁月,都开始有了更多的色彩。

——写于2020年12月30日,给20岁的自己。

12. 沈阳,沈阳

不知心中是从何时开始,种下了对ACM的憧憬。

刚进入大学的我,因郁结而踌躇。大学的生活选择很多,丰富多彩,刚从单调枯燥的高中过渡而来的我们很难一下子适应。我对ACM最初的认识大概是在班级的导生见面会上,唐诚学长第一次介绍了大学里的相关竞赛。或许,种子就是从那时种下的。

大一的时候加入了科协的图文中心,部门里的部长陈彦至当时作为ACM队员正在参加比赛,能够见识各个学校的风采,和最优秀的同龄人同台竞技。类似电竞比赛的制度,让当时的我感到新奇有趣。

进入大学之前,并没有什么编程基础,空怀一腔热血,觉得自己能够学好计算机。至少在学习Python的时候,还是相当得心应手的,这或许也归结于学校的课程对于学生培养的要求并不高的缘故。大一的时候成绩不好,Python是唯一满绩的课。

参加了两场新生赛,靠着自己并不高人一等的编程能力,居然得了两次二等奖。其中,第二次还是现场的第三名。这下,我一下子膨胀了,觉得自己是极其富有天赋的。

这种浮躁的心理,一直伴着我很久。相较于高中时期,大学的我能够真正静下心来学习的时刻没那么多了。有外力因素,也有自身因素。

大二上的时候,开始参加一些比赛。CCF考了两百多分,因为疫情的缘故,正好可以参加线上的CCSP,只做了40分,当时那场比赛国赛和省赛一起算,有分就有奖,60分就有国奖。大三的主力队员学长几乎无一例外都是金牌,而我是个卑微的铜奖。之后,参加了第一场线下赛,江苏省赛。没抱着能拿牌的想法,却拿到了人生第一块XCPC铜牌。上海站ICPC线上赛,打铁了。

之后,我经历了很长时间的挫败,一度怀疑自己是否是不是根本不适合打ACM。一方面,作为19届一开始排名比较靠前的队员,学长和老师都给予了我很多的期望。另一方面,鉴于自己的愚蠢和懒惰,又一直没能取得很好的成绩。直到大二下学期的时候,才堪堪上了蓝名。我也得过奖,比如CCF考了325分,天梯赛个人国二(大概是242分)……但这些奖又没什么说服力。

令我印象很深的是蓝桥杯。蓝桥杯,人称究极水赛,我打得究极烂。省赛,省二第三还是第四名。邝老师于心不忍,给了我一个珍贵的外卡参赛名额,然后就去打国赛了。优秀奖,也就是参与奖。

至今,我都不太理解我为什么只拿了个参与奖。回顾所有这些我参加过的比赛中,IOI赛制的成绩普遍好于ACM赛制的成绩,而如果是OI赛制,简直是烂中烂。但归根结底,其实还是自己学的很不扎实,写代码的能力也不够强。

大二下的一学期,队伍经过了重组,应该说是非常尽心尽力地训练了。我,孙孜斌,孙楠,我们的训练频率是一周两场,CF几乎每一场都打。到后来,国内赛区的ICPC和CCPC做完了,就开始做国外的。做不出题目的时候,常常感觉到焦灼,煎熬和痛苦。于是队伍命名为痛苦三人众。

我们的做题数在整个集训队里面都是非常多的。我是队伍里的计算几何选手,偶尔能出金牌难度的计算几何。斌哥是图论选手,也是主代码手和大腿。一次训练赛,有一道题他直接用带花树算法秒过了,而我并没有听说过什么是带花树,从那以后我对斌哥的敬仰如滔滔黄河连绵不绝。楠哥是数据结构选手,给他一道很难的题,让他一个人在那里自闭,他也能出。对于其他的部分,数学,DP,字符串等,我们其实并没有非常明确地划分,会一点,但并不精通。而思维尤其是我们的弱项。

而我擅长的计算几何,斌哥擅长的图论,直到痛苦三人众的最后一场比赛结束后,我们都没有开到一题。

蓝桥杯的第二天就前往湖南参加湘潭邀请赛。那是痛苦三人众的第一场线下赛。打得很不好,罚坐了两个小时,泪提铜首。在参赛之前,是自认为有争金夺银的实力的,与预期相差甚大。

沈阳站推迟到暑假举行,这打乱了我和小李在暑假初去东山岛旅行看海的计划,也直接让我期末周般紧张的节奏一直延续。

当我乘上前往沈阳的飞机时,我是害怕的。沈阳站的对手大多是985,211双一流高校的尖子生,而湘潭站的对手有很多普通本一本二的同学;沈阳站的获奖比例并不高,而出题风格与我们往常训练时候也有所差异。

如果这一次失败了,大三恐怕机会就很少了。

沈阳站的比赛是在体育馆举行的,我第一次看到那样整齐排列的机器,高高升起的旗帜和气球,播放着宣传片的大屏幕,体育馆前的红地毯……当我们踏入赛场时,仿佛是走上征途的战士。我突然能理解奥运会赛场上那些运动员们的自豪了。

从发挥来看,沈阳站打得并不好。结束的时候,我们几乎认定自己无缘银牌了。我们三人哭丧着脸,相顾无言,沉默着。同行的其他队伍的队友看到我们,觉得空气几乎凝滞了。

可是我们足够幸运——有76支队伍能拿银牌,而我们排在第74。

滚榜到铜牌前列的时候,屏幕突然坏了。这时候我们的紧张升到了极点。主持人开始继续报铜牌队伍,一个,两个,三个……十个……没有,没有我们,还是没有我们。

我的紧张一点点积累。当他念完的时候,所有的紧张都化为了一点点的希冀。我忍不住颤抖着……

银牌——痛苦三人众。

最后的最后,我们不再痛苦。

这一年是值得的。

13. 黄金时代

我们处于人生的黄金时代。

王小波在《黄金时代》里写道,“那一天我二十一岁,在我一生的黄金时代,我有好多奢望。我想爱,想吃,还想在一瞬间变成天上半明半暗的云,后来我才知道,生活就是个缓慢受锤的过程,人一天天老下去,奢望也一天天消逝,最后变得像挨了锤的牛一样。可是我过二十一岁生日时没有预见到这一点。我觉得自己会永远生猛下去,什么也锤不了我。”

是的,哪怕我们已经能够预见——时间会有一天不可阻挡地将我们变为平庸的模样,但在这个岁月,我们仍然要充满希冀地奔向自己追求的未来和远方。

上面的两篇文章,是我在我自己二十岁的生日,以及沈阳站拿牌的那天晚上写的。他们是我心里的火。

我渴望爱情,让灵魂在燃烧中碰撞;

我渴望光荣,用理想让荆棘开出花朵;

我渴望远方,渴望一场说走就走的旅行,渴望从未见过的风景。

我们应该勇敢地追求自己的悸动,用血泪和汗水铸就人生的华章。

第三章 诗酒趁年华

这里记录一些我在过去随笔写下的文字。

14. 长夜

长夜里

月光下是不变的星空

月华黯淡,星野低垂

远方是死神的圣所

像婴儿一般

黑夜安宁

在这里我经过你

15. 一首诗

火焰!燃烧着云朵

鲜花和羽箭!

丘比特死去了!

只埋葬了,埋葬着

彩虹的碎片

地域的界线,白骨的灰屑

16. 诗贰

一声巨响

浓烟遮住了天空

绝望的呼号

钢筋压倒

重生、重逢、重生、重逢、重生

黄色的汗液,红色的泪点

为什么被

冷漠的人们取笑?

这悲欢、天空下的悲欢

从不相通

17. 宙斯

偶尔也会想起,曾倚着冰冷的墙壁,

听着雷鸣电闪和狂风的咆哮,

把温暖握在手心里。

偶尔也会想起,多年前仰望星空的夜里。

将答案诉诸未来,向往霞光和云彩,

等到漫天的星辰在第二个黎明醒来。

奥林匹斯山的冬天太冷,

而春天又来的太慢,

神殿上的魔鬼灼烧着焦虑。

拉车的牛马已经累死在了夜里。

而太阳还不曾升起。

18. D74(高考前第74天)

晚上和同学骑车去绿地吃KFC。

大意,没有锁车,丢了两辆车。

差点没能回来。有波波借我的卡,我把卡借给同桌,让他骑回来。我后来搭了同校学生的车,赶上了晚自习,迟到了两分钟。

真的很愧疚,似乎是我的错吧。要不是我坚持随便停一停车赶紧吃饭,我们把车都锁好,就不会这样。

同桌很着急,我们担心因为丢车要赔很多钱,不知道怎么办,我也很慌。但我要表现得坚强一点,安慰他。很对不起他,把一次快乐的旅程变得糟心。

我考了年级第九,但是估计物理没考好,要引以为戒,再接再励。

还有,八班和廖怡玮一起的那个女生到底是谁?每次看见我都笑,而且笑得很大声很夸张,当着我的面说我一个人站在那里好傻哦。我说,能不能不要当面说我傻,结果她就背过去又说了一遍。真是…缺乏教养。真的是无话可说。

无所谓,反正我也不会和这种人有什么交集。不配我生气。

晚自习的时候,看见真的很红很红很红的月亮。惊了!超级红,像是染了血一般,惊心动魄的红。

我只想一个人承担所有的苦痛,把快乐留给你们。

我也没还车,同桌也没还。我知道他最近不顺意,我非常抱歉。

19. D54(高考前第54天)

第一次在周末晚上上晚自习。

20:51

按说不应该浪费时间写东西。毕竟高考已将到来,时间是永远不嫌多了。但我终究是个懒散而不自律的人,最近压力真的很大,写一些来发泄情感吧。

虽然这么说,又不知道该从何落笔?近来波澜壮阔的内心世界吗?总是不如意的考试成绩吗?亦或者,四月十四日晚上绮丽的晚霞吗?无所谓,因为没有人会看到这些碎碎念。

我发现,不知不觉间我也从“天赋派”变成“努力派”的一员了。可是,我是一个两边不讨好的人。论天赋,智商,碾压我的不少数。而匹敌、优于我的比比皆是;论努力,我花闲功夫来干闲事就是我并不努力的最好明证。

你们看到我的光芒,可曾也看到我的狼狈呢?你们看到我的洒脱,可曾也看到我在人后偷偷流泪呢?你们看到我的勾肩搭背,可曾也看到我的孤独寂寞和无处倾诉呢?

矫情,这个词太适合我。

但是我在你们面前装作一副坚强的样子,我私底下矫情又有什么错呢?谁又有资格来怪罪我呢?呵,在这个信仰崩坏,人情淡漠的社会,谁又有闲心来管别人呢?

我想能为别人做一些事,哪怕是微不足道的小事。我想去献血,想去支教,想去贫困山区帮农民脱贫,想投身于共产主义的伟大事业。可是我没有勇气,也缺乏能力。然而我想为自己而活的时候,有发觉生活终究少了些崇高感和神圣感。

也许是寂寞太久了吧。会有某个人陪伴我度过剩下的岁月吗?已经习惯了一个人。

20. D49(高考前第49天)

同情→伪善、优越感→傲慢

爱情→欲望、虚荣、贪婪、虚伪

懒惰,趋利避害

孤独感→对自己的认识不深入,卑怯、懦弱

克服傲慢,方能共情

克服虚伪,才能真诚

克服贪婪,虚荣,才能自足,才能坦然面对

克服欲望,才能发自心底地爱别人

克服卑怯懦弱,和自己相处,了解自己,才不会孤独,反之,身处闹市亦如居冰窟。

克服懒惰,才有动力,才有机会成为更好的自己。

直面,承认自己的丑恶,

接受它们而时刻警惕

积极向上,努力改正

让自己的生命更加圆满,不留有缺憾。

21. 高考后的日记

高考失利,遭遇了人生最大的一场打击;自己做作,失去了一个能说话的很好的朋友。不确定的未来变得黯淡,失败的人际关系又为破碎的现实雪上加霜。

七月的第三天,在静默中体验孤独。

很难向别人解释自己的感受,那种梦想幻灭的绝望。

很难去将自己脆弱的灵魂暴露在阳光下让别人评头论足。

能够说话的人太少,其中能够感同身受的人更少,其中愿意听我倾吐苦水的人更少。即使真的存在这样的人,可以称得上是知己的存在了,但是我又怎么忍心让别人承担我的负能量呢。

想成为太阳播撒阳光。

要找寻明亮的方向。

我每天背单词,练字,读书,学习摄影,锻炼身体。多少不能算是虚度光阴,也能让我在忙碌之中感到充实。

然而夜深人静躺在床上,寂寞又像蚂蚁噬心一样让人难以忍受。

排遣是一件很简单的事情,在暑假的开始几天我就是通过放纵来麻痹自己的神经。但是这样真的好吗,我不能止住地叩问自己。

很想谈恋爱,其实只是渴望有一个人陪伴。但是我值得被爱吗。

我已经沉浸太久的孤独。

我已经明了我无法摆脱这深渊。

我要在这深渊里,看到盛开的花。

我不会沉沦。

加油吧。

22. 且将新火试新茶,诗酒趁年华。

如你所见,这章摘录了一些我过去的文字,从高中时期一直到大学时期。

从不知什么时候开始,我就有了用文字来记录自己的生活的习惯。我偶尔写日记,但大部分时候只是随心写两句不知所谓的话,或是诗。

我的感情是那样的隐晦,以至于那些文字于今天的我来说似乎都是读不懂的。

而我的感情又是那样的明显,在这些仅仅留给自己的文字中,我不停地怨天尤人。

人的生命真的好像是现在的自己在不停地杀死过去的自己的一个过程。

如今的我,和十年前的我,有一分一毫的相似吗?

我重读过去写的文字,不可避免地又觉察到了自己的幼稚,并为此感到羞恼。然而我仍然要把它们放在这里,并且也让你能够一窥我的过去。

我喜欢思考那些哲学问题,而思考他们需要很强的自我意识才能够让自己不那么迷失在缥缈虚无的思想困境中。现在看来这导致的后果,就是我始终存活在自己的世界中。我把自己囚禁在了自己的世界里,从来没有接纳过别人。

过去的我并不明白这点。过去的我,从来不由衷地相信有人能够理解我。我以为人和人是必不可能相遇的孤岛,而这就是所有人注定的命运。原来这只是画地为牢而已。

我把这些文字放在这里,我终于可以敞开胸怀拥抱自己,也接纳自己。即使我仍然称不上多么成熟,但我已经明白自己过往的所有失败和挫折,所有不甘和泪水,浸润在泥土里,都最终会结出果实。

我感谢我的那些挣扎,感谢我做出的那些不甘于平庸的努力。我感谢一路上我遇见的所有,给我以帮助,或是与我同行一路的人。

我相信在这路上少了任何一个经历我都没有办法变成现在的我,我也绝无可能认识现在的你。

读这些文字,你可以看到我的挣扎和痛苦,也可以看到我一次又一次在跌倒后又自己激起无比的信心和勇气继续向前。你可以看到我始终在向变得优秀而努力,我相信我的这些努力最后都会实现。

年轻是一件多好的事情,不是吗?

  • Copyrights © 2020-2024 Rye
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信