美文网首页
java面试题系列(最近问题汇总)

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

作者: 小李一枚 | 来源:发表于2020-04-11 00:01 被阅读0次

    一: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面试题系列(最近问题汇总)

          本文链接:https://www.haomeiwen.com/subject/dlzjmhtx.html