1. web技术
一个进程更像是资源的容器,真正干活的是线程。进程中可以有多个线程,cpu是分时的,cpu将时间片分配给进程下的线程,线程的时间片用完之后,cpu切换到另一个进程。只不过时间片非常短,感觉上就是同时在运行一样。
每一个运行的程序都是一个进程,每一个进程都是这么想的:我将独占整个操作系统,所有的IO都应该为我服务。同一个进程内,多个线程之间共享进程的资源。进程与进程之间通讯就没有这个方便了。
ip地址是主机之间路由,局域网是mac地址,到了主机要寻找某个进程,就需要进程绑定某个端口,通过端口来与该进程通信,如果找不到该端口,则通信失败。
客户端与服务器往往都是在不同主机上,它们属于不同的进程,这些进程需要通信,跨主机的进程间通信需要使用网络编程。最常见的网络编程接口:socket
socket称之为套接字,翻译过来为插座,说的就是网络通讯的两端。一端被动接收另一端请求心提供计算和数据的称为服务器(Server),另一端发起请求称为客户端(Client),这种编程模式称为Client/Server编程模式,简称C/S。
1.1. http
1990年,http协议和浏览器诞生。在应用层使用文本跨网络在不同进程间传输数据,最后在浏览器渲染出来。起初并没有浏览器这个概念,作者只是为了http协议而开发的客户端,用来演示http协议的传输。
网页是怎么到浏览器的呢?首先要建立TCP连接,客户端发起url请求,也就是浏览器的那串地址,服务器根据url定位到在磁盘上的html文件,读取html文件到内核空间,再复制到用户空间,进程获得html文件,发到发送缓冲区,通过网络发送出去。浏览器收到响应报文,并解析html呈现在浏览器上。
1.2. 动态网页与静态网页
静态网页:根据用户在浏览器输入的url(网址),寻找存放在服务器磁盘上的HTML文件并返回给客户端,浏览器对该html文件进行渲染最终呈现。
动态网页:相对于静态网页而言的。当浏览器请求服务器的某个页面时,服务器返回的并不是直接存放在磁盘上的html文件,而是一些变量、函数,通过函数查找数据库,返回的内容再发送给浏览器,最终到浏览器的内容还是html文本,再由浏览器进行渲染。最终呈现的效果是一样的,只不过换了一种方式。
通用网关接口(cgi),通过浏览器输入url直接映射到一个服务器端的脚本程序执行,这个脚本可以查询数据库并返回结果给浏览器端。这种将用户请求使用程序动态生成的技术,称为动态网页技术。
先后出现了ASP、PHP、JSP等技术,这些技术的使用不同语言编写的程序都运行在服务器端,所以称为WEB后端编程。有一部分程序员还是要编写HTML、CSS、JavaScript,这些代码运行在浏览器端,称为WEB前端编程。合起来称为Browser/Server编程,即B/S编程。
浏览器内的两大核心:渲染引擎和js引擎
2. 开发语言
语言:人与人交流的沟通表达方式
计算机语言:人与计算机之间交互沟通的语言
2.1. 语言分类
- 面向机器语言
- 机器指令或对应的助记符
- 汇编语言
- 面向过程语言
- 做一件事情,列出个步骤,第一步做什么,第二步做什么,如果A则B等等
- 问题规模小,可以步骤化,按部就班
- 如C语言
- 面向对象语言
- 一种认识世界、分析世界的方法论,将万事万物抽象为对象
- 类是抽象的概念,是万事万物的抽象,是一类事物的共同特征
- 对象是类的具象,是一个实体
- 问题规模大,复杂系统
2.2. 常见语言
- C语言
- 面向过程编程,只有函数
- 操作系统编程,单片机编程等领域
- C++
- 底层高性能开发
- 面向对象,学习难度极大
- java
- web开发领域第一,延伸领域极多,库丰富
- 大数据领域生态完整
- python
- 入门门槛低,非专业程序员容易接受
- python语法简洁,
- 运维开发
- javascript
- 网景公司发明的动态脚本语言,前端开发第一语言
- javascript是前后端全吃的全栈语言
- 前端执行的js代码,需要从服务器发送到浏览器端,在浏览器端使用js引擎执行
- go
- c语言之父参与设计
- 静态编译型语言,但结合了动态解释性语言的特点
- 充分利用多核,适合高并发场景
2.3. 后端资源分类
- 静态资源
- 图片:一旦创建好,图片文件不再改变。图片数目多,占用磁盘空间多,一般使用单独的图片服务器
- HTML、CSS、JavaScript:这些文本是文本的,有前端工程师可以修改,但修改次数较少,一段时间都不变
- 动态资源
- 内容有后台程序动态生成,比如查询数据库,将查询结果生成为HTML
2.4. 后台应用架构
- 单体架构
- jsp、servlet
- 打包成一个jar、war部署
- 服务器有开源的tomcat、jetty。商用的有jboss、weblogic、websphere、glassfish
- Dubbo
- 分布式服务框架
- 将单体程序分解成多个功能服务模块,模块间使用Dubbo框架提供的高性能RPC通信
- 阿里开源贡献给了ASF,目前已经是apache的顶级项目
- 内部协调使用zookeeper,实现服务注册、服务发现、服务治理
- Spring cloud 微服务
- 将单体应用拆分为粒度更小的单一功能服务
- RPC通信
- 需要更高的运维水平,服务太多了需要服务治理
3. JAVA
历史发展
1991年开始设计,起初叫Oak项目,它的初衷是跑在不同机顶盒设备中
1993网景公司成立。Oak项目组很快他们发现了浏览器和动态网页技术这个巨大的市场,转向WEB方向。并首先发布了可以让网页动起来的Applet技术(浏览器中嵌入运行Java字节码的技术)。
1995年,一杯爪哇岛咖啡成就了Java这个名字。
1996年,Sun公司第一个Java公开版本1.0发布。口号是“一次编写,到处运行”(Write once,Run anywhere),跨平台运行。
1999年,SUN公司发布了第二代Java平台(Java2)。
2009年4月20日,Oracle甲骨文公司宣布将以每股9.50美元,总计74亿美金收购SUN(计算机系统)公司。
2010年1月成功收购。
2010年,Java创始人之一的James Gosling离开了Oracle,去了Google。
3.1. 组成
Java包含下面部分:
1. 语言、语法规范:关键字if、for、class等等
2. 源代码:source code
3. 依赖库,标准库、第三方库。底层代码太难使用开发效率低,封装成现成的,好比净菜直接可以烧了,但是什么口味程序员自己定
4. JVM虚拟机。字节码运行在JVM之上java code(.java)
↓
byte code(.class)
↓
JVM
↙↓↘
win linux mac
3.2. 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中运行了。
JRE:它是Java Runtime Environment缩写,指Java运行时环境, 包含 JVM + Java核心类库
JDK:它是Java Development Kit,即 Java 语言的软件开发工具包。