1.http 和 https
什么是http?http属于哪一层架构?
Http协议用来定位网络资源。Http协议属于应用层的协议
Http请求消息的结构由什么组成?
请求行,请求头部,空行,请求数据
Http响应消息的结构由什么组成?
状态行,响应报头,空行,响应正文
为什么出现了https?
Http协议通信的时候,没有用户认证,任何用户都能发起请求。那么这就存在了安全隐患,所以才会提出了https
Https相比较http来说,优势在哪里?
Https更加安全,相比较http来说多了一个secure,这个secure是由ssl提供的。在我们访问https网站时,它保证了我们在打开网页直至关闭网页之间的安全,也就是我们浏览某一网页中途被人看见,那么该网页在别人那里就是一堆乱码
2.Cookie和Session的区别?
明天再看
3.dns解析的过程
在我们输入网址之后,dns首先先去本地hosts文件里查找,如果存在地址映射,则返回,否则就查找本地DNS解析器缓存是否有该地址映射,若无,则查找本地DNS服务器(若要解析的网址不由本地DNS服务器解析,但是本地已经保存了解析结果,那么直接返回)。若依旧没有找到地址映射,首先先查询本地DNS服务器是否存在转发,如果没有存在,本地DNS服务器就把请求发送给13台根DNS,根DNS会判断该域名(.com等)是由谁来授权管理,并返回一个负责该顶点域名的服务器IP。本地DNS收到该IP后,联系负责(.com)的服务器,服务器解析地址,如果服务器无法解析,那么就下一级DNS服务器进行解析。重复操作直到找到地址。如果存在转发,该DNS服务器会把请求转发至上一级DNS服务器,由上一级服务器进行解析,如果上一级服务器无法解析,就继续往上找,直至找到。
逼逼了一大堆,说重点
A.查找本地hosts文件
B.查找本地DNS解析器缓存
C.查找本地DNS服务器(如果网址不由本地DNS解析,但本地已经保存解析地址,直接返回)
D.无转发则由顶点域名的一个服务器进行解析,不成功就给管理顶点域名的下一级服务器进行解析。
E.有转发则由DNS服务器转发至上一级DNS服务器进行解析,不成功继续转发上一级
4.为什么提出了依赖注入(也叫控制反转)
程序员在某个类中要调用其他类的方法,通常都是new一个依赖类再调用实例。这样的实例不方便统一管理,于是spring就提出了依赖注入的思想,程序员再也不用实例化依赖类,都交给spring容器帮我们统一实例化再注入到所需的对象的类中。
5.spring ioc依赖注入的几种方式
接口注入(类A依赖于接口B的实现),set注入,构造器注入(也就是通过构造函数完成依赖)
6.思考一下泛型
为什么泛型类型变量不能是基本数据类型?
如果是基本数据类型,例如ArrayList<double>,那么当类型擦除之后,ArrayList里的原始类型变量就替换成了Object,而Object类型不能存储double值
为什么要使用泛型?
类型安全、可拓展、高性能
泛型是如何工作的?
编译器在编译源码的时候,先进行类型检查,然后进行类型擦除,在类型所在位置插入强制转换的命令。
什么是限定通配符?
<? extends T>表示所需类型必须是T的子类,用这个来设置类型的上界
<? super T>表示所需类型必须是T的父类
用到<? super T>的小例子:有一个泛型类Plate T,还有一个子类apple继承于父类fruit,定义Plate<apple>不会报错,定义Plate<fruit>会报错。因为就算容器装的东西之间是有继承的,容器直接却是没有继承的。所以为了解决这个问题,就有了plate<? super fruit>
List<T>与List<?>的区别是什么?
List<T>主要应用于声明一个泛型类或者泛型方法
List<?>使用泛型类或者泛型方法(坑多,不建议使用),通配符是拿来使用已经定义好的泛型
7.链式编程
什么是链式编程?
将多个方法用点语法链接起来(同一个实例对象调用N次方法)
链式编程的原理
调用的属性或者方法的返回值是自身
8.线性表
什么是线性表?
线性表是一种基本的数据结构,是n个数据元素构成的有限序列。
有哪几种基本数据结构?
集合、线性结构、树形结构、图状结构或网状结构
线性表的特点是什么?
1.存在唯一一个被称为“第一个”的数据元素
2.存在唯一一个被称为“最后一个”的数据元素
3.除了第一个元素之外的其他元素都有唯一的直接前驱
4.除了最后一个元素之外的其他元素都有唯一的直接后继
线性表的顺序存储与链式存储的区别
顺序存储:用一段连续的内存单元依次存储线性表中的数据元素
链式存储:用一组任意的内存单元(可以是连续、也可以不连续)来存储线性表中的数据元素,因为内存单元不连续,那么数据元素Ai不单单需要存储自身信息,还需要存储直接后继的位置信息,将这两部分信息称为结点。n个结点链结成链表即为线性表
顺序存储查找时间O(1),插入删除O(n),链式存储查找复杂,插入删除简单。
链表的实现方式:
链表分为带头结点和不带头结点两种方式,但是不管哪种方式,头指针都指向链表的第一个结点(有头结点的指向头结点)。插入删除都是先断开后连接。
双链表与单链表的区别:
双链表比单链表多了一个前驱结点,插入删除的时间复杂度为O(1)

循环链表与单链表的区别:
循环链表的尾结点的直接后继为头结点,而不是null。所以判断循环链表是否为空,就判断是否等于头指针
栈和队列:从数据结构的角度来看,栈和队列也是线性表,但是是操作受限的线性表。
什么是栈?
只能在表尾进行插入删除操作的线性表。将表尾称为栈顶(top),表头称为栈底(bottom)。
栈的特点:
栈是后进先出结构(LIFO)
栈也有两种存储方法(顺序栈和链式栈)
顺序栈的特点:
栈底指针始终指向栈底,栈顶指针始终指向栈顶元素的下一个位置。
什么是队列?
只允许在表的一端(队尾)插入元素,另一端删除元素(队头)
队列链式存储为什么会出现“假溢出”?
随着元素的进入和离开,队列在不断往右移动,那么队尾最终会等于最大队列-1,不能再有元素入队,但是其实队内依旧有空的位置,这就叫做假溢出。
如何解决假溢出?
循环队列:尾指针减去头指针再加上队列最大长度后,再与最大长度取余
循环队列与循环链表的区别:
当插入新的队尾元素,尾指针+1,当删除队头元素,头指针+1
为什么循环队列的头尾指针相等时无法表示循环队列为“满”?
当队列内存在元素,再插入几个元素可以使得队头队尾指针相等。但是如果把一开始队内存在的元素删除,那么队尾队头指针也已经相等,但是这个时候循环队列为“空”。
如何表示循环队列已“满”?
1.另外设置一个标准位以区分队满或队空
2.少用一个存储空间,队列头指针在队列尾指针的下一个位置上作为“满”的标志
网友评论