网络编程实验
前言
一些网络编程的实验,和网络编程的概念,参考书APUE,这里主要通过实验来理解概念。只有实践才是验证真理的唯一标准。
第一天
网络模型
目标
一些网络编程概念,无需马上全部了解,结合后序实验理解起来更佳。
实现简单的C/S的模型。
OSI七层模型
物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。
数据链路层:定义了如何让格式化数据以帧为单位进行传输,以及如何让控制对物理介质的访问。这一层通常还提供错误检测和纠正,以确保数据的可靠传输。如:串口通信中使用到的115200、8、N、1
网络层:在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择。Internet的发展使得从世界各站点访问信息的用户数大大增加,而网络层正是管理这种连接的层。
传输层:定义了一些传输数据的协议和端口号(WWW端口80等),如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要 ...
10大排序
前言
在我刚学数据结构的时候,我觉得这些算法很死板,大不了直接背会了不就完了。但后来我发现我根本记不住,过一阵子就会忘记,更别提算法的思想了。所以我总结这十大基本算法。其中代码只是载体,最重要的是其中的思想。这些思想无一不展现了早期计算机科学家的智慧。当然对于我来说即使是公认为最简单的冒泡排序也是很难的。但我还是觉得这些东西还是很值得琢磨的。
10大排序简称"堆雪插炮击,统计快归西",分别为堆排序、选择排序、插入排序、冒泡排序、基数排序、桶排序、计数排序、归并排序、希尔排序。
冒泡排序
主要思想
冒泡排序字如其名不做过多解释,假设我们使用数组来作为载体,其中数组长度为MAX。
大体思路(排序从小到大): 首先对数组遍历,使其每一次遍历都会使最大的元素到数组的末尾,实现方法就是将像第一次样的遍历,只不过其中上一次最大的已经是数组中最大的,这一次就不用将其考虑在内,比较相邻两个元素,将较大的往后移。
实现方式
这里我使用到了随机数,为了避免运行时的偶然性,其中数组大小可以更改MAX宏。使用时间来作为随机数种子,其代码主要实现方式如上。
代码实现
12345678 ...
git的使用
仓库篇
创建仓库
12git initgit init newrepo
配置
1234567891011121314git config --list #查看当前git的配置信息git config -e #针对当前仓库git config -e --global #针对系统上所有仓库#告诉Git你是谁git config --global user.name "name"git config --global user.email youemail#选择你喜欢的文本编辑器git config --global core.editor vim#添加一些快捷方式(别名)git config --global alias.st statusgit config --global alias.co checkoutgit config --global alias.br branchgit config --global alias.up rebasegit config --global alias.cm commit
git免除账号密码
git config - ...
gcc的使用
gcc的使用
gcc编译4步骤
gcc编译常用参数
-I 指定头文件所在目录位置
-c 只做预处理,编译,汇编。得到二进制文件
-g 编译时添加调试文件,用于gdb调试
-Wall 显示所有警告信息
-D 向程序中“动态”注册宏定义
-l 指定动态库库名
-L 指定动态库路径
-o 指定生成文件名称
vim的使用
vim的使用
vim的三种工作模式
vim基本操作
命令行模式
i 进入编辑模式,光标前插入字符
a 进入编辑模式,光标后插入字符
o 进入编辑模式,光标所在行的下一行插入
I 进入编辑模式,光标所在行的行首插入
A 进入编辑模式,光标所在行的行末插入字符
O 进入编辑模式,光标所在行的上一行插入字符
s 删除光标所在字符并进入编辑模式
S 删除光标所在行并进入编辑模式
x 删除光标所在字符,工作模式不变
dw 删除光标所在单词,要求光标在首字母上,如果不在首字母,只会删除当前位置到单词末,工作模式不变
D 删除光标所在位置到行末,工作模式不变
0(数字) 光标移到行首,工作模式不变
$ 光标移到行尾,工作模式不变
d0 删除光标所在位置到行首,工作模式不变
d$ 删除光标所在位置到行末,工作模式不变
h 左移
j 下移
k 上移
l 右移
gg 跳转到首行
G 跳转到末行
大括号跳转
命令模式下,光标处于左大括号时,使用%跳转到对应右大括号,再按%跳回去。
其他括号也可以这样
删除
替换单个 ...
makefile的使用
一、makefile是什么?
Makefile是一个描述文件,用于自动化构建程序的过程。它指定了如何从源代码文件生成可执行文件或库文件等目标文件。Makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,以及在什么情况下需要重新编译。
二、使用步骤
makefile或Makefile 才可以 使用make 命令
1 个规则:
目标:依赖条件
(一个tab缩进)命令
1. 目标的时间必须晚于依赖条件的时间,否则,更新目标
2. 依赖条件如果不存在,找寻新的规则去产生依赖条件。
ALL:指定 makefile 的终极目标。(否则把第一个规则的目标当做总目标)
2个函数:
作用: $(name) 取name的值 在脚本中变量的值就是字符串
src = $(wildcard ./*.c): 匹配当前工作目录下的所有.c 文件。将文件名组成列表,赋值给变量 src。 src = add.c sub.c div1.c
obj = $(patsubst %.c, %.o, $(src)): 将参数3中,包含参数1的部分,替换为参数2。 obj = ...
gdb的使用
一、gdb是什么?
GDB,全称GNU调试器(GNU Debugger),是一个强大的Unix/Linux下的源代码调试工具。它允许你以单步方式执行程序,并查看变量值、内存内容等,从而帮助程序员找出程序中的问题。
二、基础命令
1.首先在使用gcc编译是加上 -g得到调试表
1gcc <要编译的文件> -g
2.gdb基础指令
1234567891011121314151617list # list 1 列出源码。根据源码指定 行号设置断点。b # b 20 在20行位置设置断点。run/r # 运行程序n/next #下一条指令(会越过函数)s/step #下一条指令(会进入函数)p/print #p i 查看变量的值。continue #继续执行断点后续指令。finish #结束当前函数调用。 quit #退出gdb当前调试。
3.其他命令
123456789101112131415161718192021222324252627282930313233run #使用run查找段错误出现位置。set args #设置main函数命令行参数 (在 s ...
测试图片2
数学公式测试
♡\heartsuit♡、 ∞\infty∞、 ∭\iiint∭、∂\partial∂ 行内公式
行间公式
sin2(θ)+cos2(θ)=1\sin^2(\theta) + \cos^2(\theta) = 1
sin2(θ)+cos2(θ)=1
∑n=1∞k\sum_{n=1}^\infty k
n=1∑∞k
∫abf(x) dx\int_a^bf(x)\,dx
∫abf(x)dx
limx→∞exp(−x)=0\lim\limits_{x\to\infty}\exp(-x) = 0
x→∞limexp(−x)=0
模板测试
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
@TOC
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、pandas是什么?
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
二、使用步骤
1.引入库
代码如下(示例):
12345678import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsimport warningswarnings.filterwarnings('ignore')import sslssl._create_default_https_context = ssl._create_unverified_context
2.读入数据
代码如下(示例):
123data = pd.read_ ...