- 博客(190)
- 资源 (1)
- 收藏
- 关注
原创 Redis深度解析系列文章
在研究Redis过程,收集到的比较好的文章,整理到这里,方便后续查阅内存模型Redis内存模型技术面试面试中关于Redis的问题看这篇就够了
2020-07-08 23:01:50 657
原创 使用c++filt工具demangle C++符号
demangle符号名在调试C++程序时, 经常会遇到未demangle的C++符号名, 不了解mangle的规则时, 并不太容易确定具体是哪个API. 比如, 使用objdump将boost日志动态库的符号表导出, 你是否能够很快辨别出对应的实际的函数名称.[jinguang1@centos7-dev ~]$ objdump -T /usr/lib/libboost_log.so/usr...
2019-10-25 22:38:19 3574
原创 Faiss源码解析 - Index抽象类介绍(一)
本系列文章基于Faiss 1.5.3版本的代码进行分析。相似性搜索介绍Faiss是Facebook AI团队开源的针对聚类和相似性搜索库,为稠密向量提供高效相似度搜索和聚类,是目前比较成熟的近似近邻搜索库。以图片搜索为例,所谓相似度搜索,就是在给定的图片中,寻找出指定的图片最像的K张图片,本质上为KNN(K近邻)问题。为了解决KNN问题,在工程上需要对现有图片库的特征向量进行存储。当用户指...
2019-07-11 21:35:33 4432 3
原创 高性能Linux: SSD分区对齐问题
分区对齐分区对齐意味着分区与数据存储设备(例如硬盘,固态驱动器(SSD)或RAID卷)的合理的边界对齐。正确的分区对齐可确保数据访问期间的理想性能。不正确的分区对齐将导致性能降低,尤其是SSD(内部页面大小为4,096或8,192字节),具有4,096字节扇区和RAID卷的硬盘。分区历史过去,第一个分区始终在LBA(Logical Block Address)地址63处开始,该地址对应于第6...
2019-07-11 17:18:11 4216
原创 Redis源码分析:字典实现(二)
本文分析的是Redis的版本为4.0.11。接口实现本文继续分析字典的接口实现。添加在分析键值对添加接口实现前,先来分析一下_dictKeyIndex()函数实现。该函数根据提供key、哈希值来获取哈希表的插入位置。如果该key在哈希表中已存在,可以通过existing参数返回dictEntry地址,并将返回值设置为-1,表示key已存在。如果dict正在进行重新哈希的过程,需要在新旧两个...
2019-07-08 11:50:59 348 1
原创 Redis源码分析:字典实现(-)
本文分析的是Redis的版本为4.0.11。字典(dictionary)键值数据库(key-value store)是字典的数据结构,键(key)和值(value)进行关联,形成键值对,所有数据库的操作都是通过主键(primary key)来实现的。除了用作表示数据库外,字典还是Redis底层哈希键的底层实现。字典结构定义字典结构定义位于dict.h文件中。先来看一下字典结构的定义:/*...
2019-07-03 20:02:56 398
原创 Kubernetes: Python Client快速入门
简介本文总结了Kubernetes的Python Client的安装及使用示例,以帮助读者能够快速了解Pyhont Client的接口使用。安装如果是安装的Anaconda的环境,可以使用下列命令来进行安装Client库:conda install -c conda-forge kubernetes 使用PyPi,直接运行下列命令:pip install kubernetes使用...
2019-04-13 17:22:04 6545
原创 kubernetes: 如何自动生成join master的命令
Token有效期通过kubeadm init初始化时,会提供加入master节点所需的命令,包含Token和ca证书的sha256的散列值,但这个Token值仅有24小时的有效期。[root@host10-30-21-63 cluster-setup]# kubeadm token listTOKEN TTL EXPIRES ...
2019-04-10 15:57:16 5573
原创 Kubernetes:etcd堆叠的HA方案下如何重置master节点
etcd堆叠的HA方案官网给出的etcd的HA方案如下:参考资料https://kubernetes.io/docs/setup/independent/ha-topology/https://access.redhat.com/documentation/en-us/openshift_container_platform/3.10/html/cluster_administrati...
2019-04-10 15:12:12 1993
原创 使用kubectl explain来了解可能的API对象字段
了解API对象属性的方法在准备manifest文件时,可以参考kubernetes官网的http://kubernetes.io/docs/api参考文档,来了解API对象支持的属性,也可以使用kubectl explain命令。很多时候,使用后者更便捷。如何使用kubectl explain命令从零开始以编写POD的manifest文件,可以使用该命令先了解pod的相关规格:[jingu...
2019-03-22 09:56:10 6826
原创 高性能Linux:TCP/IP内核参数调优之TCP窗口扩大因子(TCP Window Scaling)选项(理论篇)
TCP报文头部窗口字段介绍在TCP报文头部,有一个16比特的窗口字段,用来表示接受方的缓冲区大小,发送方可以根据这个值的大小来调节发送的数据量,从而起到流控的目的。T C P的流量控制由连接的每一端通过声明的窗口大小来提 供 。窗口大小为字节数 ,起始于确认序号字段指明的值,这个值是接收端正期望接收的字节。窗口大小是一个16 bit字段,因而窗口大小最大为65535字节。...
2019-03-04 20:56:55 11544
原创 librdkafka: 如何设置Kafka消费者订阅消息的起始偏移位置
缺省配置默认情况下,Kafka消费者从最后一次提交的偏移量位置(offset)开始消费消息,如果Topic+Partition和Group之前没有提交过偏移量,它订阅消息开始位置取决于Topic的配置属性auto.offset.reset的设置。默认为最新(latest),也就是在分区末尾开始消耗(仅消费新消息)。相关配置可以参考官方文档:https://kafka.apache.org/doc...
2019-02-28 19:33:14 11569
原创 Zookeeper C客户端库编译
简介wget https://github.com/apache/zookeeper/archive/release-3.4.13.tar.gzyum install cppunit-develant compile_juteant clean jar[root@centos7-dev c]# makemake all-ammake[1]: Entering directory `...
2019-02-13 19:40:33 6809
原创 如何在VirtualBox客户机使用符号连接
问题描述今天在VirtualBox CentOS客户机上编译kafka C客户端库时,发现下面的问题:rm -f "librdkafka.so" && ln -s "librdkafka.so.1" "librdkafka.so"ln: failed to create symbolic link ‘librdkafka.so’: Read-only file system...
2019-01-21 22:26:08 372
原创 LevelDB专栏文章索引
简介本文为作者关于LevelDB的系列文章做的索引,方便阅读。LevelDB C++教程1. LevelDB: Linux下编译与安装2. LevelDB: Linux系统中安装snappy3. LevelDB: 如何打开和关闭数据库LevelDB源码分析1. LevelDB源码分析:理解Slice实现 - 高效的LevelDB参数对象...
2018-12-15 23:49:11 529
原创 LevelDB源码分析:理解Slice实现 - 高效的LevelDB参数对象
简介Slice在LevelDB中作为高效的参数对象而设计,你可以使用任何数据类型来创建leveldb::Slice对象,而且这些对象在LevelDB的很多接口中作为参数来进行传递。本文将介绍LevelDB重要的参数对象Slice的实现,涉及的LevelDB的版本为1.20。Slice实现Slice类的实现在include/leveldb/slice.h中:class Slice { pu...
2018-12-15 23:35:52 1626
原创 LevelDB C++教程: 如何打开和关闭数据库
简介leveldb提供持久键值存储功能。键和值是任意字节数组。根据用户指定的比较函数,在键值存储区内对键进行排序。本文将介绍leveldb的打开和关闭数据的基本操作,为后面的键值存储操作做准备。代码示例下面的代码功能实现了完整的打开和关闭数据库的功能,下面会对代码来进行逐一讲解:#include <iostream>#include <cassert>#inc...
2018-12-13 22:15:53 1914
原创 LevelDB C++教程: Linux系统中安装snappy
snappy简介Snappy(以前称Zippy)是Google基于LZ77的思路用C++语言编写的快速数据压缩与解压程序库,并在2011年开源。它的目标并非最大压缩率或与其他压缩程序库的兼容性,而是非常高的速度和合理的压缩率。使用一个运行在64位模式下的酷睿i7处理器的单个核心,压缩速度250 MB/s,解压速度500 MB/s。压缩率比gzip低20-100%。Snappy广泛应用在Goog...
2018-12-10 13:17:06 1967
原创 LevelDB C++教程: Linux下编译与安装
简介leveldb是由google开发的键值存储库,它提供了由字符串键到字符串值的映射,本文介绍如何在Linux下编译安装leveldb。源码下载使用git可以下载最新的leveldb的源码,目前最新的发布版本为v1.20。git clone https://github.com/google/leveldb.git编译安装leveldb支持cmake,可以通过下列的命令非常容易的进...
2018-12-10 11:40:48 1482 3
原创 Matplotlib: Max OSX系统上pyplot.show()无法显示图片问题分析
问题描述环境配置:系统运行Max OSX 10.14.1版本,Anaconda的Python版本为3.6.5,控制台使用的iTerm2。需要用matplotlib绘制披萨尺寸与价格关系图片,代码非常简单:import matplotlibimport matplotlib.pyplot as pltx = [[6], [8], [10], [14], [18]]y = [[7], ...
2018-12-08 23:24:52 2269 1
原创 Linux: 获取硬盘的UUID信息
简介UUID(英语:Universally Unique Identifier,通用唯一识别码),是用于计算机体系中以识别信息数目的一个128位标识符。UUID可以用来标识与安装点(mount point)或名称无关对设备。现在许多设备都支持热插拔(hot-plugging)功能,因此,有时需要通过UUID而非设备名称来访问设备。本文将介绍如何在Linux中查看硬盘都UUID信息。硬盘UUID...
2018-12-07 09:28:03 13939
原创 scikit-learn: 使用conda安装scikit-learn
安装如果使用的Anaconda发布的Python版本,可以使用下列命令来安装scikit-learn机器学习库:conda install -c anaconda scikit-learn验证安装完成以后,可以使用下列的方法来进行版本的简单验证,从显示的版本信息上看,目前作者使用的版本号为0.19.1的scikit-learn:bj-m-211510a:tools jinguang...
2018-11-28 10:42:11 46542 3
原创 tensorflow:使用conda安装tensorflow
如果使用对是Ananconda发布的Python版本,可以使用下列命令安装tensorflow:conda install -c conda-forge tensorflow
2018-11-27 10:02:01 2887 2
原创 kazoo安装方法
kazoo安装方法kazoo介绍使用conda安装kazoo使用pip安装kazoo介绍kazoo是一个高级的python模块,用来实现与Apache Zookeeper的交互。本文介绍如何通过conda和pip来安装kazoo。使用conda安装kazoo如果使用的是Anacanda,可以选用下列两种方式中的任何一种来安装kazoo模块:conda install -c conda-...
2018-11-05 19:25:20 3731
原创 Mac系统下文件编码转换工具enca
简介在实际的项目中,大家经常遇到在不同系统上使用不同的开发工具,因缺省的编码格式不同导致的中文显示乱码问题。在Windows系统中,我们可以使用notepad++来转换编码格式;在Mac系统上,也有一个简单的命令行转换工具来完成编码的转换,本文将介绍如何使用这个工具。enca安装与使用通过下面的命令可以来安装enca:brew install enca通过下列命令来查看文件的...
2018-10-26 14:57:31 3497
原创 Faiss: 使用conda安装faiss-cpu库
Faiss是用于相似性搜索和密集聚类向量的库,安装了Anaconda版本的Python,可以使用conda命令来安装faiss-cpu版本库:conda install -c pytorch faiss-cpu 有些朋友留言问faiss-cpu支持的操作系统版本,从目前anaconda官网给出的信息,目前仅支持MAC和Linux的版本,并不支持Windows系统。相关信息可以参考官网的给...
2018-10-12 12:06:18 12463 8
原创 如何使用cron任务每隔2天在固定时间执行任务
简介通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。本文将介绍crontab的一个特殊应用需求,如何通过crontab来每隔2天在固定时间执行任务。crontab时间说明# .---------------- minute (0 - 59) # | .------------- hour (0 - 23)# | | .-...
2018-10-11 16:08:12 45299
原创 Kubernetes: CentOS上如何安装指定版本的Kubernetes
简介在部署kubernetes时,要求master node和worker node上的版本保持一致,否则会出现版本不匹配导致奇怪的问题出现。本文将介绍如何在CentOS系统上,使用yum安装指定版本的Kubernetes。步骤在使用yum安装kubernetes前,需要配置仓库源,可以使用阿里云的镜像:[jinguang1@zookeeper03 ~]$ cat /etc/yu...
2018-09-21 19:27:50 15786 1
原创 Kubernetes:如何解决从k8s.gcr.io拉取镜像失败问题
简介新版本的Kubernetes在安装部署中,需要从k8s.grc.io仓库中拉取所需镜像文件,但由于国内网络防火墙问题导致无法正常拉取,本文将介绍如何绕过此问题,来完成业务的部署。问题描述使用Kubernetes V1.11.3版本部署集群业务,在进行kubeadm init时,需要从k8s.grc.io仓库拉取镜像:[preflight/images] You can als...
2018-09-20 20:07:39 98359 21
原创 网速测试利器-iperf3
简介iperf3是一个网络速度测试工具,支持IPv4与IPv6,支持TCP、UDP、SCTP传输协议,可在Windows、Mac OS X、Linux、FreeBSD等各种平台使用,是一个简单又实用的小工具。 本文介绍安装、使用iperf3 网速测试工具。安装iperf3iperf3本身是以C++所开发的小程序,在官网https://iperf.fr/iperf-download.ph...
2018-09-07 09:57:46 37077 2
原创 ZooKeeper如何模拟会话失效(Session Expired)
简介会话对于ZooKeeper的操作非常重要,当会话由于任何原因结束时,在该会话期间创建的临时节点会被删除。在生产环境中,我们需要处理由于网络问题导致的会话超时问题,当网络恢复时,应用能够自动恢复会话,保证服务的可用性。本文将讲解如何模拟会话超时,便于在生产环境中进行应用的测试。应用场景会话对于ZooKeeper的操作非常重要。会话中的请求按FIFO顺序执行,一旦客户端连接到服务器,将...
2018-08-21 17:08:01 6444
原创 Linux命令:grep命令AND、OR、NOT实例
简介在grep中,我们有相当于OR和NOT运算符的选项,但没有AND运算符。但是,我们可以使用模式来模拟AND。在本文的例子将有助于理解如何使用grep命令的OR, AND和NOT运算进行文本的搜索。本文将使用下面的employee.txt文件作为例子讲解:$ cat employee.txt100 Thomas Manager Sales $5,00020...
2018-08-02 09:11:43 28260
原创 maven如何快速更新子模块项目的版本号
需求描述复杂的maven项目,通常包含多个子模块项目,如果手工逐个去修改每个pom.xml,会非常的耗时耗力,而且容易出错和遗漏。解决方案借助maven的versions插件,可以比较容易的解决这个问题。方法如下:mvn versions:set -DnewVersion=0.29-SNAPSHOTversions插件还提供了其它灵活的功能,可以通过"mvn versions...
2018-07-31 16:26:05 8082 1
原创 Linux系统编程:mmap使用技巧
简介本文将介绍了mmap的基本概念,并重点介绍mmap使用中常遇到的问题。mmap是什么mmap函数把一个文件或一个Poxis共享内存区对象映射到调用进程的地址空间,以使用普通文件提供内存映射I/O,或使用特殊文件以提供匿名内存映射,或使用shm_open以提供无亲缘关系进程间的Posix共享内存区。使用内存映射文件所得到的奇妙特性是,所有的I/O都在内核的掩盖下完成,只需编写存取...
2018-07-28 22:05:21 3286
原创 Python扩展包的非官方Windows二进制文件下载网址
https://www.lfd.uci.edu/~gohlke/pythonlibs本页面为Python编程语言的官方CPython发行版提供了许多科学开源扩展包的32位和64位Windows二进制文件。这些文件是非官方的(意思是:非正式的,无法识别的,个人的,不受支持的,没有担保,没有责任,按“原样”提供),并且可用于测试和评估。大多数二进制文件都是从PyPI或项目公共版本控制系统中的源代码构建...
2018-03-23 09:56:30 907
原创 BOOST应用 无法解析的外部符号 "void __cdecl boost::throw_exception(class std::exception const &)"
简介在Windows系统上,使用boost时发现未定义的外部符号的链接问题:thread_test_01.cpp.obj : error LNK2019: 无法解析的外部符号 "void __cdecl boost::throw_exception(class std::exception const &)" (?throw_exception@boost@@YAXAEBVexcept...
2018-03-15 22:48:16 6904 1
原创 glog-0.3.5在Windows系统上编译及应用
glog是google开发的一套开源C++日志库,也比较精简,使用起来很方便。网上有很多快速入门的教程,很容易上手,本文对相关内容不再介绍,重点讲述一下glog-0.3.5版本的编译和应用的注意事项。
2018-03-08 16:53:34 1674
原创 CMakeLists.txt文本编辑工具
CMakeLists.txt是CMake的配置文件。notepad++支持CMake相关的语法,并提供自动提示,推荐使用它来编写CMakeLists.txt配置文件。
2018-02-11 22:24:04 2436
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人