Categories
java

java简介

    java作为已经有30年历史的编程语言的确很不错了。当初在各种C语言及其拓展的影响下,为了解决跨平台的问题而开发出java运行时环境即JRE(java runtime environment)。其语法从C++中继承出来,又参考了C#的特性。

    当年开发C的时期,人们需要做大量操作系统的判断去书写代码,进而调用系统接口实现功能。过程难度极大又极其容易出错。jre就是用来解决这个问题的。在linux系统下,jre文件夹中会有一个jvm.so文件,而windows系统就是jvm.dll。这个文件就是java虚拟机(java virtual machine)。为什么会叫做java虚拟机?因为你可以把他想象成一个操作系统的代理,java需要调用的操作系统的api是先通过各操作系统都一致的标准函数、接口来调用jvm,jvm再调用操作系统的api调用系统资源。看上去jvm就像是一个代理操作系统一般提供底层资源的操作,所以才叫java虚拟机。

    java的开发过程:所谓一次编译,到处运行。开发者先编写出.java文件(人类能看懂的),然后通过javac将.java文件转变为.class文件(jvm能读取的二进制文件),该class文件也是跨平台的。执行java命令启动jvm,jvm读取class文件执行代码流程。理论上,我只要生成了class文件,在任何一个安装了jre的操作系统都能运行。

    作为面向对象的编程语言,java也是一枝独秀,该特点会一直积极影响住java的生命历程。

Categories
nodejs

nodejs简介

    从语言级别我们称nodejs其实并不准确,应该叫做javascript。但其实我们更想强调javascript对服务端的应用和影响而不是浏览器,所以标题就成为nodejs简介。

    nodejs 是一个基于 Chrome V8 引擎的javascript运行环境。 Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型。

    上述两个特征中,第一点说明了nodejs的运行环境,也说明了nodejs其实是从chrome浏览器内核的v8引擎剥离出来的运行时环境,所以天生nodejs与浏览器就有密不可分的关系(同一套javascript代码既可以在浏览器运行,也可以在nodejs环境运行)。

    第二点也是最明显的特点,nodejs在处理异步的需求下,其实不是用传统的多线程解决方案,而是用基于事件回调的方式执行。所以nodejs就只有两个线程,一个事件线程,一个执行线程。事件线程就收事件信号,再通知执行线程执行代码。所以nodejs天生就是异步的,“面向消息回调编程”(这个是有点开玩笑的成分了)。然而由于javascript大多数开发人员都熟悉,所以也是最好上手的编程语言之一。并且作为脚本语言,调试难度低,开发周期短,语法自由也是不可忽视的优势。

Categories
php

php简介

    php原始为Personal Home Page的缩写,已经正式更名为 “PHP: Hypertext Preprocessor”。

    php依赖php运行容器即php进程,通过该进程对php文件进行输入处理,在 标准输出流 返回输出结果。特点运行简单,无需编译。在web容器下,每个请求都会产生一个php进程,所以只需把php文件更改后,立即访问该php文件,即可看见最新的更改(每发送一个请求,产生了新的进程重新读取文件)。调试十分方便。

运行php环境有多种方法

    1:通过php命令

    php -f “xxx.php” 通过指定需要加载php文件,开启php进程,在控制台标准输出流看到该文件的输出。

    php -s localhost:8080 (-t “项目文件夹”) 通过-t 指定php文件的文件夹,默认为当前进程执行文件夹目录。浏览器访问localhost:8080通过文件系统路径访问对应的文件(默认为index.php),即可在浏览器看到对应文件的输出。这个就是把php进程的输出流打在web容器的请求输出上,所以能在浏览器看到输出

    2:通过web容器访问。其实就是通过web容器执行请求输入到socket中(文件socket或端口socket都可)。服务器开启php-fpm服务,监听对应的socket作为进程输入,将php-fpm的标准输出流打在socket上供web容器读取。web容器再把socket的读取的内容作为请求响应返回给用户。(这就是标准的cgi做法,以进程标准输入流接受请求,标准输出流产生响应,一个请求就是一个进程)。

    nginx配置:

location ~ .php$ {
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

    apache配置:

LoadModule php7_module “${INSTALL_DIR}/bin/php/php7.1.9/php7apache2_4.dll”

<IfModule php7_module>
    DirectoryIndex index.php index.php3 
AddType application/x-httpd-php .php
    AddType application/x-httpd-php .php3
</IfModule>