c++
文章平均质量分 76
struggle6688
这个作者很懒,什么都没留下…
展开
-
thrift 大list序列化过慢引发的客户端耗时记录和服务端不一致问题
一、问题背景最近在工作上遇到了一个问题,服务端说我们服务的返回长尾太长了,经常40+ms。找了一个trace发现,我们服务端记录这个trace从开始到返回,总共才花了6ms。多试了几个trace发现有同样的现象,这就很奇怪了。二、问题分析1. 请求链路首先思考一下一个请求的整个链路都包含哪些阶段如图所示,对于客户端来说,他们的耗时记录是在最上面两个过程中,但是服务端是最下面函数处理前后,两者差着序列化和tcp传输,所以猜测是不是这两个地方导致的问题。2. tcp传输我们的rpc框架用的是th原创 2021-04-21 18:55:16 · 942 阅读 · 2 评论 -
c++智能指针学习和遇到的问题
零、总览|类型|策略|能否用于数组|备注||auto_ptr| 所有权模型| 否| -unique_ptr 所有权模型 能 策略比auto_ptr更严格shared_ptr 引用计数模型 否 -一、auto_ptr的使用以及问题auto_ptr是一个控制权转换的指针,两个auto_ptr赋值赋值的话,会释放赋值运算符右侧变量的所有权。c++11 之后不推荐使用,问题较多。比如下面的代...原创 2020-06-18 11:29:50 · 298 阅读 · 0 评论 -
c++ 虚析构的作用以及成员变量为指针和普通数据成员在析构时的不同
一、派生类指针指向父类时父类的虚构函数必须设置为虚函数看下面的代码:class Data{public: Data(int data) { a = data; cout << "Data构造" << endl; } ~Data() { cout << "~Data析构" << endl; }private: in...原创 2020-04-19 17:46:54 · 764 阅读 · 0 评论 -
c++ 赋值运算符重载和拷贝构造函数区别以及不写时可能引发的问题
一、赋值运算符重载和拷贝构造函数区别#include <iostream>using namespace std;class Element{private: int *m_pdata;public: Element(int data) { cout << "构造函数" << endl; m_pdata = new int(data...原创 2020-04-18 23:07:33 · 592 阅读 · 0 评论 -
vector.size()-1引发的错误
在使用vector的时候,只要是输入的vector是空的,程序就会崩溃。调试了一下,发现此时 0 < vector.size()-1 这个值为true。然后单拿出来打印了一下发现:这个时候才反应过来,stl中的.size()函数返回的是unsigned int,这个类型下进行0-1会发生越界,所以变成了一个极大值。所以以后一定要***注意不要使用stl中的.size()做减法***这样...原创 2020-01-21 16:54:34 · 1569 阅读 · 3 评论 -
Linker fatal error: LNK1102: out of memory
现象在持续集成流水线中用msbuild编译32位的程序偶先报错:Linker fatal error: LNK1102: out of memory。一般解决方法谷歌之后找到了微软的官方文章,里面写了产生这个问题的原因和解决方法:https://support.microsoft.com/en-us/help/2891057/linker-fatal-error-lnk1102-out-of...原创 2020-01-14 18:59:19 · 2062 阅读 · 0 评论 -
vector中使用拷贝构造函数和解除const的关键字const_cast介绍
一、深拷贝和浅拷贝浅拷贝,假如在定义一个类A,然后使用类似A obj; A obj1(obj);或者A obj1 = obj; 时候,由于没有自定义拷贝构造函数,C++编译器自动会产生一个默认的拷贝构造函数。这个默认的拷贝构造函数采用的是“位拷贝”(浅拷贝),而非“值拷贝”(深拷贝)的方式,如果类中含有指针变量,默认的拷贝构造函数必定出错。浅拷贝:只是对指针的拷贝,拷贝后两个原创 2017-05-12 14:14:15 · 1959 阅读 · 0 评论 -
理解c和c++的复杂类型声明(int *(*a[5])(int, char*);)
曾经碰到过让你迷惑不解、类似于int * (* (*fp1) (int) ) [10];这样的变量声明吗?本文将由易到难,一步一步教会你如何理解这种复杂的C/C++声明。 我们将从每天都能碰到的较简单的声明入手,然后逐步加入const修饰符和typedef,还有函数指针,最后介绍一个能够让你准确地理解任何C/C++声明的“右左法则”。 需要强调一下的是,复杂的C/C++声明并不是好的编转载 2017-05-12 14:19:21 · 2990 阅读 · 7 评论 -
c++中的函数指针和回调函数
在理解“回调函数”之前,首先讨论下函数指针的概念。函数指针(1)概念:指针是一个变量,是用来指向内存地址的。一个程序运行时,所有和运行相关的物件都是需要加载到内存中,这就决定了程序运行时的任何物件都可以用指针来指向它。函数是存放在内存代码区域内的,它们同样有地址,因此同样可以用指针来存取函数,把这种指向函数入口地址的指针称为函数指针。(2)先来看一个Hello World程转载 2017-05-04 17:07:12 · 296 阅读 · 0 评论 -
c/c++ typedef用法功能详解
第一、四个用途用途一:定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量;以下则可行:typedef char* PCHAR; // 一般用大写PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针转载 2017-05-10 14:17:43 · 251 阅读 · 0 评论 -
使用windows静态库
错误:error LNK2001: 无法解析的外部符号 __imp__MessageBoxA@16error LNK2001: 无法解析的外部符号 __imp__SendMessageA@16error LNK2001: 无法解析的外部符号 __imp__SendMessageW@16error LNK2001: 无法解析的外部符号 __imp__FindWindowA@8转载 2017-09-11 09:40:59 · 301 阅读 · 0 评论 -
pragma comment作用
该宏放置一个注释到对象文件或者可执行文件。#pragma comment( comment-type [,"commentstring"] )comment-type是一个预定义的标识符,指定注释的类型,应该是compiler,exestr,lib,linker之一。commentstring是一个提供为comment-type提供附加信息的字符串,Remarks:1、compile转载 2018-01-29 12:14:09 · 593 阅读 · 0 评论 -
ASCII码不可见字符过滤处理
Function/Control Code/Character in ASCIIVersion: 2011-02-15Author: green-waste (at) 163.com【什么是 Function Code 功能码或 Function Character 功能字符】ASCII 字符集,大家都知道吧,最基本的包含了 128 个字符。其中前 32 个, 0-31 ,即 0x00-0x1F...转载 2018-04-19 10:46:27 · 11107 阅读 · 0 评论 -
reinterpret_cast和其他转换符的不同
reinterpret_cast <new_type> (expression)reinterpret_cast运算符是用来处理无关类型之间的转换;它会产生一个新的值,这个值会有与原始参数(expressoin)有完全相同的比特位,也就是相同的二进制流。也就是说,它不会判断转换的合法性,是任意转换的,哪怕是两个完全不同的类!IBM的C++指南推荐的使用场景:从指针类型到一个足够大的整数...原创 2018-05-03 23:20:30 · 1564 阅读 · 0 评论 -
c++类的初始化原理
一、初始化时带括号和不带括号的区别class Test4 {public: Test3 t3; Test4(){ t3 = Test3(); cout << "Test4" << endl; }};int main(){ Test3 t3; cout << "忽略上面" << endl; Test4 ...原创 2018-08-17 23:11:54 · 3789 阅读 · 0 评论 -
C语言指针详解
前言:复杂类型说明 要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:从变量名处起,根据运算符优先级结合,一步一步分析.下面让我们先从简单的类型开始慢慢分析吧: int p; //这是一个普通的整...转载 2018-09-11 17:25:13 · 274 阅读 · 1 评论 -
提高程序运行效率的方法
对于每一个程序员来说,程序的运行效率都是一个值得重视,并为之付出努力的问题。但是程序性能的优化也是一门复杂的学问,需要很多的知识,然而并不是每个程序员都具备这样的知识,而且论述如何优化程序提高程序运行效率的书籍也很少。但是这并不等于我们可以忽略程序的运行效率,下面就介绍一下本人积累的一些简单实用的提高程序运行效率的方法,希望对大家有所帮助。注:以C/C++程序为例一、尽量减转载 2017-05-12 13:39:01 · 675 阅读 · 0 评论 -
c++ 虚函数表实现多态
前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使转载 2017-04-01 09:59:46 · 516 阅读 · 0 评论 -
c++静态修饰符static使用
static对象如果出现在类中,那么该对象即使从未被使用到,它也会被构造以及析构。而函数中的static对象,如果该函数从未被调用,这个对象也就绝不会诞生,但是在函数每次被调用时检查对象是否需要诞生。下面详细说说static的功能以及它的来龙去脉:static作为编程语言里面一种重要的数据类型,它的地位在面试的过程里也是相当的高。为什么要引入static 函数内部转载 2017-03-27 17:19:22 · 494 阅读 · 0 评论 -
c++ 内存池
认识一下new和delete的开销:new和delete首先会转调用到malloc和free,这个大家应该很熟识了。很多人认为malloc是一个很简单的操作,其实巨复杂,它会执行一个系统调用(当然不是每一次,windows上是按页算),该系统调用会锁住内存硬件,然后通过链表的方式查找空闲内存,如果找到大小合适的,就把用户的进程地址映射到内存硬件地址中,然后释放锁,返回给进程。如果在转载 2015-08-07 16:07:19 · 429 阅读 · 0 评论 -
poj 1363 Rails 数组模拟栈操作
不想用栈,用数组写的,感觉好抽象要是过了这组数据应该差不多了51 2 3 4 53 2 1 5 43 5 4 2 1答案都是Yes,注意是Yes,不是YES。。。#include #include #include using namespace std;#define M 1005int out[M],q[M]; /原创 2015-12-27 23:50:10 · 340 阅读 · 0 评论 -
最短的旅程
在Byteland有n个城市(编号从1到n),它们之间通过双向的道路相连。Byteland的国王并不大方,所以,那里只有n -1条道路,但是,它们的连接方式使得从任意城市都可以走到其他的任何城市。一天,starhder到了编号为k的城市。他计划从城市k开始,游遍城市m1,m2,m3,……,mj(不一定要按这个顺序旅游),其中j个城市都是不同的,并且也与k不同。Starhder—— 就像每一个旅原创 2016-01-01 18:11:15 · 3457 阅读 · 2 评论 -
白话快速排序
快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解有帮助,达到快速转载 2016-02-10 18:10:01 · 250 阅读 · 0 评论 -
GCC 编译过程
GNU CC(简称为Gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。Gcc不仅功能强大,而且可以编译如C、C++、Object C、Java、Fortran、Pascal、Modula-3和Ada等多种语言,而且Gcc又是一个交叉平台编译器,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译转载 2016-04-01 21:08:58 · 447 阅读 · 0 评论 -
c/c++ 内存分配
一、预备知识—程序的内存分配一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(sta转载 2016-04-15 12:08:09 · 221 阅读 · 0 评论 -
linux下GDB单步调试
一、GDB 概述GDB 是 GNU 开源组织发布的一个强大的 UNIX 下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像 VC 、 BCB 等 IDE 的调试,但如果你是在 UNIX 平台下做软件,你会发现 GDB 这个调试工具有比 VC 、 BCB 的图形化调试器更强大的功能。所谓 “ 寸有所长,尺有所短 ” 就是这个道理。一般来说, GDB 主要帮忙你完成下面四个方面的功转载 2016-06-01 23:54:12 · 10241 阅读 · 0 评论 -
网易 今日头条笔试题 求CD数目
题目:你作为一名出道的歌手终于要出自己的第一份专辑了,你计划收录 n 首歌而且每首歌的长度都是 s 秒,每首歌必须完整地收录于一张 CD 当中。每张 CD 的容量长度都是 L 秒,而且你至少得保证同一张 CD 内相邻两首歌中间至少要隔 1 秒。为了辟邪,你决定任意一张 CD 内的歌数不能被 13 这个数字整除,那么请问你出这张专辑至少需要多少张 CD ?输入描述: 每组测试原创 2016-08-01 23:12:04 · 1467 阅读 · 2 评论 -
深刻理解C语言中的*和&、类型转换
前两天同学问我一道面试题,如下:int a=1;printf("%f",a);结果输出是0.00000,好像这是和编译器有关系的,我试验在codeblock上,亲测printf("%f",int)都会是0。后来又试了试别的代码:#include #include using namespace std;int main(){ int a=0x433000原创 2016-09-21 17:11:19 · 895 阅读 · 0 评论 -
程序员技术面常用知识点
转自:http://blog.csdn.net/qq_15437629/article/details/52388685在这里只做备份计算机网络 TCP/IP模型TCP、UDP比较TCP可靠性实现、重传机制、滑动窗口机制、拥塞控制三次握手、四次挥手、TIME_WAIT状态TCP/IP、Http、Socket的区别ARP协议icmp协议、ping的原理Post和Get转载 2016-09-25 13:50:00 · 4575 阅读 · 0 评论 -
笔试面试之单链表总结
感觉笔试的时候考单链表也挺多的,写一些基础的练练手,没有经过大量的测试,如果发现边界错误请评论给我,谢谢啦#include #include #include #include using namespace std;typedef int type;typedef struct Node{ type data; struct Node *next;}N原创 2016-09-26 20:06:47 · 422 阅读 · 0 评论 -
数组指针和指针数组详解
数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a;转载 2016-12-26 15:12:22 · 449 阅读 · 0 评论 -
虚函数详解
虚函数联系到多态,多态联系到继承。所以本文中都是在继承层次上做文章。没了继承,什么都没得谈。下面是对C++的虚函数这玩意儿的理解。一, 什么是虚函数(如果不知道虚函数为何物,但有急切的想知道,那你就应该从这里开始)简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解转载 2017-03-08 10:54:30 · 293 阅读 · 0 评论 -
winuser.h中的sendMessage函数
1.新建一个Dialog based的MFC工程MSG2.在资源管理器中打开对话框IDD_MSG_DIALOG,在其中放置一下控件: (1)ID号为ID_SENDMSG的发送消息按钮(原IDOK按钮)(2)ID号为IDCANCEL的取消按钮(3)ID号为IDC_STATIC的静态控件,CAPTION为“您发送消息的次数统计:”(4)ID号为IDC_EDIT的编辑控件。3转载 2017-03-09 12:05:27 · 1262 阅读 · 0 评论 -
QT中利用QAction增加菜单项
QAction类提供了一个可以同时出现在菜单和工具条上的抽象用户界面操作。在图形用户界面应用程序中很多命令可以通过菜单选项、工具条按钮和键盘快捷键调用。因为同一个操作将会被执行,而与它的调用方法无关,并且因为菜单和工具条必须保持同步,所以提供一个操作这样的命令很有用。一个操作可以被添加到菜单和工具条中并且将会自动使它们同步。例如,如果用户按下“加粗”工具条按钮,“加粗”菜单项将会自动被选中转载 2017-03-09 12:07:48 · 3057 阅读 · 1 评论 -
hihocoder1032 最长回文子串
传说中的Manacher算法,算法的核心就在这一句上了:p[i] = min(p[2*id-i], p[id] + id - i); 这个算法要解决的就是一个字符串中最长的回文子串有多长。这个算法可以在O(n)的时间复杂度内既线性时间复杂度的情况下,求出以每个字符为中心的最长回文有多长,这个算法有一个很巧妙的地方,它把奇数的回文串和偶数的回文串统一起来考虑了。这一点一直是在做回文串问原创 2015-08-10 10:03:21 · 454 阅读 · 0 评论