自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 2020-12-26

1.golang 学习过程中发现,golang不支持默认参数,在学习grpc 过程中,发现grpc有很优雅的实现2.应用场景:如果你定义的结构有些扩展参数,不需要调用者传入,或只需要特定的使用者传入时一般我们实现方式是type Server struct { Name string Url string Timeout int //扩展参数}​func NewServer(name, url string, timeout int) *Server {...

2020-12-26 11:40:52 79

转载 C++ - 类的成员变量 声明顺序 与 初始化顺序 相同

本文地址: http://blog.csdn.net/caroline_wendy/article/details/23845027类成员的默认初始化顺序是按照声明顺序进行, 如果使用初始化列表初始化成员变量, 则必须按照成员变量的声明顺序进行;否则, 在变量之间交替赋值时, 会产生, 未初始化的变量去赋值其他变量;同时GCC, 也会发出警告, 如: 'cl

2016-08-21 18:06:47 1042

转载 C++中的空类,默认产生哪些类成员函数

class Empty{  public:      Empty(); // 缺省构造函数      Empty( const Empty& ); // 拷贝构造函数      ~Empty(); // 析构函数       Empty& operator=( const Empty& ); // 赋值运算符       Empty* operator&(); // 取

2016-08-21 17:13:55 621

转载 c++对象内存模型【内存布局】

#类中的元素0. 成员变量   1. 成员函数   2. 静态成员变量   3. 静态成员函数   4. 虚函数   5. 纯虚函数#影响对象大小的因素0. 成员变量     1. 虚函数表指针(_vftptr)   2. 虚基类表指针(_vbtptr)   3. 内存对齐_vftptr、_vbtptr的初始化由对象的构造函数, 赋值运算符自动完成;对象生命

2016-08-21 16:22:52 280

转载 stack/queue

栈(statck)这种数据结构在计算机中是相当出名的。栈中的数据是先进后出的(First In Last Out, FILO)。栈只有一个出口,允许新增元素(只能在栈顶上增加)、移出元素(只能移出栈顶元素)、取得栈顶元素等操作。在STL中,栈是以别的容器作为底部结构,再将接口改变,使之符合栈的特性就可以了。因此实现非常的方便。下面就给出栈的函数列表和VS2008中栈的源代码,在STL中栈一共就5个

2016-07-30 22:54:05 303

转载 C++语法 : 内存池技术的原理与实现

序言  最近在网上看到了几篇篇讲述内存池技术的文章,有一篇是有IBM中国研发中心的人写的,写的不错~~文章地址在本篇blog最后。原文的讲述比我的要清晰很多,我在这只是把我的一些理解和遇到的一些问题和大家分享一下~~一、为什么要使用内存池技术呢  主要有两个原因:1、减少new、delete次数,减少运行时间;2、避免内存碎片。  1、效率  c语言中使用m

2016-07-25 23:00:27 463

转载 stl容器区别: vector list deque set map-底层实现

stl容器区别: vector list deque set map-底层实现stl容器区别: vector list deque set map (转)在STL中基本容器有: vector、list、deque、set、mapset 和map都是无序的保存元素,只能通过它提供的接口对里面的元素进行访问set:集合, 用来判断某一个元素是不是在一个组里面,使

2016-07-25 22:47:48 407

转载 STL面试题

1.说说std::vector的底层(存储)机制。 vector就是一个动态数组,里面有一个指针指向一片连续的内存空间,当空间不够装下数据时,会自动申请另一片更大的空间(一般是增加当前容量的50%或100%),然后把原来的数据拷贝过去,接着释放原来的那片空间;当释放或者删除里面的数据时,其存储空间不释放,仅仅是清空了里面的数据。2.std::vector的自增长机制。

2016-07-25 22:29:55 274

转载 字符串匹配各种算法

我想说一句“我日,我讨厌KMP!”。KMP虽然经典,但是理解起来极其复杂,好不容易理解好了,便起码来巨麻烦!老子就是今天图书馆在写了几个小时才勉强写了一个有bug的、效率不高的KMP,特别是计算next数组的部分。其实,比KMP算法速度快的算法大把大把,而且理解起来更简单,为何非要抓住KMP呢?笔试出现字符串模式匹配时直接上sunday算法,既简单又高效,何乐而不为?说实话,想

2016-07-25 20:52:05 409

转载 【经典算法】——KMP,深入讲解next数组的求解

因为B与A不匹配,搜索词再往后移。3.就这样,直到字符串有一个字符,与搜索词的第一个字符相同为止。4.接着比较字符串和搜索词的下一个字符,还是相同。5.直到字符串有一个字符,与搜索词对应的字符不相同为止。6.这时,最自然的反应是,将搜索词整个后移一位,再从头逐个比较。这样做虽然可行,但是效率很差,因为你

2016-07-25 18:07:34 227

转载 线程与进程的区别

1、线程的基本概念    概念:线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。    好处 :(1)易于调度。               (2)提高

2016-07-24 15:45:54 186

转载 C++语法 : 堆和栈区别 生长方向

C++作为一款C语言的升级版本,具有非常强大的功能。它不但能够支持各种程序设计风格,而且还具有C语言的所有功能。我们在这里为大家介绍的是其中一个比较重要的内容,C++内存区域的基本介绍。C++内存区域分为5个区域。分别是堆,栈,自由存储区,全局/静态存储区和常量存储区。栈:由编译器在需要的时候分配,在不需要的时候自动清除的变量存储区。里面通常是局部变量,函数参数等。堆:由n

2016-07-24 15:32:23 1151

转载 C++语法 :C/C++ 内存布局详解(经典)

一个由C/C++编译的程序除了存放函数二进制代码的程序代码段(code段)外,数据占用的内存大致分为以下几个部分:1、栈区(stack)   存放局部变量、函数参数、返回数据、返回地址等。系统自动分配释放 ,其操作方式类似于数据结构中的栈。需要注意的有三点: 第一, 退栈后销毁进栈时定义数据,请看下面这段。char* fun(char

2016-07-24 15:06:22 351

原创 翻转链表

class Solution {public: ListNode* ReverseList(ListNode* pHead) { if(pHead == NULL) return NULL; ListNode* newHead = pHead; pHead = pHead->next; n

2016-07-22 22:15:30 193

原创 TCP/IP协议三次握手与四次握手流程解析

TCP/IP协议三次握手与四次握手流程解析 一、TCP报文格式  TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图:图1 TCP报文格式  上图中有几个字段需要重点介绍下:  (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。  (2)确认序号:Ack序号,占32位,只有

2016-07-22 16:07:06 215

转载 C++ 语法 : C/C++中static关键字作用总结

1.先来介绍它的第一条也是最重要的一条:隐藏。(static函数,static变量均可)当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。举例来说明。同时编译两个源文件,一个是a.c,另一个是main.c。//a.cchar a = 'A'; // global variablevoid msg(){

2016-07-22 15:00:19 248

转载 十道海量数据处理面试题与十个方法大总结

第一部分、十道海量数据处理面试题  1、海量日志数据,提取出某日访问百度次数最多的那个IP。  此题,在我之前的一篇文章算法里头有所提到,当时给出的方案是:IP的数目还是有限的,最多2^32个,所以可以考虑使用hash将ip直接存入内存,然后进行统计。  再详细介绍下此方案:首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多

2016-07-21 15:32:40 249

转载 几种查找数组的前K个最小值的算法

总结一下关于如何查找数组的前K个最小值实现方法,查找前K个最小值实现方法很多,主要的思想包括如下的几种:    1、对数组进行排序,然后前K个元素就是需要查找的元素,排序的方法可以采用快速排序,但是我们知道在快速排序中如果已经是有序的数组,采用快速排序的时间复杂度是O(N^2),为了解决这种问题,通常选择随机选择一个数组值pivot作为基准,将数组分为S1 = pivot,这样就能避免快速

2016-07-21 15:10:46 1256

转载 C++ 语法 : volatile关键字详解

C/C++中volatile关键字详解 1. 为什么用volatile?    C/C++ 中的 volatile 关键字和 const 对应,用来修饰变量,通常用于建立语言级别的 memory barrier。这是 BS 在 "The C++ Programming Language" 对 volatile 修饰词的说明:A volatile specifier is a

2016-07-19 18:44:15 362

转载 C++语法 :C++拷贝构造函数详解

一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:[c-sharp] view plain copyint a = 100;  int b = a;   而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。

2016-07-19 17:36:35 381

转载 C++ 语法 :#pragma once 与 #ifndef ...#define ...#endif

111#ifndef ...#define ...#endif和#pragma once都是为了解决同一个问题的,就是防止头文件被重复包含和编译。这种宏定义都是作用于编译阶段,属于条件编译,控制编译流,可以让我们按照想要的方式来编译我们的代码。 #pragma once用来防止某个头文件被多次include; #ifndef,#define,#endif用来防止

2016-07-19 15:28:35 460

转载 C++ 语法:C++变量声明和定义的区别

我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点对你受益)变量的声明有两种情况:1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。2、另一种是不需要建立存储空间的。 例如:extern int a 其中变量a是在别的文件中定义

2016-07-19 15:10:12 654

转载 C++语法 :C++中的头文件和源文件

一、C++编译模式通常,在一个C++程序中,只包含两类文件——.cpp文件和.h文件。其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码;而.h文件则被称作C++头文件,里面放的也是C++的源代码。C+ +语言支持“分别编译”(separate compilation)。也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件里。.cpp文件里的东西

2016-07-19 15:03:06 569

转载 C++ 语法 1. struct 内存的对齐原则

struct/class以及union内存对齐四个原则:1、数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int在32位机为4字节, 则要从4的整数倍地址开始存储),基本类型不包括struct/cl

2016-07-18 19:53:04 463

原创 O(n) 方法求数列极差

int getMax(vector v, int start, int end){ int max = 0; int min = v[start]; for(int i = start; i <= end; i++){ if(v[i] - min > max) max = v[i] - min;

2016-07-18 15:47:52 401

原创 腾讯2017暑期实习生编程题

#include #include #include using namespace std;int dp[1005][1005];int main(){ char s[1005]; char str[1005]; while(scanf("%s", s) != EOF){ int len = strlen(s); int i; f

2016-07-16 23:02:35 705

原创 排序算法之归并排序

归并排序:  排序类别    排序方法  时间复杂度  空间复杂度    稳定性    复杂性    平均情况    最坏情况    最好情况  归并排序归并排序O(nlog2n)O(nlog2n)O(n

2016-07-16 20:10:59 211

原创 LeetCode 9: Palindrome Number

9. Palindrome Number Total Accepted: 134367Total Submissions: 414085Difficulty: EasyDetermine whether an integer is a palindrome. Do this without extra space.求回文数的问题解法1

2016-07-16 14:33:28 222

原创 二进制中1的个数 和 二进制中0的个数

二进制中1的个数时间限制:1秒空间限制:32768K题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。注意:    1.n&(n-1) 是去掉n最右边的1     2.n可能是负数,所以用n!=0class Solution {public: int NumberOf1(int n) {

2016-07-15 21:17:34 1205

原创 二分查找

#include #include using namespace std;int binarySearch(const int *Array, int start, int end, int key){ int left, right, mid; left = start; right = end; while(left <= right){

2016-07-15 20:49:05 183

原创 LeetCode 1.Two Sum ------------LeetCode 第一题

1. Two Sum

2016-07-15 17:06:49 467

原创 博客的开始

经过多次挫折,终于下定决心写博客了

2016-07-15 13:35:33 165

空空如也

空空如也

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

TA关注的人

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