当前位置: 首页 > news >正文

我的创作纪念日——《惊变256天》

在这里插入图片描述

我的创作纪念日——《惊变256天》

    • 机缘
    • 收获
    • 日常
    • 成就
    • 憧憬

最近,博主收到了 CSDN 发来的系统消息,这才惊觉,自上次第128天创作纪念日之后,竟又悄然走过了 128 天。站在 256 天这个颇具意义的里程碑前回望,博主在2023 年 8 月 29 日那天创作第一篇博客的情景依然历历在目。

彼时,博主怀着忐忑又兴奋的心情,敲下了第一篇博客:讲解LeetCode第1题:两数之和(完整代码)。未曾想,这看似寻常的举动,竟成了漫漫创作之旅的起点。

起初,博主每一次点击 “发布” 键,都像把精心打磨的作品置于众目睽睽之下,既期待共鸣,又害怕被否定。但是连续几次的发布并没有什么回应,慢慢的博主的创作越来越少,但是在几近放弃时候博主选择了坚持下来,而如今回望却发现自己已经走了很远。

机缘

博主是于 2023 年 9 月 1 日踏入大学校门,从入学伊始呢博主便确定了本科毕业后直接就业的选择。因此,平日空闲的时候,博主便常通过手机了解一些计算机专业学生的就业情况,也正是在这样的探索中,博主慢慢知晓了 CSDN 这个 APP,然后就在 2023 年 10 月 11 日注册了账号。不过,起初博主只是偶尔打开浏览,并未深入使用。

后来,博主从一些过来人分享的经验中得知,经常撰写博客在面试时能成为加分项,从那时起,以就业为目标的博主心里便萌生了写博客的念头。但由于完全不懂如何写博客,起初并未真正付诸行动。

时光流转,转眼间时间就到了大一结束的那个暑假。某一天,博主突然想起写博客这件事,于是便在 B 站上学习如何写博客。这才了解到,需要先掌握一种名为 Markdown 的轻量型标记语言。当学完这门语言后,博主又面临新的困惑:该创作什么类型的文章呢?

这时,眼前记录着 LeetCode 题解和知识要点的笔记本引发了博主的思考:“本子上记了这么多知识点,自己又翻开看过几次呢?”,于是,博主翻开笔记本的第一页,看到 “两数之和” 的题目,灵感涌现,就此诞生了第一篇博客:讲解LeetCode第1题:两数之和(完整代码)。此后,博主又陆续撰写了几篇 LeetCode 习题讲解,当然也都反响平平,不过博主还在不定期的更新。

那时,博主还只是独自在 CSDN 上发布零散的 LeetCode 或洛谷题解,关注者寥寥,更新也毫无规律,全凭兴致所至。

因此,博主还没发几篇博客,上半学期就结束了。在寒假里的某一天,博主忽然发现自己对之前学过的一些内容已经记忆模糊了,却又因没有学习记录而只能重新翻书。基于此,博主萌生了将从 C 语言开始的所有学习内容都写成博客的想法,目的是方便自己随时回顾,同时通过不断总结来牢固已经掌握的知识点。秉持着这一信念,即便平时再忙,博主睡前也要坚持写一点博客,因此现在博主的博客大都是这样一天一点、积少成多积累而来的。

然而,C 语言的内容还差两章未更新完,寒假便结束了,新学期如期而至。在新学期里,博主通过 CSDN 平台结识了一群同样通过博客记录学习过程的小伙伴。大家彼此支持,此前博主博客评论区总是一片冷清,如今却多了许多互动。每天看到自己的博客能得到小伙伴们的支持,博主心中便充满了继续更新的动力。同时,看到同龄小伙伴每周都能创作出多篇优质博文,博主也深受激励,不再像从前那样随意更新,而是给自己定下规矩:每周必须完成两篇高质量的博客。


收获

截止到目前,博主在 CSDN 平台已收获 720 多名粉丝,累计获得 1700 多个点赞、1400 多次收藏以及 500 多条评论。这些数据于博主而言,绝非冰冷的数字,而是无数个日夜坚持创作的鲜活记录。每当看到粉丝数量从三位数突破至新的台阶,每当注视着点赞、收藏的数字一点点的变大,博主总能清晰感受到时间的流淌。

博主通过之前持续的博客创作,在知识梳理与文字表达上积累了许多经验,现在博主对内容质量的把控也愈发严格。从最初对 Markdown 语法的生疏运用,到如今能流畅地将复杂知识点拆解为逻辑清晰的技术博文,每一次创作都是对自我的打磨与提升。

在创作的过程中,博主的努力也多次获得认可 —— 除了获得许多小伙伴的支持,也得到了CSND平台的认可:(例如一下几个:)
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

博主深知,没有大家的认可,便没有这些榜单上的成绩,也没有持续创作的热情。因此,在今后的日子里,博主定会继续力求每篇博客都做到逻辑清晰、干货满满,让大家能博客中收获更多。

同时,也会更加注重与大家的互动,倾听大家的需求与建议,让博客真正成为一个共同学习、共同进步的平台。

日常

日常里,博主主要专注于专业课的学习(当然,博主的学习范围并不局限于学校课程所涵盖的内容)。一般每学完一到两个章节,便会停下脚步,悉心梳理所学知识点,将其整理成博客与大家分享。

当然创作博客这件事情确实还是挺费时间和精力的,但是经过这段时间的坚持,博主愈发觉得用创作博客来巩固之前的学习内容的这种学习方法行之有效 —— 譬如:对学过的知识印象比以往更加清晰深刻,知识体系也在整理过程中逐渐脉络分明。因此,博主下定决心,会将写博客这一习惯长期坚持下去,创作博客也早已成为博主日常学习中不可或缺的一部分。

倘若你同样是一名大学生,且打算未来从事 C++ 相关岗位,不妨关注博主。你可以通过博主的博客查漏补缺,梳理知识盲区,同时也能提前了解后续的学习方向,明晰技术进阶路径。

在此,博主郑重许诺:只要今后博主仍在 IT 行业深耕,持续学习计算机相关知识,就一定会将所学内容整理成文,以博客的形式分享给大家,与大家共同成长。

所以,欢迎大家关注博主,让博主成为你漫长学习道路上的同行者与见证者。博主期待以博客为桥梁,结识更多志同道合的朋友,一起在代码的世界里披荆斩棘,携手进步!


成就

在这段持续创作的时光里,博主撰写了许多代码示例,而《数据结构初阶》系列博客中关于栈、队列、链表等基础数据结构的实现代码,对于博主而言颇具特殊意义。

回想起初次接触数据结构的经历,那时的博主仅仅停留在书本上的名词概念 —— 知道 “链表” 是一种链式存储结构,“队列” 遵循先进先出原则,却从未真正动手实现过任何一个数据结构。

那些看似清晰的理论,在脱离文字描述后,往往暴露出许多模糊的细节:链表的头指针该如何初始化?循环队列的队满条件为何要设计为(rear + 1) % capacity == front?这些问题一直萦绕在博主的脑海里,最后博主也醒悟了过来:我的目标是要找到的一个不错的软件开发工作,不应该只是跟着学校的教学要求走,作为一名合格的开发程序员,这些数据结构的实现应该都是信手捏来的事情。

而这次通过博客分享数据结构的实现代码,对博主来说既是一场充满挑战的 “通关之旅”,也是见证成长的 “成就解锁” 过程。

以链表为例,从最初频繁出现的指针越界错误,到逐步理清malloc分配内存与指针指向的逻辑。记得在实现循环队列时,为了避免 “假溢出” 问题,反复推敲队头与队尾指针的移动逻辑,甚至在草稿纸上画出环形数组的状态变化图,最终才提炼出通过取模运算实现循环存储的核心逻辑。这种从 “纸上谈兵” 到 “落地成码” 的转变,不仅让抽象概念变得触手可及,更让博主深刻体会到:数据结构的灵魂不在于定义,而在于如何用代码让其‘活起来’

这些代码或许不够完美,却真实记录了博主从 “理论学习者” 到 “实践创作者” 的蜕变。每一个mallocfree的配对,每一次条件判断的调整,博主都能清晰地感觉到自己正在变得越来越熟练。

之前有看过博主写的博客的小伙伴的都知道,博主的代码片段中的经常会添加一些“注意:XXXXXXXXX。“,这样的内容—— 这些看似琐碎的提醒,实则是博主踩过无数 “坑” 后的经验沉淀。对博主而言,它们不仅是技术的输出,更是对曾经懵懂的自己的一次致敬:那些曾经觉得晦涩难懂的知识,如今竟能以代码的形式清晰呈现,并成为帮助他人理解数据结构的桥梁。

博主撰写的代码示例中若要展示一段代码的话,博主愿以循环队列的 C 语言实现为例:

-----------------------------CircularQueue.c-----------------------------#include "CircularQueue.h"/*-----------------------------------------辅助工具函数-----------------------------------------*/
/*** @brief 检查并扩容循环队列的存储空间** @param pcque 指向循环队列的指针** @note 该函数完成以下工作:*       1. 检查队列是否已满*       2. 计算新容量(初始为0时设为4,否则2倍扩容)*       3. 使用realloc扩容存储数组*       4. 更新队列的容量字段** @warning 扩容后不处理元素位置的调整(循环队列可能需要特殊处理)*/
//1.实现:“循环队列的扩容”辅助函数
void CQCheckCapacity(CQ* pcque)
{if (pcque->capacity == 0)  //特殊处理初始情况{int newCapacity = 4;CQDataType* tmp = (CQDataType*)malloc(newCapacity * sizeof(CQDataType));if (!tmp) {perror("malloc fail");exit(EXIT_FAILURE);}pcque->a = tmp;pcque->capacity = newCapacity;}else if (pcque->size == pcque->capacity-1) //容量为capacity的循环队列最多只能存储capacity-1个元素{//1.1:判断需要扩容的容量的大小int newCapacity = pcque->capacity * 2;//1.2:使用realloc进行扩容CQDataType* tmp = (CQDataType*)realloc(pcque->a, newCapacity*sizeof(CQDataType));if (tmp == NULL){perror("realloc fail");return;}//更新数组的指针 + 循环队列的容量pcque->a = tmp;pcque->capacity = newCapacity;}
}//2.实现:“打印循环队列”的辅助函数
void CQPrint(CQ* pcque)
{assert(pcque); //断言检查:确保队列指针有效,防止对空指针进行解引用//情况1:循环队列为空队列if (CQEmpty(pcque)) return;//情况2:循环队列非空队列//2.1:定义一个变量记录打印循环队列中的元素的数量int count = 0;//2.2:循环打印队列中的元素int pcur = pcque->front;   //注意:这里一定要使用一个临时的指针进行遍历循环队列,防止pcque指针的移动导致队列结构错乱while (count < pcque->size) {printf("%d ", pcque->a[pcur]);pcur = (pcur + 1) % pcque->capacity;count++;}printf("\n");
}/*-----------------------------------------核心功能函数-----------------------------------------*/
/*** @brief 初始化循环队列** @param pcque 指向需要初始化的循环队列结构体的指针** @note 该函数完成以下工作:*       1. 检查指针有效性(断言保护)*       2. 初始化队列的基本状态:*          - 当前元素数量(size)置为0*			- 当前队列容量(capacity)置为0*          - 队头指针(front)置为0*          - 队尾指针(rear)置为0*          - 数据存储数组指针(a)置为NULL** @warning* - 使用前必须确保pcque指针有效* - 该初始化不会分配存储空间,首次插入元素时会自动扩容*/
//1.实现:“循环队列的初始化”操作
void CQInit(CQ* pcque)
{assert(pcque); //断言检查:确保队列指针有效,防止对空指针进行解引用pcque->size = 0;pcque->capacity = 0;pcque->front = 0;pcque->rear = 0;pcque->a = NULL;
}//2.实现:“循环队列的销毁”操作
void CQDestroy(CQ** ppcque)
{assert(ppcque);  //断言检查1:确保传入的指针是非空指针,防止对空指针进行解引用assert(*ppcque); //断言检查2:确保队列指针有效,防止对空指针进行解引用(建议加上)/*----------第一步:释放动态数组内存----------*/free((*ppcque)->a);(*ppcque)->a = NULL;/*----------第一步:重置队列状态----------*/(*ppcque)->size = (*ppcque)->capacity = 0;(*ppcque)->front = (*ppcque)->rear = 0;/*----------第一步:释放队列结构体内存----------*/free(*ppcque);*ppcque = NULL;  //真正修改外部指针//(函数的形参需要是二级指针,如果使用的是一级指针,参数是值传递,在函数内部将ppcque置空,对外部指针无影响,外部指针将变为野指针)
}/*** @brief 判断循环队列是否为空** @param pcque 指向循环队列结构体的指针(需确保非NULL)* @return bool 返回true表示队列为空,false表示非空** @note 该函数实现循环队列的判空逻辑:*       1. 使用断言确保指针有效性(调试阶段捕获空指针)*       2. 直接比较队头指针(front)和队尾指针(rear)*       3. 当front == rear时判定为空队列*///3.实现:“循环队列的判空”操作
bool CQEmpty(CQ* pcque)
{assert(pcque); //断言检查:确保队列指针有效,防止对空指针进行解引用//判满的核心逻辑:队尾指针和队头指针指向同一个位置return pcque->front == pcque->rear; //循环队列:空为true;非空为false
}/*** @brief 判断循环队列是否已满** @param pcque 指向循环队列结构体的指针* @return bool 返回true表示队列已满,false表示未满** @note 该函数实现循环队列的判满逻辑:*       1. 使用取模运算实现循环指针计算*       2. 通过(rear+1) % capacity == front判断队列满*       3. 预留一个空位区分队列空和满的状态** @details 循环队列判满的数学原理:* - 队列容量为capacity时,实际可以使用的是capacity-1个空间* - 当(rear+1) % capacity == front时:*   a) 若front == rear,队列为空*   b) 否则,队列已满* - 这样设计避免了使用额外标志位*/
//4.实现:“循环队列的判满”操作
bool CQFull(CQ* pcque)
{assert(pcque);//断言检查:确保队列指针有效,防止对空指针进行解引用//判满的核心逻辑:队尾指针的下一个位置(取模后)等于队头指针return (pcque->rear + 1) % (pcque->capacity) == pcque->front;  //循环队列:满为true;不满为false/* 示例说明:* 假设capacity=4(实际可使用的是3个位置):** 情况1:队列满*   front=0, rear=3*   (3+1)%4 = 0 == front → 满** 情况2:队列未满*   front=0, rear=1*   (1+1)%4 = 2 != front → 未满** 情况3:队列空*   front=0, rear=0*   (0+1)%4 = 1 != front → 未满(与判空条件区分)*/
}/*** @brief 向循环队列尾部插入一个元素** @param pcque 指向循环队列的指针(需确保非NULL)* @param x 要插入的元素值** @note 该函数执行以下操作:*       1. 检查队列指针有效性(调试阶段断言保护)*       2. 检查并扩容队列容量(通过CQCheckCapacity)*       3. 在队尾位置存入元素*       4. 更新队尾指针(实现循环移动)*/
//5.实现:“循环队列的入队”操作
void CQPush(CQ* pcque, CQDataType x)
{assert(pcque); //断言检查:确保队列指针有效,防止对空指针进行解引用CQCheckCapacity(pcque);//1.将入队的元素的存储在动态数组中pcque->a[pcque->rear] = x;//2.将循环队列的尾指针向后移动pcque->rear++;//3.更新尾指针指向的正确的位置(处理越界的情况)pcque->rear = pcque->rear % (pcque->capacity);//4.更新当前循环队列中元素的数量pcque->size++;
}/*** @brief 从循环队列头部移除一个元素(出队操作)** @param pcque 指向循环队列的指针(需确保非NULL)** @note 该函数执行以下操作:*       1. 检查队列指针有效性(断言保护)*       2. 检查队列是否为空(空队列直接返回)*       3. 移动队头指针实现出队*       4. 处理指针越界(循环修正)*/
//6. 实现:“循环队列的出队”操作
void CQPop(CQ* pcque)
{assert(pcque);//断言检查:确保队列指针有效,防止对空指针进行解引用//情况1:循环队列为空if (CQEmpty(pcque)) return;//情况2:循环队列非空//1.将循环队列的头指针向后移动pcque->front++;//2.更新头指针指向正确的位置(处理越界的情况)pcque->front = pcque->front % (pcque->capacity);//3.更新当前循环队列中元素的数量pcque->size--;
}//7.实现:“循环队列的获取队头的元素”操作
CQDataType CQFront(CQ* pcque)
{assert(pcque); //断言检查:确保队列指针有效,防止对空指针进行解引用//情况1:循环队列为空if (CQEmpty(pcque)) return -1;//情况2:循环队列非空return pcque->a[pcque->front];
}/*** @brief 获取循环队列的队尾元素** @param pcque 指向循环队列的指针(需确保非NULL)* @return CQDataType 返回队尾元素的值,队列为空时返回-1(需根据实际数据类型调整)** @note 该函数执行以下操作:*       1. 检查队列指针有效性(断言保护)*       2. 检查队列是否为空(空队列返回-1)*       3. 计算队尾元素的实际位置*       4. 返回队尾元素值*/
//8.实现:“循环队列的获取队尾的元素”操作
CQDataType CQRear(CQ* pcque)
{assert(pcque); //断言检查:确保队列指针有效,防止对空指针进行解引用//情况1:循环队列为空if (CQEmpty(pcque))  return -1;//情况2:循环队列非空//返回队尾的元素比返回队头的元素要复杂://原因:front指针指向的是队头的元素的位置;rear指针指向的是队尾的元素的后一个位置//怎么让队尾指针指向它的前一个位置?真的是pcirque->tail--;这么简单吗?//情况1:rear指向数组索引为0的位置(特殊情况-->rear应该指向的是capacity的位置,而不是数组下标为-1的位置)//情况2:rear指向数组索引的其他位置(正常情况)return pcque->a[(pcque->rear - 1 + pcque->capacity) % (pcque->capacity)];/* 关键计算:获取队尾元素的实际位置1. pcque->rear - 1 :理论上队尾元素在前一个位置2. + pcque->capacity :防止负数(当rear=0时)3. % pcque->capacity :确保结果在合法范围内示例:- 当capacity=5, rear=0时:(0-1+5)%5=4- 当capacity=5, rear=3时:(3-1+5)%5=2*/
}

这段代码通过数组模拟队列空间,利用取模运算让队列在逻辑上形成环形结构,解决了普通队列 “假溢出” 的问题,能高效完成入队和出队操作。

代码里用frontrear两个指针分别表示队头和队尾位置,通过(rear + 1) % capacity == front判断队列是否已满,用front == rear判断是否为空,还设计了扩容函数在队列满时自动扩展空间,同时有打印函数方便查看队列状态,整体实现了循环队列的基本功能和动态管理,让队列空间得到充分利用,操作也更高效。

上面的这段代码不仅是《数据结构初阶》系列的一个缩影,更体现了博主在梳理知识时的思考:如何用简洁的逻辑实现复杂的数据结构?如何通过注释和命名让代码更易读?

未来,博主还将在博客中分享更多类似的实战代码与解析,希望能帮助读者理解数据结构的底层逻辑,为进阶学习打下坚实基础。(如果你感觉这个博主还不错,对你有帮助的话,也可以关注一下博主,纪念日里也不会忘记宣传自己


憧憬

前面博主也提到过,博主的打算是本科直接就业,所以博主也一直在为这一目标默默奋斗。

但是在漫长的学习准备阶段,博主经常从网上听到类似的声音:“本科生找实习难于登天,仅有极少数人能成功,大部分学生只能落空” 和“C++ 岗位少之又少,本科生毕业根本找不到相关工作,学 C++ 等于‘毕业即失业’”和 “非 985、211 院校的学生就别碰 C++ 了,这门语言贴近底层,你们根本学不透,就算勉强学会,学历不够也会被筛掉”…… 诸如此类的言论,曾让博主心生疑虑:自己真的能找到实习吗?是否不该执着于 C++,转而去学 Java 会更好?

但在听取了 CSDN 上小伙伴的建议后,博主最终选择继续深耕 C++。毕竟 “打铁还需自身硬”,外界的声音或许反映了部分现实,但决定个人发展的核心始终是自身实力。或许 C++ 的就业形势并非一片坦途,但博主坚信,只要全力以赴、专注深耕,就一定能有所收获。

就业环境的好坏受社会周期影响,我们无法回到互联网行业的 “黄金时代”,我们唯一可以做的就是把握当下 —— 努力提升技术能力,在竞争中积累优势,为未来可能出现的机遇储备足够的底气。

正因为打算直接就业,所以博主必须提前找到实习,确保在秋招前至少拥有一段实习经历。因此,博主如今也是正在争分夺秒地学习,力求尽快完善技术栈,如同游戏中 “快速发育、点满技能点”,以便在未来的 “职场团战” 中更具竞争力。

不过,在加速学习的同时,博主也面临时间分配的挑战 —— 为了保证博客能按时创作出来,博主经常感觉到时间不够用。所以这一学期一些水课的平时分博主可能拿不到了,但是这个影响不大,请大家放心,博客更新绝不会中断。目前仍有大量知识内容待梳理,后续博主会将每周更新频率提升至 3 次,且会继续保持高质量输出,确保每一篇博文内容详实、干货满满。

好了,纪念日就纪念到这里吧,在此,想再和大家真诚地 “安利” 一番:

如果你目前还是学生,并且计划未来从事 C++ 相关方向的工作,强烈建议关注博主!博主后续分享的博客内容,将紧密围绕 C++ 就业所需的核心知识展开,涵盖 C++ 基础原理、数据结构与算法实战、操作系统底层逻辑、项目开发经验等关键领域。

即便现在,博主分享的内容与你的发展方向暂时不一致,也欢迎保持关注!博主始终相信,计算机技术的各个领域存在共通的底层逻辑与学习方法论。例如:数据结构的思维可迁移至任何编程语言,算法的优化思路能应用于各类场景。更何况,技术的发展日新月异,博主也会在深耕 C++ 的同时,持续探索其他领域,博主相信今后分享的内容一定会和你所在的领域不谋而合。

总之,关注博主不仅能获取当下所需的 C++ 就业干货,更能解锁一个长期陪伴的技术成长伙伴~

在这里插入图片描述

相关文章:

我的创作纪念日——《惊变256天》

我的创作纪念日——《惊变256天》 机缘收获日常成就憧憬 最近&#xff0c;博主收到了 CSDN 发来的系统消息&#xff0c;这才惊觉&#xff0c;自上次第128天创作纪念日之后&#xff0c;竟又悄然走过了 128 天。站在 256 天这个颇具意义的里程碑前回望&#xff0c;博主在2023 年 …...

Linux 的 UDP 网络编程 -- 回显服务器,翻译服务器

目录 1. 回显服务器 -- echo server 1.1 相关函数介绍 1.1.1 socket() 1.1.2 bind() 1.1.3 recvfrom() 1.1.4 sendto() 1.1.5 inet_ntoa() 1.1.6 inet_addr() 1.2 Udp 服务端的封装 -- UdpServer.hpp 1.3 服务端代码 -- UdpServer.cc 1.4 客户端代码 -- UdpClient.…...

回溯法理论基础 LeetCode 77. 组合 LeetCode 216.组合总和III LeetCode 17.电话号码的字母组合

目录 回溯法理论基础 回溯法 回溯法的效率 用回溯法解决的问题 如何理解回溯法 回溯法模板 LeetCode 77. 组合 回溯算法的剪枝操作 LeetCode 216.组合总和III LeetCode 17.电话号码的字母组合 回溯法理论基础 回溯法 回溯法也可以叫做回溯搜索法&#xff0c;它是一…...

LeetCode --- 156双周赛

题目列表 3541. 找到频率最高的元音和辅音 3542. 将所有元素变为 0 的最少操作次数 3543. K 条边路径的最大边权和 3544. 子树反转和 一、找到频率最高的元音和辅音 分别统计元音和辅音的出现次数最大值&#xff0c;然后相加即可&#xff0c;代码如下 // C class Solution {…...

第五项修炼:打造学习型组织

最近一直接到的需求&#xff0c;都是公司董事长或总经理都特别推崇《第五项修炼&#xff1a;打造学习型组织》的内容&#xff0c;让各个层级的管理者都持续学习、应用、实践。我不禁开始反思&#xff0c;这背后到底隐藏着什么原因&#xff1f; 随着商业环境的变化和复杂性的增加…...

Bellman - Ford 算法与 SPFA 算法求解最短路径问题 ——从零开始的图论讲解(4)

目录 前言 为什么Dijkstra算法面对负权值图会有误差??? 举例说明 什么是Bellman -Ford算法? BF算法的核心思想 什么是松弛 为什么最多松弛N-1次? 代码实现 举例 初始状态&#xff08;dist[] 数组&#xff09; 第 1 轮松弛&#xff08;遍历所有边&#xff09; …...

Python训练营打卡 Day27

函数专题2&#xff1a;装饰器 知识点回顾&#xff1a; 装饰器的思想&#xff1a;进一步复用函数的装饰器写法注意内部函数的返回值 昨天我们接触到了函数大部分的功能&#xff0c;然后在你日常ctrl点进某个复杂的项目&#xff0c;发现函数上方有一个xxx,它就是装饰器 装饰器本质…...

初识计算机网络。计算机网络基本概念,分类,性能指标

初识计算机网络。计算机网络基本概念&#xff0c;分类&#xff0c;性能指标 本系列博客源自作者在大二期末复习计算机网络时所记录笔记&#xff0c;看的视频资料是B站湖科大教书匠的计算机网络微课堂&#xff0c;祝愿大家期末都能考一个好成绩&#xff01; 视频链接地址 一、…...

5月16日day27打卡

函数专题2&#xff1a;装饰器 知识点回顾&#xff1a; 装饰器的思想&#xff1a;进一步复用函数的装饰器写法注意内部函数的返回值 作业&#xff1a; 编写一个装饰器 logger&#xff0c;在函数执行前后打印日志信息&#xff08;如函数名、参数、返回值&#xff09; logger def …...

【生成式AI文本生成实战】DeepSeek系列应用深度解析

目录 &#x1f31f; 前言&#x1f3d7;️ 技术背景与价值&#x1fa79; 当前技术痛点&#x1f6e0;️ 解决方案概述&#x1f465; 目标读者说明 &#x1f9e0; 一、技术原理剖析&#x1f4ca; 核心概念图解&#x1f4a1; 核心作用讲解&#x1f527; 关键技术模块说明⚖️ 技术选…...

【Pandas】pandas DataFrame kurt

Pandas2.2 DataFrame Computations descriptive stats 方法描述DataFrame.abs()用于返回 DataFrame 中每个元素的绝对值DataFrame.all([axis, bool_only, skipna])用于判断 DataFrame 中是否所有元素在指定轴上都为 TrueDataFrame.any(*[, axis, bool_only, skipna])用于判断…...

2025年渗透测试面试题总结-安恒[实习]安全服务工程师(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 安恒[实习]安全服务工程师 1. SQLMap爆出当前库名的参数是什么&#xff1f; 2. Nmap探测系统的参数&am…...

在 Visual Studio Code (VSCode) 中配置 MCP(Model Context Protocol)

前提条件 安装 VSCode&#xff1a;确保已安装最新版本的 VSCode&#xff08;建议使用 1.99 或以上版本&#xff0c;支持 MCP&#xff09;。安装 GitHub Copilot 扩展&#xff1a;MCP 通常与 GitHub Copilot 的代理模式&#xff08;Agent Mode&#xff09;结合使用&#xff0c;…...

顶层架构 - 消息集群推送方案

一、推送基础概念简述 在即时通讯&#xff08;IM&#xff09;系统中&#xff0c;最基础的一件事就是“如何把消息推送给用户”。为了实现这个过程&#xff0c;我们要先了解两种常见的网络通信方式&#xff1a;HTTP 和 WebSocket。 1. HTTP 是什么&#xff1f; HTTP 就像一次性…...

C++性能测试工具——Vtune等的介绍

一、介绍 我们在前面的相关文章中对C性能的测试和分析工具&#xff08;见“C性能测试工具gprof和gperftools基础”等&#xff09;有一个初步的了解和应用&#xff0c;其实类似的相关工具还有不少。为了进一步的让开发者们掌握更多的相关性能测试分析相关的方法&#xff0c;对另…...

车道线检测----CLRKDNet

今天的最后一篇 车道线检测系列结束 CLRKDNet&#xff1a;通过知识蒸馏加速车道检测 摘要&#xff1a;道路车道是智能车辆视觉感知系统的重要组成部分&#xff0c;在安全导航中发挥着关键作用。在车道检测任务中&#xff0c;平衡精度与实时性能至关重要&#xff0c;但现有方法…...

【AI模型部署】

解决python引入huggingface_hub模块下载超时问题 背景问题解决 背景 AMD Ryzen™ AI处理器通过独特的NPUGPU异构架构&#xff0c;为AI工作负载提供强大的并行计算能力。本方案展示了如何将YOLOv8目标检测、RCAN超分辨率重建和Stable Diffusion文生图三类模型分别部署到NPU和GP…...

排序01:多目标模型

用户-笔记的交互 对于每篇笔记&#xff0c;系统记录曝光次数、点击次数、点赞次数、收藏次数、转发次数。 点击率点击次数/曝光次数 点赞率点赞次数/点击次数 收藏率收藏次数/点击次数 转发率转发次数/点击次数 转发是相对较少的&#xff0c;但是非常重要&#xff0c;例如转发…...

电子电器架构 --- Zonal架构正在开创汽车电子设计新时代

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...

如何阅读、学习 Tcc (Tiny C Compiler) 源代码?如何解析 Tcc 源代码?

阅读和解析 TCC&#xff08;Tiny C Compiler&#xff09; 的源代码需要对编译器的基本工作原理和代码结构有一定的了解。以下是分步骤的指南&#xff0c;帮助你更高效地学习和理解 TCC 的源代码&#xff1a; 1. 前置知识准备 C 语言基础&#xff1a;TCC 是用 C 语言编写的&…...

Java 泛型与类型擦除:为什么解析对象时能保留泛型信息?

引言&#xff1a;泛型的“魔术”与类型擦除的困境 在 Java 中&#xff0c;泛型为开发者提供了类型安全的集合操作&#xff0c;但其背后的**类型擦除&#xff08;Type Erasure&#xff09;**机制却常常让人困惑。你是否遇到过这样的场景&#xff1f; List<String> list …...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(22):复习

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(22):复习 1、前言(1)情况说明(2)工程师的信仰2、知识点(1)复习(2)復習3、单词(1)日语(2)日语片假名单词4、对话练习5、单词辨析记录6、总结1、前言 (1)情况说明 自己在今年,在日本留学中,目前在语言学校,…...

Java基础学习

Java 基础大纲 1. Java 概述 Java 语言特点&#xff08;跨平台、面向对象、自动内存管理&#xff09; JVM、JRE、JDK 的作用与区别 开发环境搭建&#xff08;安装 JDK、配置环境变量、IDE 使用&#xff09; 2. 基础语法&#xff08;已经学习&#xff09; 变量与数据类型&a…...

MGX:多智能体管理开发流程

MGX的多智能体团队如何通过专家混合系统采用全新方法,彻底改变开发流程,与当前的单一智能体工具截然不同。 Lovable和Cursor在自动化我们的特定开发流程方面取得了巨大飞跃,但问题是它们仅解决软件开发的单一领域。 这就是MGX(MetaGPT X)的用武之地,它是一种正在重新定…...

2025第三届盘古石杯初赛(计算机部分)

前言 比赛的时候时间不对&#xff0c;打一会干一会&#xff0c;导致比赛时候思路都跟不上&#xff0c;赛后简单复现一下&#xff0c;希望大家批批一下 计算机取证 1、分析贾韦码计算机检材&#xff0c;计算机系统Build版本为&#xff1f;【标准格式&#xff1a;19000】 183…...

XML介绍及常用c及c++库

一.xml概述 1.什么是XML&#xff1f; XML&#xff08;eXtensible Markup Language&#xff09;是一种标记语言&#xff0c;1998 年 2 月&#xff1a;XML 1.0 发布&#xff0c;用于存储和传输结构化数据。与HTML专注于数据显示不同&#xff0c;XML专注于数据本身及其结构。 它…...

动态规划-63.不同路径II-力扣(LeetCode)

一、题目解析 与62.不同路径不同的一点是现在网格中有了障碍物&#xff0c;其他的并没有什么不同 二、算法解析 1.状态表示 dp[i][j]表示&#xff1a;到[i,j]位置时&#xff0c;不同的路径数 2.状态转移方程 由于多了障碍物&#xff0c;所以我们要判断是否遇到障碍物 3.初…...

海盗王3.0的数据库3合1并库处理方案

原版的海盗王数据库有3个accountserver&#xff0c;gamedb&#xff0c;tradedb&#xff0c;对应到是账号数据库&#xff0c;游戏数据库&#xff0c;商城数据库。 一直都有个想法&#xff0c;如何把这3个库合并到一起&#xff0c;这样可以实现一些功能。 涉及到sqlserver的数据库…...

Vue百日学习计划Day16-18天详细计划-Gemini版

重要提示&#xff1a; 番茄时钟&#xff1a; 每个番茄钟为25分钟学习&#xff0c;之后休息5分钟。每完成4个番茄钟&#xff0c;进行一次15-30分钟的长休息。动手实践&#xff1a; DOM 操作和事件处理的理解高度依赖于实际编码。请务必在浏览器中创建 HTML 页面&#xff0c;并配…...

【C++】15.并发支持库

本篇内容参考自cplusplus 1. thread 1.1 thread thread库底层是对各个系统的线程库&#xff08;Linux下的pthread库和Windows下Thread库&#xff09;进行封装。C11thread库的第一个特点是可以跨平台&#xff0c;第二个特点是Linux和Windows下提供的线程库都是面向过程的&…...

Linux系统编程——exec族函数

我们来完整、系统、通俗地讲解 Linux 系统编程中非常重要的一类函数&#xff1a;exec 族函数&#xff08;也叫 exec family&#xff09;。 一、什么是 exec&#xff1f; exec 系列函数的作用是&#xff1a; 用一个新的程序&#xff0c;替换当前进程的内容。 也就是说&#xf…...

职教实训室中的写实数字人:技术与应用方案

在当今快速发展的数字化时代&#xff0c;职业教育的重要性日益凸显。面对传统教学模式中个性化不足、互动性差等挑战&#xff0c;深声科技基于2D写实交互数字人的解决方案为职教实训室带来了全新的变革。本文将详细介绍该技术方案的核心原理、产品特色及其在职业培训中的实际应…...

Nginx模块配置与请求处理详解

Nginx 作为模块化设计的 Web 服务器,其核心功能通过不同模块协同完成。以下是各模块的详细配置案例及数据流转解析: 一、核心模块配置案例 1. Handler 模块(内容生成) 功能:直接生成响应内容(如静态文件、重定向等) # 示例1:静态文件处理(ngx_http_static_module)…...

54. 螺旋矩阵

题目链接&#xff1a; a54. 螺旋矩阵 题目描述&#xff1a; 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 题目分析&#xff1a; 改题目需要判断是否溢出边界&#xff0c;与59不同&#xff0c;59可以判断是否为0…...

virtualbox虚拟机中的ubuntu 20.04.6安装新的linux内核5.4.293 | 并增加一个系统调用 | 证书问题如何解决

参考文章&#xff1a;linux添加系统调用【简单易懂】【含32位系统】【含64位系统】_64位 32位 系统调用-CSDN博客 安装新内核 1. 在火狐下载你需要的版本的linux内核压缩包 这里我因为在windows上面下载过&#xff0c;配置过共享文件夹&#xff0c;所以直接复制粘贴通过共享文…...

代码随想录算法训练营第三十八天打卡

今天是动态规划的第三天&#xff0c;昨天的不同路径与整数分解的几道题目大家理解得如何&#xff1f;如果有疑问大家还是多去想想dp数组究竟是什么含义&#xff0c;还有我的状态转移是否正确&#xff0c;初始化是否正确&#xff0c;这一点很重要&#xff0c;今天的题目依旧是跑…...

【论信息系统项目的整合管理】

论信息系统项目的整合管理 某省机场管理集团航空货运站原有物流生产信息系统无法满足机场货运站生产信息与航空公司、对方航站、进出口航空货物按海关监管要求电子报关等行业信息实时共享发展需要&#xff0c;生产信息需多次重复录入问题已成为业务发展最大瓶颈&#xff0c;急需…...

小学数学题批量生成及检查工具

软件介绍 今天给大家介绍一款近期发现的小工具&#xff0c;它非常实用。 软件特点与出题功能 这款软件体积小巧&#xff0c;不足两兆&#xff0c;具备强大的功能&#xff0c;能够轻松实现批量出题。使用时&#xff0c;只需打开软件&#xff0c;输入最大数和最小数&#xff0c…...

Python线性回归:从理论到实践的完整指南

Python线性回归&#xff1a;从理论到实践的完整指南 线性回归是数据科学和机器学习中最基础且最重要的算法之一。本文将深入探讨如何使用Python实现线性回归&#xff0c;从理论基础到实际应用&#xff0c;帮助读者全面理解这一重要的统计学和机器学习方法。 什么是线性回归&a…...

python 爬虫框架介绍

文章目录 前言一、Requests BeautifulSoup&#xff08;基础组合&#xff09;二、Scrapy&#xff08;高级框架&#xff09;三、PySpider&#xff08;可视化爬虫&#xff09;四、Selenium&#xff08;浏览器自动化&#xff09;五、Playwright&#xff08;新一代浏览器自动化&…...

强化学习算法实战:一个例子搞懂sarsa、dqn、ddqn、qac、a2c及其区别

简介 在学习强化学习算法&#xff1a;sarsa、dqn、ddqn、qac、a2c、trpo、ppo时&#xff0c;由于有大量数学公式的推导&#xff0c;觉得十分晦涩&#xff0c;且听过就忘记了。 但是当把算法应用于实战时&#xff0c;代码的实现要比数学推导直观很多。 接下来通过不同的算法实现…...

文章记单词 | 第86篇(六级)

一&#xff0c;单词释义 pretty /ˈprɪti/- adj. 漂亮的&#xff1b;相当的 /adv. 相当地labour /ˈleɪbə(r)/- n. 劳动&#xff1b;劳工&#xff1b;分娩 /v. 劳动&#xff1b;努力&#xff08;英式英语&#xff0c; labor&#xff09;imaginary /ɪˈmdʒɪnəri/- adj. …...

firewall防火墙

一.Firewalld 防火墙概述 1.firewalld 简介 firewalld 的作用是为包过滤机制提供匹配规则(或称为策略)&#xff0c;通过各种不同的规则告诉netfilter 对来自指定源、前往指定目的或具有某些协议特征的数据包采取何种处理方式为了更加方便地组织和管理防火墙,firewa11d 提供了…...

TII-2024《AGP-Net: Adaptive Graph Prior Network for Image Denoising》

推荐深蓝学院的《深度神经网络加速&#xff1a;cuDNN 与 TensorRT》&#xff0c;课程面向就业&#xff0c;细致讲解CUDA运算的理论支撑与实践&#xff0c;学完可以系统化掌握CUDA基础编程知识以及TensorRT实战&#xff0c;并且能够利用GPU开发高性能、高并发的软件系统&#xf…...

Pageassist安装(ollama+deepseek-r1)

page-assist网站&#xff1a;https://github.com/n4ze3m/page-assist 首先电脑配置node.js&#xff0c;管理员打开命令窗口输入下面命令下载bun npm install -g buncd 到你想要安装page-assist的地方&#xff08;推荐桌面&#xff09; 输入下列命令 git clone https://gith…...

Java—— 方法引用 : :

方法引用是什么 把已经存在的方法拿过来用&#xff0c;当做函数式接口中抽象方法的方法体 方法引用符 &#xff1a;&#xff1a; 方法引用的条件 1.需要有函数式接口 2.被引用方法必须已经存在 3.被引用方法的形参和返回值需要跟抽象方法保持一致 4.被引用方法的功能要满足当前…...

Linux基础开发工具大全

目录 软件包管理器 1>软件包 2>软件生态 3>yum操作 a.查看软件包 b.安装软件 c.卸载软件 4>知识点 vim编辑器 1>基本概念 2>基本操作 3>正常模式命令集 a.模式切换 b.移动光标 c.删除 d.复制 e.替换 f.撤销 g.更改 4>底行模式命令…...

C语言实现INI配置文件读取和写入

一.INI文件介绍 INI配置文件是一种简单的文本文件&#xff0c;用于存储配置信息&#xff0c;通常由一个或多个节&#xff08;section&#xff09;组成&#xff0c;每个节包含多个键值对&#xff08;Key-Value&#xff09;格式。INI文件易于阅读和编辑&#xff0c;广泛应用于多…...

volatile关键字详解

volatile关键字详解 1. 定义与核心作用 volatile 是Java中的关键字&#xff0c;用于修饰变量&#xff0c;主要解决多线程环境下的内存可见性和指令重排序问题。其核心作用&#xff1a; 保证可见性&#xff1a;确保所有线程读取到变量的最新值。禁止指令重排序&#xff1a;防止…...

二叉树子树判断:从递归到迭代的全方位解析

一、题目解析 题目描述 给定两棵二叉树root和subRoot&#xff0c;判断root中是否存在一棵子树&#xff0c;其结构和节点值与subRoot完全相同。 示例说明 示例1&#xff1a; root [3,4,5,1,2]&#xff0c;subRoot [4,1,2] 返回true&#xff0c;因为root的左子树与subRoot完…...