自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 资源 (4)
  • 收藏
  • 关注

原创 项目总结

历时一个多月的地狱式开发(每晚都忙到11点以后,偶尔1、2点,没有节假日和周末),项目终于上线了,虽然有各种问题,但还是觉得应该总结一下得失,便于提高自己。由于刚转岗到现在的部门,刚来就参与了项目,负责的是项目中的一个模块,属于核心业务,而且之前完全没接触过这块的业务,亚历山大。项目开始第一周,天天开会,基本就是在开会中度过,下午开会,晚上开会,每次会议都要2、3个小时,结果一个星期过去了,项目几...

2018-04-18 20:22:23 394

原创 nsq源码阅读 nsqd源码四 nsqd/lookup.go 与nsqlookupd服务的交互

NSQD对象的Main()方法中有一段代码:n.waitGroup.Wrap(func() { n.lookupLoop() })启动一个goroutine,处理与nsqlookupd进程的交互。封装在nsqd/lookup.go中。这个goroutine的主要功能有:1、连接nsqlookupd服务,执行IDENTIFY操作;2、将nsqd的Metadata中的topic、channel注册到n...

2018-02-08 17:08:38 673

转载 golang中json与struct中tag简介

使用Golang 的 encoding/json 库已经提供了很好的封装,可以让我们很方便地进行 JSON 数据的转换。Go 语言中数据结构和 JSON 类型的对应关系如下表:golang 类型JSON 类型注意事项boolJSON booleans 浮点数、整数JSON numbers 字

2018-02-02 14:03:10 20142

转载 go语言的字节序

最近在看nsq的源码时候,发现它处理message的时候,都会采用字节序进行数据包的处理,于是我觉得有必要深入了解下TCP协议中 字节序的知识字节序(Byte Order)我们一般把字节(byte)看作是数据的最小单位。当然,其实一个字节中还包含8个bit (bit = binary digit)。 在一个32位的CPU中“字长”为32个bit,也就是4个byte。在这样的CP

2017-12-07 16:05:53 9706 2

原创 nsq源码阅读 nsqd源码三 tcp.go

NSQ的TCP逻辑都是这样的,调用internal/protocol/tcp_server.go中的TCPServer:func TCPServer(listener net.Listener, handler TCPHandler, l app.Logger)接受客户端连接,在这里客户端为consumer,调用TCPHandler.Handle处理业务逻辑,TCPHandler.Ha

2017-11-21 18:28:09 750

原创 golang随机数生成——关于rand.Seed的一点记录

Golang随机数生成注意事项记录。

2017-11-16 11:23:10 33828 1

原创 PHP安装问题集锦

Ubuntu-16.4下PHP安装问题集锦。

2017-07-07 17:21:37 272

原创 nsq源码阅读 nsqd源码二 nsqd/nsqd.go

查看nsqd模块的入口文件apps/nsqd/nsqd.go可知,nsqd模块从开始到结束经历了5步:1、初始化nsqd实例nsqd.New();2、读取元数据nsqd.LoadMetadata();3、保存元数据nsqd.PersistMetadata();4、主方法nsqd.Main();5、程序终止nsqd.Exit()初始化初始化时设置了--data-p

2017-06-01 17:14:20 614

原创 nsq源码阅读 nsqd源码一 apps/nsqd/nsqd.go

之前已经将NSQ的nsqlookupd模块源码大致的看了一遍了,现在开始阅读nsqd模块的源码。作为NSQ的核心模块,代码量也相对多点。废话不多说,开始读代码。首先从mai()方法开始:func main() { prg := &program{} if err := svc.Run(prg, syscall.SIGINT, syscall.SIGTERM); err != nil {

2017-05-24 18:19:53 1538

原创 Golang实战-一个聊天室的实现二

在上一篇《Golang实战-一个聊天室的实现》中,我们按照书上写了个简单的聊天室,今天我们来加点我们自己的东西:可新增房间,并切换房间。要想新建房间,得有个房间的对象,保存房间的一些基本信息:type RoomInfo struct { Name string `json:"name"` //删除房间时用,只有房间创建者可删除 CreaterId strin

2017-05-23 17:25:25 1577

原创 Golang实战-一个聊天室的实现

《Go语言程序设计》中第8.10节有个聊天室的例子,我们就来跟着完成这个例子。不用使用任何第三方包,基于命令行,方便学习。

2017-05-18 15:36:48 8793 2

原创 nsq源码阅读 nsqlookupd源码五 http.go http_server.go

再来看看关于HTTP的处理逻辑:httpServer := newHTTPServer(ctx)新建HTTP实例,跟踪代码,nsqlookupd/http.go:package nsqlookupdimport ( "fmt" "net/http" "net/http/pprof" "sync/atomic" "github.com/julienschmidt/

2017-05-16 14:41:35 853

原创 nsq源码阅读 nsqlookupd源码四 lookup_protocol_v1.go

阅读nsqlookupd/tcp.go源码时,有一段代码:err = prot.IOLoop(clientConn)对TCP数据处理的核心逻辑,对应的代码就是nsqlookupd/lookup_protocol_v1.go,现在来阅读这里的代码:package nsqlookupdimport ( "bufio" "encoding/binary" "encoding

2017-05-03 17:36:58 835

原创 nsq源码阅读 nsqlookupd源码三 tcp.go tcp_server.go

nsqlookupd.go中对TCP的处理代码为protocol.TCPServer(tcpListener, tcpServer, l.opts.Logger)用户监听处理nsqd发送的信息TCPServer在internal/protocol/tcp_server.go中定义:package protocolimport ( "fmt" "net" "runt

2017-05-02 16:26:03 472

原创 nsq源码阅读 nsqlookupd源码二 registration_db.go

RegistrationDB,字面意思:注册数据库,保存nsqd的注册信息,这里提供一系列增、删、改、查的操作封装

2017-05-02 14:29:38 735

原创 golang实战--实现短地址服务

golang写的简单的短地址服务,只做练手用,还有很多不完善的地方TODO:验证URL的有效性;确认URL的协议(http、https)数据库操作优化现在的路由太简单了下面贴上代码package mainimport ( "database/sql" "fmt" "net/http" "io/ioutil" "encoding/json" _ "

2017-04-11 15:40:02 2809

原创 nsq源码阅读 nsqlookupd源码一 nsqlookupd.go

查看nsq的几个模块,发现nsqlookupd模块的代码量最少,所以从它开始。从nsqlookupd/nsqlookupd.go文件开始:package nsqlookupdimport ( "fmt" "log" "net" "os" "sync" "github.com/nsqio/nsq/internal/http_api" "github.com/nsqio/n

2017-03-23 10:17:50 717

原创 golang线程同步WaitGroup简介

WaitGroup用于线程同步,WaitGroup等待一组线程集合完成,才会继续向下执行。 主线程(goroutine)调用Add来设置等待的线程(goroutine)数量。 然后每个线程(goroutine)运行,并在完成后调用Done。 同时,Wait用来阻塞,直到所有线程(goroutine)完成才会向下执行。对官方的代码做简单修改:package mainimport ( "

2017-03-14 18:00:59 45561

转载 golang读写锁RWMutex

读写锁是针对读写的互斥锁基本遵循两大原则:1、可以随便读,多个goroutine同时读2、写的时候,啥也不能干。不能读也不能写RWMutex提供了四个方法:func (*RWMutex) Lock // 写锁定func (*RWMutex) Unlock // 写解锁func (*RWMutex) RLock // 读锁定func (

2017-03-14 16:15:50 1545

原创 ThinkPHP中_after_update、_before_update等的用法

TP系统\Think\Model类里隐藏了几个有用的方法:_before_insert、_after_insert、_before_delete 、_after_delete、_before_update、_after_update、_after_select。。。。。。但是在手册里并没有列出来,只有在源码中才能看到。新建个测试类ArticleModel.class.php

2015-12-17 13:51:10 11020

原创 PHP设计模式——装饰器模式(decorator)

如果已有对象的部分内容或功能性发生改变,但是不需要修改原始对象的结构,那么使用装饰器设计模式最适合。学习面向对象都知道,面向对象的三大特性,其中继承,在实际编程中,被大量的使用。但是如果一个类的子类过多,那么相应的代码就会牺牲编程人员的理解力和可维护性。通常,我们应该竭力保证,一个对象的父--子关系不超过3个。创建过多的父--子关系,那么代码就会变得混乱和难以控制。对于某些问题来说,使用基于装饰器

2015-10-20 14:07:24 1216

原创 PHP设计模式——建造者模式(builder)

建造者模式是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,它着重于一步步构造一个复杂对象。class product{ protected $_type = ''; protected $_size = ''; protected $_color = ''; public function setType($type){ $this->_type =

2015-10-08 11:08:48 577

原创 PHP设计模式——适配器模式(Adapter)

在应用程序中,你也许会使用一个文档的代码库,然而,我们常常要添加新的功能,这些功能要求使用不同的方式使用现有的对象。可能新功能只是需要一个不同的名字,也可能是新功能需要与原有的对象稍有不同的行为。  针对上述问题,采用适配器模式是个很好的解决方案。使用适配器模式创建另一个对象,这个Adapter对象充当了原始应用与新功能之间的中介。适配器设计模式只是将某个对象的接口适配为另一个对象所期望的接口

2015-09-21 17:24:26 481

转载 50个非常有用的PHP工具

PHP is one of the most widely used open-source server-side scripting languages that exist today. With over 20 million indexed domains using PHP, including major websites like Facebook, Digg and WordPr

2015-07-02 17:20:09 1134

原创 Linux下php添加新扩展

每个PHPer都应该自己动手在Linux上搭建php环境,对php的各种配置也应该熟悉。

2015-04-30 17:40:01 3756

原创 codeigniter中count_all_results()问题

SQL语句是这样的:    $this->db->select('*')->from('mytable');     $count = $this->db->count_all_results() ;       $config = array(            'base_url' => '/financing/dayconsumption',            '

2015-04-02 11:55:34 4061 2

原创 codeigniter MySQL加减运算

使用codeigniter更新MySQL时,如果要用到MySQL的加减运算,可以这样做:$this->db->set('field', 'field+1', FALSE);$this->db->update('mytable'); 如果插入时要用到加减运算的话,可以用:$this->db->insert('mytable');set() 也接受可选的第三个参数($escap

2015-03-31 15:32:58 1239

原创 phpmailer发送邮件失败

在用phpmailer发送邮件时,本地都是好的,到服务器上就不行了,提示发送成功,但受不到邮件,firebug查看提示连接不上邮件服务器。在网上找了很久,最多的说法是这样:更改phpmailer的class.smtp.php文件:$this->smtp_conn = @fsockopen( $host, // the host of the server

2014-12-23 18:43:52 2251

原创 jquery validate 无法验证hidden隐藏域问题

表单中出现hidden隐藏域时,jquery.validate就无法y

2014-11-20 09:11:52 8335 3

原创 MySQL事件调度和存储过程

在开发中,周期性执行某个任务

2014-08-04 17:09:11 783

原创 PHP手册中empty()和isset()的解释和区别

empty(PHP 4, PHP 5)empty — 检查一个变量是否为空说明bool empty ( mixed$var )如果 var 是非空或非零的值,则 empty() 返回 FALSE。换句话说,""、0、"0"、NULL、FALSE、array()、var $var;以及没有任何属性的对象都将被认为是空的,如果var 为空,则返回 TRU

2014-07-23 14:34:39 504

原创 PHPExcel导出数据出现500 Internal Server Error

在用PHPExcel导出数据时,出现了500 Internal Server Error报错,

2014-07-23 10:58:39 5980 1

原创 PHP strlen()和mb_strlen()简单解析

strlen — 获取字符串长度

2014-07-03 20:04:23 12392

Principles of Computer System Design第一券

不想成为架构师的程序员不是一个好的码农,MIT架构入门书籍,架构入门必备。

2018-07-25

计算机程序设计艺术英文版高清123卷.pdf

计算机程序设计艺术高清英文版,算法经典读物,不容错过。

2018-02-12

游戏开发中的人工智能

你的游戏是否有角色不能任意走动?是否有角色走进障碍物?是否有非玩家角色不能按照团队运动?现在你就可以掌握高级人工智能(ai)技术以解决这些问题。不管你是编程新手或者是个仅仅想快速学习ai的熟练游戏编程人员,你都会发现《游戏开发中的人工智能》对于理解并应用ai到你的游戏中是非常合适的入门书籍。

2015-02-12

Java Servlet编程(第二版)

Java Servlet编程(第二版)英文版,学习servlet必备。

2014-08-26

空空如也

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

TA关注的人

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