java面试题系列(最近问题汇总)

一: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,再次使用的话不用重新计算

十二:什么是hash函数,谈谈你对hash函数的理解?

十三:SpringBoot starter的启动原理

十四:SpringBoot的注解是哪个,下面包含哪些注解,各个注解的作用?

十五:SpringBoot自动配置原理

十六:SpringCloud组件都知道哪些?具体的作用?

十七: 熔断器

十八:redis数据结构有几种类型,怎么实现一个对列?

十九:SpringAOP怎么实现的?

你可能感兴趣的:(java面试题系列(最近问题汇总))