Linux
ChenHui246
这个作者很懒,什么都没留下…
展开
-
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 · 812 阅读 · 0 评论 -
C++ map hash , [] 和 find的区别
map 和 hashmap 在使用上需要注意 [] 和 find的区别,数据不存在时 [] 会开辟内存 而find 不会。这个特性很重要。这个特性很重要,假如一个map当前size是1,使用[]访问一个不存在的key时,你再去取size,发现 size变成2 了,就是这么叼。***再假如,高并发多线程程序访问map 或 hash 的时候,为了提高性能使用读写锁,如果你再读锁里面使用[] 访问一个不存在的数据时,那就有可能崩溃了。******...原创 2021-02-24 18:02:41 · 577 阅读 · 0 评论 -
文件多行替换
单行替换的时候我基本上使用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 · 301 阅读 · 0 评论 -
服务端数据落地方案
数据落地方案Redis 是一个高性能的key-value数据库,服务端程序广泛的使用它缓存业务数据,甚至于达到滥用的程度。我们最担心的一个问题就是万一redis崩溃了怎么办,里面的数据如果恢复,应该采用什么方式去落地保存。下面就根据不同的业务场景来提出几种不同的落地方案。1、写压力小、读压力大的数据。方案:同步写mysql,然后同步写redis。2、写压力大的数据。方案:同步写redis,然后异步写mysql;数值类的数据要采用增量的方式写,防止redis崩溃时覆盖回写脏数据。3、写压力原创 2020-09-07 12:15:12 · 507 阅读 · 0 评论 -
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 · 152 阅读 · 0 评论 -
使用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 · 2528 阅读 · 0 评论 -
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 · 896 阅读 · 0 评论 -
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 · 8284 阅读 · 0 评论 -
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 · 1813 阅读 · 0 评论 -
被MYSQL MVCC(多版本并发控制) 坑的经历
高并发insert记录时,主键ID大的可能会比主键ID小的记录先提交成功。(以后再补充)原创 2018-12-13 17:03:17 · 622 阅读 · 1 评论 -
MSEC
https://github.com/Tencent/MSEC原创 2018-12-22 14:07:49 · 498 阅读 · 0 评论 -
GDB attach 调试运行中的程序
程序运行时,某个线程在某个逻辑分支卡住了一直出不来,逻辑比较复杂,判断不出来是哪个位置。因此用gdb attach 跟踪现在线程卡在哪个位置。gdb attach [pid] 调试某个进程info threads 查看该进程内所有的线程 状态thread [tid] 进入某个线程bt ...原创 2019-03-12 22:49:41 · 1687 阅读 · 0 评论 -
架构 之 染色日志
作者:匿名用户链接:https://www.zhihu.com/question/20292868/answer/21643316来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。底层的rpc框架实现的,其实就是给每一次请求的源头处,加上一个seqence id(id内容可以是qq号+时间戳+随机数),每次记日志的时候,都打把seqence id打出来,rpc...转载 2019-07-23 20:14:25 · 1280 阅读 · 0 评论 -
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 · 561 阅读 · 0 评论 -
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 · 510 阅读 · 0 评论 -
分布式高并发服务--幂等性
重复消息是SOA服务实现中非常常见的问题,你永远不要指望调用方每次请求消息不一样,对于读操作,重复消息可能无害,可对于写操作很可能就是灾难。可以通过幂等(Idempotent)模式处理重复的消息,基本处理思路是:1、调用者给消息一个唯一请求ID标识。ID标识一个工作单元,这个工作单元只应执行一次,工作单元ID可以是Schema的一部分,也可以是一个定制的SOAP Header,服务的Contrac...转载 2018-03-08 21:43:42 · 1602 阅读 · 0 评论 -
linux查看机器信息:cpu、内存和磁盘
一、查看CPU信息CPU信息在 /proc/cpuinfo 中可以通过cat命令查看CPU信息#cat /proc/cpuinfo...processor : 5 //处理器vendor_id : GenuineIntelcpu family : 6model : 26model name : Intel(R) Xeon(R原创 2016-01-19 16:43:50 · 1239 阅读 · 0 评论 -
Linux grep 显示前后几行的信息
grep 后面带上-A -B -C 参数可以多显示几行内容grep -A 5 可以显示匹配内容以及后面的5行内容grep -B 5 可以显示匹配内容以及前面的5行内容grep -C 5 可以显示匹配内容以及前后面的5行内容$ cat size.txtb124230b034325a081016m7187998m7282064a022021a原创 2016-03-02 14:10:58 · 83270 阅读 · 2 评论 -
C++进程学习:fork
每个进程都有一个进程控制块(PCB)来维护进程相关信息,Linux内核的进程控制块是task_struct结构体,主要包含以下信息: 。进程 id。系统中每个进程有唯一的 id,在 C 语言中用 pid_t 类型表示,其实就是一个非负整数。· 。进程的状态,有运行、挂起、停止、僵尸等状态。· 。进程切换时需要保存和恢复的一些 CPU 寄存器。· 。描述虚拟地址空间的原创 2016-02-20 10:13:59 · 862 阅读 · 0 评论 -
Linux 线程锁
两个线程分别计算从1加到100,并且把结果都存储在count变量中。因此为了保证数据的线程安全,在对count值进行写操作时要加锁。加锁可以通过pthread_mutex_lock()和pthread_mutex_unlock()两个函数来实现加锁与释放锁。但是实际应用中为了代码简洁以及防止程序员漏掉unlock,所以通过一个线程锁对象来实现线程锁的自释放。Thre原创 2016-04-09 20:25:26 · 627 阅读 · 0 评论 -
gdb调试
发生core dump之后, 用gdb进行查看core文件的内容, 以定位文件中引发core dump的行.gdb [exec file] [core file]如:gdb ./test test.core在进入gdb后, 用bt命令查看backtrace以检查发生程序运行到哪里, 来定位core dump的文件->行.原创 2016-05-23 22:52:15 · 255 阅读 · 0 评论 -
python日期格式化操作
1.将字符串的时间转换为时间戳方法:a = "2013-10-10 23:40:00"#将其转换为时间数组import timetimeArray = time.strptime(a, "%Y-%m-%d %H:%M:%S")#转换为时间戳:timeStamp = int(time.mktime(timeArray))timeStamp == 1381419转载 2016-09-20 01:06:05 · 26385 阅读 · 0 评论 -
Linux C++ 时间格式化
/************************************************************************* > File Name: time.cpp > Author: chenhui > Mail: ********* > Created Time: 2016年03月10日 11:20:58 ********原创 2016-10-17 15:47:16 · 2052 阅读 · 0 评论 -
Linux查看一个进程内线程详情
Linux 查看一个进程中线程的状态方法一:PS在ps命令中,“-T”选项可以开启线程查看。下面的命令列出了由进程号为的进程创建的所有线程。1.$ ps -T -p 方法二: Top1.$ top -H2.要让top输出某个特定进程并检查该进程内运行的线程状况:$ top -H -p原创 2016-12-16 11:26:50 · 4997 阅读 · 0 评论 -
C++ 字符串分割 split
C++ 字符串分割 split原创 2017-02-20 23:52:24 · 1626 阅读 · 0 评论 -
mysql 远程权限分配
Mysql为了安全性,在默认情况下用户只允许在本地登录,可是在有此情况下,还是需要使用用户进行远程连接,因此为了使其可以远程需要进行如下操作:一、允许root用户在任何地方进行远程登录,并具有所有库任何操作权限,具体操作如下:在本机先使用root用户登录mysql: mysql -u root -p"youpassword" 进行授权操作:mysql>GRANT A转载 2017-03-07 01:01:43 · 334 阅读 · 0 评论 -
C++ STL set map 学习
由于工作需要,有一批数据,数据包含类型和工资两种属性。需求是找到某个类型的数据,并且是有序的。因此想到了map >。直接上代码:#include #include #include using namespace std;struct StruSalaryInfo{int salary;StruSalaryInfo(){salary =原创 2017-04-19 00:07:02 · 234 阅读 · 0 评论 -
Linux C++ 无锁编程 cas
(先保存,以后再整理)高并发服务器经常用到多线程编程,需要对共享数据进行操作,为了保护数据的正确性,有一种有效的方法就是加锁pthread_mutex_t。但是加锁会引起性能的下降,多个线程竞争同一个锁,抢占失败后强制上下文切换。/*************************************************************************原创 2017-07-01 19:11:02 · 4418 阅读 · 0 评论 -
二进制转化为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 · 798 阅读 · 0 评论 -
Linux crontab 计划执行详解
基本格式 : * * * * * command 分 时 日 月 周 命令 第1列表示分钟1~59 每分钟用*或者 */1表示 第2列表示小时1~23(0表示0点) 第3列表示日期1~31 第4列表示月份1~12 第5列标识号星期0~6(0表示星期天) 第6列要运行的命令 crontab文件的一些例子: 30 21 * * * /usr/local转载 2016-01-16 21:00:30 · 323 阅读 · 0 评论