作者归档:starlight36

Docker技术入门

关注Docker这项技术差不多一年多了,最近关于Docker的使用案例越来越多,于是就想动手实验下这项技术。自己整理了一个入门手册,分享给大家。

Docker是什么

Docker是一种容器技术,它可以将应用和环境等进行打包,形成一个独立的,类似于iOS的APP形式的“应用”,这个应用可以直接被分发到任意一个支持Docker的环境中,通过简单的命令即可启动运行。Docker是一种最流行的容器化实现方案。和虚拟化技术类似,它极大的方便了应用服务的部署;又与虚拟化技术不同,它以一种更轻量的方式实现了应用服务的打包。使用Docker可以让每个应用彼此相互隔离,在同一台机器上同时运行多个应用,不过他们彼此之间共享同一个操作系统。Docker的优势在于,它可以在更细的粒度上进行资源的管理,也比虚拟化技术更加节约资源。

 vm-vs-docker-architecture虚拟化和Docker架构对比,来自Docker官网

继续阅读

一道关于PHP类型转换的面试题

最近在为公司面试新人,经常会问到的一道题目就是PHP类型转换的值,例如:

我印象中最早见到这道题目是在英极的PHP高级开发工程师岗位的笔试题里面,看似很基础,但是依然可以难住不少PHPer。先来看一下运行结果:

对于大多数人来说,第1、2、4行通常是没有问题的。但是为什么false转换为字符串是空字符串呢?在处理请求值时,通常会传一个字符串类型的false,但是“false”(字符串)并非false(布尔),这有点令人疑惑了。

为什么会这样呢? 继续阅读

PHP使用数据库的并发问题

在并行系统中并发问题永远不可忽视。尽管PHP语言原生没有提供多线程机制,那并不意味着所有的操作都是线程安全的。尤其是在操作诸如订单、支付等业务系统中,更需要注意操作数据库的并发问题。

接下来我通过一个案例分析一下PHP操作数据库时并发问题的处理问题。

首先,我们有这样一张数据表:

继续阅读

Mac OS X安装PHP扩展支持

最近升级到了Mac OS X 10.10 Yosemite版本,系统的PHP环境也跟着升级了,从原来的5.4升级到了5.5.14。开发系统中的一些PHP扩展库全都木有了,需要重新安装。现在记录一下这个,以备查询。

安装PHP扩展要求你的Mac系统已经安装了Xcode环境和命令行开发工具,如果还没安装,请先使用Shell安装。

为了扩展管理方便,首先来安装pecl扩展管理器。

继续阅读

进阶PHP需要注意的一些点

最近写了一段时间PHP,发现了不少以前没有注意到或者意识到的事情,写一篇记录分享一下。PHP进阶一定要注意这些事情。

用好PECL

PECL(The PHP Extension Community Library),PHP官方提供的PHP扩展库。这个主要可以解决社区和第三方提供的PHP扩展的安装问题。早些年看张宴老师的PHP编译部署的文档,生产环境的PHP扩展安装从那时起都是从网站上下载,然后自己编译安装。后来PHP版本升级后,原来文档里面提供的扩展包已经不能匹配新版PHP环境了。其实PHP一直都有PECL这个工具用来管理第三方扩展,使用起来非常方便。

在Linux/Unix/MacOS上,使用PECL是一件非常方便的事情。如果你的PHP环境是自己编译的,在PHP的安装目录的bin下会有pecl这个文件,把它软链到/usr/bin下面你就可以随时使用pecl了。以下给出两种软链它的方案,Linux发行版推荐使用alternatives工具。

我的PHP安装在:/usr/local/php-5.5.10

继续阅读

换了新环境

话说,宝剑锋从磨砺出,梅花香自苦寒来。安稳久了整个人都懒了。于是必须得活动活动,不能年纪轻轻23岁就开始了30岁以后的日子。从旧环境到新环境,适应变化的过程可以积累很多成长的。

23岁了的确该闯一闯事业了。想想两三年前在任老师的团队工作的经历,虽然很辛苦但是真的很开心,每一点点付出都是有回报的,那就是成长。

今天在新公司收拾办公室了,刚刚起步一切弄的都很匆忙,所以只好先清理办公室,把IT基础设施搞起来。作为一个“全栈工程师”,综合布线安防监控这些活也是必须会干滴。

office

要说项目团队什么最重要?我觉得吧氛围最重要。啥叫氛围,氛围就是项目团队成员对项目的不自觉的全身心投入。大家目标一致,执行力强。虽然可能都感觉到项目困难重重,但终究是能突破的。这就应该是项目团队的形成状态了。

继续阅读

关于EnitiyFramework的ObjectConext生命周期

最近在一个项目里用了EntityFramework作为持久层。发现在Web系统中使用EF框架还是有一些东西需要注意的。有一点就是ObjectContext的生命周期。

在见到的多数EF框架的实例代码中,很多人喜欢使用using语句方式创建ObjectContext,最初我的代码也是这样书写的,后来发现其实有很多不便。然后仔细研究了一下到底应该怎么管理ObjectConext的生命周期。这儿常见的ObjectContext生命周期管理方式有四种:

  • 每个原子操作分配一个ObjectContext
  • 全局共用一个ObjectContext
  • 每个线程创建一个ObjectContext
  • 每个业务对象分配一个ObjectConext

原子操作分配ObjectConext,就是常见的using方式,一系列操作创建一个对象,用后即销毁。代码常常是这种:

我在DAO中使用了这种写法,但是并不方便。因为DAO层只应该负责数据的读写,那么一次数据操作上下文对象结束了,但是业务中,通常要多长存取,实体对象要再次持久化,就比较麻烦了(一个实体是关联到一个ObjectContext对象的,不能关联多个,关联不一致也不能被保存)。最后被迫把复杂的逻辑推向了DAO,这影响了架构的稳定性。在WebService类型的应用中使用这种方式,还是很科学的。因为WebService本身就是无状态的,原子操作内使用一个ObjectContext对象是非常科学的。

全局共用一个ObjectContext,即系统启动的时候,创建一个ObjectContext对象保存到静态变量里面。这种方式适合于桌面应用,多线程应用中可能会出现并发问题,或者效率问题。

为每个线程创建一个ObjectContext,这种做法比较适合于Web应用。ASP.NET的Web应用里面每个请求都是短暂的,在一个请求内使用一个ObjectContext,可以很方便的管理上下文。实现的思路很简单,将ObjectContext添加到HttpContext中,在RequestEnd事件时销毁。关于这个的实现,可以参考这篇文章:

《自定义Unity对象生命周期管理集成ADO.NET Entity Framework》

http://www.cnblogs.com/shanyou/archive/2008/08/24/1275059.html

这篇文章里面使用Unity这个简单的DI容器。

每个请求一个ObjectContext对象的方式,更像是Hibernate的Session对象的使用方式。在和Spring整合后,利用Filter实现将Session的生命周期延长至视图。

对每个业务对象分配一个ObjectContext的方式,就是针对每个实体进行上下文对象的分配。这种方式还没有真正使用过,不好做评论,只是看到一些技术文章里面有提到。

微信公众平台接入的安全性

最近微信公众平台非常红火,基于公众平台的接入应用也越来越多。不过在处理接入入口的安全问题上,可能不是那么的严谨。现在我们来讨论下如何保证微信公众平台接入的安全性。

根据微信官方提供的消息接口指南,微信公众平台分为接入和使用两步。接入程序官方提供了一个简单的例子,我们来回顾一下接入认证的方式:

继续阅读

使用Entity Framework访问MySQL数据库

简介

Entity Framework (EF,ADO.NET Entity Framework)是微软官方提供的.NET平台的ORM框架。相比于LINQ TO SQL,EF框架具有很明显的优势:

  • EF框架支持多种数据库,而不仅仅局限于微软的SQL Server,MySQL,Oracle都有良好的支持。
  • 支持存储过程。
  • 强大的可视化模型设计工具,与Visual Studio深度整合。
  • 与.NET平台的其他技术整合良好。

继续阅读

关于Java8的lambda表达式

在Java 8中lambda表达式终于被支持了。在其他语言中,匿名函数和lambda表达式早已被广泛使用了。我们常用的Javascript最常见到这一特性:

在Javascript中,函数被当做一种类型,可以像其他类型一样进行传递和调用。这种灵活的匿名函数模式使得Javascript可以很好的进行异步操作。同样在C#中,由于委托的存在,匿名函数也具有十分重要的价值。

继续阅读