自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 资源 (1)
  • 收藏
  • 关注

转载 golang多线程之future

package mainimport ( "fmt" "sync" "time")// Completer用于获取未来的结果。仅仅用于接受type Completer <-chan interface{}// Future用于构建异步任务。 等这个任务完成之后,所以关心这个结果的任务[其他任务可能在干别的事情]都可以接受到消息。type Future struct { triggered bool item interface{} err error

2020-08-31 10:03:17 365 1

原创 golang:从0到1利用socket编程实现一个简单的http服务器

前置知识https://blog.csdn.net/zhizhengguan/article/details/108026066开始编程第一份代码package mainimport ( "fmt" "net")func accept_request_thread(conn net.Conn) { defer conn.Close() for { // 创建一个新切片, 用作保存数据的缓冲区 buf := make([]byte, 1024) n, err := co

2020-08-28 11:56:11 978

转载 Linux上统计文件夹下文件个数以及目录个数

统计文件夹下文件的个数可以试着在终端运行ls -l,可以达到如下结果还可以这样

2020-08-27 15:57:17 25765 5

转载 Shell:换行符

tar -zcvf cutimge_20200827.tar.gz cutimage/

2020-08-27 14:30:57 1812

原创 算法:golang标准库中实现的有头双向循环链表

单向链表无头单向非循环链表有头单向非循环链表有头结点表示第一个结点不保存数据,与其他数据节点区别开来无头结点表示第一个节点保存数据,与其他节点除了位置不同,其余一模一样无头单向循环链表有头单向循环链表链表反转–程序员小灰java实现无头单链表单向循环链表与约瑟夫环双链表无头双向非循环链表golang中的标准库中container/list实现了一个无头单向非循环链表有头双向非循环链表无头双向循环链表有头双向循环链表...

2020-08-26 22:07:41 889

转载 clion:nitialization with static storage duration may throw an exception cannot be caught

说实话, CLion一些警告实在太恶心了,比如说我们在写 Boost 或者 GTest 测试的时候的静态存储警告。例如下面的 Boost 测试代码:BOOST_AUTO_TEST_SUITE(test_time_util)BOOST_AUTO_TEST_CASE(get_now){ // test code}BOOST_AUTO_TEST_SUITE_END()这是再正常不过的代码了,但是CLion 会将上面代码中的 Boost 宏都标上以下类似的警告:Clang-Tidy:

2020-08-26 11:05:09 2571 5

转载 算法:图解汉诺塔问题(递归求解)

汉诺塔:汉诺塔(Tower of Hanoi)源于印度传说中,大梵天创造世界时造了三根金钢石柱子,其中一根柱子自底向上叠着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。下面来对汉诺塔问题进行解释和建立模型这是示意图,a是起始柱,c是目标柱,b起到中转作用在进行转移操作时,都必须确保大盘在小盘下面,且每次只能移动一个圆盘,最终c柱上有所有的盘子且也是从上到下按从小到大的顺序。下面我用图来描.

2020-08-24 15:56:40 3863

转载 Generating /run/initramfs/rdsosreport.txt 问题

问题:输入ls /dev/mapper以我的电脑为例:此时会出现3个文件。其中rhel-root文件是我们下面所要用的文件。ls的目的就是为了让大家能知道自己带“-root”文件的前缀是什么,因为我之前在查这个错误的时候,别人使用“centos-root”输入命令,我学着他的样子,却被提示我没有“centos-root这个文件”,ls后才发现我的是“rhel-root”文件输入xfs_repair /dev/mapper/rhel-root -L注意:一定要重视第1步!先知道自己是cen

2020-08-24 08:52:30 921 1

转载 docker:镜像命令

数组堆如何构建一个大根堆https://blog.csdn.net/zhizhengguan/article/details/106826270有一个需求:有千亿个数据,需要求得最大值,应该怎么做打: 这当然不能用数组,如果用数组的话,需要先把所有数据读到内存中,然后在比较。内存没有那么大。也不能一个个从磁盘中读取数据,因为非常耗费磁盘IO。 我们可以使用链式堆来做链式堆package mainimport "fmt"// 假设没有重复的数据,假设需要插入的数据全部是int类型typ

2020-08-23 22:56:38 4566

转载 算法:golang实现并发快速排序

理论单线程快速排序从“单线程快速排序” 中我们可以看到。快排可以分为三个步骤将当前待排序序列分割为三个部分:低于基准的,等于基准的,高于基准的然后分别对 低于基准的序列 排序、高于基准的序列 排序,一直重复1、2两个步骤,知道不能再次分割[也就是只剩下一个元素或者两个元素]将三个部分合并为一个,那就是有序的了单线程多线程版本1package mainimport ( "fmt" "math/rand" "sync" "time")func QuickSort(ar

2020-08-22 11:04:35 738

转载 centos:centos7.3镜像下载

CentOS 7.3,是CentOS-7系列的第四个发行版本,官方版本号为7.3.1611。该版本的安装映像只有 64 位,具体的安装映像有以下几种:DVD版推荐(迅雷下载):http://archive.kernel.org/centos-vault/7.3.1611/isos/x86_64/CentOS-7-x86_64-DVD-1611.iso迅雷种子下载: CentOS7.3 64位DVD版映像下载假若你不清楚用哪个映像,就选择DVD版本映像,此版本可以让你选择需要安装的组件,并包含所

2020-08-21 11:51:57 10919

转载 centos:解决libgcc_s.so.1 must be installed for pthread_cancel to work

同事移交的程序编译都没问题但是运行时一直报错libgcc_s.so.1 must be installed for pthread_cancel to work,在网上查了很多资料都说是32l位ibgcc没有装或者64位libgcc库没有安装的原因,排查后发现libgcc库都是没有任何问题的,用ldd列出了所有需要的库也都在对应路径下。试过网上的解决方法没有一个奏效的,开始怀疑不是libgcc的问题,最后通过gdb调试发现报错信息中有提到libmysqlclient.so库,通过对比发现是由于安装的lib

2020-08-20 15:43:42 4101

转载 虚拟机CentOS启动报错-entering emergency mode解决办法

解决方法只需要在这里的shell键入一条命令:xfs_repair -v -L /dev/dm-0执行完成后即可重启,恢复正常。此命令的作用是强制清除日志,不会删除自己的文件

2020-08-19 11:59:03 2962 3

转载 golang之RPC学习

rpc什么是rpc我们知道Socket和HTTP采用的是类似"信息交换"模式,即客户端发送一条信息到服务端,然后(一般来说)服务器端都会返回一定的信息以表示响应。客户端和服务端之间约定了交互信息的格式,以便双方都能够解析交互所产生的信息。但是很多独立的应用并没有采用这种模式,而是采用类似常规的函数调用的方式来完成想要的功能。RPC就是想实现函数调用模式的网络化。客户端就像调用本地函数一样,然后客户端把这些参数打包之后通过网络传递到服务端,服务端解包到处理过程中执行,然后执行的结果反馈给客户端。RPC

2020-08-16 21:49:32 409

转载 golang:socket编程详解

网络编程有两种:tcp socket编程,是网络编程的主流。之所以叫做tcp socket编程,是因为底层是基于tcpip协议的b/s结构的http编程,我们使用浏览器去访问服务器,使用的就是http协议,而http底层使用的依旧是tcp socket实现的socket编程socket的作用socket可以通过网络连接让多个进程建立通信并且相互传输数据,不管进程是不是在一个主机上。这意味这socket可以用来提供网络中不同计算机的多个应用程序的通信,可以用于单个计算机上的多个应用程序之间通信。

2020-08-16 00:21:07 7662 2

转载 C/C++编程:使用枚举类型作为函数参数

C语言使用枚举类型作为函数参数

2020-08-14 14:27:50 10210

转载 C/C++编程:成员类(嵌套类)

类型和类型别名也可以作为类的成员。比如:template<typename T>class Tree{ using value_type = T; //成员别名 enum Policy(rb, splay, treeps); //成员枚举 class Node{ Node *right; Node *left; value_type value; public: void f(Tree *); }; Node * top;public: void

2020-08-14 11:25:24 2657

转载 C/C++编程:gdb找出程序段错误位置

#include<iostream>using namespace std;int main(){ int num[10]; for(int i = 0; i < 10; i++){ cin >> num[i]; } for(int i = 9; i >= 0; i++){ cout << num[i] << endl; } return 0;}//很明显在第

2020-08-14 10:44:31 1582

转载 opencv:mat、string、char、uchar转换

cv::Mat转std::stringcv::Mat mat = cv::imread("d:\\1.jpg");std::string str;std::vector<unsigned char> buff;cv::imencode(".jpg", mat, buff);str.resize(buff.size());memcpy(&str[0], buff.data(), buff.size());二、std::string转cv::Mat把std::string当

2020-08-14 09:32:49 4761

转载 C/C++编程:fatal error: stdatomic.h: 没有那个文件或目录

使用gcc编译软件时,出现错误fatal error: stdatomic.h: 没有那个文件或目录 #include <stdatomic.h> ^compilation terminated.gcc 4.8 的漏洞,在gcc 4.9已经修复解决方法:安装更高版本的gcc例如:sudo apt-get install gcc-4.9...

2020-08-12 17:26:19 14798 3

转载 Unix/Linux编程:条件变量

条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。一 pthread_cond_wait定义:函数原型:# 参数: cond 条件变量 : 指向一个条件变量的指针# 参数: mutex 互斥锁 : 互斥锁的指针int pthread_cond_wait(pthread_cond_t *cond, pthread_m

2020-08-12 14:50:46 494 3

转载 算法:哈希表的设计

实际上,散列函数也是哈希算法的一种应用。实现哈希算法的函数叫做哈希函数,可以用f(in) = out表示举个例子:哈希函数应该有如下特性:推论:相似字符串,经过f(str1)输出一个0~2^{128}-1中的一个数,经过%10之后,在上还是均匀分布的发生冲突,继续寻找下一块未被占用的存储地址。常见的实现方法有如下三种:(1)线性探测(Linear Probing)(最好O(1);最坏情况下的时间复杂度为 O(n))(2)二次探测(Quadratic probing)和线性探测(Linear Probi

2020-08-12 08:34:39 2937

转载 golang源码阅读之实现set操作

set.gopackage maintype Set interface { // 向集合添加元素。返回是否已添加项。 Add(i interface{}) bool // 返回集合中的元素数 Cardinality() int // 从集合中移除所有元素,保留空集。 Clear() // 使用相同的实现返回集合的克隆,复制所有键 Clone() Set // 返回给定项是否都在集合中。 Contains(i ...interface{}) bool // 返回此集合与

2020-08-11 16:44:04 510

转载 golang:同个包下不同文件不能互相调用函数

package mainimport "fmt"func KK() { fmt.Println("kkkkkkkkk")}package mainfunc main() { KK()}编译过程报错: # command-line-argumentstest\main.go:10:3: undefined: hello解决·:如果是GoLand 编辑器,则可以在Run —>Edit Configurations–>go build 里,将run...

2020-08-11 15:28:31 3221 1

转载 golang:获取协程ID,从此走上一条曲折的不归路

类似于其他语言的线程ID,C++当中,每个请求过来,开启一个单独的线程处理它,那么线程的ID是当前请求的唯一标识符。有了唯一标识符以后,就可以创建一个线程安全的全局map来管理每个请求的生命周期的变量。在go语言中,谷歌开发者不建议大家获取协程ID,主要是为了GC更好的工作,滥用协程ID会导致GC不能及时回收内存。如果一个第三方库使用了协程ID,那么使用该库的人将会莫名中招。package gomapimport ( "bytes" "fmt" "runtime" "strconv" "s

2020-08-09 11:26:45 3667

转载 字节序:Big Endian 和 Little Endian

字节序字节序,也就是字节的顺序,指的是多字节的数据在内存中的存放顺序。在几乎所有的机器上,多字节对象都被存储为连续的字节序列。例如:如果C/C++中的一个int型变量 a 的起始地址是&a = 0x100,那么 a 的四个字节将被存储在存储器的0x100, 0x101, 0x102, 0x103位置。根据整数 a 在连续的 4 byte 内存中的存储顺序,字节序被分为大端序(Big Endian) 与 小端序(Little Endian)两类。 然后就牵涉出两大CPU派系:Motorola

2020-08-08 23:28:32 7409

转载 算法:分布式归并排序

golang使用channel实现归并排序的merge本质:给定两个有序的channel, 然后将其合并为一个有序的channel已知:如果管道满了,但是数据没有读取就会一直阻塞如果函数结束了,那么管道一定要被关闭,如果没有关闭就会fatal前提:两个channle中存放的数据是有序的两个channel,无论这两个channel什么时候将数据放入,放入了哪些数据【两个管道中的数据是有序的】如果两个管道都没有被关闭管道1的第一个数据比较小,将这个数据读取到结果管道中。【此时管道2被

2020-08-08 20:55:01 921

转载 golang:线程安全的map----sync.Map

map线程不安全Go语言中的 map 在并发情况下,只读是线程安全的,同时读写是线程不安全的。下面来看下并发情况下读写 map 时会出现的问题,代码如下:package mainimport "fmt"func main() { m := make(map[int]int) go func() { // 不停地对map进行写入 for { m[1] = 1 } }() go func() { // 不停地对map进行读取 for { _ = m[

2020-08-08 15:52:39 3070

转载 网络:tcp长连接与短连接

当网络通信采用tcp协议时,在真正的读写操作之前,sever与client之间必须建立一个连接,当读写操作完成之后,对方不再需要这个连接时他们可以释放这个链接,连接的连接需要三次握手,释放需要四次握手,也就是说每个连接的建立都是需要消耗资源和时间的tcp连接短连接模拟一种TCP短连接的情况:client 向 server 发起连接请求server 接到请求,双方建立连接client 向 server 发送消息server 回应 client一次读写完成,此时双方任何一个都可以发起 cl.

2020-08-07 18:04:38 2356

转载 golang数据的搜索与查找

顺序查找法package mainimport ( "bufio" "fmt" "log" "os" "strings" "time")type DataStruct struct { UserName string PassWord string} func LoadFromDisk(fileName string, qq_vector *[]DataStruct) { //-------------将文件读取到内存中------------ file, e

2020-08-07 12:06:08 1516

转载 golang:数组的传递(引用传递、指针传递、值传递)

概念介绍数组与切片数组是具有相同唯一类型的一组已编号且长度固定的数据项序列。数组长度最大为2Gb,它是值类型。切片是对数组一个连续片段的引用,所以切片是一个引用类型。按值传递和按引用传递Go语言中函数的参数有两种传递方式,按值传递和按引用传递。Go默认使用按值传递来传递参数,也就是传递参数的副本。在函数中对副本的值进行更改操作时,不会影响到原来的变量。按引用传递其实也可以称作”按值传递”,只不过该副本是一个地址的拷贝,通过它可以修改这个值所指向的地址上的值。Go语言中,在函数调用时,引用类型(s

2020-08-07 11:02:24 3298 3

转载 C/C++编程:linux下的段错误(Segmentation fault)产生的原因及调试方法(经典)

简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址.一 般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指 向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt是由以64位为一个单位的 表,在这张表中就保存着程序运行的代码段以及数据段的起始地址以及与此相应的段限和页面交换还有程.

2020-08-06 15:16:29 7630

转载 工具:valgrind学习

Valgrind 原理valgrind是一个提供了一些debug和优化工具的工具箱,可以使得你的程序减少内存泄漏或者错误访问.valgrind 默认使用 memcheck 去检查内存问题.memcheck 检测内存问题的原理如下图所示:Memcheck 能够检测出内存问题,关键在于其建立了两个全局表。valid-value map:对于进程的整个地址空间中的每一个字节(byte),都有与之对应的 8 个 bits;对于 CPU 的每个寄存器,也有一个与之对应的 bit 向量。这些 bits

2020-08-06 14:16:52 2872

转载 C/C++编程:计算cpp程序运行时间(ms)(单线程&&多线程)

需要c++11支持#include <chrono>auto start = std::chrono::system_clock::now();//do somethingauto end = std::chrono::system_clock::now();auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);std::cout << elapse

2020-08-06 10:11:26 2983

原创 算法:臭皮匠排序

在《算法导论》第二版第 7 章(快速排序)的思考题(第 95 页)中提及到一种 低效的递归排序算法:Stooge 排序, Howard、Fine 等教授将这个算法称为 漂亮排序算法(完美排序算法)。经过证明,Stooge 排序的性能是慢于冒泡排序的,因为这个,在《算法导论》中作者悄悄的 “diss” 了一下这几位终生教授,“怀疑”他们是否“名副其实”。顾名思义, 漂亮排序算法 它的代码实现 看、上、去 很整齐很好看!private static void stoogeSort(int[] A, i

2020-08-05 18:26:31 1327

转载 C/C++编程:STL中map内存彻底释放方法

最近遇到一个特别占内存的需求。使用STL map/unordered_map,内存无法得到正确释放。再次响应请求,会出现内存溢出的情况。[6453149.107435] Memory cgroup out of memory: Kill process 54949 (******) score 1001 or sacrifice child[6453149.117193] Killed process 54779 (******) total-vm:106091668kB, anon-rss:10484

2020-08-04 11:08:26 8242 8

转载 C/C++编程:正确释放vector的内存(clear(), swap(), shrink_to_fit())

关于vector已经写的差不多了,似乎要接近尾声了,从初始化到如何添加元素再到copy元素都有所涉及,是时候谈一谈内存的释放了。是的,对于数据量很小的vector,完全没必要自己进行主动的释放,因为那样对程序的效率几乎没有影响。但是当vector中存入大量的数据后,并且都数据进行了一些操作,比如删除后,如果我们能积极主动的去释放内存,那么是非常明智的。写到这里,应该明确了size和capacity的区别了。现在介绍一个方法,std::vector::clear()Removes all elemen

2020-08-04 10:43:16 20651 3

转载 C/C++编程:抽象类基础实现

CMakeLists.txtcmake_minimum_required(VERSION 3.16)project(Share)set(CMAKE_CXX_STANDARD 11)include_directories( ./include )add_executable(Share src/main.cpp src/AbstractShape.cpp include/AbstractShape.h src/Triangle.cpp include/Triangle.h src/Rectan.

2020-08-03 17:43:45 605

转载 C/C++编程:键值对map

#include <iostream>#include "map"using namespace std;int main() { map<int, string> mapStudent; mapStudent.insert(pair<int, string>(1, "student_one")); mapStudent.insert(pair<int, string>(2, "student_two")); map

2020-08-03 10:21:07 2809

onvif摄像头对接鉴权

对应文章: https://blog.csdn.net/zhizhengguan/article/details/109325688

2022-08-11

空空如也

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

TA关注的人

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