C++
yz930618
Don't live the same day twice
展开
-
基于CentOS 搭建gRPC框架
1. 简介RPC(remote procedure call 远程过程调用)框架实际是提供了一套机制,使得应用程序之间可以进行通信,而且也遵从server/client模型。使用的时候客户端调用server端提供的接口就像是调用本地的函数一样。gRPC(google RPC)是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本...原创 2019-11-27 17:10:03 · 786 阅读 · 2 评论 -
C++设计模式之工厂模式实例
工厂模式工厂模式属于创建型模式,大致可以分为三类,简单工厂模式、工厂方法模式、抽象工厂模式。简单工厂模式简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一类产品类(这些产品类继承自一个父类或接口)的实例。假设有一个工厂,它能生产出A、B两种产品。当客户需要产品的时候一定要告诉工厂是哪种产品,是A还是B。当新增加一种新产品的时候,便需要修改工厂的类。工厂方法模式...原创 2019-11-05 21:14:04 · 715 阅读 · 0 评论 -
快速求解exp方法
开发线上项目时,效率往往是一个十分重要的指标。程序在计算指数exp时,一般是通过泰勒展开近似的,为了保证精度,所展开的泰勒项特别多。因此,exp的求解是十分耗时的。下面,提供一种快速求解exp的方法。double fast_exp(double x){ double d; // 先将尾数的后32位抹零。 *(reinterpret_cast<int*>(&d)...原创 2018-12-13 20:53:54 · 5201 阅读 · 0 评论 -
Linux 编译cpp为动态库so文件
g++ hash.cpp -fPIC -shared -o hash.so原创 2019-01-07 10:54:50 · 3231 阅读 · 0 评论 -
动态规划之深入浅出
1. 简介动态规划(Dynamic Programming,DP)算法目的为解决多阶段决策最优化问题,采取的方法是将待求解的问题分解为多个子问题,按顺序求解每一个子问题,当前子问题的解将由前一个子问题的解推导出,最后一个子问题就是初始问题的解。由于动态规划解决的问题多数有重叠子问题这个特点,为减少重复计算,对每一个子问题只解一次,将其不同阶段的不同状态保存在一个二维数组中,以便下一次求解同...原创 2019-01-31 10:45:41 · 712 阅读 · 0 评论 -
C++多线程管理实操
多线程开发在实际工作中十分重要,在开发C++程序时,一般在吞吐量、并发、实时性上有较高的要求。因此,本文旨在讲解多线程的基本概念,以及利用C++编写一种生产者-消费者模型的多线程实例。基本概念通常,并发编程有两种模式,分别是多进程并发和多线程并发。多进程并发指的是开辟多个独立且只包含一个线程的进程,进程间互相通信,共同完成一个任务。但是,由于操作系统对进程提供了大量的保护机制,不同进程之间...原创 2019-03-24 16:13:56 · 743 阅读 · 0 评论 -
C++ 数据结构实战:快速查找
最近线上开发C++时,遇到一个性能问题,业务场景简单描述为: 给定m个商品ID, 4个特征(特征数量可增可减),已知商品对应的每个特征的值,如何快速获取某个商品的某个特征值?当时我采取的是stl嵌套的数据结构,由于时间复杂度较高,且vector的值是随着map的rehash阶段不断进行内存拷贝的, 在全量计算特征的时候会给性能造成很大的压力,当时与base的性能对比如下:性能不...原创 2019-03-27 17:36:03 · 3507 阅读 · 0 评论 -
剑指Offer题目汇总(C++版)
最近,鉴于目前网上关于《剑指Offer》C++版的汇总资料特别少或者不规范,特整理了一版书中重要的考题,以备学习使用。目录一、位运算1. 二进制中1的个数2. 二进制中0的个数3. 二进制高位连续0的个数二、二叉树1. 二叉搜索树第k个结点2. 从上往下打印二叉树3. 二叉树打印成多行4. 数据流中位数5. 二叉树中和为某一值的路径6. 重建二叉树...原创 2019-04-11 18:17:02 · 2465 阅读 · 0 评论 -
C/C++程序占用内存说明
一、组成部分1. 栈区(stack):由编译器自动分配释放,存放函数参数值,局部变量的值等,操作类似于数据结构中的栈。栈内存分配内置于处理器的指令集,分配效率高但是内存容量有限,不会产生内存碎片,向着内存地址减小的方向生长;2. 堆区(heap):由程序员自动分配释放 ,若程序员不释放,容易导致内存泄漏,程序结束时可能由OS回收。堆内存分配类似于链表,分配效率低但是内存容量大,频繁的分...原创 2019-04-15 21:03:49 · 3927 阅读 · 0 评论 -
STL 源码剖析之Vector
1. Vector 概念作为STL中常用的序列式容器,vector的数据安排与操作方式,与array都十分相似,它们唯一的差别是对于空间运用的灵活性。array称为静态数组,一旦初始化则不能改变大小,而vector称为动态数组,随着元素的不断加入,它的内部机制会自行扩充空间。因此,vector的实现技术,关键在于其对空间大小的控制以及重新配置时的数据移动效率。2. Vector 定义为...原创 2019-05-21 14:37:57 · 297 阅读 · 0 评论 -
g++ 常用链接参数
Linux上开发C++时,常需要添加第三方依赖,有以下几种常用的参数:1. -l(小写L) 当库文件在/lib、/usr/lib、/usr/local/lib三个目录下时,可直接用-l链接。-l参数后紧跟库名,库名和库文件名的关系如下:以数学库为例,它的库名为m,库文件名为libm.so,把库文件名的头lib和尾.so去掉即为库名。2. -L 当库文件在自定义目录下...原创 2019-07-07 15:08:41 · 2212 阅读 · 0 评论 -
Visual Studio Code快捷键
通用 Ctrl+Shift+P, F1 打开命令面板 Ctrl+P 快速打开文件 Ctrl+Shift+N 打开新窗口/实例 Ctrl+Shift+W 关闭窗口/实例 基础编辑 Ctrl+X 剪切当前行 Ctrl+C 复制当前行 Alt+ ↑ / ↓ 向上/向下移动当前行 Shift+Alt + ↓ / ↑ 向上/...原创 2019-07-25 18:58:29 · 178 阅读 · 0 评论 -
C++中数组和指针之间的关系梳理
C++中数组和指针是两个十分常用且关系密切的数据结构,“数组即指针,指针即数组”的言论一直层出不穷。从本质上讲,数组和指针是不同的,数组是具有确定数量的元素,而指针只是一个标量值。但是,在某些情况下数组和指针又能相互转换。下面,将从多个角度分析数组和指针。1. 数组和指针互相转换数组能在指定情况下转换为指针,当数组在表达式中使用时,编译器将数组名转换为一个指针常量,指向数组第一个元素的地址...原创 2018-12-02 15:29:04 · 2041 阅读 · 0 评论 -
C++ memset初始化对象注意点
C语言,在利用struct进行数据封装时,经常会使用memset(this,0,sizeof(*this))来初始化。而C++中,有时候也会用到struct,在利用memset进行初始化时,非常容易踩坑,有些地方需要注意。C++利用memset初始化struct注意点1. memset 是按字节对内存块进行初始化的函数,用来给某一块内存空间进行赋值的;2. memset 作用是在一段内...原创 2018-11-30 17:23:25 · 3885 阅读 · 1 评论 -
C++中关键字typedef的作用
定义一种类型的别名。typedef int INT; INT a = 5; //相当于INT a = 5 定义一种结构体的别名typedef struct my_tmp_struct{ int a; int b;}MTS;MTS p1; // 结构体my_tmp_struct简写为MTS定义一种数组的别名typedef int INT_ARRAY_10[10];typede...原创 2018-06-14 14:19:46 · 1308 阅读 · 1 评论 -
C++学习资源
C++常用语法总结(推荐) https://github.com/huihut/interviewC++框架和库https://blog.csdn.net/weixin_41413441/article/details/80873871原创 2018-10-18 17:58:04 · 157 阅读 · 0 评论 -
C++中const关键字详解
const关键字作用 1. 修饰变量 用法:const 类型说明符 变量名。 含义:说明该变量不可以被改变。 用途:常量命名等 2. 修饰引用 用法: const 类型说明符 &引用名。 含义:引用对象不可修改。 用途:用作函数形参,接受各类数据且函数不能对其修改,常引用能接受普...原创 2018-10-19 18:24:50 · 534 阅读 · 0 评论 -
Linux 运行带参数的cpp程序
g++ -std=gnu++0x main.cpp SpookyV2.cpp -o main./main 123 4344原创 2018-10-26 18:59:46 · 3252 阅读 · 0 评论 -
JetBrains系列集成软件多行代码缩进
在使用JetBrains旗下的集成软件,如IDEA, Pycharm, PhpStorm,Clion等时,通常需要整体向前或者向后缩进代码,以更加美观地编写代码。此时,可通过以下两个快捷键实现该功能:1.代码整体向后缩进: 选中多行代码 - 按下tab键2.代码整体向前缩进: 选中多行代码 - 按下shift + tab键...原创 2018-11-02 14:17:06 · 3874 阅读 · 0 评论 -
GDB 调试工具入门
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,通常在服务器上开发C/C++时,该工具是必不可少的。下面,将通过例子详细介绍GDB的使用。1. 源程序 #include<iostream>using namespace std;int c=0;int& findMax(int &a,int &b){ c= a>=b...原创 2018-11-23 15:08:15 · 403 阅读 · 0 评论 -
C++ STL系列之boost:unordered_map和std::map区别详解
开发C++时,选择合适的数据结构是一个十分重要的步骤。因此,必须对每一个数据结构的原理及应用场景都有所了解。boost::unordered_map和std::map都是一种关联式容器,且原理类似,通过存储key-value键值对,可通过key快速检索到value,并且key是不重复的。但是,它们之间有一些区别,下面将逐一介绍。排序区别:map是有序的:按照operator<比较...原创 2018-12-04 11:00:15 · 4095 阅读 · 1 评论 -
C中int8_t、int16_t、int32_t、int64_t、uint8_t、size_t、ssize_t区别
工作中经常碰到int8_t、int16_t、int32_t、int64_t、uint8_t、size_t、ssize_t等数据类型,所以有必要对此进行梳理。int_t同类int_t 为一个结构的标注,可以理解为type/typedef的缩写,表示它是通过typedef定义的,而不是一种新的数据类型。因为跨平台,不同的平台会有不同的字长,所以利用预编译和typedef可以最有效的维护代码。...原创 2018-12-04 12:05:06 · 158865 阅读 · 4 评论 -
C语言中strtod与strtol的区别
strtod与strtol都是C/C++中常用的将字符数组转换成数组型常用的函数,但是它们也有一定的区别(C++真是让人又爱又恨)。strtod用法定义:double strtod (const char* nptr, char** endptr);参数:nptr为待转换的字符数组,endptr为不符合条件而终止nptr中的字符指针;strtol用法定义:long strtol...原创 2018-11-30 15:25:30 · 2520 阅读 · 0 评论 -
GDB调试进阶 - 动态调度pid进程
开发机中编译带debug信息的动态库 cd jd_search_rank mkdir debug cd debug cmake -DCMAKE_BUILD_TYPE=Debug .. make 2. 将so文件以及debug版本的源代码上传到预发机中 ...原创 2018-11-27 17:53:19 · 3081 阅读 · 0 评论 -
C++中双冒号::的作用
C++中经常使用的作用符::,作用如下:作用域限定符。在类体内申明函数,并在类体外定义函数时,必须在定义函数时加上类名和作用域限定符。 class MyClass{ public: int num; int fun();//类体内申明函数 }; //类体外定义函数 int MyClass::fun(){ return 1; ...原创 2018-06-14 11:55:40 · 382 阅读 · 0 评论