自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(208)
  • 收藏
  • 关注

原创 jquery-选择器

//查找class="first-div"下的第一个a元素,针对所有父级下的第一个$('.first-div a:first-child')//查找class="first-div"下的最后一个a元素$('.first-div a:last-child')//查找class="last-div"下的第二个a元素$('.last-div a:nth-child

2016-11-26 23:40:16 418

转载 秒杀活动防止库存负数问题

解决这个问题比较流行的思路:1、用额外的单进程处理一个队列,下单请求放到队列里,一个个处理,就不会有并发的问题了,但是要额外的后台进程以及延迟问题,不予考虑。(使用队列消耗资源比较多,并且有延迟性,用户体验不好)2、数据库乐观锁(悲观锁),大致的意思是先查询库存,然后立马将库存-1,然后订单生成后,在更新库存前再查询一次库存,看看跟预期的库存数量是否保持一致,不一致就回滚,提示用户

2016-09-26 11:01:33 3016

原创 精华帖

php死锁问题分析:http://www.php100.com/html/it/biancheng/2016/0707/9031.html

2016-08-12 09:25:34 485

原创 go语句初探

go语句和通道类型是Go语言的并发编程理念的最终体现。相比之下,go语句在用法上要比通道简单很多。与defer语句相同,go语句也可以携带一条表达式语句。注意,go语句的执行会很快结束,并不会对当前流程的进行造成阻塞或明显的延迟。一个简单的示例如下:go fmt.Println("Go!")    可以看到,go语句仅由一个关键字go和一条表达式语句构成。同样的,go语句的执行与其

2016-07-30 20:31:43 1155

原创 异常处理--panic

在上一章,已经了解到了足够多的error接口及其周边的知识。现在,是学习另外一种异常处理方式的时候了。先来展示一个名词——panic。panic可被意译为运行时恐慌。因为它只有在程序运行的时候才会被“抛出来”。并且,恐慌是会被扩散的。当有运行时恐慌发生时,它会被迅速地向调用栈的上层传递。如果不显式地处理它的话,程序的运行瞬间就会被终止。这里有一个专有名词——程序崩溃。内建函数panic可以让人为地

2016-07-30 18:42:01 5122

原创 异常处理--error

Go语言的函数可以一次返回多个结果。这就温和地报告错误提供了语言级别的支持。实际上,这也是Go语言中处理错误的惯用法之一。先来回顾前一章的例子:func readFile(path string) ([]byte, error) {    file, err := os.Open(path)    if err != nil {        return nil, err

2016-07-30 18:03:17 386

原创 defer语句

与select语句一样,Go语言中的defer语句也非常独特,而且比前者有过之而无不及。defer语句仅能被放置在函数或方法中。它由关键字defer和一个调用表达式组成。注意,这里的调用表达式所表示的既不能是对Go语言内建函数的调用也不能是对Go语言标准库代码包unsafe中的那些函数的调用。实际上,满足上述条件的调用表达式被称为表达式语句。请看下面的示例:func readFile(

2016-07-30 17:38:05 910

原创 select语句

select语句属于条件分支流程控制方法,不过它只能用于通道。它可以包含若干条case语句,并根据条件选择其中的一个执行。进一步说,select语句中的case关键字只能后跟用于通道的发送操作的表达式以及接收操作的表达式或语句。示例如下:ch1 := make(chan int, 1)ch2 := make(chan int, 1)// 省略若干条语句select {c

2016-07-30 10:42:58 404

原创 for语句

for语句代表着循环。一条语句通常由关键字for、初始化子句、条件表达式、后置子句和以花括号包裹的代码块组成。其中,初始化子句、条件表达式和后置子句之间需用分号分隔。示例如下:for i := 0; i     fmt.Print(i, " ")}      可以省略掉初始化子句、条件表达式、后置子句中的任何一个或多个,不过起到分隔作用的分号一般需要被保留下来,除非在仅有条

2016-07-28 23:51:58 1298

原创 cookie与session详解

两者区别:Session信息是存放在server端,但session id是存放在client cookie的,当然php的session存放方法是多样化的,这样就算禁用cookie一样可以跟踪Cookie是完全保持在客户端的如:IE firefox 当客户端禁止cookie时将不能再使用Cookie的配置与应用:Setcookie(string name, str

2016-07-26 22:57:43 333

原创 switch语句

与串联的if语句类似,switch语句提供了一个多分支条件执行的方法。不过在这里用一个专有名词来代表分支——case。每一个case可以携带一个表达式或一个类型说明符。前者又可被简称为case表达式。因此,Go语言的switch语句又分为表达式switch语句和类型switch语句。      先说表达式switch语句。在此类switch语句中,每个case会携带一个表达式。与if语句中

2016-07-25 21:25:09 2331

原创 if语句

if语句一般会由关键字if、条件表达式和由花括号包裹的代码块组成。所谓代码块,即是包含了若干表达式和语句的序列。在Go语言中,代码块必须由花括号包裹。另外,这里的条件表达式是指其结果类型是bool的表达式。一条最简单的if语句可以是:if 100 > number {     number += 3}    这里的标识符number可以代表一个int类型的值。这条if语句的

2016-07-24 12:18:09 457

原创 指针

在前面多次提到过指针及指针类型。例如,*Person是Person的指针类型。又例如,表达式&p的求值结果是p的指针。方法的接收者类型的不同会给方法的功能带来什么影响?该方法所属的类型又会因此发生哪些潜移默化的改变?下面就来解答第一个问题。至于第二个问题,会在下一小节予以解答。    指针操作涉及到两个操作符——&和*。这两个操作符均有多个用途。但是当它们作为地址操作符出现时,前者的作

2016-07-24 09:53:43 273

原创 接口

在Go语言中,一个接口类型总是代表着某一种类型(即所有实现它的类型)的行为。一个接口类型的声明通常会包含关键字type、类型名称、关键字interface以及由花括号包裹的若干方法声明。示例如下:type Animal interface {    Grow()    Move(string) string}    注意,接口类型中的方法声明是普通的方法声明的简化形式。

2016-07-23 20:11:49 394

原创 结构体和方法

Go语言的结构体类型(Struct)比函数类型更加灵活。它可以封装属性和操作。前者即是结构体类型中的字段,而后者则是结构体类型所拥有的方法。      结构体类型的字面量由关键字type、类型名称、关键字struct,以及由花括号包裹的若干字段声明组成。其中,每个字段声明独占一行并由字段名称(可选)和字段类型组成。示例如下:type Person struct {    N

2016-07-23 19:49:16 667

原创 函数

在Go语言中,函数是一等(first-class)类型。这意味着,可以把函数作为值来传递和使用。函数代表着这样一个过程:它接受若干输入(参数),并经过一些步骤(语句)的执行之后再返回输出(结果)。特别的是,Go语言中的函数可以返回多个结果。      函数类型的字面量由关键字func、由圆括号包裹参数声明列表、空格以及可以由圆括号包裹的结果声明列表组成。其中,参数声明列表中的单个参数声明之

2016-07-23 13:58:26 284

原创 通道的更多类型

通道有带缓冲和非缓冲之分。缓冲通道中可以缓存N个数据。在初始化一个通道值的时候必须指定这个N。相对的,非缓冲通道不会缓存任何数据。发送方在向通道值发送数据的时候会立即被阻塞,直到有某一个接收方已从该通道值中接收了这条数据。非缓冲的通道值的初始化方法如下:make(chan int, 0)    注意,在这里,给予make函数的第二个参数值是0。      除了上述分类方法,

2016-07-23 13:20:19 556

原创 通道类型

通道(Channel)是Go语言中一种非常独特的数据结构。它可用于在不同Goroutine之间传递类型化的数据,并且是并发安全的。相比之下,之前介绍的那些数据类型都不是并发安全的。这一点需要特别注意。      Goroutine(也称为Go程序)可以被看做是承载可被并发执行的代码块的载体。它们由Go语言的运行时系统调度,并依托操作系统线程(又称内核线程)来并发地执行其中的代码块。至于怎样

2016-07-23 12:38:36 2168

原创 字典类型

Go语言的字典(Map)类型其实是哈希表(Hash Table)的一个实现。字典用于存储键-元素对(更通俗的说法是键-值对)的无序集合。注意,同一个字典中的每个键都是唯一的。如果在向字典中放入一个键值对的时候其中已经有相同的键的话,那么与此键关联的那个值会被新值替换。      字典类型的字面量如下:map[K]T        其中,“K”意为键的类型,而“T”则代表元素

2016-07-21 23:04:49 3909

原创 切片的更多操作方法

在进行“切片”操作的时候需要指定元素下界索引和元素上界索引,就像这样:numbers3[1:4]    在有些时候,还可以在方括号中放入第三个正整数,如下所示:numbers3[1:4:4]     这第三个正整数被称为容量上界索引。它的意义在于可以把作为结果的切片值的容量设置得更小。换句话说,它可以限制通过这个切片值对其底层数组中的更多元素的访问。下面举个例子。v

2016-07-21 21:39:46 1048

原创 切片类型

切片(Slice)与数组一样,也是可以容纳若干类型相同的元素的容器。与数组不同的是,无法通过切片类型来确定其值的长度。每个切片值都会将数组作为其底层数据结构。我们也把这样的数组称为切片的底层数组。      表示切片类型的字面量如:[]int   或[]string        可以看到,它们与数组的类型字面量的唯一不同是不包含代表其长度的信息。因此,不同长度

2016-07-21 21:13:27 2733

原创 数组类型

一个数组(Array)就是一个可以容纳若干类型相同的元素的容器。这个容器的大小(即数组的长度)是固定的,且是体现在数组的类型字面量之中的。比如,我们声明了一个数组类型:type MyNumbers [3]int注:类型声明语句由关键字type、类型名称和类型字面量组成。     所谓类型字面量,就是用于表示某个类型的字面表示(或称标记方法)。相对的,用于表示某个类型的值的字面表

2016-07-21 20:47:16 510

原创 变量和常量

在这里需要优先说明的是用于声明变量的关键字var,以及用于声明常量的关键字const。要知道,绝大多数的数据类型的值都可以被赋给一个变量,包括函数。而常量则不同,它只能被赋予基本数据类型的值本身。   变量和常量在声明方式方面也有所不同。可以在声明一个变量的时候直接为它赋值,也可以只声明不赋值。变量的声明并赋值方式如下:// 注释:普通赋值,由关键字var、变量名称、变量类型、

2016-07-20 22:54:55 247

原创 程序实体与关键字

任何Go语言源码文件都由若干个程序实体组成的。在Go语言中,变量、常量、函数、结构体和接口被统称为“程序实体”,而它们的名字被统称为“标识符”。    标识符可以是任何Unicode编码可以表示的字母字符、数字以及下划线“_”。不过,首字母不能是数字或下划线。      注意:在Go语言中,我们对程序实体的访问权限控制只能通过它们的名字来实现。名字首字母为大写的程序实体可以被任何代码包

2016-07-20 21:15:16 670

原创 基础命令使用

基础命令:go run用于运行目录源码文件,只能接受一个命令源码文件以及若干个库源码文件作为文件参数-a:强制编译相关代码,不论它们的编译结果是否已是最新的-n:打印编译过程中所需运行的命令,但不真正执行它们-p n:并行编译,其中n为并行的数量-v:列出被编译的代码包的名称-work:显示编译时创建的临时工作目录的路径,并且不删除它-x:打印编译过程中所需运行的命

2016-07-20 20:57:06 226

原创 基本规则

工作区和GOPATH工作区是放置Go源码文件的目录,一般情况下,Go源码文件都需要存放到工作区中,但是对于命令源码文件来说,这不是必须的src目录:用于存放源码文件,以代码包为组织形式pkg目录:用于存放归档文件(名称以.a为后缀的文件),所有归档文件都会被存放到该目录下的平台相关目录中,同样以代码包为组织形式平台相关目录:两个隐含的Go语言环境变量:G

2016-07-19 20:42:34 325

原创 正则表达式详解

正则表达式主要作用:分割、匹配、查找、替换正则表达式中包括的元素:1.原子(普通字符:a-z  A-Z   0-9   、原子表、转义字符)2.元字符(有特殊功能的字符)3.修正模式符(系统内置部分字符,例如:i、m、s、u)原子1.  a-z  A-Z  0-9  //最常见的字符2. (abc)               //用圆括号包含起来的单元符号,匹

2016-07-10 15:02:41 599

原创 sublime text packagecontrol安装主题

步骤1:下载packagecontrol安装代码对应好sublime版本复制对应的安装代码,切换到sublime,点击view  ->  show console,将安装代码复制,然后回车确定安装需要等一会儿,安装完成后,重启sublime步骤2:加载所有插件按住ctrl + shifft + p,在命令输入框中输入pcki步骤3:加载完插件后,

2016-07-06 21:25:31 1985

原创 git远程服务搭建

第一步,安装git服务器:使用yum安装:yum install -y git第二步,创建一个git用户,用来运行git服务:adduser git第三步:客户端(sourcetree)生成ssh证书第四步:将客户端生成的公钥上传到git服务器上a.在git用户家目录下创建.ssh目录mkdir /home/git/.sshb

2016-07-06 10:38:27 609

原创 vmware tool实现centos共享window文件

步骤一:在网上下载VMwareTools-xx.tar.gz包步骤二:解压并cd到VMwareTools-xx解压目录,运行./vmware-install.pl这个文件进行vmware tool安装步骤三:设置vmware中的虚拟机设置选项(最好是将vmware中的虚拟机关机)步骤四:跳转到 /mnt/hgfs/目录下,就可以看到window系统共享的文件

2016-06-27 22:51:19 345

原创 mapReduce概念及用法

mapReduce 随着"大数据"概念而流行.其实mapReduce的概念非常简单,从功能上说,相当于RDBMS的group 操作mapReduce的真正强项在哪?答:在于分布式,当数据非常大时,像google,有N多数据中心,数据都不在地球的一端,用group力所不及.group既然不支持分布式,单台服务器的运算能力必然是有限的.而mapRecuce支持分

2016-05-19 23:19:35 1038

原创 aggregate聚集框架

#查询每个栏目下的商品数量select cat_id, count(*) from ecs_goods group by cat_id;db.collection.aggregate([{$group:{_id:"$cat_id",total:{$sum:1}}}           //_id、total为查询显示字段,$sum:1为每次分组时加1]);

2016-05-18 23:25:54 505

原创 聚集运算之group

语法:db.collection.group(document){key:{key1:1,key2:1},cond:{},reduce: function(curr,result) {},initial:{},finalize:function() {}}解析:key: 分组字段cond:查询条件reduce:聚合函数 (curr:分组数据的

2016-05-18 22:12:38 746

原创 go语言在linux平台上的搭建

go源码包在官网:golang.org下载,go分三类平台:window、freebsn、linxuLinux下go的环境变量设置:1.GOROOT该环境变量的值应该为Go语言的当前安装目录,例如:export GOROOT=/usr/local/go2.GOPATH该环境变量的值应该为Go语言的工作区的集合,例如:export GOPATH=~/gol

2016-03-21 22:55:06 535

原创 key设计原则

redis 与关系型数据库的适合场景书签系统create table book (bookid int,title char(20))engine myisam charset utf8;insert into book values (5 , 'PHP圣经'),(6 , 'ruby实战'),(7 , 'mysql运维')(8, 'ruby服务端

2015-09-04 22:15:19 483

原创 sentinel运维监控

手动切换redis服务器的主从角色:步骤一:配置一台master主服务器,两台slave服务器,两台slave都指向master(主从配置省略)步骤二:将master进程关闭,方法:可以直接kill掉,也可以在其客户端执行shutdown命令步骤三:将slave1由从服务器切换为主服务器进入slave1客户端,输入info replication

2015-09-04 20:49:20 573

原创 redis运维常用命令

1: 内存# Memoryused_memory:859192 数据结构的空间used_memory_rss:7634944 实占空间mem_fragmentation_ratio:8.89 前2者的比例,1.N为佳,如果此值过大,说明redis的内存的碎片化严重,可以导出再导入一次.2: 主从复制# Replicationrole:slavemaste

2015-09-03 23:11:56 745

原创 redis主从复制

Master配置:1.关闭rdb快照(备份工作交给slave)2.可以开启aofslave-serve-stale-data yesslave配置:1.声明slaveof localhost 6379 #master端口2.配置密码(如果master有密码)3.(某一个)slave打开rdb快照功能4.配置是否只读(slave-read-only yes

2015-09-03 22:06:44 640

原创 aof日志持久化

redis配置参数:appendonly no # 是否打开 aof日志功能appendfsync always   # 每1个命令,都立即同步到aof. 安全,速度慢appendfsync everysec # 折衷方案,每秒写1次(综合性能比较平衡的方案)appendfsync no      # 写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到aof. 同步

2015-09-03 17:49:24 869

原创 rdb快照持久化

Redis的持久化有2种方式   1快照  2是日志Rdb快照的配置选项:save 900 1      // 900内,有1条写入,则产生快照 save 300 1000   // 如果300秒内有1000次写入,则产生快照save 60 10000  // 如果60秒内有10000次写入,则产生快照注意:这3个选项都屏蔽,则rdb禁用stop-wri

2015-09-03 16:52:16 571

空空如也

空空如也

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

TA关注的人

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