- 博客(70)
- 收藏
- 关注
原创 Linux下查看一个进程中所有线程及其运行的简略信息
ps -mp pid -o THREAD,tid,time[root]# ps -mp 1 -o THREAD,tid,timeUSER %CPU PRI SCNT WCHAN USER SYSTEM TID TIMEroot 22.5 - - - - - - 1-02:47:59root 0.0 19 - hrtime - - 1 00:00:05root 0.4 ...
2021-05-20 16:00:30 350
原创 make接收宏定义参数
makefile接收make参数并传递到代码里面ifneq($(strip$(DEF_SVR_OFFSET_INDEX)),)DEFINES+=-DDEF_SVR_OFFSET_INDEX=$(DEF_SVR_OFFSET_INDEX)endif
2021-03-11 11:30:33 825
原创 C++ map hash , [] 和 find的区别
map 和 hashmap 在使用上需要注意 [] 和 find的区别,数据不存在时 [] 会开辟内存 而find 不会。这个特性很重要。这个特性很重要,假如一个map当前size是1,使用[]访问一个不存在的key时,你再去取size,发现 size变成2 了,就是这么叼。***再假如,高并发多线程程序访问map 或 hash 的时候,为了提高性能使用读写锁,如果你再读锁里面使用[] 访问一个不存在的数据时,那就有可能崩溃了。******...
2021-02-24 18:02:41 589
原创 new对象数组的时候怎么设置构造函数参数
问题:c++中有带参数构造函数的类,new对象数组的时候怎么设置构造参数?比如classUser{intm_age;public:User(inta_age):m_age(a_age){}};User*l_us =new User[6];//怎么把参数放进去呢解决方法:intl_age=10000;// 分配内存User*l_us=(User*)operatornew(6*sizeof(User));for(inti=...
2021-01-23 15:02:08 1526
原创 文件多行替换
单行替换的时候我基本上使用sed命令,sed命令多行替换的操作不大熟悉,还好找到了perl。替换前cat aaaaa.iniDBIP=192.168.100.100port=9905替换后cat aaaaa.iniDBIP=192.168.100.110port=9023执行命令sudo perl -0777 -i -pe "s/DBIP=192.168.100.100\ndbport=9905/DBIP=192.168.100.110\ndbport=9023/ig" aaaa
2021-01-04 20:05:22 319
原创 服务端数据落地方案
数据落地方案Redis 是一个高性能的key-value数据库,服务端程序广泛的使用它缓存业务数据,甚至于达到滥用的程度。我们最担心的一个问题就是万一redis崩溃了怎么办,里面的数据如果恢复,应该采用什么方式去落地保存。下面就根据不同的业务场景来提出几种不同的落地方案。1、写压力小、读压力大的数据。方案:同步写mysql,然后同步写redis。2、写压力大的数据。方案:同步写redis,然后异步写mysql;数值类的数据要采用增量的方式写,防止redis崩溃时覆盖回写脏数据。3、写压力
2020-09-07 12:15:12 520
原创 boost bind 和 boost function学习
#include<iostream>#include<boost/function.hpp>#include<boost/bind.hpp>usingnamespacestd;boolsome_function(inta,intb){cout<<"a="<<a<<"b="<<b<<endl;returna<b...
2020-06-24 20:29:12 163
原创 C++从圆弧中随机一个点
#include<iostream>#include<cmath>#include<vector>#include<random>#include<stdio.h>usingnamespacestd;constinteps=1e-2;//精度#definePI3.1415926...
2019-12-06 00:52:19 577
原创 C++ map转换到vector
/************************************************************************* > File Name: map2vec.cpp > Author: chenhui > Mail: ********* > Created Time: 2019年08月 5日 22:45:15...
2019-08-05 22:54:24 5986
转载 架构 之 染色日志
作者:匿名用户链接:https://www.zhihu.com/question/20292868/answer/21643316来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。底层的rpc框架实现的,其实就是给每一次请求的源头处,加上一个seqence id(id内容可以是qq号+时间戳+随机数),每次记日志的时候,都打把seqence id打出来,rpc...
2019-07-23 20:14:25 1294
原创 C++ stl list 踩坑
C++ stl list 获取size()函数非常慢,跟shi一样,生产环境中使用被坑了,有时间看一下源码,严重怀疑是现算的。#include <iostream>#include <list>#include <stdlib.h>#include <stdio.h>#include <sys/types.h>#inc...
2019-07-20 23:58:20 573
原创 redis lua脚本实现原子操作
通过lua脚本封装原子操作,对一个key设置比旧数据大的数值,并返回大的数值;如果redis里面不存在该key,直接设置。 eval "local a=redis.call('GET',KEYS[1]) if a==false then redis.call('SET',KEYS[1],ARGV[1]) return ARGV[1] elseif tonumber(ARGV[1])>t...
2019-06-22 21:37:12 2261
原创 开源实时流媒体播放服务器程序
DarwinStreamingServer(即DSS)是Apple公司提供的开源实时流媒体播放服务器程序。整个程序使用C++编写,在设计上遵循高性能,简单,模块化等程序设计原则,务求做到程序高效,可扩充性好。并且DSS是一个开源的基于标准的流媒体服务器,可以运行在WindowsNT和Windows2000,以及几个UNIX实现上,包括MacOSX,Linux,FreeBSD和Sol...
2019-04-29 16:29:14 1360
原创 GDB attach 调试运行中的程序
程序运行时,某个线程在某个逻辑分支卡住了一直出不来,逻辑比较复杂,判断不出来是哪个位置。因此用gdb attach 跟踪现在线程卡在哪个位置。gdb attach [pid] 调试某个进程info threads 查看该进程内所有的线程 状态thread [tid] 进入某个线程bt ...
2019-03-12 22:49:41 1700
原创 基于Grafana + Influxdb 的程序内性能监控
基于Grafana + Influxdb 的程序内性能监控https://www.cnblogs.com/davidwang456/p/7795263.htmlhttps://blog.csdn.net/baomw/article/details/89146300
2019-03-06 22:23:33 229
转载 mysql数据存在时update,不存在时insert
https://www.cnblogs.com/liaojie970/p/6824773.html
2019-02-19 18:33:41 2453
原创 C++ vector 中使用pair
#include <iostream>#include <vector>using namespace std;int main(){ // int64_t li64test; // cout<<li64test<<endl; std::vector<pair<int,int> > vec; ...
2018-11-28 20:46:19 1824
转载 json和protobuf互转
Javahttp://code.google.com/p/protobuf-java-format/C++https://github.com/shramov/json2pbPythonhttps://github.com/NextTuesday/py-pb-converters导入模块pbjson.py即可使用。ps. 原始模块的pb2json函数会自动过滤protob...
2018-11-20 14:24:46 2646
原创 Linux C++ 信号量学习 sem_init sem_post sem_wait sem_timedwait
一、函数简介信号量的数据类型为结构sem_t,它本质上是一个长整型的数。函数sem_init()用来初始化一个信号量。它的原型为: extern int sem_init __P ((sem_t *__sem, int __pshared, unsigned int __value)); sem为指向信号量结构的一个指针;pshared不为0时此信号量在进程间共享,否则只能为当前进程...
2018-10-11 21:49:17 8338
原创 C++ librdkafka一次崩溃记录
1、失败的地方#define rd_assert(EXPR) assert(EXPR)2、realloc失败realloc非常容易失败,当内存比较大时!https://zhidao.baidu.com/question/2011437754906553988.html3、原因定位:rebalance回调会导致realloc崩溃 ...
2018-09-18 17:37:13 910
原创 使用boost库实现的 http get操作
/* * HttpBoostCL.h * * Created on: 2018年4月10日 * Author: Administrator */#ifndef BOOSTSTUDY_HTTPBOOSTCL_H_#define BOOSTSTUDY_HTTPBOOSTCL_H_#include <boost/asio.hpp>using boost::asio::ip::tc...
2018-04-12 21:33:43 2543
原创 linux boost thread
linux centos 安装boost的方法, 1 yum install boost 2 yum install boost-devel 3 yum install boost-doc安装成功。#include <iostream>#include <boost/thread/thread.hpp>using namespace std;usi...
2018-04-05 18:06:42 519
转载 分布式高并发服务--幂等性
重复消息是SOA服务实现中非常常见的问题,你永远不要指望调用方每次请求消息不一样,对于读操作,重复消息可能无害,可对于写操作很可能就是灾难。可以通过幂等(Idempotent)模式处理重复的消息,基本处理思路是:1、调用者给消息一个唯一请求ID标识。ID标识一个工作单元,这个工作单元只应执行一次,工作单元ID可以是Schema的一部分,也可以是一个定制的SOAP Header,服务的Contrac...
2018-03-08 21:43:42 1613
原创 C++ map和hash_map简单对比
C++ map 和 hash_map 对比map的基本数据结构是平衡二叉树,hash_map的基础数据结构是hash_table哈希表,下面程序展示了向map和hash_map中插入数据消耗时间对比。数据量较小的时候可以选择map,数据量大、对插入查找效率要求高的时候选择hash_map。/**********************************************
2017-12-21 17:29:07 4443 2
原创 二进制转化为16进制字符串
void BibaryToHex(const unsigned char * src, char *dst, int len){int i = 0, j = 0;unsigned char left = 0x0f;unsigned char right = 0xf0;unsigned char tmp = 0;for (i =0; i{tmp = (src[i] &
2017-08-11 16:13:19 811
原创 Linux C++ 无锁编程 cas
(先保存,以后再整理)高并发服务器经常用到多线程编程,需要对共享数据进行操作,为了保护数据的正确性,有一种有效的方法就是加锁pthread_mutex_t。但是加锁会引起性能的下降,多个线程竞争同一个锁,抢占失败后强制上下文切换。/*************************************************************************
2017-07-01 19:11:02 4431
转载 MySQL自动重新连接
MySQL连接超时。如果使用了长连接而长期没有对数据库进行任何操作,那么在 timeout值后,mysql server就会关闭此连接,而客户端在执行查询的时候就会得到一个类似于“MySQL server has gone away“这样的错误。解决方法有两个:1) 增大/etc/my.cnf中wait_timeout的值,比如设置wait_timeout=8640000,即100天。这个
2017-05-12 15:42:07 3888
原创 C++ STL set map 学习
由于工作需要,有一批数据,数据包含类型和工资两种属性。需求是找到某个类型的数据,并且是有序的。因此想到了map >。直接上代码:#include #include #include using namespace std;struct StruSalaryInfo{int salary;StruSalaryInfo(){salary =
2017-04-19 00:07:02 244
转载 mysql 远程权限分配
Mysql为了安全性,在默认情况下用户只允许在本地登录,可是在有此情况下,还是需要使用用户进行远程连接,因此为了使其可以远程需要进行如下操作:一、允许root用户在任何地方进行远程登录,并具有所有库任何操作权限,具体操作如下:在本机先使用root用户登录mysql: mysql -u root -p"youpassword" 进行授权操作:mysql>GRANT A
2017-03-07 01:01:43 342
原创 Linux查看一个进程内线程详情
Linux 查看一个进程中线程的状态方法一:PS在ps命令中,“-T”选项可以开启线程查看。下面的命令列出了由进程号为的进程创建的所有线程。1.$ ps -T -p 方法二: Top1.$ top -H2.要让top输出某个特定进程并检查该进程内运行的线程状况:$ top -H -p
2016-12-16 11:26:50 5008
转载 mysql强制索引和禁止某个索引
1、mysql强制使用索引:force index(索引名或者主键PRI)例如:select * from table force index(PRI) limit 2;(强制使用主键)select * from table force index(ziduan1_index) limit 2;(强制使用索引"ziduan1_index")select * from table f
2016-11-17 02:08:33 899
原创 C rand 和 srand 函数
rand函数不是真正的随机数生成器,而srand()会设置供rand()使用的随机数种子。如果你在第一次调用rand()之前没有调用srand(),那么系统会为你自动调用srand()。而使用同种子相同的数调用 rand()会导致相同的随机数序列被生成。srand((unsigned)time(NULL))则使用系统定时/计数器的值作为随机种子。每个种子对应一组根据算法预先生成的随机数
2016-10-29 22:59:20 355
原创 Linux C++ 时间格式化
/************************************************************************* > File Name: time.cpp > Author: chenhui > Mail: ********* > Created Time: 2016年03月10日 11:20:58 ********
2016-10-17 15:47:16 2059
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人