一.传输协议
1.网络传输模型
①OSI参考模型
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层
②Tcp/ip协议
应用层—http协议(收到货物打开使用)
传输层—tcp协议(快递送货)
网际互联层—ip协议(告诉卖家地址,地址相当于网络互联层)
网络接入层—没有协议(相当于快递站点)
二.海量数据的解决方案
1.缓存和页面静态化
①通过程序缓存,主要通过map实现
②通过框架实现,如Ehcache,Memcache,Redis等
(缓存创建:①.程序启动时②.缓存失效后
缓存的失效:①.定期失效②.数据变化时失效:⑴粗粒度失效(2)细粒度失效)
③页面静态化(类似缓存)技术如:freemarker,velocity和squid,nginx
2.数据库优化
①表结构优化
②Sql语句优化
(1)索引缓存等配合使用
(2)通用的做法:将大数据量的sql的执行时间记录下来,分析日志(不同的条件,执行时间可能不同)
③分区分表
④索引优化
(1)索引的大致原理是在数据发生变化的时候,按指定字段的顺序排列后保存到一个类似表的结构中,一索引字段为条件时很快找到对应记录指针获得记录,优缺点:查询很快,增删改慢,数据变化要更新索引
⑤存储过程
存储过程只需要编译一次
3.分离活跃数据:
经常登录网站的用户放在一个数据表中
4.批量读取和延迟修改:
①批量读取:N次查询可以变成一次,例如查询工号是否已经在数据库中存在,可以把n次查询的工号变成一次查询,用in
②延迟修改:将部分要修改的数据先放入缓存中
5.读写分离(数据库集群):
对数据库服务器进行集群,增删改在主服务器,将数据同步到从服务器,读数据从从服务器上读取,解决多个请求分配到不同的服务器
6.分布式数据库:
将不同的表放到不同的库中然后放到不同的服务器中,处理请求时,需要调用多个表,可以让多台服务器同时处理,解决单个请求本来就很复杂的问题,每个节点还可以使用数据库集群
7.Nosql
8.hadoop
三.高并发的解决方案
1.应用和静态资源分离
①静态资源:如图片,视屏,js,css等存放到相应的服务器,用专门的域名访问,如sinaimg.cn
2.页面缓存
①将应用生成的页面缓存起来,放到内存中更快,一般用Nginx服务器自带的缓存功能,也可以用Squid服务器
②对于经常变化的页面缓存,例如文章的页面的“顶”和“踩”的数量,把静态页面缓存起来,然后对变化的数量使用ajax来读取并修改相应的数据
3.集群与分布式中的session问题
①Session同步有两种处理方式:一种是在session发生变化后自动同步到其他服务器
另一种方式是用一个程序同意管理session,所有集群的服务器都使用同一个session,tomcat默认使用的是第一种方式,第二种方式使用专门的服务器安装Memcached
等高校的缓存程序来同意管理session,然后在应用程序中通过重写Request并覆盖getSession方法来获取指定服务器中的Session,集群的负载均衡可以通过软件处理或硬件处理
②另一种思路,服务器负载均衡的条件下,将同一用户(按IP)分配到同一台服务器进行处理就不需要Session同步了
4.使用反向代理获得请求结果
①反向代理服务器和代理服务器的区别
代理服务器:直接访问代理服务器来获取资源,不需要有自己的域名
反向代理服务器:服务器调用其它服务器的资源得到结果,有自己的域名和访问网址没有任何区别
14.cdn是一种特殊的集群页面缓存服务器,和普通的集群的多台页面缓存服务器的区别是,它的服务器是分布在全国各地,将请求分配到最合适的cdn服务器节点获取数据,通过cdn域名解析服务器来寻找负责的服务器节点达到负责均衡
5.TCP的三次握手和四次挥手
两个序号和三个标志位:
Seq:sequence number,每个字节的序号
ack:确认号,下个字节的序号
ACK:确认位
SYN:同步位
FIN:终止位
6.HTTP协议
http协议负责对传输的数据进行编码和解码
http中的报文分为请求报文和响应报文,包括三部分:首行、头部、主体
请求报文中的方法指GET、HEAD、POST PUT DELETE等类型,响应报文中的状态码是Response中的status,一共5类:
1XX:信息性状态码
2XX:成功状态码,如200表示成功
3XX:重定向状态吗,如301表示重定向
4XX:客户端错误状态码,如404表示没找到请求的资源
5XX:服务器错误状态码,如500表示内部错误
7.springmvc搭建环境步骤:
①在web.xml中配置Servlet
②创建springmvc的xml配置文件
③创建controller和view
8.XXXAware在spring里表示对XXX可以感知
通俗点解释就是:如果扎起某个类里面想要使用spring的一些东西,就可以通过实现XXXAware接口告诉spring,spring看到后就会给你送过来,而接收的方式是通过实现接口唯一的方法setXXX。比如,有一个类想要使用当前的ApplicationContext,那么我们只需要让它实现ApplicationContextAware接口,然后实现接口中唯一的方法void setApplicationContext(ApplicationContext applicationContext)就可以了,spring会自动调用这个方法将applicationContext传给我们,我们只需要接收就可以了
9
.
10.HttpServletBean的应用
11.FrameworkServlet的分析
12.dodisopacher方法处理流程