- 博客(75)
- 资源 (5)
- 收藏
- 关注
转载 Go中目录结构GOPATH的作用
在学习go语言的过程当中, 你也许问过自己一个问题, GOPATH到底是做什么的? 或许在写过一些代码之后, 很快你就会在网上找到一些资料, 它告诉我们GOPATH这个环境变量它指定了一个目录, 这个目录包含了我们所有的源码, 比如这里的介绍, 但是我觉得光是理解这一点是不够的, 因为你会发现让人为难的是, 看起来似乎我们每新建一个项目, 都要往GOPATH再补充一条路径, 这实在是反人类的做法啊...
2018-12-21 10:00:01 6684 2
原创 Linux中线程池简介与实现示例
池由于服务器的硬件资源“充裕”,那么提高服务器性能的一个很直接的方法就是以空间换时间,即“浪费”服务器的硬件资源,以换取其运行效率。这就是池的概念。池是一组资源的集合,这组资源在服务器启动之初就被创建并初始化,这称为静态资源分配。当服务器进入正式运行阶段,即开始处理客户请求的时候,如果它需要相关的资源,就可以直接从池中获取,无需动态分配。很显然,直接从池中取得所需资源比动态分配资源的速...
2018-12-12 20:07:34 402
原创 Linux中主线程和子线程的终止次序
Linux中pthread是我们进行多线程并发时经常使用的,pthread创建的子线程和主线程的终止顺序有什么样的关系,下面通过代码来总结下。在代码测试前,先说下结论: (1)主线程和子线程之间没有必然的退出次序关系。主线程退出,子线程可以继续执行;子线程退出,主线程也可以继续执行。 (2)程序加载到内存中执行的时候,进程就会生成一个主线程。虽然主线程和子线程之间没...
2018-11-28 17:05:50 7698 1
转载 Linux环境变量介绍
环境变量就是系统或软件设置的一些参数,用户环境变量就是用户登录系统后,都有自已专用的运行环境。在Windows系统中用户环境变量保存在用户家目录,Linux也是同样的。本文主要是讲解Linux常用的环境变量和环境变量的设置。一、环境变量相关操作(只应用于当前,要永久保存需要写入到相关文件。)#echo $PATH 显示PATH设置。#env 显示当前用户变量。#set 显...
2018-11-28 10:59:18 271
原创 Pthread多线程学习(1)
Table of Contents一、概要介绍二、pthread线程三、互斥锁四、条件变量五、总结条件变量中的虚假唤醒问题pthread_cond_wait() 函数joinabler和detach一、概要介绍多线程开发在 Linux 平台上已经有成熟的 Pthread 库支持。其涉及的多线程开发的最基本概念主要包含三点:线程,互斥锁,条件变量。其中,线程操...
2018-11-26 17:15:47 276
转载 xargs命令详解
阅读目录为什么要用xargs,问题的来源 xargs是什么,和管道有什么不同 xargs的一些选项为什么要用xargs,问题的来源在工作中经常会接触到xargs命令,特别是在别人写的脚本里面也经常会遇到,但是却很容易与管道搞混淆,本篇会详细讲解到底什么是xargs命令,为什么要用xargs命令以及与管道的区别。为什么要用xargs呢,我们知道,linux命令可以从两个地方读取要处理的...
2018-11-21 16:57:57 26160 5
原创 Linux进程间通信(2)- 消息队列
1 简介Linux和类Linux系统下进程间通信(Inter-Process Communication, IPC)有很多种方式,包括套接字(socket),共享内存(shared memory),管道(pipe),消息队列(message queue)等,各自有各自的一些应用场景和用途,本次来介绍消息队列。消息队列的机制如下图所示,Linux系统会维护一个队列,消息发送者通过系统API向...
2018-11-21 15:50:51 316
原创 Linux进程间通信(1)- 信号(signal)机制
1 概述Linux和类Linux系统下进程间通信(Inter-Process Communication, IPC)有很多种方式,包括套接字(socket),共享内存(shared memory),管道(pipe),消息队列(message queue)等[1],各自有各自的一些应用场景和用途,这次就来总结一下通过信号(signal)的机制。信号,是Linux中向进程发送的消息,接收到该信号...
2018-11-20 23:20:23 1590
转载 C函数指针
C - 函数指针1 简介C语言中,函数指针有着灵活和广泛地用途(C++中,就更加的灵活了,这里我们就先总结一下C中的用法),在这里总结一下它的一些用法。函数代码被加载在内存中后,也具有它的地址,即函数地址,函数指针是一个指针变量,它的值可以指向某个函数的地址,在调用的时候,可以不通过函数名去调用了,直接通过函数指针来调用即可。2 函数指针的使用2.1 基本使用C语言中,一个函数指针变量...
2018-11-20 20:18:50 258
转载 虚函数和虚函数表
复习下虚函数和虚函数表的知识一、虚析构函数的必要性我们常将一个基类的析构函数定义为虚函数,这样可以防止可能的内存泄漏,其中要点有以下几点:1) 什么情况下会造成可能的内存泄漏? 当父类的析构函数不为虚函数,此时有一个父类的指针指向了子类对象,尝试释放掉这个指针所 占的内存,就可能造成内存的泄漏 我们先建两个类出来,其中myChild公有继承了myFatherclass m...
2018-11-19 21:14:34 548
原创 Linux下定时器的设置
1. alarm函数[1] 引用头文件:#include <unistd.h>; [2] 函数标准式:unsigned int alarm(unsigned int seconds); [3] 功能与作用:alarm()函数的主要功能是设置信号传送闹钟,即用来设置信号SIGALRM在经过参数seconds秒数后发送给目前的进程。如果未设置信号SIGALARM的处理函数,...
2018-11-16 08:45:08 8947 2
原创 Linux文件IO和标准IO
Linux 文件IOLinux中做文件IO最常用到的5个函数是: open , close , read , write 和 lseek ,不是ISO C的组成部分,这5个函数是不带缓冲的IO,也即每个read和write都调用了内核的一个系统调用。#include <fcntl.h>#include <unistd.h>int open(const ch...
2018-11-13 21:46:52 582
原创 C++中string基础操作
1. 截取子串 s.substr(pos, n) 截取s中从pos开始(包括0)的n个字符的子串,并返回 s.substr(pos) 截取s中从从pos开始(包括0)到末尾的所有字符的子串,并返回 2. 替换子串 s.replace(pos, n, s1) 用s1替换s中从pos开始(包括0)的n个字符的子串 ...
2018-09-18 01:03:49 297
原创 vector的几种初始化方式
vector的几种初始化及赋值方式:(1)不带参数的构造函数初始化//初始化一个size为0的vectorvector<int> abc;(2)带参数的构造函数初始化//初始化size,但每个元素值为默认值vector<int> abc(10); //初始化了10个默认值为0的元素//初始化size,并且设置初始值vector<int...
2018-09-17 16:16:41 12112
转载 Linux截取文件指定行数之间的内容
在集群上跑数据时市场会出问题,为了方便查看日志个人喜欢将日志下载本地使用notepad查看,但是由于集群是公用资源,每一个日志文件都会非常大,如图:不便于下载到本地进行查看,为了可以将你关注的部分日志下载到本地,可以进行如下操作:1: 确定有自己业务有关的日志在文件中的行数 grep -n "业务有关的关键字" hive.log.2018-06-26图中关键字为0201...
2018-09-03 16:57:22 14433
转载 google 工具 gflags
简单介绍gflags 是 google 开源的用于处理命令行参数的项目。安装编译项目主页:gflags➜ ~ git clone https://github.com/gflags/gflags.git # 下载源码➜ ~ cd gflags➜ gflags git:(master) ✗ mkdir build && cd build # 建立文件夹...
2018-08-23 12:31:20 267
原创 c++模板中的 typename 和 class
在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢? 相信学习C++的人对class这个关键字都非常明白,class用于定义类,在模板引入c++后,最初定义模板的方法为:template &amp;lt;class T&amp;gt; 在这里class关键字表明T是一个类型,后来为了避免class在这两个地方的使用可能给人带来混淆...
2018-08-16 17:43:54 627
原创 Linux下编程用到的锁
线程之间的锁有:互斥锁、条件锁、自旋锁、读写锁、递归锁。一般而言,锁的功能越强大,性能就会越低。1、互斥锁互斥锁用于控制多个线程对他们之间共享资源互斥访问的一个信号量。也就是说是为了避免多个线程在某一时刻同时操作一个共享资源。例如线程池中的有多个空闲线程和一个任务队列。任何是一个线程都要使用互斥锁互斥访问任务队列,以避免多个线程同时访问任务队列以发生错乱。在某一时刻,只有一个线程可以获...
2018-08-15 16:40:51 382
原创 STL中的sort函数实现原理
STL的sort()算法,数据量大时采用Quick Sort,分段递归排序。一旦分段后的数据量小于某个阈值,为避免Quick Sort的递归调用带来过大的额外开销,就改用Insertion Sort(插入排序)。如果递归层次过深,还会改用Heap Sort。STL中的sort并非只是普通的快速排序,除了对普通的快速排序进行优化,它还结合了插入排序和堆排序。根据不同的数量级别以及不同情况,能自动...
2018-08-15 16:31:19 5818
原创 RPC协议
rpc是远程程序调用,调用协议通常包含 1)传输协议 和 2)编码协议 传输协议(用于数据传输):grpc使用HTTP2协议,dubbo使用自定义报文的TCP协议,还有 MQ 编码协议(用于数据序列化):基于文本编码的xml、json,基于二进制编码protobuf等 feature1:通用定义的 http1.1 协议的 tcp 报文中有效编码占比比较少,一个 POST 协议的格式大...
2018-08-14 18:36:47 1030
原创 python中统计程序时间
方法1import datetimestarttime = datetime.datetime.now()endtime = datetime.datetime.now()print (endtime - starttime).seconds方法 2start = time.time()run_fun()end = time.time()print end-st...
2018-07-26 23:20:21 474
原创 Linux中的sed命令
sed命令概述sed全称是 stream editor,即流编辑器。sed命令一次处理一行内容,把当前处理的行存储在临时缓冲区中,称为“模式空间”,然后sed命令处理缓冲区中的内容,处理完成后,将缓冲区的内容输出到屏幕。然后,接着处理下一行,这样不断重复,直到文件末尾。在操作中,除非重定向存储输出,否则只改变缓冲区中的内容,文件内容并没有改变。 sed命令是Linux中非常重要的一个文本...
2018-07-17 16:11:43 218
原创 vim创建代码时自动化添加注释
打开~/.vimrc文件,在最后一行下面添加如下如下代码: autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()" "新建.py,.cc,.java,.sh, "定义函数SetTitle,自动插入文件头 func SetTitle() if expand("%:e") == 'cc' c...
2018-07-10 19:50:11 939 1
原创 Gtest简介
前言 Gtest是Google公司发布的一款非常优秀的开源C/C++单元测试框架,已被应用于多个开源项目及Google内部项目中,知名的例子包括ChromeWeb浏览器、LLVM编译器架构、ProtocolBuffers数据交换格式及工具等。在我们开发规范的代码时候,要想办法构造简单的测试用例进行调试,因此针对gtest中的三种事件机制进行简单的分析。 在单元测试中,我们经常需要在某个...
2018-07-05 17:15:30 3478
原创 Linux研发入门篇(一)
一:前言对于想要在Linux下C/C++下开发稍微大型的程序的程序员们都知道,在Linux下处理头文件是一件很头大的事情。比如使用printf函数这种C函数库则需要引用#include <stdio.h>,使用C++中的STL的map容器则要#include <map>,使用socket网络编程则要#include <sys/socket.h>,我们思考下uin...
2018-06-28 18:05:05 296
转载 strcpy、memcpy和memset之间的区别
今天刷题时遇到了这个问题,记录一下。 strcpy比较简单,就是拷贝字符串,遇到'\0'时结束拷贝。 memcpy用来做内存拷贝,可以拷贝任何数据类型的对象并指定拷贝数据的长度:char a[100],b[50]; memcpy(b, a, sizeof(b)); 总结一下: ...
2018-06-03 20:33:47 308
原创 leetcode 456. 132 Pattern
Given a sequence of n integers a1, a2, ..., an, a 132 pattern is a subsequence ai, aj, ak such that i < j < k and ai < ak < aj. Design an algorithm that takes a list of n numbers as input ...
2018-06-03 14:58:19 141
转载 B树和B+树
B树(B- tree) B树不是二叉树,是多叉树 就像在上图中看到,一个节点如果有n个关键字,那么这个节点就会有n+1个子树 这点很好理解,就像节点key = 2 , 那么我们<2 , >2的两部分就构成了它的子树 特性 : 1. 关键字集合分布在整颗树中; 2. 任何一个关键字出现且只出现在一个结点中; 3. 搜索有可能在非叶子结点结束; 4. 其搜索性能等价于在关键字全集内做一次二...
2018-05-30 17:46:03 1231
转载 mmap基础概念与使用
阅读目录mmap基础概念mmap内存映射原理mmap和常规文件操作的区别mmap优点总结mmap相关函数mmap使用细节回到顶部mmap基础概念mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完...
2018-05-26 10:36:28 536
原创 leetcode Linked List Cycle II
Given a linked list, return the node where the cycle begins. If there is no cycle, return null.Note: Do not modify the linked list.Follow up:Can you solve it without using extra space?如下图所示,X,Y,Z分别为链表...
2018-05-26 09:17:45 131
原创 leetcode : Unique Binary Search Trees
Given n, how many structurally unique BST's (binary search trees) that store values 1...n?For example,Given n = 3, there are a total of 5 unique BST's. 1 3 3 2 1 \ / ...
2018-05-24 15:19:13 96
原创 LeetCode : Binary Tree Zigzag Level Order Traversal
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).For example:Given binary tree {...
2018-05-23 19:14:43 207
原创 LeetCode : Binary Tree Level Order Traversal
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).For example:Given binary tree {3,9,20,#,#,15,7}, 3 / \ 9 20 / \ 15...
2018-05-23 19:13:39 109
原创 leetcode : Binary Tree Level Order Traversal II
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).For example:Given binary tree {3,9,20,#,#,15,7}, 3 ...
2018-05-23 19:12:38 128
转载 C++关联容器(二)
关联容器和顺序容器有着根本的不同:关联容器中的元素是按关键字来保存和访问的。与之相对,顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的。 关联容器支持高效的关键字查找与访问。两个主要的关联容器类型是map与set。map类容器map容器中的元素是一些关键字-值(key-value)对:关键字起到索引的作用,值则表示与索引相关联的数据。字典则是一个很好的使用map的例子:可以将单词作为关键字...
2018-05-23 09:50:46 97
转载 C++中set用法详解
1.关于setC++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入、排序、删除、查找等。让用户在S...
2018-05-22 21:34:58 765
转载 软件工程——开发模型
为了指导软件开发,可以用不同的方式将软件生命周期中的所有开发活动组织组织起来从而形成不同的开发模型。瀑布模式瀑布模型严格遵守软件生命周期各阶段的固定顺序:计划、分析、设计、编程、测试和维护,上一阶段完成才能进入到下一阶段,整个模型像一个飞流直下的瀑布一下,如图所示 特点:阶段间具有顺序性和依赖性前一阶段完成后,才能开始后一阶段前一阶段的输出文本为后一阶段的输入文本推迟实现的观点质量保证:每个阶段必...
2018-05-22 21:03:32 602
转载 设计模式的六大原则
关于设计模式的六大设计原则的资料网上很多,但是很多地方解释地都太过于笼统化,我也找了很多资料来看,发现CSDN上有几篇关于设计模式的六大原则讲述的比较通俗易懂,因此转载过来。 原作者博客链接:http://blog.csdn.net/LoveLion/article/category/738450/7一.单一职责原则 原文链接:http://blog.csdn.net/lovelion/art...
2018-05-22 20:01:22 121
原创 复习:C++中二维指针访问数组
关于用指针方式访问二维数组的问题首先,以二维数组a[2][3]为例,a是由数组a[0]、a[1]组成的一维数组,因此,数组名a可以看作是a[0]、a[1]的首地址,即a==&a[0]。然后,对于二维数组,在这里引入两个概念:1、一级指针:带一个下标的数组名是一级指针,偏移量是一个元素的长度,它所指对象是数组元素。2、二级指针:不带下标的数组名是一个逻辑上的二级指针,所指对...
2018-05-18 10:46:03 1200
XV6阅读报告(包含进程线程、内存管理、文件系统和中断与系统调用)
2018-01-22
New Directions in Cryptography(diffie-hellman)
2017-09-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人