自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

转载 kafka实战 - 数据可靠性

概述  常见的存储高可用方案的根本原理就是把数据复制到多个存储设备,通过数据冗余的方式来实现数据的可靠性。比如同一份数据,一份在城市A,一份在城市B。如果城市A发生自然灾害导致机房瘫痪,那么业务就可以直接切到城市B进行服务,从而保障业务的高可用。但是这是理想情况,一旦数据被复制并且分开存储,就涉及到了网络传输,即使在同机房,而且网络状况良好的情况下,也会有10ms以上的延迟,而这种延...

2018-12-09 19:30:00 238

转载 字节序问题的简单理解

什么是字节序?  什么是字节序我就不再啰嗦了,这样的文章在网上一搜一大片,而且很多写的颇有水平。我主要参考了以下3篇文章:  字节序详解:https://blog.csdn.net/ce123_zhouwei/article/details/6971544  理解字节序:http://www.ruanyifeng.com/blog/2016/11/byte-order.htm...

2018-12-02 12:16:00 281

转载 kafka实战 - 处理大文件需要注意的配置参数

概述  kafka配置参数有很多,可以做到高度自定义。但是很多用户拿到kafka的配置文件后,基本就是配置一些host,port,id之类的信息,其他的配置项采用默认配置,就开始使用了。这些默认配置是经过kafka官方团队经过严谨宽泛的测试之后,求到的最优值。在单条信息很小,大部分场景下都能得到优异的性能。但是如果想使用kafka存储一些比较大的,比如100M以上的数据,这些默认的配...

2018-11-28 23:09:00 1405

转载 kafka实战 - 删除topic

概述  在平时对kafka的运维工作中,我们经常会由于某些原因去删除一个topic,比如这个topic是测试用的,生产环境中需要删除。或者我想扩容topic的同时,这个topic中的数据我不想要了,这时候删除topic,增加broker,再重新创建topic就会是比较简单的方法。但是kafka删除topic时,有很多关键的点必须清楚,否则在删除topic的时候就会出现各种各样的问题。...

2018-11-27 22:57:00 835

转载 redis访问速度和内存优化实践经验

内存优化  1. 平时的key很有可能是md5,sha1之类的字符串。如果key直接以字符串的方式,md5需要32个字节,sha1需要40个字节。但是md5和sha1这种类型的字符串是由规律的:每个字符都是0~f。也就是说,每个字符只需要4位就可以表示。所以我们可以在把md5或者sha1当做key直接存进去之前,把32字节md5压缩成16字节的二进制数据,把40字节的sha1压缩成2...

2018-11-07 22:14:00 546

转载 PHP获取HTTP数据的方法

获取GET数据的方法  使用PHP的内置变量$_GET。GET方法传输的数据都在URL中,比如 "www.register.com:/up.php?name=frogjie&age=24"中的name和age参数。GET传输的数据是urlencode之后的。当请求到达php这边时,php会自动urldecode,并把这些参数以key=>value的方式保存到$_GET数...

2018-10-25 22:11:00 575

转载 C语言复杂struct类型get或者set字段的简化方法

今天学习librdkafka的conf配置相关的代码,学到了一个C语言代码编写的技巧。作者真的是把C语言用得出神入化。我们平时编写C语言代码,经常会用struct类型来模拟面向对象中的class。比如我实现了下面的Student结构体    可以看到零零碎碎有十多个字段。如果我们想再把这个struct模拟c...

2018-10-22 00:09:00 1063

转载 php对引用的简单理解

背景  php语言的高度封装和五花八门的库使这门语言很容易上手,而且开发效率比C/C++高出许多。但是也正是由于php封装度很高,一些在c语言中很简单的概念,让php这么一封装,就变得难以琢磨。比如引用,在c语言中的概念很简答, 就是两个变量名指向同一块内存。而且引用必须要你手动操作,哪个变量引用的哪块内存在编写代码的时候心里是一清二楚的。但是在php中,有很多地方使用了隐式的引用,...

2018-09-21 22:28:00 137

转载 C语言使用宏输出调试信息实战

如何使用宏定义输出信息  C语言提供了#, ##, __VA_ARGS__等符号来帮助我们在宏定义中更好地输出信息。使用方式如下:        输出如下:        #的作用是,它会在所引用的宏变量左右两边加一对引号。所以FUN1中的printf函数不会出错,因为FUN1(hello)预编译时被替换成了printf("hello\n")    ##的作用是,...

2018-09-11 23:40:00 1206

转载 常见的机器负载监控指标

概述  机器负载是否正常,经常需要监控的指标有如下4个:    <1> cpu    <2> memory    <3> IO    <4> network关于cpu的监控  a. load average,cpu的负载   linux进程的状态分类可以粗略地分为 blocking process, r...

2018-09-08 19:11:00 518

转载 C语言创建守护进程

  守护进程最大的特点就是不受终端控制,并且在后台运行。linux上很多应用都是以守护进程的方式存在的,比如常用的crond。把应用做成守护进程的好处就是可以脱离终端,不会因为终端的关闭而挂掉,会随着系统的存在而存在。  创建守护进程有以下几个要点:    <1> 创建子进程,杀掉父进程。      这么做主要是为了确保进行操作<2>的进程不是会话组长...

2018-09-03 23:04:00 384

转载 TCP异常连接的检测方法

背景  在平时的开发中,经常会碰到一些需要检测tcp连接是否正常的场景。比如一个分布式的应用,一个调度任务的节点管理一堆用来跑业务的节点。当调度节点进行调度的时候,需要把任务分发给它认为正常的业务节点去执行。业务节点是否正常,一个重要的参考依据就是调度节点和业务节点之间的tcp连接是否正常。这时候就需要调度节点主动地去检测tcp连接。常见的检测方法有以下几种方案一、通过TC...

2018-09-02 23:54:00 1145

转载 cut命令的使用

  cut命令使用方式有点像阉割版的awk,主要用来指定分隔符,然后输出特定的域。  常用参数:    -d 指定分隔符,默认是空格    -f 输出特定的域,比如f1,输出第一个域;f1,5, 输出第一个和第5个域;f1-5,输出1到5这5个域    -b 显示的字节数  比如这里有个txt文件如下:    cut -b 1,4 txt, 输出 txt...

2018-08-23 22:32:00 292

转载 gcc和g++常用编译参数

-w -W -Wall  -w 关闭编译警告。平时编写c/c++代码如果不规范,编译的时候会抛出很多警告。但是一般的警告都是可以忽略的,比如类型转换。编译的时候可以加-w关闭警告  -W 也是关闭编译警告,但是比-w智能一些,它只会显示编辑器认为会出错的警告  -Wall, 显示所有警告。  比如下面的代码,test.c    gcc -o a.out test....

2018-08-23 22:19:00 503

转载 c++中一些常见关键字的使用

volatile  如果一个变量使用volatile修饰,那么当使用它的值时,一定会从内存中读出。  c++中之所以引入这个关键字,是因为有些编译器在编译的时候会对代码进行优化。下面是常见的优化:   假设有两个线程共享is_running变量:      线程1:        while(is_running == 1)        {         ...

2018-08-18 19:12:00 158

转载 C语言的数组,指针,二级指针,指针数组和数组指针的简单理解

什么是指针  C语言中的所有变量都是存储在一块内存中的。以32位机器为例,char型的变量存储在一块1字节的内存中,int型的变量存储在一块4字节的内存中。指针本质上也是个变量,也存储在一块4字节的内存中。只不过指针那块内存中存储的是一个地址而已。我们可以把某个变量的4字节地址存储在指针的那块内存中。想要操作变量的时候,先从指针的内存中得到那个变量的地址,然后在根据地址操作对应的那个...

2018-08-15 23:48:00 359

转载 bash shell 中时间操作常用方法总结

  在日常的工作中,bash shell 的时间操作非常频繁。比如shell脚本定时发送数据统计的时候,会查看当前是否为预定的发送时间。或者使用文件保存一些数据时,一般会生成时间字符串当做文件名的一部分。总结一下,以后再用到就不用上网到处翻了。  <1> 最基本的操作,获取当前时间(年-月-日 时:分:秒):    date +"%Y-%m-%d %H:%...

2018-08-15 21:36:00 1103

转载 常见字符串操作方式总结

<1> 获取字符串长度:  ${#str}    <2> 获取尾部字符串:  ${str#*b}, 非贪婪匹配删除的部分,从字符串左边开始,删除掉第一个出现的'b'及其左边所有的字符串。  ${str##*b}, 贪婪匹配删除的部分,从字符串左边开始,删除掉最后一个出现的‘b’以及左边所有的字符串。    &l...

2018-08-14 23:00:00 173

转载 查看机器负载常用姿势总结

<1> load average  先来看一下linux中存活状态下进程的粗略分类:    a. blocking process, 可能在等在IO或者自己调用wait系列的函数    b. runnable process, 所有资源一切就绪,就差cpu了,在任务队列里排队等待cpu资源    c. running process, 正在cpu上运行的进程...

2018-08-14 22:31:00 416

转载 netstat命令常用总结

简介:  netstat命令用于显示和检测机器的网络连接情况。并且可以跟据协议筛选自己想要看到的数据。比如有一天突然发现“too many open files”错误,就可以使用netstat来查看机器是否打开了大量的tcp连接。使用方法:  简单的使用方式: netstat -[acCeFghilMnNoprstuvVwx]  常用参数:    <...

2018-08-13 23:14:00 295

转载 c++中的右值引用的简单理解

以下的内容是我看了网上的博文后自己的总结,如果时间充裕的话,建议直接看原文。简介:  c++中的右值引用十分不好理解,但是当你大概知道右值引用解决了c++中的什么问题后,会感觉右值引用还是很有用的。平时我们在c++中使用的引用为了和c++11引入的右值引用区分,一般把它称之为左值引用。左值引用很好理解,就是多个变量名绑定到了同一块内存上,操作这几个不同的变量名相当于操作同一块内存...

2018-08-12 23:56:00 574

转载 php常用函数总结

php的函数是在太多,而且风格各有不同。与其博览php的所有函数,不如总结一些常用的函数,形成自己处理业务的一套逻辑来的轻松和有用。字符串操作:  字符串截取    substr(string, start, length)  查找字符串出现位置    strpos(string, find, start), 第一次出现的文职    stripos(), ...

2018-08-09 22:42:00 71

转载 redis的安全模式

  下载并安装redis到机器后,使用默认配置启动。发现本机client使用“localhost”或者“127.0.0.1”连接本机的server,一切正常ok。但是将client切换到别的机器上时,发现连接不上。查了一下,原因如下:  redis的默认配置是没有用户验证的。也就是说,reids的server你只需要知道ip和端口就可以连得上,然后也有操作权限。这样存在redis里面...

2018-08-09 22:14:00 1237

转载 c++中的智能指针

简介  为了解决c++程序容易造成内存泄漏的问题,c++11提供了3种智能指针:std::unique_prt, std::shared_ptr, std::weak_ptr。智能指针的原理就是,将一个申请好的内存地址保存在智能指针结构体内部,然后把智能指针保存在栈上。当智能指针出了作用域后,由于栈上的变量会自动销毁,所以之前传入保存在智能指针内部的内存块的析构函数也会被相应调用。智...

2018-08-08 23:26:00 124

转载 分布式系统的产生背景和提出的挑战

分布式系统产生背景:  在互联网还没有现在这么方便的时候,所以很多公司的业务线都是垂直架构,如LAMP。由于各个公司的业务比较简单,需要处理的用户数据也相应较少,所以简单易上手的垂直架构还能很有效地支撑各个公司的业务发展。但是随着互联网的普及移动互联网的发展,需要处理的用户数据得到了爆炸性的增长。而且为了同时服务于手机app和自助终端机等渠道的业务,各种新的需求层出不穷。在不断地迭代升级...

2018-08-07 23:01:00 1806

转载 bash shell 中的数组

简介  bash shell 提供了两种一维数组,分别是 index array 和 associative array,常见的翻译是索引数组和关联数组。任何变量都可以用作数组,也就是说如果你使用了数组赋值的语法操作变量(name[subscript]=value),则变量默认会转换为索引数组。同时你也可以使用declare显示地定义数组。比如declare -a array。...

2018-08-05 14:54:00 2489

转载 bash shell 中变量的使用

简介  bash shell 中的变量就像脚本语言一样,可以直接拿来使用,并不需要提前声明。如果没有特殊的限定,则变量的默认类型是字符串。bash shell中的变量一共分为3类:  <1> 用户自定义的变量    也叫作本地变量,作用域为整个bash进程。  <2> 环境变量    使用export声明或者定义的变量。作用域为当前的shell...

2018-08-03 22:19:00 148

转载 php使用curl总结

简介:  curl是一个非常强大的开源库,它支持了很多协议,比如常见的HTTP和FTP。基于curl库,我们可以很方便地和各种协议的server进行connect和communicate。PHP支持libcurl库,所以在php中可以很方便地使用curl库的功能。在日常的工作中,我们最常用到的就是使用curl发送HTTP请求。基础用法:  php的curl扩展使用非常简...

2018-07-26 22:12:00 112

转载 tr命令常用方式总结

1. 简介    tr命令常用来替换,删除来自标准输入字符串中的字符。注意,操作的单位是字符,不是字符串。也就是说,不管是替换还是删除,都是针对字符串中某个字符的。比如tr命令不能很方便地实现字符串替换:把“Hello World”变成“Hello Beijing”,但是可以很方便地把每一个大写字符变成小写字符,echo "Hello World" | tr '[A-Z]' '[a-...

2018-07-25 22:39:00 525

转载 stat命令常用方式总结

简介:  stat命令是用来显示文件inode中的内容的。我们平时的业务需求中可能会关注一个文件的更改时间,读写权限之类的信息。stat命令可以帮助我们把这些信息从一个文件的inode中提取并显示出来。inode介绍:  linux把一个文件存储在磁盘上的时候,会在磁盘上另外找一块地方来存储文件的元数据。存储这些数据的区域就叫做inode。inode里面东西比较多,一般比较关...

2018-07-24 22:50:00 1324

转载 日常使用awk方法总结

简介  awk命令在日常查看数据文件或者日志文件时非常有用。它可以根据筛选规则筛选出满足条件的行,加以处理并输出。比如我想知道系统中哪些用户名字以‘r’开头,UID小于10而且可以通过bash登陆,并以‘--’为分割符输出来。那么我们就可以用以下命令实现:    awk -F ":" '/^r/ && $3 < 10 &&&am...

2018-07-23 22:40:00 183

转载 简单通用线程池的实现

通用线程池的一般实现思路如下  一个简单通用的线程池应该满足以下条件  <1> 线程数可配置,可动态调整。任务队列的大小可配置。这一点是为了让代码更好地适应运用场景。比如这份代码在机器配置非常好,而且机器上几乎没有其他的业务争抢硬件资源,那么提高线程数,提高任务队列的大小可以增加程序的响应速度和吞吐量。反之可以适当地减小二者的大小。  <2> 任务...

2018-07-22 10:57:00 225

转载 php的include与require区别以及包含路径查找

include和require的区别:  include在文件找不到的时候发出一条警告,代码继续运行。而require则会发出一个致命错误。引用文件的查找路径:  想把这个问题说清楚,首先需要提一下php对被引用文件路径的分类,一共有以下3类:    <1> 绝对路径,这个没啥说的,linux下以 '/' 开头,windows下以盘符或者 ‘\’ 开头。 ...

2018-07-19 22:43:00 118

转载 网络编程常用基础知识总结

1. socket阻塞和非阻塞  关于阻塞还是非阻塞,socket一般需要考虑的情况有以下3种:    <1> connect    <2> read    <3> write  当socket进行connect的时候,会有一个三次握手的机制。connect函数也是只有接收到自己发送的SYN的ACK之后才会返回。这时候如果网...

2018-07-15 13:37:00 179

转载 zookeeper简单学习

zookeeper的产生背景:  由于互联网的普及和移动互联网的发展,以及用户对产品要求的提升,单一的服务器已经无法满足高并发,大数据的需求。公司的业务一般会进行水平拆分为一个个子系统,然后以分布式的架构形式对外提供服务。  各个子系统虽然经过了拆分解耦,但是每个子系统并不是孤立存在并单独对外服务的。它们往往会产生一定的关联。比如电商平台中的订单子系统往往会使用支付子系统提供的服...

2018-06-24 22:26:00 113

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除