- 博客(156)
- 资源 (12)
- 收藏
- 关注
原创 Golang百万级高并发实践
写在前面Go语言作为新兴的语言,最近发展势头很是迅猛,其最大的特点就是原生支持并发。它使用的是“协程(goroutine)模型”,和传统基于 OS 线程和进程实现不同,Go 语言的并发是基于用户态的并发,这种并发方式就变得非常轻量,能够轻松运行几万并发逻辑。Go 的并发属于 CSP 并发模型的一种实现,CSP 并发模型的核心概念是:“不要通过共享内存来通信,而应该通 过通信来共享内存”。这在 G
2018-01-09 22:17:48
34852
20
原创 Golang设计模式之观察者模式
1. 概述观察者模式简单一句话说就是当特定事件出现时,一个对象实例把事件发布到对应的观察者实例上执行相应的更新操作。一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展,这就是观察者模式的模式动机。其类图如下:具体的代码可示例从github上进行下载。2. golang具体实现示例首先,定一个事件类型,发生事件驱动时将事件传递给观察者们。
2017-12-12 17:34:56
4494
原创 golang log模块之log4go使用介绍
1. 描述在go语言中,自身已经集成了一定log模块,开发者可以使用go语言自身的log包(import “log”)。也有不少对自身log的开源封装。对于一些简单的开发,自身的log模块就已经足够应付。但是对一些大型,复杂的开发,log需要分门别类的输出,或者通过网络进行输出,自身log模块将难以应对。当前也有一些比较重量级的log模块,比如logrus,可以实现比较复杂的功能。这里介绍一个轻量级
2017-11-19 20:29:46
13355
原创 Golang设计模式之代理模式
1. 概述代理模式,简单来说就是提供一个对象来控制其他对象的功能。在一些情况下,一个Object不适合直接引用目标对象,但可以通过代理对象调用目标对象,起到中介代理的作用。相关源代码demo在Github上,可供参考!2. 实现示例那个简单的例子,中介代理各业主的房子。每个业主都有个卖房的函数。中介代理的相关实现如下://被代理的公共函数//type ProxyFuncs interface {
2017-10-22 16:38:25
2674
原创 Golang设计模式之装饰模式
1. 概述装饰模式就是在不改变对象内部结构的情况下,动态扩展它的功能。它提供了灵活的方法来扩展对象的功能。2. 实现下面是一个简单的实现逻辑,通过Decorate来进一步装饰Dressing函数:type Object func(string) stringfunc Decorate(fn Object) Object { return func(base string) string {
2017-10-14 21:20:47
2483
原创 Golang设计模式之外观模式
1. 概述它为一套复杂的调度子系统提供一个统一的接入接口。外部所有对子系统的调用都通过这个外观角色进行统一调用,降低子系统与调用者之间的耦合度。 Golang设计模式相关源码在github上有提供,可供参考!2. 举例说明那当前比较热门的微服务来说,一套服务(比如说短视频服务)包括若干子服务,如图(a),如:音乐服务,短视频服务,计数服务,推荐子服务等。客户端不同的请求会使用不同的子服务。客户端视
2017-09-24 16:46:25
2363
原创 Golang设计模式之单例模式
1. 概述单例模式,顾名思义就是在程序的运行中只产生一个实力。在Go实现上也有多种形式。相关源代码demo在Github上,可供参考!2. 实现一、懒汉模式.这种方式实现起来特别简单,直接判断一个实力是不是为nil, 如果是,则新生成;否则返回已有的。但它和多数语言一样,只适合用在单线程。type SingleTon struct {}var instance *SingleTonfunc Get
2017-09-16 11:52:15
4596
原创 golang设计模式之建造者模式
1. 概述建造者模式将一个复杂的对象与它的表示分离,同样的创造过程可以建造出不停的表示。比如汽车,它包括商标、车轮、颜色、发送机等各种部分。而对于大多数用户而言,无须知道这些部件的装配细节,也几乎不会使用单独某个部件,而是使用一辆完整的汽车,可以通过建造者模式对其进行设计与描述,建造者模式可以将部件和其组装过程分开,一步一步创建一个复杂的对象。类图: 相关源代码demo在Github上,可供参考!
2017-09-03 17:00:40
3468
1
原创 golang设计模式之工厂方法模式
1. 概述简单工厂模式是通过传递不同的参数生成不同的实例,缺点就是扩展不同的类别时需要修改代码。工厂方法模式为每一个product提供一个工程类,通过不同工厂创建不同实例。类图:相关源代码demo在Github上,可供参考!2. 实现过程工厂方法定义一个创建struct的接口,让子struct去实现。type AnimalFactory interface { CreateAni
2017-09-03 16:48:26
4459
原创 golang设计模式之简单工厂模式
1. 写在前面在面向对象的编程语言中(如java,C++)设计模式的概念广为人知, 应用的也非常广泛。设计模式让我们的代码变得灵活起来,具有很强的扩展性。但在与C语言比肩的Go语言中,设计模式的概念并没有十分突出,甚至很少听到。在Go的开发中,借鉴design pattern的理念同样回味无穷我们的开发带来极大的便利。相关源代码demo可从Github上,可供参考!2. 简单工厂模式1. 简单工厂模
2017-08-31 23:15:55
3866
原创 Docker 初实践手札
1. Docker简介 Docker 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的运行效率,降低了云计算资源供应的成本! 使用 Docker,可以让应用的部署、测试和分发都变得前所未有的高效和轻松! 无论是应用开发者、运维人员、还是其他信息技术从业人员,都有必要认识和掌握 Docker,以在有限的时间内做更多有意义的事。 Docker 自开源后受到广泛的关注和讨论,至
2017-08-30 15:57:33
2393
原创 ELK 日志监控平台环境搭建及使用说明
1. ELK概述ELK,也就是Elasticsearch、Logstash、Kibana三者的结合,是一套开源的分布式日志管理方案.Elasticsearch:负责日志存储、检索和分析LogStash:负责日志的收集、处理Kibana:负责日志的可视化方案: 2. 环境搭建为整体环境创建一个合适的目录,mkdir $project_path/ELK, project_path 根据情况而定,例如”
2016-11-01 14:29:28
18434
原创 php 使用“/dev/urandom”获取随机数
描述 首先,说一下伪随机数,伪随机数并不是假随机数,这里的“伪”是有规律的意思,就是计算机产生的伪随机数既是随机的又是有规律的。怎样理解呢?产生的伪随机数有时遵守一定的规律,有时不遵守任何规律;伪随机数有一部分遵守一定的规律;另一部分不遵守任何规律。比如“世上没有两片形状完全相同的树叶”。 /dev/random和/dev/urandom是Linux系统中提供的随机伪设备,这两个设备的任务,
2016-09-22 21:37:48
6244
原创 各种语言(php、python、shell、perl)中读一行或stdin
描述 支持标准输入输出的程序语言有很多,例如shell、php、python、perl、C等。在编写各种脚本完成目标任务时,数据的输入时比较常见的逻辑。下面逐个列举一下使用的例子。示例 在php中,我们可以用如下方式:<?php$file = fopen("php://stdin", "r");while( ($line = fgets($file)) !== false) {
2016-09-12 13:14:17
3360
原创 Mysql 复制表结构
like 方法语法格式:CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name{ LIKE old_tbl_name | (LIKE old_tbl_name) }示例: create table a like origin_tb;特点: like方法复制一个完全相同的新表,包括复制表的备注、索引、主键外键、存储引擎等。select 方法示例: crea
2016-09-06 14:13:59
3465
原创 makefile: *** missing separator. Stop
问题描述 在执行Makefile时,有时候会出现missing separator的错误,通常的原因是tab格式导致的。原因 makefile里只有命令所在的行才能且只能以TAB开头,make变量的定义、赋值,make内定函数如$(error “strings”)都不能以TAB开头,不然make会将其作为命令来处理!格式检查 使用如下命令, tasbs 用“^I”显示,$是一行的结束。cat
2016-09-01 15:35:37
15036
原创 PHP 正则表达式过滤特殊字符
问题描述 php使用正则表达式过滤特殊的字符示例<?phpfunction replaceSpecialChar($strParam){ $regex = "/\/|\~|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\+|\{|\}|\:|\<|\>|\?|\[|\]|\,|\.|\/|\;|\'|\`|\-|\=|\\\|\|/"; return p
2016-05-09 12:07:33
18416
原创 PHP 删除数组第一个元素和最后一个元素
1. array_shift()函数 删除数组中第一个元素,并返回该元素的值。如果数组为空则返回null。 示例:<?php$test_arr = array ( "name" => "jeanphorn", "skill" => "programming", "hobby" => "swimming",);echo array_shift($test_arr).
2016-02-29 18:51:40
13076
原创 mongoDB 查询操作
1. mongoDB 文档查询查询语法格式:db.COLLECTION_NAME.find()find()方法查询指定集合中所有的文档,并已非结构化的方式显示。如果需要直观的显示结果,可以再find后面加上pretty()方法。例子:> > db.person.find() { “_id” : ObjectId(“56932620f5a8b7a5f1203a69”), “name” :
2016-01-11 15:28:28
2162
原创 MongoDB 文档的更新操作
1. 更新文档 MongoDB更新文档的方法主要有两个,update()和save()。2. update()方法2.1 格式说明 update()方法适合更新MongoDB中已存在的集合,格式如下:db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>,
2015-12-02 19:04:52
2118
原创 MongoDB 文档的更新操作
1. 更新文档 MongoDB更新文档的方法主要有两个,update()和save()。2. update()方法2.1 格式说明 update()方法适合更新MongoDB中已存在的集合,格式如下:db.collection.update( <query>, <update>, { upsert: <boolean>, multi: <boolean>,
2015-12-02 19:02:28
1571
原创 Linux 多线程编程 线程属性
1. 线程属性的结构 一般情况来说,当我们需要使用多线程时直接调用pthread_create()函数的默认参数即可满足我们的需求,但有些时候我们也需要调整线程的属性。线程的属性结构为pthread_attr_t,在< pthreadtypes.h>中定义,原型如下:typedef struct __pthreat_attr_s{ int __detchstate;
2015-11-25 15:19:21
1881
原创 linux 多线程编程
1. Linux 多线程介绍 线程的概念早在上世纪60年代就被提出,知道上世纪80中期才被真正使用起来。Solaris是线程使用的先驱,在传统的UNIX系统中,一个线程就对应一个进程,多线程类似于多进程,线程的左右没有得到很好地发挥。现在多线程技术已经得到广泛的使用,与多进程相比,它具有的有点主要有:系统资源消耗低执行速度快线程间的数据共享相比进程更加容易 Linux 系统下的多线
2015-11-24 18:53:16
1098
原创 MongoDBm基本概念的分析
1. mongodb 基本概念 mongo基本的概念包括数据库、文档、集合。以下分别予以介绍。1.1 数据库 一个mongodb可以建立多个数据库,每一个都有自己独立的目录和权限,不同的数据库放在不同的文件中。使用”show dbs”可以显示所有的数据库列表。 >mongo MongoDB shell version: 3.0.7 connecting to: test >
2015-11-19 19:11:40
1394
原创 MongoDB介绍以及在linux平台的安装使用
1. MongoDB简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB >将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
2015-11-16 20:20:02
1190
原创 Linux c++ 生成和使用链接库文件
1. 静态链接库 静态库是obj文件的集合,一般以“.a”为后缀。静态库的有点事可以不用重新编译源程序,直接进行程序的重新链接,节省编译时间。开发者可以提供库文件而不用开放源代码。 命令: $ar -rcs obj文件1 obj文件2 例如我们编写一个string.cc的文件,里面定义了一个求字符串长度的函数。 #define END '\0'int my_strlen(
2015-11-02 14:23:08
2901
原创 Leetcode 297 Serialize and Deserialize Binary Tree(序列化与反序列化二叉树)
1. 描述 设计一个算法,实现二叉树的序列化与反序列化。如何实现没有限制,只要保证一颗二叉树可以序列化为一个string串,然后这个string串可以反序列化为原来的二叉树即可。详细描述如下: 2. 方法与思路 采用先序遍历的思路,为了保证重构二叉树时,节点能够插入到数中的正确位置,空节点用“#”保存。为了保证从字符串中读取节点值方便,节点的值在字符串中用空格分开。重构时依旧安装先序的思想
2015-10-30 11:07:08
3549
原创 360笔试题 找老乡
1. 问题描述 大学的同学来自全国各地,对于远离家乡步入陌生大学校园的大一新生来说,碰到老乡是一件多么激动的事。于是大家都热衷于问身边的同学是否与自己同乡,来自新疆的小妮尤其热衷。但是大家不告诉他来自哪里,只是说谁是同乡,从所给的信息中你能告诉有多少人是小妮的同乡吗?2. 输入 每个测试实例首先包括两个整数N(1≤N≤10001 \le N \le 1000), M(0≤M≤N∗(n−1)/20
2015-10-29 17:31:30
2323
原创 php call_user_func()函数
1. 函数说明 调用回调函数。原型: mixed call_user_func ( callable callback[,mixedcallback [, mixed parameter [, mixed $… ]] )。 第一个参数 callback 是被调用的回调函数,其余参数是回调函数的参数。参数可以有多个,也可以是数组。 参数不可以为引用,但可以通过数组传递引用。下面是一个例子:
2015-10-26 18:30:28
6388
原创 php_uname()函数
1. 说明 php_uname — 返回运行 PHP 的系统的有关信息。 原型:string php_uname ([ string $mode = “a” ] )。返回运行php的操作系统的相关描述,和 phpinfo() 最顶端上输出的是同一个字符串。 如果仅仅要获取操作系统的名称。可以考虑使用常量 PHP_OS,不过要注意该常量会包含 PHP 构建(built)时的操作系统名。2. 参
2015-10-26 09:54:42
9100
原创 Leetcode 283 Move Zeroes
1. 问题描述 给定一个数组nums[],把数组中的所有0元素移动到非零元素的后面。例如,给定数组nums= [0, 1, 0, 3, 12], 完成移动后的数组为nums = [1, 3, 12, 0, 0]。要求不使用辅助数组,尽量少的操作。2. 方法与思路 思路一,在不改变非零元素的相对位置情况下移动0元素,可考虑冒泡排序的思路,将0元素冒泡至数组的右侧。 1)、从右往左遍历数组。
2015-10-06 16:45:22
1185
转载 Hadoop fs shell命令
FS Shell调用文件系统(FS)Shell命令应使用 bin/hadoop fs 的形式。 所有的的FS shell命令使用URI路径作为参数。URI格式是scheme://authority/path 。对 HDFS文件系统,scheme是hdfs ,对本地文件系统,scheme是file 。其中scheme和 authority参数都是可选的,如果未加指定,就会使用配置中指定的默认sche
2015-09-09 18:03:46
1293
原创 libevent 安装与使用说明
1. 简介 libevent是一个事件触发的网络库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue、IOCP等系统调用管理事件机制。著名分布式缓存软件memcached也是基于libevent,而且libevent在使用上可以做到跨平台,而且根据libevent官方网站上公布的数据统计,似乎也有着非凡的性能。 主要特点如下:事件驱
2015-08-11 16:16:44
5165
转载 Linux中shell变量说明
原文地址:http://123304258.blog.163.com/blog/static/12354702012423113850772/ 为使shell编程更有效,系统提供了一些shell变量。shell变量可以保存诸如路径名、文件名或者一个数字这样的变量名。shell将其中任何设置都看做文本字符串。 有两种变量,本地和环境。严格地说可以有4种,但其余两种是只读的,可以认为是特殊变量,它用
2015-08-11 12:24:04
3787
原创 C++ std::tr1::bind使用
1. 简述 同function函数类似,bind函数同样也可以实现类似于函数指针的功能,但却却比函数指针更加灵活,特别是函数指向类 的非静态成员函数时。std::tr1::function 可以对静态成员函数进行绑定,但如果要对非静态成员函数的绑定,需用到下机将要介绍的bind()模板函数。 bind的声明如下: template<class Fty, class T1, class
2015-08-10 16:38:28
6066
原创 C++ std::tr1::function使用
1. 介绍 function 是一种通用、多态的函数封装。std::function 的实例可以对任何可以调用的 目标 进行存储、复制、和调用操作,这些目标包括函数、lambda 表达式、绑定表达式、以及其它函数对象等。(c++11起的版本可用) function(和bind一样)可以实现类似函数指针的功能,却比函数指针更加灵活(体现在占位符上面),尤其是在很多成员调用同一个函数(仅仅是参数
2015-08-06 19:53:10
6700
原创 C++ std::tr1::shared_ptr使用说明
1. 介绍 shared_ptr 是通过指针保持某个对象的共享拥有权的智能指针。若干个 shared_ptr 对象可以拥有同一个对象;最后一个指向该对象的 shared_ptr 被销毁或重置时,该对象被销毁。销毁该对象时使用的是 delete 表达式或者是在构造 shared_ptr 时传入的自定义删除器(deleter)。 特点: shared_ptr 也可以不拥有对象,称作空(e
2015-08-06 18:58:26
5629
原创 protobuf 简单入门
1. 概述 protobuf(Protocol Buffers )是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。 特点: 结构数据串行化,灵活、高效、自动。相对XML,更
2015-08-05 10:02:22
3658
原创 查找两个链表的交叉节点
1. 问题描述 给定两个单链表,查找这两个单链表的交叉节点。例如:链表listA为:a1→a2→c1→c2→c3a_1 \to a_2 \to c_1 \to c_2 \to c_3,链表listB为:b1→b2→b3→c1→c2→c3b_1 \to b_2 \to b_3 \to c_1 \to c_2 \to c_3。那么这两个的第一个交叉节点为c1c_1。2. 方法与思路 首先,观察一下交
2015-08-04 09:37:49
6664
原创 旋转数组
1. 问题描述 从右侧旋转一个n个元素的数组,旋转k位。例如:n=7,k=3n = 7, k=3, arr=[1,2,3,4,5,6,7]arr=[1,2,3,4,5,6,7]旋转成为arr=[5,6,7,1,2,3,4]arr=[5,6,7,1,2,3,4]。2. 方法与思路 其实这个问题类似于字符串逆置问题中的句子逆置。比如“hello world”逆置成”world hello”。解决这种
2015-07-25 11:01:04
4178
Qt入门案例记事本
2014-01-20
c语言常见问题
2012-02-08
《计算机网络高分笔记》
2012-02-08
计算机考研各方向院校专业分析
2012-02-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人