自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 mysql8.0.20的安装,配置,和错误解决

安装mysql8安装mysql-serversudo apt install mysql-server初始化配置信息sudo mysql_secure_installation 1. VALIDATE PASSWORD COMPONENT.....(使用密码强度校验组件) 输入: n 2. New Password:(设置新密码,并重复一遍) 3. Remove anonymous users (删除匿名用户) n 4. Disallow root login remotely(

2021-03-03 11:49:30 486

原创 设计模式原则

单一职责原则定义: 单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。 软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。如果能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责,这时就应该考虑类的职责分离。开放-封闭原则定义: 开放-封闭原则.

2021-01-17 17:21:52 121

原创 C++简单工厂的代码实现

简单工厂模式的核心思想是把创建对象过程和对象本身业务处理分离,工厂处理创建对象的细节。#include <iostream>using namespace std;//1 定义一个操作接口class Operation{public: virtual double GetResult(double a, double b) = 0;};//2 定义具体操作类class OperationAdd : public Operation{public: vi

2021-01-15 16:21:59 381

原创 常见算法

//二分查找法bool Binary_search(int* list,int len , int item) { int low = 0, high = len - 1; int guess = 0; while (low <= high) { int mid = (high + low) / 2; guess = list[mid]; if (item == guess) { return true; } if (item < guess) { hig

2020-12-28 09:42:41 160

原创 如何实现UDP穿透

在讲解UDP穿透之前,首先我们需要先了解为何需要使用UDP穿透?需求是什么?一、需求 在不公布IP和端口的情况下,让俩个局域网内的PC端建立连接。二、环境普通的家庭电脑(PC端)连接Internet(因特网)时,首先需要通过运营商(拨号)连接到Internet(下面统称外网)中的域名服务器,然后域名服务器会将你的请求转发到实机服务器上,从而实现内外网的连接。在内网(局域网)中需要注意以下几点:在同一时间段内,无论局域网中有几台联网设备,对于外网来说都是同一个临时IP。在同一

2020-12-27 16:50:39 7004 1

原创 errno错误对照表

错误对照表:错误值内容errno 0 :Success成功errno 1 :Operation not permitted不允许操作errno 2 :No such file or directory没有这样的文件或目录errno 3 :No such process没有这样的过程errno 4 :Interrupted system call中断的系统调用errno 5 :Input/output error输入/输出错误

2020-11-29 12:03:42 4033

转载 fork()+printf(/n)或printf()的区别?

题目:请问下面的程序一共输出多少个“-”?#include <stdio.h>#include <sys/types.h>#include <unistd.h> int main(void){ int i; for(i=0; i<2; i++){ fork(); printf("-"); } wait(NULL); wait(NULL); return 0;}如果你对fork()的

2020-11-18 16:19:45 492

原创 副本构造函数

概念副本构造函数是一种特殊的构造函数,其参数类型为类对象,也就是说,用一个已经创建的对象来初始化同一个类的另一个对象。同时,编译器也提供默认的副本构造函数,其作用方式很简单,就是把把原对象的数据成员值复制给新对象,这种复制方法为浅层复制。定义 编译器为类指定了一个默认的副本构造函数,我们也可以手动指定副本构造函数。注意点如果指定了副本构造函数,则进行副本复制时,只会对副本构造函数中指定的变量进行初始化。如果未指定副本构造函数,则进行副本复制时,主体中所有已经初始化的变量在副.

2020-11-14 11:14:09 573 1

原创 类的成员函数

定义 函数的定义一般在类外面,也可以直接在类内部定义。前者与普通函数不同的是,实现成员函数时要指明类的名称,具体形式为:返回值类型 类名::函数成员名(参数表){函数体};而后者一般为一些短小的函数(5行以内),也就是内联函数。所属关系各类函数中:构造函数、析构函数、拷贝初始化构造函数等是类的成员函数。class A { public: void B();private: int C();protected: bool D(int i); }; //那么.

2020-11-12 11:42:55 2814

原创 构造函数

构造函数在类的定义中有一种特殊的成员函数叫做构造函数,构造函数在类被创建时自动被调用,一般用来创建新的类实例时执行初始化操作,构造函数与它所在的类同名,并且没有返回值,任何类都至少有一个构造函数//示例:class ROLE{private: int hpRevover; void init() { hpRevover=3; }public: ROLE() { init(); } int hp;.

2020-11-04 18:33:21 137

原创 内联函数

内联函数内联函数是使用inline关键字声明的函数,也成内嵌函数,它主要的作用是解决程序的运行效率。//语法inline int max(int a,int b){ return a>b?a:b;}C++ 建议内联函数 替换宏函数(消除调用的时间空间开销)使用内联函数的原因:函数调用是有时间和空间开销的:入栈、出栈、跳转等开销。如果函数体代码多,需要较长时间执行,函数调用机制占用的时间可以忽略。但如果函数只有一两条语句,大部分时间都花费在函数调用机制上,开销就不容忽视.

2020-11-04 18:27:27 84

原创 函数模板

结构template <typename type1>type1 ave(type1 a, type1 b){ type1 x = a * b; type1 p [100]; return (a + b) / 2;}//type1 类型名称关键字:template<> :函数模板必须带的关键字,声明这是一个函数模板<>:填入函数类型名称typename 类型名称 :类型名称使用方法:template<>int* a.

2020-11-04 18:19:22 237

原创 auto与decltype

auto语法:auto 变量名{值} 或 auto 函数名(int a ,int b)auto 可以声明一个变量,让编译器根据变量的值来推断变量的类型//例如auto a{123};//相当于int a{123};char a;auto b{a};//此时b的类型等于a的类型 char利用auto的这一特性我们可以利用auto来创建一个函数auto ave(int a,int b){ return a+b;}//相当于int ave(int a,int b).

2020-11-04 18:17:57 204

原创 Makefile的定义规则

概念 Makefile编译所要执行的规则一个Makefile目标规则的一般语法:#方括号中的项是可选的,省略号是指一个或者多个。注意标签,每个命令前需要。target [target...]:[dependent......][ command...]#实例说明:hello: main.o factorial.o hello.o #目标文件依赖了哪些文件 $(CC) main.o factorial.o hello.o -o hello#hello: == .

2020-10-24 11:14:38 254

原创 Makefile的定义依赖性

概念最终的二进制文件将依赖于各种源代码和源代码的头文件。依存关系对于Makefile来说是非常重要的,因为它们告诉对任何目标的源的依赖。#示例hello: main.o factorial.o hello.o #目标文件依赖了哪些文件 $(CC) main.o factorial.o hello.o -o hello#上面例子中 hello 依赖main.o,factorial.o和hello.o,所以依赖的文件发生变化时,hello将从新编译。#依赖.o文件的时候也.

2020-10-24 11:09:11 276

原创 Makefile的宏

Makefile的宏分为俩种:普通的宏和特殊的宏普通的宏:Makefile中普通的宏类似于变量。可以使用类似于下例的方式来定义:MACROS = -me #后续需要使用 -me时 可以使用 MACROS 与一些运算符进行配合使用#例如:$(MACROS) #主要用于增加代码的可读性PSROFF = groff -TpsDITROFF = groff -TdviCFLAGS = -O -systype bsd43 LIBS .

2020-10-24 11:08:07 2315

原创 为什么需要Makefile

为何需要一个大型的项目往往有几千上万个文件,如何使用命令行编译十分浪费员工的效率和时间。而且命令行的输入字符有上限规则,不可能无限输入。如果字符数达到上限可能造成无法编译的结果。Makefile就完美的解决了这一问题,Makefile可以使用通配符来按照你指定的规则进行编译。在代码更新时,Makefile也会根据代码变得只编译有更新的内容。而使用命令行编译则需全部代码重新编译过。...

2020-10-24 11:07:21 438

原创 什么是Makefile

定义Linux 环境下的程序员如果不会使用GNU make来构建和管理自己的工程,应该不能算是一个合格的专业程序员,至少不能称得上是 Unix程序员。在 Linux(unix )环境下使用GNU 的make工具能够比较容易的构建一个属于你自己的工程,整个工程的编译只需要一个命令就可以完成编译、连接以至于最后的执行。不过这需要我们投入一些时间去完成一个或者多个称之为Makefile 文件的编写。所要完成的Makefile 文件描述了整个工程的编译、连接等规则。其中包括:工程中的哪些源文件需要编译以及如.

2020-10-24 11:06:35 393

转载 VS2019 MFC编程提示无法找到资源编译器DLL

原因主要原因是因为路径修改了,在C:\Program Files (x86)\Windows Kits\10\bin 下,在本人电脑上可以看到有一个10.0.15063.0的文件夹,其实所有文件在这里面来了,但是没有在bin目录对应的x86和x64下生成相应的连接.解决解决这个问题很简单,就是把10.0.17763.0目录下对应的x86和x64目录下的rc.exe和rcdll.dll两个文件拷贝到bin目录下对应的x86和x64目录下即可.注:不同电脑这俩个文件所在的位置也不同,比如我的在10.

2020-10-14 15:36:52 4042 1

原创 Linux系统下C++标准库函数

1、字符串函数头文件:#includeList item<ctype.h>函数名作用isalnum()测试字符是否为英文字母或数字isalpha()测试字符是否为英文字母isascii()测试字符是否为ASCII码字符isblank()测试字符是否为空白字符 包括空格 \r\n\t 符号iscntrl()测试字符是否为ASCII码的控制字符isdigit()测试是否为阿拉伯数字 16进制会出现错误isgra

2020-10-12 14:45:28 1053 1

原创 C++多态

概念C++的多态性用一句话概括:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数。定义用virtual关键字声明的函数叫做虚函数,虚函数肯定是类的成员函数;存在虚函数的类都有一个一维的虚函数表叫做虚表,类的对象有一个指向虚表开始的虚指针。虚表是和类对应的,虚表指针是和对象对应的;多态性是一个接口多种实现,是面向对象的核心,分为类的多态性和函数的多态性;多态

2020-10-12 14:41:07 119 1

原创 简单理解epoll

epoll系列系统调用epoll是Linux特有的I/O复用函数。 epoll使用一组函数来完成任务。epoll把用户关心的文件描述符上的事件放在内核里的一个事件表中。 epoll需要使用一个额外的文件描述符,来唯一标识内核中的事件表。epoll事件表的文件描述符创建函数:#include <sys/epoll.h>int epoll_create( int size );参数:参数size:并不起作用,只是给内核一个提示,告诉它事件表需要多大。 该函数返回的

2020-10-06 15:57:35 282 1

原创 回调方法介绍

本篇文章尝试从回调方法怎么来的、为什么要使用回调方法来介绍下:场景场景选择的得当与否,很影响读者的继续阅读的兴趣甚至理解的主动性(长期作为互联网技术博文读者的我,深有感触)。好场景私以为是:熟悉且简单。本例小心翼翼选择的场景是:写作业。(hope you like)注:写作页这个动作至少交代三个方面:谁,什么动作(写),写什么。下面先从(有个学生,写,作用)开始:自己做作业//1.有个学生 Student student;//2.该学生有写作业这个动作需要执行 void doH

2020-09-26 15:18:04 1294

转载 简单理解poll

前期知识:在开始接触select之前,你需要先对IO的同步,异步,阻塞,非阻塞有个基本的了解,知道什么是IO多路复用。下面这篇文章可以帮助你快速区分这几种模型:[IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇)](https://blog.csdn.net/historyasamirror/article/details/5778378).poll的系统调用:poll系统调用和select类似,也是在指定时间内轮询一定数量的文件描述符,以测试其中是否有就绪者。poll的函数格式:#incl

2020-09-25 14:56:05 643

转载 简单理解selcet模型

前期知识:在开始接触select之前,你需要先对IO的同步,异步,阻塞,非阻塞有个基本的了解,知道什么是IO多路复用。下面这篇文章可以帮助你快速区分这几种模型:IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇).select的用途:在一段指定的时间内,监听用户感兴趣的文件描述符上的可读,可写和异常事件.select的函数格式:#include <sys/select.h>int select(int maxfdp,fd_set *readfds,fd_set *writefds,

2020-09-25 10:47:01 231

原创 Linux下UDP回声服务器的实现

首先我们需要了解一下UDP和TCP的区别TCP面向连接数据的传输方式有三个特点:A、传输的过程数据不会丢失B、按顺序传输C、传输的过程中不存在数据边界TCP协议是面向连接的套接字:可靠的、按序传递的、基于字节的面向连接的数据传输方式的套接字。UDP数据的传输方式有四个特点:A、强调快速传输而非传输顺序B、传输的数据可能丢失也可能损毁C、传输的过程中不存在数据边界D、限制每次传输的数据大小UDP协议是面向消息的套接字:不可靠的、不按序传递的、以数据的高速传输位目的的套接字。UDP回声服

2020-09-20 16:12:54 288 1

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

TCP的三次握手和四次挥手在学习TCP时,一定会学到TCP的三次握手和四次挥手,篇文章就简单的讲解一下TCP的三次握手和四次挥手。TCP的三次握手和四次挥手说的是连接状态,一般指该连接的服务器端的状态。三次握手三次握手是TCP服务器端与客户端建立连接的状态转移过程。服务器在调用完listen函数后进入LISTEN(监听)状态,被动等待客户端连接。因此执行的是被动打开。客户端执行的是主动打开,当客户端主动连接服务器,客户端会向服务器发送带有**SYN(发起一个新连接)**标志的报文请求连接,也

2020-09-11 21:32:25 61

原创 C++的多态

1. C++的多态性:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的时间类型来调用相应的函数。如果对象类型时派生类,就调用派生类的函数;如果对象类型时基类,就调用基类的函数。 1)用virtual 关键字声明的函数叫做虚函数,虚函数肯定是类的成员函数; 2)存在虚函数的类都有一个一维的虚函数表叫做虚表,类的对象有一个指向虚表的开始指针。虚表是和类对应的,虚表指针是和对象对应的; 3)多态性是一个接口多种实现,是面向对象的核心,分为类的多态性和函数的多态性;

2020-09-06 11:20:00 146

原创 Linux系统下TCP迭代服务器的实现

TCP/IP协议栈在写代码之前我们先了解什么是协议栈。根据数据传输方式的不同,基于网络协议的套接字一般分为TCP套接字和UDP套接字。TCP套接字是面向连接的,因此又称基于流(stream)的套接字。TCP是 Trasmission Control Protocol (传输控制协议)的简写,意为“对数据传输过程的控制”。协议栈一般分为4个层次:第一层次:数据链路层链路层是物理链接领域标准化的结果,也是最基本的领域,专门定义LAN、WAN、MAN 等网络标准。第二层次:IP层IP是面向消息的

2020-09-03 10:56:42 243

原创 简单理解结构体的内存对齐

学习总结首先了解内存对齐是什么?简单来讲内存对齐是一种提高内存访问速度的策略,cpu在访问未对其的内存需要经过俩次内存访问,而经过内存对齐一次就可以了。首先我们要引入一个概念:内存的自然对齐:每一种数据类型都必须放在地址中的整数倍上。举个例子如下:#include <iostream>using namespace std;struct Examples{ char a; int b; long long c; short d; cha

2020-08-17 20:36:41 173

原创 Linux权限说明

Linux权限说明Linux权限说明作用S 提权和降权设置用户权限s 修改我当前组设置组权限t仅所有者可删除权限r     4读取权限w    2写入权限x     1执行权限第一个字母表示d 表明是一个文件夹 l 表明是以一个连接 其他方式表明是一个普通文件第2-4个字母表示所有者的权限第5-7个字母表示所在组的权限第8

2020-08-16 17:59:52 85

原创 Linux基础命令

基础命令ls 命令ls 是list的缩写作用是列出指定位置的文件和文件夹如果没有指定,默认是列出当前位置的文件或文件夹常用参数作用-a列出所有的文件或者文件夹-l列出详细信息 与 a一起使用可显示全部文件的详细信息-h增加可读性 与l一起使用 默认文件是按照字节为单位显示大小的,加了这个参数后,会附带K、M、G、T等大小后缀,K表示千字节 M表示兆字节 G表示1024兆 T表示1024G 虽然进准度下降,但是更容易阅读-R

2020-08-16 17:54:53 92

原创 简单理解socket与多线程和实现Linux系统下多客户端的数据通信

学习总结1、首先简单理解什么是socketsocket(套接字)是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。2、什么是多线程,有什么用?首先我们要理解什么是线程与多线程。线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。多线程是指从

2020-08-15 12:55:37 604

原创 基础篇(二)

学习总结基础篇(二)一、 基础数据类型类型关键字: <font color=blue>char char ls='a';//char的内地大小为1字节//一般用于处理ASCII表的字符类型关键字:shortshort ls=2; //内地大小为2字节的整数类型类型关键字:intint ls=4; //内存大小为4字节的整数类型类型关键字:longlong ls=4;//在不同操作系统中的内存大小不同 //在x86(32位系统)中long 的内存大小

2020-08-13 22:32:21 133

原创 简单理解和实现socket(套接字)

1、什么是套接字?2、什么是IP地址和端口,为什么有些端口不能用?3、TCP客户端和服务端如何通信?4、我是不是手把手地能够把这段代码写出来?

2020-08-12 22:07:35 1226

原创 基础篇(一)

学习总结基础篇(一)#include <iostream>int main(){ std::cout<<"hello world !\n";//输出hello world ! return 0;}上面这一串代码是所有c\c++学习者都写过的一个代码在上面这串代码包含了哪些知识点:1) 头文件#include 这是一个标准的头文件当我们想要使用一些函数 或者Windows API 时,都需要用到头文件。当一个调用一些函数 或者API

2020-08-11 18:35:32 213

原创 为何选择C/C++

学习总结1. 为何选择C/C++2. 应该怎么学1) 书籍,个人推荐C++ primer plus(第六版) 或者其他各类教材都可。2)网络视频,现在网络上的各种教学视频很多,基础的知识都可以直接上视频网站上搜索学习。例如B站(哔哩哔哩)等。3)网络培训机构,网络上的培训机构有非常多,可以直接购买并在网络上自学。例如腾讯课堂等软件上都可以直接购买并学习。结语,C/C++相对于其他语言更难学习也更难上手,例如Java 一般学习周期在4-5个月左右就可以正式找工作了,但是C/C++不行;不过有不

2020-08-11 17:16:55 241

原创 简单理解面向对象和面向过程

简单理解面向对象和面向过程一、 面向过程和面向对象的区别**面向过程:**面向过程就是分析解决问题所需要的步骤,然后 用函数把这些步骤一步一步实现,使用时一个一个依次调用即可;**面向对象语言:**指用于描述的设计是以对象为核心,而对象是程序运行时刻的基本成分。 面向对象就是去思考谁去干。 例如一匹马,马具有一些基本属性,比如 能睡觉,能跑,能跳,能吃东西。 之后去调用,马睡醒,马跑了一圈,马在吃东西。 面向对象具有识认性,系统中的基本构件可识认为一组可识别的离散对象,对象具有唯一的静

2020-08-09 13:56:38 1389

空空如也

空空如也

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

TA关注的人

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