自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Bob Liu的程序人生

万物之始,大道至简,衍化至繁

  • 博客(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

原创 高性能Linux:TCP/IP内核参数调优之Linux TCP内核参数解析

内核参数

2019-04-28 09:44:26 3568 1

原创 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

原创 cygwin安装配置apt-cyg工具

cygwin也有类似apt-get的工具来对软件包进行安装管理,本文简要介绍如何配置和使用该工具。

2018-03-22 18:18:18 6682

原创 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关注的人

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