博客主页 😁
分类

龙舟

下的文章

Count:

计 0 篇
没有找到内容
关于掘金Node+React实战的一些看法
最近正在跟着稀土掘金的课程《Node+React实战:从0到1实现记账本》一文学习前端开发。在学习的过程中有收获是肯定的,在这其中也产生了一些作为初学者的看法。下面就目前的学习进度而言谈谈自己的看法。
2023年度总结
很快又到了年末,今年的年终总结如期而至了,除了要回顾一下今年什么做的好什么做的不好,也要寄希望于明年,做一些明年的打算。希望今年的总结能为即将结束的2023画上一个句号,也为2024开一个好头。学习/知识管理今年的主要目标就是考研了,不能说满满一整年,最起码也有大半年都围着这么一件事情转了。说实话,一年的备考下来,让我明白了,网上那些学长学姐经验什么的,听听就好。真正在备考的还是自己,所以指定一份适合自己的高效方案才是最重要的。但如何“适合”,如何“高效”却很难把持。可我要说的还是,不能一味听学长学姐的建议之类的,重点还是要回归到自己所面临的问题上,要根据自己情况有所侧重。现在考研已经考完了,可能这场战斗下来并没有丰硕的果实,但是这段过程确实让我受益匪浅。在孤军奋战备考的时间里,我学会了怎样和自己相处,怎样耐得住孤独和寂寞,怎样去独自解决一些问题。更重要的是,我感觉考研磨练了我的韧劲,就是一种忍受力,让我的下限降低很多。同时我也发现了很多原本觉得很有意思的事情其实是浪费时间的,比如玩游戏和看视频。我考完研后本来想好好玩玩游戏,但真到打开游戏的时候却又觉得有些索然无味了。当然一定程度上的娱乐和消遣是必要的,但不能让它们充满自己的生活。今年备考过程中,积攒了很多想看的书和想看的电影和动漫,但碍于考研就一直没敢下手,现在也可以慢慢拿出来品一品了。接下来的一年里,我的目标是最少看完15本书(不是网络小说),然后坚持练字,培养整理收集到的知识和做笔记的能力,争取学会能够搭建属于自己的清晰的知识框架,并且能够高效利用起来,在此期间要搭建属于自己的稳定的多端的 knowledge kit。健康/锻炼今年参加了四场龙舟赛,两场在福州本地,一场在厦门,还有一场在云南。也做了两场龙舟赛事的裁判。总的来说在竞赛方面还算不错,也有拿到一点小荣誉,也去了别的城市观光游览体验了一番,同时还从赛场上走到赛场下,扮演了一下裁判的角色。有点可惜的就是今年因为考研的原因,错过了去内蒙古的冰上龙舟的活动,希望以后还能够有机会参加这种活动吧。今年有幸还作为龙舟队队长接受了东南卫视的采访,虽然我平时挺善于交际,但是面对镜头还是好尴尬哈哈哈。今年年中开始因为决定专心备考,中断了坚持了两年多的健身习惯。好像也就是从终端健身后不久,我就开始犯很严重的鼻炎,到现在还没有好。而且11月底12月初的时候还有很严重的过敏,从先开始的几个小点到后面大半个身子都红的发紫而且又痒又痛。做检查抽了7管血也没查出来到底是什么原因,最后得出的结论是因为内分泌失调而引起的过敏性荨麻疹。不过那段时间确实是天天熬夜,不锻炼,压力也大。这可能是我目前得过的最严重的病了,好在现在身上的不适的症状已经没有了,身上也是只有的皮肤颜色有点黯淡,之后多吃些维生素帮助色素沉降就好了。接下来的一年要注意坚持锻炼,恢复身体机能。昨天去了趟健身房发现自己连半年前三分之一的重量都推不起来了,而且也有了小肚子。今年务必加强锻炼提高身体素质,坚持健身。今年的半年目标是回复到原来水平,年度目标是增肌到70kg,坚决避免虚胖。情绪/精神状况今年我自我感觉我的精神状况不是很好,情绪方面也偶尔有失控的状况。但我能确定百分百是由于考研所引起的,所以之后也是可以避免的。今年情绪偶尔失控了两三次,主要是焦虑和内耗,这些我都有明确的意识到,但是没有合适的解决方法,纯靠熬过去。精神状况的话也没有以往那么积极乐观,总体来说趋于平稳,但有时候会有些消极。后面我会尽可能让自己的情绪更加稳定,也尽量保持积极乐观的心理状态。我也得去学习一些如何化解情绪波动、缓解内耗和应对情绪临界的方法,尽可能保证自己的心理健康,同时要加强对自己心理状态的监控和记录,并不断强化自己的情绪耐受力,提高情绪阈值。兴趣/创造我个人是对一些嵌入式开发和计算机程序设计以及一些平面设计感兴趣的,但今年实在是没有时间投入进去,我的个人博客更新频率也很低,后半年基本没有更新。之后我会尝试分配出一些时间去培养这种兴趣爱好,并创造性地做一些小玩意或者进行一些改装。目前的初步设想是在租的房子里尝试一下客制化智能家居,3月开始慢慢进行改造,个人预计8月初能有一个初步的成效,主要侧重与兼容性和成本节约,还有实用性。还有就是博客更新方面,我也会尽可能去提高博客更新频率,内容的话还没有一个明确的定向,到时候再看。个人生活/家庭说实话今年家里给予的支持是至关重要的,不管是经济方面还是精神方面。我的母亲担负起了主要角色,我与她的交流也较为频繁。她始终支持我做出的决定,总会无条件地赞同,支持。在我产生开摆的想法时候会鼓励我,但在知道我劳累的时候也会劝我休息。我跟她提起我可能考不上的额时候她会安慰我说考不考得上无所谓等等……可能正是因为她对我的无限的宽容、支持和理解,才能让我坚持到走上考场完成考试,不然可能我也是半途而废的人中的一员。至于我的父亲,我与他说实话没有太多的共同语言,而且每次打电话都会吵架。我认为他对我的教育理念没有我母亲那么更容易让我接受。可能大部分是由于他的不善言辞和坏脾气。所以我也没有太多想去写他的。我知道他的出发点确实是为了我好,但是吧,有时候还是先别出发会比较好。而我自己的话,今年由于已经毕业,而且想要换一个更好的环境去备考考研,所以选择了在外租房,也算是提前体验了社会生活的一部分。租房生活确实自由了很多,但也对自我的自律性提了更高的要求,好在我的自律性还凑合,所以也是维持了正常的备考生活。今年这一年的自己在外面住的经历,让我的自立自理能力更上一层,有些本来需要舍友合作帮忙的事情也能够自己应付了,所以这对我个人生活而言是一种比较大的进步,也积累了挺多的经验。友情/社交其实说实话,这一年下来我的社交频率急剧下降,尤其是下半年,几乎没咋和人打交道。但是我确实是发现,我自己的独处能力变强了很多,而且也发现有些社交其实并没那么重要。可能我以前的社交方式原先也是有待于优化的。今年我会去试着调整一下,让自己的社交活动变得更高效更有质量一些。今年也有一些很不错的朋友,在我各个阶段能够给我一些激励,包括我的队友,我的发小,还有我的老师。我的发小不用多说,相处了十几年了,彼此之间都心里有些默契的,这种关系是不用刻意花心思去打理也能维持在一个很要好的状态。今年也和一些新队员建立起了一些不错的关系,从他们身上看到了我刚开始划船时候的那种热情。和老队员之间的关系也有所加深,彼此之间也有了更深的了解。我的教练在我考研期间不断激励我,他自己也顺利拿到了博士学位,用亲身经历教导我们要努力读书。我的高中老师和本科老师也在我考研期间给了我很大的帮助以及鼓励,对此我也很感谢他们。感谢所有在我背后默默支持我,给我鼓励的所有人。、接下来我会更认真地经营这些已拥有的情谊,也会去尝试拓宽我的交际圈,尽可能接触一些不同的人,同时也优化自己的社交方式,改正以往的不足之处。工作/职业说实话我觉得我这回大概率是考不上了,但我也不能够再花费一整年脱产备考。所以我应该将中心放在工作上了。并不是说读书不重要,但我现在需要将工作排在第一位,然后再考虑考学的事情了。好在我认识的老师都是很难得的贵人,我的大学本科老师给我提供了一份还不错的岗位,我的高中老师也愿意在上海帮我介绍工作。我并没有主动找他们,反倒是他们先联系上了我。在找到一条出路的同时,我是真的很感谢这两位老师在我一筹莫展的时候为我解决了燃眉之急,并且给我了相对较为长远的发展机会。接下来我要认真工作,努力学习技术知识和岗位相关的知识,尽可能快速成长起来,提升自己的个人价值。财务状况今年开支巨大,没收入不说,还要付一些房租水电,购买学习资料,吃饭也是个大头。年初时候手机还坏了一次,真的是曹乐。今年没有什么积蓄,反倒是增加了不少开支。现在的目标是:前两个月稳定一下现在的收支情况,从现在的净支出切换到能够有所储蓄。年中前根据实际情况看一下是不是需要新添置一台电脑,然后每个月或多或少给家里能打一些钱。今年的目标是给家里升级一下电脑手机之类的电子产品,我自己的话手机是刚换的,主力笔记本也还行,但是考虑到工作出差,可能需要添置一台续航久一点的电脑,这都是后话了,等到后期再看。主要的几个目标先实现。今年最大的挑战考研考研还是考研(真的好难啊)今年最骄傲的成就顺利完成考研确定了一份目前看还不错的工作明年最主要的愿望稳定工作(或者考研上岸)小有积蓄能换一整套衣柜,给家里换换电子产品熟练掌握工作内容健身健身健身!!过去一年有好有坏,有成功也有失败,但不管怎样,2024又是一个新的起点。尽管走下去,不必逗留着。愿我们的2024会更加精彩!
CPP学习DAY2
链接器的工作方式当我们将源代码编译成 obj 文件后,需要通过链接器将这些文件连接起来,使之生成我们所需要的可执行文件。那么在这个过程中,链接器究竟做了哪些工作呢?链接的主要工作是找到每个符号和函数的位置,并将它们链接在一起。之前我们提到过,每一个 cpp 源代码文件实际上就是一个 translation unit,他们之间无法相互沟通,彼此之间还没有建立联系。当我们将程序写在多个 cpp 文件中时,就必须使用链接器了。链接器除了找到每个符号和函数的位置外,还有一个很重要的功能,就是找到程序的入口点(Enter point),也就时我们所说的main函数。当我们 build 一个项目时,实际上是执行了两个步骤:编译和链接。在VS中,假设我们有一份 cpp 代码如下:#include <iostream> void Log (const char* message){ std::cout << message <<std::endl; }当我们执行编译命令时(快捷键:CTRL + F7),我们会发现编译成功完成,没有报错;但当我们执行 build 或者运行(快捷键:F5)时,会产生一个 linking error,其大意时"没有找到程序入口点"。这是因为上面的代码中并没有包含 main 函数,在链接时链接器找不到程序的入口点,就无法知道程序应当从哪一步开始。但是入口点并不一定必须是 main 函数,实际上我们可以自行定义程序的入口点,这可以在链接器中修改,但绝大多数情况我们无需改动,使用 main 作为程序的入口点即可。下面我们用一个例子来小结一下:首先我要声明一个用于打印的函数,将其写在 Log.cpp 文件中:#include <iostream> void Log(const char* message) { std::cout << message << std::endl; }这里我们可以尝试去编译,会发现我们编译成功了!(即使里面没有main函数);然后我们想写一个简单的两数相乘的程序,命名为 Math.cpp :#include <iostream> void Log(const char* message); int Multiply(int a, int b) { Log("Multiply"); return a * b; } int main() { std::cout << Multiply(5, 8) << std::endl; std::cin.get(); }此处的 void Log(const char* message); 是告诉编译器我们有一个名为 Log 的函数存在(尽管我们并没有给出其详细定义),而编译器也会相信缺失有一个Log 函数存在,这样在下面的 Multiply 函数中才能使用 Log 函数。将两份文件编译完成后,我们会得到两个 obj 文件,这两个文件在生成时会被 linker 所连接。如果我们将上述 Log.cpp 文件中的 Log 改成 Logr 或别的什么名字,我们再编译时会发现这两个文件依旧会编译成功。这说明这两个文件之间没有联系的。但如果我们按下生成又会发生什么呢?我们会得到一个 Linking error,会告诉你无法解析的外部符号。这就体现出 Linker 的功能了。linker 会在每个 obj 文件之间建立联系,从而生成最终的程序。重新回到上面的例子。如果我们将写在 Multiply 函数中的 Log("Multiply"); 注释掉,那么链接器将不会报错,因为在编译过程中,编译器识别到我们并没有使用 Log 函数,那么在链接时将不会去寻找和 Log 有关的信息。然而如果我们不是注释掉Log("Multiply"); 而是将 main 函数中的输出语句注释掉,那么链接器依旧会报错。可是我们既然将输出语句注释了,说明我们并没有使用 Multiply 函数,自然也就没有用到 Log 函数,那么怎么会报与 Log 有关的链接错误呢?这是因为我们在此文件中声明的 Multiply 函数中使用到了 Log 函数,而编译器无法确定这个声明的函数是否会在其他地方被使用,所以一同进行了编译,那么链接器自然就会去找包含在 Multiply 函数中的信息。而在之前我们注释掉 Log 语句时,编译器发现并没有使用到 Log 函数,自然就不会将它放入这个 translation unit 的编译结果中。这里需要注意的两个关键词是“使用”与“定义”。那么如何解决后者的问题呢?我们可以在 Multiply 函数的定义前加上 static ,即static int Multiply(int a, int b) { Log("Multiply"); return a * b; }这样我们这个函数的使用范围(作用域)就是当前文件了,也就是说其他的文件无法与之建立连接。这样我们在编译此文件时,如果发现此函数没有在当前 Translation unit 中被调用,即便是声明了此函数,也不会对其进行编译。这样我们的链接也就能顺利通过了。在这里我们再强调一点:函数的返回类型,函数名、参数类型及参数个数都是十分重要的。如果我们将上例中的 Log.cpp 文件中的 void Log 改成 int Log 并添加代码 return 0;,一样会出现链接错误。因为在 Math.cpp 文件中,链接器试图去寻找一个返回类型为 void 的名为 Log 的函数,当然是找不到的,所以会出现错误。参数同理。还有一种链接错误就是当我们有相同符号,也就是有两个名称相同的函数具有相同的返回值和相同的参数,此时我们的linker不知道要链接到哪个函数,此时就会出现链接错误。而当这两个相同函数出现在同一个代码文件中,即使没有发生链接,编译器也能够通过报错来告诉我们此处出现了两个相同函数。也许你会说这么傻的错误怎么会发生,但是请考虑以下情况:我们先写一个头文件 Log.h#pragma one void Log(const char* message) { std::cout << message << std::endl; }再写文件1:#include <iostream> #include "Log.h" int main() { Log("hello"); }再写文件2:#include <iostream> #include "Log.h" void IntLog () { Log("world!"); }我们可以看到,这三个文件中 Log 只被定义了一次,但是如果我们将它进行生成,那么我们仍会得到链接错误!这就要重新说回 #include 的作用了:#include 就是将后面文件中所有的代码复制到此处。所以实际上我们的文件1和文件2是这样:文件1:#include <iostream> void Log(const char* message) { std::cout << message << std::endl; } int main() { Log("hello"); }文件2:#include <iostream> void Log(const char* message) { std::cout << message << std::endl; } void IntLog () { Log("world!"); }这样就很明显了,我们将 Log 函数定义了三次,链接器当然会报错了。那么我们要怎样避免这样的错误呢?方法一:在 Log.h 文件中对 Log 函数的定义前添加 static 即可,也就是说,被复制过去的对于 Log 函数的定义仅在当前文件中生效。这样就可以解决链接方面的问题了。方法二:在 Log.h 文件中对 Log 函数的定义前添加 inline 即可,也就是说,被复制过去的仅仅是 Log 函数的定义的内部的文件仅在当前文件中生效。拿文件1举例:方法1:#include <iostream> stastic Log(const char* message) { std::cout << message << std::endl; } int main() { Log("hello"); }方法2:#include <iostream> int main() { std::cout << "hello" << std::endl; }还有一种方法,就是将其写作一个单独的 Translation unit,然后在头文件中仅保留对此函数的声明(再次区分定义与声明的区别!)。最后再重复一次:链接器(Linking)的作用就是要将编译过程中生成的所有对象文件(.obj)链接起来。它还会导入我们所需要的其他的一些库文件,例如 C运行时库、C++标准库、平台API以及其它的一些东西,这是非常常见的。同时也有不同类型的链接:静态链接和动态链接 。这些内容在后续的学习中将会被涉及。
当时光倒流——高中实习十日小记
前些日子,我应高中老师的邀请,回到我的高中实习了一段时间。原本我只是抱着回去看看老师,看看母校的心态,但当我走进高一班级的时候,我突然有些恍惚,仿佛是灵魂脱离肉体并审视着自己。但此时,是在审视坐在面前的多年前的自己。2015年,我第一次踏上这片土地,2019年,第一次与这片土地告别。我与这片土地告别的那一刻,这片土地又封存了一个藉藉无名的莽撞少年,而它一并封存的,还有那个少年一生中二十分之一的各种情愫。之后我回来过一次,走进了我的母校,路过了我曾经就读的班级,也与当年的班主任打了照面。但那次回校,更像是一种仪式,就像是离开老家多年,如果不回去探望,就要被村里人议论。顾不上去回想当年种种,便匆匆离开了。此后这片土地,也被我封存起来了,我再也不会回到这里了。时光飞逝,如今我已然步入社会。说来也是,人生总是多变的,谁都没有办法预料到未来会发生什么,就好像我也没有预料到有一天我又会故地重游。可当我真的脚踏实地地站在校门前,一种迷茫感油然而生。我不清楚我该是以什么身份重新走进这扇校门,是学生,学长,还是恩师的好友,又或只是一名寒假志愿者。但当我走进教室的那一刻,这种迷茫感瞬间消散。这种身份标签并没那么重要,重要的是当下的感受。蒋勋曾说,当你以一种早已熟悉的身份看待事物的时候,往往并不会感受到其最真实的感受,而当以一个陌生的视角,把眼前的事情当作从未经历过的事情看待时,才能体会到真正直击心灵的感受。正是在我还未找到定位的时候踏进教室,才能发现学生们的那种极为简单且清澈的眼神。我在学校停留了十余天,这段时间正是春节前后。这个学生群体也较为特殊,是来自新疆的优秀初中生,通过选拔输送到内地(新疆人除了新疆外的地方都叫内地)的教学水平极高的高中培养。但因为距离新疆太原,所以只能在学校度过寒假。我和老师们,以及其他的志愿者们一起,管理他们的晚自修纪律,给这些高中生做大学生涯讲座,带他们备年货,包饺子,在学校的春节晚会上为他们准备节目,给他们组织团课教育活动,带他们去游乐场玩……这十来天的工作量说实话不算小,但是置身其中,一边做着组织领导的工作,一边又和他们一样以一个学生的角色参与其中,这让我忘记了抬起手腕看看时间,以至于悄无生息地到了离开的日子。志愿者们的最后一晚,志愿者们回到各自的班级中,与同学们挥手告别。大家相处十来天,对于学生而言,这个时间点正是刚打破陌生感,新鲜感未过,对我们的印象仅仅是发现了我们身上的优点,还没有到一种熟悉到厌倦的地步;而对于志愿者们,这段时间,是他们第一次为自己热爱的事业,为一群陌生的人倾注自己全部的心血,正值热情高涨的时候。在这个时间点,彼此告别之际,难免会流下泪水,以此为这段时光画上一个看似圆满的句号。我是第二天才要离开的。我没有和同学们告别,因为我觉得我的到来本身就是一件很突兀的事情,而离别也没有必要画上一个这么彻底的句号,轻描淡写地离开他们的视线在我看来是一个更好的选择。这十天对于我而言,有着另外的意义。我不是教育专业出身,所以关注点没有放在如何教育学生,我天生就没有这份热情,所以在这上面瞎研究可能只会败坏祖国的花朵。这十天对我而言,更像是去体验生活开拓眼界。成功的是,我跳出了原本的井。这十天里,我看到了身居高位的校长在与我们对话时总会身体微倾,也听闻了他在晚上工作到一两点后蜷在办公室的沙发上小睡到六点然后继续操劳。看到了我的老师在大年三十的晚上仍然在办公室里伏案辛劳。或许这是教育工作者的使命,但我看到的却是从他们身上散发出的一种我所难以触及的对于自己事业的认真和热爱。伟大这个词本身太过空虚,但从他们的所作所为上却能将这个词慢慢具象。我也看到了刚步入岗位的志愿者们的满腔热血,他们能为了策划活动争吵讨论到凌晨,然后互相协作保证活动的圆满举办,也会深入到学生中间去耐心聆听他们最真实的想法。回想到我的大学生涯,我想到我刚加入运动队时,也是一样充满热情。但不同的是,他们是为学生服务,这是一种比我更充实,影响更深厚的热情。我看到在老师们努力下,更有朝气,更追求上进的学生们,他们如今敢想敢拼,精神饱满,朝气蓬勃。“长江后浪推前浪”这句话虽然已经被用过无数次,但仍然是用来描述他们的话中的不二之选。我可能不会走上教育岗位,但是这几天的经历让我切身体会到教育事业的艰辛,也看到了教育者们的伟大。“硕果累累”不仅仅只需要播撒种子,最关键的还是日复一日不辞劳苦地浇水施肥,修枝剪叶。人生难能遇到贵人,这几天里,我的老师也与我聊了很多,带我见识了很多在我认知之外的事情。有些东西需要用很长的时间来消化吸收,这份经历于我而言是一笔宝贵的财富。山高水长,很幸运能遇到这样一群老师,在我成长的路上不断为我创造丰富阅历的机会,也很荣幸能够遇到这群志愿者们,能让我感受到人与人之间的多样性,从而能够更好地反思和提升自己。很开心能和这些同学们相处一周多的时间,让我重新感受到青春的无限生机。祝你,祝我,祝大家,前途似锦。今日一别,他日我们定会顶峰相见。——CHI
博客主页 CHI's blog 今春不见桃花
闽ICP备2022003806号 闽公网安备35012102500456号 本站由又拍云提供CDN加速/云存储服务 本站已运行 1 年 240 天 3 小时 5 分 自豪地使用 Typecho 建站,并搭配 MyDiary 主题 Copyright © 2022 ~ 2024. CHI's blog All rights reserved.
打赏图
打赏博主
欢迎
欢迎
欢迎访问CHI's blog
欢迎您来评论,但首次评论需经过审核才能显示,之后就不用啦^_^
搜 索
足 迹
分 类
  • 默认分类
  • 相册
  • 随想录
  • 技术向
  • 读书笔记
  • 生活小记