这两年买了不少书,现在有的和正在看的一些书在这里列个清单。

外语

  1. 《大家的日语》 第一册 外研社
  2. 《标准日本语》 初级
  3. 《日语学习入门》
  4. 《赖世雄经典英语语法》

IT

  1. 《Python基础教程 第2版》 邮电出版社
  2. 《深入浅出NodeJS》 邮电出版社
  3. 《数据结构与算法分析–C语言描述》 机械工业出版社
  4. 《数据库系统基础教程》 机械工业出版社
  5. 《白帽子讲Web安全》 电子工业出版社
  6. 《MySQL入门很简单》 清华大学出版社
  7. 《计算机网络 第5版》 谢希仁 电子工业出版社
  8. 《Vim使用技巧》 邮电出版社
  9. 《精通正则表达式》 电子工业出版社
  10. 《人月神话》 清华大学出版社
    阅读全文 »

PHP有很多的web的框架,熟悉基本的PHP开发后再看一两个框架的核心,一般都能搞一个PHP框架出来。一些框架提供的源文件组织方式是一个很好的学习示例,但是很多小团队开发的框架却经常组织混乱,隐藏了很大的问题。

最近Carry(音)又在做一个项目,让我过去帮帮忙,用的是他自己的“框架”,看起来他对于自己的作品还很有信心和自豪感,但是这两天接触了一下,发现问题很大,这里记录分析一下。

这个框架使用了命名空间,这是很好的,在之前的文章中也推荐了这种做法,希望所有的PHP开发者都能使用命名空间,不管了PSR-0还是PSR-4的。而这个虽然使用了命名空间,命名空间的组织却混乱不堪,好像既不符合PSR-0又不符合PSR-4。。。。。这就尴尬了。

当然,我对于这个框架并不是完全熟悉,可能一些有点还没有发现,但是对于文件夹的组织却问题极大,它的文件夹组成大概是这个样子的:

|-assets
|-js
|-css
|-img
|-boots
|-lib
|-config
|-entity
|-ksc
|-module-1
|-part1.1
|-***.php
|-module-2
|-part2.1
|-***.php
|-tmp
|-cache
|-...
|-tpl
|-module-1
|-part1.1
|-***.tpl
|-module-2
|-part2.1
|-***.tpl
|-module-1
|-module-2
阅读全文 »

一直一来web相关的项目都是用php做的,最近有点迷失方向,又想学一下java的web开发了。现在SSH似乎已经被Spring MVC + myBaits 的组合盖过去了,今天花时间熟悉了一下 Spring MVC,现在的感觉就是配置文件很多,很多运行时条件都依赖于 xml 的配置,一些类的实例通过xml定义的 bean 实现。一些之前常听说的概念,比如 控制反转,容器等等,现在了解的层次比较低,还不是很清晰。

使用IDEA建立一个SpringMVC的项目并不算难,使用maven管理依赖也很方便, 主要通过 https://www.youtube.com/watch?v=_SOXs4xdurE&index=2&list=PLml1rD21IUxGxDe6XokRjr2m-rWuoerqfhttps://www.youtube.com/watch?v=ZpivYI_a3_8 这两个视频了解。

待续。。。。

10...91是最早的一台虚拟机之一,是VirtualBox运行在Windows Server 2008 R2 上的,到现在已经运行了两年多了,基本没出什么问题。上面主要提供Git服务、一个Web server、一个Svn Server。前几天发现ssh登录的时候会直接返回 connection failed。并没有什么其他的信息。而直接ping则能ping通该IP。

非常奇怪的问题,由于前段时间一直没有用到这个机器就没管它。这几天重新做科委要提交git的时候总是失败(因为ssh都连不上,git肯定就提交不了了)。攒了很多commit在本地总觉得不安心,所以就找找原因,解决一下。

虚拟机停止运行

还好有Windows server的远程登录权限,登陆上去看了一下,91这台机器还在运行,但是试图从 Virtual Box 的图形界面登录时直接报错了,然后只能强制关闭该虚拟机,而运行的其它几台虚拟机都没有问题。仔细看了一下报错内容有一些 DISK FULL相关的内容。查看了一下 Virtual Box对该虚机的配置,32G的动态空间,已用17GB,没有问题啊,宿主机器(Windows Server 2008)分两块磁盘,C盘100GB,D盘750GB,而虚机使用的磁盘文件放在D盘,应该不可能磁盘空间不足的。

阅读全文 »

在面向对象程序设计中,经常见到各种设计原则、设计模式。面向对象的优势就是其针对各种场景的成体系的设计模式,当然过于复杂的设计模式也是Java经常被人诟病的一点。而 SOLID 的就是其中最重要的5条设计原则的首字母缩写,不仅仅是Java,任何面向对象设计的语言编程都应该尽量遵循这5条原则,它们分别是:

  1. SRP, Single Responsibility Principle,单一职责原则
  2. OCP, Open Closed Principle,开放封闭原则
  3. LSP, Liskov Substitution Principle,里氏替换原则
  4. ISP, Interface Segregation Principle,接口分离原则
  5. DIP, Dependency Inversion Principle,依赖倒置原则

这些原则是 Robert C. Martin 整理来的,它们使得一个程序员开发的软件更加容易维护和扩展。虽然它们不是进行软件开发的强制性约束,但是如果对这些原则有很好的理解,并且能在自己的代码中考虑这些规则,很可能可以写出更好的面向对象代码。

单一职责原则(SRP)

单一职责是指一个类或者模块应该有且只有一个去改变它的理由,这意味着一个类应该只有一项职责,并且该功能应该由这个类完全封装起来。

阅读全文 »

前面几天一直忙着改论文,终于捯饬一篇出来投出去了,接下来可以有一段时间休息了。可以把这几天玩的东西整理整理了。这段时间主要玩的东西是Sass和Docker。其实这两样在以前都有一点点接触过,Sass和LESS大概在学CSS之后不久就有了解,只是觉得还要装一个编译器挺麻烦的,还不如直接写CSS;Docker也是大概大四的时候接触到,当时在服务器上装了一下,可是由于当时的网络实在不好,拉取镜像总是很慢或者失败,就没玩了。

这一篇主要记录一下Sass的简单认识。我们知道Sass是CSS的一个预处理器,也可以看作是一种更强大的CSS扩展编程语言,其官网 http://Sass-lang.com/ 可以看出来Sass的目标是一种编程语言,让CSS的编写更加方便,更加像一门编程语言。其实还有一种也很常见的CSS预处理语言: LESS。LESS 也被广泛使用,LESS的特性是可以直接被浏览器使用,而LESS文件通常比编译出来的CSS文件小很多,这可以带来一定的性能优势,但是需要在客户端解析,这又导致一定的性能开销。关于LESS和Sass有很多比较,就不啰嗦了,反正我只玩了一下Sass,对LESS不甚了解。据说新版的Bootstrap会转向Sass,看来Sass是一个不错的选择。

安装和使用

这类预处理工具多由ruby开发,实在的,现在很多工具类应用都用ruby或者nodejs开发了,尤其是面向开发者使用工具。ruby和nodejs有很大的优势,倒是python见得少了些。要安装Sass编译器需要先安装ruby,然后用gem安装Sass。在Linux下面还是比较方便的,在Windows下就有些麻烦了,并且国内的网对gem库并不那么友好,常需要切到淘宝的镜像才能快速解决。

阅读全文 »

今天科委的项目有子系统报错说有几条数据上传不了,各种排查终于搞好了。

首先是ESB的服务器他们重启了,然后IP没配对,端口没配对,我们curl一直是失败的,导致我们的nginx返回 504 gateway timeout。这个问题之前有一篇文章已经说过了。php执行curl的时间超过了nginx配置的响应时间,就会报 upstream time out 然后给客户端返回 504 。

等ESB服务起好了,深圳那边有一条数据始终传不上了,诡异的是ESB根本没有收到数据。我把我们转发的PHP的日志记录改了好多次,终于发现是在某一步上传的内容被置空了,所以在我们转发的时候,其实并没有把子系统的数据发到 ESB。

调试了一下,发现是 iconv 执行失败了。 不同的系统对接麻烦的就是字符集的问题,我们的项目一直都是用 UTF-8的,可是很多的java项目都使用GBK,东华的ESB系统也是使用GBK编码的,所以我们收到数据后要执行一次字符集转换才能转发到ESB:

$xml = iconv('UTF-8', 'GBK', $xml);

就是这一步,iconv转换失败的时候会返回false而不是报错,也没有日志记录,所以 $xml 被置为 false 了。。。。。至于为什么会失败,我也不知道,应该是有某种特殊编码把,有一个办法可以跳过这个转换失败,就是在目标字符集加一个选项:

$xml = iconv('UTF-8', 'GBK//IGNORE', $xml);

领略到我大 PHP 神奇的方法调用了么~~~

参考:

前段时间,室友面试被问到了java的类加载机制。关于类加载机制之前看《深入理解Java虚拟机》的时候看过这一章,不过都忘得差不多了,只记得有一个复杂的流程:验证-准备-解析-初始化等等,今天复习一下顺便做个笔记。

Java代码编译为字节码(.class文件)后,需要加载到虚拟机之后才能运行和使用,还有很多运行在JVM平台的其他语言(如Grovvy, scala, kotlin等)也会被编译为符合JVM字节码规范的文件后被虚拟机读取运行。那么JVM是如何运行这些字节码文件的呢。

与C语言的在编译时进行连接工作不同,Java中, 类型的加载和连接都是在程序运行时期完成的,Java的动态扩展的语言特性就是依赖于运行期动态加载和动态连接的特点。

阅读全文 »

最近在网上看到一些很有意思的面试题,题目一般比较短,但是分析起来很有启发性,这里做个收集,遇到好玩的就补进来。

1. 现在有100亿个数字大小为1到10亿的数字,在这100亿个数字里边只有一个数字出现的次数是奇数次的,你用什么方法,找出这个数字呢?

阅读全文 »