c++
序冢--磊
这个作者很懒,什么都没留下…
展开
-
c++ 巧妙的字节编码转换设计
业余时间写一些程序,想用c++ 设计一些字节转换功能函数,参考了envoy 中的设计。设计的非常巧妙,这样就可以很潇洒的做到大小端转化了,比自己用c去写宏定义简洁了很多。::from ::to会传入不同类型的变量,从而触发下面的模板。fromEndianness 是把不同的编码转换为主机字节序。toEndianness 是把主机字节序转换为对应的编码。envoy中的字节转换主要是依赖linux 的头文件。这个头文件在mac上不存在,envoy巧妙的做了兼容。发现envoy的设计真的很巧妙,在这里记录一下。原创 2022-10-25 00:25:35 · 1032 阅读 · 0 评论 -
关于cgroup 学习
cgroup,cgroupv2,如何使用cgroupv2,c++使用cgroup原创 2022-08-14 19:08:02 · 1398 阅读 · 0 评论 -
linux 性能分析的方法
linux 性能分析原创 2022-03-19 20:39:19 · 3102 阅读 · 0 评论 -
K8s中Pod生命周期和重启策略
这周项目组提到了POD 的健康检查复习以下K8s权威指南中第三章节中的关于POD 声明周期和重启策略的内容POD状态:1)PendingApi Server 已经创建这个POD,但在POD 内还有一个或者多个容器镜像没有创建2)RuningPOD内所有容器已经创建,但是至少有一个容器处于运行状态、正在启动状态或者重启状态3)SuccessedPod 内所有容器均成功执行后退出,且不会再重启4)FailedPod 内所有容器都退出,但是至少有一个容器为退出状原创 2022-02-13 19:57:42 · 3519 阅读 · 0 评论 -
c++完成mysql 异步客户端
如何用c++完成一个mysql 的客户端?代码还需完善,但是核心代码在这里了注意几个点:异步接口:mysql_real_connect_nonblockingmysql_real_query_nonblockingmysql_store_result_nonblockingmysql_fetch_row_nonblocking配合异步io,epoll 可以很轻松完成,异步返回结果/* state of an asynchronous operation */enum原创 2022-02-12 22:11:45 · 2212 阅读 · 1 评论 -
istio-proxy性能洞察之路---性能调研的终点、调优之路的出发点
最近配合公司落地 service mesh,整体架构采用了istio 的部署架构,但是最近对envoy的sidecar做了压力测试,sidecar的性能是十分的差说下istio-proxy是istio社区对envoy做了插件,包装成了istio-proxy,git目录是https://github.com/istio/proxy落地istio之后我们对istio-proxy性能进行了压测,每年技术大会演讲的envoy做sidecar在我们压测下,是那么单薄,显得差强人意,下面公布我们架构组原创 2021-11-18 21:07:25 · 3042 阅读 · 1 评论 -
envoy tracer 模块分析
同事给我的关于tracer 的分享:envoy code tracesource/common/http/conn_manager_impl.cc: : 828void ConnectionManagerImpl::ActiveStream::decodeHeaders(RequestHeaderMapPtr&& headers, bool end_stream) {...原创 2021-10-26 11:46:20 · 454 阅读 · 8 评论 -
envoy 源码编译 以及修改istio默认配置
一、源码编译同事交了我编译envoy的编译顺序,在这里编译整理下,毕竟envoy是istio中重要的代理下面的环境是ubuntu20.04下的安装步骤,同事告诉我说编译envoy的话尽量使用gcc 9,否则编译可能会出现一些小问题sudo apt install curl gnupgcurl -fsSL https://bazel.build/bazel-release.pub.gpg | gpg --dearmor > bazel.gpgsudo mv bazel.原创 2021-09-13 09:30:40 · 1168 阅读 · 0 评论 -
关于std::async 的实验
std::asyncstd::async 会异步执行函数指针,lambda 表达式 以及 std::bind一类的结果类型主要有三个std::launch::async保证异步行为,即传递函数将在单独的线程中执行·std::launch::deferred当其他线程调用get()来访问共享状态时,将调用非异步行为·std::launch::async | std::launch::deferred看第一个例子:#include <unistd.h>#i..原创 2021-08-26 09:56:48 · 311 阅读 · 0 评论 -
关于c++ 中的智能指针和多态的反思
致敬c++的末法时代!现在做c++的好像不是很多了,有点像c++的末法时代了,年轻人做c++的好像不是很多,企业招c++程序员也很难能招到;大家都跑去做golang和java了,毕竟他们简单做东西也很快;但是c++真的很有趣,而且非常亲近底层,我一直也是非常喜欢的,就是比较难的吧,需要用时间和精力一点点去学习。忙碌的一天,不停的思考,在忙碌的工作之余,还是要对一天的代码做下总结,毕竟一些方面如果不记下来可能就忘掉了,我的文笔不是很好,所以用例子代替自己的心得吧,还是跟以前一样希望技术越来越好,毕竟每原创 2021-08-18 23:33:37 · 842 阅读 · 0 评论 -
cmake + vscode + docker 远程调试linux程序
1.安装docker首先下载dockerhttps://www.docker.com/get-started2.编写dockerfileFROM ubuntu:20.04ENV DEBIAN_FRONTEND noninteractive## Update cache and upgrade imageRUN apt-get -y update && apt-get -y upgrade && apt-get -y dist-upgrade#原创 2021-08-08 13:55:47 · 1022 阅读 · 0 评论 -
提取不重复的整数
描述输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。保证输入的整数最后一位不是0。输入描述:输入一个int型整数输出描述:按照从右向左的阅读顺序,返回一个不含重复数字的新的整数...原创 2021-06-10 18:30:37 · 132 阅读 · 0 评论 -
合并表记录
描述数据表记录包含表索引和数值(int范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。输入描述:先输入键值对的个数然后输入成对的index和value值,以空格隔开输出描述:输出合并后的键值对(多行)#include <map>#include <iostream>using namespace std;int main(){ int number; std::map<原创 2021-06-10 17:42:47 · 91 阅读 · 0 评论 -
获取近似值
描述写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。输入描述:输入一个正浮点数值输出描述:输出该数值的近似整数值#include <iostream>using namespace std;int main(){ double number; while(cin >> number) { number += 0.5; std::co.原创 2021-06-10 16:46:38 · 136 阅读 · 0 评论 -
刷题质数因子
描述功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为22335)最后一个数后面也要有空格输入描述:输入一个long型整数输出描述:按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。示例1输入:180复制输出:2 2 3 3 5结题:...原创 2021-06-10 16:37:53 · 72 阅读 · 0 评论 -
字符串分隔
描述•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。输入描述:连续输入字符串(输入多次,每个字符串长度小于100)输出描述:输出到长度为8的新字符串数组示例1输入:abc123456789复制输出:abc000001234567890000000复制...原创 2021-06-10 13:48:07 · 284 阅读 · 0 评论 -
明明的随机数
描述明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据(用于不同的调查),希望大家能正确处理)。注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。当没有新的输入时,说明输入结束。.原创 2021-06-10 13:03:16 · 119 阅读 · 0 评论 -
计算某字母出现次数
描述写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字母,然后输出输入字符串中该字母的出现次数。不区分大小写,字符串长度小于500。输入描述:第一行输入一个由字母和数字以及空格组成的字符串,第二行输入一个字母。输出描述:输出输入字符串中含有该字符的个数。...原创 2021-06-10 10:03:37 · 141 阅读 · 0 评论 -
字符串最后一个单词的长度
校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。描述计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。输入描述:输入一行,代表要计算的字符串,非空,长度小于5000。输出描述:输出一个整数,表示输入字符串最后一个单词的长度。...原创 2021-06-10 09:45:53 · 121 阅读 · 0 评论 -
c++中STL的push_back和emplace_back的区别
这两个函数其实是我写c++中经常用的。在这里再次回顾一下我非常喜欢c++,因为他的变化莫测,c++想写出高性能的程序,必须要减少内存拷贝,原创 2021-05-27 21:13:18 · 324 阅读 · 0 评论 -
IO多路复用的技术内幕
前言多路复用的场景自始至终都是为了最大限度减少用户和内核态之间的切换,充分利用多核时代下的cpu,是对于编写高性能网络编程0阻塞IO的唯一途经,是IO阻塞的克星,我们的php和java底层都大量使用了该技术。借鉴书籍《linux设备驱动程序》《unix高级环境编程第三版》《unix网络编程卷1》《linux系统编程》《c++多线程服务端编程》《linux内核设计和实现》一、休眠是高性能网络编程的绊脚石1.驱动编程中,重要的可中断简单休眠函数//初始化等待队列init_waitqueu原创 2021-05-20 01:12:53 · 494 阅读 · 0 评论 -
c++中的exception
c++中的exceptionstd::exceptionstd::exception类定义了无参构造函数、拷贝构造函数、拷贝赋值运算符、一个虚析构函数和一个名为what的无参虚成员。其中what函数返回一个const char*,该指针指向一个以null结尾的字符数组,并且确保不会抛出任何异常,该字符串的目的是提供关于异常的一些文本信息。除析构函数外,其它函数均通过关键字noexcept说明此函数不会抛出异常。例子:#include <cctype>#include <iostr原创 2021-03-10 23:56:19 · 1661 阅读 · 0 评论 -
第四章中的显示转换的简单学习
显示转换static_cast只要不包含底层const 我们都可以使用static_caststatic_cast 把一个大类型转化为小类型,不会出现任何waring,他会告诉编译器,我们知道并且不存在转换损失。int main (){ const unsigned int a = 1; const short data = static_cast<const short>(a); std::cout << data << std::en原创 2021-03-04 23:23:22 · 160 阅读 · 1 评论 -
立库刷题小节(14,125,141)
立库刷题小节(14,125,141)没有那么多时间自己做了,直接看代码分析下为什么别人要这么做,然后自己写一遍吧。时间宝贵没时间自己做了。14题最长公共前缀原题编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入:strs = [“flower”,“flow”,“flight”]输出:“fl”示例 2:输入:strs = [“dog”,“racecar”,“car”]输出:""解释:输入不存在公共前缀。来源:力扣(LeetCode)原创 2021-02-28 11:11:34 · 229 阅读 · 0 评论 -
合并两个有序链表
leetcode 合并两个有序链表今天跟同事一起刷了这个leetcode第二十一题,没有做出来题目为:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4可能是被题目的图误导了https://assets.leetcode.com/uploads/2020/10/03/merge_ex1.jpg思路是用l2为节点去解答这个题目,所以采用了错误的解法/*原创 2021-02-17 15:28:50 · 141 阅读 · 0 评论 -
c++ primer第三章复习
c++ primer第三章复习3.1 命名空间的using 声明1.使用命名空间用usingusing这个不用说是使用namespace的namespace testNamespace { class Test { };}using testNamespace::Test;int main (){ return 0;}2.头文件不要使用using这个之前自己有一些错误,在头文件里使用了using 以后一定要注意!3.别名声明使用数组的一个例原创 2021-02-13 14:54:51 · 181 阅读 · 0 评论 -
删除数组中的重复选项----快慢指针的使用学习
删除数组中的重复选项leetcode 上遇到了一个题目,要求删除数组中的重复选项原题:给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。示例2:给定 nums原创 2021-02-12 20:26:20 · 134 阅读 · 0 评论 -
leetcode的二分算法的复习小题
原题你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有 n 个版本 [1, 2, …, n],你想找出导致之后所有版本出错的第一个错误的版本。你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。示例:给定原创 2021-02-11 23:06:15 · 115 阅读 · 0 评论 -
反转链表
反转链表今天和同事在leetcode上刷了一道比较经典的反转链表的题目,这个题之前刷过,但是又有点忘记了,在这里再次复盘一下反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL这个题的第一个知识点就是递归程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它原创 2021-02-09 11:40:14 · 84 阅读 · 1 评论 -
muduo框架内核剖析
muduo 网络框架分析:首先我们要分析的肯定是能撑起muduo框架的核心骨架,moduo reactor的核心骨架是三个类,channel、Eventpool和Poller首先看Channel,channel是用来让事件可以在reactor之中自由穿梭的,由于多线程各个线程之间都能共享内存,所以线程之间的通讯一般采用内存复制作为主要的通讯手段,muduo多线程采用的是one thread per loop,意思就是每一个线程都有一个main loop。muduo源码简单易懂,设计小巧,先从使用原创 2020-08-15 12:45:55 · 458 阅读 · 0 评论 -
编译时 关于动态库的一些问题的解决心得--gcc 、g++、cmake 通用
其实cmake 本质也是生成makefile,我之前编译过muduo库,遇到一个问题,见git的issuehttps://github.com/chenshuo/muduo/issues/470在描述一下当时的问题,当时已经从官网上下载了boost的库./b2./b2 install但是依然出现了/tmp/ccLjGYKC.o:在函数‘__static_initialization_and_destruction_0(int, int)’中:main.cc:(.text+0x原创 2020-06-11 00:17:13 · 2656 阅读 · 0 评论 -
第四章c++多线程系统编程精要
c++多线程系统编程精要学习多线程系统编程要面临两个思维转变:1.当前线程可能会被随时切换出去2.多线程中事件发生顺序不会再有全局的先后关系当线程被切换回来继续执行下一条语句的时候,全局数据可能已经被其他线程修改。例如在没有为指针p加锁的情况下,if(p && p->next){/**/}就有可能会 导致segfault,因为在逻辑与的前一个分支评估为true的那一刹那,p可能被其他线程设置为NULL或者被释放,后一个分支就访问了一个非法地址在单cpu系统中,.原创 2020-05-26 22:06:01 · 467 阅读 · 0 评论 -
该如何做到线程同步---多线程服务器编程的读书笔记
四大设计原则1.尽量最低限度的使用共享对象,减少需要同步的场合。一个对象能不暴露给别的线程就不要暴露;如果要暴露,有限考虑immutable对象;实在不行才可以暴露要修改的对象;实在不行可以修改暴露的对象,并且用同步措施来保护他。2.其次是使用高级的并发编程构件,如TaskQueue,Producer-Consumer Queue,Count DownLatch;3.最后不得已必须要使...原创 2020-05-02 21:54:52 · 503 阅读 · 0 评论 -
拷贝控制
第13章拷贝控制当定义一个类的时候,我们显示的或隐式的指定在此类型的对象拷贝、移动、赋值和销毁时候做什么。一个类通过定义5种特殊成员函数来控制这些操作,包括拷贝函数、拷贝赋值运算符、移动构造函数、移动赋值运算符和析构函数。拷贝和移动构造函数定义了当用同一类型的另一个对象初始化本对象的时候做什么.拷贝和移动赋值运算符定义了将一个对象赋予同类的另一个对象做了什么如果一个类没有定义拷贝成员,...原创 2020-04-30 21:38:18 · 153 阅读 · 0 评论 -
一份错误的程序的思考和反思,关于多线程编程中的竞态问题
直接上代码#include <memory>#include <iostream>#include <string.h>#include <vector>#include <pthread.h>using namespace std;class MutexLock{public: MutexLock()...原创 2020-04-04 12:47:38 · 229 阅读 · 0 评论 -
关于智能指针的一个有趣的笔记
这几天比较好奇就是c++ 的智能指针在离开作用域之后是否会被销毁,疑惑点来自自己写的一段小代码void* threadOne(void* arg){ int count = 0; while (1) { printf("%d\n", 1); auto p = make_shared<Foo>(); weak_...原创 2020-04-03 20:45:53 · 181 阅读 · 0 评论 -
c++ 模板显示实参 的 参数类型推断
模板显示实参在某些情况下,编译器无法推断出模板的实参类型。其他一些情况下,我们希望用户控制模板实例化。当函数类型与参数列表中任何类型不同的时候,这两种情况最常出现。指定显示的模板实参在某些情况下,编译器无法推断出模板实参的类型。在其他一些情况下,我们希望允许用户控制模板实例化。当函数返回类型和参数列表的任何类型都不同的时候,这两种情况最常出现。指定显示的模板实参作为一个允许用户...原创 2020-03-25 10:17:01 · 781 阅读 · 0 评论 -
模板中 类型转换与模板类型参数
类型转换与模板类型参数与非模板函数一样,我们在一次调用中传递给函数模板的实参用来初始化函数的形参。如果一个函数形参的类型使用了模板类型参数,那么采用特殊的初始化规则。只有很悠闲的集中类型转换会自动的应用于这些实参。编译器通常不是对实参类型进行转换,而是生成一个新的模板实例。与往常一样,顶层的const无论是在形参还是在实参中,都会被忽略,在其他类型转换中,能在调用中应用与函数模板的包括下面...原创 2020-03-23 10:29:41 · 640 阅读 · 0 评论 -
sciter 获取表单的get 和 post请求
关于这个网上说的很少我在这里告诉一下大家,下面是我在github上直接问的作者,作者给我的一些回复https://github.com/c-smile/sciter-sdk/issues/152在代码中调用如下进行BOOL ZendSciterRequest::onRequest(LPSCN_LOAD_DATA load_data) { ...原创 2020-03-23 10:22:16 · 358 阅读 · 0 评论 -
c++模板与泛型编程5-模板的灵活性
16.6效率与灵活性这篇文章中c++ primer 用两种智能指针举例子shared_ptr和unique_ptr如何指定删除器的差异实际上就是这两个类功能的差异。我们先看一下如何定义shared_ptr的删除器学习自csdn的网址https://blog.csdn.net/hp_cpp/article/details/103452196在构造函数的时候传入函数的指针:...原创 2020-03-20 07:45:16 · 160 阅读 · 0 评论