使用mod_wsgi在Apache上部署Django项目

django-600x600由于对Apache的不熟悉,部署Django项目时遇到了一些问题,经过搜索终于解决了。记录下来,以供参考。

本文的环境为Ubuntu 14.04,Python 3.4,Django 1.7。

文中Django项目名称为 MyProj,主机名为 domain.com,Web文件目录为 /var/www,Django项目根目录为 MyProj,所谓的项目根目录,是指执行 django-admin.py startproject命令创建的以项目名字命名的目录,即该目录下有manage.py文件。
MyProj目录位于 /var/www/domain.com目录下。 继续阅读

Java字符串对象的创建与拼接

javaString是Java中最常用的类之一。

对于String,Java Doc中描述是一旦被创建就不能被更改(“Strings are constant; their values cannot be changed after they are created”),任何对String对象的修改操作都会生成新的String对象。

了解String对象创建与拼接的一些内部细节,有利于更高效地对字符串进行操作。 继续阅读

《深入理解Java虚拟机》读书笔记——高效并发

深入理解Java虚拟机并发处理的广泛应用是使得Amdahl定律代替摩尔定律称为计算机性能发展源动力的根本原因,也是人类压榨计算机运算能力最有力的武器。

Amdahl定律通过系统中并行化与串行化的比重来描述多处理器系统获得的运算加速能力,摩尔定律则用于描述处理器晶体管数量与运行效率之间的发展关系。这两个定律的更替代表了近年来硬件发展从追求处理器频率到追求核心并行处理的发展过程。 继续阅读

《深入理解Java虚拟机》读书笔记——程序编译与代码优化

深入理解Java虚拟机Java语言的“编译期”是一段“不确定”的操作过程,因为它可能是指一个前端编译器把*.java文件转变成*.class文件的过程;也可能是指虚拟机的后端运行期编译器(JIT编译器,Just In Time Compiler)把字节码变成机器码的过程;还可能是指使用静态提前编译器(AOT编译器,Ahead Of Time Compiler)直接把*.java文件编译成本地机器代码的过程。 继续阅读

《深入理解Java虚拟机》读书笔记——虚拟机字节码执行引擎

深入理解Java虚拟机执行引擎是Java虚拟机最核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上的,而虚拟机的执行引擎则是由自己实现的。

在Java虚拟机规范中指定了虚拟机字节码执行引擎的概念模型,这个概念模型成为各种虚拟机执行引擎的统一外观。在不同的虚拟机实现里面,执行引擎在执行Java代码的时候可能有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择,也可能两者兼备,甚至还可能包含几个不同级别的编译器执行引擎。但从外观上看起来,所有的Java虚拟机的执行引擎都是一致的:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果。 继续阅读

《深入理解Java虚拟机》读书笔记——虚拟机类加载机制

深入理解Java虚拟机虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。

与编译时需要进行连接工作的语言不同,Java语言中类型的加载和连接过程都是在程序运行期间完成的,这样会在类加载时稍微增加一些性能开销,但是却能为Java应用程序提供高度的灵活性,Java中动态扩展的语言特性就是依赖运行期动态加载和动态连接这个特点实现的。 继续阅读

《深入理解Java虚拟机》读书笔记——Class类文件结构

深入理解Java虚拟机Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件之中,中间没有添加任何分隔符。当遇到需要占用8位字节以上空间的数据项时,则会按照高位在前的方式分割成若干个8位字节进行存储。

Class文件格式采用一种类似于C语言结构体的伪结构来存储,这种伪结构中只有两种数据类型:无符号数和表,后面的解析都要以这两种数据类型为基础。 继续阅读