自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【数据库】数据库安全性

目录前言:一、数据库安全概述1.数据库的不安全因素2.安全标准TCSEC/TDI安全级别划分:二、数据库安全性控制1.用户身份鉴定2.存取控制3.自主存取控制(1)GRANT(向用户授予对数据的操作权限)(2)REVOKE(回收用户对数据的操作权限)(3)数据库角色4.强制存取控制5.视图机制6.审计7.数据加密(1)存储加密(2)传输加密8.其他安全保护(1)推理控制(2)隐蔽通道(3)数据隐私前言:数据库的安

2021-04-21 23:26:19 114

原创 【网络编程】服务器模型和I/O模型

目录一、服务器模型1、C/S(客户端/服务器)模型2、P2P(点对点)模型二、服务器基本框架①I/O处理单元②逻辑单元③网络存储单元④请求队列三、I/O模型①阻塞I/O②I/O复用③SIGIO信号④异步I/O一、服务器模型1、C/S(客户端/服务器)模型(1)C/S模型:所有客户端都通过访问服务器来获取所需的资源。具体如下图1所示:图1 C/S模型(2) C/S模型的TCP服务器和TCP客户端的工作流程。如图2所示:图2C...

2021-04-13 23:10:58 14

原创 【C++】智能指针

目录前言一、智能指针引入一、auto_ptr、二、unique_ptr三、shared_ptr四、weak_ptr前言内存管理是C++中的一个常见的错误和bug来源。在大部分情形中,这些bug来自动态分配内存和指针的使用:当多次释放动态分配的内存时,可能会导致内存损坏或者致命的运行时错误;当忘记释放动态分配的内存时,会导致内存泄露。所以,我们需要智能指针来帮助我们管理动态分配的内存。其来源于一个事实:栈比堆要安全的多,因为栈上的变量离开作用域后,会自动销毁并清理。智能指针结合

2021-04-08 15:51:41 14

原创 【网络编程】socket编程

目录前言一、socket介绍二、socket通信过程三、socket接口函数(1)创建socket——socket()(2)命名socket——bind()(3)监听socket——listen()函数(4)接受连接——accept函数(5)发起连接——connect()函数(6)关闭连接——close()函数(7)数据读写——read()、write()函数四、实例演示前言网间进程通信要解决的是不同主机进程间的相互通信问题。首先要解决的是网间进程标识

2021-04-06 22:31:02 53

原创 【C++】STL 序列式容器源码剖析

一、vectorvector 基本能够支持任何类型的对象,同时它也是一个可以动态增长(二倍)的数组,使用起来非常的方便。【问题】它是如何做到动态扩容的呢?1、vector 基本数据结构基本上,STL 里面所有的容器的源码都包含至少三个部分: 迭代器,遍历容器的元素,控制容器空间的边界和元素的移动; 构造函数,满足容器的多种初始化; 属性的获取,比如 begin(),end()等; vector 也不例外,其实看了源码之后就发现,vector 相反是所有容器.

2021-04-05 15:48:06 250

原创 【计算机网络】TCP协议

目录前言一、TCP服务的特点二、TCP头部结构1.TCP固定头部结构2.TCP头部选项三、TCP的建立和关闭(三次握手和四次挥手)(1)三次握手(2)四次挥手(3)TCP通信实例(4)TCP状态转移图(5)TIME_WAIT 状态四、复位报文段五、TCP超时重传六、拥塞控制前言TCP协议是TCP/IP协议族中另一个重要的协议,相比IP协议,TCP在应用程序中具有更强的可操作性。接下来通过四个方面讨论TCP协议:TCP协议头部信息。TCP

2021-04-04 23:38:27 42

原创 【计算机网络】IP协议

前言IP协议是TCP/IP 协议族的核心协议,也是socket网络编程的基础之一。本文从两个方面深入探讨IP协议:IP头部信息。IP头部信息出现在每个IP数据报中,用于指定IP通信的源端IP地址、目的端IP地址,指导IP分片和重组,以及指定部分通信行为。 IP数据报的路由和转发。IP数据报的路由和转发发生在除目标机器之外的所有主机和路由器上,它们决定数据报是否应该转发以及如何转发。一、IP服务的特点IP协议是TCP/IP协议族的动力,它为上层协议提供无状态、无连接、不可靠的服务。无状.

2021-04-04 17:00:47 32

原创 【C++】C++三大特性——封装、继承、多态

一、封装利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外接口使之与外部发生联系。系统的其他对象只能通过包裹在数据外面的已经授权的操作来与这个封装的对象进行交流和交互。也就是说用户是无需知道对象内部的细节,但可以通过该对象对外的提供的接口来访问该对象。1、封装的意义:封装的意义在于保护或者防止代码(数据)被我们无意中破坏。 保护成员属性,不让类以外的程序直接访问和修改; 隐藏方法细节,使代码

2021-03-22 14:52:30 27

原创 【数据库】SQL语言

一、SQL语言概述SQL(Structured Query Language)结构化查询语言,是关系数据库的标准语言,SQL是一个通用的、功能极强的关系数据库语言。1、特点综合统一集数据定义语言 DDL(Data Definition Language),数据操纵语言 DML(Data Manipulation Language),数据控制语言 DCL(Data Control Language) 功能于一体。高度非过程化非关系数据模型的数据操纵语言“面向过程”,必须制定存取路径SQL只

2021-03-21 13:31:10 112

原创 【数据库】数据库系统

目录一、数据库系统四个概念1、数据(Data)2、数据库(Database)3、数据库管理系统(Database Management System )4、数据库系统(Database System)二、数据模型1、数据模型的组成2、常见的数据模型3、概念模型4、层次模型5、网状模型6、关系模型三、数据库系统的三级模式模式(Schema)外模式(External Schema)内模式(Internal Schema)三级模式结构图...

2021-03-20 12:44:11 101 1

原创 【C++】STL相关容器的对比

目录一、序列容器(vector、list、deque)1、vector(向量容器)2、list(链表容器)3、deque(双端队列容器)二、关联容器(set、multiset、map、 multimap)1、set(集合)/multiset(多重集合)2、map(映射)/multimap(多重映射)3、unordered_set(无序集合)/unordered_multiset (无序多重集合) unordered_map( 无序映射)/unordered_...

2021-03-19 23:43:16 28

原创 【计算机网络】TCP/IP协议族(主要协议、封装、分用、与socket的关系)

目录前言一、TCP/IP协议族体系结构以及主要协议1)数据链路层2)网络层3)传输层4)应用层二、封装三、分用四、socket和TCP/IP协议族的关系前言因特网中使用的主流协议族是TCP/IP协议族,它是一个分层、多协议的通信体系。本文将简要讨论TCP/IP 协议族各层包含的主要协议,以及它们之间是如何协作完成网络通信的。一、TCP/IP协议族体系结构以及主要协议TCP/IP 协议族是一个四层协议系统,自底而上分别是数据链路层、网络层、传输层、应用层..

2021-03-18 17:54:09 118

原创 【软件测试】软件测试基础

自动化测试的意义自动测试可以让测试人员从枯燥无味的手工重复性测试中解放出来,并且提高工作效率,通过自动化测试结果来分析功能和性能上的缺陷。测试结束的准则一个测试结束的标准可以查看已经提交的bug是否已经全部解决并已经验证关闭,一般来说,bug验证率在95%以上,并且没有大的影响功能的bug处于未解决状态,就可以测试通过。一个测试计划中包括哪些内容1)需要测试的产品的特点和主要功能模块,列出需要测试的功能点,并标明侧重点2)测试的策略和记录(测试工具的确认,测试用例等文档模板,测试方法的确

2021-03-17 16:09:34 43

原创 【Linux】git使用

目录一、Git简介二、Git的安装和使用1. git安装2.创建版本库3.添加文件到Git仓库【git add、git commit】3.查看仓库状态及版本差异4.版本回退5.撤销修改6.删除文件7.远程仓库8.分支管理一、Git简介Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Git 与常用的版本控制工具

2021-03-16 21:44:07 20

原创 【C++】string类

前言C++大大增强了对字符串的支持,除了可以使用C风格的字符串,还可以使用内置的 string 类。string 类处理起字符串来会方便很多,完全可以代替C语言中的字符数组或字符串指针。string 是 C++ 中常用的一个类,它非常重要。使用 string 类需要包含头文件<string>。string常用方法1.构造函数string 类有多个构造函数,用法示例如下:string s1(); // s1 = ""(变量 s1 只是定义但没有初始化,编...

2021-03-16 00:38:04 19

原创 【Linux】Linux程序编译(gcc编译和gdb调试)

一、gcc使用1.gcc简介gcc命令使用GNU推出的基于C/C++的编译器,是开放源代码领域应用最广泛的编译器,具有功能强大,编译代码支持性能优化等特点。gcc是GNU编译器套件(GNU Compiler Collection),它包括了C、C++、Objective-C、Fortran、Java、Ada、Go语言和D语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)。GCC的初衷是为GNU操作系统专门编写的一款编译器。GNU系统是彻底的自由软件。此处,“自由”的含义是

2021-03-14 17:32:04 78 2

原创 【Linux】Vim文本编辑器

目录一、Vim文本编辑器二、编写文档练习一、Vim文本编辑器在Linux系统中一切都是文件,而配置一个服务就是在修改其配置文件的参数。而且在日常工作中大家也肯定免不了要编写文档,这些工作都是通过文本编辑器来完成的。学习Linux不是仅仅停留在“会用某个操作系统”的层面上,而是掌握Linux系统的运维方法,所以我们这里选择使用Vim文本编辑器,它默认会安装在当前所有的Linux操作系统上,是一款超棒的文本编辑器。Vim编辑器中设置了三种模式—命令模式、末行模式和编辑模式,每种模式分别又支持

2021-03-13 23:21:59 31 1

原创 【计算机网络】网络分层(TCP/IP分层模型)

目录一、网络分层结构1.什么是网络?2.常见的网络分层模型3.TCP/IP四层模型二、为什么要网络分层?一、网络分层结构1.什么是网络?网络是由若干节点和连接这些节点的链路构成,表示诸多对象及其相互联系。2.常见的网络分层模型3.TCP/IP四层模型数据链路层:数据链路层包含软件与硬件的接口部分,以及各种网络设备的硬件,也就是整个网络通信过程中最底层的基础设施。网络层:网络层是用来处理流动的数据包,也就是如果把相应的数据路由到指定的地点,为通信时的网络

2021-03-05 23:35:28 63

原创 【C编程】简单编程练习——(4)方阵顺时针旋转与方阵的转置

目录一、问题描述二、问题求解(1)方阵顺时针旋转(以3阶方阵为例)问题分析:程序设计:(2)方阵转置(以3阶方阵为例)问题分析:程序设计:一、问题描述问题:1.将一个n阶方阵按顺时针方向旋转90度。2.将一个n阶方阵进行转置。实例:1 2 34 5 67 8 9按顺时针旋转90度后方阵为:7 4 18 5 29 8 3转置后的方阵为:1 4...

2020-11-17 23:03:17 346

原创 【C编程】简单编程练习——(3)求正整数的位数、各位数字及逆序整数

目录一、问题描述二、问题求解问题分析:(1)求正整数的位数(2)求整数的各位上的数(3)逆序输出一、问题描述问题:给一个不多于5位的正整数,要求:①求出它是几位数;②分别输出每一位数字;③按逆序输出各位数字实例:123是一个3位数,百位、十位、个位分别为1,2,3;逆序输出为321;输入:123输出:31 2 3321二、问题求解问题分析:(1)求正整数的位数方法一:对正整数进行整除10操作,每次整除都能整数就少

2020-11-13 20:17:57 1332

原创 【C编程】简单编程练习——(2)最大公约数和最小公倍数

目录一、问题描述二、问题求解问题分析:程序设计:方法一:(穷举法)方法二:(辗转相除法(也称欧几里德算法))方法三:(更相减损法)一、问题描述问题:求m和n的最大公约数和最小公倍数。实例:2和4的最大公约数是2,最大公倍数是8输入:2 4输出:4 8二、问题求解问题分析:(1)最大公约数:(也称最大公因数,最大公因子),指两个或多个整数共有约数中最大的一个。a,b的最大公约数记为(a,b),求最大公约数有多种方法,常见的有质因数分解

2020-11-12 19:23:56 133

原创 【C++】继承(基础概念、隐藏、派生类默认成员函数、与友元和静态成员的关系)

一、继承的概念1、继承的概念继承(inheritance)机制是面向对象程序设计使代码可以复用的重要手段,它允许程序员在保持原有类特性的基础上进行拓展,增加功能,这样产生的新类,称为派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。class Person{public: void Print() { cout << "name:" << _name << endl; cout &

2020-11-11 23:28:57 47

原创 【C++】友元函数和友元类(作用及优缺点)

目录一、友元函数二、友元类三、友元的优缺点一、友元函数结合着类的特性,可知:类具有封装和信息隐藏的特性。只有类的成员函数才能访问类的私有成员,程序中的其他函数是无法访问私有成员的。非成员函数可以访问类中的公有成员,但是如果将数据成员都定义为公有的,这又破坏了隐藏的特性。另外,应该看到在某些情况下,特别是在对某些成员函数多次调用时,由于参数传递,类型检查和安全性检查等都需要时间开销,而影响程序的运行效率。为了解决上述问题,提出一种使用友元的方案。友元是一种定义在类外部的普通函数,但它需

2020-11-06 16:22:15 806 2

原创 【C++】构造函数的初始化列表、explicit关键字、static(静态)成员

一、构造函数学习1.初始化列表初始化列表:是以冒号开始,后面接一个以逗号隔开的数据成员列表,每个成员变量后面跟一个放在括号中的初始值或表达式。class Date{public: Date(int year, int month, int day): _year(year), _month(month), _day(day) {}private: int _year; int _month; int _day;};...

2020-11-05 23:06:34 78

原创 【C++】Date(日期)类

目录一、实现日期Date类。二、代码演示1、Date.h文件2、Date.cpp文件一、实现日期Date类。1、实现Date类的带参构造函数、拷贝构造函数、拷贝赋值函数2、实现Date类的+、-、++、--、==、>=等运算符的重载二、代码演示1、Date.h文件实现类的成员变量定义和成员函数声明。#pragma once#include <iostream>using namespace std;class Date{public

2020-11-03 16:39:42 117

原创 【C++】类的六个默认成员函数(构造、析构、拷贝构造、赋值、取址运算符重载)及const函数

目录一、类的6个默认成员函数二、构造函数1、定义2、特性三、析构函数1、定义2、特性四、拷贝构造函数1、定义2、特征五、赋值运算符的重载1、运算符重载2、赋值运算符重载六、const成员函数1、定义2、辨析3、取址运算符重载和const取址运算符重载一、类的6个默认成员函数如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?实际并非如此,任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数。二、构造函数

2020-11-01 23:56:33 28

原创 【C++】类与对象及this指针

目录一、类的引入1、类的引入二、类的定义三、类的访问限定符四、类的作用域五、类的实例化六、类对象的大小(占据的字节数)及存储方式1、如何计算类对象的大小2、类对象的存储方式七、this指针1、this指针的引用2、this指针的特性一、类的引入1、类的引入C语言是面向过程的语言,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 C++是面向对象的编程语言,关注的是对象,将一件事拆分成不同的对象,靠对象之间的交互完成。C语言和.

2020-10-31 19:56:54 37

原创 【C语言】文件读写操作详细介绍

目录一、写文件(1)写文本文件 (2)写二进制文件(3)fprintf()函数二、写文件综合实例三、读文件(1)读文本文件(2)读二进制文件(3)fscanf()函数四、文件位置指针(1)fseek()函数(2)rewind()函数(3)ftell()函数四、读文件综合实例一、写文件文件分为文本文件和二进制文件,因为它们的存放形式不同,所以写文件的方法也不一样。(1)写文本文件在对文本文件进行写操作时,主要用到两个函数:...

2020-10-24 18:44:44 201

原创 【C语言】计算机中的流和文件概述(文件的概念及打开关闭)

目录一、计算机中流二、文件1.文件的概念2.文件的分类3.文件的缓冲区 4.文件指针三、文件的打开和关闭一、计算机中流在C语言中,将在不同的输入/输出设备之间进行传递的数据抽象为“流”。当一段程序中调用scanf()函数时,会有数据经过键盘流入存储器,当调用printf()函数,会有数据从存储器流向屏幕。流实际上就是一个字节序列,输入函数的字节序列被称为输入流,输出函数的字节序列称为输出流。根据数据形式,输入输出流可以分为文本流(字符流)和二...

2020-10-23 21:35:53 166

原创 【C语言】scanf函数详解(常见问题处理)

目录一、scanf函数介绍二、空白字符和非空白字符三、scanf函数使用注意事项四、scanf函数使用常见问题一、scanf函数介绍scanf()是C语言中的一个输入函数。与printf函数一样,都被声明在头文件stdio.h里,因此在使用scanf函数时要加上#include <stdio.h>。它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。1.函数原型:intscanf(constchar*restrictformat,....

2020-10-22 18:37:56 1018

原创 【C语言】共用体的定义与使用

目录一、共用体数据类型的定义二、共用体变量的定义三、共用体内存分配四、共用体变量的初始化和引用一、共用体数据类型的定义共用体类型同结构体类型一样,都属于构造类型,它在定义上与结构体类型十分相似,定义共用体类型的语法格式如下:union 共用体类型名称{ 数据类型 成员1; 数据类型 成员2; 。。。 数据类型 成员n;};【注释】union为共用体类型关键字,大括号中定义了共用体类型的成员项,每个成员项由数据类型和成员名组成。...

2020-10-22 14:57:13 789

原创 【C语言】结构体指针与结构体数组

一、结构体指针与一般指针类似结构体也可以使用结构体指针进行引用使用。结构体指针的定义方式如下:struct Student stu = { 1001,"Li Lei",'M',1.87 }; //定义一个Student 的结构体变量stustruct Student *p=&stu; //定义一个Student的结构体指针变量来指向stu当程序中定义了一个指向结构体变量的指针,就可以通过“指针名->成员变量名”的方式访问结构体变量的成员。实例演示:#in...

2020-10-21 16:56:06 499 1

原创 【C语言】typedef(给数据类型取别名)及typedef与#define的区别

目录一、typedef的概念及使用二、typedef 和 #define 的区别一、typedef的概念及使用1.定义:typedef关键字用于为现有的数据类型取别名,例如:int、double、指针、数组、结构体等数据类型,都可以用typedef关键字为它们另外取一个名字。使用typedef关键字可以方便程序的移植,降低代码对硬件的依赖。例如:有一个结构体的名字是 stu,要想定义一个结构体变量就得这样写:struct stu stu1;struct 看起来就是多余的

2020-10-21 15:52:02 203

原创 【C语言】结构体类型和结构体变量(字节对齐)

目录一、结构体类型定义二、结构体变量的定义①先定义结构体类型,再定义结构体变量②在定义结构体类型的同时,定义结构体变量③直接定义结构体变量三、结构体变量的内存分配四、结构体变量的初始化五、结构体变量的引用一、结构体类型定义结构体是一种构造数据类型,可以把不同类型的数据整合在一起,每一个数据都称为该结构体类型的成员。使用结构体时,首先需要对结构体类型进行定义,结构体类型的定义如下所示:struct 结构体类型名称{ 数据类型 成员名1; ...

2020-10-19 22:22:33 359

原创 【C语言】宏定义(不带参数的宏定义和带参数的宏定义)

目录一、不带参数的宏定义1.定义2.#undef 指令取消宏定义二、带参数的宏定义1.定义2.宏定义参数替换的注意事项三、带参数的宏定义和带参函数的区别一、不带参数的宏定义1.定义在程序中,经常会定义一些常量,例如圆周率3.1415、“ABC”等。如果这些常量在程序中频繁使用,难免会出现书写错误的情况。为了避免程序书写错误,可以使用不带参数的宏定义来定义这些常量。例如:#define PI 3.14159解析:#define是用来标识一个宏定义,标识符PI是

2020-10-17 23:51:12 861

原创 【C++】C++标准库之iomanip库(格式输入输出)

目录一、功能介绍二、相关函数介绍三、实例演示一、功能介绍用来对输入输出操作的格式进行更加方便的控制,在ios_base基类的基础上将每一种格式的设置和删除都进行了函数级的同名封装,提供了全局的调用接口函数,支持在运算符“<<”和“>>”上的多次使用,配合ios_base实例的控制。是I/O流控制头文件,就像C里面的格式化输出一样。如果在一次输出过程中需要混杂多种格式,使用ios_base的成员函数来处理就显得很不方便。STL另提供了iomanip库可以满足这种使

2020-10-16 17:56:30 89

原创 【C++】STL之vector容器(定义及基本函数应用)

目录一、什么是vector?二、容器特性1.顺序序列2.动态数组3.能够感知内存分配器的(Allocator-aware)三、基本函数实现1.构造函数2.增加函数3.删除函数4.遍历函数5.判断函数6.大小函数7.其他函数四、实例演示1.一维数组的定义及访问(直接数组访问&迭代器访问)2.pop_back()&push_back(elem)实例在容器最后移除和插入数据3.insert()&erase(elem)实例在

2020-10-16 16:37:59 203

原创 【面试编程题】二进制中1的个数

文章目录题目:二进制中1的个数解法一:(短除法——可能引起死循环)解法二:(使用二进制和位运算——可能引起死循环)解法三:(常规解法)解法四:(惊喜解法)相关题型题目:二进制中1的个数题目:实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如:若输入9,该数的二进制为1001,所以输出2.解法一:(短除法——可能引起死循环)思路1:可以将该问题转换为十进制数转二进制表示问题,即对数字进行除2操作,如果余数是1,计数+1,直到数字为1.(这是十进制转二进制

2020-10-14 18:15:25 53

原创 【C语言】常用的字符串函数及相关函数的自我实现

目录一、常用的库函数1.strlen()函数2.strcpy() 函数3.strcmp()函数 4.strcat()函数5.strchr() 函数6.strrchr() 函数7.strstr() 函数二、常用字符串函数的自我实现一、常用的库函数1.strlen()函数用于求字符串的长度。strlen() 函数从字符串的开头位置依次向后计数,直到遇见'\0',然后返回计时器的值。最终统计的字符串长度不包括'\0'。头文件:string...

2020-10-12 23:53:01 90

原创 【C语言】字符串、字符数组、字符指针

目录一、字符数组(1)字符数组的定义(2)字符数组的初始化二、字符串(1)字符串的概念(2)用字符串初始化字符字符数组(3)获取字符串的长度三、字符串与指针四、字符数组与字符指针一、字符数组字符数组是存放字符数据的数组,每个元素都是单个字符。(1)字符数组的定义char 数组名[数组长度];//一维字符数组char 数组名[常量表达式1][常量表达式2];//二维字符数组(2)字符数组的初始化在数组定义的同时对数组中的元素进行赋值,这个过程

2020-10-12 20:49:10 283

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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