自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 个人学习 -- KMP算法

如此愚钝 一天才学会 KMP算法的思想就是,如果已经匹配的模式串内部有重复的部分,那么我们移动的时候就能多移动几步,而且由于模式串的大小都是固定的,所以我们可以提前的求出有哪些部分是重复的。 这里说的重复是指,前缀子串和后缀子串 举个例子: e x a m p l e 前缀子串: e , ex,...

2020-01-04 16:19:29

阅读数 8

评论数 0

原创 AVL树学习

AVL树为什会出现? 我们之前有学习使用二叉查找树,但是二叉查找树在使用的时候也会出现一些问题,当恰好所有的数据都是按照大小顺序插入的话,就有可能将我们的二叉树编程链表,就导致树结构退化为链表结构。 什么是不平衡 其实不平衡就是一个节点下面的左子树和右子树的高度相差太多,没有雨露均沾,导致出现了不...

2020-01-02 16:31:32

阅读数 2

评论数 0

原创 服务端开发被我忽略的点

Linux c++服务端设计 菜而不自知才是无药可救 —> 说我呢/(ㄒoㄒ)/ 这几天一直在看muduo库的代码,结合着陈硕老师的书《Linux多线程服务端编程 – 使用muduo c++ 网络库》。还记得我第一次使用网络库是在大二下学期的时候,用了boost库,但是用的我也是一脸懵逼...

2020-01-01 16:08:45

阅读数 1

评论数 0

原创 go test benchmark

benchmark 使用方式 func Benchmark(b * testing.B) { //与预测无关的代码 b.ResetTimer() for i := 0; i < b.N ; i++ { // 测试代码 } b.StopTimer() //与测试无关的代码 } ...

2019-12-09 17:22:51

阅读数 7

评论数 0

原创 go 用channel实现对象池并且与sync.Pool对比

标题对象池的实现 原料 channel select 对象本身 import ( "time" "errors" ) type MyObject struct { Value interface{} } type ObjectPool ...

2019-12-09 15:49:11

阅读数 5

评论数 0

原创 go 单例模式

go的单例模式可以使用系统自带的sync的包。 import "sync" type Singleton struct { } var one sync.Once var SingletonInstance * Singleton func (this* Singleto...

2019-12-07 23:55:14

阅读数 6

评论数 0

原创 go 写个协程池 慎入写的不好

##思路讲解 开辟几个固定的协程可供调度,这个大小也是可以指定的 channel的作用,用于唤醒协程处理并发关系 协程执行的函数结构的存储问题 ###threadPool的数据结构 type ThreadPool struct { ch chan int /*channel*/ size...

2019-12-07 18:58:36

阅读数 3

评论数 0

原创 8 go中的结构体struct

go里面的结构体其实和c++差别不太大,但是仍然有go的特色 1.结构体的定义 type Human struct{ name string age int weight int } type Student struct{ Human //匿名字...

2019-09-13 13:11:24

阅读数 40

评论数 0

原创 7 go中的异常处理

go中的异常处理有三个关键字 defer panic recover defer是用来解决异常发生之后有关资源的释放问题,抛出异常之后仍然会执行defer所作用的函数,可以用原来释放资源。 panic是用来抛出异常然后如果没有捕获异常的处理,就会导致程序终止。 应该养成比较好的习惯,就是每...

2019-09-13 13:09:43

阅读数 47

评论数 0

原创 6 go中defer关键字的用法

defer关键字 defer是go里面处理异常的一个关键字,应用场景类似于java里面的finally,使用的时候就是所有的其他的正常的函数进程执行完毕之后都要执行defer。 也就是被defer修饰的函数或者语句都是等到所有的作用域内部的函数执行完毕才会执行。 而且defer修饰的语句应该...

2019-09-13 13:08:01

阅读数 36

评论数 0

原创 5 go中的range

C++11里面开始使用的range的便利方法,go肯定有而且更加的简单粗暴 赋予了更多的功能 Go 语言范围(Range) Go 语言中 range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的...

2019-09-13 12:57:59

阅读数 72

评论数 0

原创 4 go的函数

函数的定义 函数的结构 func [function name] (paramters , ...) (return type) { } //func add(a int , b int) func add(a, b int) int { //代表两个变量是一样的类型 return ...

2019-09-13 12:56:36

阅读数 73

评论数 0

原创 3 go中数组和切片之间的区别

数组 数组的概念之前在c里面就有所以并不会很陌生,但是仍然有些区别。 数组是内置(build-in)类型,是一组同类型数据的集合,它是值类型,通过从0开始的下标索引访问元素值。 在c++里面我们使用数组在传参的时候传递的都是指针,但是在go里面对数组进行赋值或者是穿参都是传值的行为。所以效率...

2019-09-13 12:53:39

阅读数 81

评论数 0

原创 2 golang中变量的定义

个人理解的是,go里面的变量和const修饰的常量其实是不同的概念,做了一个彻底的区分。 对变量的定义:引入了关键字var对变量进行声明 var a int var b string var c float64 var e [4] int // 数组 var f [] int //数组切片...

2019-09-13 12:50:03

阅读数 72

评论数 0

原创 1 go语言介绍的简单的示例

Go语言的语言特性 1.2.1 并发编程 Go 语言引入了goroutine,它是 Go 实现快速高效的并发编程的关键。通过调用 go 关键字,我们就可以让函数以 goroutine 的方式进行运行,也就是以协程为单位进行运行。协程比线程更加的轻量级,也更节省系统资源,这使得我们可以创建大量的...

2019-09-13 12:45:30

阅读数 85

评论数 0

原创 mysql启动错误 ERROR 2002 (HY000) 以及service mysql start莫名其妙来的验证

之前在ubuntu等其他的系统上使用mysql并没有出现这些问题,但是今天使用公司的一个服务器的时候需要自己先下载安装mysql,这时就出现错误了。 mysql服务启动出问题显示如下验证界面 [xx@alarm01v ~]$ service mysql start Redirecting t...

2019-08-23 15:18:07

阅读数 32

评论数 0

原创 2.线程的创建、结束

程序结束的标志 一个进程的结束的标志就是主线程是否执行完毕,当属线程执行完毕时,意味着整个程序已经结束。这样我们其他的线程的任务执行可能会被强行的终止。所以如果我们想要保持指现场的正常运行,我们需要主线程的寿命大于等于子进程时候,这样才能将子进程的任务全部执行完。 当然如果想要让主线程和其他线...

2019-07-28 16:31:55

阅读数 17

评论数 0

原创 多进程 多线程的概念

1.并发 两个或多个任务同时发生一个程序,同时执行多个独立的任务被称作为并发。 在以往的计算机终端和CPU在某一个时刻其实只能执行同一个任务,这个是由它的系统统一调度居你们给每个任务分配固定的时间,对于单核的CPU来说,只要切换的时间频率够快够短,就看起来像是同时在执行好几个程序。 这个其实...

2019-07-28 15:40:37

阅读数 15

评论数 0

原创 c++ decltype关键字的使用

使用这个关键字的作用是找到某一个表达式的类型。其实是类似于typeof但是没有typeof,其实每一个类型是有一个typeid的其实是你是可以获得这个id并且打印出来的,但是ID打印出来也没有什么意义。 c++11导入了一个新的关键字,就是decltype 具体的使用可以看下方 当我们想要知...

2019-07-27 15:27:24

阅读数 20

评论数 0

原创 c++ noexcept 的用法

使用方法 void foo() noexcept; 声明上面的函数不会抛出异常,如果一个异常没有在函数里面被处理,这个函数就会终止这个程序,抛出std::terminate,之后就会调用std::abort。 而且你也可以用另一种方法去声明这个函数抛出异常的方式 比如下面这个,表示如果x...

2019-07-27 13:32:27

阅读数 70

评论数 0

原创 c++ using的一些用法

在谈谈using 在c++2.0之后的新增用法之前,还需要先了解一下什么叫做Alias Template。之后才能更好理解为做什么要这么使用。 1.结合Alias Template所使用的对模板typedef 什么是Alias Template? 就是设计一个模板,并且对这个模板的类型进行t...

2019-07-27 12:35:53

阅读数 12

评论数 0

原创 1. Variadic Template 模板参数可变

介绍 模板的参数在照往常来说是固定的大小之后让编译器进行推导,但是现在c++11出现了新的东西就是模板函数的参数可以使不确定的。下面来看一个实例 template <typename T , typename... Types> void Print(const T & ...

2019-07-21 11:12:04

阅读数 15

评论数 0

转载 c++ 虚函数 虚函数表 个人理解

参考文章:https://blog.csdn.net/qq_20309055/article/details/79298593 整理一份关于虚函数和继承关系的脑图 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指...

2019-07-05 13:40:59

阅读数 22

评论数 0

原创 weak_ptr智能指针

为什么需要weak_ptr? 因为虽然我们可以使用shared_ptr指针,但是不得不说使用shared_ptr还有一些不美好的地方需要注意和解决,所以我们的weak_ptr也是为了帮助解决这些问题而设计出来的。 问题如下: 环向指向:两个共享指针之间互相指向,所以就永远也不会出现计数器减为...

2019-07-04 19:51:53

阅读数 31

评论数 0

原创 shared_ptr智能指针设计与使用

管理pointer很难 我们需要保证当许多个指针指向同一个对象的时候,我们怎么去管理这些指针,并且不希望出现空悬指针和多次析构一个指针的情况出现。通常为了解决以上的尴尬,我们使用智能指针来实现对于pointer的管理。 smart pointer可以实现知道自己什么时候应该释放自己的内存,而不...

2019-07-04 18:51:27

阅读数 32

评论数 0

原创 c++ 异常处理

程序异常的概念 主要是指出现了一些很少发生或者出乎意料的状态,通常显示一个程序的错误或者要求一个必须回应的。如果不能满足这个回应则会经常造成程序卡死不能进行相应的处理。 c语言里面有几个异常管理机制,这些标准在c++里面也可以用,但是c++设计了更加方便的基本不可见处理方式。 使用try与c...

2019-07-02 20:32:50

阅读数 59

评论数 0

原创 构建libgdx游戏项目出现的com.android.ide.common.process.ProcessException: Failed to execute aapt错误

看了好多个人写的blog但是没有我能用的上的,我是用的是GDX1.1这个版本的libgdx库所以,它使用的Gradle版本其实比较低,用的是1.11的版本,而我使用的Android studio是2017的,默认的Gradle版本是4.6,所以首先我就去Android build.gradle ...

2019-05-19 16:08:34

阅读数 50

评论数 0

原创 UDP协议简介

UDP是什么? UDP是一个简单的面向数据报的传输层协议,产生的数据包封装成IP报之后经过网络层,数据链路层层层传递 UDP的特点 UDP是数据报不是流,所以不会像TCP那样有分包的概念,不管数据包是怎么样的就直接发送出去。所以才会产生IP分片,而TCP会进行流量控制,会分包组合,所以一般不...

2019-05-11 22:42:52

阅读数 339

评论数 0

原创 IP源站路由

IP源站路由 IP地址按理来说是不变的,发出的每一地址把目的地址藏住并且使用下一个跳的IP地址,每一跳的IP地址都会改变。但是可能被会被攻击,被引导到另一条路上面。 严格源站路由必须每一站都是直连的,宽松的源站路由不一定是直连的,可以跨过好几跳之后再去选择新的IP地址。 IP选路 其实是一...

2019-05-11 21:04:44

阅读数 187

评论数 0

原创 ARP与ICMP

1.ARP协议 ARP是用于解析IP地址所对应的MAC地址的,PC可以直连也可以连接路由器之后再去查找IP的MAC地址。如果PC和主机是直接连在一起的话那就可以直接查询,如果中间有路由地址的话就会去路由表里面查找下一跳是什么地址,如果是非直连一般会解析网关的mac地址。ARP会给网络中所有的节点...

2019-05-11 21:01:12

阅读数 107

评论数 0

原创 strlen函数以及string类使用心得

复习一下strlen函数 其实,给strlen函数之后它就会向下偏移统计个数,遇到当前位置字符为'\0'才会停下来。如果没有的话就有可能接着往下走下去,甚至会超过开辟空间的区域指向一片未开辟空间赋值的空间。 所以服务端这边接收的buffer要比需要接收的数据大小大一点才不会...

2019-05-11 15:05:31

阅读数 162

评论数 0

原创 boost.asio async_read_some 和 async_read

这次做的这个项目就遇到一些问题 想要达到的效果是每次先读取100字节的内容,之后根据这里面的数据长度的提示去找到接下来需要继续读出来的数据长度是多少,但是还是遇到了一些问题没有解决。所以又回头去看了一下API到底都是怎么回事。 首先我之前使用的是ip::tcp::socket::async_r...

2019-04-24 01:34:45

阅读数 526

评论数 0

原创 Linux进程调度过程

目录 什么是进程调度程序? 多任务操作系统 时间片 进程调度的策略 进程优先级 优先级数组 重新计算时间片 schedule函数 schedule函数如何找到下一个需要执行的进程? 计算优先级与时间片 睡眠与唤醒 Linux负载平衡程序 抢占与上下文切换 用户抢占 内...

2019-04-19 01:47:09

阅读数 51

评论数 0

原创 LInux进程创建过程

写时拷贝 传统的fork系统调用直接把所有的资源复制给新创建的进程,但是这种实现过于简单,效率低下,因为并不支持拷贝数据的共享。 更糟的是如果新进程打算立即执行一个新的映像那么所有的拷贝都将前功尽弃。 Linux下面的fork采用的是写时拷贝的方法,也就是说让父进程与子进程拥有同一份拷贝,之...

2019-04-15 22:58:41

阅读数 565

评论数 0

原创 STL源码剖析读书笔记 迭代器概念traits编程技法

迭代器的设计思维--STL设计理念 STL在设计的时候希望达到将数据结构和算法分离开来独立设计,最后再使用一点耦合剂来使它们联系起来。 这里举了一个容器、算法、迭代器的例子,就是find函数,对于不同类型的迭代器,都可以讲其中的数据与value进行对比,其实表面上看上去迭代器是依附于容器的,那...

2019-04-15 01:50:02

阅读数 16

评论数 0

原创 基础算法之二叉树 2 二叉树的序列化和反序列化

关于二叉树的序列化和反序列化的概念解释 第一次接触这个可能会比较懵,什么叫序列化和反序列化? 序列化:系统为了保存二叉树的存储结构从而把二叉树变成了一串字符串记录在文件等地方 反序列化:就是将字符串去恢复成二叉树 序列化的整个思路 遇见NULL的时候用#占位,因为没有‘#’就很难区分左右的...

2019-04-15 01:42:57

阅读数 19

评论数 0

原创 基础算法之二叉树 1 平衡二叉树的判断

什么是平衡二叉树? 平衡二叉树指的是二叉树的每一个节点的左子树和右子树的高度差为不大于1 所以由此推出判断的条件有 每一个子树如果有一个出现不是平衡二叉树的话就一定不是平衡二叉树 如果遍历得到的某一个节点出现了,二叉树的高度之差大于1也不是二叉树 每次遍历之后都要返回左右子树的深度 如...

2019-04-14 20:02:01

阅读数 25

评论数 0

转载 C++时间戳转换成标准时间

对方发过来的时间格式是时间戳,我这边需要解析成普通的日期格式,参考了下面的帖子 https://www.cnblogs.com/kaituorensheng/p/3922919.html 使用的是time.h里面函数,还是c的函数比较好用 void JsonMeterMessage::...

2019-04-14 00:18:21

阅读数 867

评论数 2

原创 基础算法 数组改成栈

#ifndef ARRAY2STACK_H #define ARRAY2STACK_H #include <memory.h> #include <iostream> class array2stack { public: array2stack...

2019-04-08 16:34:53

阅读数 29

评论数 0

原创 基础算法 数组转成队列

/****** array2queue.h ********/ #ifndef __ARRAY_QUEUE_H__ #define __ARRAY_QUEUE_H__ #include <iostream> #include <stdio.h> #include <...

2019-04-08 15:09:22

阅读数 33

评论数 0

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