自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Brainer-Gao

慢慢来,你想要的时间都会给你!

  • 博客(37)
  • 资源 (7)
  • 收藏
  • 关注

转载 浅谈Thrift内部实现原理

Thrift由两部分组成:编译器(在compiler目录下,采用C++编写)和服务器(在lib目录下),其中编译器的作用是将用户定义的thrift文件编译生成对应语言的代码,而服务器是事先已经实现好的、可供用户直接使用的RPC Server(当然,用户也很容易编写自己的server)。同大部分编译器一样,Thrift编译器(采用C++语言编写)也分为词法分析、语法分析等步骤,Thrift使用了开源

2017-09-24 10:27:08 1132

转载 使用Thrfit RPC编写程序

1. 概述本文以C++语言为例介绍了thrift RPC的使用方法,包括对象序列化和反序列化,数据传输和信息交换等。本文采用了一个示例进行说明,该示例主要完成传输(上报日志或者报表)功能,该示例会贯穿本文,内容涉及thrift定义,代码生成,thrift类说明,client编写方法,server编写方法等。关于Thrift架构分析,可参考:Thrift框架介绍。关于Thrift

2017-09-24 10:18:22 1289

转载 Thrift使用指南

1. 内容概要本文档比较全面的介绍了thrift(关于thrift框架的介绍,参考我这篇文章:Thrift框架介绍)语法,代码生成结构和应用经验。本文主要讲述的对象是thrift文件,并未涉及其client和server的编写方法(关于client和server的编写方法,可参考我这篇文章:使用Thrift RPC编写程序)。本文档大部分内容翻译自文章:“Thrift:The mi

2017-09-24 10:09:27 1659

转载 Thrift框架介绍

1、前言Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目。Thrift通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和数据类型,然后通过一个编译器生成不同语言的代码(目前支持C++,Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Small...

2017-09-23 20:40:03 1873

原创 Scala Trait 详解(实例)

Trait基础在Scala中,Trait是一种特殊概念。首先,Trait可以被作为接口来使用,此时Trait与Java的接口非常类似。同时在Trait可以定义抽象方法,其与抽象类中的抽象方法一样,不给出方法的具体实现。 注意:类使用extends继承Trait,与Java不同,这里不是implement,在Scala中,无论继承类还是继承Trait都是用extends关键字。在Scala中,类继

2017-04-21 16:29:04 12594 1

原创 leetcode 695 经典DFS解法

岛屿的最大面积class Solution {public: const static int g_dirMaxLen = 4; const static int g_dirMaxDim = 2; int dir[g_dirMaxLen][g_dirMaxDim] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}}; int dfs(vec...

2020-03-15 18:51:12 905

原创 Linux内核系列(二) 如何阅读源码

现代的操作系统一般由进程管理、内存管理、文件系统、驱动程序、网络等组成。linux内核源代码各个目录就可以大致了解对应哪些方面:1)arch这个子目录包含了此核心源代码所支持的硬件体系结构相关的核心代码。如对于X86平台就是i386。2)include这个目录包括了核心的大多数include文件。另外对于每种支持的体系结构分别有一个子目录。3)init此目录包含核心启动代码。4)m...

2019-04-05 11:57:00 1237

原创 Linux内核系列(一) 源码下载及如何学习

1、源码下载:https://www.kernel.org/HTTP https://www.kernel.org/pub/ GIT https://git.kernel.org/ 官网下载经常速度太慢,无法下载,提供另一个链接:http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/2、如...

2019-04-05 11:34:05 1649

原创 Tensorflow快速安装

这里简单介绍介绍下tensorflow的安装过程。首先,不同的操作系统安装方式也不同,这里介绍的是在windows下如何安装tensorflow,在安装tensorflow前要先安装虚拟机vmware和ubuntu系统,若你已有linux操作系统,可忽略这一步;其次,查找要安装的tensorflow的对应版本,这里采用的是清华大学开源软件镜像站https://mirrors.tuna.ts...

2018-10-28 17:57:32 1235

原创 nanomsg 框架简介

1、nanomsg概述Ø  nanomsg是一个socket library,它提供了几种常见的通信模式,为了能使网络层快速、可扩展并且能易于使用。用C实现,且适用于广泛的操作系统,几乎不需要依赖。这里的通信模式(也称为“可扩展性协议”)是构建分布式系统的基本框架。通过组合它们,可以创建广泛的分布式应用程序。Ø  目前可用的可扩展性协议有:  PAIR - 简单的一对一沟通  BU

2017-10-29 20:44:54 9234

原创 (二十四)剑指offer之整数中1出现的次数

题目描述:求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13。因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。 ​class Solution {public: int NumberOf1Between1A

2017-01-19 19:44:23 715

原创 (二十三)剑指offer之连续子数组的最大和

题目描述:HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如: {6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?//动态规划

2017-01-19 19:40:08 737

原创 (二十二)剑指offer之最小的k个数

题目描述:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。时间复杂度O(n)class Solution {public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { vector<int> result;

2017-01-18 19:53:09 644

原创 (二十一)剑指offer之数组中出现次数超过一半的数字

题目描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如: 输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 ​class Solution {public: int MoreThanHalfNum_Solution(vector<int> numbers) {

2017-01-18 19:46:49 643

原创 (二十)剑指offer之字符串的排列

题目描述:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba,结果请按字母顺序输出。输入描述: 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。class Solution {public: vector<string> Permutation(

2017-01-17 18:47:37 495

原创 (十九)剑指offer之二叉搜索树与双向链表

题目描述:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NU

2017-01-17 18:40:25 461

原创 (十八)剑指offer之复杂链表的复制

题目描述:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。注意:输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空。/*struct RandomListNode { int label; struct RandomListNode *next, *random; Ra

2017-01-15 16:22:05 387

原创 (十七)剑指offer之二叉树中和为某一值的路径

题目描述:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), righ

2017-01-15 16:17:50 400

原创 (十六)剑指offer之二叉搜索树的后序遍历序列

题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。 如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。class Solution {public: bool VerifySquenceOfBST(vector<int> sequence) { int length = sequence.size(); return v

2017-01-14 22:21:59 417

原创 (十五)剑指offer之从上向下打印二叉树

题目描述:从上往下打印出二叉树的每个节点,同层节点从左至右打印。 ​/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {publi

2017-01-14 22:17:51 357

原创 (十四)剑指offer之栈的压入弹出序列及包含min函数的栈

1、题目描述:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。class Solution {public: void push(int value) { s_data.push(value); if(s_min_data.size()==0 || value < s_min_data.top()) s_min_

2017-01-13 22:27:07 409

原创 (十三)剑指offer之顺时针打印矩阵

题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如,如果输入如下矩阵: 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.class Solution {public: vector<int> p

2017-01-13 22:20:16 449

原创 (十二)剑指offer之树子结构和二叉树镜像

1、题目描述:输入两颗二叉树A,B,判断B是不是A的子结构。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x):val(x), left(NULL), right(NULL) { }};*/class Solution {

2017-01-12 10:52:15 484

原创 (十一)剑指offer之反转链表和合并链表

1、题目描述:输入一个链表,反转链表后,输出链表的所有元素。/*struct ListNode { int val; struct ListNode *next; ListNode(int x):val(x), next(NULL) { }};*/class Solution {public: ListNode* ReverseList(ListNod

2017-01-12 10:46:18 399

原创 (十)剑指offer之链表中倒数第k个结点

题目描述:输入一个链表,输出该链表中倒数第k个结点。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* FindKthToTail(ListNode* pListH

2017-01-11 15:32:08 366

原创 (九)剑指offer之调整数组顺序使奇数位于偶数前面

题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。class Solution {public: //时间复杂度O(n),空间复杂度O(n) void reOrderArray(vector<int> &array) { if(arra

2017-01-11 15:26:38 514

原创 (八)剑指offer之1的个数和数值的整次方

1、题目描述:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。class Solution {public: int NumberOf1(int n) { int count = 0; while(n){ ++count; n = (n-1)&n; }

2017-01-10 15:45:15 345

原创 (七)剑指offer之Fibonacci数列及其变形

1、题目描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39class Solution {public: int Fibonacci(int n) { if(n == 0) return 0; if(n == 1) return 1; int i;

2017-01-10 15:34:30 542

原创 (六)剑指offer之旋转数组的最小数字

题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 class Solution {public: int minNumberInRotateArray(v

2017-01-09 09:58:30 385

原创 (五)剑指offer之用两个栈实现队列

题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作, 队列中的元素为int类型。 ​class Solution{public: void push(int node) { stack1.push(node); } int pop() { if(stack2.size()<=0){ while(sta

2017-01-09 09:51:25 360

原创 (四)剑指offer之重建二叉树

题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。/** * Definition for binary tree * struct TreeNode { * int val; *

2017-01-08 11:16:20 377

原创 (三)剑指offer之从尾到头打印链表

题目描述: 输入一个链表,从尾到头打印链表每个节点的值。输入描述: 输入为链表的表头输出描述: 输出为需要打印的“新链表”的表头/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL

2017-01-08 11:13:51 460

原创 (二)剑指Offer之替换空格

题目描述:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。class Solution {public: void replaceSpace(char *str,int length) { if(str == NULL || length <= 0)

2017-01-07 11:10:46 440

原创 (一)剑指Offer之二维数组中的查找

题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 输入描述: array: 待查找的二维数组 target:查找的数字输出描述:查找到返回true,查找不到返回falseclass Solution {public: bool Find(vector<vect

2017-01-07 10:47:56 567

原创 C++ Big Three

极客班干货第二周:     死磕自己,成长大家。=========简单构造函数=========        ​上周已经详细介绍了构造函数,这里只需要说明一点,就是要明确一下写作规范,书写构造函数时最好使用this指针,即:this->width = width;this->height = height;this指针明确指出了等号左边是当前类的成员,否则写成下面代码会让

2016-02-05 15:28:17 741

原创 C++编程

极客班干货第一周:     死磕自己,成长大家。 废话少说,直击重点,本周总结:(1)构造函数尽量用initialization List;(2)书写函数时,确定函数是否需要加const;(3)参数传递尽量使用引用,能否用const要视情况而定;(4)返回参数尽量用引用,若是函数内新建的局部变量必定不能用引用;(5)Class declaration中数据尽量放在p

2016-02-03 21:25:13 509

原创 字节对齐小谈

一时兴起,忽然想到数组与结构到底是什么关系呢?原本结构和数组没什么联系。FORTRAN就出现了数组的概念,结构是在Algol中出现的,C++开始结构成为定义新的数据类型的主要方式。结构在编程语言中的地位是为了让用户可以定义集成在一起的一些量,给这个整体一个名字;而数组是为了表达能表达一连串相同类型的数据的。(翁恺)

2015-12-18 21:05:43 651

Maven实战.pdf

Maven实战带你一步一步熟悉Maven,使用Maven。

2017-01-18

Maven权威指南.pdf

Maven 必不可少的构建工具

2017-01-17

C++编程艺术

本书展示了如何应用C++在更大的范围内完成有趣的、有用的、甚至神秘的程序设计任务。

2017-01-12

编译原理.pdf

编译器是将一种语言翻译为另一种语言的计算机程序。编译器将源程序( source language)编写的程序作为输入,而产生用目标语言( t a rget language)编写的等价程序。通常地,源程序为高级语言( high-level language ),如C或C + +,而目标语言则是目标机器的目标代码(object code,有时也称作机器代码(machine code)),也就是写在计算机机器指令中的用于运行的代码。

2017-01-10

空空如也

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

TA关注的人

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