JavaScript
Javascript 简称JS,是一种动态的弱类型脚本解释性语言,和HTML、CSS并称三大WEB核心技术,得到了几乎主流浏览器支持。
静态网页技术
早期的HTML设计之初,只能HTML,里面可以显示文字、图片,使用CSS来控制颜色、字体大小等。再后来引入了JavaScript就可以是网页可以人机交互、可以让元素动起来。但这都不是内容的动态变化。
动态网页技术
网页的内容是后端根据用户从浏览器端提交的请求不同,通过后台的程序将内容临时拼凑好,生成HTML,返回到浏览器端,通过浏览器端渲染呈现。常见的有ASP、JSP、PHP、Nodejs等。
开发语言分类
面向机器语言
- 机器指令或对应的助记符,与自然语言差异太大
- 汇编语言
面向过程语言
- 做一件事情,排出个步骤,第一步干什么,第二步干什么,如果
出现情况A,做什么处理,如果出现了情况B,做什么处理 - 问题规模小,可以步骤化,按部就班处理
- C语言
面向对象语言
- 一种认识世界、分析世界的方法论。将万事万物抽象为各种对象
- 类是抽象的概念,是万事万物的抽象,是一类事物的共同特征的集合
- 对象是类的具象,是一个实体
- 问题规模大,复杂系统
按照与自然语言的差异分类
低级语言
- 机器语言、汇编语言都是面向机器的语言,都是低级语言。不同机器是不能通用的,不同的机器需要不同的机器指令或者汇编程序
高级语言
- 接近自然语言和数学语言的计算机语言
常见语言
C语言
- 面向过程编程,只有函数
- 操作系统编程、单片机编程等领域
C++语言
- 底层高效开发
- 面向对象,学习难度极大,目前标准发展有点乱
Java
- WEB开发领域第一,延伸领域极多,库丰富
- 大数据领域生态完整
Python
- 入门门槛低,非专业程序员容易接受,他们有丰富的专业知识,但计算机专业知识不够
- Python简洁的语法,不需要让他们关注背后的细节,可以让他们较容易的掌握并开始编程
- 运维开发
Javascript
- 网景公司发明的动态脚本语言,前端开发第一语言
- JavaScript才是目前 前后端通吃的全栈语言
- 前端执行的JS代码,需要从服务器端发送到浏览器端,在浏览器端使用JS引擎执行
Go
- C语言之父Ken Thompson亲自参与设计
- 静态编译型语言,但结合了动态解释性语言的特点,例如GC
- 充分利用多核,适合高并发场景
WEB架构
后端资源分类:
静态资源
- 图片:一旦创建好,图片文件不再改变。图片数目多,占用磁盘空间多,一般使用单独的图片服务器
- HTML、CSS、JavaScript:这些文本是文本的,有前端工程师可以修改,但修改次数较少,一段时间都不变
动态资源
- 内容有后台程序动态生成,比如查询数据库,将查询结果生成为HTML
PC端或移动端浏览器访问
- 从静态服务器请求HTML、CSS、JS等文件发送到浏览器端,浏览器端接收后渲染在浏览器上
- 从图片服务器请求图片资源显示
- 从业务服务器访问动态内容,动态内容是请求后有后台服务访问数据库后得到的,最终返回到浏览器端
WEB App访问
- 内置了HTML和JS文件,不需要从静态WEB服务器下载JS或HTML。为的就是减少文件的发送,现代前端开发使用的JS文件太多或太大了
- 有必要就从图片服务器请求图片,从业务服务器请求动态数据
客户需求多样,更多的内容还是需要由业务服务器提供,业务服务器往往都是由一组服务器组成。
后台应用架构
单体架构
- JSP、Servlet
- 打包成一个jar、war部署
- 服务器有开源的tomcat、jetty。商用的有Jboss、weblogic、websphere、glassfish商用的
Dubbo
- 分布式服务框架
- 将单体程序分解成多个功能服务模块,模块间使用Dubbo框架提供的高性能RPC通信
- 阿里开源贡献给了ASF
- 内部协调使用Zookeeper,实现服务注册、服务发现。有服务治理
Spring cloud 微服务
- 将单体应用拆分为粒度更小的单一功能服务
- RPC通信
- 需要更高的运维水平,服务太多了需要服务治理
不同的应用架构,部署方式也有不同。
Java
组成
Java包含下面部分:
- 语言、语法规范。关键字if、for、class等等
- 编写源代码source code
- 依赖库,标准库、第三方库。底层代码太难使用开发效率低,封装成现成的,好比净菜直接可以烧了,但是什么口味程序员自己定
- JVM虚拟机。字节码运行在JVM之上

由于操作系统ABI(应用程序二进制接口)不一样,采用编译方式,需要为不同操作系统编译二进制程序。
1995年,Java发布Applet技术,Java程序在后台编译成字节码,发送到浏览器端,在浏览器中运行一个Applet程序,这段程序是运行在另外一个JVM进程中的。
但是这种在客户端运行Java代码的技术,会有很大的安全问题。1997年CGI技术发展起来,动态网页技术开始向后端开发转移,在后端将动态内容组织好,拼成HTML发回到浏览器端。
Java动态网页技术
servlet
本质就是一段Java程序
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
private String message;
public void init() throws ServletException
{
message = "Hello World";
}
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<h1>" + message + "</h1>");
}
public void destroy()
{
}
}
在Servlet中最大的问题是,HTML输出和Java代码混在一起,如果网页布局要调整,就是个噩梦。
jsp(Java Server Pages)
提供一个HTML,把它变成一个模板,也就是在网页中预留以后填充的空,以后就变成了填空了。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jsp例子</title>
</head>
<body>
后面的内容是服务器端动态生成字符串,最后拼接在一起
<%
out.println("你的 IP 地址 " + request.getRemoteAddr());
%>
</body>
</html>
JSP是基于Servlet实现,JSP将表现和逻辑分离,这样页面开发人员更好的注重页面表现力更好服务客户。
JSP 先转换为 Servlet的源代码.java文件(Tomcat中使用Jasper转换),然后再编译成.class文件,最后就可以在JVM中运行了。

JDK
JRE:它是Java Runtime Environment缩写,指Java运行时环境, 包含 JVM + Java核心类库
JRE=JVM+库
JDK=开发tools集+JRE=开发tools集+JVM+库
JDK:它是Java Development Kit,即 Java 语言的软件开发工具包。
JDK也就是常说的J2SE,在1999年,正式发布了Java第二代平台,发布了三个版本:
J2SE:标准版,适用于桌面平台
J2EE:企业版,适用于企业级应用服务器开发
J2ME:微型版,适用于移动、无线、机顶盒等设备环境
2005年,Java的版本又更名为JavaSE、JavaEE、JavaME。
Servlet、Jsp都包含在JavaEE规范中。
JDK7、JDK8、JDK11是LTS(Long Term Suppot)
JDK协议是JRL(JavaResearch License)协议
OpenJDK
OpenJDK是Sun公司采用GPL v2协议发布的JDK开源版本,于2009年正式发布

https://openjdk.java.net/projects/jdk6/
OpenJDK 7是基于JDK7的beta版开发,但为了也将Java SE 6开源,从OpenJDK7的b20构建反向分支开发,从中剥离了不符合Java SE 6规范的代码,发布OpenJDK 6。所以OpenJDK6和JDK6没什么关系。
OpenJDK使用GPL v2可以用于商业用途。
安装JDK
在Centos中,可以使用yum安装openjdk。
# yum install java-1.8.0-openjdk
# java -version
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8.0_212-b04)
OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode)
本次使用Oracle官网的JDK 8的rpm安装
# yum install jdk-8u191-linux-x64.rpm
# java
# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
安装目录为/user/java下
Java全局配置
# vi /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/java/default
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
# . /etc/profile.d/jdk.sh