模糊知识点

遇到的不清楚的知识点

一个子类可以覆盖掉父类的同步方法
方法重载的返回值的类型可以不同,参数项必须不同。
方法重写的返回值类型必须相同。
SpringMVC是Spring中的模块,它实现了mvc设计模式的web框架。首先用户发出请求,请求到达SpringMVC的前端控制器(DispatcherServlet),前端控制器根据用户的url请求处理器映射器查找匹配该url的handler,并返回一个执行链,前端控制器再请求处理器适配器调用相应的handler进行处理并返回给前端控制器一个modelAndView,前端控制器再请求视图解析器对返回的逻辑视图进行解析,最后前端控制器将返回的视图进行渲染并把数据装入到request域,返回给用户。DispatcherServlet作为springMVC的前端控制器,负责接收用户的请求并根据用户的请求返回相应的视图给用户。
equal:是用来比较两个对象内部的内容是否相等的。

==:是用来判断两个对象的地址是否相同,即是否是指相同一个对象。
Throw用于方法内部,Throws用于方法声明上 
Throw后跟异常对象,Throws后跟异常类型 
Throw后只能跟一个异常对象,Throws后可以一次声明多种异常类型 

1. Throw用于抛出异常对象,后面跟的时异常对象。是语句抛出一个异常。多用在函数内。 
  语法:throw(异常对象) 
       throw e; 
2.Throws是方法可能抛出异常的声明(用在声明方法时,表示该方法可能要抛出异常) 
  语法:修饰符 返回值类型 方法名  参数类型   throws异常类 
     public void test throws  Exception1,Exception2(){}
异常处理完成以后,Exception对象会在下一个垃圾回收过程中被回收掉。
Class.forName()方法初始化参数指定的类,并且返回此类对应的Class 对象
Servlet是用来处理客户端请求并产生动态网页内容的Java类。Servlet主要是用来处理或者是存储HTML表单提交的数据,产生动态内容,在无状态的HTTP协议下管理状态信息。
Servlet是运行在web服务器上的服务端的组件,等待客户端的HTTP请求,然后为请求产生响应。
对每一个客户端的请求,Servlet引擎载入Servlet,调用它的init()方法,完成Servlet的初始化。然后,Servlet对象通过为每一个请求单独调用service()方法来处理所有随后来自客户端的请求,最后,调用Servlet的destroy()方法把Servlet删除掉。
HTTP响应由三个部分组成:
	状态码(Status Code):描述了响应的状态。
	HTTP头部(HTTP Header):过期日期、编码格式
	主体(Body):响应的内容,HTML代码,图片,等等。
session能够存储任意的Java对象,cookie只能存储String类型的对象。
浏览器和Servlet通信使用的是HTTP协议。
URL编码是负责把URL里面的空格和其他的特殊字符替换成对应的十六进制表示,反之就是解码。
进程是执行着的应用程序,而线程是进程内部的一个执行序列。一个进程可以有多个线程。线程又叫做轻量级进程。
awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
awk以文件的一行为处理单位。每接收文件的一行,然后执行相应的命令,来处理文本。
 一个操作系统中可以有多个进程;一个进程可以有多个线程;同理,一个线程可以有多个协程。
InnoDB⽀持⾏级锁和表级锁
事务(commit)、回滚(rollback)和崩溃后的安全恢复
⽀持外键
⽀持MVCC
应对⾼并发事务, MVCC⽐单纯的加锁更⾼效
MVCC只 在 READ COMMITTED 和 REPEATABLE READ 两个隔离级别下⼯作
MVCC可以使⽤ 乐观(optimistic)锁 和 悲观(pessimistic)锁来实现;各数据库中MVCC实现并不统⼀。
MyISAM: B+Tree叶节点的data域存放的是数据记录的地址。“⾮聚簇索引”

InnoDB:树的叶节点data域保存了完整的数据记录,这个索引的key是数据表的主键。聚簇索引(或聚集索引)

在根据主索引搜索时,直接找到key所在的节点即可取出数据;在根据辅助索引查找时,则需要先取出主键的值,再⾛⼀遍主索引。
垂直拆分是指数据表列的拆分

⽔平拆分是指数据表⾏的拆分
覆盖索引:就是包含了所有查询字段 (where,select,ordery by,group by 包含的字段) 的索引
覆盖索引的好处:

•避免 Innodb 表进行索引的二次查询:Innodb 是以聚集索引的顺序来存储的,对于 Innodb 来说,二级索引在叶子节点中所保存的是行的主键信息,如果是用二级索引查询数据的话,在查找到相应的键值后,还要通过主键进行二次查询才能获取我们真实所需要的数据。而在覆盖索引中,二级索引的键值中可以获取所有的数据,避免了对主键的二次查询 ,减少了 IO 操作,提升了查询效率。

•可以把随机 IO 变成顺序 IO 加快查询效率:由于覆盖索引是按键值的顺序存储的,对于 IO 密集型的范围查找来说,对比随机从磁盘读取每一行的数据 IO 要少的多,因此利用覆盖索引在访问时也可以把磁盘的随机读取的 IO 转变成索引查找的顺序 IO。
对象被容器管理需要两份数据:你的对象定义 + 配置文件

配置文件:对象间的关系,不会直接产生耦合。
单独使⽤ @Controller:返回⼀个视图,对应于前后端不分离的情况。

@RestController :只返回对象。前后端分离。@Controller + @ResponseBody = @RestController

@ResponseBody 注解的作⽤是将 Controller 的⽅法返回的对象通过适当的转换器转换为 JSON 或 XML之后,写⼊到 HTTP 响应(Response)对象的 body 中
 
 controller层
​		//@ResponseBody 声明异步请求要加这个
​		//这个方法返回的json格式的字符串

同步请求:当浏览器向服务器发送同步请求时,服务处理同步请求的过程中,浏览器会处于等待的状态,服务器处理完请求把数据响应给浏览器并覆			盖浏览器内存中原有的数据,浏览器重新加载页面并展示服务器响应的数据。
异步请求:浏览器不用等待服务器处理请求,不用重新加载整个页面来展示服务器响应的数据,在异步请求发送的过程中浏览器还能进行其它的操			作。
ajax请求——异步请求模型,可以让浏览器发送请求给服务器,服务器处理请求的过程中,浏览器不处于等待的状态,并且浏览器接收响应数据的同				时不再重新加载整个页面,既请求发送之前的数据不丢失,又能实现页面的局部刷新
浏览器把请求交给代理对象—XMLHttpRequest(绝大多数浏览器都内置了这个对象),由代理对象向服务器发起请求,接收、解析服务器响应的数			据,并把数据更新到浏览器指定的控件上。从而实现了页面数据的局部刷新

异步请求的执行流程图

img

 @Component 注解作⽤于类,⽽ @Bean 注解作⽤于⽅法。

@Bean 注解⽐ Component 注解的⾃定义性更强,很多地⽅我们只能通过 @Bean 注解来注册bean。
套接字(Sockets): 客户端和服务器之间通过⽹络进⾏通信
虚拟内存的重要意义是它定义了⼀个连续的虚拟地址空间,并且把内存扩展到硬盘空间。

虚拟内存使得应⽤程序认为它拥有连续的可⽤的内存(⼀个连续完整的地址空间),⽽实际上,它通常是被分隔成多个物理内存碎⽚,还有部分暂时存储在外部磁盘存储器上,在需要时进⾏数据交换。
局部性原理是虚拟内存技术的基础,正是因为程序运⾏具有局部性原理,才可以只装⼊部分程序到内存就开始运⾏。

1.时间局部性 :如果程序中的某条指令⼀旦执⾏,不久以后该指令可能再次执⾏;如果某数据

被访问过,不久以后该数据可能再次被访问。产⽣时间局部性的典型原因,是由于在程序中

存在着⼤量的循环操作。

2.空间局部性 :⼀旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将被访问,

即程序在⼀段时间内所访问的地址,可能集中在⼀定的范围之内,这是因为指令通常是顺序

存放、顺序执⾏的,数据也⼀般是以向量、数组、表等形式簇聚存储的。
 关系型数据库,采用关系模型——二维表格来组织数据的数据库。主要代表:SQL Server,Oracle,Mysql,PostgreSQL。
 			关系数据模型中用关系来表述现实世界中能够相互区别的要管理的数据对象集。每一个关系都有一个关系名和一组表述其特征的属性集,通过属性集区别不同的关系。
 			一个关系用一张二维表表示,表名对应关系名。每一行称为一个记录,描述了关系中一个具体的个体。每一列是一个属性,描述了关系的一个特征。
 			一个二维表的所有列构成了一个关系的属性集,通过它可以区别不同的二维表(关系)。
 			关系数据模型将数据看成是二维表中唯一的行号和列号确定的一个表中元素。
 			任何一个关系数据库,是由若干张相互关联的二维表组成。

​			ACID属性,大大降低了数据冗余和数据不一致的概率。

非关系型数据库,非关系型的、分布式的,且一般不保证ACID的数据存储系统。MongoDB,Redis、CouchDB。以键值来存储。

​			1、面向高性能并发读写的key-value数据库

​						主要特点是具有极高的并发读写性能,例如Redis、Tokyo Cabint等。

​			2、面向海量数据访问的面向文档数据库

​						特点是,可以在海量的数据库快速的查询数据。例如MongoDB以及CouchDB.

​			3、面向可拓展的分布式数据库

​						解决的主要问题是传统数据库的扩展性上的缺陷。

对比:

1、存储上:

Sql :数据库表。SQL中增加外部关系的话,需要在原表中增加一个外键,来关联外部数据表。

NoSql :key-value

2、事务

Sql :事务

NoSql :有事务

3、数据表 VS 数据集

关系型是表格型的,存储在数据表的行和列中。彼此关联,容易提取。

非关系型是大块存储在一起。

4、预定义结构 VS 动态结构

Sql :必须定义好表结构和表的主键、索引、外键等,才能够添加数据

NoSql :数据可以在任何时候任何地方添加。不需要预先定义。

5、存储规范 VS 存储代码

Sql :把数据分配成为最小的**逻辑表来存储**避免重复。但是多个表之间的关系限制,多表管理就有点复杂。

NoSql :数据经常可以重复,单个数据库很少被分开,而是存储成为一个整体,这种整块读取数据效率更高。

6、纵向拓展 VS 横向拓展

Sql :纵向扩展

NoSql :横向拓展,非关系型数据库天然是分布式的,所以可以通过集群来实现负载均衡。


目前许多大型互联网都会选用MySql+NoSql的组合方案,因为SQL和NoSql都有各自的优缺点。

关系型数据库适合存储结构化数据,比如:用户的账号、地址:

​		(1)这些数据通常需要做结构化查询,比如说Join,这个时候,关系型数据库就要胜出一筹。

​		(2)这些数据的规模、增长的速度通常是可以预期的。

​		(3)事务性、一致性,适合存储比较复杂的数据。

NoSql适合存储非结构化数据,比如:文章、评论:

​		(1)这些数据通常用于模糊处理,例如全文搜索、机器学习,适合存储较为简单的数据。

​		(2)这些数据是海量的,并且增长的速度是难以预期的。

​		(3)按照key获取数据效率很高,但是对于join或其他结构化查询的支持就比较差。

原文链接:https://blog.youkuaiyun.com/lzj3462144/article/details/70973368

TCP 是面先连接的,UDP 是面向无连接。

面向就是遵循一定的协议、规范、数据结构等来做一系列事情。

面向连接 ,就是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,用这样的数据来保证所谓的面向连接的特性。

如何让 UDP 实现 TCP 功能?

TCP 的是用三次握手来建立连接,UDP 可以模拟三次握手和四次握手来建立连接,但是要面向连接,还需要考虑顺序问题丢包问题(确认与重发)、流量控制(滑动窗口)、拥塞控制(慢开始、拥塞避免)

TCP 的数据结构

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值