各处整合资料而来,只是为了当笔记.
解释一下多态:
就是父类只能使用子类重写的非静态成员方法, 而如果想用子类的所有属性的话,就强制转换成子类就好了。 多态存在的三个前提:
-
要有继承关系
-
子类要重写父类的方法
-
父类数据类型的引用指向子类对象
1、什么是 HashMap
Hashmap实际上是一个数组和链表的结合体(在数据结构中,一般称之为“链表散列“),请看下图(横排表示数组,纵排表示数组元素【实际上是一个链表】)
数组
数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;
链表
链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。
首先HashMap里面实现一个静态内部类Entry,其重要的属性有 key , value, next
HashMap的基础就是一个线性数组,这个数组就是Entry[],Map里面的内容都保存在Entry[]里面。
解决hash冲突的办法
-
开放定址法(线性探测再散列,二次探测再散列,伪随机探测再散列)
-
再哈希法
-
链地址法
-
建立一个公共溢出区
Java中hashmap的解决办法就是采用的链地址法。
hashMap线程不安全,hashTable通过synchronized实现线程安全
HashMap的数据插入原理吗?
-
判断数组是否为空,为空进行初始化;
-
不为空,计算 k 的 hash 值,通过
(n - 1) & hash计算应当存放在数组中的下标 index; -
查看 table[index] 是否存在数据,没有数据就构造一个Node节点存放在 table[index] 中;
-
存在数据,说明发生了hash冲突(存在二个节点key的hash值一样), 继续判断key是否相等,相等,用新的value替换原数据(onlyIfAbsent为false);
-
如果不相等,判断当前节点类型是不是树型节点,如果是树型节点,创造树型节点插入红黑树中;(如果当前节点是树型节点证明当前已经是红黑树了)
-
如果不是树型节点,创建普通Node加入链表中;判断链表长度是否大于 8并且数组长度大于64, 大于的话链表转换为红黑树;
-
插入完成之后判断当前节点数是否大于阈值,如果大于开始扩容为原数组的二倍。
spring的两大核心特性以及实现原理
IOC(Inversion of Control),即“控制反转”;
IOC,另外一种说法叫DI(Dependency Injection),即依赖注入。它并不是一种技术实现,而是一种设计思想
获得依赖的对象的方式,进行了反转,变成了由spring容器控制对象如何获取外部资源(包括其他对象和文件资料等等)。
AOP(Aspect-OrientedProgramming),即“面向切面编程”
-
通知: 通知定义了切面是什么以及何时使用的概念。Spring 切面可以应用5种类型的通知:
-
前置通知(Before):在目标方法被调用之前调用通知功能。
-
后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么。
-
返回通知(After-returning):在目标方法成功执行之后调用通知。
-
异常通知(After-throwing):在目标方法抛出异常后调用通知。
-
环绕通知(Around):通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为。
-
-
连接点:是在应用执行过程中能够插入切面的一个点。
-
切点: 切点定义了切面在何处要织入的一个或者多个连接点。
-
切面:是通知和切点的结合。通知和切点共同定义了切面的全部内容。
-
引入:引入允许我们向现有类添加新方法或属性。
-
织入:是把切面应用到目标对象,并创建新的代理对象的过程。切面在指定的连接点被织入到目标对象中。在目标对象的生命周期中有多个点可以进行织入:
-
编译期: 在目标类编译时,切面被织入。这种方式需要特殊的编译器。AspectJ的织入编译器就是以这种方式织入切面的。
-
类加载期:切面在目标加载到JVM时被织入。这种方式需要特殊的类加载器(class loader)它可以在目标类被引入应用之前增强该目标类的字节码。
-
运行期: 切面在应用运行到某个时刻时被织入。一般情况下,在织入切面时,AOP容器会为目标对象动态地创建一个代理对象。SpringAOP就是以这种方式织入切面的。
计算机网络知识汇总
OSI分层 (7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
层 作用 数据单位 协议 物理层 通过媒介传输比特,确定机械及电气规范 比特Bit RJ45、CLOCK、IEEE802.3 (中继器,集线器) 数据链路 将比特组装成帧和点到点的传递 帧Frame PPP、FR、HDLC、VLAN、MAC (网桥,交换机) 网络层 负责数据包从源到宿的传递和网际互连 包PackeT IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP(路由器) 传输层 提供端到端的可靠报文传递和错误恢复 段Segment TCP、UDP、SPX 会话层 建立、管理和终止会话 会话协议数据单元 NFS、SQL、NETBIOS、RPC 表示层 对数据进行翻译、加密和压缩 表示协议数据单元 JPEG、MPEG、ASII 应用层 允许访问OSI环境的手段 应用协议数据单元 FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS -
| TCP | UDP | |
|---|---|---|
| 连接方式 | 面向连接的、可靠的数据流传输 | 非面向连接的、不可靠的数据流传输 |
| 通信方式 | 一对一、点对点 | 一对一、一对多、多对一、多对多 |
| 传输单位 | TCP报文段 | 用户数据报 |
| 对系统资源要求 | 较多(TCP的20个字节信息包),负载高,采用虚电路 | 较少(UDP信息包的标题很短,只有8个字节) |
| 安全性 | 可靠,安全 | 数据传输快,但是不可靠(尽最大努力交付) |
| 对应协议 | FTP、Telnet、SMTP、POP3、HTTP | DNS、SNMP、TFTP |
TCP与UDP基本区别 1.基于连接与无连接 2.TCP要求系统资源较多,UDP较少; 3.UDP程序结构较简单 4.流模式(TCP)与数据报模式(UDP); 5.TCP保证数据正确性,UDP可能丢包 6.TCP保证数据顺序,UDP不保证
三次握手
| TCP字段 |
|---|
| (1)序号(sequence number):Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。 |
| (2)确认号(acknowledgement number):Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。 |
| (3)标志位(Flags):共6个,即URG、ACK、PSH、RST、SYN(请求连接)、FIN(请求释放连接)等。具体含义如下: |
| URG:紧急指针(urgent pointer)有效。 |
| ACK:确认序号有效。 |
| RST:重置连接。SYN:发起一个新连接。FIN:释放一个连接 |
| SYN:发起一个新连接 |
| FIN:释放一个连接 |
为什么是三次而不是两次
四次挥手
http和https的区别 https的加密方式
HTTP(超文本传输协议)
HTTPS(安全套接字层超文本传输协议
区别 : http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议
http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
多了一层 SSL TLS是标准化SSL3.0之后的版本
-
Cookie 是在HTTP协议下,服务器或脚本可以维护客户工作站上信息的一种方式。Cookie信息,可以看作是浏览器缓存。 Session可以代表服务器与浏览器的一次会话过程,指从一个浏览器窗口打开到关闭的这个期间.也可以用于指一类用来在客户端与服务器之间保持状态的解决方案.
-
cookie机制采用的是在客户端保持状态的方案 session机制采用的是在服务器端保持状态的方案。 同时由于在服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上还有其他选择,比如说重写 URL和隐藏表单域。
-
session比cookies更安全,比如把用户名密码保存在浏览器,下一个用户登录会暴露信息,session占用资源也更多