- 博客(112)
- 收藏
- 关注
原创 C++---容器适配器(stack、queue、priority_queue)
容器适配器首先我们要知道容器适配器是干啥的。我们可以简单的将容器适配器当做一个接口装置。有的电脑上没有数据转接口,但是有usb接口,这是我们没必要重新买一个电脑,我们可以做一个usb数据转接线。而这根数据转接线就类似于适配器一样。在C++中,我们已经有了(vector、list、deque等容器)插入、删除、迭代器就电脑usb接口,当我们想要实现栈的操作时,我么没有必要再重新写新的数据结构,只...
2020-03-09 20:29:30 260
原创 Linux---线程安全
线程安全多个执行流对临界资源进行争抢访问,而不会造成数据二义性或者逻辑混乱。在线程争抢访问的过程是线程安全的。线程安全的实现同步:通过条件判断,实现对临界资源访问的时序合理性。互斥:通过唯一访问,实现对临界资源访问的安全性。同步与互斥也可以实现进程之间的安全,信号量不但能实现同步,也能实现同步。互斥的实现原理**同一时间只有一个执行流能够访问临界资源。对临界资源进行标记:没人...
2020-02-23 17:07:04 223
原创 Linux---多线程
线程什么是线程在一个程序中,一个执行流就是一个线程,换句话说,线程是进程的内部控制序列。(在进程中,我们说一个运行中的程序就是一个进程)。Linux下,线程被称为轻量级进程,由于在Linux下线程是由进程的pcb模拟实现,同一个进程中的线程共用进程的大部分资源。进程就是该进程下所有线程的一个统称(线程组),分配资源时是分配整个线程组(也就是进程)。进程就相当于一个工厂,线程就是工厂里的工...
2020-02-21 18:17:10 122
原创 Linux---进程间通信
进程间通信的目的实现数据传输,一个进程将自己的数据发送给另一个进程。资源的共享。传递信息。例如:子进程退出需将自己的退出原因告知父进程。进程控制。通信方式管道systemV标准:共享内存、消息队列、信号量。为什么操作系统要为进程提供通信方式,而不是进程之间直接通信因为进程之间具有独立性。每个进程都有自己的虚拟地址空间,每个进程的操作都是在自己的虚拟地址上进行,因此进程...
2020-02-20 18:10:32 182
原创 Linux---进程的基本概念
在了解进程之前先要知道操作系统的基本原理。操作系统操作系统是管理计算机硬件与软件资源的计算机程序,是计算机系统的内核与基石。简单理解就是,操作系统包括内核与其他程序两部分。内核包括:进程管理、内存管理、文件管理等。其他程序:库函数、shell程序等。设计操作系统就是方便用户与硬件进行交互,帮助用户管理软硬件资源。那么怎么管理呢?例如:学生、班长、班主任,学生被班长管理,班长又受班主...
2020-02-17 21:49:28 164
原创 C++---动态内存管理
C/C++内存分布栈:存储非静态局部变量、函数参数、返回值。内存映射段:动态库。堆:程序运行时动态内存分配。数据段:存储全局变量、静态数据。代码段:可执行代码,只读常量。C语言中动态内存管理 malloc函数void* malloc(size_t number)在堆中动态申请一块长度为numbre个字节的连续区域,返回该区域的首地址,但是返回类型为void* ,在使...
2020-02-13 16:46:08 147
原创 C++---智能指针原理讲解
为什么需要智能指针在写代码的时候,从堆上申请的空间,由于一些原因,没有得到释放,从而导致代码出现内存泄漏,所以为了防止此类问题的出现,从而出现智能指针。RAIIRAII是一种利用对象生命周期来控制程序资源的技术在类中,对象构造的时候获取资源,最后在对象析构后,释放资源,这样就不用担心内存资源没有被释放。如果将申请资源的指针交给类来管理(管理:释放资源),就在该函数结束时,编译器自动调用类的...
2019-10-13 22:09:25 293
原创 c++--STL迭代器相关辅助函数
前言最近在看《STLC++标准库》时了解到C++为迭代器提供了一些相关的辅助函数,方便我们对迭代器进行操作。advance功能: 修改迭代器位置,可使迭代器向前移动,也可使迭代器向后移动。头文件: #include<iterator>函数原型: void advance(Iterator pos, int n); pos指定的迭代器,n为移动的步长(向后移动为正数,向前移动为负数)。#include <algorithm>#include <vector>
2022-01-15 17:31:58 451
原创 记录windows下docker常见错误与解决办法
在启动之前创建的容器时,发现出现下面的问题:OCI runtime create failed: container_linux.go:380: starting container process解决办法:docker exec -it 4cf5c20fa4a6 /bin/shdocker exec -it 4cf5c20fa4a6 bashdocker exec -it 4cf5c20fa4a6 sh上述三种办法我在本地机测试发现依旧是有问题.docker exec -it 4cf5
2021-11-28 19:51:12 807
原创 Etcd服务发现原理
什么是etcdetcd 是基于 Go 语言实现的一个 KV 结构的存储系统,支持服务注册与发现的功能,官方将其定义为一个可信赖的分布式键值存储服务,主要用于共享配置和服务发现。简单:安装配置简单,而且提供了 HTTP API 进行交互,使用也很简单键值对存储:将数据存储在分层组织的目录中,如同在标准文件系统中监测变更:监测特定的键或目录以进行更改,并对值的更改做出反应快速:根据官方提供的 benchmark 数据,单实例支持每秒 2k+ 读操作可靠:采用 Raft 算法,实现分布式系统数据的可
2021-03-18 18:16:15 3849 1
原创 sofa-pbrpc框架的简单使用
服务端流程定义server的选项参数主要方法是定义RpcServerOptions对象,在给对象中,我们可以对服务端进行基础配置,该RpcServerOptions类主要的参数有://配置线程数量sofa::pbrpc::RpcServerOptions options;options.work_thread_num = 4; //工作线程数为4定义服务器控制对象主要方法是实例化RpcServer对象,该类的主要方法有:StartStopRun该类实例化的对象需要使用RpcSe
2021-01-14 15:04:43 581
原创 CentOs6.x yum源停止维护,安装yum源
因为官方对CentOs6的版本已经不维护了,所以用户无法再从其他国内yum源进行下载,但是官方将数据半搬移到http://vault.centos.org/,因此我们可以通过http://vault.centos.org/ 替换原来的 mirror.centos.org首先进入对应的环境变量中vi /etc/yum.repos.d/CentOS-Base.repo可以将该CenOs-Base.repo中的内容全部删除替换成下面的代码。[base]name=CentOS-6failovermethod
2021-01-12 09:34:21 317
原创 Git的基本使用
本次只是记录对Git的一些操作,不记录Git安装与配置。创建一个文件,初始化Gitgit init在执行结束后,会出现一个.git隐藏文件。创建一个版本库git add 等待上传的文件git commit -m'该文件提示信息'查看版本库信息git log版本回退git reset --hard HEAD^在测试之前,我们需要再次添加一个版本。同时使用git log检测其版本信息,发现已经处于第二个版本。如果在此时,我们需要使用版本1,因此我们需要版本回退
2021-01-06 18:19:47 132
原创 Protobuf简单编写与使用
Protobuf简单介绍首先Protobuf是google公司提出的一种序列化方法,因为其在网络传输中优点较多,同时使用简单方便维护,因此现如今Protobuf以及逐渐取代Json来传输数据。Protobuf与Json的对比创建一个.proto文件,在该文件中定义了两个消息结构(student,teacher),消息结构在C++中对应的类分别为:student、teacher如果我们使用Protobuf进行传输时,只需要对类进行赋值即可。//name、age、gender分别为student
2021-01-05 22:33:52 554
原创 Udp---模拟实现客户端与服务器通信
//客户端模块#include <iostream>#include <cstdio>//stdio.h#include <string>//std::string#include <unistd.h>//close接口#include <stdlib.h>//atoi接口#include <netinet/in.h>//地址结构定义#include <arpa/inet.h>//字节序转换接口#includ
2020-12-20 14:46:22 454
原创 Linux_c++ TCP套接字编程函数
socket函数int socket(int domain,int type,int protocol);domain为协议簇,取值为以下几点AF_INET:使用Ipv4协议AF_INET6:使用Ipv6协议AF_UNIX:本地通信,一般是指在当客户端与服务器在同一个机器上使用。AF_NETLINK:内核与用户态之间通信type是指套接字的类型,取值为以下几点SOCK_STREAM:数据流通信,即使用TCP通信。SOCK_DGRAM:数据包通信,即使用UDP通信。protocol
2020-12-18 20:46:11 274
原创 Linux_c++线程函数的使用
pthread_create函数创建线程的函数int pthread_create(pthread_t *pid,const pthread_att_t *attr,void *(*start_routine)(void*),void *arg)pid:指针,指向创建成功的新线程IDattr:指向线程属性结构pthread_attr_t的指针,如果为NULL,则是默认属性start_routine:线程的回调函数arg:回调函数的参数信息创建成功返回0,其余返回值都为创建失败#inclu
2020-12-17 20:58:24 306
原创 Python---列表与元组
列表的遍历可以使用for进行遍历numbers = [1,2,3,4,5,6]for i in numbers: print(i)创建数值列表range函数从第一个数值开始到最后一个数值结束,但是取不到最后一个数。如果range函数由第三个参数,则表示数值的增加步长#从数字1开始,到数字9结束numbers = list(range(1,10))#从数字1开始,到数字9结束,每次数字增加2numbers = list(range,1,10,2)列表的切片在Python中使
2020-11-24 16:47:52 142
原创 Python---字符串与列表
字符串在Python中字符串比较简单,使用单引号和双引号都可以用来表示字符串。name = "abc"name = 'abc'字符串转大小写title函数:将每个字母的首字母转换为大写upper函数:将小写转大写lower函数:将大写转小写'''title函数str = "hello world"print(str.title())print(str.upper())print(str.lower())字符串的合并在Python中使用+进行字符串的合并。原始字符串在P
2020-11-23 22:53:39 301
原创 Linux---文件操作
在C++中,引入了流的概念。C++中流是指信息从输入设备到输出设备的过程。在C++中有三种流,标准IO流、文件IO流、字符串IO流。C++文件流在C++中派生出4个类,分别是输入流istream、输出流ostream、文件流基类fstreambase、字符串流基类strstreambase。在C++中如果需要对文件进行处理,必须包含#include<fstream>头文件。类描述信息ifstream表述输入文件流,用于从文件中读取数据ofstream表述输出文
2020-11-10 11:03:19 149
原创 Linux---文件、软链接于硬链接文件
在Linux中,一切皆文件,因此我们需要对Linux下的文件系统有个清楚的认识。文件属性在Linux中,我们可以通过ls -l或者ll查看具体文件信息。注意:ls命令是用于查看当前路目录下的文件名,但是不能查看文件属性。文件属性具体都有哪些:以‘-’开头的都为普通文件。以d开头的文件为目录文件以b开头的文件为设备文件(硬盘、光驱)以l开头的文件为链接文件以p开头的文件为管道文件文件权限其中对应的权限分别为:r可读w可写x可操作...
2020-11-10 09:29:01 217
原创 MySQL---分组查询
模糊查询主要是通过通配符进行查询。通配符主要有like、%、[]、_%通配符匹配任意多个任意字符,类似于正则表达式中的.操作 。在使用的时候,需要搭配like进行使用。//在student表中查询姓张的同学select *from student where name like N'张%' //中文前面最好加上N//在student表中查询名字中包含张的同学select *from student where name like N'%张%'[]通配符[]搭配%使用,表示%不再是一个通
2020-10-12 16:56:04 256
原创 Linux---高级IO
IO过程发起IO调用,等待IO条件就绪,将数据拷贝到缓冲区中进行处理。等待+数据拷贝 两个主要的操作五种IO模型阻塞IO非阻塞IO信号驱动IO异步IO多路转接IO阻塞IO为了完成某个功能,发起IO调用如果当前不具备IO条件,则一直等待。优点:流程非常简单缺点:一个IO完成以后,才能执行下一个IO,资源没有充分利用,大量的时间在等待。非阻塞IO为了完成一个IO,发起调用,如果当前不具备IO条件,则立即返回,但是需要循环发起IO。优点:流程相对复杂一点,对资源的利用更加充分
2020-09-27 10:31:14 98
原创 Linux---阻塞与非阻塞、同步与异步的区别
阻塞为了完成某个功能,发起调用,如果当前不具备完成的条件,则会一直等待。非阻塞为了完成某个功能,发起调用,如果当前不具备完成功能的条件,则立即报错返回。阻塞与非阻塞的区别一个调用发起时,不具备完成条件的时候是否会立即返回。主要讨论一个函数时同步功能是由进程自己完成,并且完成任务的处理是一个顺序流程。异步功能由系统完成,进程只需要发起调用即可,任务的处理不一定是顺序的。异步阻塞:功能由别人完成,如果别人未完成则一直等待。异步非阻塞功能由别人完成,完成与否不需要进行等待。同步与异
2020-09-26 09:39:56 143
原创 操作系统---页面置换算法
OPT(最佳淘汰算法)从主存中移除以后永远不再使用的页面,如果没有这样的页面,则选择最长时间不访问的页面。保证了获得最低的缺页率。即:被淘汰的页面是以后不再访问或者最长时间不再访问的页面。当2第一次进入时,发现7在未来的较长的一段时间不会访问到,因此替换7。当3第一次访问的时候,发现1在未来较长的一段时间内不会访问到,则替换1。依次进行。其中发生置换的次数为6次。缺页次数:9次FIFO(先进先出)最先淘汰最早进入内存的页面(驻留主存时间最久的页面)。类似于队列的思想,每次淘汰的都是队头的元
2020-09-08 09:17:50 2990
原创 Linux---解决校园网下VM与Xshell连接问题
VM—虚拟机—设置—网络适配器—改成NET模式。更改ONBOOT路径:/etc/sysconfig/network-scripts。在此路径上查看自己具体的文件名称。注意:路径需要在network-scripts下。vi ifcfg-ens33(具体文件结合自己的进行更改,名称为ifcfg-ensXXX)在ifcfg-ensXXX文件下,找ONBOOT选项。将其改为ONBOOT = “yes”。重启网卡。services network restart安装sudo yum instal
2020-09-07 11:07:16 507
原创 Go语言---并发编程goroutine
在Go语言中并发是通过goroutine实现。goroutine类似于线程,属于用户态线程。Go语言也可以通过channel(管道)与多个goroutine进行通信。goroutinegoroutine类似于线程,在Go语言中底层分配了一个线程池,因此不需要我们对其进行管理,由Go运行时的routine进行调度。在Go语言中实现goroutine非常简单,只需要在调用函数前加上go关键字,就可以为该函数创建一个goroutine。因此一个goroutine对应一个函数,多个goroutine可以对应多
2020-07-12 16:33:33 185
原创 Go语言---字符串的基本操作
Go语言中的字符串的基本操作是在strings包下完成的。Contains函数判断一个字符串是否包含另一个字符串,包含返回true,不包含返回falsefmt.Println(strings.Contains("HelloWorld","Hello"))Join组合字符串的组合s := string{"abc","def"} //定以一个字符串切片str := strings.Join(s,"") //Join第二个参数为字符串组合方式s :=[]string{"abc","def"}
2020-07-07 15:07:08 248
原创 Go语言---面向对象编程
Go语言的语言设计非常的简洁,因为,Go语言并没有面向对象的概念,因此Go语言中没有面向对象的一些概念,例如(封装、继承、多态,虚函数、构造函数,this指针等)尽管Go语言中没有封装、继承、多态,但同样也可以实现相应的功能。封装:通过方法进行实现继承:通过匿名字段实现多态:通过接口实现方法方法也是一种函数类型,本质上,一个方法则是一个和特殊类型关联的函数匿名字段type person struct{ Name string Age int}type Student struct
2020-07-06 18:56:24 154
原创 Go语言---结构体
定义一个结构体类型方法:type 结构体名 struct{}//定义一个person类type person struct{ Name string Age int}结构体初始化操作a := person{ Name : "bai", Age : 19,}结构体比较方法如果结构体的成员之间可以比较,那么结构体也是可以比较的,结构体可以使用==或者!=进行比较,不支持> <运算符的比较。func main(){ a:=person{"bai",19} b:=p
2020-07-06 10:50:07 127
原创 unity3D---鼠标、键盘输入
在说标准输入的方法时,需要先了解一下Input类的功能。鼠标输入Input类主要的功能就是获取系统输入按键,因此获取鼠标输入的方法在Input类中。主要的方法当鼠标按下时,返回true,如果鼠标一直按下,在按下期间一直返回truebool res = Input.GetMouseButton(参数);当鼠标按下时,第一帧返回truebool res = Input.GetMouseButtonDown(参数);当鼠标释放后,第一帧返回truebool res = Innput.GetM
2020-06-24 18:19:19 664
原创 go语言---闭包
闭包:就是一个函数于其相关的引用环境组合的一个整体本质:为函数,但是需要使用外部的一些变量,组成一个整体func Add() func (int)int{ var n int = 10 return func(i int)int { n = n + i return n }}返回的时一个匿名函数,该匿名函数引用到函数体外的变量n,因此匿名函数于变量n构成了一个整体,我们称其为闭包。...
2020-06-23 14:20:55 112
原创 Unity如何设置两个玩家
我们知道在Unity你直接调用Input.GetAxis(“Vertical”)函数用来判断玩家是否移动是可以的。但是存在一个问题,就是我们如果游戏中同时存在两个玩家,则会出现问题。因为Input.GetAxis(“Vertical”)该函数,不但可以检测玩家按下W S键,以及上下方向键。这就导致我们程序无法区分到底是哪个玩家发生了移动。解决办法:对方向进行拆分,例如:W S为玩家一的移动键,上下方向键为玩家二的移动按键。我们发现这里只存在一组按键点开以后我们发现,这就是为什么支持两组按键的原
2020-06-06 10:06:44 1669
原创 Unity如何刚体控制物体的移动以及旋转
如何控制该场景中坦克的移动呢?这时我们需要给该坦克添加一个刚体,通过脚本控制实现坦克的移动效果。同时,我们创建一个脚本实现移动效果,将该脚本放置到坦克上。public class TankMovement : MonoBehaviour { //设置一个移动速度 public int speed = 5; private Rigidbody rigidbody; //设置一个角速度 private int angularSpeed = 10; .
2020-06-06 09:43:57 5709
原创 Unity通过键盘按键控制小球移动
首先,我们创建一个新场景。我们需要实现的效果就是移动该小球,移动操作需要借助脚本实现。我们创建一个Move脚本,同时将其附加给小球。同时移动操作,需要借助刚体组件实现,所以我们还需要创建一个刚体组件,将该刚体附加给小球。实现上述步骤以后,我们开始编写脚本。由于移动小球需要借助刚体组件,所以我们第一步是获取刚体组件,并且对刚体组件进行赋值操作,最后只需要给刚体组件施加一个力即可。public class Move : MonoBehaviour { //定义一个刚体对象 pr
2020-06-05 21:14:08 7151
原创 字节对齐知识整理
在面试的时候,面试官第一个问题就是问我什么是字节对齐,以及字节是怎么对齐的。说实话,这是我第一次在面试的时候,碰到这种问题,因为这个问题自己在C语言,学习结构体的时候,研究过发现就是那么一回事,也没有做总结,时间间隔比较久,结果呢,说的一塌糊涂。什么是字节对齐在计算机中,数据都是以byte作为基本单位,理论上数据存储的时候,可以以任何地址起始(数据顺序的一个一个存放),但是实际情况中,为了cpu的效率考虑,数据在存储的时候,起始地址也会存在一定的排列规律,这就是字节对齐。准则在普通位置时,存放数
2020-05-28 22:09:33 407
原创 vim的简单配置
前段时间,电脑重新装了一下系统,开发环境全都没有了,重新下载了一下CentOS,发现写代码的效率比较低,没办法重新配置一下自己的开发环境,在网上找了好多,配置虚拟机的博客,发现有的博客相对来说比较复杂,就自己写一个博客,记录一下,自己配置虚拟机,一方面方便后面复盘自己的虚拟机,另一方面也希望对大家有帮助。后期,也会对其进行补充。CentOS 7 安装数据库yum install -y mariadb-serveryum install -y mariadbyum install -y mariad
2020-05-23 18:53:23 150
原创 HTTPS协议的简述
应用层协议: 负责应用程序之间的数据沟通。https协议就是加密后的http协议,http协议的默认端口为80,https默认端口为430。HTTP协议如何加密通过SSL加密实现的,加密的方式主要有对称加密算法以及非对称加密算法两种。因为数据在传输的时候,很容易被人劫持,有很大的安全隐患,所以需要在传输过程中进行加密。对称加密算法对称加密就是指,如何加密,就如何解密。加密的方法与解密的方法一致。优点:加密解密的效率较高。因为加密解密的方法一致,解密的速度较快。缺点:较短时间内不会出现什么问
2020-05-22 10:04:40 270
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人