自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

FAS ------ 一颗好奇心,一页好代码!

学习需要耐力和方法,知识需要积累和沉淀!

  • 博客(42)
  • 资源 (4)
  • 问答 (1)
  • 收藏
  • 关注

原创 C++面试题二

1.下列程序输出#include <iostream>class Test {public: void test() { std::cout << "No virtual test!" << std::endl; } vir

2018-09-08 11:43:36 275

原创 C++编程工具类实现 -- 提高笔试里面的编程速度

笔试过程中往往会使用一些常用数据结构,大多数时候标准语言提供的需要做进一步转化,这里把用到的记录到这里,方便以后使用到的时候查找。1.topN相关heap实现,top N 个最小数,Top N个最大数#include <iostream>#include <algorithm>#include <queue&gt

2018-07-17 16:10:51 1894

原创 Vim 常用配置

平时linux下程序开发常用配置,个人感觉比较实用,这里做个记录,插件的安装请参考Vim自动补全set nu " 显示行号syntax on "语法高亮" 自动缩进set autoindentset cindent" 生成临时文件" set backup" set nobackup" 为C语言

2018-07-13 19:57:04 500

翻译 c++ 面试 逆序输出矩阵

本题就是一个需要多动手描下,没什么技术含量,但是需要比较细心的一个题输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. vector<int> printM...

2018-07-11 22:07:12 929

翻译 c++ 面试题 树相关

1.从二叉树根节点到叶节点和为定值的一个路径。输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前) /* struct TreeNode { int val; struct TreeNode ...

2018-07-11 20:40:22 342

原创 C++ 典型题 面试算法 动态规划相关

题目描述(赛码网) 学校联欢晚会的时候,为了使每一个同学都能参与进来,主持人常常会带着同学们玩击鼓传花的游戏。游戏规则是这样的:n个同学坐着围成一个圆圈,指定一个同学手里拿着一束花,主持人在旁边背对着大家开始击鼓,鼓声开始之后拿着花的同学开始传花,每个同学都可以把花传给自己左右的两个同学中的一个(左右任意),当主持人停止击鼓时,传花停止,此时,正拿着花没传出去的那个同学就要给大家表演一个节目。 ...

2018-07-11 09:36:06 422

原创 MySql学习总结

由于mysql内容较多,本文只是把mysql的一些基本内容记录到一块,方便随时需要随时查阅mysql语句整体来说可以分为四类:数据定义语言(DDL):用于创建修改数据库内部的数据结构,如:create,rename,drop,alter。数据查询语言(DQL):从数据库的一个或者多个表中查询数据,如:select。数据操作语言(DML):修改数据库表中的数据,如:inse...

2018-07-10 11:29:33 212

原创 etcd-raft 2.3.7 raft 日志复制 log replication 以及心跳Heartbeat

raft的日至复制和etcd-raft的leader选举 “`

2018-06-30 17:31:30 917

原创 etcd-raft 2.3.7 raft peer间的交互通信流程

在写etcd-raft的leader选举的那篇文章时,每次牵扯到消息接收和发送都用”接收到消息”、“把消息发送”出去这样的字眼给代替了,感觉有那么一点的别扭,这节主要描述下etcd的消息发送流程。 在介绍信息交互流程之前先介绍几个比较关键的结构体类型以及里面关键嵌入成员: EtcdServer :type EtcdServer struct { // etcdserver中用于...

2018-06-29 20:17:41 1122 1

原创 etcd-raft leader选举 2.3.7

etcd-raft的周期性心跳信号产生定时器在扩展的raftNode(raft.node实现raft.Node接口)节点启动,由于raftNode节点一般为扩展etcd-raft算法的结合需求的可定制类,之所以把tick的产生信号放在raftNode主要是方便修改心跳超时时间时不用修改raft协议核心代码,可以见EtcdServer的raftNode:// etcd-2.3.7/etcdser...

2018-06-29 13:38:27 1140

原创 golang 六种排序算法-快速排序、冒泡排序、交换排序、插入排序、归并排序以及堆排序

六种排序方式的注意点以及实现步骤都在代码里面,实现代码如下:package arraysortimport ( "fmt")// 数组的开闭原则:前闭后开// 查找start到end内最小的元素下标func FindMinElemIndex(arr []int, start, end int) int { mini := start for index ...

2018-06-28 18:37:58 394

原创 golang context用法详解

  最初接触golang http源码的时候就发现有一个比较特别的package,顺便把它的源码给看了下,了解下它的工作原理,并且在后面学习etcd源码的时候发现几乎每一个回调相关的函数都会有一个ctx参数,今天闲下来了这么常用的东西还是做下笔记为好。   context包在golang源码的golang.org/x/net/context目录下,context主要用在结束若干个相互具有父子(主...

2018-06-28 09:06:38 4695

原创 c++面试-快速排序

快速排序面试题记录待排序的一串数字为:1, 5, 8, 2, 4, 0, 4, 2, 2, 0 快速排序每次递归确定一个枢纽元素下表,枢纽元素就是位置确定下来已经排好序的元素。下面是c++的快速排序代码:// 函数参数传入的坐标区间遵循左闭右开原则int FindPivot(int *arr, int start, int end) { // 把arr[start,end)...

2018-06-25 17:07:42 433

原创 etcd 2.3.7请求响应流程分析

以对etcd键值的操作请求为例介绍下etcd的请求的开始处理到响应的大体流程,etcd中处理的kv请求的handler为keysHandler,由于keysHandler最终作为http请求的处理函数,所以请求开始处理的入口为ServeHTTP:func (h *keysHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {...

2018-06-25 14:37:38 580

原创 etcd 2.3.7启动流程分析

etcd总共有两种模式。一种是proxy,一种是作为kvstore,这里主要记录了etcd作为kvstore的启动流程,etcd的启动入口在etcd.go/startEtcd,本章先粗略的描述下启动流程的重要环节,后面在详细描述没有重要环节里面的键步骤。首先为各个peer建立net.Listener,用于后续监听各个peer的连接。// 存储peers net.Listener的数组p...

2018-06-24 20:45:39 724

原创 C++ 面试题 -- 多态发生的条件

C++多态产生的条件这个C++多态产生的条件进行简短总结,方便以后温习,C++ 的多态实现的底层原理可以参考《C++虚函数表解析》 https://blog.csdn.net/u010154685/article/details/51816615多态发生的条件主要有3个: (1)具有虚函数的类中,每一个类都会有至少一个虚表,多继承的话字类具有多个虚表(与继承的父类个数一样),父类具有自...

2018-06-01 12:05:00 989

原创 linux下valgrind memcheck 简单使用 C++开发

C++开发使用valgrind memcheck使程序更快更正确valgrind是提供一系列工具,可以帮助我们是我们的程序更正确,运行的更快,其中比较受欢迎的就是memcheck,接下来是我在这方面的学习总结:更详细的可以参见:valgrind 用户手册程序在操作内存时可能犯的错误主要有以下几种:内存泄漏使用未初始化的变量释放内存的方式不对 访问了不应该访问的内存内存拷贝...

2018-05-06 19:26:40 913

原创 centos 7 下安装hadoop 3.0 伪分布式

hadoop 3.0 的安装经过两天的折腾终于把hadoop安装在自己的电脑上,并进行了简单的测试,中间遇到了很多问题,下面主要是我总结的centos 7下伪分布式hadoop的安装。下载hadoop 3.0 的安装包 wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.0.2/ha...

2018-05-06 16:25:22 293

原创 wget 使用笔记

wget常用笔记: wget 下载http传输或则ftp传输的文件,存到本地一个指定或则当前目录里面,基本使用如下 wget -nd ftp://10.10.10.10/home/user/test/download/wget_file.tar.gz -P ./服务端开发常用参数: -P 表示下载到哪个目录 -r 表示递归下载 -c 断点续传 -nd 递归下载时不创建一层一层的目...

2018-04-09 17:03:21 118

原创 子串查找kmp算法 C++实现

本文章为代替git保存代码Kmp算主要分为两步: (1)取得next数组 (2)查找子串代码如下:#include <iostream>#include <string>#include <vector>#include <cassert>/* run this program using the conso

2018-03-18 23:07:11 548

原创 C++ 面试题总结

正向代理和反向代理 正向代理代理客户端,反向代理代理服务器http和https的区别? (1)http是超文本传输协议,明文传输,https是具有安全性ssl加密传输协议 (2)http默认端口80,https默认端口443 (3)https需要申请证书,一般需要一定费用 (4)http链接无状态,https是ssl+http构成的可进行加密传输,安装认证的网络协...

2018-03-17 21:51:32 210

原创 C++ 算法 查找旋转数组中的最小值 允许重复元素

假定一个有序数组中的元素以某个支点做了旋转,如数组01234567变成了34567012,查找该旋转后数组中的最小值。算法思路: 旋转后数组被分为了两部分,较大的一部分和较小的一部分并且较小的一部分在后面,如果我们取中间(非两头)的一个元素c,那么它相对于第一个a和最后一个元素b有如下关系: c < a , c < b => 最小元素在a-c之间 ...

2018-02-25 17:28:58 259

原创 c++算法 和最大的子数组 maxsubarray

求数组的和最大子数组的三种解法:(1)暴力求解(2)分而治之(3)动态规划

2018-02-25 16:01:22 415

原创 C++算法 字符串全排列 非递归/非递归

字符串的全排列是面试中相对而言必要重要的算法,有两种实现方法:递归,非递归补充:替换点:从字符串的最后一位开始,找到第一个逆序的字符串,如“54312”那么从后向前第一个逆序为12,那个1就是替换值,替换值得位置就是替换点。非递归方式:非递归算法思想:对字符串进行从小到大排序,这个可以最快的从后向前找到替换点,找到第一个替换点,记录位置为replace_pos找到替换点之后比它大的最小的数,然后

2018-02-25 13:26:19 1099

原创 Vim 自动补全--YouCompleteMe

Vim 自动补全--YouCompleteMe一、安装vim的插件管理器Vundle 1.如果自己用户目录下不存在.vim/bundle,可以使用如下命令进行创建mkdir -p ~/.vim/bundle2.把Vbundle从github上clone下来,命令如下(如果之前未安装git,请安装后执行如下命令)git clone https://github.com/VundleVim/Vundl

2017-07-06 22:25:54 630

原创 正则表达式基本元字符集

基本元字符集 元字符含义 ^ 匹配行首 $ 只匹配行尾 * 一个单字符后紧跟*,匹配 0 个或多个此单字符 [] 只匹配[ ] 内字符。可以是一个单字符,也可以是字符序列。可以使用‘-’表示[ ]内字符序列范围,如用[ 1 - 5 ]代替[ 1 2 3 4 5 ] \ 用来屏蔽一个元字符的特殊含义。因为有时在 shell 中一些元字符有特殊含义。可以使其失去

2017-02-03 20:02:43 409

原创 C++对象指针比较比较的并不是地址值

在C++中,在有继承的情况下,一个对象可以有多个有效地址,因同一个子类对象,被不同的父类指针指向时,各个父类指针的值是不同的。分析一段如下代码:#include <iostream>#include <assert.h>using namespace std;class shape{private: int id;public: shape(){ id = 1; }};c

2017-01-27 16:40:30 3587

原创 C++ nocopyable

有时候我们要求某些类不能被拷贝,我们可以通过实现,一个不可拷贝的父类,子类对象继承父类对象,来达到子类对象不可拷贝的目的。 实现一个不可拷贝对象就是把拷贝构造函数和赋值运算符声明为私有的,同时实现构造函数(必须有,由于提供了拷贝构造,编译器不在提供)和析构函数。因此我们把nocopyable实现如下:#ifndef NOCOPYABLE_H#define NOCOPYABLE_Hclass no

2017-01-27 13:08:24 1517

原创 C++引用形参+模板---解决数组指针退化为指针

C/C++中如果一个函数接受一个数组作为参数,那么数组将会被退化为指针,如果定义如下代码://数组arr的大小未知。int arrsize(int arr*) { cout << "element num : " << sizeof(arr) / sizeof(arr[0]) << endl; //1}在上面那段代码中不仅得到的数组大小是不正确的,还会出现让调用则不明白是传递int变量的地址

2017-01-27 12:04:12 870 2

原创 C++ 网络编程 数据结构 面试题罗列

在这里有我自己的面试问题,还有网上收集的。 1. connect方法会阻塞,请问有什么方法可以避免其长时间阻塞? 2. 网络中,如果客户端突然掉线或者重启,服务器端怎么样才能立刻知道? 3. 在子网210.27.48.21/30种有多少个可用地址?分别是什么? 4. TTL是什么?有什么用处,通常那些工具会用到它?(ping? traceroute? ifconfig? netsta

2016-07-27 11:43:22 4366

原创 C++关联式容器set,multiset

set和multiset都是C++标准库中的一种关联式容器,它们都会依照一定的规则对存放到其中的元素进行排序,它们俩个主要区别在于:multiset里面的元素可以重复,而set也就类似于数学中的集合,不出现重复元素。

2016-07-12 21:20:49 664

原创 C++序列式容器vector,deque,list

vector,deque,list定义于namespace std中,这三者是STL的序列式容器,也就是元素的位置和你置入元素的方式顺序有关系,三者在存储方式上有很大不同,处于程序运行效率,不同的存储方式,也就提醒我们在不同的应用场景中我们应该选择哪种容器。下面是三者的存储结构示意图: 如图1 vector的存储示意图所示,vector采用动态数组的方式存储元素,一个vector当前所拥有的内容

2016-07-06 22:02:58 941

原创 C++运算符重载++,--

C++自增自减运算共有四种:前缀自增,前缀自减,后缀自增,后缀自减。 C++在重载这四种运算符的过程中通过在后缀时传入一个无用的int参数,前缀时无参数来区分。 前缀的自增自减运算返回操作之后的值,所以应该返回引用,而后缀的自增自减运算返回操作前的值所以应该返回对象的副本。

2016-07-04 13:12:12 425

原创 C++虚函数表解析

静态类型:对象在声明时采用的类型。是在编译期确定的。动态类型:目前所指对象的类型。是在运行期决定的。静态绑定:绑定的是对象的静态类型,某特性(比如函数)依赖于对象的静态类型,发生在编译期。动态绑定:绑定的是对象的动态类型,某特性(比如函数)依赖于对象的动态类型,发生在运行期。

2016-07-03 20:06:00 514

原创 C++类型转换----dynamic_cast(以及结合typeid的应用)

dynamic_cast用于具有继承体系的转换中,用于转换指针和引用,通常类必须要有一个虚函数,因为运行时类的运行信息存储在虚表中,如果没有虚表使用dynamic_cast将会导致编译错误。dynamic_cast在运行时通过检测底层对象的类型信息,来判断本次转换是否有意义,如果没有意义dynamic_cast返回空指针(转换指针)或抛出std::bad_cast异常(转换引用)。

2016-07-02 15:19:30 1730

原创 C++类型转换----reinterpret_cast

reinterpret_cast的功能比static_cast的功能更为强大,但安全性也更为的差,可以用它完成C++语法上不允许的转换,在某些情况下程序员有需要的转换。例如,可以把某种引用或指针类型转换为其他引用类型或指针类型(两个类型可以不相关),这个关键字还经常将指针转换为void*,以及将void*转换为指针。

2016-07-01 12:10:29 5256

原创 C++类型转换----static_cast

static_cast无法像const_cast一样对将常量转换为non-const类型,无法将某种类型的指针转换为其他不相关的其他类型的指针,也无法将指针转换为int(毕竟在64位系统下指针为64位而int为32位)等等,也就是说无法完成C++规则认为的没有意义的转换。

2016-07-01 11:35:20 1444

原创 C++类型转换----const_cast

const_cast是一种舍弃常量特性的类型转换,被转换的对象在脱常后必须能够作为左值,否则无法使用这种类型转换,在使用这个类型转换时我们必须在确保脱常后变量不会被修改。

2016-07-01 11:06:39 348

原创 C++模板----限制模板只能某些已知类型进行实例化

可能有时候我们需要限定我们所编写的模板的应用范围,我们可以通过下面的方式实现.实现一个模板只能定义应于特定的几种类型

2016-06-30 19:30:28 8889 5

原创 C++中的virtual析构函数

为什么C++的一个类需要被继承时,需要把这个类的析构函数声明为虚函数(virtual修饰)

2016-06-30 13:44:01 400

go 语言编程高清晰带目录索引

本书首先引领读者快速浏览 Go 语言的全貌 , 迅速消除读者对这门语言的陌生感 , 然后循序渐进地介绍了 Go 语言的面向过程和面向对象的编程语法 , 其中穿插了一些与其他主流语言的比较以让读者理解 Go 语言的设计动机 , 接着探讨了 Go 语言最为重要的并行编程方法 , 之后介绍了网络编程 、 工程管理 、安全编程 、开发工具等非语法相关但非常重要的内容 , 最后为一系列关于 Go 语言的文章 , 可以帮助读者更深入了解这门全新的语言 。

2018-06-28

glog google谷歌的一个开元日志框架

glog具有如下特性或者功能: ◆ 参数设置,以命令行参数的方式设置标志参数来控制日志记录行为; ◆ 严重性分级,根据日志严重性分级记录日志; ◆ 可有条件地记录日志信息; ◆ 条件中止程序。丰富的条件判定宏,可预设程序终止条件; ◆ 异常信号处理。程序异常情况,可自定义异常处理过程; ◆ 支持debug功能; ◆ 自定义日志信息; ◆ 线程安全日志记录方式; ◆ 系统级日志记录; ◆ google perror风格日志信息; ◆ 精简日志字符串信息

2017-12-09

smtp pop邮件客户端源码

smtp pop邮件客户端源码

2017-01-19

Programming with Libevent

2016-10-28

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

TA关注的人

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