自定义博客皮肤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的专栏

自由的人

  • 博客(47)
  • 资源 (11)
  • 收藏
  • 关注

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

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

2019-11-02 15:27:56 5095 2

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

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

2019-05-23 15:54:55 2148

原创 consul 配置/KV/ACL

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

2017-11-01 11:43:34 5798

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

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

2017-10-21 11:09:57 2076

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

在互联网应用领域,服务的动态性需求十分常见,这就对服务的自动发现和可动态扩展提出了很高的要求。微服务系统动辄上万个服务,而且还要动态伸缩。以人工写好的IP、Port 硬编码脚本的方式无法做到大规模自动化,稍微多点服务运维就傻了。微服务必然要做到ip和port自动分配,减少人工干预。我们需要让每个服务能动态的创建地址,同时调用方要能感知地址变化。这就需要有一个服务注册与发现的机制,这篇文件就是讨论如何

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

原创 面试圣经(一)

小桔科技 四面面试官是个部门经理,比较和蔼,说话爱笑,比别的公司的总监层面的人严肃的面孔好多了,也让面试者轻松很多。总结下他问的诸多问题以及我的解法,先上几个问题 1有数字1、2、3….直到n+2的递增数列,每个数都是唯一不重复的,以1的步长增长的。去掉其中两个数,然后打乱次序,找出被去掉的数到底是哪两个?(n假设是10w,空间复杂度要求O(1))答:方法1: 这是我的回答 设这些数保存在数组A

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

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

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

2017-05-18 00:39:04 19545

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

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

2017-05-13 20:53:26 7031

转载 对象池

一个广为人知但鲜有人用的技巧:对象池对象池是一种设计模式,它会预先初始化一组可重用的实体,而不是按需销毁然后重建。在使用套接字描述符时,人们通常会将其池化。实际上,套接字描述符的数量通常比较少(最多上千个),之所以要采用池的方式,是因为它们的初始化成本非常高。而在最近发表的一篇博文中,ClojureWerkz核心成员Alex Petrov探讨了另一种对象池应用场景,即将大量的存活期短且初始化成本低的

2017-05-13 20:48:51 855

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

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

2017-03-29 23:25:06 19136 6

原创 levelDB

levelDB是Google做的内存数据库的开发库,而号称要取代rediss的SSDB就是基于levelDB开发的。1,下载levelDB源码git clone https://github.com/google/leveldb.git我是下载了这个地址的zip包leveldb-master.zip,解压安装的。2,编译LevelDB[root@localhost ~]# unzip leveldb

2017-03-16 01:13:39 864

原创 OpenResty入门

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

2017-03-15 01:20:41 1266

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

UDF是mysql的一个拓展接口,UDF(Userdefined function)用户自定义函数。在什么地方使用这个功能呢,试想有如下场景:你的网站使用mysql作为最终数据落地的存储引擎,而redis作为缓存以减小查询请求穿透到mysql的数量,可以极大的降低数据库性能瓶颈带来的整个网站对外服务的卡顿、不可用等情况。这种方式的架构,当有查询请求的时候,我们可以在业务逻辑层控制,先从缓存中查询,无

2016-08-23 16:25:38 10267 3

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

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

2016-08-19 15:16:26 7731

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

开发一个即时通讯后台,底层的网络收发使用 epoll + main loop实现网络事件(conn、read、send)的异步触发读写,以达到能最大限度减少线程的IO等待,提高cup利用率的目的。实际使用中,会发现有少量并没有 因为访问后端阻塞 但是依然反馈慢到超时的情况,我们定义从客户端发消息到收到反馈,3s超时,而我们发现延迟可能好几分钟,这让我觉得肯定不是后端一些复杂逻辑导致的,逻辑层再复杂,

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

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

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

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

原创 docker容器扫盲

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

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

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

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

2016-07-17 16:37:19 810

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

一、Mycat根据官网的定义:Mycat是一个可以用于MySQL读写分离和高可用的中间件,一个模拟为MySQL Server的超级数据库,一个能平滑扩展支持1000亿大表的分布式数据库系统,一个可管控多种关系数据库的数据库路由器,一个平滑从关系数据升级到大数据的应用中间件。其前身是阿里的Cobar项目。 介绍就不多说了,可以看官网http://www.mycat.org.cn/ 接下来我们实践吧

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

原创 环形队列

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

2016-07-08 12:09:45 793

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

由于线上服务端程序,需要大量写入日志,将来入数据库库,以便做数据分析或者对账之用,可是发现日志打开后服务器变慢了,对外并发响应数量也减少了。于是分析了下日志写入函数fprintf。其写日志文件的顺序是:程序写入用户地址空间内核从用户地址空间缓冲区复制到内核文件缓冲区内核文件缓冲区满的情况下再放入内核io队列,等待写入到硬盘上。写文件其实不是直接写到硬盘,那样的话一堆程序都同时并发往硬盘上写,硬盘

2016-07-06 22:42:14 9829 4

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

iPhone Game Development Developing 2D & 3D games in Objective-CTo solve the large problem of how to create a game on the iPhone, we first need to solvea series of smaller problems such as how to displ

2016-07-02 00:17:51 831

原创 KeepAlived+MySQL互为主从

解决Master单点问题,两台mysql互为主备,双向replication。当一master挂了,则将slave切换为master,继续工作。好,给定两台机器 主机A:192.168.1.201 主机B:192.168.1.202一、互为主从1.配置 主机A上,vim /etc/my.cnf,添加: [mysqld] log-bin=mysql-bin server-id=1 #服务i

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

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

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

2016-07-01 23:03:44 356

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

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

2016-06-22 22:53:51 389

原创 从零开发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一.日志模块文件路径:src/log.c 这里贴出核心代码void print(const char

2016-06-22 11:25:00 471

原创 二分查找、折半查找

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

2016-06-15 18:28:31 695

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

package timingwheelimport ( //"container/list" //"fmt" "sync" "time" "timer_server/util")const wheel_cnt uint8 = 5

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

原创 C调用graphviz绘制堆

之前的博客http://blog.csdn.net/socho/article/details/51565498《对”堆”的理解》中打印堆是在终端中,不是很直观,发现一个可以生成图片的利器graphviz,于是用c语言调用下,程序运行中生成图片,特别直观了。 以上是用终端打印出来的,发现了一个绘图利器graphviz,可以把堆画出来。安装这个软件什么的就不讲了,自己百度,这里默认已经安装好了。所以

2016-06-08 20:31:53 2150 2

原创 快速排序

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

2016-06-05 20:43:18 453

原创 排列组合 C语言实现

#include <stdio.h>#include <stdlib.h>int array[] = {1,2,3,4};#define N 4#define M 3int queue[N] = {0}; //保存已经找到的结果,前缀int top = 0; //队列顶部下标int flag[N] = {0}; //是否已经排列过了的标志/** * 排列 * @param s 递归

2016-06-04 23:15:11 9620

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

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

2016-06-04 22:24:38 2783

原创 索引查找

索引查找是在索引表和主表上进行的查找,主表是线性表。先按照给定的哈希算法(比如value%100)对每一个value做哈希运算,将value映射到不同的数据段中(以模100为单位),这样每隔100个数段的区间就被一个哈希值做的索引映射到,以这种方式创建主表,同时创建一个索引表,记录每个100个数区间的索引编号、起始位置、有效数据长度。在查找数据的时候,只要以同样的哈希算法先计算哈希值,直接按该值跳到

2016-06-04 18:23:36 2078

原创 冒泡排序

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

2016-06-04 14:19:49 552

原创 c语言实现回调函数

callback.c/* * @file c语言实现回调函数 * @detial 在java等更高级的语言中往往已经给我们封装好了回调函数的调用方式,直接用就可以了。而C语言中并没有这种直接可以操作的回调方式,我们用函数指针来实现回调原理。 */#include<stdio.h>// 方法指针的格式为:int (*ptr)(char *p) 即:返回值(指针名)(参数列表)typedef

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

原创 对”堆”的理解

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

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

原创 正态分布,Python实现

# coding=utf-8 import numpy as npfrom scipy import statsimport matplotlib.pyplot as plt n = 10p = 0.3k = np.arange(0,21)binomial = stats.binom.pmf(k, n, p) 

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

原创 geohash实现(c语言)

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

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

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

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

2014-11-18 19:52:20 739

原创 exif_imagetype() 函数在linux下的php中不存在

exif_imagetype() 函数在linux下的php中不存在,自己xie

2014-11-07 10:10:27 2933

Mycat-server-1.5.1-RELEASE-20160509173344-linux.tar.gz

分布式数据库Mycat,帮助透明化解决分库、分表、分布式事务、mysql扩容等问题,而对应用端透明,就像操作一台数据库一样轻松! Mycat的github下载下来的文件都损坏了,无法直接使用,可能他们没有编译好,终于找到了个可用了,放在这里供下载!

2016-07-08

淘宝数据库架构演进历程

淘宝数据库架构演进历程丹臣/赵林数据架构师

2016-02-04

简单实用的jquery分页插件

简单实用的jquery分页插件,不会分页的人入门教程!

2015-12-19

flashfirebug-4.69破解版

flashfirebug-4.69破解版

2015-09-22

Windows API 函数大全详解

列出所有Windows API函数,详细解释每个函数功能和使用方法,举出案例

2009-11-05

C++编程规范(成品化你的软件)

描述c++编程中页面代码布局、代码优化、行列格式、结构美学,以及命名格式、编程技巧和C++资源列表的规格手册

2009-10-29

STL入门教程.chm

STL入门教程,vc++模板库stand template library

2009-10-26

VC++ MFC函数库手册

VC++ MFC函数库手册 介绍所有MFC的函数

2009-10-11

MFC写的关于编辑框源的代码

用VC++ 中 MFC编写的一个可编辑对话框的源代码

2009-08-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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