链接:https://leetcode-cn.com/circle/discuss/wfA3rH/
- 讲一下 SSL?
SSL(Secure Sockets Layer)直译过来是安全套接层。 HTTPS协议就是基于SSL层来实现的
HTTPS就是在两者(应用层和传输层)之间加入一个SSL层,称为加密传输协议
【SSL具体的功能】
1)SSL在实际的数据传输开始前,通讯双方会进行身份认证,确保数据发送到正确的客户机和服务器
2)SSL对传输的数据进行了加密,防止数据中途被窃取
3)SSL对传输的数据进行了封装,用以维护数据的完整性,确保数据在传输过程中不被改变
4)SSL对传输的数据进行了压缩
- 密钥交换时,前端和后端的详细过程是什么?
- RSA非对称加密---缺点:加密内容的长度不能大于秘钥长度
- AES对称加密---缺点:任何知道秘钥的人都可以加解密信息
- 结合使用就可以取长补短,我们可以使用RSA来保护AES的秘钥
- DNS 解析过程
将主机名和域名转换为IP地址
过程:
-
用户主机上运行着DNS的客户端
-
浏览器将接收到的url中抽取出访问的主机名,并将这个主机名传送给DNS应用的客户端
-
DNS客户端向DNS服务器端发送一份查询报文,报文中包含着要访问的主机名字段
-
DNS客户端最终会收到一份回答报文,其中包含有该主机名对应的IP地址
-
一旦该浏览器收到来自DNS的IP地址,就可以向该IP地址定位的HTTP服务器发起TCP连接
-
进程和线程的区别
-
线程的划分尺度小于进程。
-
开个QQ,开了一个进程;在QQ的这个进程里,传输文字开一个线程、传输语音开了一个线程
-
进程在内存中是如何分配的
-
为进程分配内存空间,有连续分配和离散分配
-
连续分配:单一连续分配、固定分区分配、动态分区分配(首次适应算法、循环首次适应算法、最佳适应算法)
-
离散分配:分页存储管理(页表)、分段存储管理(划分为若干段)、段页式存储管理(每个段再划分为若干页)
-
线程池的了解
-
使用线程池的好处:降低资源消耗(重复利用已创建的线程降低线程创建和销毁造成的消耗)、提高响应速度(当任务到达时,任务可以不需要等到线程创建就能立即执行)、提高线程的可管理性(使用线程池可以进行统一分配、调优和监控)
-
通过ThreadPoolExecutor来创建一个线程池
-
线程池饱和策略:用户自定义拒绝策略(最常用)---实现RejectedExecutionHandler,并自己定义策略模式
-
用户线程和内核线程的区别
- 用户线程不依赖于操作系统核心,内核线程由操作系统内核创建和撤销
- 用户级线程的程序实体是运行在用户态下的程序,而内核支持线程的程序实体则是可以运行在任何状态下的程序
- 在只有用户级线程的系统内,CPU调度还是以进程为单位,在有内核支持线程的系统内,CPU调度则以线程为单位
- 堆和栈的区别
- 申请方式:栈由系统自动分配、堆是由程序员自己申请
- 数据结构的区别:栈:先进后出 ;堆:可以被看成是一棵树,如:堆排序
- 内存:栈内存存储的是局部变量而堆内存存储的是实体;栈内存的更新速度要快于堆内存,因为局部变量的生命周期很短;栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收
- 堆常见的应用场景
堆可以用于优先队列,堆排序等场景
---判断数组中是否有重复值,要求空间复杂度为O(1)
如果没有空间复杂度限制,可以用哈希表实现。比如使用HashMap,将数据元素保存到key值当中,每次保存前判断是否存在该key值,如果存在说明有重复值。此时,时间复杂度为O(N),空间复杂度为O(N)
对于有空间复杂度限制,可以先排序,再判断的思路;空间复杂度为O(1)的有冒泡、选择、插入、希尔排序以及非递归形式的堆排序;先通过堆排序将数组排好序,然后再遍历一遍数组,比较相邻两元素值是否相等
- git rebase 和 git merge 的区别
最终效果上来说相同,但是git merge和git rebase生成的代码树稍微有些不同
git merge会生成一个新的合并点,而git rebase不会