一:TCP与Http的区别:
TCP:对应于传输层、有状态的长连接
Http: 对应于应用层、短连接、无状态
二:Https与Http的区别
Https:需要向CA申请证书,具有安全性的ssl/tls加密传输协议,使用端口443
Http:超文本传输协议,信息明文传输,使用端口80
三:sql注入有什么后果
数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。
· 网页篡改:通过操作数据库对特定网页进行篡改。
网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。
数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。
服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。
破坏硬盘数据,瘫痪全系统。
四:用两个对列实现一个栈或用两个栈实现一个对列
栈:先进后出 队列:先进先出
两个队列实现一个栈:
把非空队列的n-1个压人空对列,剩的第n个出队...即总有一个队列为空
两个栈实现一个队列:
所有元素进stack1,然后全部出stack1并进入stack2.实现队列的先进先出即:若stack2非空,我们需要的恰好再栈顶,出栈;若要给队列添加元素,即先进sack1,要出队时,若stack2不为空就出栈,为空时就把stack1全部进栈到stack2
五:Https的加密原理
1、首先,客户端 A 访问服务器 B ,比如我们用浏览器打开一个网页 www.baidu.com ,这时,浏览器就是客户端 A ,百度的服务器就是服务器 B 了。这时候客户端 A 会生成一个随机数1,把随机数1 、自己支持的 SSL 版本号以及加密算法等这些信息告诉服务器 B 。
2、服务器 B 知道这些信息后,然后确认一下双方的加密算法,然后服务端也生成一个随机数 B ,并将随机数 B 和 CA 颁发给自己的证书一同返回给客户端 A 。
3、客户端 A 得到 CA 证书后,会去校验该 CA 证书的有效性,校验方法在上面已经说过了。校验通过后,客户端生成一个随机数3 ,然后用证书中的公钥加密随机数3 并传输给服务端 B 。
4、服务端 B 得到加密后的随机数3,然后利用私钥进行解密,得到真正的随机数3。
5、最后,客户端 A 和服务端 B 都有随机数1、随机数2、随机数3,然后双方利用这三个随机数生成一个对话密钥。之后传输内容就是利用对话密钥来进行加解密了。这时就是利用了对称加密,一般用的都是 AES 算法。
6、客户端 A 通知服务端 B ,指明后面的通讯用对话密钥来完成,同时通知服务器 B 客户端 A 的握手过程结束。
7、服务端 B 通知客户端 A,指明后面的通讯用对话密钥来完成,同时通知客户端 A 服务器 B 的握手过程结束。
8、SSL 的握手部分结束,SSL 安全通道的数据通讯开始,客户端 A 和服务器 B 开始使用相同的对话密钥进行数据通讯。
六:TCP与UDP的区别
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保 证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
七:TCP的三次握手、四次挥手,为什么?
三次握手:
第一次握手:客户端的发消息没有问题(SYN_SENT)
第二次握手:服务端接收消息没有问题(SYN_RECV)
第三次握手:客户端收消息没有问题,服务端发消息没有问题(ESTABLISHED)
四次挥手:
第一次挥手:客户端进程发出连接释放报文,并进入FIN-WAIT-1(终止等待1)状态
第二次挥手:服务器收到连接释放报文,发出确认报文,服务端就进入了CLOSE-WAIT(关闭等待)状态,
即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。
第三次挥手:服务器将最后的数据发送完毕后,就向客户端发送连接释放报文
第四次挥手:客户端收到服务器的连接释放报文后,必须发出确认。
TCP三次握手详细
八:简单聊下SPI
SPI ,全称为 Service Provider Interface,是一种服务发现机制。它通过在ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件里所定义的类。在jdbc、dubbo、Spring中应用广泛。
九:对称加密与非对称加密
对称加密,比较有代表性的就是 AES 加密算法;加解密效率高,速度快(DES、3DES、Blowfish、IDEA、RC4、RC5、RC6和AES)
非对称加密,经常使用到的 RSA 加密算法就是非对称加密的;非对称加密安全性更高,但是加解密耗费的时间更长,速度慢(RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA)
十:序列化UID的作用
反序列化时,serialVersionUID用来验证版本一致性,如果没有显式声明,在程序编译时候会自动生成一个序列号,存储在文件中,在更改实体类时,可能导致反序列化异常。
十一:String底层的数据结构,为什么String设计成不可变的?
char数组
1. 安全性
线程安全,不可变天生线程安全
String常被用作HashMap的key,如果可变会引有安全问题,如两个key相同
String常被用作数据库或接口的参数,可变的话也会有安全问题
2. 效率
通过字符串池可以节省很多空间
每个String对应一个hashcode,再次使用的话不用重新计算