- 博客(34)
- 收藏
- 关注
原创 数据结构和算法-复杂度分析
我们都知道,数据结构和算法本身解决的是“快”和“省”的问题,即如何让代码运行得更快,如何让代码更省存储空间。所以,执行效率是算法一个非常重要的考量指标。那如何来衡量你编写的算法代码的执行效率呢?这里就要用到我们今天要说的内容:时间、空间复杂度分析。一、为什么需要复杂度分析?你可能会有些疑惑,我把代码跑一遍,通过统计、监控,就能得到算法执行的时间和占用的内存大小。为什么还要做时间、空间复杂度...
2019-12-01 12:38:04
724
原创 数据结构和算法-概述
一、什么是数据结构?什么是算法? 从广义上讲,数据结构就是指一组数据的存储结构。算法就是操作数据的一组方法。 数据结构和算法是相辅相成的。数据结构是为算法服务的,算法要作用在特定的数据结构之上。二、为什么学习数据结构和算法?面试(迫于无奈...)。 掌握数据结构和算法,不管对于阅读大神框架或源码还是理解其背后的设计思想都是很有用的。 对于编程有追求,那就不要只会写凑...
2019-11-29 16:34:55
327
转载 linux中execve函数的用法
在父进程中fork一个子进程,在子进程中调用exec函数启动新的程序。exec函数一共有六个,其中execve为内核级系统调用,其他(execl,execle,execlp,execv,execvp)都是调用execve的库函数。#include<unistd.h>函数定义int execve(const char *filename, char *const argv[ ...
2019-09-16 23:22:32
3193
转载 C++使用pthread_once实现单例模式模板类
C++单例模式://singleton.htemplate<typename T>class Singleton : noncopyable{public: static T& Instance() { pthread_once(&ponce_, &Singleton::init); return *...
2019-07-26 14:31:14
689
转载 C++不可拷贝基类实现
#ifndef NONCOPYABLE_HPP#define NONCOPYABLE_HPP// Private copy constructor and copy assignment ensure classes derived from// class noncopyable cannot be copied.class noncopyable{protected:#...
2019-07-26 14:24:17
318
转载 C语言测试内存分布地址小Demo
#include <stdio.h>#include<malloc.h>#include<unistd.h>int bss_var0; //未初始化全局变量--BSS段int data_var0=1; //已初始化全局变量--数据段static int data_var1 = 1; //已...
2019-07-17 11:45:25
207
原创 git 提交代码流程
1、git status以查看在你上次提交之后是否有修改2、git add .(后面有一个点,意思是将你本地所有修改了的文件添加到暂存区)3、git commit -m""(引号里面是你的介绍,就是你的这次的提交是什么内容,便于你以后查看,这个是将索引的当前内容与描述更改的用户和日志消息一起存储在新的提交中)4、git pull origin master 这是下拉代码,将远程最新的代...
2019-07-04 09:39:47
269
转载 git 拉取远程分支到本地
1、新建一个空文件,文件名为srcmkdir src2、进入src,并初始化gitcd srcgit init3、自己要与origin master建立连接(下划线为远程仓库链接)git remote add origin https://github.com/xxx/xxx.git4、切换到远程分支git fetch origin dev(dev为远程仓库的...
2019-07-04 09:34:36
295
原创 CentOS 安装 Git
方法1:sudo yum install git -y此种方案最快捷,但是不一定是最新版本的git。方法2:下载最新版本git源码后自己编译安装wget https://www.kernel.org/pub/software/scm/git/git-2.9.5.tar.gztar xzf git-2.9.5.tar.gzcd git-2.9.5.tar./config...
2019-07-04 09:22:24
81
原创 GO环境安装
Linux下安装1、go安装//yum安装yum install go -y//dnf安装dnf install go -y或者去https://studygolang.com/dl(墙内的下载地址)下载之后把路径添加到PATH下(这样需要配置GOROOT)2、环境配置mkdir ~/gopath#GOBIN地址mkdir ~/gopath/binmkdir...
2019-06-15 17:51:12
329
转载 golang在windows下安装和使用protobuf
安装部分在windows下安装好GO包,下载地址:http://www.golangtc.com/download 设置GOPATH的环境变量,从github上获取的protobuf会下载到GOPATH目录下 安装GIT包,下载地址:https://git-scm.com/downloads/ 在PATH变量中添加GIT.exe的路径D:\Program Files\Git\bin(自己...
2019-06-12 11:08:20
2759
原创 C++简单工厂模式
简单工厂模式的核心思想是把创建对象过程和对象本身业务处理分离,工厂处理创建对象的细节。具体实现如下:1. 定义一个操作接口:class COperation{public: virtual double GetResult(double a, double b) = 0;};2. 定义具体的操作类:class COperationAdd : publ...
2019-04-26 01:31:17
1733
转载 C++单例模式与线程安全
1.教科书里的单例模式 我们都很清楚一个简单的单例模式该怎样去实现:构造函数声明为private或protect防止被外部函数实例化,内部保存一个private static的类指针保存唯一的实例,实例的动作由一个public的类方法代劳,该方法也返回单例类唯一的实例。 上代码:class singleton{protected: singleton(){}pri...
2019-04-24 14:20:35
471
原创 linux统计功能命令字--wc
1、命令格式:Usage: wc [OPTION]... [FILE]... or: wc [OPTION]... --files0-from=F2、命令功能:打印每个文件的行数、字和字节计数,如果指定了多个文件,则打印一个总行。如果没有文件,或者当文件为-时,读取标准输入。单词是由空格分隔的非零长度字符序列。下面的选项可以用来选择打印哪些计数,总是按照以下顺序:行...
2019-04-19 00:54:27
386
转载 C语言变长数组data[0]【总结】
1、前言 今天在看代码中遇到一个结构中包含char data[0],第一次见到时感觉很奇怪,数组的长度怎么可以为零呢?于是上网搜索一下这样的用法的目的,发现在linux内核中,结构体中经常用到data[0]。这样设计的目的是让数组长度是可变的,根据需要进行分配。方便操作,节省空间。2、data[0]结构经常遇到的结构形状如下:struct buffer{ int da...
2019-04-18 00:41:55
536
转载 select、poll、epoll之间的区别总结
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用...
2019-04-18 00:26:11
128
转载 IO多路复用之epoll总结
1、基本知识 epoll是在2.6内核中提出的,是之前的select和poll的增强版本。相对于select和poll来说,epoll更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。2、epoll接口 epoll操作过程需要三个接口,分别如下:#includ...
2019-04-18 00:22:31
152
转载 IO多路复用之poll总结
1、基本知识 poll的机制与select类似,与select在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是poll没有最大文件描述符数量的限制。poll和select同样存在一个缺点就是,包含大量文件描述符的数组被整体复制于用户态和内核的地址空间之间,而不论这些文件描述符是否就绪,它的开销随着文件描述符数量的增加而线性增大。2、poll函数 函数...
2019-04-18 00:19:43
258
转载 Linux IO多路复用之select总结
1、基本概念 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合: (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。 (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。 (3)如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用到I/O复用。...
2019-04-18 00:16:56
313
原创 Redis小知识点记录
key 的自动创建和删除我们无需在放入元素前创建空的list,也无需在list没有元素的时候删除它。在 list 为空时删除 key,并在用户试图添加元素(比如通过LPUSH)而键不存在时创建空 list,是 Redis 的职责。这不光适用于 lists,还适用于所有包括多个元素的 Redis 数据类型 – Sets, Sorted Sets 和 Hashes。基本上,我们可以用三条...
2019-04-15 11:19:26
182
转载 抓包工具tcpdump用法说明
tcpdump采用命令行方式对接口的数据包进行筛选抓取,其丰富特性表现在灵活的表达式上。不带任何选项的tcpdump,默认会抓取第一个网络接口,且只有将tcpdump进程终止才会停止抓包。例如:shell> tcpdump -nn -i eth0 icmp下面是详细的tcpdump用法。1.1 tcpdump选项它的命令格式为:tcpdump [ -Den...
2019-04-14 01:39:03
172
转载 epoll 水平触发与边缘触发
在linux的IO多路复用中有水平触发(level trigger,LT)和边缘触发(edge trigger,ET)两种模式。 select(),poll()模型都是水平触发模式,信号驱动IO是边缘触发模式,epoll()模型即支持水平触发,也支持边缘触发,默认是水平触发。水平触发1. 对于读操作 只要缓冲内容不为空,LT模式返回读就绪。2. 对于写操作...
2019-04-13 22:19:31
208
转载 使用Redis的分布式锁
分布式锁在许多"不同的进程必须以独占的方式对共享资源进行操作"的场景中是非常有用的原语。(原语 操作系统或计算机网络用语范畴。是由若干条指令组成的,用于完成一定功能的一个过程) 有许多库和博客文章描述了如何使用Redis实现DLM(分布式锁管理器),但是每个库都使用不同的方法,而且许多库使用了一些与稍微复杂一些的设计相比安全性更低的简单的方法。 这个页面试图提供一个使用...
2019-04-12 12:26:25
172
原创 C语言基础之十进制与二进制转换
一、二进制 八进制 十进制 十六进制二进制:逢二进一 数字只包含 01 例:1001 八进制:逢八进一 数字包含 01 2 3 4 5 6 7 例:0754 (0开头) 十...
2019-04-11 14:14:15
8609
转载 protobuf之string bytes的区别
protobuf提供了多种基础数据格式,包括string/bytes。从字面意义上,我们了解bytes适用于任意的二进制字节序列。然而对C++程序员来讲,std::string既能存储ASCII文本字符串,也能存储任意多个\0的二进制序列。那么区别在哪里呢?同时在实际使用中,我们偶尔会看到类似这样的运行错误:1.[libprotobuf ERROR google/protobuf/wir...
2019-04-09 11:31:02
2174
转载 Linux列出一个程序所需要得动态链接库命令 --- ldd
ldd本身不是一个程序,而仅是一个shell脚本:ldd可以列出一个程序所需要得动态链接库(so)我们可以用which命令找到ldd的位置:$ which ldd/usr/bin/ldd在 ldd 命令打印的结果中,“=>”左边的表示该程序需要连接的共享库之 so 名称,右边表示由 Linux 的共享库系统找到的对应的共享库在文件系统中的具体位置。默认情况下,/etc/ld.so...
2019-04-07 22:55:20
2226
转载 CentOS 7安装 ifconfig 管理命令
1. 安装的需求背景我们知道ifconfig 命令可以用于查看、配置、启用或禁用指定网络接口,如配置网卡的IP地址、掩码、广播地址、网关等,功能不可谓不丰富。此命令的功能和Wndows系统的ipconfig非常类似。但是,CentOS7 默认已不再安装此命令,其中很多功能用 ip addr 指令 替代了。考虑到 既有的很多管理工具或脚本都调用了此功能命令(ifconfig),如果...
2019-04-07 15:33:59
583
转载 Centos 7装机后不能联网问题解决
Step1、修改配置文件使用 vi 编辑器修改/etc/sysconfig/network-scripts/ifcfg-eth0进入 /etc/sysconfig/network-scripts 目录$ cd /etc/sysconfig/network-scripts打开配置文件$ vi ifcfg-ens33这里可能你的文件名不是这个,但是找前面是 ifcfg-e...
2019-04-07 14:49:03
202
原创 Linux平台Redis配置及设置开机启动
1、修改 Redis 启动脚本Redis 启动脚本为 Redis 解压目录的utils目录下名为redis_init_script的文件。使用 vim 打开 Redis 启动脚本$ vim ./utils/redis_init_script修改redis_init_script脚本内容如下: 1.1在脚本的第二行添加 # chkconfig 2345 ...
2019-04-05 18:37:51
1449
原创 Linux平台下Redis下载及安装
通过官网下载$ wget http://download.redis.io/releases/redis-5.0.4.tar.gz$ tar xzf redis-5.0.4.tar.gz$ cd redis-5.0.4$ make或者也可以使用git地址下载$ git clone https://github.com/antirez/redis.git$ cd redis...
2019-04-05 17:50:08
1594
原创 Redis简介及相关链接
Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with...
2019-04-05 17:25:41
170
原创 Linux环境变量设置
1、直接用export命令exportPATH=$PATH:/opt/au1200_rm/build_tools/binexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib此种方法临时有效,重启终端后失效2、修改profile文件#vi/etc/profile在里面加入:exportPATH="...
2019-04-03 14:01:21
104
转载 C实现MD5
MD5.h#ifndef MD5_H #define MD5_Htypedef struct{ unsigned int count[2]; unsigned int state[4]; unsigned char buffer[64];}MD5_CTX;void MD5Init(MD5_CTX *context);void MD5Update(MD...
2015-12-04 12:23:07
512
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人