February 15, 2016
深入解析php中的foreach问题
"篇文章是对php中的foreach问题进行了详细的分析介绍,需要的朋友参考下\n前言: php4中引入了foreach结构,这是一种遍历数组的简单方式。相比传统的for循环,foreach能够更加便捷的获取键值对。在php5之前,foreach仅能用于数组;php5之后,利用foreach还能遍历对象(详见:遍历对象)。本文中仅讨论遍历数组的情况。foreach虽然简单,不过它可能会出现一些意外的行为,特别是代码涉及引用的情况下。\n下面列举了几种case,有助于我们进一步认清foreach的本质。\n问题1:\n$arr = array(1,2,3); foreach($arr as $k =\u0026gt; \u0026amp;$v) { $v = $v * 2; } // now $arr is array(2, 4, 6) foreach($arr as $k =\u0026gt; $v) { echo \u0026#34;$k\u0026#34;, \u0026#34; =\u0026gt; \u0026#34;, \u0026#34;$v\u0026#34;; } 先从简单的开始,如果我们尝试运行上述代码,就会发现最后输出为0=\u0026gt;2 1=\u0026gt;4 2=\u0026gt;4 。\n为 …"
February 15, 2016
JavaScript垃圾回收机制
"一、垃圾回收的必要性\n下面这段话引自《JavaScript权威指南(第四版)》\n_ 由于字符串、对象和数组没有固定大小,所有当他们的大小已知时,才能对他们进行动态的存储分配。JavaScript程序每次创建字符串、数组或对象时,解释器都必须分配内存来存储那个实体。只要像这样动态地分配了内存,最终都要释放这些内存以便他们能够被再用,否则,JavaScript的解释器将会消耗完系统中所有可用的内存,造成系统崩溃。_\n这段话解释了为什么需要系统需要垃圾回收,JS不像C/C++,他有自己的一套垃圾回收机制(Garbage Collection)。JavaScript的解释器可以检测到何时程序不再使用一个对象了,当他确定了一个对象是无用的时候,他就知道不再需要这个对象,可以把它所占用的内存释放掉了。例如:\nvar a = \u0026#34;before\u0026#34;; var b = \u0026#34;override a\u0026#34;; var a = b; //重写a 这段代码运行之后,“before”这个字符串失去了引用(之前是被a引用),系统检测到这个事实之后,就会释放该字符串的存储空间以便这些空间可以被再利 …"
February 2, 2016
利用 Dockerfile 来创建镜像
"使用 docker commit 来扩展一个镜像比较简单,但是不方便在一个团队中分享。我们可以使用 docker build 来创建一个新的镜像。为此,首先需要创建一个 Dockerfile,包含一些如何创建镜像的指令。\n新建一个目录和一个 Dockerfile\n$ mkdir sinatra $ cd sinatra $ touch Dockerfile Dockerfile 中每一条指令都创建镜像的一层,例如:\n# This is a comment FROM ubuntu:14.04 MAINTAINER Docker Newbee RUN apt-get -qq update RUN apt-get -qqy install ruby ruby-dev RUN gem install sinatra Dockerfile 基本的语法是\n使用#来注释 FROM 指令告诉 Docker 使用哪个镜像作为基础 接着是维护者 MAINTAINER 的信息 RUN开头的指令会在创建中运行,比如安装一个软件包,在这里使用 apt-get 来安装了一些软件 编写完成 Dockerfile 后 …"
February 2, 2016
docker安装入门篇
"一、下载镜像 image 可以使用 docker pull 命令来从仓库获取所需要的镜像。\n下面的例子将从 Docker Hub 仓库下载一个 Ubuntu 12.04 操作系统的镜像。\n$ sudo docker pull ubuntu:12.04 Pulling repository ubuntu ab8e2728644c: Pulling dependent layers 511136ea3c5a: Download complete 5f0ffaa9455e: Download complete a300658979be: Download complete 904483ae0c30: Download complete ffdaafd1ca50: Download complete d047ae21eeaf: Download complete 下载过程中,会输出获取镜像的每一层信息。\n该命令实际上相当于\n$ sudo docker pull registry.hub.docker.com/ubuntu:12.04 命令,即从注册服务 …"
February 2, 2016
docker常用命令
"官方命令: https://docs.docker.com/reference/\n1. 查看docker信息(version、info) # 查看docker版本 $docker version # 显示docker系统的信息 $docker info 2. 对image的操作(search、pull、images、rmi、history) # 检索image(sudo docker pull ubuntu:12.04,该命令实际上相当于 $ sudo docker pull registry.hub.docker.com/ubuntu:12.04 命令,即从注册服务器 registry.hub.docker.com 中的 ubuntu 仓库来下载标记为 12.04 的镜像。) $docker search image_name[:tag] # 下载image $docker pull image_name # 列出镜像列表; -a, --all=false Show all images; --no-trunc=false Don\u0026#39;t truncate output; -q, …"
February 2, 2016
docker与vm之间的最基本的区别
"5分钟弄懂Docker! http://www.csdn.net/article/2014-07-02/2820497-what%27s-docker\nDocker入门与实践: https://www.gitbook.com/book/yeasy/docker_practice\n在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。\n下面的图片比较了 Docker 和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。\nVirtual Machines是由虚拟机管理程序来实现对 虚拟机 的管理,而docker是用docker Engine来实现对 应用 的管理。可以理解为一个套硬件的管理,一个是软件的管理。\n对比传统虚拟机总结 基本概念 Docker 包括三个基本概念\n镜像(Image) 容器(Container) 仓库(Repository) 理解了这三个概念,就理解了 Docker 的整个生命周 …"
January 19, 2016
MySQL索引之聚集索引
"导读 在MySQL里,聚集索引和非聚集索引分别是什么意思,有什么区别?\n在MySQL中,InnoDB引擎表是(聚集)索引组织表(clustered index organize table),而MyISAM引擎表则是堆组织表(heap organize table)。\n也有人把聚集索引称为聚簇索引。\n当然了,聚集索引的概念不是MySQL里特有的,其他数据库系统也同样有。\n简言之,聚集索引是一种索引组织形式,索引的键值逻辑顺序决定了表数据行的物理存储顺序,而非聚集索引则就是普通索引了,仅仅只是对数据列创建相应的索引,不影响整个表的物理存储顺序。\n我们先来看看两种存储形式的不同之处:\n简单说,IOT表里数据物理存储顺序和主键索引的顺序一致,所以如果新增数据是离散的,会导致数据块趋于离散,而不是趋于顺序。而HOT表数据写入的顺序是按写入时间顺序存储的。 IOT表相比HOT表的优势是:\n范围查询效率更高;\n数据频繁更新(聚集索引本身不更新)时,更不容易产生碎片;\n特别适合有一小部分热点数据频繁读写的场景;\n通过主键访问数据时快速可达;\nIOT表的不足则有:\n数据变化如果是离散为主的话,那么效率 …"
January 19, 2016
你真的了解SQL的索引吗?
"其实对于非专业的数据库操作人员来讲,例如软件开发人员,在很大程度上都搞不清楚数据库索引的一些基本知识,有些是知其一不知其二,或者是知其然不知其所以然。造成这种情况的主要原因我觉的是行业原因,有很多公司都有自己的DBA团队,他们会帮助你优化SQL,开发人员即使不懂优化问题也不大,所以开发人员对这方面也就不会下太多功夫去了解SQL优化,但如果公司没有这样的DBA呢,就只能靠程序员自己了。 最近突然想起前一阵和一朋友的聊天,当时他问我的问题是一个非常普通的问题:说说SQL聚集索引和非聚集索引的区别。\n大家可能认为这个问题难度不大,认为太熟悉了,也许不会感兴趣,但你真能说清楚吗?其实要想说明白这两者的差别也不是三两句就说的清的,那天我也是觉的这问题太泛了,就随便说了其中的两个区别:\n聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个,这个跟没问题没差别,一般人都知道。\n聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储并不连续,这个大家也都知道。\n上面的两点从大的方面讲都是讲的通的,后面我们继续探讨,举一个实际点的例子,一个学生表student,里面是学生号id,学生 …"
January 19, 2016
MySQL聚簇索引&聚集索引&索引组织表myisam
"MySQL聚簇索引\u0026amp;聚集索引\u0026amp;索引组织表\nhttp://www.cnblogs.com/hustcat/archive/2009/10/28/1591648.html\n聚簇索引和聚集索引(Clustered Index) 说起索引,不能不说B+树。\n引用: http://blog.codinglabs.org/articles/theory-of-mysql-index.html\nMySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构。\n我们知道,数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。最基本的查询算法当然是顺序查找(linear search),这种复杂度为O(n)的算法在数据量很大时显然是糟糕的,好在计算机科学的发展提供了很多更优秀的查找算法,例如二分查找(binary search),二叉树查找(binary tree search)等。如果稍微分析一下会发现,每种查找算法都只能应用于特定的数据结构 …"
December 22, 2015
使用 Git Hook 实现网站的自动部署
"自动化能解放人类的双手,而且更重要的是,因为按照规定的流程来走,也减少了很多误操作的产生。不知道大家平时都是怎么样更新自己生产环境的代码的,FTP 覆盖旧文件、服务器定时任务去 build 最新的源码,还是有更高级的做法?\n目前我在使用 Git Hook 来部署自己的项目。Git Hook 是 Git 提供的一个钩子,能被特定的事件触发后调用。其实,更通俗的讲,当你设置了 Git Hook 后,只要你的远程仓库收到一次 push 之后,Git Hook 就能帮你执行一次 bash 脚本。\nGit的挂钩(Hook)主要包含:\napplypatch-msg post-update pre-rebase commit-msg pre-applypatch update post-commit pre-commit post-receive prepare-commit-msg 这里我们只需要使用 post-receive 这个 Hook:在接收 post(push)请求之后执行。\n下面是我使用 Git Hook 进行简单的自动化部署,可能还有更高级的做法,大家自己去挖掘。\n服务器上需要配置两 …"