自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

hello呀!

hello world!

  • 博客(85)
  • 收藏
  • 关注

原创 C 和 C++的区别 / struct 和 class 的区别 / 指针和引用的区别 / new 与 malloc 的区别 / 堆和栈的区别 / sizeof 和 strlen 的区别

C++ 的内存管理机制C++ 内存分配方式,五个区:堆区、栈区、自由存储区、全局/静态存储区、常量存储区。不能访问未申请、未初始化的内存、申请失败的内存或者已经释放的内存free 和 delete 后要将指针置空,防止野指针的出现不要忘记释放内存,否则会导致内存泄露不能越界访问内存32 位、64 位系统下各数据类型所占用的内存空间64 位系统下除了指针类型和 long long ...

2020-09-05 09:17:51 1390

原创 TCP和UDP对比总结

传输层位于网络层之上,它为运行在不同主机上的的进程之间提供了逻辑通信,而网络层提供了主机之间的逻辑通信。即使网络层不可靠,传输层同样能为应用程序提供主机之间的逻辑通信。传输层提供的功能如下:传输层提供应用进程之间的逻辑通信,即端到端的通信。与网络层的区别是网络层提供主机到主机之间的通信。复用和分用。复用是指发送方不同的应用进程都可以使用同一个传输层协议传送数据,分用是指接收方的传输层在剥去...

2020-09-04 09:49:47 1398

原创 关联式容器

关联式容器是用来存储数据的,与序列式容器不同的是,其存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高。键值对用来表示具有一一对应关系的结构,该结构中一般只含两个成员变量key和value,key代表键值,value表示与key对应的信息。比如:现在要建立一个英汉互译的字典,那该字典中必然有英文单词与其对应的中文含义,而且,英文单词与其中文含义是一一对...

2020-09-03 18:12:41 518

原创 OSI 网络模型

OSI 网络模型开放系统互联参考模型OSI (Open Systcm Interconnection Reference Mode)是国际标准化组织(ISO)提出的一个设计和描述网络通信的基本框架,包括了物理层、数据链路层、网络层、传输层、会话层、表示层、应用层(共7层)。通常把OSI网络模型的低四层(物理层、数据链路层、网络层、传输层)称为数据流层,而把高三层(会话层、表示层、应用层)称为应...

2020-07-06 16:11:00 261

原创 Mac下安装配置rz sz

安装iTerm2建议去官网下载 http://www.iterm2.com/下载好后安装即可安装rz sz安装rz sz 前的准备 安装brew一般我们在linux系统上,会使用软件包管理器yum或者apt,而homebrew简称brew,它的功能类似yum或者apt,它是max osx上的软件包管理工具。安装homebrew 只需要下面一条语句即可ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/inst

2020-06-05 15:31:40 1878

原创 new 与 malloc 的区别

new 与 malloc 的区别new 操作符从自由存储区(free store)上为对象动态分配内存空间,而 malloc 函数从堆上动态分配内存。new 操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换,故 new 是符合类型安全性的操作符。而 malloc 内存分配成功则是返回 void *,需要通过强制类型转换将 void * 指针转换成我们需要的...

2020-04-21 09:31:53 185

原创 野指针

定义野指针就是指向的位置是不可知的(随机的、不正确的、没有明确限制的)指针。成因指针变量未初始化任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。如果没有初始化,编译器会报错“ ‘point’ may be uninitializedin the function ”。指针释放后...

2020-04-19 20:34:10 182

原创 HTTP的常见方法 / HTTP状态码 / HTTP版本

GET方法:获取资源客户端请求指定资源信息,服务器返回指定资源。POST方法:传输实体主体一般用于表单的提交数据,将客户端的数据提交到服务器PUT方法:传输文件在请求报文主体中包含文件的内容,然后保存到请求URL指定的位置。HEAD方法:获得报文首部请求HTTP 首部,响应报文中用于确认URL的有效性及资源更新的日期时间等。DELETE方法:删除文件请求服务器删除指定的资源。...

2020-04-19 10:13:33 338

原创 IP协议规定的IP地址

IP协议规定的IP地址网络(该网络是指宏观的因特网,也即该地址拥有独立IP)中的任何一台数据设备都必须有一个独一无二的IP地址,在IP协议中规定了一个IP地址由4个字节组成,如192.168.16.17,其可以转换为相应的二进制。在IP协议中定义了A、B、C、D共4种主要的地址类。A类地址:第一位固定为0,第一个字节(前8位)为网络标识符,用来标识网络,其余3个字节用来标识网络中的主机,因...

2020-04-06 16:12:39 1241

原创 错排问题

n个有序的元素应有n!个不同的排列,如若一个排列使得所有的元素不在原来的位置上,则称这个排列为错排;有的叫重排。如,1 2的错排是唯一的,即2 1。1 2 3的错排有31 2,2 3 1。这二者可以看作是1 2错排,3分别与1、2换位而得的。错排公式编辑递推关系为求其递推关系,分两步走:第一步,考虑第n个元素,把它放在某一个位置,比如位置k,一共有n-1种放法;第二步,考虑第k个元素...

2020-03-20 11:29:21 618

原创 TCP的三次握手和四次挥手

三次握手第一次握手:客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,如同意建立连接,确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态。第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕...

2020-03-10 11:29:12 194

原创 冒泡排序、插入排序、希尔排序、选择排序、堆排序

插入排序基本思想:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列。void InsertSort(vector<int>&v){ for (int i = 1; i < v.size(); i++) { int k = v[i]; ...

2020-03-09 10:17:44 343

原创 动态规划应用举例_背包问题

背包问题(Knapsack Problem)一个旅行者随身携带一个背包. 可以放入背包的物品有n 种, 每种物品的重量和价值分别为wi , vi .如果背包的最大重量限制是b, 每种物品可以放多个. 怎样选择放入背包的物品以使得背包的价值最大? 不妨设上述wi , vi , b 都是正整数. 实例:n= 4,b =10 v1= 1, v2= 3, v3=5, v4= 9,w1= 2,...

2020-03-03 17:43:05 1162

原创 动态规划算法

动态规划的定义动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程最优化的数学方法。动态规划问题的特点求解过程是多阶段决策过程,每步处理一个子问题。每步求解的问题是后面阶段求解问题的子问题。每步决策将依赖于以前步骤的决策结果。问题要满足优化原则或最优子结构性质,即:一个最优决策序列的任何子序列本身一定是相对于子序列的初始和结束状态的最优决策序列。...

2020-03-03 17:32:09 404

原创 分治算法应用举例_选择问题、选最大与最小、选第 k 小

选择问题输入:集合L (含n个不等的实数)输出:L中第i 小元素i=n,称为最大元素i=1, 称为最小元素位置处在中间的元素,称为中位元素n为奇数,中位数唯一,i= (n+1)/2n为偶数,可指定i= n/2+1选最大算法:顺序比较最坏情况下的时间n-1最大最小同时选选最大最小通常算法:1. 顺序比较,先选最大max2. 顺序比较,在剩余数组中选最小min,类似于选最大算法...

2020-03-02 14:38:08 2909

原创 分治算法应用举例_二分检索、快速排序、归并排序

二分检索利用分治策略求解时,所需时间取决于分解后子问题的个数、子问题的规模大小等因素,而二分法,由于其划分的简单和均匀的特点,是经常采用的一种有效的方法,例如二分法检索。基本思想通过x 与中位数的比较,将原问题归结为规模减半的子问题,如果x 小于中位数,则子问题由小于x 的数构成,否则子问题由大于x 的数构成.假设表中元素是按升序排列,将表中间位置记录的关键字与检索关键字比较,如果两者相等...

2020-03-01 16:44:31 1335

原创 分治算法

分治算法的基本思想将原始问题划分为规模较小的子问题。递归或迭代求解每个子问题的解。将子问题的解综合得到原问题的解。分治算法的步骤分解将要解决的问题划分成若干规模较小的同类问题。求解当子问题划分得足够小时,用较简单的方法解决。合并按原问题的要求,将子问题的解逐层合并构成原问题的解。分治算法的特点原问题可以划分为规模较小的子问题。子问题与原问题具有相同的性质。子问...

2020-03-01 16:29:09 3584

原创 第一次软件测试

软件测试的生命周期软件测试的生命周期:需求分析→测试计划→测试设计、测试开发→测试执行→测试评估软件测试&软件开发生命周期需求阶段测试人员了解需求、对需求进行分解,得出测试需求计划阶段根据需求编写测试计划/测试方案设计阶段测试人员搭建测试用例框架,根据需求和设计编写一部分测试用例编码阶段测试人员一般是不需要编码的,但已经编码的模块,专业的白盒测试人员可以计划执行单元测...

2020-02-27 09:46:24 367

原创 软件测试基础篇

软件测试的定义证明软件不存在错误的过程证明程序能够正确运行的过程验证软件功能是否满足用户需求的过程软件测试的定义随着发展而不断扩展,但软件测试最基本的活动就是找bug。不同的定义只是说明了测试的目的以及如何来衡量测试是否成功。软件测试的发展软件调试独立的软件测试(1950~)软件测试的第一次定义(1973~Bill Hetzel),软件测试就是对程序能够按预期的要求运行建立起...

2020-02-26 09:16:56 713

原创 软件测试用例篇

测试用例的基本要素测试用例的概念:测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合,这组集合包含:测试环境、操作步骤、测试数据、预期结果等要素。评价测试用例的标准:表达清楚,无二义性。可操作性强。输入与输出明确。一条用例只有一个预期结果。可维护性好。对需求的覆盖率高。暴露程序Bug的能力强。测试用例的好处是测试执行者的依据使得工作可重复,是...

2020-02-25 15:10:32 508

原创 Linux 的 TCP 编程

TCP是TCP/IP协议族中面向连接的可靠协议,本文将介绍其工作流程以及在Linux中对其进行编程的方法。TCP基础同其他任何协议栈一样, TCP向相邻的高层提供服务。因为TCP的上一层就是应用层,因此,TCP数据传输实现了从一个应用程序到另一个应用程序的数据传递。应用程序通过编程调用 TCP 并使用TCP服务,提供需要准备发送的数据,用来区分接收数据应用的目的地址和端口号。通常情况下, ...

2019-12-09 12:22:40 588

原创 不用加减乘除做加法。写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。1.使用++,- -运算符class Solution {public: int Add(int num1, int num2) { if (num1 > 0) { while (num1--) num2++; } else { while (num1++) ...

2019-12-06 17:13:56 249

原创 Linux C 网络_建立连接函数

当使用 socket 函数建立一个套接字并且绑定了地址之后,即可使用connect函数来和服务器建立一个连接。#include <sys/types.h>#include <sys/socket.h>int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);其中参数 sockfd ...

2019-11-18 21:50:26 429

原创 Linux C 网络_绑定套接字函数

在创立了套接字之后需要将本地地址和套接字绑定在一起,此时可以调用 bind 函数。#include <sys/types.h>#include <sys/socket.h>int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);参数 sockfd 是使用 socket 函数创建的套接...

2019-11-18 20:36:46 665

原创 Linux C 网络_创建套接字描述符函数

Linux 使用 socket 函数来创建一个套接字描述符。#include <sys/types.h>#include <sys/socket.h>int socket(int domain, int type, int protocol);如果函数调用成功,则返回套接字的描述符,是一个正整数,如果函数调用失败则返回 -1。对函数中的各个参数描述如下:**...

2019-11-18 20:08:32 463

原创 Linux C 网络_域名转换函数族

在实际的网络应用中,常常会使用类似 “www sina. com.cn" 这样的域名替代 IP 地址来标识一个服务器,所以需要函数将域名和实际的 IP 地址进行转换。Linux 在 netdb.h 头文件中定义了一个结构体,用于描述一个主机的相关参数,其形式如下:struct hostent{ char *h_name;//主机的正式名称 char *h_aliases;//...

2019-11-13 21:01:28 167

原创 Linux C 网络_IP地址转换函数族

通常 IP 地址会被表示为 “192.168.1.1” 这样的 “点分十进制” 方式,而在 Linux 的网络编程中会使用32位二进制值,所以 Limux 提供了函数族用于将这两个数值进行转换,这些函数包括 inet_aton、inet_ntoa 和 inet_addr 等。IP 地址转换函数族inet_aton 函数用于将点分十进制数的 IP 地址转换成为网络字节序的 32 位二进制数值。...

2019-11-13 20:31:10 1028

原创 Linux C 网络_字节操作函数族

套接字地址为多字节数据而不是以空字符结尾,所以 Linux 提供了两组函数来处理这个多字节数据。1. 第一组函数第一组函数是和 BSD 系统兼容的函数,包括了 bzero、beopy 和 bcmp。函数 bzero 将参数 s 指定的内存的前 n 个字节设置为 0,通常用它来将套接字地址清零。#include <strings.h>void bzero(void *s, ...

2019-11-12 22:40:03 145

原创 Linux C 网络_字节顺序转换函数

字节顺序转换函数计算机内部的数据存储通常有两种:大端模式:高位字节优先。(高位存在低地址)小端模式:低位字节优先。(低位存在低地址)以32位宽度的数据0x12345678为例,大端模式和小端模式的存放方法如下表:内存地址0x80000x80010x80020x8003大端模式0x120x340x 560x78小端模式0x780x560x3...

2019-11-12 22:08:21 306

原创 Linux 的端口和套接字

Linux 的端口是一个逻辑概念,其由 TCP/IP 协议定义,是一个 0–65535 之间的数字,可以分为常用的“固定”端口和通用端口两个部分。“固定”端口是指一些常用的软件或者 TCP/IP 协议中确定和公布的,通常来说不会被其他程序使用。Linux 中的常见“固定”端口和对应的协议协议端口号FTP21TELNET23TFTP69SNMP16...

2019-11-06 17:40:57 555

原创 Linux 套接字的结构定义

Linux 在头文件 sys/socket.h 中定义了一种通用的套接字结构类型,以供不同的协议进行调用,对其说明如下:struct sockaddr{ unsigned short int sa_family;//套接字协议地址类型 unsigned char sa_data[14];//14字节的协议地址,包括IP地址和端口};sa family:套接字的协议族地...

2019-11-06 17:00:03 376 1

原创 Linux 进程的基础属性

Linux系统上所有运行的任务都可以是一个进程,每个用户任务、每个系统管理,都可以称之为进程,Linux用分时管理的方法使所有的任务共同分享系统资源。进程的定义:在自身的虚拟地址空间运行的一个单独程序。进程是动态的,程序是静态的,进程由程序产生,但不是程序。进程是一个随时都可能发生变化的、动态的、使用系统运行资源的程序,一个程序可以启动多个进程。1. 进程的四要素要有一段程序代码以供该程序...

2019-11-05 09:28:58 543

原创 Linux 的进程标识方法

1. 进程描述符2. 进程标识符3. Linux进程的用户4. 进程标识的获取实例

2019-11-01 21:18:26 2132

原创 Linux 退出进程和销毁进程

退出进程当一个进程执行结束后必须要退出,退出时内核会进行一系列的相应操作。在 Linux 中,共有 8 种进程的退出方法,其中包括 5 种正常的方法和 3 种异常的方法。通常来说 Linux 的应用代码会调用 exit 系列函数来退出一个进程,对其标准调用格式说明如下:#include<stdlib.h>#include<unist.h>void exit(int...

2019-10-25 08:43:28 1414

原创 C++_红黑树的概念及实现

红黑树的概念红黑树(Red Black Tree) 是一种自平衡二叉搜索树,是在计算机科学中用到的一种数据结构。红黑树在每个节点上增加一个存储位表示结点的颜色,可以是Red或Black。过对任何一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,因而是接近平衡的。红黑树在二叉搜索树的基础上还满足:每个节点不是红色就是黑色;根节点是黑色的;如果一...

2019-10-25 08:38:22 370

原创 Linux 的进程操作(执行进程)

如果需要在子进程中执行一些自定义的动作,则需要调用 exec 函数族。当进程调用 exec 系列函数的时候,该进程执行的程序被立即替换为新的程序,而新程序则从 main 函数开始执行,并立刻替换掉了当前进程的正文段、数据段、堆和堆栈,需要注意的是其进程标识符和进程描述符是不会改变的。1. exec函数族基础exec函数族提供了一一个在进程中启动另一个程序执行的方法,其可以根据指定的文件名或目...

2019-10-23 17:55:06 601

原创 Linux 的进程操作(创建进程)

在Linux中,创建一个新进程的唯一方法是由某个已存在的进程调用 fork 或 vfork 函数,被创建的新进程称为子进程(child process),已存在的进程称为父进程(father process)。1. fork函数基础#include <unistd.h>pid_t fork(void);用户可以通过 fork 函数的返回值来分辨父进程和子进程。2. 子进程和父...

2019-10-21 21:35:40 1327

原创 Linux 的网络通信模型

一、OSI 网络模型计算机网络模型是为了简化网络的研究、设计与实现而抽象出来的一种结构模型, 通常采用层次模型。在每个层次模型中,往往将系统所要实现的复杂功能分化为若干个相对简单的细小功能,每一项分功能以相对独立的方式去实现。开放系统互联参考模型OSI (Open Systcm Interconnection Reference Mode)是国际标准化组织(ISO)提出的一个设计和描述网络通信...

2019-09-29 17:43:37 312

原创 C++实现龙贝格求积分算法

#include <iostream>#include <cmath>using namespace std;#define N 20#define MAX 10 //数组存的最大行数#define a 0 //积分上限#define b 1 //积分下限#define eps 1e-6 //精度double f(double x)...

2019-09-26 20:47:56 5503 1

原创 C++实现复化辛普森公式求积分算法

#include<iostream>using namespace std;double fun(double x) { return 4 / (1 + x * x);}double Simpson(double a, double b, int n) { double h = (b - a) / n; double s1 = fun(a + ...

2019-09-21 20:53:36 9432 4

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除