自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一见

技术人生 生活点滴

  • 博客(245)
  • 资源 (53)
  • 收藏
  • 关注

原创 MOOON分布式消息结构

MOOON主要消息结构如下,缺点是消息本身占用字节数较多:// 为何要做IPV4和IPV6区分?// 是因为如果只需要支持IPV4,则一个IP地址只需要用一个4字节表示,// 这样源和目的IP地址共节省了24字节;// 支持IPV6时,同时兼容IPV4,但对于IPV4多浪费24字节;// 源和目标IP,要么都为IPV4,要么都为IPV6,不允许交叉出现。#ifdef IPV6_S

2012-07-30 23:15:34 8259

原创 MOOON-agent更新:新增IHeartbeatHook接口

新增IHeartbeatHook接口的目的是让应用可以在心跳包中安插自己的数据,比如将自己的状态数据通过心跳带回去。

2012-07-27 09:46:56 7744

转载 Dash与Bash的语法区别

本文系转载,原文URL为:http://www.igigo.net/archives/169如今Debian和Ubuntu中,/bin/sh默认已经指向dash,这是一个不同于bash的shell,它主要是为了执行脚本而出现,而不是交互,它速度更快,但功能相比bash要少很多,语法严格遵守POSIX标准,下面简要列举下从bash迁移到dash一般需要注意的问题1.定义函数bash: f

2012-07-24 16:19:25 2702

原创 MOOON-server新消息处理接口

MOOON-server提供了一个通用的TCP框架,并对包的解析抽象出了IPacketHandler接口,这个接口提供了无限制的宽容度,支持任何协议,但是增加了使用复杂。    由于大多数协议,都会定义一个消息包大小字段,基于这个前提,MOOON-server引用了新的接口IMessageObserver,它能够解析任何包头是net::TCommonMessageHeader的消息,在一个包解

2012-07-24 16:19:23 7766

原创 不再担心日志文件过大:通用日志滚动脚本

不用再担心脚本输出的日志文件过大爆满磁盘,log_rotater.sh可让你高枕无忧,肆无忌惮地重定向日志到文件中。 log_rotater.zip  #!/bin/sh# Writed by yijian on 2012/7/22# 本脚本功能:# 1) 实现一个通用的按大小的日志滚动# 2) 要求日志文件扩展名为“.log”,否则请稍修改代码# 3)

2012-07-24 16:19:23 32795 1

原创 改进后的日志类CLogger

在原有的基础上增加了module_name,表示模块名,当一个系统由多模块组成时,输出的日志将更加清晰,使用方法,以MOOON-agent中的为例:点击(此处)折叠或打开#define AGENT_MODULE_NAME "AGENT"#define AGENT_LOG_BIN(log, size) __MYLOG_BIN(agent::logger,l

2012-07-24 16:19:22 7885

原创 开发理念和用户体验

开发理念:要有追求美的意识,简就是美。要形成自己的思想,设计需要灵魂。模式模式有时是恶魔,它容易让你走上抄袭模仿之路。把职责单一作为第一原则,并努力遵守,将让你柳暗花明又一村。一切源于生活,多和生活类比,能让理解更为深刻透彻。始终抱严谨心态,用心思考,细节决定品质。用户体验:往往只在产品层面受到重视和关注,其实在每个层面都应当重视,后台开发是典型的被忽视的,代码同样需要用户体验

2012-07-24 16:19:22 8081

原创 怎么做自动化

在做系统时,不应当盲目地去做自动化,原因有两点:1.有些自动化的代价非常高,反不如人工简单实在2.有些自动化不能保证系统的正确性,它需要人工确认不过,这些也并不应当成为推进自动化的理由,自动化它可以带来两方面巨大的好处:1.大大降低运维工作量2.快速的进行故障恢复所以在做系统应当多考虑自动化,以降低运维工作量和提升系统可用性为目标,一个好的自动化,应当考虑如

2012-07-24 16:19:21 7876

原创 来自mooon的最简单的日志类CSimpleLogger

/** * 单个头文件,可即时独立使用,只要定义了宏NOT_WITH_MOOON,即不依赖于mooon * 简单的写日志类,非线程安全,提供按大小滚动功能 * 不追求功能,也不追求性能,只求简单,若要功能强、性能高,可以使用CLogger * * 使用方法: * 1) 构造一个CSimpleLogger对象 *    CSimpleLogger logger(".",

2012-07-24 16:19:21 28288

原创 项目诉求

最近新接手一项目,乱,只有眼睁睁了,只能尽量做到新增的保持有序,但无法扭转大局。暂还能将就着用,也只能如此,但如果持续有新的需求,那终将有推倒重开发的一天,因为没办法在它的基础上做质的开发,分析一个重要原因是开发过程中,没有迭代重构,导致恶疾越积越多,加上开发人员缺乏主动服务项目的意识和责任心,一些新加入的又随波逐流或缺乏经验,以至于病入膏肓。另外,项目开发过程中的监管缺失,也是走到今天这步的重要

2012-07-24 16:19:20 8816

原创 优雅的让一个类在线程安全和线程非安全间切换

一个良好的多线程库,不应当一刀切的全加锁。因为有些时候,虽然是多线程环境,但可能依照设计一个类只会被一个线程操作,这个时候加锁是多余的,纯浪费性能,但另一些场景又需要它是线程安全的。假设有一个类X:class X{public:    void xoo();};这里总结几个常见的做法:1.本身不加锁,由调用者来加锁,坏处是如果多数场景都是加锁的,由会

2012-07-24 16:19:20 24888

原创 简单的主备切换方案

主备切换是很多高可用性系统都必须解决的问题,方法有很多,象基于ZooKeeper的主备切换就是一个很好的选择。在这里提供一种更简单但不完美的主备切换方法:1) 假设A和B是集群中的主控(Master)节点2) 1~7是工作节点(如HDFS中的DataNode)3) 在每个工作节点上,都同时配置了A和B的IP,而且是对等的,无主备之分所谓主:是指提供服务的主控,而

2012-07-24 16:19:20 17632

原创 内网软件设计要领

内网软件指的是只为一个企业内部提供服务的软件,它和外网软件有个很大不同 —— 即节点数是相对稳定的而且是非常有限的,在设计时可以充分利用这一特点进行简化。比如设计一款在各IDC间传输数据(文件或消息)的软件时,完全可以建立一对一的连接(为支持重连,可以为会话Session),这不管是对有时序要求,还是无时序要求的传输,都将得到大幅度简化。应用场景:上游应用 -> 上游内网软件 --

2012-07-24 16:19:19 7709

原创 Linux与网卡相关的几个命名

2012-07-24 16:19:19 7863

原创 细节决定品质:不良的if/else使用习惯

代码重构无处不在,重点滴做起。经常见到一些下面这样的代码:1、不要拿bool和false直接比if (false == IsXXX()){}这是画蛇添足,费力不会讨好,直接了当即可:if (!IsXXX())2、太多的if/else嵌套,导致过多缩进,造成眼花缭乱,阅读困难if (){    if ()    {

2012-07-24 16:19:19 25071

原创 源于生活的设计之一:职责问题

2012-07-24 16:19:18 7687

转载 Linux下显示目录树的源代码包

2012-07-24 16:19:18 2311

原创 MOOON-scheduler设计图更新

初稿设计:http://blog.chinaunix.net/uid-20682147-id-3252602.html在上一版本的基础上,进行了细化和关系调整,并考虑了Service在线升级,升级过程中,会同时存在两个不同版本的Service,这可以从CServiceTable和CkernelService间的关系看出来,升级过程中不会有任何消息的丢失,完全无缝升级,得益于双版本同时在

2012-07-24 16:19:17 7728

原创 Linux下select使用陷阱

2012-07-24 16:19:17 12152

原创 基于/proc统计网络流量的脚本

#!/bin/sh# 下载:https://github.com/eyjian/libmooon/tree/master/shell# 流量统计工具# 可带一个两个:# 参数1:网卡名,如eth0或eth1等# 参数2:统计次数# 参数3:统计间隔(秒)# 输出格式:统计时间,入流量(Kbps),入流量(Mbps),出流量(Kbps),出流量(Mbps)# Please edit...

2012-07-24 16:19:16 12039

原创 简单的统计指定进程ID(或进程名)CPU、内存脚本

2012-07-24 16:19:16 12392

转载 linux下测试磁盘的读写IO速度

2012-07-24 16:19:16 2184

转载 Linux的Proc文件系统详解

2012-07-24 16:19:15 2345

转载 shell脚本实现对网卡流量监控

2012-07-24 16:19:14 2269

原创 MOOON-scheduler问题讨论:消息如何传递回去和主动发送出去?

2012-07-24 16:19:12 7861

转载 linux out of memory分析(OOM)

2012-07-24 16:19:12 2509

原创 设计mooon调度器遇到的难题

2012-07-24 16:19:11 384

原创 MOOON-scheduler核心设计图(初稿)

2012-07-24 16:19:11 7735

转载 使用valgrind检查cache命中率,提高程序性能

2012-07-24 16:19:10 3641

原创 disuz 7.2文字常量定义文件messages.lang.php

当需要对disuz做一些修改时,可能会涉及到这个文件。D:\hadoop\backup\20120619221410\templates\default\messages.lang.php// Message Pack for Discuz! Version 1.0.0// Created by Crossday$language = arr

2012-07-24 16:19:10 9135

原创 什么样的命名才是合理的?谈命名的原则

2012-07-24 16:19:09 7640

原创 软件技术发展的几个阶段

2012-07-24 16:19:09 10677

原创 MOOON-agent发布:MOOON-agent系统设计与使用说明

MOOON-agent系统设计与使用说明.pdf  MOOON-agent系统设计与使用说明易剑 2012/6/16目录1. 设计目标12. 应用场景23. 主要功能24. 系统骨架35. 资源接口36. 内置CommandProcessor37. 编程接口37.1. agent.h47.2. message.h57.3. m

2012-07-24 16:19:08 7901

原创 名词:topology、architecture和struct,究竟什么才是架构?

2012-07-24 16:19:07 11911

原创 养成良好的编程习惯

2012-07-24 16:19:07 8187

原创 为何有着良好设计的系统代码反而不容易看懂?

2012-07-24 16:19:07 7847

原创 全局变量相互依赖和初始化顺序的解决办法

如果是定义一个全局的map,会出现如下core:Program received signal SIGSEGV, Segmentation fault.0x00007ffff7b449ea in std::_Rb_tree_decrement(std::_Rb_tree_node_base*) () from /usr/lib/x86_64-linux-gnu/libstdc++.

2012-07-24 16:19:07 6216

原创 解决:libtool: line 815: X--tag=CXX: command not found

2012-07-24 16:19:06 9204

原创 致命错误: zlib.h:没有那个文件或目录

2012-07-24 16:19:06 1631

原创 undefined reference to `clock_gettime'

2012-07-24 16:19:06 950

ejstatd一个增强型的jstatd

jstatd启动后会打开两个端口,其中一个端口可通过参数“-p”指定,如果不指定默认为1099,另一个是一个随机端口,不能参数指定。在防火墙环境使用不便,ejstatd是jstatd的增强版本,可指定端口,方便防火墙环境中使用。

2018-12-05

开源C++版本CGI库CGICC入门

  CGICC是一个C++语言实现的开源CGI库,采用LGPL授权协议,使用较为简单。   CGICC官网:http://www.gnu.org/software/cgicc/,截止2015/3/14,CGICC最新稳定版本为3.2.16,下载地址是:http://ftp.gnu.org/gnu/cgicc/cgicc-3.2.16.tar.gz,最新更新时间为2014/12/7(令人惊讶和欣慰的是作为古老的CGI,CGICC还在不断的更新)。

2018-12-04

Redis-5.0.0集群配置

  本文档基于以前写的《Redis-3.0.5集群配置》和《Redis-4.0.11集群配置》。   redis-3.0.0开始支持集群,redis-4.0.0开始支持module,redis-5.0.0开始支持类似于kafka那样的消息队列。   本文参考官方文档而成:http://redis.io/topics/cluster-tutorial,不适用redis-5.0.0以下版本,原因是从redis-5.0.0版本开始,redis-trib.rb的功能被redis-cli替代了。   redis-5.0.0以下版本的安装和部署,可参考:https://blog.csdn.net/Aquester/article/details/50150163。   redis运维工具和部署工具:https://github.com/eyjian/redis-tools。

2018-11-01

互联网后台开发需要掌握什么?

  本文内容仅针对互联网后台开发从业人员。   互联网后台开发,通常意味着分布式、大数据,涉及到高性能、系统容灾、数据容灾、高可用性、数据一致性等。自从2008年Hadoop在华夏大地蓬勃发展,开源如火山爆发在业界百花齐放,茁壮成长。国内的BAT、华为和小米等也大量的参与了国际开源,甚至开源了大量优秀的久经考验的内部系统,如阿里的Tair、druid、fastjson、jstorm、AliSQL、RocketMQ和腾讯的RapidJSON、libco、PhxPaxos、PhxRPC、PhxQueue、PhxSQL、PaxosStore、MSEC、Tars、TAF等。 开源如此繁荣,需要感谢Google的三篇论文:《The Google File System》、《MapReduce: Simplified Data Processing on Large Clusters》和《Bigtable: A Distributed Storage System for Structured Data》,Google开源的Protocol buffers等对整个业界作用也十分巨大。

2018-11-01

大数据利器2018版

当下最流行的各类大数据、云计算开源资源列表,如:hadoop、spark、flink、hbase、redis等

2018-11-01

SSH2免密码登录OpenSSH

如何确定是OpenSSH还是SSH2? 执行命令“ssh -V”,通过它的输出,即可确定: SSH2 ssh: SSH Secure Shell 3.2.9.1 (non-commercial version) on OpenSSH OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010

2018-10-11

两个openssh间免密码登录

以下针对的是openssh,而不是ssh,也不是ssh2。配置分两部分:一是对登录机的配置,二是对被登录机的配置,其中登录机为客户端,被登录机为服务端,也就是解决客户端到服务端的无密码登录问题。下述涉及到的命令,可以直接拷贝到Linux终端上执行,已全部验证通过,操作环境为CentOS Linux release 7.0。 如何确定是OpenSSH还是SSH2?执行命令“ssh -V”,通过它的输出,即可确定

2018-10-11

OpenSSH登录SSH2

如何确定是OpenSSH还是SSH2? 执行命令“ssh -V”,通过它的输出,即可确定: SSH2 ssh: SSH Secure Shell 3.2.9.1 (non-commercial version) on OpenSSH OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010

2018-10-11

两个SSH2间免密码登录

以下针对的是ssh2,而不是ssh,也不是OpenSSH。配置分两部分:一是对登录机的配置,二是对被登录机的配置,其中登录机为客户端,被登录机为服务端,也就是解决客户端到服务端的无密码登录问题。下述涉及到的命令,可以直接拷贝到Linux终端上执行,已全部验证通过,操作环境为SuSE 10.1。

2018-10-11

Hadoop-2.8.0分布式安装手册

  当前版本的Hadoop已解决了hdfs、yarn和hbase等单点,并支持自动的主备切换。   本文的目的是为当前最新版本的Hadoop 2.8.0提供最为详细的安装说明,以帮助减少安装过程中遇到的困难,并对一些错误原因进行说明,hdfs配置使用基于QJM(Quorum Journal Manager)的HA。本文的安装只涉及了hadoop-common、hadoop-hdfs、hadoop-mapreduce和hadoop-yarn,并不包含HBase、Hive和Pig等。   NameNode存储了一个文件有哪些块,但是它并不存储这些块在哪些DataNode上,DataNode会上报有哪些块。如果在NameNode的Web上看到“missing”,是因为没有任何的DataNode上报该块,也就造成的丢失。

2018-09-11

ZooKeeper-3.4.6分布式安装指南

  介绍ZooKeeper-3.4.6版本的分布式安装,力求细致,提供精确的安装指导。本文的安装环境是64位的SuSE 10.1 Linux,也适用于ZooKeeper-3.4.8。   ZooKeeper节点间不需要互登录,因此不用配置免密码登录。

2018-09-10

LVS初步入门

  很多人知道LVS,但可能知之不多,希望阅读本文后,能够对LVS有一个基本的感性认识。   LVS是国内最早出现的自由软件之一,由国防科技大学章文嵩博士在1998年5月创立,章博士目前是淘宝网高级研究员,是淘宝网核心系统负责人。 LVS首要的是解决路由问题,结果不但解决了耦合问题,实现了网络隔离,而且顺带实现了负载均衡,负载均衡复杂的地方在于不同的均衡策略。常常均衡和路由成对出现,象分布式中的一致性哈希,也是路由和均衡,实际上还达到了容灾的效果,可以说是一举多得。

2018-09-10

磁盘文件读性能测试

硬盘读取性能: hdparm -t /dev/sdb /dev/sdb: Timing buffered disk reads: 2454 MB in 3.00 seconds = 817.84 MB/sec 10块物理磁盘,做了Raid10,因此读性能高,达每秒817.84MB。

2018-09-10

快速上手,协程剖析

协程也叫微线程,英文名称为 coroutine。一个进程可以有多个线程,一个线程可以有多 个协程,这是协程和线程间的关系。不同的是,线程由系统调度,但协程需要自己调度,协 程运行在用户态。

2018-09-10

理解snprintf()函数

在编程中,需要关注snprintf()的两个问题:一是它的返回值,二是它的第二个参数。

2018-09-10

madvise、fadvise、posix_madvise和posix_fadvise函数的使用

  系统调用madvise的作用:建议内核如何使用指定段的内存,可配合mmap使用。函数原型如下: #include int madvise(void *addr, size_t length, int advice);

2018-09-10

Redis-4.0.11集群配置

版本:redis-3.0.5 redis-3.2.0 redis-3.2.9 redis-4.0.11 参考:http://redis.io/topics/cluster-tutorial。 集群部署交互式命令行工具:https://github.com/eyjian/redis-tools/tree/master/deploy 集群运维命令行工具:https://github.com/eyjian/redis-tools/tree/master 批量操作工具:https://github.com/eyjian/libmooon/releases

2018-09-10

Thrift结构分析及增加取客户端IP功能实现

  分析Thrift的结构动机是为了实现服务端能取到客户端的IP,因此需要对它的结构、调用流程有些了解。另外,请注意本文针对的是TNonblockingServer,不包含TThreadPoolServer、TThreadedServer和TSimpleServer。   thrift对网络连接没有使用内存池,最直接简单的性能优化是绑定Google gperftools中的TCMalloc。

2018-09-10

再议GCC编译时的静态库依赖次顺问题

这个问题的原因是b.cpp依赖a.cpp,gcc要求(实际是ld要求)libb.a须放在liba.a前面,即需要改成:g++ -g -o x x.o libb.a liba.a,也就是被依赖的库需要放在后头。 这是最常规的解决办法,除此之外,只需要加入--start-group和--end-group两个链接参数,即可保持被依赖的库放在前头,也就是改成如下即可:g++ -g -o $@ -Wl,--start-group $^ -Wl,--end-group。 这里的“-Wl,”表示后面跟着的参数是传递给链接器ld的,gcc不关心具体是啥。“--start-group”表示范围的开始;“--end-group”表示范围的结束,是可选的。位于“--end-group”之后的仍然要求被依赖的库放在后头。

2018-09-10

C++鲜为人知的符号

  这些鲜为人知的C++符号,可直接在代码中使用,但实践中不推荐这么做,可作为茶余饭后的乐趣了解C++的另一面。   虽然它们鲜为人知,但却不是GNU g++独有的,而是C++标准定义的,找一本C++标准书或pdf文档看看,就可以见到它们赫然在目。(注:C++17标准将干掉这些鲜为人知的符号)

2018-09-10

__lll_mutex_lock_wait的错误原因

(gdb) bt #0 0x00002b9405ea1c38 in __lll_mutex_lock_wait () from /lib64/libc.so.6 #1 0x00002b9405e45e5f in _L_lock_4026 () from /lib64/libc.so.6 #2 0x00002b9405e42df1 in free () from /lib64/libc.so.6 #3 0x00002b9405e5b148 in tzset_internal () from /lib64/libc.so.6 #4 0x00002b9405e5b9d0 in tzset () from /lib64/libc.so.6 #5 0x00002b9405e5fe44 in strftime_l () from /lib64/libc.so.6 #6 0x00002b9405e93701 in __vsyslog_chk () from /lib64/libc.so.6 #7 0x00002b9405e3c6d0 in __libc_message () from /lib64/libc.so.6 #8 0x00002b9405e4177e in malloc_printerr () from /lib64/libc.so.6 #9 0x00002b9405e42dfc in free () from /lib64/libc.so.6 #10 0x00000000004007c9 in main (argc=1, argv=0x7fffa524f4d8) at x.cpp:17

2018-09-10

nohup、&、setsid、fork和fg、bg究竟有啥区别?

  子进程从父进程继承了:SessionID、进程组ID和打开的终端。子进程如果要脱离这些,代码中可通过调用setsid来实现。,而命令行或脚本中可以通过使用命令setsid来运行程序实现。setsid帮助一个进程脱离从父进程继承而来的已打开的终端、隶属进程组和隶属的会话。   需要注意,代码中调用setsid是有条件的:即调用进程自己不能是进程组长。因此,调用setsid之前需要先fork,然后由产生的子进程调用setsid。

2018-09-09

零停重启程序工具Huptime研究

  零停重启目标程序,比如一个网络服务程序,不用丢失和中断任何消息实现重新启动,正在处理的消息也不会中断和丢失,重启的方法是给目标程序的进程发SIGHUP信号。

2018-09-09

iwlwifi-9000-pu-b0-jf-b0-34.618819.0.tar.gz

联想笔记本上Ubuntu无线网卡驱动,安装方法请参见博文:https://blog.csdn.net/Aquester/article/details/103655720。

2020-02-04

Linux后台开发工具箱-葵花宝典.pdf

本文是个大杂烩,内容为日常点滴的日积月累,持续更新当中,可关注博客(https://blog.csdn.net/Aquester或http://aquester.blog.chinaunix.net),查看最新版本。文中的内容,可帮忙开发提升分析和定位各类问题,比如找出导致IO负载高的进程等,以及一些简单的运维工作等。

2020-01-15

Docker入门之安装Docker.pdf

本文操作基于CentOS7,其它Linux发行版本可能存在差异,分基于yum的在线安装和基于二进制包的离线安装(实际还有基于rpm包的离线安装),离线安装可以更多地了解Docker及相关体系。 Docker要求Linux内核版本不低于3.10,并且必须为64位系统,执行命令“docker version”可查看Docker版本。 CentOS7防火墙默认采用的是firewalld管理netfilter子系统,底层调用的仍然是iptables命令,firewalld实际是iptables的一个封装。不同的防火墙相互间存在冲突,使用某其中一个时应禁用其他的。 谨记:容器运行在Linux内核之上,不包含位于内核之上的glibc等库,以及ls等命令。如果容器中的程序依赖glibc等库或者依赖ls等命令,则容器自身应当包含这些设施。另外,容器中的程序等必须和内核兼容,否则将会遇到“FATAL: kernel too old”错误,该错误和库文件ld-linux.so有关。

2020-01-14

服务网格代理Envoy入门.pdf

Envoy是什么? Envoy是Lyft开源的一个C++实现的代理(Proxy),和Nginx及HAProxy类似,可代理L3/L4层和L7层。代理是它最核心和基础的功能,它也是服务网格框架Istio的Sidecar。

2020-01-07

Docker入门之创建镜像初步.pdf

本文介绍在CentOS7上从构建一个最简单无依赖的镜像开始,逐步揭示Docker镜像的构建和Dockerfile的应用。 什么是镜像?可理解镜像(image)为一个可执行程序文件,而容器(container)则是进程(运行态),Kubernetes(即k8s)中的概念POD则相当于进程组。 谨记:容器运行在Linux内核之上,不包含位于内核之上的glibc等库,以及ls等命令。如果容器中的程序依赖glibc等库或者依赖ls等命令,则容器自身应当包含这些设施。另外,容器中的程序等必须和内核兼容,否则将会遇到“FATAL: kernel too old”错误,该错误和库文件ld-linux.so有关。

2019-12-23

rapidjson常见使用示例.pdf

rapidjson相比jsoncpp性能高出太多,使用接口一样的简单的。官方中文帮助文档:http://rapidjson.org/zh-cn/。

2019-12-02

车世界-车的知识大全

如何区别进口,还是合资车?合资车通常在车尾贴有合资厂商的中文名称,如:一汽丰田、长安福特等,进口则无。 什么是GT跑车?拉丁文Gran Turismo,英文翻译为Grand Touring。Grand的意思是大,而Touring的意思是旅行。Grand Touring加在一起,其实是解作大型的旅行车。 在赛车界中,GT就是被指为拥有大马力动力输出,同时有车顶设计的双门双人所乘坐的超级跑车(开蓬跑车不能算为GT赛车),因此GT的中文名称或许应该称之为世界上最顶级的超级跑车。 什么是掀背?顾名思义就是“能掀起来的后背”,而汽车的后背就是后备箱盖,掀背车型就是整个后备箱盖和后车窗玻璃是一体的能够一起打开的车型,多见于两厢车。 什么是SUV?全称是Sport Utility Vehicle,中文意思是运动型多用途汽车。分两类:城市型和越野型。 什么是MPV?全称是Multi-Purpose Vehicles,中文意思是多用途汽车。同小型面包车存在明显的区别,面包车是单厢式结构,即乘客空间和发动机共同在一个框架结构内,发动机被安放在驾驶员座位的后下方。 豪华车通常指D级车,是英文Luxury

2019-11-12

基于zookeeper-3.5.5安装hadoop-3.1.2.pdf

截至本文撰写时(2019/9/17日),Hadoop最高版本为3.2.0,但适用于生产环境的为3.1.2(9月22日发布了可用于生产环境的3.2.1版本),本文只介绍3.1.2版本的分布式安装,不包含单机版安装。适用于Hadoop-3.1.3版本,所操作的环境为CentOS-7.2,对应的Linux内核版本为3.10,不同的Linux可能略有区别。 为提升安装效率,本文的安装过程使用了批量命令工具和批量上传文件工具。批量操作工具的下载和使用,请参见《附2:批量操作工具》。

2019-11-09

在hadoop-3.1.2上安装hbase-2.2.1.pdf

本文将HBase-2.2.1安装在Hadoop-3.1.2上,关于Hadoop-3.1.2的安装,请参见《基于zookeeper-3.5.5安装hadoop-3.1.2》一文。安装环境为64位CentOS-Linux 7.2版本。 本文将在HBase官方提供的quickstart.html文件的指导下进行,在docs/getting_started目录下可找到quickstart.html,或直接浏览在线的:http://hbase.apache.org/book/quickstart.html。 安装使用外置的ZooKeeper,有关ZooKeeper的安装,请参见《基于zookeeper-3.5.5安装hadoop-3.1.2》一文。 关于分布式安装,请浏览:http://hbase.apache.org/book/standalone_dist.html#distributed,关于HBase使用外置的ZooKeeper配置,请浏览:http://hbase.apache.org/book/zookeeper.html。所有在线的文档,均会出现在二进制安装包解压后的docs目录下

2019-11-09

Linux后台开发工具箱-葵花宝典.pdf

本文是个大杂烩,内容为日常点滴的日积月累,持续更新当中,可关注博客(https://blog.csdn.net/Aquester或http://aquester.blog.chinaunix.net),查看最新版本。文中的内容,可帮忙开发提升分析和定位各类问题,比如找出导致IO负载高的进程等,以及一些简单的运维工作等。

2019-11-08

C++之Lambda研究.pdf

  本文代码测试环境为“GCC-9.1.0”,有关编译器的安装请参考《安装GCC-8.3.0及其依赖》,适用于“GCC-9.1.0”。   本文试图揭露Lambda背后一面,以方便更好的理解和掌握Lambda。Lambda代码段实际为一个编译器生成的类的“operator ()”函数,编译器会为每一个Lambda函数生成一个匿名的类(在C++中,类和结构体实际一样,无本质区别,除了默认的访问控制)。   对Lambda的最简单理解,是将它看作一个匿名类(或结构体),实际上也确实如此,编译器把Lambda编译成了匿名类。

2019-05-30

安装GCC-8.3.0及其依赖

  为体验C++17和C++20特性,需安装更新版本的GCC编译器。GCC官网为:https://gcc.gnu.org/,从这里可以下载最新版本的GCC。   C++由Bjarne Stroustrup(被誉为C++之父)于1979年在新泽西州美利山贝尔实验室开始设计开发的,最初命名为带类的C,后来在1983年更名为C++。

2019-05-01

REdis命令处理流程处理分析

  分析版本:REdis-5.0.4。   REdis命令处理流程可分解成三个独立的流程(不包括复制和持久化): 接受连接请求流程; 接收请求数据和处理请求流程,在这个过程并不会发送处理结果给Client,而只是将结果数据写入响应缓冲,将由响应请求流程来发送; 响应请求流程。   上述三个流程均是异步化的,并且没有直接的联系。它们的共同点均是通过REdis的简单事件驱动(AE,A simple event-driven)触发,对于Linux实际是epoll的包装,对于macOS为evport的包装,对于FreeBSD对kqueue的包装,对于其它则是select的包装。

2019-04-01

严格别名规则“-fstrict-aliasing”和“-fno-strict-aliasing”及类型双关

  “-fstrict-aliasing”表示启用严格别名规则,“-fno-strict-aliasing”表示禁用严格别名规则,当gcc的编译优化参数为“-O2”、“-O3”和“-Os”时,默认会打开“-fstrict-aliasing”。 什么是严格别名规则?gcc对严格别名的定义:

2019-01-30

源码解读Linux的limits.conf文件

本文不一定适合比较老版本的Linux,如果只关心使用,请直接看“总结”,本文主要针对CentOS,其它Linux发行版本类似,但细节可能有出入,比如重启服务可能不是用systemctl,而是service等。

2019-01-30

std::string的find问题研究

一次偶然,发现完全同一份代码,在不同机器上find出现两个不同执行结果,本文旨在研究find的“诡异”行为,找出背后的原因。

2018-12-19

x86_64汇编调试程序初步

  掌握此基础,就可以用来修改无源代码的程序等,比如希望jstatd在指定的端口上监听,而不是一个值为0的随机端口号,请参见《防火墙内JVisualVM连接jstatd解决方案》。

2018-12-05

空空如也

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

TA关注的人

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