IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 虾皮2022校招面经总结 -> 正文阅读

[网络协议]虾皮2022校招面经总结

虾皮2022校招面经总结



前言

这是2022届虾皮校招提前批面试题目及答案总结,后续会继续更新


一、Linux系统中查看系统进程和负载的命令

ps -ef || ps axu || top

二、进程相关问题

线程、进程的区别

  • 进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,进程是系统进行资源分配的独立实体,每个进程有独立的地址空间。
  • 线程是进程的一个实体,是进程的一条执行路径。线程是CPU独立运行和调度的基本单位。

区别:进程之间不能共享资源,而线程共享所在进程的地址空间和其他资源,同时线程还有自己的栈和栈指针、程序计数器等寄存器。进程有自己独立的地址空间,线程没有,线程依赖于进程存在。

进程之间的通信

  • 内存共享:是最快的进程间的通讯方式。通常由一个进程创建,其余进程对这块内存区进行读写。共享内存直接在进程的虚拟地址空间进行操作,不再通过执行进入内核的系统调用来传递彼此的数据

  • 消息队列:消息队列就是消息的一个链表,它允许一个或多个进程向它写消息,一个或多个进程从中读消息。

  • 信号量:在进程访问临界资源之前,需要测试信号量,如果为正数,则信号量-1并且进程可以进入临界区,若为非正数,则进程挂起放入等待队列,直至有进程退出临界区,释放资源并+1信号量,此时唤醒等待队列的进程。信号量本身就是临界资源,所以必须是原子操作。

  • 管道:管道是由内核管理的一个缓冲区(buffer),相当于我们放入内存中的一个纸条。管道的一端连接一个进程的输出。这个进程会向管道中放入信息。管道的另一端连接一个进程的输入,这个进程取出被放入管道的信息。一个缓冲区不需要很大,它被设计成为环形的数据结构,以便管道可以被循环利用。当管道中没有信息的话,从管道中读取的进程会等待,直到另一端的进程放入信息。当管道被放满信息的时候,尝试放入信息的进程会等待,直到另一端的进程取出信息。当两个进程都终结的时候,管道也自动消失。

线程之间的通信

  • 全局变量:进程内线程间内存共享,定义全局变量时使用volatile定义,避免编译器对变量进行优化。
    message消息机制
  • CEvent对象:CEvent为MFC中的一个对象,可以通过对CEvent的触发状态进行改变,从而实现线程间的通信和同步。

进程的状态

进程的三种基本状态:

(1)就绪状态:进程已获得除CPU外的所有必要资源,只等待CPU时的状态。一个系统会将多个处于就绪状态的进程排成一个就绪队列。

(2)执行状态:进程已获CPU,正在执行。单处理机系统中,处于执行状态的进程只一个;多处理机系统中,有多个处于执行状态的进程。

(3)阻塞状态:正在执行的进程由于某种原因而暂时无法继续执行,便放弃处理机而处于暂停状态,即进程执行受阻。(这种状态又称等待状态或封锁状态)

通常导致进程阻塞的典型事件有:请求I/O,申请缓冲空间等。

一般,将处于阻塞状态的进程排成一个队列,有的系统还根据阻塞原因不同把这些阻塞集成排成多个队列。

在这里插入图片描述
当进程有I/O请求的时候会进入阻塞状态,如果该进程不放开CPU的使用权,且一直不能完成I/O请求,就会导致其他进程无法过得时间片,导致CPU空转。

上下文切换

CPU通过分配时间片来执行任务,当一个任务的时间片用完,就会切换到另一个任务。在切换之前会保存上一个任务的状态,当下次再切换到该任务,就会加载到这个状态。
任务从保存到再加载的过程就是一次上下文切换。

  • 切出:一个线程被剥夺处理器的使用权而被暂停运行。
  • 切入:一个线程被系统选中占用处理器开始或继续运行。

什么时候会发生上下文切换

  • 自发性上下文切换:通过调用下列方法会导致上下文切换:
    - thread.sleep()
    - Object.wait()
    - Thread.yeild()
    - Thread.join()
    - LockSupport.park()

  • 非自发性上下文切换
    - 切出线程的时间片用完
    - 有一个比切出线程优先级更高的线程需要被运行
    - 虚拟机的垃圾回收动作

  • 上下文切换的开销包括直接开销和间接开销
    - 直接开销:操作系统保存恢复上下文所需的开销;线程调度器调度线程的开销
    - 间接开销:处理器高速缓存重新加载的开销;上下文切换可能导致整个一级高速缓存中的内容被冲刷,即被写入到下一级告诉缓存或主存;

进程的中断

硬中断:

  1. 硬中断是由硬件产生的,比如,像磁盘,网卡,键盘,时钟等。每个设备或设备集都有它自己的IRQ(中断请求)。基于IRQ,CPU可以将相应的请求分发到对应的硬件驱动上(注:硬件驱动通常是内核中的一个子程序,而不是一个独立的进程)。

  2. 处理中断的驱动是需要运行在CPU上的,因此,当中断产生的时候,CPU会中断当前正在运行的任务,来处理中断。在有多核心的系统上,一个中断通常只能中断一颗CPU(也有一种特殊的情况,就是在大型主机上是有硬件通道的,它可以在没有主CPU的支持下,可以同时处理多个中断。)。

  3. 硬中断可以直接中断CPU。它会引起内核中相关的代码被触发。对于那些需要花费一些时间去处理的进程,中断代码本身也可以被其他的硬中断中断。

  4. 对于时钟中断,内核调度代码会将当前正在运行的进程挂起,从而让其他的进程来运行。它的存在是为了让调度代码(或称为调度器)可以调度多任务。

软中断:

  1. 软中断的处理非常像硬中断。然而,它们仅仅是由当前正在运行的进程所产生的。

  2. 通常,软中断是一些对I/O的请求。这些请求会调用内核中可以调度I/O发生的程序。对于某些设备,I/O请求需要被立即处理,而磁盘I/O请求通常可以排队并且可以稍后处理。根据I/O模型的不同,进程或许会被挂起直到I/O完成,此时内核调度器就会选择另一个进程去运行。I/O可以在进程之间产生并且调度过程通常和磁盘I/O的方式是相同。

  3. 软中断仅与内核相联系。而内核主要负责对需要运行的任何其他的进程进行调度。一些内核允许设备驱动的一些部分存在于用户空间,并且当需要的时候内核也会调度这个进程去运行。

  4. 软中断并不会直接中断CPU。也只有当前正在运行的代码(或进程)才会产生软中断。这种中断是一种需要内核为正在运行的进程去做一些事情(通常为I/O)的请求。有一个特殊的软中断是Yield调用,它的作用是请求内核调度器去查看是否有一些其他的进程可以运行。

问题解答:

  1. 问:对于软中断,I/O操作是否是由内核中的I/O设备驱动程序完成?

    答:对于I/O请求,内核会将这项工作分派给合适的内核驱动程序,这个程序会对I/O进行队列化,以可以稍后处理(通常是磁盘I/O),或如果可能可以立即执行它。通常,当对硬中断进行回应的时候,这个队列会被驱动所处理。当一个I/O请求完成的时候,下一个在队列中的I/O请求就会发送到这个设备上。

  2. 问:软中断所经过的操作流程是比硬中断的少吗?换句话说,对于软中断就是:进程 ->内核中的设备驱动程序;对于硬中断:硬件->CPU->内核中的设备驱动程序?

    答:是的,软中断比硬中断少了一个硬件发送信号的步骤。产生软中断的进程一定是当前正在运行的进程,因此它们不会中断CPU。但是它们会中断调用代码的流程。

如果硬件需要CPU去做一些事情,那么这个硬件会使CPU中断当前正在运行的代码。而后CPU会将当前正在运行进程的当前状态放到堆栈(stack)中,以至于之后可以返回继续运行。这种中断可以停止一个正在运行的进程;可以停止正处理另一个中断的内核代码;或者可以停止空闲进程。

中断处理步骤
(1)中断请求:中断源向CPU发出中断请求
(2)中断响应
(3)保护断点和现场:以便在中断服务程序执行后正确的返回主程序。
(4)中断处理
(5)中断返回

CAS技术

CAS的全称为Compare-And-Swap ,它是一条CPU并发原语。它的功能是判断内存某个位置的值是否为预期值,如果是则更新为新的值,这个过程是原子的。

CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。 如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值 。否则,处理器不做任何操作。无论哪种情况,它都会在 CAS 指令之前返回该 位置的值。(在 CAS 的一些特殊情况下将仅返回 CAS 是否成功,而不提取当前 值。)CAS 有效地说明了“我认为位置 V 应该包含值 A;如果包含该值,则将 B 放到这个位置;否则,不要更改该位置,只告诉我这个位置现在的值即可。”

CAS技术存在的问题

ABA问题

问题描述:当你获得对象当前数据后,在准备修改为新值前,对象的值被其他线程连续修改了两次,而经过两次修改后,对象的值又恢复为旧值,这样当前线程无法正确判断这个对象是否修改过。
解决办法:JDK1.5可以利用AtomicStampedReference类来解决这个问题,AtomicStampedReference内部不仅维护了对象值,还维护了一个时间戳。当AtomicStampedReference对应的数值被修改时,除了更新数据本身外,还必须要更新时间戳,对象值和时间戳都必须满足期望值,写入才会成功

循环时间长开销大

  • 自旋CAS如果长时间不成功,会给CPU带来非常大的执行开销。

  • 解决办法:JVM支持处理器提供的pause指令,使得效率会有一定的提升,pause指令有两个作用:

    第一它可以延迟流水线执行指令,使CPU不会消耗过多的执行资源,
    第二它可以避免在退出循环的时候因内存顺序冲突(memory order violation)而引起CPU流水线被清空(CPU pipeline flush),从而提高CPU的执行效率。

不能保证多个共享变量的原子操作

  • 问题描述:当对一个共享变量执行操作时,我们可以使用循环CAS的方式来保证原子操作,但是对多个共享变量操作时,循环CAS就无法保证操作的原子性,这个时候就可以用锁来保证原子性。
  • 解决办法:从Java1.5开始JDK提供了AtomicReference类来保证引用对象之间的原子性,你可以把多个变量放在一个对象里来进行CAS操作。

三、系统相关问题

虚拟内存分段、分页

虚拟内存的出现就是为了更好的管理内存,避免在物理地址相邻的程序之间相互影响,更好的利用碎片化的内存空间,避免浪费。

分页存储管理:
  将用户程序的地址空间分成若干个固定大小区域,称为页,同时将内存空间分成对应大小物理块。系统中维护一个页表,通过页与物理块的对应,完成逻辑地址到物理地址(实际内存的地址,比如内存条)的映射。
  
分段存储管理:
  将程序地址空间分成若干段,段大小不定,每段定义一组相对完整信息,在内存分配时以段为单位。

  • 分页的粒度更小,能更好的利用内存但是当进程使用过多页面,就会导致页表过长,降低页面换入换出效率。
  • 分段换入换出效率更高,利于一个进程内的信息共享,但是粒度过大,内存利用率不如分页

段页式存储

对虚拟内存先分段在分页,结合两者的优点。

四、JVM

1、运行时数据区域

1、程序计数器

程序计数器就是当前线程所执行字节码的行号指示器,线程私有

2、Java虚拟机栈

线程私有,生命周期和线程相同,存储局部变量表、操作数栈、动态链接、方法出口等。
局部变量表存放了编译期可知的各种基本数据类型,对象引用和returnAddress类型

注:如果线程请求的栈的深度大于虚拟机所允许的深度,就会导致StackOverflowError;如果虚拟机栈是可以动态扩展的,当申请不到足够的内存的时候会导致 OutOfMemoryError

3、本地方法栈

为虚拟机使用到的 本地方法 服务,也会产生堆溢出和栈溢出。

4、 Java堆

Java堆是虚拟机所管理的内存中最大的一块,Java堆是被所有线程共享的一块内存区域,所有的对象实例以及数组都应该在堆上分配,Java堆是垃圾收集管理的内存区域
会产生内存溢出

5、方法区

是线程共享的内存区域,用于存储已被虚拟机加载的类型信息、常量、静态变量、及时编译器编译后的代码缓存等数据
如果无法满足新的内存分配需求,将跑出OutOfMemoryError

6、运行时常量池

是方法区的一部分。存放各种字面量与符号引用,在类加载后存放到方法区中

2、垃圾回收

1、堆回收:判断对象已死的算法

1、 引用计数算法

每当有一个地方引用了它,计数器加一;失效就减一,当计数器为零就回收

2、可达性分析算法

通过一系列称为“GC Root”的根对象作为起始节点,从这些节点开始向下搜索,如果某个对象到GC Roots间没有任何引用相连,则证明此对象是不可能在被使用的。
固定可作为GC Roots的对象包括

  • 在虚拟机栈中引用的对象,譬如当前正在运行的方法所使用到的参数、局部变量、临时变量等
  • 在方法区中类静态属性引用的对象,譬如Java类的引用类型静态变量
  • 在方法区中常量引用的对象,譬如字符串常量池里的引用
  • 在本地方法栈中JIN引用的对象
  • Java虚拟机内部的引用,如基本数据类型对应的Class对象,一些常驻的异常对象
  • 所有被同步锁持有的对象

2、回收方法区

方法区的垃圾收集主要回收两部分内容:废弃的常量和不再使用的类型

判断废弃的条件

  • 该类所有的实例都已经被回收,也就是Java堆中不存在该类及其任何派生子类的实例
  • 加载该类的加载器已经被回收,通常是很难达成的
  • 该类对应的Java.lang.Class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法

3、垃圾收集算法

1、分代收集理论

  • 强分代假说:熬过越多次垃圾收集过程的对象就越难以消亡
  • 弱分代假说:绝大多数对象都是朝生夕灭的
  • 跨代引用假说:跨代引用相对于同代引用来说仅占极少数:存在相互引用关系的两个对象,应该是倾向于同时生存或者同时消亡。
    设计者一般至少会将Java堆中划分为新生代和老年代,每次垃圾收集的时候新生代中都会发现有大批对象死去,而每次回收后存活的少量对象,将会逐步晋升到老年代中存放。

2、标记清除算法

3、标记复制算法

将存活的对象复制到另一个区域,然后清空这个区域。好处就是分配内存就不需要考虑碎片空间的情况

4、标记整理算法

针对老年代中垃圾回收,将老年代中所有存活的对象都移动到内存的一端,然后将超过边界的对象全部清除。

4、垃圾收集器

新生代收集器

  • Serial
  • ParNew
  • Parallel Scavenge (吞吐量优先)

老年代收集器

  • Serial Old
  • Parallel Old
  • CMS
    - 初始标记 (stop)
    - 并发标记
    - 重新标记 (stop)
    - 并发回收

混合收集器

  • Garbage First

五、计算机网络

1、TCP三次握手

在这里插入图片描述

2、四次挥手

在这里插入图片描述

3、TCP和UDP的区别

  • 基于连接 tcp
  • 可靠性和有序性 tcp
  • 实时性 udp
  • 协议手部大小 udp小
  • 运行速度 tcp慢
  • 拥塞机制 tcp
  • 流模式 tcp面向字节 udp面向报文
  • 资源占用 tcp多

4、TCP四种拥塞控制算法

  • 慢开始和拥塞避免:先将cwnd窗口设置为1,每次收到接收方发来的接收确认,将窗口大小增加至原来的2倍,当超过限定值sst之后改为拥塞避免,每次增加1。当发生拥塞时,窗口大小更改为1,且将sst设置为原来的一半
  • 快速重传:使发送方尽快进行重传,而不是等超时重传计时器超时再重传。当发送方收到3个连续的重复确认,就将相应的报文段立即重传。
    发送方发送1号数据报文段,接收方收到1号报文段后给发送方发回对1号报文段的确认,在1号报文段到达发送方之前,发送方还可以将发送窗口内的2号数据报文段发送出去,接收方收到2号报文段后给发送方发回对2号报文段的确认,在2号报文段到达发送方之前,发送方还可以将发送窗口内的3号数据报文段发送出去。
    假设该报文丢失,发送方便不会发送针对该报文的确认报文给发送方,发送方还可以将发送窗口内的4号数据报文段发送出去,接收方收到后,发现这不是按序到达的报文段,因此给发送方发送针对2号报文段的重复确认,表明我现在希望收到的是3号报文段,但是我没有收到3号报文段,而收到了未按序到达的报文段,发送方还可以将发送窗口中的5号报文段发送出去,接收方收到后,发现这不是按序到达的报文段,因此给发送方发送针对2号报文段的重复确认,表明我现在希望收到的是3号报文段,但是我没有收到3号报文段,而收到了未按序到达的报文段,,发送方还可以将发送窗口内的最后一个数据段即6号数据报文段发送出去,接收方收到后,发现这不是按序到达的报文段,因此给发送方发送针对2号报文段的重复确认,表明我现在希望收到的是3号报文段,但是我没有收到3号报文段,而收到了未按序到达的报文段。
    此时,发送方收到了累计3个连续的针对2号报文段的重复确认,立即重传3号报文段,接收方收到后,给发送方发回针对6号报文的确认,表明,序号到6为至的报文都收到了,这样就不会造成发送方对3号报文的超时重传,而是提早收到了重传。

在这里插入图片描述

5、全连接和半连接队列

TCP存在两个队列(全连接队列和半连接队列),第一次握手后TCP会产生的新项并先存放到半连接队列中。当完成三次握手之后项会移动到全连接队列里(全连接队列默认大小backlog值是50)。如果当全连接队列满了server则会根据tcp_abort_on_overflow 的值来做对应的处理,,值为0则丢弃当前客户端的ack,等隔一段时间重发第二步的syn+ack包,值为1则废弃当前握手过程与连接。

6、SYN攻击

攻击方式

  • 直接攻击:攻击者用他们自己的没有经过伪装的IP地址快速地发送SYN数据包,这就是所谓的直接攻击。一旦被检测到,这种攻击非常容易抵御,用一个简单的防火墙规则阻止带有攻击者IP地址的数据包就可以了。
  • 欺骗式攻击:攻击者还必须能够用有效的IP和TCP报文头去替换和重新生成原始IP报文。如今,有很多代码库能够帮助攻击者替换和重新生成原始IP报文。要使攻击成功,位于伪装IP地址上的主机必须不能响应任何发送给它们的SYN-ACK包。攻击者可以用的一个非常简单的方法,就是仅需伪装一个源IP地址,而这个IP地址将不能响应SYN-ACK包。
    如果一个源地址被重复地伪装,这个地址将很快被检测出来并被过滤掉。在大多数情况下运用许多不同源地址伪装将使防御变得更加困难。在这种情况下最好的防御方法就是尽可能地阻塞源地址相近的欺骗数据包。
  • 分布式攻击:攻击者运用在网络中主机数量上的优势而发动的分布式SYN洪泛攻击将更加难以被阻止。

防御方法

  • 增加TCP backlog队列:不能实际的解决问题
  • 减少SYN-RECEIVED的时间:可能会出错误,不推荐
  • SYN缓存:在采用SYN缓存的主机中,一个带有被限制大小的HASH表空间被用于存放那些将被分配给TCB的数据的一个子集。如果当握手完成的ACK接收到了,这些数据将被复制到一个完整的TCB中,否则超出存活时间的HASH值将会在需要时被回收。在Lemon的FreeBSD中,对于一个半开连接的SYN缓存是160字节,而一个完整的TCB是736字节,并且支持15359个SYN缓存空间。
  • SYN Cookies:因为构成连接状态的最基本数据都被编码压缩进SYN-ACK的序列号比特位里了。对于一个合法连接,服务器将收到一个带有序列号(其实序列号已经加1)的ACK报文段,然后基本的TCB数据将被重新生成,一个完整的TCB通过解压确认数据将被安全的实例化。
    其不足之处就是,不是所有的TCB数据都能添加到32位的序列号段中,所以一些高性能要求的TCP选项将不能被编码。其另一个问题是这样的SYN-ACK报文段将不能被转发(因为转发需要完整的状态数据)。
  • 防火墙与代理:一种是对连接发起人伪装SYN-ACK包,另一种是对服务器伪装ACK包。
    在这里插入图片描述
    在这里插入图片描述

7、HTTP

HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程序(user agent)。应答的服务器上存储着一些资源,比如HTML文件和图像。我们称这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或者隧道(tunnel)。

尽管TCP/IP协议是互联网上最流行的应用,HTTP协议中,并没有规定必须使用它或它支持的层。事实上,HTTP可以在任何互联网协议上,或其他网络上实现。HTTP假定其下层协议提供可靠的传输。因此,任何能够提供这种保证的协议都可以被其使用。因此也就是其在TCP/IP协议族使用TCP作为其传输层。

HTTP协议规定,请求从客户端发出,最后服务器端响应该请求并 返回。换句话说,肯定是先从客户端开始建立通信的,服务器端在没有 接收到请求之前不会发送响应

通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。

在浏览器地址栏键入URL,按下回车之后会经历以下流程:

  1. 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
  2. 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
  3. 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
  4. 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
  5. 释放 TCP连接;
  6. 浏览器将该 html 文本并显示内容;

在这里插入图片描述

8、http与https

  • http协议以明文方式发送内容,不提供任何方式的数据加密,因此http不适合传输一些敏感信息。
  • https在http的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器与服务器之间到的通信加密。

HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

HTTPS和HTTP的区别主要如下:

  1. https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
  2. http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
  3. http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  4. http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

客户端在使用HTTPS方式与Web服务器通信时有以下几个步骤:

(1)客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。

(2)Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。

(3)客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。

(4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。

(5)Web服务器利用自己的私钥解密出会话密钥。

(6)Web服务器利用会话密钥加密与客户端之间的通信。
  
虽然说HTTPS有很大的优势,但其相对来说,还是存在不足之处的:

(1)HTTPS协议握手阶段比较费时,会使页面的加载时间延长近50%,增加10%到20%的耗电;

(2)HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;

(3)SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。

(4)SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。

(5)HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。

六、手撕代码

class Solution {
    public int strToInt(String str) {
        char[] c = str.trim().toCharArray();
        if(c.length == 0) return 0;
        int res = 0, bndry = Integer.MAX_VALUE / 10;
        int i = 1, sign = 1;
        if(c[0] == '-') sign = -1;
        else if(c[0] != '+') i = 0;
        for(int j = i; j < c.length; j++) {
            if(c[j] < '0' || c[j] > '9') break;
            if(res > bndry || res == bndry && c[j] > '7') return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            res = res * 10 + (c[j] - '0');
        }
        return sign * res;
    }
}
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-07-23 11:11:55  更:2021-07-23 11:13:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 17:41:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码