0%

今天配置 VS Code 中 include 路径时,想查看下自己 C++ 相关的 include 文件夹在哪,于是使用下面命令查看。

1
gcc -v -E -x c++ -

但它竟然报错:

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

震惊,使用 gcc --version 发现报同样错误,这意味着什么,意味着我整个 gcc 不能使用了,这还了得?

于是上网搜索解决方法,大多数人都说使用 xcode-select --install 就行,我试了试,还真解决了,大概几分钟就 OK 了。

唉,看来 MacOS 还是有点坑的,大家都说之前自己系统升级失败了出现了这个问题,我之前也是升级失败了。

近来失眠,总会想起一些往事。之所以起这个题目,是因为最近在 B 站看了一些老男孩歌曲的视频,又让人想起一些过去。

最近失眠的时候,我总是想起去年八九月的时候,我也是一样的失眠。忘记了去年八九月的时候,会不会一样幻想一年后的现在。像我这样的人,应该会吧。记得这个月第一次失眠的时候,我突然坐起来,脑子中想到如今已是九月,就兀地想起去年九月时候的事情,六七八号的时候来深圳面试,经历了二十多天苦苦熬人的等待,经历了不知多少次的担忧纠结,终于在 29 号的时候收到了 offer 电话。也就是一年前的 今天 昨天 ,(啊,居然已经过十二点了),那个日夜担忧的事才得以结果,那么长久的梦想得以实现。一年的时光飞逝,在我还没反应过来的时候,就已经到了一年前所幻想的现在。

阅读全文 »

最近腾讯内部 bbs 上有个问题是 “你是那个十五、六岁就偷偷学计算机的中学生吗?”
记录下自己的回答

收到封培认识的小伙伴的邀请,看到这个问题一时竟有些激动得说不出话。过往昔事一件件浮现在眼前。

我出生在衡水的一个村子中,后来四五岁的时候为了上学搬到了附近的小镇上。大概二三年级的时候第一次接触电脑,感觉第一眼看到时就好奇计算机是怎么实现的,怎样才能在电脑上做出自己想要的功能。这种好奇逐渐在心中发酵,成了其它好奇无法替代的梦想。可小时在的村子与城镇在信息上都比较闭塞,周围也没有人听说过编程一词,因此当时也一直不知道应该如何写软件。我也没能赶上许多回答问题者所说的小霸王时代,小时候好像完全没有听说过这种东西。还记得小学时候在百度搜索 “怎么编程”、“怎么创造软件” 类似的问题,却总找不到答案。那个时候还没听说过 C 语言,完全找不到学习编程的入口。假如当时有听说过 C 语言,在百度搜索 C 语言应该会好些吧。小时候虽然未能开始学习编程,在起跑线上晚了一步,但编程的梦想却在心底深深扎根。那时候还沉迷在从家里偷钱去网吧打游戏,跑跑卡丁车、QQ 华夏、QQ 音速、魔域、流星蝴蝶剑等等等等。

初中时候去堂哥家玩,偶然间发现了一本 C 语言的教程书。谁能想到堂哥没能学会的东西,却给我打开了一扇大门。我偷偷地把这本书带回了家,现在看来,这本书的质量并不高,讲东西也很模糊不透彻,它却让我了解到这世上有一种叫 C 语言的东西,就像一心想造房子的人知道了这世上有锤子钉子这些工具。我没能看懂这本书,因为它讲解知识点实在是差到极致。我在百度上搜索 C 语言的教程,找了一部教学视频看。当时的老师还是用的 WinTC 编译器,写着较古老的 C 语言代码。我的第一行代码是跟着这个老师写的,第一行代码写的是什么我已经忘记了,反正不是极具仪式感的 hello world,现在想来有些遗憾吧。我跟着视频学了几节,却觉得这老师讲得也不好(也可能我没有认真听),讲到循环那里的时候已经完全不能理解。记得当时还没能理解 = 号是赋值的意思,交换 a, b 值的那段代码 t=a; a=b; b=t 让我崩溃,a b 两个不同的值怎么会相等!我在这边放弃了,没有继续看他的视频去学习。

阅读全文 »

如果你能看到这篇文章,说明我在 Mac 上配置博客成功了。

Blog 迁移测试

Github Actions CI 测试

今天,我尝试了 Hexo 多电脑协作,这是一篇测试文章。

刚入大一的时候,就幻想着大四毕业时写一篇文章,以记录大学期间的经历、所见所遇、所想所感。名字都想得差不多,就叫《四年一梦》或是《金陵四载》。这个心愿就像心结一般,一直在我心头,大学期间几次忍不住想写,都被自己劝住。而如今已经毕业,那些大学的记忆却也逐渐模糊,单能凭着点点滴滴去回忆。随着开始工作,想写这篇文章的心不再像之前那样炙热。“此情可待成追忆”,这样的情况下写这些文章总归有些遗憾,但自己仍是想写这篇文章,感觉这样才对得起大学四年,对得起当年自己的这般心愿。

四年前,我怀着如今已不再说出口的心念来到南京。怀着对一切美好事物的期待与猜想,进入了大学。如果你问我为什么来南京,我仔细想来好像也没有什么特定的原因,或许是一直不解三毛在《但有旧欢新怨》中为什么要别人给她带雨花台的小石头,怀着这份好奇想来南京找找答案,也或许是几次考试考了高中第七八名心有膨胀想试下南大,也可能是着了那句 “江南佳丽地,金陵帝王州” 的迷。我更爱将来到南京称为命中注定。因为它之前并不是自己苦苦追求的东西,而后又机缘来此,只能这样解释。

没能考上北邮到底是当时意难平,但印象中自己好像并没特别难过,好像是很快地便接受了现实,因为自己觉得只要自己喜欢与努力,在哪里都有着机会。也因此,我从未把大学当成享乐的地方,一开始时也发圈说 “愿我的大学,比高中更努力”。虽然现在回看,事实并非如此… 这种状态下的大一上是可以想象的到的,那时的自己多少有些拼搏向上、好好学习的态度,想要洗刷一下耻辱,对待课堂和考试也算认真,也因此在大一上绩点能上四或四左右,专业排名第一二的样子。那时的记忆已经模糊,现在却是清晰记得一次与朋友外出时看到路牌,恍惚间将上面标的 “南京邮电大学” 想成 “北京邮电大学”,一秒钟反应过来后也只是耸肩笑了下。我也还记得在一个大雪纷飞的周三下午,我旷课冒着风雪去学科楼询问加入 ACM 的事情,到达时也几乎一身携着雪花。那时的我还很腼腆,那节课也是我大学为数不多的几次旷课之一,课程是我喜欢的《中国近现代史纲要》。那时也感觉自己很有希望。

大一上期末考完后,觉得这所大学的教育实属垃圾,某些作业、期末考的水平几乎没有。也在这时,突然意识到,如果自己按着学校的规章走,当个乖学生,多半没有啥前途。因此在后面的大学生涯中,从大一下开始,直到毕业,除了少数的几个我觉得重要的专业课程外,我几乎没有听过课。我很难去说我这种行为是明智还是不好,但于现在来说我并不后悔大学时的这种选择。我后悔的是在大学期间,我并没有好好地玩或是好好地学,于一种收获不高的状态度过了四年。如果我好好地玩,我肯定会很开心;同样,如果我好好地学习,肯定能学到很多知识。但实际上,我玩的时候考虑着其他的事情,学习的时候也不集中,有时也只是表面上学习,全然没有小学时的学习效率,没学玩,也没玩好,这该是这四年最不该的事情。大学有一段时期(大多处于大二的时候),自己基本上很迷茫,因为课堂的东西没有学,在自己的算法学习上也没有很好的成绩,每每想到家里,不知道该如何面对。每到这时候,我总会想起大一上自习室里挂的那句话 “梦想无论怎样模糊,总潜伏在我们心底,使我们的心境永远得不到宁静,直到这些梦想成为事实才止”。

坦白而言,在 ACM 上我并没有努力多少,能获得成绩很大程度上是靠两个队友大腿。这是我很后悔的地方之一,也是我觉得很对不起两位队友的原因。我也不时想在 ACM 上多多努力,每次都因自己的惰性以及其他一些诸如没有整块时间类似的原因没有做成。如果真能在 ACM 好好训练地话,我应该会更厉害更自信些吧。

一直觉得一个人时才叫旅行,与他人一同去应该叫做玩耍。因为我在情感上向来比较敏感,悲春伤秋,多愁善感。或许会因看到一块石头,而突然心生怜悯,痴痴凝望许久;也或许登高思远,想象着古人登高时的万千感慨,久久不能回神;也或许触摸着城墙上的青砖,回忆着千年来的历史变迁,白衣苍狗,沧海桑田,一一穿越历史隧道,来到眼前。这些情感,大多只允许我一人在外时唤发。与人游玩时,多半要关心别人感受,只看看身边风景,也就不会有着以上事情发生,一些遐思也便不见,在南京出去玩的意义也就少了大半。我印象最深得还是初入大学十一时的第一次外出,我揣着种种不安走出学校,坐地铁来到了心心念念的雨花台(现在还保留着在南京取得第一枚地铁币时的照片)。在我心中,我一直有意地去不想雨花台是烈士陵园、纪念馆的一面,总会美好地认为它是那个 “云光法师讲经,落花如雨” 的雨花台,毕竟,它在我来南京之前,象征着种种美好。我也偏爱将雨花台的雨字读作四声,虽然心知这是不对的。这一天,我在雨花台出来后,又穿越了长干桥,走过中华门,最后来到了夫子庙秦淮一带。这应该是我大学四年里步行最多的一天。这是我记忆最深的一次独自游玩,每每想来都觉得美好。于雨花阁上望远时的无限幽思会不会与几年后登赏心亭时一样呢?

大学最先加入的社团是七醉阁古风社,纵使那时候它还不存在。那时候我们幻想着这个社团的样子,想着我们痴迷的中华文化。后来种种的因缘我与这个社团联系愈来愈少,却一直记得大学一开始时与阁主玩耍的日子。古风社成立后偶然间读到其章程有一句 “看天上云舒云卷,于心间静念坤乾”,一时间有些恍惚。我因古风社结识了国学社,结识了这个陪伴了四年的社团。国学社于 16 年建立,我于 16 入学,开学便加入了社团,谈起这个,学长学姐会说我是陪社团最长的那个人,每每听此我都会有种自豪感与幸福感,想来也是一种缘分。很有幸遇到这样一个社团,也有幸遇到社团中的每个小伙伴,他们身上实在有着我太多要学习的东西。每次与他们吃饭、学习、游玩,都会有家人的感觉。我们一同晨读、吃早餐、开学习会,一同开办讲座拜访老师,一同吃过辛香汇、川西集市,一同去过红山动物园、金陵制造局、鸡鸣寺、玄武湖边、赏心亭等等等等。思君若汶水,浩荡寄南征。很是怀念那些与大家一同念 “以义正信,达己达人” 的清晨。也因社团,自己有幸接触到杨汝清、吕建福等先生。记得邀杨汝清先生来南邮做讲座时,向老师询问 “理科与国学经典” 的问题,杨老师数语将我点醒,自此自己的整个知识才有体系。我从先生那学会弟子礼,却从没独自向先生行礼。在江南学院的一个清晨,我与先生踏雪相遇,“老师”“哎”,没想到这是与先生的最后一次交流。先生过世时对先生行弟子礼,所遗憾者未能有机会参与先生的围炉夜话。

大学做的最正确的一件事,或许就是参加 ACM 校队了。想要打 ACM 的原因想来不过是内心的不甘和想证明自己。高中时就听说过 NOIP 竞赛等等,看大家口气像是很厉害的样子,那时就想后面可以试试看。而后高考不如意,更是心存不甘,想找个东西证明自己的实力。雪天去找老师询问加入 ACM 事宜的情景前面已经说过,很是喜欢那时候的自己,不畏风雪,充满希望。询问到的答案或许并不如意,“考试范围是什么”“计算机能解决的都有可能”,稍有犹豫后内心却依旧渴望、坚韧。通过测试,加入校队的历程也并不一帆风顺,但最终总归混脸熟进去了。ACM 的训练充满着痛苦,但也伴随着收获与喜悦。感谢那个在某次训练后差点哭着回宿舍的自己,假若不是当初的坚持,梦想又怎么触摸现实。去训练的路上或许伴随着饥饿,伴随着夏日的暴雨,或许还伴随着还在生气的女友,伴随着还未通关的游戏,伴随着糟糕的心情。但同时伴随着与荷的约会,伴随着与队友吹逼的期待,对题目的期待,也伴随着对未来的期许。受虐与痛苦的同时,也滋长着一份幸福。ACM 给了我很大的勇气,这么难的比赛我都来过经历过,做那些简单一些的事情也肯定没问题。在招聘时令很多人苦恼的笔试算法题虽然也会给自己带来一些压力,但总归是在自己的技能树上,有着更多的信心。我最终能够取得心仪的 offer,可以说是全靠 ACM 了。不然,在一所普普通通的双非学校,要做怎么的项目才能入职 BAT 呢?

要说金陵的风情,全在秦淮一河。六朝如梦,绮糜奢华,前人之述备矣。今人不见古时月,而秦淮河水却流淌至今。初见秦淮之时,脑海中不得不翻涌起那句 “当时年少春衫薄,骑马倚斜桥,满楼红袖招”。伫立失神,却惊地想起这里过往千年间,曾响过后庭曲,曾飞过堂前燕,桨声灯影里,一边是天下文枢,见证多少失意欣喜,一边是茶楼酒馆,看过无数相遇离别。诗人之眼千年,我于此开始品人间冷暖。无言的流水中记载着无数的往事,或金戈铁马,或两情脉脉。我险些落泪,唉叹句 “人生自是有情痴,此恨不关风与月”。由秦淮向外扩散,是秦皇瘗金,王气葱葱;是钟山风雨,石城涛声;是逶迤绿水、迢递朱楼、亭台水榭。有中华门、朝天宫;有鸡鸣寺、玄武湖;有赏心亭、明城墙;有栖霞山、望江楼。斜阳晚照,往来行人悠悠;巷陌寻常,唤起炊烟袅袅。过去不知幻想过多少次氤氲的江南烟雨,如今身处其间,也可谓是良辰美景赏心乐事。可惜学浅,长情蕴于中而文字难摹心意,想尽万千语句最终只能托于 “我爱南京这座城”。

大学唯一做的一件全心投入的事,便是与时光谈恋爱了。这是确立关系以后优先级最高的事了,没有其他紧急事的话便是一切给时光让路。大学发过许多秀恩爱的说说文字,可现实却也有难熬的日子。我们的故事太多,足以另开一篇文章,几番波澜,几经辗转,终于有了结果。那句 “熬过异地,就是一生了”,支撑着自己走了很久。过去每当难过时,想起此句,便觉得又有了坚守下去的希望与动力。尔后结束异地,虽然不是没有丝毫问题,但也算是 “宜言饮酒,与子偕老”。开心的是,我们毕业后订婚啦~要说两人间最温馨的事,它并不是一桌一饭,不是某次携手游玩,也不是某次含情脉脉。而是一次晚上回家时屋里传出的灯光,忘记了当时是昏黄还是明亮,于黑夜中发光,突然感受到它意味着期许、意味着等待,让我感受到温暖、希望与责任所在。感谢过去我们两人彼此的勇气。

大一大二时,几乎每天都盼望着毕业,可到了大三下,想起毕业突然有些伤感。大四时想着一定要好好珍惜,毕业时与好友们好好告别,可天夺人愿,大学草草地画上了句号,带着些许遗憾。6 月 19 号,在深圳机场候机回南京毕业返校,构思一件自己未能完成的作品时(没能完成终究有点遗憾吧~),突然想起下面的句子

如果说有什么愿望的话
那么
一愿郎君千岁
二愿妾身常健
三愿如同梁上燕
岁岁常相见

再见,南京。

6 号的时候来往深圳,总要有文案的,可无奈心情并不是很高涨,心里有着片片乌云,想了一天加一晚上都没能想出个合适的。一方面是突然不舍得离家,另一方面是上午回家放鞭炮,吓到了一只很黏我的猫咪,它不再理我,我也没能好好跟它说再见。乌云久久不去,心结久久不开,直到临走也有些不甘心,所以呀,文案一直没能想出。直到将临深圳时,我睁开带着矇眬的眼睛,看到窗外片片飘云,心中一下想到了李贺那句 “少年心事当拏云”,心里也一下开朗起来。是呀,少年应有凌云般的志向。一切的困顿随它去吧,生活总会变好的。mark

阅读全文 »

碎碎念一

如果这段时间问我最喜欢的节气是哪个的话,我一定会说清明。好像在中国人观念里,清明是一个略带丧的节日,可在我眼里,清明附近才是真正的春天,它基本褪去了春寒料峭,脱下人们繁厚的冬装,浴乎沂,风乎舞雩,万物都是欣欣向荣的样子,春和景明。

我是一个从小就向往城市的人,金陵三载,历经些许事后,这次回来,我好像格外喜欢家乡这片土地,爱她平坦辽阔,爱她春日里充满生机的样子,心境不同了吧。这次在家我也额外向往着去田野里走走,像是把二十几年来的过往于这片土地上回忆。但如果让我选择的话,这个年龄的我还是会去城市吧。肉体选择城市,灵魂回归自然。

在家的日子里总是和过往离得最近的日子。刚回家时与父亲带着熊猫去运河玩,走过胡同时,看着墙上孩子们稚嫩的字迹画迹,心中不禁有些许长大的后悔。在小时我的眼里,这些东西应该是乐园吧,墙上孩子们歪七扭八画的车,就是世界上真正的车;画的奇奇怪怪的生物,是我未曾见过又极力想了解的新世界;写的数学题目,描出的田字格,也像是那个年龄生活的映像。可我现在长大了,终不再完全是小时候那份心情了,只有怀念。这些年,我收获了什么,又失去了什么呢。

胡同里没有看到孩子,是因为画上这些东西的孩子们也要长大吗。风在胡同里回旋着。

碎碎念二

今天下午开班会,讲了返校以及毕业事宜。本来早就知道了一些事情,几个月里也早就走过了那些遗憾与伤感,但看着朋友圈里的一些遗憾,又不得不想起这些碎碎念。

关于大学,关于金陵,我有着太多遗憾,没想到转眼已匆匆到了毕业季。大学里,我好像还未像寻常学生一样享受大学时光,不知道会不会与刚入大学时许下的那句 “愿我的大学,比我的高中更努力” 或者林语堂那句 “梦想无论怎么模糊,总潜伏在我们心底,使我们的心境永远得不到宁静,直到这些梦想成为事实才止,像种子在地下一样,一定要萌芽滋长,伸出地面来,寻找阳光” 有关。大四上学期突然意识到这点,像是哺乳期的婴儿想要喝奶一般,珍惜着最后的一点点学生生涯。却未料到,最后这一段时光,也要被疫情无情掠去。前些天父亲才讲到他告别学校的经历,恍惚间却轮到了我。

在南京,我还有着太多想去的地方。一开始来到南京,我只像一个孩童,在里面嬉戏,没有付诸太多情感,可越往后我越知道,我很早就已经爱上了这座城市。与女朋友异地时,精打细算着金钱,计划着相见的日期,也便没有太多地光顾这座城市;女朋友来南京后,精打细算着生活,计划着柴米油盐,与这座城市成为擦肩过客。一梦醒来,才觉自己血液着已流注着南京的气息。本来打算大四下没有课时,在这座城市里好好看看,与她度过我大学里最后的温存。夫子庙的科举博物馆,我从大一就想去呀,可 80 块的门票让我犹豫再三;莫愁湖我还没有去看过;还有,我好想再看一次鸡鸣寺三四月份的樱花呀,还想再看看春日的秦淮河,发朋友圈的文案我早就准备好了,“这三春水暖,俺也曾睡过风流觉”(改自《桃花扇 余韵》);还想和国学社的朋友们围炉夜话,备好羊羔美酒,与你谈谈心;6.23 在保利大剧院还有于魁智李胜素出演的《龙凤呈祥》,想着在深圳实习赚点钱,有机会的话和家里人再来南京看出戏,位置买好一点;还想……

这里面很多愿望,很多都没有机会了吧。

遇到问题

最近使用 C++ 遇到了中文处理问题,今天下午想测试 C++ 宽字符使用时,发现如下程序并不能如愿输出汉字。

1
2
3
4
5
6
int main()
{
std::wstring wstr(L"你好");
std::wcout << wstr << std::endl;
return 0;
}

在网上多处搜索处理方法后仍不能解决,于是自己探索了一波。收获蛮大的,于是记录下。

该文章程序及结果皆在 Linux 环境下。

阅读全文 »

面试时有一个经典问题是 “在构造函数和析构函数中能否调用虚函数”,准备面试时,我还没有系统学习 C++,故而硬背的答案:不能。记得腾讯技术终面的时候面试官也问了我这个问题,我较为熟练地说出了自己的答案,如在构造函数中能否使用的回答大致为:

不能。我想从两个方面来回答这个问题。首先一个对象的虚函数表是在其构造过程中生成,构造过程中还没有完全生成好,在这个角度看在构造函数中调用虚函数是不合理的。第二,构造过程中,编译器按照从基类到派生类的顺序依次构造,在一些阶段处于未完成状态,这时编译器会将我们的对象看做是其当前状态的类,而非目的类的当前类阶段,故不可以调用虚函数。

现在几天在看 《C++ Primer》,打算系统地学习下 C++。在 P556 页中,刚好讲到了这个问题,读起来总有些不懂的地方,于是特意上网搜索了下,搜到了份我感觉不错的代码,在这解析下。

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
#include<iostream>
class A
{
public:
A() : val(0) {test();}
virtual void func()
{
std::cout << val << std::endl;
}
void test()
{
func();
}
int val;
};

class B : public A
{
public:
B() {test();}
void func()
{
++val;
std::cout << val << std::endl;
}
};

int main()
{
A* p = new B;
p->test();
return 0;
}

自己运行了下,其结果为

1
2
3
0
1
2

解析下程序,我们首先看到在 AB 两类的构造函数中都调用了非虚函数 test(), 而 test() 函数功能则是调用虚函数 func(), 在 AB 两类中都定义了自己的 func 函数, Afunc 直接输出 val, 而 Bfunc 则先自增 val , 而后输出。

main 函数中,A* p = new B 构造了一个类 B 的对象,而将其赋给基类 A 的指针。在构造 B 的对象时,我们依次调用了 A 的构造函数和 B 的构造函数。A 的构造函数向 val 赋值为 0,并输出它,这是结果中输出 0 的缘由。在 B 的构造函数中,我们调用 this->test()test() 函数又调用了 this->func(),故调用了类 B 版本的 func() 函数,这是结果中 1 的来源。

main 函数中 p->test() 语句,由于 test() 为非虚函数,故静态绑定到了类 Atest() 函数,test() 函数调用 this->func()p->func(),为动态绑定,故绑定到类 Bfunc() 函数,故输出 2。

如此看来,在构造函数、析构函数中调用虚函数是有规律可循的,但较易出错。假若我们要使用时,一定要理解其中机制,合理谨慎设计。如果让我再回答这个问题,我较倾向回答为谨慎使用、尽量不使用。