菩提网络 - 网络技术分享的网站 - 408
type: channel
link: https://www.1023.lol/tag/408/
items: 通讯的三种基本形式
items: 408计算机网络背诵宝典：从基础到高阶全梳理
items: 计算机专业大学生：如何把四年过成「技能爆发期」？​
items: 数据结构-栈的操作

通讯的三种基本形式
type: item
date: 2025-10-25T20:37:10+08:00
description: 在计算机网络中信道是一个很重要的核心概念简单来说就是三种弹单工，半双工，全双工。单工通讯只要是单一的，直接的数据流向数据传输的方向是单一的，一方是发送端，一方是接收端，只向一个固定的方向前进举例说明 - 广播电台，电视信号半双工通讯数据可以俩个方向上传输，但是不能同时传输，用八个字概括就是双向交替，不能同时。举例说明 - 对讲机全双工通信 - 数据可以在俩个方向上同时进行传输，同时双向传输，举例说明 - 电话通话，

408计算机网络背诵宝典：从基础到高阶全梳理
type: item
date: 2025-08-03T11:43:11+08:00
description: 第一章：计算机网络体系结构**计算机网络基础概念计算机网络是利用通信设备和线路将功能独立的多个计算机互联起来，通过功能完善的管理软件实现网络中资源共享和信息交互。其功能涵盖数据通信（实现计算机与终端、计算机与计算机之间的信息快速传送 ，像日常的文件传输、网页浏览等）、资源共享（共享网络中的软件、硬件和数据资源，例如共享打印机、数据库资源等）、分布式处理（多台计算机分工处理同一个任务的不同部分，如 Hadoop 平台用于大规模数据处理）、提高可靠性（当一台计算机出现故障，其他计算机可替代工作）以及负载均衡（多台计算机分担工作任务，避免单台计算机负载过重）。计算机网络依据分布范围，可分为广域网（WAN ）、城域网（MAN ）、局域网（LAN ）和个人区域网（PAN ）。广域网覆盖范围通常是直径为几十千米到几千千米的区域，是因特网的核心部分，用于远程数据传输和大规模的网络通信，如跨国公司的数据交换；城域网覆盖范围可以跨越几个街区甚至是整个城市，直径范围是 5 - 50 千米，大多采用以太网技术；局域网一般用微机或工作站通过高速线路相连，覆盖范围较小，通常是直径几十米到几千米的区域 ，在计算机配置数量上无太多限制，传统上使用广播技术；个人区域网是指在个人工作的地方将消费电子设备用无线技术连接起来的网络，覆盖区域直径约为 10 米。按使用者分类，可分为公用网（如中国电信、移动、联通等向公众开放的网络）和专用网（像军队、政府、银行、铁路、公安等仅供特定组织内部使用的网络 ）。常见的基本拓扑结构包括总线形、星形、环形、树形和网状形。总线形结构采用广播式传输方式，所有设备通过一个共同的通信线路连接，数据在总线上 “广播” 传输，可能会存在总线争用问题，典型代表是集线器连接的网络；星形结构中所有数据流都经过中央设备（如交换机或集线器），每个节点通过独立的连接与中央设备相连，实现 “点到点” 的通信，不存在 “总线争用” 问题，以太网交换机是典型代表；环形结构中数据通过 “令牌” 依次传递，每个设备都需要获得令牌才能发送数据，避免了总线争用的问题，令牌环网是这种结构的典型代表，曾广泛应用于 2000 年以前的局域网技术；树形结构结合了星型和总线型拓扑的特点，有一个主干链路，从主干上分出多个星型子网，形成层次结构，易于扩展和管理，故障隔离相对容易 ，常用于大型企业网络和校园网络；网状形结构中每个设备（节点）与其他设备直接连接，数据通过中间节点逐一存储并转发，属于 “点到点” 传输，由众多路由器构建的广域网是网状结构的典型代表，具有高冗余性和可靠性，但成本高、管理复杂。从逻辑功能上，计算机网络可分为资源子网和通信子网，资源子网负责实现资源共享和数据处理，通信子网负责实现数据通信。性能指标详解带宽是指在一定时间内（通常是 1 秒）能够通过网络从一个点传送到另一个点的最大数据量 ，单位是比特 / 秒（bit/s ），常见单位还有千比特每秒（Kbps）、兆比特每秒（Mbps ）、吉比特每秒（Gbps）等 ，它反映了网络连接的能力。比如，我们常说的 100M 宽带，这里的 100M 指的是 100Mbps ，即理论上每秒能传输 100,000,000 比特的数据。时延是指一个数据块从网络的一端传送到另一端所需要的时间，单位是秒（s） ，由发送时延、传播时延、处理时延和排队时延组成。发送时延是主机或路由器发送数据帧所需要的时间，计算公式为发送时延 = 数据帧长度（比特）/ 信道带宽（比特 / 秒） ，数据帧越长、信道带宽越低，发送时延越大；传播时延是电磁波在信道中传播一定距离需要花费的时间 ，计算公式为传播时延 = 信道长度（米）/ 电磁波在信道上的传播速率（米 / 秒） ，信道越长、传播速率越低，传播时延越大；处理时延是主机或路由器在收到分组时进行处理（如分析分组首部、提取数据、差错校验、查找路由等）所花费的时间，其大小取决于主机或路由器的性能以及分组的大小和复杂性；排队时延是分组在经过网络传输时，在路由器输入队列和输出队列中排队等待处理和转发所花费的时间，其大小取决于网络拥塞程度、路由器的处理能力和队列的大小等因素。吞吐量是指单位时间内通过某个网络（或信道、接口）的数据量，受网络带宽和网络拓扑结构等因素影响 。速率即数据率、比特率，指的是单位时间内传输的数据量，单位为 bit/s。信道利用率是指某信道有百分之几的时间是被利用的（有数据通过），信道利用率并非越高越好，因为当信道利用率过高时，会产生较大的时延。体系结构与参考模型网络体系结构是计算机网络的各个层次及其相关协议的集合，是对计算机网络所完成功能的精确定义 。在网络体系结构中，涉及到接口数据单元（IDU）、服务数据单元（SDU）、协议数据单元（PDU） 。IDU 是在相邻层之间传输的数据单元；SDU …

计算机专业大学生：如何把四年过成「技能爆发期」？​
type: item
date: 2025-07-15T08:12:00+08:00
description: 计算机专业大学生：如何把四年过成「技能爆发期」？（附场景图解）凌晨三点的实验室里，键盘敲击声此起彼伏；图书馆的角落，有人对着《算法导论》眉头紧锁；宿舍的屏幕上，一行行代码突然跑出结果，引发一阵欢呼…… 计算机专业的大学生活，常常在代码、算法和调试中交织。但同样是四年，有人毕业时手握大厂 offer，有人却连基础编程都磕磕绊绊。关键不在于努力的程度，而在于能否把时间花在「真正能沉淀技能」的地方。今天就来聊聊，计算机专业学生如何让大学生活既充实又能攒满技能点。​​md3s4k2a.png图：实验室里的协作时光 —— 很多核心技能都是在团队讨论中碰撞出来的大一：筑牢地基，别让「入门即放弃」上演大一的计算机课程，总被新生吐槽「太枯燥」：《计算机导论》里的二进制原理、《C 语言程序设计》中的指针概念，仿佛天书。但这些看似乏味的内容，恰恰是构建知识体系的基石。数学课要当「硬骨头」啃。很多人觉得编程靠的是逻辑，数学不重要 —— 这是典型的误区。线性代数是机器学习的基础，概率论支撑着数据分析，离散数学更是算法设计的灵魂。大一的高等数学、线性代数课程，哪怕不能全懂，也要搞清楚核心概念。可以试试用编程验证数学公式，比如用 Python 计算定积分，既练了代码又理解了定理，一举两得。图：用代码验证数学公式 —— 让抽象的定理变成可交互的结果编程语言学习拒绝「浅尝辄止」。C 语言是很多专业的入门课，有人觉得学会 printf 输出「Hello World」就够了，这就大错特错了。真正要掌握的是内存管理、指针操作和函数递归 —— 这些是理解计算机底层逻辑的关键。建议用 C 语言做一个小项目，比如贪吃蛇游戏或简易计算器，在调试指针错误的过程中，你会对「内存地址」产生直观认知。加入一个「技术氛围组」。无论是学校的计算机社团，还是线上的编程社区（比如 GitHub 校园群），找到志同道合的同学至关重要。大一可以组队参加「新生程序设计大赛」，哪怕拿不到奖，那种为了一个 bug 熬夜调试的经历，会让你对编程的理解远超课堂。图：编程竞赛的意义不在于获奖，而在于逼自己突破能力边界大二：深耕技术栈，从「会用」到「懂原理」大二是专业课程的「爆发期」，操作系统、计算机网络、数据结构等核心课接踵而至。这时候不能再满足于「完成作业」，而要主动追问「为什么」。在操作系统课上「解剖」电脑。当学到进程管理时，不妨打开任务管理器，观察不同程序的 CPU 占用率；学到内存分页时，试试用 C 语言写一个简单的内存分配器。有个学生为了理解「死锁」，用多线程模拟了四个哲学家吃面的场景，当看到程序卡在那里不动时，瞬间明白了「资源竞争」的危害。** 图：用代码复现操作系统概念 —— 让抽象的「死锁」变得可视化计算机网络要「动手抓包」。课本上的 TCP/IP 协议栈抽象难懂，但用 Wireshark 抓一次网页请求包，就能直观看到三次握手的过程。试着用 Python 写一个简单的 HTTP 服务器，当浏览器能显示你输出的 HTML 时，对「客户端与服务器通信」的理解会深得多。图：抓包分析让网络协议从文字变成可触摸的数据流数据结构要「刷起来」但别「刷傻了」。很多人陷入「刷题误区」，只追求数量不总结规律。正确的做法是：每学一种数据结构（比如树、图），先搞懂它的适用场景 —— 为什么红黑树适合做数据库索引？哈希表的冲突解决有哪些优劣？然后针对性地刷 20 道题，总结解题模板。大二下学期可以开始参加 LeetCode 周赛，把排名当作进步的标尺。尝试「技术深耕」。大二可以确定一个大致方向（比如前端、后端、嵌入式），但不必过早定型。选一门感兴趣的选修课（比如人工智能导论、移动应用开发），配套做一个小项目：用 Flutter 写个待办 APP，用 TensorFlow 训练个图像识别模型，哪怕功能简单，也是技术栈的第一次实践。图：跨方向尝试 —— 在实践中找到自己真正感兴趣的领域大三：项目驱动，让简历「有料可写」大三是从「学习」到「应用」的转折点，这时候的核心任务是：用项目把知识串联起来，形成可迁移的技能。参与「有真实场景」的项目。学校的课程设计往往脱离实际，但企业级项目需要考虑性能、安全、可扩展性。可以加入老师的科研课题组，参与实际的开发任务；或者在 GitHub 上找开源项目贡献代码（从修复简单 bug 开始）；甚至接一些小外包（比如帮企业做个官网），哪怕报酬微薄，也能积累真实经验。图：给开源项目贡献代码 —— 让全世界看到你的技术能力关注「工程化能力」。优秀的程序员不仅会写代码，更会管理代码。学习 Git 版本控制，用 GitHub 管理项目；尝试用 Docker 部署应用，理解「环境一致性」的重要性；写规范的注释和文档 —— 这些看似琐碎的事情，会让你在团队协作中脱颖而出。图：工程化工具链 —— 让代…

数据结构-栈的操作
type: item
date: 2025-07-09T18:32:31+08:00
description: #include "stdio.h" #include "stdlib.h" typedef int E; struct Stack{ E * array; int capacity; int top; }; typedef struct Stack * ArrayStack; int initStack(ArrayStack stack){ stack->array = (E*)malloc(sizeof(E) * 10); if(stack->array == NULL) return 0; stack->capacity = 10; stack->top = -1; return 1; } int pushStack(ArrayStack stack,E element){ if(stack->top+1==stack->capacity){ int newCapacity = stack->capacity+(stack->capacity >> 1); E * newArray = (E*)realloc(stack->array,newCapacity*sizeof(E)); if(newArray == NULL) return 0; stack->array = newArray; stack->capacity = newCapacity; } stack->array[stack->top+1] = element; stack->top++; return 1; } void printStack(ArrayStack stack){ printf("| "); for (int i = 0; i < stack->top + 1; ++i) { printf("%d, ", stack->array[i]); } printf("\n"); } int isEmpty(ArrayStack stack){ return stack->top == -1; } int popStack(ArrayStack stack){ return stack->array[stack->top--]; } int main(){ struct Stack stack; initStack(&stack); for (int i = 0; i < 3; ++i) { pushStack(&stack, i*100); } printStack(&stack); while (!isEmpty(&stack)) { printf("%d ", popStack(&stack)); //将栈中所有元素依次出栈 } }