自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

原创 后端开发核心技术 第1章 C++编程常用技术

1.1第一个C++程序1、include 这不是一个C++语句,是一个预处理语句。include一个文件,就是把这个文件所有内容都加进来2、include<>常用来包含系统提供 的头文件,编译器会到系统标准头文件的位置查找头文件,include""常用来包括程序员自己编号的头文件,编译器先查找当前目录是否有指定的头文件,然后从标准头目录中进行查找3、include和include...

2020-05-06 10:37:46 327

原创 数据库的三大设计范式

第一范式关系模式R的所有属性都不能再分,叫属性不可分,也叫列不可分。比如不能设计“张三是男”,应该分为两个属性姓名和性别/第二范式满足第一范式,并R的所有非‘‘主键属性都完全依赖于主键。(其他列必须完全依赖于主键列,如果出现不完全依赖,只可能发送再联合主键的情况)-- 订单表CREATE TABLE myorder ( product_id INT, customer_id INT, product_name VARCHAR(20), customer_name

2020-06-17 21:21:43 305

原创 mysql 建表约束

建表约束主键约束-- 主键约束-- 使某个字段不重复且不得为空,确保表内所有数据的唯一性。CREATE TABLE user ( id INT PRIMARY KEY, name VARCHAR(20));-- 联合主键-- 联合主键中的每个字段都不能为空,并且加起来不能和已设置的联合主键重复。CREATE TABLE user ( id INT, name VARCHAR(20), password VARCHAR(20), PRIMARY

2020-06-17 19:47:08 167

原创 mysql基本语法

登录和退出mysql服务器登录mysqlmysql -u root -p123456(其中123456是密码)退出mysql数据库exit;基本语法显示所有数据库show databases;创建数据库CREATE DATABASE test;切换数据库use test;显示数据库中的所有表show tables;创建数据表CREATE TABLE pet (name VARCHAR(20),owner VARCHAR(20),species VARCHAR(20

2020-06-17 19:33:34 215

原创 关系型数据库与非关系型数据库

关系型数据库关系型数据库:指采用了关系模型来组织数据的数据库。关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。关系模型中常用的概念:关系:一张二维表,每个关系都具有一个关系名,也就是表名元组:二维表中的一行,在数据库中被称为记录属性:二维表中的一列,在数据库中被称为字段域:属性的取值范围,也就是数据库中某一列的取值限制关键字:一组可以唯一标识元组的属性,数据库中常称为主键,由一个或多个列组成关系模式:指对关系的描述。其格式为:关系名(属性1

2020-06-06 23:14:02 260

原创 window10 装 mysql

下载下载地址:https://www.mysql.com/downloads/解压并放在自己想要放在的位置(1)配置环境变量(2)生成data文件以管理员身份运行cmd进入D:\mysql\mysql-8.0.20-winx64\bin>下执行命令:mysqld --initialize-insecure --user=mysql 在D:\mysql\mysql-8.0.20-winx64\bin目录下生成data目录(3) 安装MySQL继续执行命令:mysqld -i

2020-06-06 23:01:32 167

原创 后端开发核心技术 第9章多线程 线程的属性

线程的属性线程有一组属性是可以在县城在创建时指定的。线程属性对象的类型为pthread_attr_t。//线程属性结构如下:typedef struct{ int etachstate; //线程的分离状态 int schedpolicy; //线程调度策略 structsched_param schedparam; //线程的调度参数 int

2020-05-29 10:00:52 132

原创 后端开发核心技术 第9章多线程 多线程的创建与结束

线程的创建包括头文件#include<pthread.h>线程创建函数pthread_createint pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),void *restrict arg);返回值  若成功则返回0,否则返回出错编号参数  第一个参数为指向线程标识符的指针。  第二个参数用来设置线程属性。  第三个参

2020-05-28 11:02:04 107

原创 后端开发核心技术 第9章多线程 多线程是什么

多线程是什么单线程程序如下图,各个方块之间由箭头连接,而各个函数就像是连在一根线上一样,计算机像一条流水线一样执行各个函数中定义的操作。多线程程序允许一个进程内存在多个控制权,以便让多个函数同时处于激活状态,从而让多个函数的操作同时运行main()到func3()再到main()构成一个线程,此外func1()和func2()构成另外两个线程。操作系统一般都有一些系统调用来让一个函数运行成一个新的线程。...

2020-05-28 10:32:12 176

原创 后端开发核心技术 第8章 网络分析工具 lsof

lsof简介lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系

2020-05-28 09:28:29 101

原创 后端开发核心技术 第8章 网络分析工具 netstat

netstatnetstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。usage: netstat [-veenNcCF] [<Af>] -r netstat {-V|--version|-h|--help} netstat [-vnNcaeol] [<Socket> ...]

2020-05-28 09:06:05 122

原创 后端开发核心技术 第8章 网络分析工具 tcpdump

tcpdumpTcpdump就是Linux平台下一个以命令行方式运行的网络流量监测工具。他能截获网卡上收到的数据包,并能够协助网络管理员对其中的内容进行相应的分析。嗅探器能够截获指定接口或任何接口的数据包,这取决于如何对嗅探器进行配置。缺省情况下嗅探器一般会显示任何从网络上截获的数据包,但通常会因为数据量过大而使网络管理员理不清头绪。因此,嗅探器一般都提供有相应的机制来对截获的数据包进行过滤,从而只显示符合特定需要的数据包。Tcpdump提供了一整套完善的规则来对截获的数据包进 行过滤,由于大多数图像

2020-05-27 11:06:04 78

原创 后端开发核心技术 第8章 网络分析工具 ping

ping介绍ping(Packet Internet Groper,因特网包探索器)是Windows,UNIX和Linux系统下的一个命令。ping也属于一个通信协议,是TCP/IP协议的一部分。利用ping命令可以检查网络是否联通。ping发送一个ICMP(因特网信报控制协议),请求消息给目的地并报告是否收到所希望的ICMP echo(ICMP回声应答),它是用来检查网络是否通畅或者网络连接速度的命令。原理:利用网络上机器IP地址的唯一性,给目标IP地址发送一个数据包,再要求对方返回一个同样大小

2020-05-27 10:47:53 119

原创 后端开发核心技术 第7章网络IO模型 select poll epoll的区别

epoll与select、poll的对比1. 用户态将文件描述符传入内核的方式select:创建3个文件描述符集并拷贝到内核中,分别监听读、写、异常动作。这里受到单个进程可以打开的fd数量限制,默认是1024。poll:将传入的struct pollfd结构体数组拷贝到内核中进行监听。epoll:执行epoll_create会在内核的高速cache区中建立一颗红黑树以及就绪链表(该链表存储已经就绪的文件描述符)。接着用户执行的epoll_ctl函数添加文件描述符会在红黑树上增加相应的结点。2. 内

2020-05-27 09:45:18 104

原创 后端开发核心技术 第7章网络IO模型 epoll

概念初探epoll是一种I/O事件通知机制,是linux 内核实现IO多路复用的一个实现。IO多路复用是指,在一个操作里同时监听多个输入输出源,在其中一个或多个输入输出源可用的时候返回,然后对其的进行读写操作。I/O输入输出(input/output)的对象可以是文件(file), 网络(socket),进程之间的管道(pipe)。在linux系统中,都用文件描述符(fd)来表示。事件可读事件,当文件描述符关联的内核读缓冲区可读,则触发可读事件。(可读:内核缓冲区非空,有数据可以读取)可写事

2020-05-27 09:29:18 166

原创 后端开发核心技术 第7章网络IO模型 poll

函数原型#include<poll.h>int poll(struct pollfd* fds,unsigned int nfds,int timeout);pollfd结构定义如下struct pollfd{ int fd;//文件描述符 short events;//等待的事件 short revents;//实际发生了的事情};

2020-05-26 11:04:42 77

原创 后端开发核心技术 第7章网络IO模型 select

select可以完成非阻塞方式工作的程序,能够监视需要被监视的文件描述符的变化情况-----读、写或异常select函数原型int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval* timeout);fd_set理解为一个集合,这个集合存放的是文件描述符(file descriptor),即文件句柄。一个socket就是一个文件select参数maxfdp是一个整数值,是指集合

2020-05-25 09:02:45 101

原创 后端开发核心技术 第7章网络IO模型 4种网络IO模型

IO两种操作同步IO必须等待IO操作完成后,控制权才给用户进程异步IO无须等待IO 完成操作,就将控制权给用户进程网络中IO常见4种情况输入操作:等待数据达到套接字接收缓冲区输出操作:等待套接字发送缓冲区有足够的空间容纳将要发送的数据服务器接受连接请求:等待新的客户端连接请求的到来客户端发送连接请求:等待服务器回送客户发起的SYN对应的ACK4种网络IO模型阻塞IO模型非阻塞IO模型多路IO复用模型异步IO模型...

2020-05-23 08:47:13 135

原创 后端开发核心技术 第6章tcp 封包与解包

粘包连续两次send两端数据data1和data2,接收端有几种接收情况1、先data1,在data22、先data1的部分数据,在data1余下的部分以及data23、先data1的全部和data2的部分,然后接受data2的余下数据4、一次性接受data1和data2的全部数据234就是长说的“粘包”,就需要把接受的数据进行拆包,拆成一个个独立的数据包,而为了拆包必须在发送端进行封包原因1、由Nagle算法造成发送端的粘包,当提交一段数据给TCP发送时,TCP不立刻发送此段数据,而是等待

2020-05-22 10:52:35 503

原创 后端开发核心技术 第6章tcp 头部选项

TCP头部选项TCP头部的最后一个选项字段(options)是可变长的可选信息。这部分最多包含40字节,因为TCP头部最长是60字节(其中还包含前面讨论的20字节的固定部分)。典型的TCP头部选项结构如下图所示。选项的第一个字段kind说明选项的类型。有的TCP选项没有后面两个字段,仅包含1字节的kind字段。第二个字段length(如果有的的话)指定该选项的总长度,该长度包括kind字段和length字段占据的2字节。第三个字段info(如果有的话)是选项的具体信息。常见的TCP选项有7中,如下图

2020-05-22 09:49:12 155 1

原创 后端开发核心技术 第6章tcp 拥塞控制

慢开始拥塞控制快重传发送方连续收到3个重复确认就应当立即重传对方尚未收到的报文段,不必等待设置的重传计时器时间到期快恢复

2020-05-21 10:03:50 91

原创 后端开发核心技术 第6章tcp 滑动窗口

TCP滑动窗口的可靠性只有收到接收端对于本段发送窗口内字节的ACK确认,才会移动发送窗口的左边界。

2020-05-21 09:55:43 66

原创 后端开发核心技术 第6章tcp 超时重传

RTO(Retransmissino TimeOut,重传超时时间)指的是发送端发送数据后,重传数据前等待接收方收到该数据报文的ack时间。RTO设置对重传很重要1、设长了,重发慢,效率差2、设短了,重发快,增加网络堵塞,更多的超时导致更多的重发。TCP协议使用自适应算法TCP监视每个连接的性能,由每一个TCP的连接情况推算出合适的RTO值,当连接时延性能变化时间,TCP也能够自动修改RTO的设定,适应网络的变化引入RTT(Round Trip Time)也就是连接往返时间,通过RTT来设置一

2020-05-21 09:46:57 135

原创 后端开发核心技术 第6章tcp 状态流转

三次握手和四次挥手三次握手四次挥手

2020-05-21 09:13:13 62

原创 后端开发核心技术 第6章tcp 头部

16位端口号告知主机报文源端口和目的端口,在tcp通信中,客户端通常使用系统自动选择的临时端口号,而服务器使用知名服务端口号。32位序号表示一次tcp通信过程(从建立连接到断开)过程中某一次传输方向上的字节流的每个字节的编号。假定主机A和B进行tcp通信,A传送给B一个tcp报文段中,序号值被系统初始化为某一个随机值ISN,那么在该传输方向上(从A到B),后续的所有tcp报文断中的序号值都会被设定为ISN加上该报文段所携带数据的第一个字节在整个字节流中的偏移。例如某个TCP报文段传送的数据是字节流中.

2020-05-21 08:38:51 136

原创 后端开发核心技术 第6章tcp 网络模型

七层网络模型当主机需要传送用户的数据(data)时1、首先通过应用层的接口进入应用层,在应用层加上应用层报头***(Ppplication Header,AH)***,形成应用层协议数据单元***(Protocol Data Unit,PDU)***2、表示层堆应用层数据进行封装,加上表示成的报头***(Presentation Header,PH)***3、会话层、传输层、网络层、数据链数层把上级加上报头,会话层报头 SH,传输层报头 TH、网络层报头 NH,数据链路层报头 DH,其中数据链路层

2020-05-20 11:30:51 102

原创 后端开发核心技术 第5章调试Valgrind

Valgrind概述内存分析工具ValgrindMemcheck重量级的内存检查其,能够发现绝大多数内存错误使用情况。比如:使用未初始化的内存,使用已经释放的内存,内存访问越界的问题Callgrind与gprof类似的分析工具,对程序的运行观察更是入微。与gprof不同,不需要再编译源代码时附加特殊选项,但推荐加上调试选项。Callgrind收集程序运行的一些数据,建立函数调用关系图。在运行结束时,它会把分析数据写入一个文件。callgrind——annotate可以把这个文件的内容转换成可读

2020-05-19 08:29:03 150

原创 后端开发核心技术 堆栈的区别

申请方式不同栈:系统自动分配堆:程序员自己分配,并申明大小,malloc/new申请后系统的响应不同栈:只要栈的剩余空间大于申请空间,系统将为程序提供内存,否则报异常,提示栈溢出堆:首先应该知道操作系统有一个记录空闲内存的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间中大于所申请空间的堆节点,然后将该节点从空闲结点链表中删除,并将该节点的空间分配给程序。由于找到的堆节点的大小不一定刚好等于申请大小,系统会自动地将多余的那部分放入空闲链表申请大小的限制不同栈:从高地址向低地址进行扩展

2020-05-14 10:32:50 162

原创 后端开发核心技术 Linux内存空间布局

1

2020-05-14 09:54:36 160

原创 后端开发核心技术 第5章调试 ps

psps提供进程的一次性的查看,查看结果不动态连续;如果想要对进程时间监控,应该用topLinux进程的5种状态运行(正在运行或在运行队列中等到)中断(休眠中,受阻,在等待某个信号)不可中断(收到信号不唤醒和不可运行,进程必须等待有中断发生)僵死(进程已终止,但是进程描述符存在,直到父进程调用wait4()系统调用后释放)停止(进程收到SIGSTOP,SIGSTP,SIGTIN,SIGTOU信号后停止运行)ps工具表示进程的5种状态码D 不可中断R 运行S 中断T 停止Z 僵死命

2020-05-14 09:12:53 131

原创 后端开发核心技术 第5章调试 top

命令字段详解第一行:系统运行时间和平均负载当前时间、系统已运行时间、当前登录用户的数量、最近5、10、15分钟内的平均负载第二行:任务任务的总数、运行中(running)的任务、休眠(sleeping)中的任务、停止(stopped)的任务、僵尸状态(zombie)的任务第三行:cpu状态第四行:内存全部可用内存、已使用内存、空闲内存、缓冲内存第五行:swap全部、已使用、空闲和缓冲交换空间第七行至N行:各进程任务的的状态监控常用参数与命令d:指定每两次屏幕信息刷新之间的时间

2020-05-13 11:19:45 120

原创 后端开发核心技术 第5章调试 gdb coredump

gdb简介gdb是gcc的调试工具,主要用于C和C++这两种语言编写的程序,功能强大,主要体现在以下4点:①启动程序,可以按照用户自定义的要求随心所欲地运行程序②可让被调试的程序在指定的断点处停住③当程序被停住时,可以检查此时程序运行的状态④动态的干部程序的执行环境要调试,必须在编译时,要将调试信息加到可执行文件中。使用编译器 -g参数可以做到gcc -g hello.c -o hellog++ -g hello.cpp -o hello如果没有-g,则看不到程序的函数名,变量名,所替代

2020-05-13 10:12:37 139

原创 后端开发核心技术 第5章调试 strace

系统调用什么是系统调用所有操作系统在其内核都有一些内建的函数,这些函数可以用来完成一些系统级别的功能,这些函数被称为系统调用,这些函数代表了用户空间到内核空间的一种转换例如用户空间调用open函数,在内核空间中则会调用sys_open。系统的错误码系统调用并不直接返回错误码,而是将错误码放入到一个名为errno的全局变量中。errno的值只在函数发生错误时设置。如果函数不发生错误,errno的值就无定义,并不会被置为0.另外,在处理errno钱最好将它的变量存入另一个变量,因为在处理过程中,即使

2020-05-12 15:02:11 94

原创 后端开发核心技术 第4章编译 makefile的撰写

普通makefile编写准备三个文件:file1.h,file1.cpp,file2.cppfile.h#ifndef FILE1_H_#define FILE1_H_#ifdef __cplusplus extern "C" { #endif void File1Print(); #ifdef __cplusplus } #endif#endiffile1.cpp#include <iostream>#in

2020-05-11 20:33:49 116

原创 后端开发核心技术 第4章编译 g++和gcc的区别

g++和gcc的区别误区一: gcc只能编译c,g++只能编译c++一、后缀为c,gcc把它当作c程序,g++当作是c++程序,后缀为c++,两者都认为是c++程序,C++的语法更加严谨二、编译阶段,g++会调用gcc,对于C++代码,两者是等价的;但是gcc抿了不能自动和C++程序使用的库链接,所以通常g++,给人一种错觉,只能用g++误区二:gcc不会定义__cplusplus宏,而g++会实际上,这个宏只是标志着编译器会把代码按C还是C++语法来解释。如果后缀是c,并且采用gcc,则该宏未定

2020-05-11 16:44:45 72

原创 后端开发核心技术 第4章编译 静态链接和动态连接

静态连接在编译时间完成,所有相关的目标文件与牵涉到的函数库被链接合成一个可执行文件,通常为“libxxx.a”的形式add.h#ifndef _ADD_H_#define _ADD_H_int add(int a, int b);#endifadd.cpp#include "add.h"int add(int a, int b){ return a+b;}sub.h#ifndef _SUB_H_#define _SUB_H_int sub(int a, int b)

2020-05-11 15:04:15 103

原创 后端开发核心技术 第4章编译 编译与连接

编译与连接主要分为4个步骤,分别是预处理、编译、汇编和连接预处理g++ -E helloword.cpp -o helloworld.i-E的编译选项,只执行到预编译,直接输出预编译结果主要处理那些源代码文件只能够的以“#”开始的预编译指令,比如#include、#define等,主要处理规则如下一、删除所有的#defie,并展开所有的宏定义二、处理所有的条件预编译指令,比如#if、#ifdef、#elif、#else、#endif...

2020-05-11 09:00:07 155

原创 后端开发核心技术 第3章STL map

map是什么map的本质关联式容器,属于模板类关联的本质在于元素值与某个特定的键相关联,而并非通过元素在数组的位置类获取 key - valuemap的功能自动建立key-value的一一对应的关系。学生学号用int,姓名用intmap<int,string>mapStudent;map头文件#Include<map>,注意,STL头文件没有扩张名map的插入(3种方式)insert函数插入pair数据//insert函数插入pair数据#include

2020-05-10 16:00:48 76

原创 后端开发核心技术 第3章STL vector

内存管理与效率size()获得容器中有多少元素capacity()获得容器在它已经分配的内存中可以容纳多少元素resize(Container::size_type n)强制将容器改为容纳n个元素。调用resize函数之后,size函数将返回n。当n小于当前大小,尾部元素被销毁当n大于当前大小,新默认构造的元素会添加到容器尾部当n大于当前容量,在元素加入之前会进行重新分配reserve(Container::size_type n)强制容器把它的容量改为不小于n,提供的n不小于当前所需

2020-05-10 09:22:57 72

原创 后端开发核心技术 第3章STL string

char[] 与 char*的区别char str[12] = "Hello";//存放在栈区,可以被修改char *p = str;*p = 'h';//改变第一个字母char *ptr = "Hello";//常量,不能被改变*ptr = 'h';//错误string类的实现string.h的声明class String{public: String(const ch...

2020-05-08 15:00:18 77

空空如也

空空如也

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

TA关注的人

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