- 博客(62)
- 资源 (1)
- 收藏
- 关注
原创 thrift 大list序列化过慢引发的客户端耗时记录和服务端不一致问题
一、问题背景最近在工作上遇到了一个问题,服务端说我们服务的返回长尾太长了,经常40+ms。找了一个trace发现,我们服务端记录这个trace从开始到返回,总共才花了6ms。多试了几个trace发现有同样的现象,这就很奇怪了。二、问题分析1. 请求链路首先思考一下一个请求的整个链路都包含哪些阶段如图所示,对于客户端来说,他们的耗时记录是在最上面两个过程中,但是服务端是最下面函数处理前后,两者差着序列化和tcp传输,所以猜测是不是这两个地方导致的问题。2. tcp传输我们的rpc框架用的是th
2021-04-21 18:55:16
1031
2
原创 thrift协议抓包解析(tcpdump+wireshark or thrift-tool)
目前thrift使用较多,所以我们可能会遇到线上查case或者想拉取一些具体请求的场景,这种需求下如果没有提前打日志就只能通过抓包来分析了。一、tcpdump+wireshark抓包第一反应就是通过tcpdump命令来抓取,其中比较常用的命令就是sudo tcpdump -i any -Xvv dst port 11311 and tcp这种情况下的包通常都是二进制的格式,通过-Xvv也就能展现成这个样子:当然我们还可以通过-w 命令变成一个dump包,这时候可以下载下来用wireshark打
2020-10-26 21:54:54
2344
原创 c++智能指针学习和遇到的问题
零、总览|类型|策略|能否用于数组|备注||auto_ptr| 所有权模型| 否| -unique_ptr 所有权模型 能 策略比auto_ptr更严格shared_ptr 引用计数模型 否 -一、auto_ptr的使用以及问题auto_ptr是一个控制权转换的指针,两个auto_ptr赋值赋值的话,会释放赋值运算符右侧变量的所有权。c++11 之后不推荐使用,问题较多。比如下面的代...
2020-06-18 11:29:50
314
原创 c++ 虚析构的作用以及成员变量为指针和普通数据成员在析构时的不同
一、派生类指针指向父类时父类的虚构函数必须设置为虚函数看下面的代码:class Data{public: Data(int data) { a = data; cout << "Data构造" << endl; } ~Data() { cout << "~Data析构" << endl; }private: in...
2020-04-19 17:46:54
794
原创 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
615
原创 windows下从c#+influxdb+grafana搭建学习
一、influxdb安装教程下载地址:https://portal.influxdata.com/downloads/我是在window环境下安装的,所以下载的是window客户端,下载解压后的内容如下:修改配置文件的内容配置文件修改好了,双击运行influxd.exe然后双击influx.exe程序启动CLI控制台:之后就可以对influxdb操作了。二、influxdb增...
2020-04-16 21:45:47
2884
1
原创 vector.size()-1引发的错误
在使用vector的时候,只要是输入的vector是空的,程序就会崩溃。调试了一下,发现此时 0 < vector.size()-1 这个值为true。然后单拿出来打印了一下发现:这个时候才反应过来,stl中的.size()函数返回的是unsigned int,这个类型下进行0-1会发生越界,所以变成了一个极大值。所以以后一定要***注意不要使用stl中的.size()做减法***这样...
2020-01-21 16:54:34
1671
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
2131
原创 python 的闭包到各种装饰器
一、闭包闭包概念:在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures),是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。上面是wiki上的定义,解释出来就是:函数中可以嵌套函数,内部的...
2019-10-17 20:43:52
262
1
原创 文本覆盖写'r+’需要注意的问题,用好seek
遇到一个需求是要把文档中的三层文件夹结构变成两层,想着之间replace('..\\..\\..\\', '..\\..\\')就行了,然后读取文件的时候用'r+'模式,这样就可以覆盖读,还不用多弄出一个文件来,美滋滋。可是还是遇到了问题。简化的代码如下with open('D:\\demo.txt','r+', 777, 'utf-8') as f1: infos = f1.r...
2019-01-11 19:19:20
480
转载 C语言指针详解
前言:复杂类型说明 要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:从变量名处起,根据运算符优先级结合,一步一步分析.下面让我们先从简单的类型开始慢慢分析吧: int p; //这是一个普通的整...
2018-09-11 17:25:13
283
1
原创 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
3845
转载 mysql函数大全
MySQL数据库中提供了很丰富的函数。MySQL函数包括数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数、加密函数、格式化函数等。通过这些函数,可以简化用户的操作。例如,字符串连接函数可以很方便的将多个字符串连接在一起。在这一讲中将讲解的内容包括:数学函数字符串函数日期和时间函数条件判断函数系统信息函数加密函数格式化函数 MySQL函数是MySQL数据库提供的内部函数。...
2018-06-04 22:46:12
210
原创 reinterpret_cast和其他转换符的不同
reinterpret_cast <new_type> (expression)reinterpret_cast运算符是用来处理无关类型之间的转换;它会产生一个新的值,这个值会有与原始参数(expressoin)有完全相同的比特位,也就是相同的二进制流。也就是说,它不会判断转换的合法性,是任意转换的,哪怕是两个完全不同的类!IBM的C++指南推荐的使用场景:从指针类型到一个足够大的整数...
2018-05-03 23:20:30
1576
转载 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
11301
转载 线程管理QThread和信号槽在线程间的使用
一、线程管理1、线程启动void start(Priority priority = InheritPriority)调用后会执行run()函数,但在run()函数执行前会发射信号started(),操作系统将根据优先级参数调度线程。如果线程已经在运行,那么这个函数什么也不做。优先级参数的效果取决于操作系统的调度策略。特别是那些不支持线程优先级的系统优先级将会被忽略(例如在Linux中,更多细节请...
2018-03-27 10:48:55
1743
转载 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
612
原创 QWidget和layout
给QWidget或者QDialog设置布局的时候方式很简单。创建好一个布局:mainLayout,然后不停地把各个控件往mainLayout里面放,最后调用setLayout(mainLayout)就行了。对QWidget上进行布局一般都会用到布局管理器,不管是垂直布局管理器QVBoxLayout还是水平或者网格等,但要注意的是一个QWidget上只能有一个布局管理器来管理布局。有的时
2018-01-06 15:10:41
8712
转载 qt模态对话框 以及exec()事件循环简单实现
一、简述先简单介绍一下模态与非模态对话框。模态对话框简单一点讲就是在弹出模态对话框时,除了该对话框整个应用程序窗口都无法接受用户响应,处于等待状态,直到模态对话框被关闭。这时一般需要点击对话框中的确定或者取消等按钮关闭该对话框,程序得到对话框的返回值(即点击了确定还是取消),并根据返回值进行相应的操作,之后将操作权返回给用户。这个时候用户可以点击或者拖动程序其他窗口。
2017-12-15 12:46:08
7786
2
转载 过程模型介绍和对比(敏捷开发、瀑布式模型等)
1.瀑布模型 1.1 瀑布模型介绍 1970年温斯顿·罗伊斯(Winston Royce)提出了著名的“瀑布模型”,直到80年代早期,它一直是唯一被广泛采用的软件开发模型。 1.2 瀑布模型核心思想 瀑布模型核心思想是按工序将问题化简,将功能的实现与设计分开,便于分工协作,即采用结构化的分析与设计方法将逻辑实现与物理实现分开。将软件生命周期划分为制定计划、...
2017-09-25 11:21:16
6285
转载 使用windows静态库
错误:error LNK2001: 无法解析的外部符号 __imp__MessageBoxA@16error LNK2001: 无法解析的外部符号 __imp__SendMessageA@16error LNK2001: 无法解析的外部符号 __imp__SendMessageW@16error LNK2001: 无法解析的外部符号 __imp__FindWindowA@8
2017-09-11 09:40:59
325
转载 Qt包含工程集subdirs的使用
相信大家很多和我一样,用多了微软给的便利,用人家的就十分不习惯.于是就琢磨原来用到的功能现在要整顺手来,不然可让人怎么活啊! 本篇主要介绍实践使用,并非一篇完整教程,有待读者补充.^_^ 我们原本在VS上有一个大工程sln,里面有lib,有dll有exe,甚至还混搭了C#.用起来一点不觉得水土不服.现在要用QT重整,并且需要处处考虑换个平台不要让我改东西.作为探路先锋,先挑了几个基础工程
2017-09-07 10:14:00
12179
1
转载 理解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
3228
7
原创 vector中使用拷贝构造函数和解除const的关键字const_cast介绍
一、深拷贝和浅拷贝浅拷贝,假如在定义一个类A,然后使用类似A obj; A obj1(obj);或者A obj1 = obj; 时候,由于没有自定义拷贝构造函数,C++编译器自动会产生一个默认的拷贝构造函数。这个默认的拷贝构造函数采用的是“位拷贝”(浅拷贝),而非“值拷贝”(深拷贝)的方式,如果类中含有指针变量,默认的拷贝构造函数必定出错。浅拷贝:只是对指针的拷贝,拷贝后两个
2017-05-12 14:14:15
2023
转载 提高程序运行效率的方法
对于每一个程序员来说,程序的运行效率都是一个值得重视,并为之付出努力的问题。但是程序性能的优化也是一门复杂的学问,需要很多的知识,然而并不是每个程序员都具备这样的知识,而且论述如何优化程序提高程序运行效率的书籍也很少。但是这并不等于我们可以忽略程序的运行效率,下面就介绍一下本人积累的一些简单实用的提高程序运行效率的方法,希望对大家有所帮助。注:以C/C++程序为例一、尽量减
2017-05-12 13:39:01
690
转载 c/c++ typedef用法功能详解
第一、四个用途用途一:定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量;以下则可行:typedef char* PCHAR; // 一般用大写PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针
2017-05-10 14:17:43
261
转载 c++中的函数指针和回调函数
在理解“回调函数”之前,首先讨论下函数指针的概念。函数指针(1)概念:指针是一个变量,是用来指向内存地址的。一个程序运行时,所有和运行相关的物件都是需要加载到内存中,这就决定了程序运行时的任何物件都可以用指针来指向它。函数是存放在内存代码区域内的,它们同样有地址,因此同样可以用指针来存取函数,把这种指向函数入口地址的指针称为函数指针。(2)先来看一个Hello World程
2017-05-04 17:07:12
307
转载 c++ 虚函数表实现多态
前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使
2017-04-01 09:59:46
538
转载 c++静态修饰符static使用
static对象如果出现在类中,那么该对象即使从未被使用到,它也会被构造以及析构。而函数中的static对象,如果该函数从未被调用,这个对象也就绝不会诞生,但是在函数每次被调用时检查对象是否需要诞生。下面详细说说static的功能以及它的来龙去脉:static作为编程语言里面一种重要的数据类型,它的地位在面试的过程里也是相当的高。为什么要引入static 函数内部
2017-03-27 17:19:22
508
转载 qt中的正则表达式QRegExp使用大全以及匹配中括号[]方法大全
Qt的SDK里包含一个很帮的GUI工具,可以方便我们进行这类转换并测试你的表达式。可以按照如下的方式打开:“开始”->“程序”->“Qt SDK by Nokia v2010.02.1 (open source)”->“QtDemo”->“Tools”->“RegularExpression”可以选择“launch”启动程序,亦可以“Documentation...
2017-03-23 15:20:55
23686
5
转载 QT中利用QAction增加菜单项
QAction类提供了一个可以同时出现在菜单和工具条上的抽象用户界面操作。在图形用户界面应用程序中很多命令可以通过菜单选项、工具条按钮和键盘快捷键调用。因为同一个操作将会被执行,而与它的调用方法无关,并且因为菜单和工具条必须保持同步,所以提供一个操作这样的命令很有用。一个操作可以被添加到菜单和工具条中并且将会自动使它们同步。例如,如果用户按下“加粗”工具条按钮,“加粗”菜单项将会自动被选中
2017-03-09 12:07:48
3131
1
转载 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
1286
转载 虚函数详解
虚函数联系到多态,多态联系到继承。所以本文中都是在继承层次上做文章。没了继承,什么都没得谈。下面是对C++的虚函数这玩意儿的理解。一, 什么是虚函数(如果不知道虚函数为何物,但有急切的想知道,那你就应该从这里开始)简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解
2017-03-08 10:54:30
314
转载 数组指针和指针数组详解
数组指针(也称行指针)定义 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
463
原创 笔试面试之单链表总结
感觉笔试的时候考单链表也挺多的,写一些基础的练练手,没有经过大量的测试,如果发现边界错误请评论给我,谢谢啦#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
436
转载 Linux常考命令
显示目录和文件的命令 Ls:用于查看所有文件夹的命令。 Dir:用于显示指定文件夹和目录的命令 Tree: 以树状图列出目录内容 Du:显示目录或文件大小 修改目录,文件权限和属主及数组命令 Chmod:用于改变指定文件的权限命令。 Chown:用于改变文件拥有属性的命令。 Chgrp:用于改变文件群
2016-09-26 14:59:58
706
转载 程序员技术面常用知识点
转自: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
4600
原创 深刻理解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
936
转载 PHP 对象中static内存分配
本文实例分析了php面向对象中static静态属性与方法的内存位置。分享给大家供大家参考。具体如下:static静态属性的内存位置——>类,而不是对象。下面做测试来证明一下?<?phpheader("content-type:text/html;charset=utf-8");class Human{ static public $name = "小妹";
2016-08-03 13:11:52
828
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人