Hexo的多种Markdown渲染器对比分析
Hexo 作为一个优秀的 Markdown 博客框架,自然也诞生了很多适用的 Markdown 渲染器,这里对比分析一下 Hexo 下几种常用的 Markdown 渲染器: hexo-renderer-marked , hexo-renderer-kramed , hexo-renderer-pandoc , hexo-renderer-markdown-it , hexo-renderer-markdown-it-plus ,本文使用的渲染器为: hexo-renderer-markdown-it-plus 。 一、详细介绍1.1、hexo-renderer-markedHexo默认的Markdown的渲染器,针对于普通的Markdown的文章书写,该渲染器已经足够,但是由于不支持Mathjax,不支持插件扩展,不支持emoji表情,所以该渲染器也是介绍的渲染器中功能最弱的。 GitHub地址:hexojs/hexo-renderer-marked NPM地址:hexo-renderer-marked 版本:2.0.0 最近提交:a month ago 依赖:h...
Markdown中支持LaTex数学公式
一、引言Markdown在目前无疑是一个比较好的写作方式,但是它时候和大部分的写作软件一样,在一些数据公式的编写上,只能引入图片呢?除了引用图片之外是不是还有更好的数学公式编辑手段呢?这里主要介绍一下LaTex Math在Markdown上的支持。 本博客目前采用hexo-renderer-kramed渲染器替换了Hexo自带的hexo-renderer-marked渲染器来支持LaTex; LaTex介绍LaTex是一种基于TeX的排版系统,LaTeX使用TeX作为它的格式化引擎,LaTeX遵循呈现与内容分离的设计理念,以便作者可以专注于他们正在编写的内容,而不必同时注视其外观。在准备LaTeX文档时,作者使用章(chapter)、节(section)、表(table)、图(figure)等简单的概念指定文档的逻辑结构,并让LaTeX系统负责这些结构的格式和布局。因此,它鼓励从内容中分离布局,同时仍然允许在需要时进行手动排版调整。这个概念类似于许多文字处理器允许全局定义整个文档的样式的机制,或使用层叠样式表来规定HTML的样式。LaTeX系统是一种可以处理排版和渲染的标记语言。...
Charles工具的介绍与使用
Charles 是 MacOS 上十分好用的一款抓包工具,它不仅可以抓取明文数据包,也可以在手机端安装相关 SSL 证书后抓取加密的数据包,对于分析手机端应用的交互行为十分有帮助,本文中使用的版本为 4.2.8,这里记录一下如何使用 Charles 在 MacOS 下对于安卓手机进行抓包。 一、环境配置与要求 环境与软件:自行安装,不做介绍 环境: Charles 本身依赖于 Java 环境,因此需要确保 MacOS 本身已经安装配置完成 Java 的环境; 软件: MacOS 端安装成功 Charles ,并且配置完成所需要抓取的网址信息; 设备关联:手机和 Mac 处于同一个局域网中,并且将指定的代理服务器配置为 Charles 实际所监听的 IP 和端口; 证书安装:手机安装完成 Charles SSL CA 证书,证书的获取方式下文会详细介绍(仅用于抓取 HTTPs 的数据包); 抓包分析:开始抓包分析即可; 二、MacOS 端软件配置 安装 Charles HTTPS 证书 :依次点击 Help ,SSL Proxying ,Install Charles Roo...
为什么RedisCluster采用16384个槽位?
一、引言RedisCluster目前使用的计算slot槽位的算法为CRC16,该算法本身会产生的hash值的大小为16bit,因此该算法可以产生2^16=65536个不同的值,取值范围为0~65535之间,从下面的代码中我们看到,目前限制的slot槽位的个数为16384(相关的代码为crc16(key+s+1,e-s-1) & 0x3FFF); /* We have 16384 hash slots. The hash slot of a given key is obtained * as the least significant 14 bits of the crc16 of the key. * * However if the key contains the {...} pattern, only the part between * { and } is hashed. This may be useful in the future to force certain * keys to be in the same ...
Redis的多线程特性
Redis6.0即将发布,比较吸引我的便是Redis6.0支持的多线程技术,Redis本身也并不是简单的单进程/线程模型,包括bgsave的进程以及对于一些慢请求的io线程(惰性删除,日志刷盘等),这次多线程的优化主要解决了Redis单进程/线程处理模型在协议解析以及网络IO上的消耗问题,在命令的处理上仍旧是单线程。 一、逻辑分析2.1、两个配置 io-threads:启用的IO的线程数,最大为128(老版本中配置判断为512,新版本已经修复统一为128); io-threads-do-reads:是否启用IO多线程; 2.2、两个队列 clients_pending_read:待处理的客户端的请求数据队列(需要进行协议解析等操作); clients_pending_write:待处理的客户端的回复数据队列(需要进行回复客户端等操作); 2.3、两类线程注意:启用的所有的多线程在同一时刻执行的任务类型是一样的 IO_THREADS_OP_WRITE:执行clients_pending_read任务的线程; IO_THREADS_OP_READ:执行cli...
使用FPM优雅的进行rpm打包
一、介绍对于有过构建rpm安装包相关操作的应该知道可以使用spec文件以及rpmbuild指令进行打包操作,不过spec文件的编写也是一个十分令人头懂的事情,我之前曾经有过一篇使用spec文件打包的文章,参考RPM打包记录,这里介绍一个更高效,更人性化的打包工具:FPM。 FPM是一个快速高效的打包工具,该工具本身为Ruby的一个模块,因此使用该工具之前需要安装Ruby; 二、安装与使用2.1、安装# 安装rubyyum -y install ruby rubygems ruby-devel# 替换国内的ruby镜像gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/# 验证镜像是否替换成功gem sources -l# 安装fpmgem install fpm 2.2、参数介绍-f :强制覆盖[覆盖同名rpm包]-n :指定的rpm包名-p :指定的rpm包文件放置位置,最后将rpm存放在该路径下;-v :指定的rpm包版本-d :指定依赖的软件 ( [-d '...
BloomFilter 和 CuckooFilter 对比解析
BloomFilter 和 CuckooFilter 都是一种用于数据存在性判断的数据结构。布隆过滤器早在 1970 年就被提出,它由一个二进制向量数组和一系列随机映射函数组成。它可以用于检索一个元素是否一定不在集合中或者可能存在集合中。布谷鸟过滤器的提出相对较晚,它创新性的提出了可以删除的实现方式,解决了布隆过滤器无法删除数据的痛点。这两者各有优劣,需要结合具体的使用姿势来进行选择。 一、BloomFilterBloom Filter(布隆过滤器)是1970年由布隆提出的,它由一个二进制向量数组和一系列随机映射函数组成。它可以用于检索一个元素是否一定不在集合中或者可能存在集合中。 《Space/Time Trade-offs in Hash Coding with Allowable Errors》 1.1、实现原理 初始化内存区域:在内存中开辟一块储存空间,并将里面的比特位全部初始化为0; 设置k个hash函数:初始化k个hash函数,用于元素的数据映射; 比特位映射:通过k个hash函数,将元素映射到存储空间对应的比特位,并将对应的比特位设置为1; 1.2...
记一次nf_conntrack模块导致的丢包问题
一、背景我们灰度线上业务的时候,有一次遇到了业务反馈资源没有读写,当时正好将流量切到了线上的一台机器上,在将业务的资源迁移回滚之后,经过一番查找,发现/var/log/message中打印了很多关于kernel: nf_conntrack: table full, dropping packet的错误信息,网上查找了一下,这个错误主要是由于启用了nf_conntrack模块,之前很多人都遇到了这个问题,解决方案也很多,这里以我的角度详细记录一下,/var/log/message中错误信息如下: Jul 30 11:50:01 dbl14192 systemd: Starting Session 486429 of user root.Jul 30 11:50:02 dbl14192 kernel: nf_conntrack: table full, dropping packetJul 30 11:50:02 dbl14192 kernel: nf_conntrack: table full, dropping packetJul 30 11:50:02 dbl14192 ker...
Perf与火焰图
一、PerfPerf 是基于Linux 2.6+系统的一款性能分析工具。它可以用来分析应用程序和内核的性能问题,从而全面理解应用程序中的性能瓶颈。 [root@bugwz ~]# perf --help usage: perf [--version] [--help] [OPTIONS] COMMAND [ARGS] The most commonly used perf commands are: annotate Read perf.data (created by perf record) and display annotated code archive Create archive with object files with build-ids found in perf.data file bench General framework for benchmark suites buildid-cache Manage build-id cache. buildid-list List...
漏桶与令牌桶速率限制算法
一、漏桶算法漏桶算法(Leaky Bucket)是网络世界中流量整形(Traffic Shaping)或速率限制(Rate Limiting)时经常使用的一种算法,它的主要目的是控制数据注入到网络的速率,平滑网络上的突发流量。漏桶算法提供了一种机制,通过它,突发流量可以被整形以便为网络提供一个稳定的流量。示意图如下所示: 1.1、算法过程 数据包入队列:数据包按照一定的顺序存储入用于临时存储的缓存队列(数据桶)中; 数据包等待或溢出:数据包在缓存队列(数据桶)中等待一段时间,或者如果此时缓存队列(数据桶)已经达到存储的上限,数据包溢出(被丢弃); 数据包出队列:将缓存队列(数据桶)中的数据包按照固定的速率依次出队列并进行处理; 1.2、特点 优点: 能够强行限制数据的传输速率; 保证严格的延迟界限; 缺点: 对突发性的流量缺乏处理效率; 1.3、相关项目 Nginx中关于漏桶的设计与实现:ngx_http_limit_req_module 模块中的ngx_http_limit_req_lookup函数(位于./src/http/modules/ngx_http_li...

