自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

liberalman的专栏

自由的人

原创 程序实现黎曼和(定积分)

想象一下,如果你手里有一块形状不规则的土地(实际上我没有,穷…),要测量它的面积,怎么办呢? 拿尺子量,不知如何下手,突然感觉高中几何解决不了,得祭出本科的高等数学才行。所以,惯例我们应该发扬拿来主义,比如 “国际上,如何如何…”: 一个叫黎曼的德国数学家(Bernhard Riemann, 18...

2019-11-02 15:27:56 130 0

原创 使用golang实现令牌桶限流和时间窗口控制

这篇文章不是讲令牌桶算法原理,关于原理,请参考 https://blog.csdn.net/lzw_2006/article/details/51768935 我这里只是使用golang语言来实现令牌桶算法,以及时间窗口限流。 #### 针对接口进行并发控制 如果担心接口某个时刻并发量过大了...

2019-05-23 15:54:55 779 0

原创 consul 配置/KV/ACL

[TOCM]Consul版本 v0.9.31. 配置1.1 CLI配置Consul Agent有各种各样的配置项可以在命令行或者配置文件进行定义,所有的配置项都是可选择的,当加载配置文件的时候,Consul从配置文件或者配置目录加载配置。后面定义的配置会合并前面定义的配置,但是大多数情况下,合并的...

2017-11-01 11:43:34 3695 0

原创 使用nutch搭建类似百度/谷歌的搜索引擎

Nutch是基于Lucene实现的搜索引擎。包括全文搜索和Web爬虫。Lucene为Nutch提供了文本索引和搜索的API。1.有数据源,需要为这些数据提供一个搜索页面。最好的方式是直接从数据库中取出数据并用Lucene API 建立索引,因为你不需要从别的网站抓取数据。 2.没有本地数据源,或...

2017-10-21 11:09:57 1324 0

原创 微服务注册发现集群搭建——Registrator + Consul + Consul-template + nginx

在互联网应用领域,服务的动态性需求十分常见,这就对服务的自动发现和可动态扩展提出了很高的要求。微服务系统动辄上万个服务,而且还要动态伸缩。以人工写好的IP、Port 硬编码脚本的方式无法做到大规模自动化,稍微多点服务运维就傻了。微服务必然要做到ip和port自动分配,减少人工干预。我们需要让每个服...

2017-07-26 18:54:34 2547 3

原创 面试圣经(一)

小桔科技 四面面试官是个部门经理,比较和蔼,说话爱笑,比别的公司的总监层面的人严肃的面孔好多了,也让面试者轻松很多。总结下他问的诸多问题以及我的解法,先上几个问题 1有数字1、2、3….直到n+2的递增数列,每个数都是唯一不重复的,以1的步长增长的。去掉其中两个数,然后打乱次序,找出被去掉的数到底...

2017-05-20 15:40:24 724 1

原创 nginx启用HSTS以支持从http到https不通过服务端而自动跳转

最近对我的个人网站启用了Https,所以想设置http默认自动转https访问的功能,但又不想总让服务端做转发操作,那样浪费资源。那么有什么好的办法呢?302跳转通常将 HTTP 请求 302 跳转到 HTTPS,但有问题:1.不安全,302 跳转会暴露用户访问站点,易被劫持。2.多增加一次访问,...

2017-05-18 00:39:04 13609 0

原创 开发过程中遇到的各种问题汇总

TLS/SSL/HTTPS1.我的个人网站https改造过程中,遇到问题 Mixed Content: The page at ‘https://www.liberalman.cn/login’ was loaded over HTTPS, but requested an insecure s...

2017-05-13 20:53:26 6063 0

转载 对象池

一个广为人知但鲜有人用的技巧:对象池对象池是一种设计模式,它会预先初始化一组可重用的实体,而不是按需销毁然后重建。在使用套接字描述符时,人们通常会将其池化。实际上,套接字描述符的数量通常比较少(最多上千个),之所以要采用池的方式,是因为它们的初始化成本非常高。而在最近发表的一篇博文中,Clojur...

2017-05-13 20:48:51 645 0

原创 基于AWS S3协议搭建个人云存储服务

相信风靡全球的亚马逊 AWS S3 的存储云服务大家已经耳熟能详了,如何自己搭建一个私有的S3存储云服务呢?Minio 实现了 AWS S3 存储协议,开源并且用Go语言开发,有web操作界面,我们可以用它来搭建兼容S3协议的存储云服务。官网 https://minio.io/详情见如下操作[ro...

2017-03-29 23:25:06 9891 5

原创 levelDB

levelDB是Google做的内存数据库的开发库,而号称要取代rediss的SSDB就是基于levelDB开发的。1,下载levelDB源码git clone https://github.com/google/leveldb.git我是下载了这个地址的zip包leveldb-master.zi...

2017-03-16 01:13:39 678 0

原创 OpenResty入门

操作系统:Centos 7OpenResty是整合nginx模块,用作web开发工具之用,具体可以百度!配置安装源[root@localhost ~]# vim /etc/yum.repos.d/OpenResty.repo内容如下:[openresty] name=Official OpenRe...

2017-03-15 01:20:41 1084 0

原创 通过UDF使mysql主动刷新redis缓存

UDF是mysql的一个拓展接口,UDF(Userdefined function)用户自定义函数。在什么地方使用这个功能呢,试想有如下场景:你的网站使用mysql作为最终数据落地的存储引擎,而redis作为缓存以减小查询请求穿透到mysql的数量,可以极大的降低数据库性能瓶颈带来的整个网站对外服...

2016-08-23 16:25:38 8742 1

原创 抛弃mysql模糊查询,使用sphinx做专业索引

Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,提供比数据库本身更专业的搜索功能特别为MySQL也设计了一个存储引擎插件,从此抛弃模糊查询吧。Sphinx 单一索引最大可包含1亿条记录,在1千万条记录情况下的查询速度为0.x秒(毫秒级)。Sphinx...

2016-08-19 15:16:26 6830 0

原创 epoll边沿触发漏报消息包问题

开发一个即时通讯后台,底层的网络收发使用 epoll + main loop实现网络事件(conn、read、send)的异步触发读写,以达到能最大限度减少线程的IO等待,提高cup利用率的目的。实际使用中,会发现有少量并没有 因为访问后端阻塞 但是依然反馈慢到超时的情况,我们定义从客户端发消息到...

2016-08-05 11:47:33 1743 2

原创 Haproxy+etcd+confd+Docker搭建节点自动发现的高可用负载均衡框架

记得先要安装docker,具体这里不赘述了,百度或者看我的文章http://www.jianshu.com/p/3ffa4e5cbb86先扔出一张图来解释这四个组件之间的关系下面细说1.HaproxyHaproxy不用多说,负载均衡软件,安装Haproxyyum -y install haprox...

2016-07-25 20:29:49 8846 5

原创 docker容器扫盲

Centos 6.5 安装和使用docker基于本人一贯的习惯,关于“某某某是什么”这样的问题,请百度吧,会有更专业的人士,会比我说的更详细更深,这里我只给出本人亲历的安装和使用过程。1.安装先检查服务器环境,docker要求操作系统CentOS6以上,kernel 版本必须2.6.32-431或...

2016-07-22 21:55:21 13012 7

原创 从零实现高并发Web服务器-哈希表

哈希表自定义实现哈希表/** 键值对 */ typedef struct { lbt_str_t key; /**< 键 */ lbt_uint_t key_hash; /**< 通过哈希运算,将key投影到整型的哈希值 */ void *v...

2016-07-17 16:37:19 692 0

原创 基于mysql的分布式数据库中间件-Mycat

一、Mycat根据官网的定义:Mycat是一个可以用于MySQL读写分离和高可用的中间件,一个模拟为MySQL Server的超级数据库,一个能平滑扩展支持1000亿大表的分布式数据库系统,一个可管控多种关系数据库的数据库路由器,一个平滑从关系数据升级到大数据的应用中间件。其前身是阿里的Cobar...

2016-07-09 23:08:57 3781 2

原创 环形队列

环形队列,也可以叫环形缓冲区。我们用数组来举例,通常对于一个放到数组中的队列,生产者将数据写入队尾,消费者从队头取走,两个指针朝着同一个方向运动,消费者追生产者。而“环”在这里的体现,就是不管生产者还是消费者,当指针跑到队尾的时候,掉头到该数组头去,形成一个没有终点的环。 这要做的好处是,当生产...

2016-07-08 12:09:45 633 0

原创 修改FILE缓冲区大小,改进写日志性能

由于线上服务端程序,需要大量写入日志,将来入数据库库,以便做数据分析或者对账之用,可是发现日志打开后服务器变慢了,对外并发响应数量也减少了。于是分析了下日志写入函数fprintf。其写日志文件的顺序是:程序写入用户地址空间内核从用户地址空间缓冲区复制到内核文件缓冲区内核文件缓冲区满的情况下再放...

2016-07-06 22:42:14 6989 3

翻译 Chapter 2. Game Engine Anatomy游戏引擎剖析(揭秘)

iPhone Game Development Developing 2D & 3D games in Objective-C To solve the large problem of how to create a game on the iPhone, we first need t...

2016-07-02 00:17:51 670 0

原创 KeepAlived+MySQL互为主从

解决Master单点问题,两台mysql互为主备,双向replication。当一master挂了,则将slave切换为master,继续工作。好,给定两台机器 主机A:192.168.1.201 主机B:192.168.1.202一、互为主从1.配置 主机A上,vim /etc/my.cn...

2016-07-01 23:16:00 12113 3

原创 欢迎使用CSDN-markdown编辑器

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富...

2016-07-01 23:03:44 299 0

原创 从零开发MQTT服务(二)

二、配置文件 也不是核心模块,不用太多篇幅写了,看我github代码吧static int load_conf_from_file(libertymqtt_config *config, bool reset, const char *filename, int level, int *line...

2016-06-22 22:53:51 331 0

原创 从零开发MQTT服务(一)

开发语言:Linux下C语言,gcc 版本 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) 操作系统:Centos 6.5 64bit 源码地址:https://github.com/liberalman/mqtt/tree/master/libertymqtt...

2016-06-22 11:25:00 302 0

原创 二分查找、折半查找

#include <stdio.h> #define N 10 void printA(int A[], char n){ int i = 0; for (i = 0; i < n; i++) { printf("%d "...

2016-06-15 18:28:31 563 0

原创 用Golang实现基于时间轮算法的定时器

package timingwheelimport ( //"container/list" //"fmt" "sync" "time" "timer_server/u...

2016-06-12 17:13:57 3747 1

原创 C调用graphviz绘制堆

之前的博客http://blog.csdn.net/socho/article/details/51565498《对”堆”的理解》中打印堆是在终端中,不是很直观,发现一个可以生成图片的利器graphviz,于是用c语言调用下,程序运行中生成图片,特别直观了。 以上是用终端打印出来的,发现了一个绘...

2016-06-08 20:31:53 914 0

原创 快速排序

C语言实现#include <stdio.h> #define N 9 int A[N] = { 10, -3 , 28, 76, 37, 55, -1, 99, 11}; void printArr(int arr[], int length) { int i; fo...

2016-06-05 20:43:18 375 0

原创 排列组合 C语言实现

#include <stdio.h> #include <stdlib.h>int array[] = {1,2,3,4};#define N 4 #define M 3 int queue[N] = {0}; //保存已经找到的结果,前缀 int top = 0; /...

2016-06-04 23:15:11 7151 0

原创 linux下如何让程序无法重复启动

通常情况下一个程序可以被多次执行,也就存在多个相同的进程。有时候我们有些全局资源只允许单进程访问,为了不让进程多起,要实现进程在一台机器上只能有一个实例的方法。 经查找,可以使用flock的方式,建一个lock file,让程序执行前先检查是否有执行中的实例,即对文件加锁。single_prog...

2016-06-04 22:24:38 2025 0

原创 索引查找

索引查找是在索引表和主表上进行的查找,主表是线性表。先按照给定的哈希算法(比如value%100)对每一个value做哈希运算,将value映射到不同的数据段中(以模100为单位),这样每隔100个数段的区间就被一个哈希值做的索引映射到,以这种方式创建主表,同时创建一个索引表,记录每个100个数区...

2016-06-04 18:23:36 1183 0

原创 冒泡排序

冒泡排序(Bubble Sort)。 [1] C语言实现#include <stdio.h> #define SIZE 9void printArr(int arr[], int n) { int i; for (i = 0; i < n; i++) ...

2016-06-04 14:19:49 373 0

原创 c语言实现回调函数

callback.c/* * @file c语言实现回调函数 * @detial 在java等更高级的语言中往往已经给我们封装好了回调函数的调用方式,直接用就可以了。而C语言中并没有这种直接可以操作的回调方式,我们用函数指针来实现回调原理。 */ #include<stdio.h>...

2016-06-04 10:13:16 5987 2

原创 对”堆”的理解

建堆、向下调整、向上调整、堆排序

2016-06-02 12:22:02 1798 1

原创 正态分布,Python实现

# coding=utf-8   import numpy as np from scipy import stats import matplotlib.pyplot as plt   n = 10 p = 0.3 k = np.arange(0,...

2016-02-23 13:01:25 1396 1

原创 计算比特币发行量总额

以下C代码用于计算比特币发行量总额 #include #include int main(){     long btc = 50 * pow(10, 8); // 初始,每个块奖励 50*10^8聪(1BTC = 10^8聪)     long total_btc = 0;    ...

2016-02-22 15:21:44 1882 0

原创 geohash实现(c语言)

GeoHash算法 首先,你要Baidu下,找到该算法核心原理,这里摘自网络文档,简单介绍下。 GeoHash算法是通过二分法,经过一定次数的无限逼近,将经纬度的二维坐标浮点值变成一个可排序、可比较的的字符串编码。 在编码中的每个字符代表一个区域,并且前面的字符是后面字符的父区域,即父子字符串有相...

2015-10-27 00:32:30 1034 1

原创 读写分离实践:mysql-proxy

apt-get install libevent-dev ftp://mirror.switch.ch/mirror/mysql/Downloads/MySQL-Proxy/mysql-proxy-0.8.4.tar.gz apt-get install lua5.1-dev

2014-11-18 19:52:20 667 0

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