面试题--3.18

1. httphttps的区别,以及https的认证过程及加密算法 ?

区别:

  • https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。
  • http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl/tls加密传输协议。
  • httphttps使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443
  • http的连接很简单,是无状态的;HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
        HTTPS 其实是有两部分组成: HTTP + SSL / TLS ,也就是在 HTTP 上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS 进行加密,所以传输的数据都是加密后的数据。具体是如何进行加密,解密,验证的。

1.客户端发起HTTPS请求

用户在浏览器里输入一个https网址,然后连接到server的443端口。

2.服务端的配置

采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(startssl就是个不错的选择,有1年的免费服务)。这套证书其实就是一对公钥和私钥。如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。

3.传送证书

这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。

4.客户端解析证书

这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随即值。然后用证书对该随机值进行加密。就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。

5.传送加密信息

这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。

6.服务段解密信息

服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密。所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。

7.传输加密后的信息

这部分信息是服务段用私钥加密后的信息,可以在客户端被还原

8.客户端解密信息

客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容。整个过程第三方即使监听到了数据,也束手无策。

HTTPS加密算法:

一、加密SSL

HTTP 协议本身没有加密机制,但是可以使用 SSL(Secure Socket Layer)/TLS(Transport Layer Security)协议解决 HTTP 的安全性问题。SSL 不仅提供加密处理,还提供了一种证书机制,用于确定客户端或服务器。证书由值得信任的第三方机构颁发,用来证明客户端和服务端是真实存在的。

二、加密方式

1)共享(对称)密钥加密

所谓共享密钥加密(Common key crypto system)就是加密和解密都使用相同的密钥,因此也被称为对

称密钥加密。

使用共享密钥加密时必须将密钥也发送给对方 ,这样就存在一个问题,发送的密钥可能会被攻击者窃听,如果不发送,对方又不能解密。

2)公开(非对称)秘钥加密

公开秘钥加密使用一对非对称的秘钥,一把叫做私有密钥(private-key),另一把叫做公开密(Public key)。公开密钥任何人都可以获得,但是私有密钥是私有的。通过这种方式,可以很好的解决共享密钥加密的安全性问题。

使用公开密钥加密时,发送密文的一方使用公钥加密,对方收到加密的信息后,再使用自己的私钥进行解密。这样不需要发送用来解密的私钥,就不存在密钥被窃取的风险了。

三、HTTPS 加密方式 HTTPS

采用共享密钥加密和公开密钥加密两者并用的混合加密机制。 使用公开密钥加密方式安全地交换

在稍后使用的共享密钥中的密钥;确保密钥是安全的前提下,使用共享密钥加密方式进行通信。

如何保证公开密钥加密方式交换的密钥是安全的呢? 将公钥放在数字证书中 ,数字证书由双方都可依赖的第三方机构颁发,因此只要证书是可信的,公钥就是可信的。

 

2.linux系统;什么是孤儿进程、什么是僵尸进程有什么区别和联系,以及如何100%创建孤儿进程 ?

僵尸进程

子进程退出,父进程要调用wait或waitpid函数等待回收子进程的资源,否则子进程就一直以“僵尸”

状态存在。这种子进程就是僵尸进程。

如果其父进程还存在,而一直不调用wait,则该僵尸进程将无法回收,等到其父进程退出后该进程

将被init回收。

孤儿进程

一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被

init进程(进程号为1)所收养,并由init进程对他们完成状态收集工作。

区别:

  • 僵尸进程对系统的影响:如果进程不调用wait()或waitpid()的话,那么保留的信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程. 此即为僵尸进程的危害,应当避免。
  • 孤儿进程并不会有什么危害,init进程会接管并处理掉它

3.tcp的特点,tcp的通信过程以及tcp的粘包处理 ?
协议是一种面向连接,可靠,基于字节流的传输层通信协议; TCP 是全双工模式(同一时刻可以同时发送和接收)
TCP 特点
1. 可靠性: 可靠 ;
2. 连接性: 面向连接
3. 报文: 面向字节流
4. 效率: 传输效率低
5. 双工性: 全双工
6. 流量控制: 滑动窗口
7. 拥塞控制: 慢开始、拥塞避免、快重传、快恢复
8. 传输速度: 慢
9. 应用场景: 对效率要求低,对准确性要求高或者要求有连接的场景
以打电话理解 TCP
TCP 的通信的基本过程: TCP 的通信过程与打电话的过程大致相同,一方负责接听特定号码的电话,而另外一方则需要拨通这个电话号码,与对方建立连接。双方都可以通过听筒(socket 输入流)接受对方的信息,通过话筒( socket输出流)向对方发送信息,并且在整个过程中信息的接收和发送是同时进行的(双工通信)。整个过程使用的是C/S 模型。
TCP 三次握手建立连接:
  • 第一次握手: AB打电话说,你可以听到我说话吗?
  • 第二次握手: B收到了A的信息,然后对A说: 我可以听得到你说话啊,你能听得到我说话吗?
  • 第三次握手: A收到了B的信息,然后说可以的,我要给你发信息啦!
在三次握手之后, A B 都能确定这么一件事: 我说的话,你能听到; 你说的话,我也能听到。 这样,就可以开始正常通信了。
TCP 的通信过程的三次握手:
三握是发生在连接的建立阶段:
1. 客户端先向服务端发送 SYN (Socket 状态从 closed 变成 SYN-SEND)
2. 服务端收到 SYN 包后( Socket 状态从 LISTEN 变成 SYN-RECV ),向客户端发送针对此 SYN 包的
SYN/ACK 包,以确认收到了这个 SYN 包。
3. 客户端收到此 SYN/ACK 包后( Socket 状态由 SYN-RECV 变成 Established ),再向服务器发送 SYN/ACK包
4. 服务器收到 ACK 包之后就可以通信了。
粘包的问题的解决思路
粘包问题的最本质原因在与接收对等方无法分辨消息与消息之间的边界在哪。我们通过使用某种方
案给出边界,例如:
  • 发送定长包。如果每个消息的大小都是一样的,那么在接收对等方只要累计接收数据,直到数据等于一个定长的数值就将它作为一个消息。
  • 包尾加上\r\n标记。FTP协议正是这么做的。但问题在于如果数据正文中也含有\r\n,则会误判为消息的边界。
  • 包头加上包体长度。包头是定长的4个字节,说明了包体的长度。接收对等方先接收包体长度,依据包体长度来接收包体。
  • 使用更加复杂的应用层协议。

4.time_wait状态是什么,tcp中的close_wait
说到 CLOSE_WAIT TIME_WAIT 需要看看最原始的四次挥手过程
TCP 的通信过程的四次挥手
1 )客户端向服务器发送 FIN 数据包,表示要断开连接, Socket 状态从 Established 变成 FIN_WAIT_1
2 服务器收到 FIN 数据包后,向客户端发送 ACK 包,表示准备断开,从 Established 变成 closed_wait
3 )客户端收到 ACK 包,从 FIN-wait-1 变成 FIN-WAit_2 ,等待服务器发送确认断开的包。
4 )服务器发送 FIN 包,确认断开连接,变成 LAST-ACK
5 客户端收到 FIN 包后,发送 ACK 包,变成 TIME-Wait ,等待 2 个报文生成时间后( 2MSL ),变成CLOSED状态。
6 )服务器收到 ACK 包后,变成 CLOSED
TIME_WAIT 表示主动关闭,是主动关闭连接时形成的, CLOSE_WAIT 表示被动关闭 ,是被动关闭连接时 形成的。表示被动关闭方等待关闭
TIME_WAIT 状态:
  • TCP协议规定,主动关闭连接的一方要处于TIME_ WAIT状态,等待两个MSL(最大报文生存周期,Linux默认的TIME_WAIT时长一般是60= 2MSL)的时间后才能回到CLOSED状态。
  • TIME_WAIT持续存在2MSL的话,就能保证在两个传输方向上的尚未被接收或迟到的报文段都已经消(否则服务器立刻重启, 可能会收到来自上一个进程的迟到的数据,但是这种数据很可能是错误)
  • 同时也是在理论上保证最后一个报文可靠到达(假设最后⼀个ACK丢失,那么服务器会再重发一个FIN。这时虽然客户端的进程不在了,但是TCP连接还在,仍然可以重发LAST_ACK)
CLOSE_WAIT 状态:
  • CLOSE_WAITTCP关闭连接过程中的一个正常状态。
  • CLOSE_WAIT只会发生在被动关闭链接的那一端
如果服务端一直没有向客户端发送 FIN ( 调用 close() API) ,那么这个 CLOSE_WAIT 会一直存在下去
5.httprpc有什么区别 ?

 

HTTP RPC 的区别:

1.传输协议

  • RPC,可以基于TCP协议,也可以基于HTTP协议
  • HTTP,基于HTTP协议

2.传输效率

  • RPC,使用自定义的TCP协议,可以让请求报文体积更小,或者使用HTTP2协议,也可以很好的减少报文的体积,提高传输效率
  • HTTP,如果是基于HTTP1.1的协议,请求中会包含很多无用的内容,如果是基于HTTP2.0,那么简单的封装以下是可以作为一个RPC来使用的,这时标准RPC框架更多的是服务治理
3.性能消耗,主要在于序列化和反序列化的耗时
  • RPC,可以基于thrift实现高效的二进制传输
  • HTTP,大部分是通过json来实现的,字节大小和序列化耗时都比thrift要更消耗性能

4.负载均衡

  • RPC,基本都自带了负载均衡策略
  • HTTP,需要配置NginxHAProxy来实现
5.服务治理(下游服务新增,重启,下线时如何不影响上游调用者)
  • RPC,能做到自动通知,不影响上游
  • HTTP,需要事先通知,修改Nginx/HAProxy配置
6.rpc 的通信原理?
RPC 是一种远程过程调用,就是自己通过调用本地的方法就能达到远程 RPC 服务的调用执行,然后 RPC服务在把数据给返回给客户端。
RPC 解决的问题:
  • 解决分布式系统中,服务之间的调用问题。
  • 远程调用时,要能够像本地调用一样方便,让调用者感知不到远程调用的逻辑。
RPC 各节点角色说明:
  • RPC Server:暴露服务的服务提供者。
  • RPC Client:调用远程服务的服务消费者。
  • Registry: 服务注册与发现的注册中心。

具体调用过程如下:
1 )客户端在业务服务中发起请求。
2 )调用本地 stub ,本地 stub 对消息进行序列化、封装等处理。
3 )客户端 stub 调用网络通信模块将消息送达服务端,中间还可能包括寻址、建连接等一系列操作。
4 )服务端网络通信模块把接收到的消息转发给 stub 进行反序列化。
5 stub 转发给业务服务进行处理并返回结果。
6 stub 将结果进行序列化,调用网络通信模块。
7 )服务端通过网络通信模块将结果返回到客户端网络通信模块中。
8 )客户端网络通信模块将消息转发给 stub
9 stub 进行反序列化并转发给客户端业务服务。
10 )客户端得到最终结果。
RPC 目标是让( 2 )到( 9 )封装起来对开发者不可见。既然要求像调用本地方法一样调用远程方
法,那就不只是要屏蔽复杂度,还要在性能上进行考虑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/496487.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大型语言模型:技术回顾

公众号:Halo 咯咯,欢迎关注~ 简介 很难说自然语言处理(NLP)的旅程是什么时候开始的。根据维基百科的文章《自然语言处理的历史》[1],它可能始于 17 世纪,当时莱布尼茨和笛卡尔试图理解不同语言中单词之间的…

让人担心的软件生态

shigen坚持更新文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。 个人IP:shigen 其实很久之前shigen就想写这样的一篇文章,思考现在的软件生态和我们…

c语言数据结构(9)——插入排序、希尔排序

欢迎来到博主的专栏——C语言数据结构 博主ID:代码小豪 文章目录 排序插入排序希尔排序 排序 现在有N个数据的序列,其对应的序列号为[r1 ,r2 ……rn];将该序列对应的数据[k1 ,k2 ……kn]排成满足递减或递减的序列的操作称为排序 插入排序 玩过斗地主…

tomcat配置静态资源后无法正常访问

目录 一、场景二、配置三、访问异常四、排查五、原因六、解决 一、场景 1、将前端文件存在到指定目录 2、在tomcat配置静态资源 3、配置后无法正常访问到前端文件 二、配置 1、tomcat配置 2、静态资源 三、访问异常 四、排查 可以ping通,但是访问不了3080端口 …

探究WordPress受欢迎的原因及其org和com的区别

在当今互联网时代,WordPress已经成为了建立网站的首选工具之一,其受欢迎程度远远超出了其他竞争对手。那么,为什么WordPress如此受欢迎呢?让我们一起探究一下。 首先,WordPress是一个开源项目,这意味着任何…

【UEditorPlus】后端配置项没有正常加载,上传插件不能正常使用

解决办法: 1、找到UEditorPlus的根目录,修改 ueditor.all.js 文件 搜索:isJsonp utils.isCrossDomainUrl(configUrl); 更改为:isJsonp false; 2、重新运行前端即可正常使用 如果出现依旧不行,请关闭服务&#xff…

如何选择适合自己的办公空间

说到办公地点的选择,其实就跟挑衣服似的,得看场合、看需求,还得看个人喜好。有的人喜欢自由自在,有的人则需要稳定和私密。所以,咱们来看看哪些朋友更适合哪种办公环境。 适合共享办公室的: 刚起步的小公司…

教师的晋升通道:走向专业成长的阶梯

教师是一项需要不断学习、不断进步的职业。随着教育改革的不断深入,教师的晋升通道也越来越受到关注。本文将从教师的晋升通道、晋升标准和未来发展方向等方面进行探讨,旨在帮助广大教师了解自己的职业成长路径,促进个人发展。 一、教师的晋升…

rtph264depay插件分析笔记

1、rtp协议头 2、rtp可以基于TCP或者UDP 其中基于TCP需要加4个字节的RTP标志 3、rtph264depay定义解析函数gst_rtp_h264_depay_process,通过RFC 3984文档实现。 static void gst_rtp_h264_depay_class_init (GstRtpH264DepayClass * klass) {GObjectClass *gobject…

RTSP应用:实现视频流的实时推送

在实现实时视频流推送的项目中,RTSP(Real Time Streaming Protocol)协议扮演着核心角色。本文将指导你通过安装FFmpeg软件,下载并编译live555,以及配置ffmpeg进行视频流推送,来实现一个基本的RTSP流媒体服务…

WIN使用LPD协议来共享打印机含统信UOS

打开“控制面板”,“程序和功能”,“启动或关闭Windows功能”,下拉找到“打印和文件服务”,勾选“LPD打印服务”和“LPR端口监视器”。确定之后重启电脑,共享主机和其它需要添加共享打印机的都开启功能和重启。 一、启…

SpringMVC设置全局异常处理器

文章目录 背景分析使用ControllerAdvice(RestControllerAdvice)ExceptionHandler实现全局异常全局异常处理-多个处理器匹配顺序存在一个类中存在不同的类中 对于过滤器和拦截器中的异常,有两种思路可以考虑 背景 在项目中我们有需求做一个全…

定时器的原理和应用

#include<reg51.h> unsigned char s[]{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; unsigned char count0,num0; void inittimer() {TMOD0x01;//0000 0001TH0(65536-50000)/256; //定时50ms50000us 2562^8 初值向右边移动8位TL0(65536-50000)%256;ET01;//开启定…

TouchGFX之Button

TouchGFX中的按钮是一种感应触控事件的控件&#xff0c;能够在按钮被按下/释放时发送回调 代码 #ifndef TOUCHGFX_ABSTRACTBUTTON_HPP #define TOUCHGFX_ABSTRACTBUTTON_HPP #include <touchgfx/Callback.hpp> #include <touchgfx/events/ClickEvent.hpp> #includ…

面试题目--3.19

1.foo()和foo()之间有什么区别&#xff1f; 代表所有的warning忽略 2.什么是csrf攻击&#xff1f;如何防范&#xff1f; csrf&#xff0c;跨站请求伪造&#xff0c;攻击方伪装用户身份发送请求从而窃取信息或者破坏系统。 基本原理&#xff1a;用户访问a网站登录并生成了coo…

opencv 十九 python下实现多线程间rtsp直播流的复用

在多线程拉流的任务场景中&#xff0c;有时需要将一个rtsp拉取多次&#xff0c;每重新打开一次rtsp视频流就要多消耗一次带宽&#xff0c;为此基于类的静态对象实现rtsp视频流的复用。 1、实现代码 import threading import cv2,time #接收摄影机串流影像&#xff0c;采用多线…

论文《Exploring to Prompt for Vision-Language Models》阅读

论文《Exploring to Prompt for Vision-Language Models》阅读 论文概况论文动机&#xff08;Intro&#xff09;MethodologyPreliminaryCoOp[CLASS]位置Context 是否跨 class 共享表示和训练 ExperimentsOverall ComparisonDomain GeneralizationContext Length (M) 和 backbon…

如何配置本地ssh连接远程Linux服务器

1.条件 本地操作系统Ubuntu远程服务器&#xff08;Linux都可以&#xff09; 本地如果是Window,其实也一样&#xff0c;但是需要先下载ssh和putty工具&#xff0c;然后操作步骤是一样的 2.生成ssh公私钥对 # 在本地重新生成SSH公私钥对非常简单&#xff0c;在你的命令行终端&a…

vscode从安装到卸载

&#x1f308;个人主页&#xff1a;Rookie Maker &#x1f3c6;&#x1f3c6;关注博主&#xff0c;随时获取更多关于IT的优质内容&#xff01;&#x1f3c6;&#x1f3c6; &#x1f600;欢迎来到小田代码世界~ &#x1f601; 喜欢的小伙伴记得一键三连哦 ૮(˶ᵔ ᵕ ᵔ˶)ა …

任务2.1 一元二次方程(顺序结构版)

在这个任务中&#xff0c;我们编写了一个Java程序来解决一元二次方程。程序接受用户输入的系数a、b、c&#xff0c;并计算出方程的根。通过计算判别式delta的值&#xff0c;我们可以确定方程有两个不相等实根、两个相等实根还是没有实数根。这个程序遵循了IPO模式&#xff0c;即…