之前我们总结了Java面试题目中的关于计算机网络,操作系统,以及JVM虚拟机,以及Java的相关特性。
今天又看了很多面试的视频,对面试的题目进行一下仔细的补充。
1.对称加密与非对称加密的区别:
非对称加密和对称加密在加密和解密过程、加密解密速度、传输的安全性上都有所不同,具体介绍如下:
(1)加密过程和解密过程不同:
对称加密过程和解密过程使用的同一个密钥,加密过程相当于用原文+密钥可以传输出密文,同时解密过程用密文-密钥可以推导出原文。但非对称加密采用了两个密钥,一般使用公钥进行加密,使用私钥进行解密。
(2)加密解密速度不同
对称加密解密的速度比较快,适合数据比较长时的使用。非对称加密和解密花费的时间长、速度相对较慢,只适合对少量数据的使用。
(3)传输安全性不同:
对称加密的过程中无法确保密钥被安全传递,密文在传输过程中是可能被第三方截获的,如果密码本也被第三方截获,则传输的密码信息将被第三方破获,安全性相对较低。
非对称加密算法中私钥是基于不同的算法生成不同的随机数,私钥通过一定的加密算法推导出公钥,但私钥到公钥的推导过程是单向的,也就是说公钥无法反推导出私钥。所以安全性较高
2.简述Java的动态代理机制
动态代理的两种实现方式:1)JDK动态代理;2)CGLIB动态代理。
两种动态代理实现:
JDK动态代理是通过接口中的方法名,在动态生成的代理类中调用业务实现类的同名方法。
CGlib动态代理是通过继承业务类,生成的动态代理类是业务类的子类,通过重写业务方法进行代理。
3.详解CAS及其引发的三个问题:
(1)ABA问题; (2)自旋锁开销及jdk8解决方案; (3)单对象操作及解决
4.Synchronized关键字和锁升级
在JDK1.6以前,使用synchronized就只有一种方式即重量级锁,而在JDK1.6以后,引入了偏向锁,轻量级锁,重量级锁,来减少竞争带来的上下文切换。
锁的4中状态:无锁状态、偏向锁状态、轻量级锁状态、重量级锁状态(级别从低到高)
5.关于ThreadLocal谈谈你对它的理解?
ThreadLocal叫做线程变量,意思是ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。
ThreadLocal和Synchronized都是为了解决多线程中相同变量的访问冲突问题,不同的点是
Synchronized是通过线程等待,牺牲时间来解决访问冲突
ThreadLocal是通过每个线程单独一份存储空间,牺牲空间来解决冲突,并且相比于Synchronized,ThreadLocal具有线程隔离的效果,只有在线程内才能获取到对应的值,线程外则不能访问到想要的值。
更多关于编程以及CS学习的资源以及相关技术推文,已经放在我的公众号:AI学习经历分享,关注回复“学习资源”,领取大礼包~
标签:面试题,动态,加密,补漏,解密,ThreadLocal,线程,习题,代理 From: https://blog.51cto.com/u_13638291/6442047