面试题--3.18

news/2024/5/10 8:14:45
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 )封装起来对开发者不可见。既然要求像调用本地方法一样调用远程方
法,那就不只是要屏蔽复杂度,还要在性能上进行考虑。


http://www.mrgr.cn/p/11627884

相关文章

打造核心竞争力:高效Web系统数据中台的设计与实践_光点科技

在数字化的浪潮中,数据已经成为企业赖以生存和发展的核心资源。一个高效的Web系统数据中台,能够赋予企业在激烈的市场竞争中立于不败之地的能力。本文将深入探讨如何设计和实施一个能够提升企业数据管理水平和支持业务决策的高效数据中台架构。 数据中台…

接单收入超过主业!程序员必备的兼职接单平台汇总

这个月副业接单的款项到账了,由于接了个大单,这个月净收入5w,一下子副业收入超过了主业。不得不说,程序员接单确实是一条赚钱的新路子,都说节流不如开源,这下我是真的体会到了! 今天&#xff0c…

计算机组成原理 — 指令系统

指令系统 指令系统指令的概述指令的格式指令的字长取决于 操作数类型和操作种类操作数的类型数据在存储器中的存放方式操作类型 寻址方式指令寻址数据寻址立即寻址直接寻址隐含寻址间接寻址寄存器寻址寄存器间接寻址基址寻址变址寻址堆栈寻址 RISC 和 CISC 技术RISC 即精简指令…

Camera subdev注册流程

参考资料: 极客笔记https://deepinout.com/camera-sensor-driver/camera-sensor-driver-sensor-subdev-register-flow.htmlCamera驱动模型:用户空间通过CSL协议层,才能访问到Camera subdev,/dev/v4l-subdevx都不是固定的 可以通过cat /sys/class/video4linux/v4l-subdevx/n…

Java设计模式之单例模式(多种实现方式)

虽然写了很多年代码,但是说真的对设计模式不是很熟练,虽然平时也会用到一些,但是都没有深入研究过,所以趁现在有空练下手 这章主要讲单例模式,也是最简单的一种模式,但是因为spring中bean的广泛应用&#…

基于SpringBoot后端实现连接MySQL数据库并存贮数据

目录 一、什么是MySQL数据库 二、基于SpringBoot框架连接MySQL数据库 1、首先添加MySQL依赖: 2、配置数据库连接: 3、创建实体类: 4、创建Repository接口: 5、使用Repository: 三、编写业务SQL语句 1、使用Spring Data…

微服务高级篇(三):分布式缓存+Redis集群

文章目录 一、单点Redis的问题及解决方案二、Redis持久化2.1 单机安装Redis2.2 RDB持久化2.3 AOF持久化2.4 RDB和AOF对比 三、Redis主从3.1 搭建Redis主从架构3.1.1 集群结构3.1.2 准备实例和配置3.1.3 启动3.1.4 开启主从关系3.1.5 测试 3.2 数据同步3.2.1 全量同步【建立连接…

FreeType Glyph Conventions 翻译(4) ——Kerning 字间距调整

原文地址 https://freetype.org/freetype2/docs/glyphs/glyphs-4.html 目录字间距调整对子 Kerning pairs应用字间距调整 Applying kerning The term kerning refers to specific information used to adjust the relative positions of successive glyphs in a string of text…

MHA高可用+VIP漂移

目录一、环境搭建1、关闭防火墙firewalld,selinux2、每台主机安装MySQL二、基于GTID的主从复制1、修改/etc/my.cnf文件2、检查GTID状态3、配置主从复制4、从库设置三、部署MHA1、准备环境(所有节点)2、部署管理节点(可以部署在任何机器上)3、配置ssh信任4、启动测试(mana…

iOS客户端自动化UI自动化airtest+appium从0到1搭建macos+脚本设计demo演示+全网最全最详细保姆级有步骤有图

Android客户端自动化UI自动化airtest从0到1搭建macos脚本设计demo演示全网最全最详细保姆级有步骤有图-CSDN博客 避坑系列-必读: 不要安装iOS-Tagent ,安装appium -这2个性质其实是差不多的都是为了安装wda。注意安装appium最新版本,安装完…

计算机复试面试问答准备(未完)

目录 1、理解多态性2、怎么逆置⼀个链表3、顺序表和链表的区别4、树的存储结构5、什么是哈夫曼树?简述哈夫曼树的构造过程。介绍哈夫曼树的特性。6、哈夫曼编码的编码和解码过程7、图的遍历方式8、图的存储方式9、最小生成树10、迪杰斯特拉算法11、佛洛依德算法12、…

逆向中常见的加密算法

逆向中常见的加密算法 1.Base64 1) 原理与特征: ​ a.原理:将3个byte(即38=24bit)切割为46,然后根据6bit表示的数字在base64表(64byte的表)寻找对应的值;如果待加密字符串长度不为3的整数,则在末尾处补0对齐,其中0对应的字符为=。 ​ b.特征:在反汇编代码中会出现0x…

Flutter逆向

环境配置(Blutter)及使用 参考 [原创]flutter逆向 ACTF native app-Android安全-看雪-安全社区|安全招聘|kanxue.com 其中在编译过程中遇到 -- Configuring done (2.5s) -- Generating done (0.0s) -- Build files have been written to: E:/blutter/build/blutter_dartvm3.4…

创新指南|如何将人工智能应用于未来的创新管理——并不断付诸实践

ChatGPT 的推出加剧了围绕人工智能的炒作,现在我们看到了前所未有的巨大进展。对于我们这些热衷于创新的人来说,这是一个激动人心的时刻。他们正在共同采取措施,充分利用人工智能进行创新管理。本文将阐述人工智能能为创新管理做什么&#xf…

文件包含一-WEB攻防-PHP应用文件包含LFIRFI伪协议编码算法无文件利用黑白盒

演示案例: 文件包含-原理&分类&利用&修复黑盒利用-VULWEB-有无包含文件白盒利用-CTFSHOW-伪协议玩法 #文件包含-原理&分类&利用&修复 1、原理 程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时&#xff0c…

docker 的八大技术架构(图解)

docker 的八大技术架构 单机架构 概念: 应用服务和数据库服务公用一台服务器 出现背景: 出现在互联网早期,访问量比较小,单机足以满足需求 架构优缺点: 优点:部署简单,成本低 缺点&#xff1…

Java生成p12证书

本文章使用的环境 jdk1.8&#xff0c;spring-boot2.6.13 一、pom依赖 <dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.49</version></dependency><dependency>&…

PCL点云处理之最小中值平方(Lmeds法)拟合平面(二百三十四)

PCL点云处理之 最小中值平方法(Lmeds)拟合平面(二百三十四) 一、算法介绍一、拟合原理二、具体实现1.代码2.结果一、算法介绍 (本文提供详细注释,输出拟合平面参数和平面点云) Lmeds(Least Median of Squares)是一种统计学方法,用于拟合数据并减少异常值对拟合结果…

Spark-Scala语言实战(5)

在之前的文章中&#xff0c;我们学习了如何在scala中定义与使用集合和元组。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢。 Spark-Scala语言实战&#xff08;…

【Web应用技术基础】CSS(6)——使用 HTML/CSS 实现 Educoder 顶部导航栏

第一题&#xff1a;使用flex布局实现Educoder顶部导航栏容器布局 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Educoder</title><script src"https://cdn.staticfile.org/jquery/1.1…