- 博客(237)
- 资源 (4)
- 收藏
- 关注
原创 gRPC C++ 入门教程
之前曾经写过 Python 使用 gRPC 收发消息的教程,可以参考文章 《体验 gRPC 那些事儿》。最近计划在 C++ 项目中使用 gRPC,故写一篇文章来记录一下如何使用 C++ 语言来实现一个简单的 gRPC 服务端和客户端程序。本教程需要先安装 gRPC,有关 gRPC 的安装教程可以参考文章 《CentOS 7 安装 gRPC》,《体验 gRPC 那些事儿》。本文涉及的程序包括四部...
2020-02-01 20:38:14
17533
3
原创 CentOS 7 安装 gRPC
之前的文章曾经介绍过有关 protobuf 的安装使用,《Google Protocol Buffers 体验日志》,不过那篇文章针对的 MacOS 系统。最近在公司环境引入 gRPC 的使用,服务器都是 CentOS 7 系统,故写篇文章记录 CentOS 7 下如何安装 gRPC。安装依赖的软件首先是安装必要的软件,包括 git,make,gcc,等。yum install epel-r...
2020-01-23 10:49:16
5130
原创 分布式对象存储服务器 MinIO 牛刀小试
数据存储包括三种类型,分别是块存储,文件存储和对象存储。有关这三种类型的差别,可以参考 对象存储、文件存储和块存储的区别。MioIO 是一个开源的分布式对象存储系统,非常适合于存储大容量非结构化的数据,例如图片,视频,日志文件,备份数据等。本文讲述如何快速搭建 MioIO 服务端和客户端,以便于对 MioIO 有个概要了解。MinIO 服务端安装MioIO 是一个非常轻量级的对象存储系统,可...
2020-01-22 16:11:42
7680
原创 携程 Apollo 配置中心初探
最近在对开源配置中心进行调研。当前流行的开源配置中心包括 Apollo,Nacos,以及 Disconf。Apollo 应该是当前最流行,所以写篇文章来记录 Apollo 的安装与使用。Apollo 是携程开源的分布式配置中心,能够集中化管理不同环境,不同集群的配置,配置修改后能够实时推送到应用,并且具备权限治理功能。本文讲述如何快速搭建开发或者测试使用 Apollo 配置中心。如果需要在生产...
2020-01-21 09:24:20
910
原创 一文带你了解 RTO 和 RPO
RTO 和 RPO 都是企业灾难恢复(Disaster Recovery, DR)需要考虑的关键指标,这两个指标可以用来指导企业来制定合适的业务系统服务或数据的恢复方案。本文介绍 RTO 和 RPO 的概念以及区别。图:RPO(Recovery point object) 和 RTO(Recovery time object)是提供业务连续性的关键指标RTORTO,Recovery ti...
2020-01-12 21:50:55
28608
1
原创 记一次 socket 通信性能优化过程
上段时间测试人员对某个服务端程序进行了性能压力测试,发现当使用 JMeter 向程序并发发送 100 个请求后,再发送请求,则会出现程序无法响应的问题。想着这个问题比较棘手,拖了不少时间。最近其他事情少了点,可以专心下来优化这个程序的性能,就着手开干了。利用 Wireshark 和 Python 构造请求报文客户端向服务端程序发送的请求报文进行了加密,且密钥存在过期时间,为方便构造请求报文,我...
2019-09-20 18:09:37
2860
1
原创 Oracle / PL SQL: CURSOR FOR LOOP 使用
FOR LOOP 介绍为了对游标进行遍历,可以使用 FOR LOOP 语句实现,语法如下:FOR record IN cursor_nameLOOP process_record_statements;END LOOP;对游标进行 FOR LOOP 遍历时,省去了 ROWTYPE 的声明,循环每次从查询结果中取出一行结果,当取完后,跳出循环。1) recordrecord 是 ...
2019-08-25 20:19:01
3157
原创 SQL JOIN 的使用
由于工作需要,现在也开始写一些复杂一点的 sql 了。由于之前对于 join 与 where 关键字的使用一直有疑惑,故写一篇文章整理一下,算是对 sql 中各种表联结使用的一个总结。SQL JOIN 的作用sql 关键字 union 与 intersect 属于以行方向为单位的集合运算,进行这些集合运算时,会导致 记录行的增加或减少。关键字 join 则是属于列方向的运算,将其他表中的列添...
2019-04-21 20:12:16
1353
原创 贝叶斯公式学习笔记
贝叶斯公式有着广泛的应用。最近重新拿起上学时的教科书——浙大《概率论与数理统计(第三版)》,复习了一遍全概率公式与贝叶斯公式,算是捡起了一些记忆。本文从条件概率出发,推导出全概率公式以及贝叶斯公式,并以例子说明贝叶斯公式的应用。条件概率条件概率研究如何计算事件 AAA 已发生的条件下事件 BBB 发生的概率。例如,将一枚硬币抛掷两次,观察其出现正反面的情况,设事件 AAA 为“至少一次为正...
2019-04-07 22:23:08
1929
原创 CLion 实现远程调试
CLion 是 JetBrains IDE 全家桶产品之一,可以用来开发 C/C++ 项目,而 GDB 则可以用来对 C/C++ 程序进行调试。作为一款调试器,GDB 为程序开发人员提供了强大的调试功能,但却需要使用命令来执行调试操作,操作起来不是很方便。(有关 GDB 的使用,可以参考文章《GDB 调试》。)为此,CLion 不仅为程序开发人员提供了图形化的调试界面, 还提供了远程调试的功能。...
2019-02-16 08:29:10
36779
13
原创 债券的价格
之前一直好奇债券的交易价格是如何确定的,最近查阅了一些资料,对债券的定价有了初步的了解。这篇文章记录对于债券定价的学习笔记。一、背景知识1. 货币时间价值货币时间价值是指货币随着时间 的推移而发生的增值。衡量货币时间价值大小的指标即是利率。2. 终值终值用来表示货币时间价值的概念。已知期初投入的现值为 PVPVPV,求将来第 nnn 期期末的终值 FVFVFV,也就是求第 nnn 期期末...
2019-02-10 11:54:18
3697
原创 使用 LaTeX 制作幻灯片
之前一直好奇大学里老师的那种看起来很专业的幻灯片是怎么制作的,只是知道他们使用 TeX 而一直没有动手实践。本着绝知此事要躬行的精神,决定动手实践一把。由于在家主要使用 Mac 电脑,故本文讲述如何在 Mac OS 制作 LaTeX 幻灯片。一、安装 MacTeXMacTeX 是 TeX Live 的 Mac 版本,可以在 http://tug.org/mactex/ 查看 MacTeX ...
2019-01-26 12:03:52
30024
6
原创 Samba 服务器搭建与 Java 客户端实现
最近需要将原来使用阿里云 OSS 的程序模块改成使用公司内部搭建的文件服务器,由于目前使用的文件不多,且都是一些小文件,经过对比后,决定采用 Samba 来实现文件服务器。Samba 是一个程序的集合,包括服务器与客户端程序,它允许在 Linux 与 Windows 实现共享文件的功能。本文先讲述如何在 CentOS 7 下安装与配置 Samba,然后讲述如何使用 Java 来实现 Samba ...
2019-01-03 12:32:52
2515
原创 最大回撤线性算法实现
最大回撤是指投资组合在选定的周期内,任一时间点往后推,可能出现资产净值下降的最大幅度。回撤的意思是指在某一段时期内净值从最高点开始回落到最低点的幅度。最大回撤常用百分率来表示,是一个重要的风险指标。最大回撤的计算公式为最大回撤=(波峰值−波谷值)/波峰值最大回撤 = \left( 波峰值 - 波谷值 \right) / 波峰值最大回撤=(波峰值−波谷值)/波峰值注意这里的波峰值波峰值波峰...
2019-01-01 10:42:55
8538
5
原创 米筐开源量化框架 RQalpha 安装使用
RQalpha 是 Ricequant 开源的量化框架,提供数据获取,算法交易,策略回测,实盘模拟,实盘交易,数据分析等功能。RQalpha 的安装过程并不十分友好,本文讲述如何安装 RQalpha。安装环境是 Mac OS 操作系统。安装步骤1. 创建虚拟环境RQalpha 推荐使用虚拟环境来安装,以避免由于各种环境问题导致安装失败。可以使用 conda 来创建虚拟环境,为使用 conda...
2018-12-30 14:23:04
9348
1
原创 CAP 理论解释 —— 以“记忆公司”开展业务为例
CAP 理论是分布式系统的一个基础理论,它描述了任何一个分布式系统最多只能满足以下三个特性中的两个:一致性(Consistency)可用性(Availability)分区容忍性(Partition tolerance)CAP 理论听起来十分抽象,本文尝试以生活中的例子并用通俗易懂的语言来解释 CAP 理论的含义。第一章:“记忆公司”面世一天晚上,正准备入睡时,你的妻子对你记...
2018-07-15 11:52:46
11094
3
原创 深入理解 Spring AOP
AOP,Aspect Oriented Programming,面向切面编程,是指在运行时,动态地将代码切入到类的指定方法、指定位置上的一种编程技术。AOP 是 OOP 的延续,是软件开发中的一个热点,也是 Spring 框架中的一个重要内容。利用 AOP 可以对业务逻辑与横切关注点(cross-cutting concerns,例如日志记录,事务处理)进行隔离,从而使得业务逻辑与横切关注点的耦合...
2018-06-27 15:18:24
1490
原创 深入理解 Spring 控制反转与依赖注入
概览对于 Spring 框架来说,控制反转(Inversion of Control, IoC)和依赖注入(Dependency Injection, DI)是个等同的概念,控制反转是通过依赖注入实现的。在这篇文章中,我们会详细介绍 IoC 和 DI 的概念,然后我们会讨论 Spring 框架中是如何实现 IoC 和 DI 的。什么是控制反转IoC 是软件工程的一个设计原则,是指对...
2018-06-25 16:31:17
4524
1
原创 Java 使用 Rserve 实现与 R 的通信
Rserve 是一个基于 TCP/IP 的服务器程序,它允许其他语言调用 R 语言。由于 Rserve 采用 C/S (客户端/服务器)的调用方式,因此客户端并不需要链接 R 语言库,客户端程序与 R 程序可以实现低耦合的目的。 为调用 R 语言,需要实现一个与 Rserve 通信的客户端程序,幸运的是目前常用的语言包括 C/C++,PHP,Java 等都实现提供与 Rserve 通信的客户端程...
2018-06-20 16:38:55
2439
1
原创 Spring MVC 入门例子
Spring Web MVC 是一个建立在 Servlet API 的 Web 框架,它属于 Spring Framework 的产品。Spring Web MVC 名称来源于模块 spring-webmvc ,但它更常用的叫法是 Spring MVC。 本文讲述如何使用 IntelliJ IDEA 来编写一个 Spring MVC Demo。使用 IntelliJ IDEA 创建一个 Ma...
2018-06-18 21:16:08
2899
原创 Hibernate 实现增删查改
Hibernate 是一种 Java 语言下的对象关系映射的解决方案,它为面向对象的领域模型到传统的关系型数据库的映射提供了一个使用方便的框架。 本文讲述如何使用 Hibernate 来实现数据库中基本的增删查改操作。创建数据库表为实现我们的例子,我们先创建一个表EMPLOYEES并插入一些数据。CREATE TABLE EMPLOYEES ( EMP_ID BIGINT...
2018-06-15 16:49:59
924
原创 IntelliJ IDEA 添加 MySQL 图形访问界面
IntelliJ IDEA 不愧为一款强大的 Java IDE,其提供的访问 MySQL 数据库的图形界面也异常的强大。 本文讲述如何配置 IntelliJ IDEA 来添加访问 MySQL 的图形界面。打开 Database 选项窗口,View - Tool windows - Database。点击 + 号,新建一个 MySQL 数据库来源。 在 Data Sources and ...
2018-06-15 10:20:17
9153
1
原创 使用 JDBC 连接MySQL
JDBC(Java Database Connectivity,Java数据库连接)是 Java 语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。 本文讲述如何使用 JDBC 来连接和访问数据库。为方便引入 JDBC 依赖包,我们创建 Maven 项目来实现我们的示例程序。 打开 IntelliJ IDEA 客户端,File - New - ...
2018-06-14 16:19:14
7159
原创 CentOS 7 安装 MySQL
官方推荐使用 yum 源来安装 MySQL,本文讲述如何使用 yum 源来安装 MySQL。一、添加 MySQL yum 源可以采用yum localinstall命令来添加 MySQL 源。在 https://dev.mysql.com/downloads/repo/yum/ 页面选择合适 rpm 包,这些 rpm 包的作用就是添加 MySQL yum 源的。笔者下载的是 mysql80...
2018-06-14 14:08:00
9764
原创 Python 实现 Shell 脚本功能
最近生产环境上发现有服务器进程出现任务堆积的情况,由于一时无法定位出原因,故对堆积的任务数量进行监控。由于进程日志中已有任务数量的输出,故只需要编写一个脚本读取日志中的任务数量,发现任务数量超过某个阈值就发送告警短信即可。 本想使用 Shell 脚本来实现,没想到 Shell 的语法实在不好掌握,赋值语法,数值比较语法,字符串与数字的转换,等等,这些语法的问题经过了多次 google 和百度后,...
2018-05-15 14:08:29
10644
原创 Python 实例方法、类方法和静态方法
在 Python 中,实例方法(instance method),类方法(class method)与静态方法(static method)经常容易混淆。本文通过代码例子来说明它们的区别。实例方法Python 的实例方法用得最多,也最常见。我们先来看 Python 的实例方法。class Kls(object): def __init__(self, data): ...
2018-03-30 20:17:19
85112
23
原创 Hexo 网站配置免费阿里云证书
原来的个人网站 leehao.me 使用了阿里云的负载均衡服务,因此 HTTPS 证书也是部署在负载均衡服务器上。文章《在阿里云部署 Hexo 网站》介绍了采用负载均衡方式来部署网站的方法。 考虑到网站访问流量不高且为了减少费用,决定不再使用负载均衡服务,而是直接采用单个 ECS 服务器的方式来部署网站。采用新的方式部署网站后,为了同样让网站支持 https,需要重新对 https 证书进行配置...
2018-03-04 20:26:01
1976
原创 Python 装饰器浅析
Python 装饰器是 Python 中常常使用到的一种语法糖,它可以大幅度减少重复代码,使用起来十分方便。另一方面,装饰器的定义往往会导致出现函数重重嵌套的情况,这会给装饰器的实现者带来阅读代码的困难。本文剖析 Python 装饰器的定义与用法。不带参数的装饰器我们先来看一下不带参数的装饰器的实现,这种情况比较简单。以下是一个不带参数的装饰器的使用例子:@decorato...
2018-02-20 09:35:42
953
原创 Python 名称空间与作用域
这篇文章介绍 Python 的名称空间以及变量的作用域。Python 的名称Python 的名称(Name)是对象的一个标识(Identifier)。我们知道,在 Python 里面一切皆对象,名称就是用来引用对象的。说得有点玄乎,我们以例子说明。例如,在a = 2这个语句中,2是个存储在内存中的一个对象,名称a则会引用2这个对象,“引用”的含义是指可以通过名称a来使用2这个对象。
2018-01-20 08:51:46
3192
1
原创 记一次 BUG 的排查过程
最近生产上上线了一个新的功能,在业务人员使用过程中,通过查看日志我们发现一个诡异的问题。这篇文章记录一下这个问题的排查过程以及解决方法。存在问题的程序使用了 C 语言的 Redis 客户端 hiredis 来连接和操作 Redis。由于处于分布式的环境,所以我们使用了 Redis 的事务的特性,以避免多个客户端同时对 Redis 数据进行更改导致数据错乱的情况出现。有关 hiredis 的使用以及
2017-12-18 09:03:17
1774
原创 Nginx 日志改成 JSON 格式
Nginx 日志默认为普通文本的格式,例如,下面是 Nginx 的一行访问日志:10.88.122.105 - - [02/Dec/2017:09:15:04 +0800] "GET /js/pagination.js HTTP/1.1" 304 0 "http://10.88.105.20:8063/stockrecommand.html" "Mozilla/4.0 (compatible; MS
2017-12-12 18:56:41
13502
2
原创 Nginx 日志接入 Elastic Stack 系统
文章《搭建 Elastic Stack 日志系统》 描述了如何利用 Kibana,Elasticsearch,Filebeat 来搭建日志系统。本文在上一篇 Elastic Stack 文章的基础上,说明如何将 Nginx 的日志接入 Elastic Stack 日志系统。为了更新在 Kibana 上展示 Nginx 的日志,可以先将 Nginx 的日志改成 json 格式,如何更改 Nginx 的
2017-12-12 18:53:22
2081
原创 Node.js 概览
Node.js 是一个开源的项目,可以让 JavaScript 的代码在浏览器之外运行。 我们知道,JavaScript 代码可以在浏览器中运行,它可以访问 window 和 document 这样的全局对象以及其他 API 和库函数。 为了支持 JavaScrip 在浏览器以外的环境运行,谷歌工程师 Ryan Dahl 基于 Chrome V8 JavaScript 引擎开发了 Node.j
2017-12-10 09:52:55
408
原创 Python 和 Java 进行 DES 加密和解密
DES 为 Data Encryption Standard (数据加密标准)的缩写,是一种常见的对称加密算法。有关对称加密与非对称加密的特点及其应用场景,本文就不描述了,读者可以自行 google 。本文说明如何使用 Java 和 Python 两种语言来实现 DES 的加解密。最近碰到的应用场景是这样的。我们需要对接一个系统 S,系统 S 已经对用户的身份进行了验证,新系统 N 也需要对用户的身
2017-11-17 09:22:45
10503
2
原创 搭建 Elastic Stack 日志系统
Elastic Stack 是原 ELK Stack 在 5.0 版本加入 Beats 套件后的新称呼。Elastic Stack 在实时日志处理领域已开成开源界的第一选择。 本文讲述如何搭建 Elastic Stack 日志系统,使用的套件包括 Kibana,Elasticsearch,以及 Filebeat。搭建的环境选择阿里云 ECS 服务器,系统为 CentOS 7.4 64 位。...
2017-11-07 18:37:46
3079
原创 GDB 调试
GDB 是一个功能强大的调试器,也是 Linux 系统中默认的调试器。GDB 主要提供以下四种功能,这些功能可以方便我们定位程序的 BUG。启动程序设置断点检查程序运行状态,例如查看变量的值修改程序运行状态,例如修改变量的值本文简单讲述 GDB 的调试方法。我们需要调试的程序如下所示,该程序只是为了演示 GDB 的用法,并没有实际的意义。#include <iostream>using n
2017-10-20 13:50:01
1364
原创 使用 Supervisor 来管理 Redis 进程
Supervisor 是一个用 Python 实现的进程管理工具,可以很方便地启动,关闭,重启,查看,以及监控进程,当进程由于某种原因崩溃或者被误杀后,可以自动重启并发送事件通知。Supervisor 可谓运维利器,使用 Supervisor 来管理进程,可以提高系统的高可用特性。 随着 Redis 越来越流行,越来越多的公司都使用上了 Redis,因此 Redis 的进程管理就成了很多公司都需要
2017-08-29 23:51:02
9947
5
原创 记一次程序优化记录
忙了几个月的项目终于在生产环境上上线,虽然接下来还有不少工作需要跟进,但终究不像上段时间那么忙了,因此也就能利用周末的时间,对之前优化程序性能的过程作下记录,也当是个小小的经验总结。程序的应用场景是往 Redis 写入具有大量记录的二维表,或者从 Redis 读取具有大量记录的二维表数据。由于二维表的记录数量巨大,比如有些二维表的记录数达几十万条,因此对于程序的性能有较高的要求。程序使用 hired
2017-08-13 13:35:31
875
原创 Redis AOF 持久化学习笔记
文章 Redis 快照持久化学习笔记 介绍 Redis 快照持久化的功能,除了快照持久化外,Redis 还提供了 AOF(Append Only File)持久化功能。与快照持久化通过直接保存 Redis 的键值对数据不同,AOF 持久化是通过保存 Redis 执行的写命令来记录 Redis 的内存数据。AOF 持久化的原理理论上说,只要我们保存了所有可能修改 Redis 内存数据的命令(也就是写命
2017-07-17 23:58:05
11577
原创 Redis 快照持久化学习笔记
Redis 是一种内存数据库,它将数据存储在内存中,所以如果不将数据保存到硬盘中,那么一旦 Redis 进程退出,保存在内存中的数据将会丢失。为此,Redis 提供了两种不同的持久化方法来将数据存储到硬盘里面。一种方法叫做快照(snapshotting),它可以将存在于某一时刻的所有数据写入硬盘里面。另一种方法叫 AOF(append-only file),它会在执行写命令时,将被执行的写命令复制到
2017-07-09 13:39:59
3193
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅