- 博客(26)
- 收藏
- 关注
原创 HTTP代理服务器的工作原理
HTTP通信时,客户端与服务器间常常存在中转代理服务器,来完成对目标资源的中转访问。每当HTTP请求发出后,可能被多个代理服务器转发,后面的服务器成为前面服务器的上游服务器。代理服务器按照其用途的不同,分为正向代理服务器,反向代理服务器和透明代理服务器。其中,正向代理服务器与客户端处于同一个逻辑网络中,该逻辑网络可以是本地LAN,也可以是一个更大的网络。反向代理服务器和真正的Web服务器也位于同一...
2019-09-10 16:28:40
1143
原创 stl容器之顺序容器
STL容器分为顺序容器和关联容器其中顺序容器最常用的由vector,list,queue1.vectorvector: 向量容器,可以看作变长数组,长度可根据需要自行变化。使用的头文件 #include<vector>定义方式: vector<typename> 数组名;//vector<int> ar;访问容器内数据的方式和普通数组相同...
2019-08-23 16:58:30
709
原创 vector迭代器失效
今天的写代码时遇到了类似的问题#include<vector>#include<iostream>using namespace std;int main(){ vector<int>ar; for(int i = 1; i<=5; i++) { ar.push_back(i); } vector...
2019-08-22 15:15:02
145
原创 关于i++i,i++ = x的一点见解
关于i++i,曾在一本书上看过,后置++是一个类似原子操作的不可拆分的过程,系统将后置++看作一个常量来处理。由于当时忘记记录,今日又遇到了类似的问题,于是做一个简单的分析。关于i+++i:#include<stdio.h>int main(){ int i = 1; int a = i+++i; printf("%d",a); re...
2019-08-16 22:09:24
683
原创 一个进程在内存中的存储
进程指的是运行起来的可执行程序。它会占用一定的空间和资源。每个进程拥有一个pid来唯一标识该进程。当一个新的进程被创建时也是先创建pid,再分配进程实体的。在32位系统下,每个进程的虚拟地址空间位4G(按需分配,实际上没有那么大,只是假想成4G)。而这4G地址被一个叫MMU的部件按照分页的形式映射物理内存。通过不同的页对应不同的数据段,实现不同进程间内存的隔离。如上图,PP为物理页...
2019-08-12 19:43:42
1124
原创 常用Linux目录结构
Linux下一切皆文件,所以文件目录结构是相当重要的,下面列举/目录下的一些常用目录bin 存放二进制可执行文件sbin 只有root才能执行的二进制可执行文件etc 存放系统配置文件usr 存放共享的系统资源home 普通用户的家目录lib 存放共享库,系统运行的驱动文件,密码等内容mnt 管理员安装文件系统的临时挂载点tmp 存放临时文件dev 存放设备文件...
2019-08-03 10:25:19
131
原创 PO与OO的编程思想
PO(Procedure Oriented,面向过程)。面向过程是一种按步骤一步步解决问题的编程思想。如要完成做菜的任务,需要按顺序完成以下几步:(1)洗菜(2)切菜(3)炒菜一步一步执行,最终完成任务,这就是面向过程的思想。OO(Object Oriented,面向对象)。面向对象将事物都看成对象,将具有相同特征的实物看作类。通过对类与对象的继承,封装,多态...
2019-07-31 21:44:51
1771
原创 IP数据报头部信息
IP数据报头部长度20到60字节,其中前20字节是固定长度,是所有IP数据报必须有的,后面部分为可选字段,长度可变。IP数据报头部信息4位版本号:标记使用IP地址的版本,常用4或6,分别标识IPv4或IPv6。4位首部长度:标识IP首部占多少个4字节,4位2进制最多表示15,所以最长为60字节。8位区分服务:用来获得更好的服务,一般情况下不使用。16位总长度:这里的单位为字节...
2019-07-31 20:36:31
5871
原创 常用的3类IPv4网络地址
在网络层次中,最重要的一层叫做网络层有时也叫IP层或网际层。网络层提供尽最大努力的无连接的数据报服务。其中数据报也叫数据包或分组,可以简单看作是网络中传输的数据。尽最大努力表示路由器不能随意丢弃报文。无连接指的是网络层中数据交付并不是像传统电话机一样在通信两端建立一条信道通信,而是将通信设备连成网状,发送端发送数据后,与之直接相连的每一条路都发送分组,当目的接收端收到后进行处理,如果发现是发给“我...
2019-07-31 11:32:23
4347
原创 常见的端口号
传输层为相互通信的应用进程提供逻辑通信。在进程间信息传递过程中,必须找到唯一标识对方进程的一个标识,这个标识就是端口号。我们知道,计算机中有一个唯一标识进程的标识符pid,为什么不用pid直接进行进程间通信呢?因为在互联网环境下,有各种不同的物理设备,而它们所使用的操作系统是有不同的,不同的操作系统所使用的标识符不尽相同,这样就无法在网络中标识一个特定的进程。因此就是用一种与操纵系统无关的标识符号...
2019-07-30 15:14:44
2813
原创 指针值的改变带来的问题
在今天做题时遇到了这样一个问题#include<stdio.h>int main(){ int arr[] = {1,2,3}; int *p = (int *)((int)&arr+1); printf("%08x\n",*p); return 0;}求打印结果。要做这道题要对数组arr的实际存储有所了解。假设ar...
2019-07-30 14:00:50
431
原创 TCP报文头部结构
TCP报文头部如下图所示:TCP报文头部16位端口号:告知主机该报文来自哪里以及来自哪个上层协议或应用程序的。32位序号:一次TCP通信过程中一个传输方向上字节流的编号。如果A向B发报文,报文中数据初始值会产生一个随机值ISN(初始序值号),如果A前一次发送了1024个字节,那么本次发送报文段的序号为ISN+102432位确认号:用于表示接收方对发送方的回应。数值为收...
2019-07-29 19:50:16
715
原创 TCP协议的传输特点
TCP协议是传输层的一个重要的协议,用于点对点的数据传输。它是可靠的面向连接的流式服务(1)可靠性TCP协议自带超时重传,应答确认机制,保证其可靠性。(2)面向连接TCP数据报要想发送,必须先建立连接(三次握手),然后在连接好的双方之间进行数据传输。三次握手:服务器向客户端发送带SYN标志位的请求报文,表示请求连接(初始值i)。客户端收到后发送带SYN标志位和ACK标志位的报文,...
2019-07-29 19:14:45
2559
原创 c中动态申请内存的细节问题
c语言中动态内存常用到4个函数malloc 原型void * malloc(size_t size);用于动态开辟size大小的空间。calloc 原型void *calloc(size_t num,size_t size);用于对已开辟的数组元素初始化为0num为数组中元素个数,size为每个元素的字节长度realloc 原型void*realloc(...
2019-07-28 17:54:24
1230
原创 排序
选择排序在一组数据中每次选最小的放在前面。第1趟找最小的,每找到一个数据比当前数据小,则两两交换,找到最小的后放在第1个位置,第2趟在剩下的数据中找最小的放在第2个位置,第i趟,在剩下的数据中找最小的放在第i个位置,直到找完整个数组。由于我在每一次找最小时都是从前往后遍历,前一个循环找到的最小元素一定在后一次循环找到的最小元素前面,所以这是一个稳定的排序(当然每次从后往前找最小元素就...
2019-07-26 11:32:02
85
原创 文件切换和删除需要注意的点
常用的目录.当前目录.. 切换到当前目录的上一层~ 当前使用者的家目录- 上一层目录每一个目录文件下都会有 . 和 .. 这两个目录,包括 / 目录。(根目录下的 .. 目录中也是它本身)这里做了一个小测试。在根目录下,使用ls -a查看所有目录,然后cd .. 进入上一层目录,再次查看,发现仍然在根目录下cd切换目录用法 cd + 路径(如果不写绝对路...
2019-07-21 10:25:34
110
原创 自治静态库与共享库
在c/c++程序执行中,需要用到各种提前写好的函数或方法,避免程序员每次都费力地编写常用的代码。这里的提前写好的函数的集合就是库文件了。库文件分为两类,静态库和共享库。静态库在每次代码编译时直接加进代码里,作为可执行程序的一部分,以.a来表示。共享库不加入程序中,只在程序运行时调动使用,以.so表示。 下面分别制作一个简单的静态库和共享库创建.c文件在当前目录下创建add....
2019-07-19 21:26:28
168
2
原创 gcc与g++编译的区别
c/c++代码的运行,需要经历预编译,编译,汇编,链接然后生成可执行文件众所周知c代码的编译默认使用gcc编译,调用c编译规则,链接c函数库。cpp代码默认使用g++编译,调用c++编译规则,链接c++函数库。如果用gcc编译cpp文件,则需要加参数-lstdc++链接c++库,这样就可以链接c++库,编译cpp文件了如下图这是原cpp代码test.cpptest.cpp用...
2019-07-19 17:52:09
348
原创 c++中异常处理
在很多程序设计中为了解决异常情况常常会有专门的方式解决,在c++中常用到try,throw, catch三个关键字处理异常。try用于标识出可能出现异常的代码段;catch用于处理try中标识的出现异常的数据类型,一般还会有catch(...)表示捕获省略可能出现的所有异常;throw抛出异常。下面给出一个简单的例子:#include<iostream>d...
2019-05-15 20:32:58
74
原创 C++中4个默认函数的调用
构造函数:用于对象产生时给已分配的内存做初始化拷贝构造:用已存在的对象构造出一个同类型的新的对象等号运算符重载:用一个已存在的对象给另一个相同类型的已存在对象赋值析构函数:释放对象所占的资源在产生新的对象时,系统先开辟出适当的空间会,然后调用构造函数或拷贝构造函数分配资源,对象销毁时要调用析构,然后释放资源。下面一组代码可以清除看出系统调用这几个默认函数的时间...
2019-05-05 21:11:13
362
原创 初识Linux中c&c++编译链接
在Linux操作系统下,一份普通的c|c++ 代码需要执行一般会经过以下几个步骤(以c为例);源文件源代码预编译:删除注释,处理预处理指令,头文件等(带“#”的部分),然后生成后缀为 ".i"的文件本次生成的main.i内部编译:语法分析,语义分析,汇总符号,代码优化,生成后缀名为".s"的文件;本次生成的main.s内部汇编:将汇编指令...
2018-11-27 18:57:28
185
原创 初识递归
为了缩小问题规模,我们常常在一些问题中使用递归的方法比如求n的阶乘,我们可以用递归算法解决 图1分别用0,1,4测试 图2结果如下: 图3主函数的调用,会有独立的栈帧,如下图左(以n=4为例),当主函数中调用(图2)Fac(4)时...
2018-06-10 23:19:22
118
原创 关于n进制数等式成立时的n值问题
声明:本文暂时只讨论算法讨论,不做代码实现问题有些抽象不好描述,所以先引用一道阿里巴巴笔试题说明()进制下,下面等式成立567*456=150216A.9 B.10 C.12 D.18方法一:看尾数7*6=42;42%n=6;对照选项带出答案C,D然后计算十进制567*456=258552;结果比150216大很多,排除12进制,大致估算选D方法二:(5*n^2+6*n+7)*(...
2018-05-21 23:08:21
170
原创 浅谈c语言中的入门小知识
c语言中,基本数据类型有:整型,浮点类型整型:short int(短整型,2字节),int(整形,4字节),long int(长整形,大于等于8字节),long long int(长长整形),char(字符型,由于每个字符的编码实际上也用为整型编,所以在此大概理解为整形,1字节)浮点类型:float(单精度浮点类型,4字节),double(双精度浮点类型,8字节),long double(大于等于...
2018-05-10 11:49:09
170
原创 switch
c语言语法灵活,程序常常自由度大,书写限制较少,但也有个别特例不那么完美,switch语句便是如此switch (语句表达式0){case 常量表达式1: 语句块1;break;case 常量表达式2: 语句块2;break;......default: 语句块n;}有两个问题决定了switch的不灵活:1. 语句表达式0限制严格,只能用布尔型,整型,字符型等基本数据类型;(原因是此处需要给...
2018-05-10 11:05:33
122
原创 浅谈c语言中浮点数的精度问题
众所周知,在生活中常常出现因精度而产生的各种问题,如流水线生产出现个别产品量的缺少等,这是无法避免的,因此常常规定,只要保证误差在一定范围内就算合格。在c语言中也会存在类似的问题如下面这段程序粗略计算一元二次方程的根(当然在严密的纯数学问题里不存在精度不够的问题,此处小编只是随便找个当例子)在此采用宏的方式,给定一个合理的误差范围,从而解决误差问题那么为什么会存在误差呢原来,浮点数存在精度问题,如...
2018-05-06 12:09:14
11773
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人