面试篇!!!!!

news2024/10/22 8:46:27

一.nginx

  1 介绍nginx

nginx是一款轻量级、高性能、稳定性高、并发性好的一个web服务器,一个http和反向代理服务器,一个邮件代理服务器,一个通用的 TCP/UDP 代理服务器,同时也是一款负载均衡软件,可以做七层,四层负载均衡,可以做动静分离,解析静态页面效率非常高,功能非常强大,常用的比如地址重写,防盗链,会话保持,访问控制流量控制等

下面是对 Nginx 功能特性的详细解释:
轻量级与高性能
轻量级:Nginx 的架构设计非常简洁,占用资源少,这使得它在低配置的硬件上也能高效运行。
高性能:通过使用事件驱动、异步非阻塞 I/O 模型,Nginx 可以处理大量的并发连接,具有很高的吞吐量和响应速度。

事件驱动的设计让Nginx成为了一个轻量级且高性能的Web服务器/反向代理服务器
稳定性高
稳定性:Nginx 的稳定性和可靠性经过了广泛的测试和实际应用验证。它能够在长时间运行中保持稳定,适合生产环境中的关键任务。
并发性好
并发处理:Nginx 使用少量的工作进程(通常是每个 CPU 核心一个工作进程)来处理请求,这些进程共享一组监听套接字,并且能够高效地处理大量并发连接。
Web 服务器                                                                                                                                  
静态内容服务:Nginx 在提供静态内容(如 HTML 文件、图片等)方面表现出色,因为它可以直接读取文件系统并快速响应客户端请求。
动态内容支持:通过 FastCGI 或者其他协议(如 uWSGI),Nginx 可以将动态内容请求转发给后端的应用服务器(如 PHP-FPM, Node.js, Python 应用等)。
HTTP 和反向代理服务器
HTTP 服务器:Nginx 可以作为一个标准的 HTTP 服务器,直接处理客户端的 HTTP 请求。
反向代理:Nginx 可以作为反向代理,将客户端的请求转发到后端的一组服务器,并将响应返回给客户端。这种方式可以隐藏真实的后端服务器,增加安全性,并实现负载均衡。
邮件代理服务器
邮件代理:虽然这个功能不如 Web 服务那样常用,但 Nginx 也支持作为 IMAP/POP3 代理服务器,用于邮件服务。
通用 TCP/UDP 代理服务器
TCP/UDP 代理:从 Nginx 1.9.0 开始,引入了 stream 模块,允许 Nginx 作为任意 TCP 或 UDP 流量的代理服务器,适用于各种网络服务,如数据库连接、SMTP 服务等。
负载均衡
七层负载均衡:Nginx 支持基于 HTTP 协议(第七层)的负载均衡,可以根据 URL、Cookie 等信息进行智能路由。
四层负载均衡:通过 stream 模块,Nginx 还可以实现基于传输层(第四层)的负载均衡,如 TCP 和 UDP 流量。
动静分离
动静分离:Nginx 可以配置为只处理静态内容请求,而将动态内容请求转发给后端的应用服务器,这样可以提高效率并减轻应用服务器的压力。
其他高级功能
地址重写:Nginx 提供了强大的 URL 重写功能,可以用来优化 SEO 或者改进网站结构。
防盗链:通过检查 HTTP Referer 头部,Nginx 可以阻止非法站点链接到你的资源,从而节省带宽并保护内容
会话保持:对于需要保持会话一致性的应用,Nginx 可以通过 IP 哈希或其他机制确保来自同一客户端的请求总是被发送到相同的后端服务器。

访问控制:Nginx 提供了多种方法来控制对资源的访问,包括基于 IP 的白名单/黑名单、基本认证等
流量控制:Nginx 可以设置带宽限制,防止恶意用户或爬虫过度消耗服务器资源。
总之,Nginx 是一个高度可配置、灵活且功能丰富的服务器软件,广泛应用于现代 Web 架构中,无论是小型网站还是大型互联网平台,都能找到 Nginx 的应用场景。

TCP(传输控制协议)和 UDP(用户数据报协议)是互联网协议套件中的两个核心传输层协议。它们负责在应用程序之间传输数据,并且各自具有不同的特性和用途。
TCP 适用于需要可靠传输的应用,如 Web 浏览、电子邮件和文件传输。
UDP 适用于对速度和实时性要求高但可以接受一定数据丢失的应用,如实时音视频、在线游戏和 DNS 查询

动静分离是一种架构模式,通过将静态和动态内容分开处理来提高整体性能和可扩展性。

解析静态页面效率非常高是指 Nginx 在处理静态文件请求时表现出色,能够高效地提供静态内容

2 负载均衡组件工作流程

  1. 服务注册

    三台 Web 服务器 A, B, C 启动时,将自己的 IP 地址和端口告诉服务注册中心
  2. 服务发现

    Nginx 从 服务注册中心获取这三台服务器的信息。
  3. 负载均衡策略选择

    Nginx 使用轮询策略,依次选择 A, B, C 来处理请求。
  4. 请求转发

    客户端请求到达 Nginx,Nginx 根据轮询策略选择一台服务器(比如 A)并将请求转发给 A。
  5. 处理请求

    服务器 A 处理请求并生成响应。
  6. 返回响应

    服务器 A 将响应返回给 Nginx,Nginx 再将响应返回给客户端。
  7. 健康检查

    Nginx 定期检查 A, B, C 的健康状态。如果 A 出现故障,Nginx 会将其从可用列表中移除,并继续使用 B 和 C 处理请求。

 3.什么是负载均衡

为了保证服务的高可用,服务单元往往都是集群化(相同服务部署多份)部署的,

当服务消费者消费服务时,负载均衡组件(F5(硬负载),nginx,ribbon,dubbo(软负
载))获取服务提供者所有实例的注册信息,并通过一定的负载均衡策略(可以自己配
置)选择一个服务提供者实例,向该实例进行服务消费,这样就实现了负载均衡

负载均衡是一种技术,用于在多个服务器或网络资源之间分配工作负载,以优化资源使用、最大化吞吐量、减少响应时间,并确保没有单一服务器过载。负载均衡器可以是硬件设备(如 F5 BIG-IP)或软件解决方案(如 Nginx、HAProxy、Ribbon 和 Dubbo 等)。

二.redis

1 .去中心化集群模式(Redis Cluster)的工作原理

1. 节点角色

主节点(Master):负责处理客户端的读写请求,并将数据存储在内存中。

从节点(Slave):作为主节点的备份,定期从主节点同步数据。如果主节点发生故障,从节点可以被提升为新的主节点。

2. 哈希槽(Hash Slots)

总数:Redis Cluster 使用 16384 个哈希槽(编号从 0 到 16383)。

分配:每个键(key)会被映射到其中一个哈希槽中。映射规则是 slot = CRC16(key) % 16384

分布:这些哈希槽被均匀地分配给各个主节点。每个主节点负责一部分哈希槽。

3. 数据分片

分片机制:每个主节点负责一部分哈希槽,从而实现了数据的分片存储。

  • 示例
    • 主节点 A 负责哈希槽 0-5460
    • 主节点 B 负责哈希槽 5461-10921
    • 主节点 C 负责哈希槽 10922-16383
4. 客户端请求处理

连接:客户端可以连接到任意一个节点。

重定向:如果客户端发送的请求对应的键不在当前节点负责的哈希槽范围内,该节点会返回一个重定向响应,告诉客户端应该连接到哪个节点。

直接访问:客户端可以根据重定向信息直接连接到正确的节点,进行读写操作。

5. 故障检测与恢复

心跳检测:节点之间定期交换心跳信息,检测其他节点的状态。

故障检测:如果某个主节点在一定时间内没有响应心跳,其他节点会认为该主节点已经失败。

  • 故障转移
    • 集群会选择该主节点的一个从节点并将其提升为新的主节点。
    • 更新集群配置,通知所有客户端新的主节点位置。
    • 其他从节点会重新配置,指向新的主节点。
6. 数据同步

主从同步:主节点定期将数据同步到从节点,确保数据的一致性和冗余。

增量同步:使用 RDB 文件和 AOF 日志来实现全量和增量的数据同步。

工作流程示例
  1. 初始化集群

    • 启动多个 Redis 实例(节点),并配置它们为集群模式。
    • 使用 redis-cli 工具初始化集群,并分配哈希槽。
    redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 ... 127.0.0.1:7011 127.0.0.1:7012 --cluster-replicas 1
  2. 客户端连接

    • 客户端连接到任意一个节点。
    • 节点返回集群配置信息,包括所有节点及其负责的哈希槽。
  3. 请求处理

    • 客户端根据键计算哈希槽,并确定负责该槽的主节点。
    • 如果请求的键不在当前节点负责的哈希槽范围内,节点会返回重定向响应。
    • 客户端根据重定向信息连接到正确的节点,进行读写操作。
  4. 故障检测与恢复

    • 节点之间定期交换心跳信息,检测其他节点的状态。
    • 如果发现某个主节点不可用,集群会选择一个从节点提升为主节点。
    • 更新集群配置,通知所有客户端新的主节点位置。
  5. 数据同步

    • 主节点定期将数据同步到从节点。
    • 从节点保持与主节点的数据一致,提供数据冗余。
总结

Redis Cluster 通过以下关键特性实现了一个去中心化的分布式存储系统:

  • 数据分片:使用哈希槽将数据均匀分配到多个节点上。
  • 高可用性:通过主从复制和自动故障转移确保系统的连续运行。
  • 负载均衡:客户端可以直接与任何节点通信,节点之间会自动转发请求到正确的节点。
  • 无中心结构:没有单一的控制节点,每个节点都是对等的。

这种架构使得 Redis Cluster 具有高可用性、可扩展性和容错能力,适用于大规模分布式应用。

深度搜索

三. rabbitmq

1消息队列

消息队列(Message Queue, MQ)是一种跨进程的通信机制,用于存储和转发消息。它在分布式系统中扮演着重要的角色,提供了许多关键的功能和优势。以下是消息队列的基本概念、工作原理和主要用途:

基本概念

  1. 消息:消息是系统间传递的信息单元,通常包含数据和元数据(如时间戳、消息类型等)。
  2. 生产者:生成并发送消息的应用程序或服务。
  3. 消费者:接收并处理消息的应用程序或服务。
  4. 队列:存储消息的中间件,可以暂时保存消息,直到被消费者处理。
  5. 消息代理(Message Broker):管理和协调消息传递的中间件服务器,负责将消息从生产者路由到消费者。

工作原理

  1. 生产者发送消息

    • 生产者应用程序生成一条消息,并将其发送到消息队列。
    • 消息可以包含各种类型的数据,例如文本、JSON、二进制数据等。
  2. 消息存储

    • 消息队列接收到消息后,将其存储在队列中。
    • 队列可以持久化存储消息,以确保即使在系统故障后消息也不会丢失。
  3. 消费者接收消息

    • 消费者应用程序从队列中获取消息进行处理。
    • 消费者可以配置为自动确认消息已处理,或者手动确认,以确保消息不会被重复处理。
  4. 消息删除

    • 一旦消息被成功处理并确认,消息队列会将其从队列中删除。
    • 如果消费者没有确认消息,消息可能会重新排队,等待其他消费者处理。

主要用途

  1. 解耦系统组件

    • 消息队列允许不同的系统组件异步通信,从而降低耦合度。
    • 生产者和消费者不需要直接交互,只需通过消息队列进行通信。
  2. 提高系统的可扩展性和灵活性

    • 可以通过增加更多的消费者实例来水平扩展系统的处理能力。
    • 动态调整消费者数量以应对不同的负载需求。
  3. 缓冲和流量控制

    • 消息队列可以作为缓冲区,吸收突发的高流量,防止下游服务过载。
    • 通过设置队列的最大长度或其他策略,可以限制进入系统的请求数量。
  4. 可靠的消息传递

    • 消息队列支持消息的持久化存储,确保消息在系统故障后不会丢失。
    • 消费者可以确认消息已被成功处理,避免消息丢失或重复处理。
  5. 异步任务处理

    • 对于耗时较长的任务,可以将其放入消息队列,由后台任务处理器异步处理。
    • 这样可以避免阻塞前端响应,提高用户体验。
  6. 日志和监控

    • 系统中的各个组件可以将日志信息发送到消息队列,然后由专门的日志处理系统进行收集和分析。
    • 消息队列可以用于收集系统状态信息,通过监控工具进行实时监控和报警。
  7. 数据集成和同步

    • 消息队列可以作为数据管道,将不同系统之间的数据进行集成和同步。
    • 通过消息队列实现事件驱动架构,当某个事件发生时,触发相应的处理流程。
  8. 事务支持

    • 某些消息队列支持事务处理,确保一组操作要么全部成功,要么全部失败。
    • 这对于需要保证数据一致性的场景非常有用。

常见的消息队列系统

  • RabbitMQ:基于 AMQP 协议,支持多种消息模式和灵活的路由机制。
  • Apache Kafka:高性能的分布式消息队列,适用于大规模数据流处理。
  • ActiveMQ:基于 JMS 规范,支持多种协议和消息模式。
  • Amazon SQS (Simple Queue Service):AWS 提供的托管消息队列服务,易于使用和扩展。
  • Azure Service Bus:Microsoft Azure 提供的托管消息队列服务,支持多种消息模式。
  • NATS:轻量级、高性能的消息队列系统,适合微服务架构。
  • ZeroMQ:一个轻量级的消息库,适用于构建自定义消息队列系统。

总结

消息队列是一种强大的工具,用于在分布式系统中实现异步通信、解耦系统组件、提高系统的可扩展性和可靠性。通过使用消息队列,开发者可以构建更加健壮、灵活和高效的系统。

2.RabbitMQ普通模式和镜像模式的区别

RabbitMQ 的普通模式(也称为非镜像模式)和镜像模式(Mirrored Queues)是两种不同的队列配置方式,它们在高可用性和数据冗余方面有显著的区别。下面我将详细解释这两种模式的区别:

普通模式(Non-Mirrored Queues)

特点
  • 单节点存储:在普通模式下,队列中的消息只存储在一个节点上。这意味着如果该节点发生故障,队列中的所有消息可能会丢失。
  • 性能较高:由于消息只存储在一个节点上,写入和读取操作的性能通常较高。
  • 简单配置:配置相对简单,不需要额外的集群设置。
适用场景
  • 对高可用性要求不高:如果系统可以容忍一定程度的数据丢失,并且对性能有较高要求,可以选择普通模式。
  • 开发和测试环境:在开发和测试环境中,普通模式可以简化配置和管理。

镜像模式(Mirrored Queues)

特点
  • 多节点复制:在镜像模式下,队列中的消息会在多个节点上进行复制。主节点负责处理客户端的读写请求,从节点则定期从主节点同步数据。
  • 高可用性:即使某个节点发生故障,其他节点仍然可以继续提供服务,从而提高了系统的高可用性。
  • 数据冗余:通过在多个节点上复制消息,提供了数据冗余,减少了数据丢失的风险。
  • 性能略低:由于需要在多个节点之间进行数据同步,写入和读取操作的性能可能会略低于普通模式。
  • 复杂配置:配置相对复杂,需要设置集群和镜像策略。
适用场景
  • 对高可用性要求高:如果系统不能容忍数据丢失,并且需要高可用性,可以选择镜像模式。
  • 生产环境:在生产环境中,为了确保系统的稳定性和数据的安全性,通常会选择镜像模式

四。RabbitMQ和kafka的区别

    

1. 设计目标和用途

  • Kafka:

    • 设计目标: Kafka 是一个分布式流处理平台,最初由 LinkedIn 开发,后来成为 Apache 的顶级项目。
    • 用途: 主要用于高吞吐量的日志收集、消息传递和流处理。它适用于需要处理大量数据的场景,如日志聚合、实时分析、事件驱动架构等。
    • 特点: 高吞吐量、低延迟、持久化存储、水平扩展性。
  • RabbitMQ:

    • 设计目标: RabbitMQ 是一个实现 AMQP(Advanced Message Queuing Protocol)标准的消息代理。
    • 用途: 适用于需要可靠消息传递、复杂路由和多种消息模式的企业级应用。它支持点对点通信、发布/订阅模式等多种消息传递模式。
    • 特点: 可靠性、灵活性、丰富的消息路由功能、支持事务和消息确认机制。

2. 消息传递模型

  • Kafka:

    • 基于 Pull 模式: 消费者主动从 Kafka 中拉取消息,而不是 Kafka 推送消息给消费者。这种方式可以更好地控制消费速率和提高吞吐量。
    • 分区(Partition): 每个主题(Topic)可以被分成多个分区,每个分区是一个有序且不可变的消息序列。消费者可以并行消费不同分区的消息。
    • 偏移量(Offset): 每条消息在分区中的位置由偏移量表示。消费者可以记录自己的消费进度,从而实现断点续传。
  • RabbitMQ:

    • 基于 Push 模式: 生产者将消息发送到队列,消费者通过订阅队列来接收消息。RabbitMQ 会将消息推送给消费者。
    • 队列(Queue): 消息存储在队列中,消费者从队列中获取消息。队列可以配置为持久化或非持久化。
    • 交换机(Exchange): 通过交换机进行消息的路由,支持多种路由模式(Direct, Fanout, Topic, Headers)。

3. 性能和吞吐量

  • Kafka:

    • 高吞吐量: Kafka 设计为能够处理大规模数据流,每秒可以处理数百万条消息。
    • 低延迟: 由于其高效的存储和传输机制,Kafka 能够提供非常低的端到端延迟。
    • 持久化存储: 消息默认会被持久化到磁盘,并且可以通过配置保留策略来管理数据生命周期。
  • RabbitMQ:

    • 可靠性优先: RabbitMQ 更注重消息的可靠性和一致性,支持消息确认机制和事务。
    • 吞吐量适中: 相比 Kafka,RabbitMQ 的吞吐量较低,但在大多数企业应用场景中已经足够。
    • 灵活的配置: 支持多种持久化选项,可以根据需求调整消息的存储方式。

4. 消息顺序和重复

  • Kafka:

    • 严格顺序: 在同一个分区内的消息是严格有序的,但跨分区的消息顺序不能保证。
    • 不支持事务: Kafka 不支持事务,可能会出现少量的消息丢失或重复。但对于许多大数据处理场景,这通常是可以接受的。
  • RabbitMQ:

    • 消息顺序: 通过合理的配置和使用,RabbitMQ 可以保证消息的顺序。
    • 支持事务: RabbitMQ 支持事务,确保消息的一致性和可靠性。可以通过事务和消息确认机制来防止消息丢失和重复。

5. 扩展性和集群

  • Kafka:

    • 水平扩展性: Kafka 通过增加更多的节点和分区来实现水平扩展。每个分区可以分布在不同的节点上,从而实现负载均衡。
    • 集群管理: Kafka 提供了强大的集群管理和监控工具,易于管理和扩展。
  • RabbitMQ:

    • 水平扩展性: RabbitMQ 也可以通过增加更多的节点来实现水平扩展,但其扩展性相对 Kafka 较弱。
    • 集群管理: RabbitMQ 提供了集群模式,支持主从复制和镜像队列,但配置和管理相对复杂。

6. 适用场景

  • Kafka:

    • 日志收集和传输: 适用于大规模的日志收集和传输,如 ELK 堆栈中的 Logstash。
    • 实时数据分析: 适用于实时数据分析和流处理,如 Apache Storm、Apache Flink。
    • 事件驱动架构: 适用于事件驱动架构,如用户行为跟踪、实时监控。
  • RabbitMQ:

    • 企业级应用: 适用于需要高度可靠性和复杂消息路由的企业级应用,如订单处理、支付系统。
    • 微服务架构: 适用于微服务架构中的服务间通信,提供可靠的异步通信机制。
    • 任务队列: 适用于需要处理大量后台任务的场景,如图像处理、视频转码。

总结

  • Kafka 适用于高吞吐量、低延迟的大规模数据处理场景,如日志收集、实时分析和事件驱动架构。
  • RabbitMQ 适用于需要高度可靠性和复杂消息路由的企业级应用,如订单处理、支付系统和微服务架构中的服务间通信。

选择哪种消息队列系统取决于你的具体需求,包括对吞吐量、可靠性、消息顺序和扩展性的要求。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

15.JVM垃圾收集算法

一、垃圾收集算法 1.分代收集理论 分代收集理论是JAVA虚拟机进行垃圾回收的一种思想,根据对象存活周期的不同将内存分成不同的几个区域;一般将JAVA堆内存分为新生代和老年代;根据每个分代特点选择不同的垃圾收集器; 在新生代中&am…

UE4 材质学习笔记12(水体反射和折射)

一.水体反射和折射 首先就是要断开所有连接到根节点的线,因为水有很多不同的节点成分,当所有其他节点都在用时 要分辨出其中一个是何效果是很难的。 虚幻有五种不同的方法可以创建反射,虚幻中的大多数场景使用多种这些方法 它们会同时运作。…

开源vGPU方案 HAMi实现细粒度GPU切分——筑梦之路

前言 为什么需要 GPU 共享、切分等方案? 在使用GPU的过程中我们会发现,直接在裸机环境使用,都可以多个进程共享 GPU,怎么到 k8s 环境就不行了? 1. 资源感知 在 k8s 中资源是和节点绑定的,对于 GPU 资源…

【Linux】僵尸进程和孤儿进程

一、僵尸进程 何为僵尸进程? 在 Unix/Linux 系统中,正常情况下,子进程是通过父进程创建的,且两者的运行是相互独立的,父进程永远无法预测子进程到底什么时候结束。当一个进程调用 exit 命令结束自己的生命时&#xff…

《编程入门与提高:开启数字世界的大门》

《编程入门与提高:开启数字世界的大门》 一、引言二、编程入门的基础知识(一)编程语言的选择(二)编程环境的搭建(三)编程的基本概念(四)编程的基本语法 三、编程入门的方…

哪些方法可以缓解面试紧张?

面试紧张是许多人在面对重要职业机会时的一种常见情绪。虽然一定程度的紧张可能激发人的潜能,但过度的紧张则可能影响到面试表现。为了缓解面试紧张,以下是一些有效的方法: 1.充分准备: 深入了解公司背景、职位要求以及公司文化…

地方门户分类信息网站源码系统 用户可以自由发帖 PHP+MySQL组合开发 带完整的安装代码包以及搭建部署教程

系统概述 地方门户分类信息网站源码系统是一个基于PHP和MySQL开发的强大平台,旨在帮助用户轻松搭建地方性的分类信息网站。该系统集成了众多实用功能,支持用户自由发帖、浏览和搜索各类信息,如二手交易、求职招聘、房屋租售、生活服务、商家…

Python网络请求库requests的10个基本用法

大家好!今天我们要聊聊Python中非常实用的一个库——requests。这个库让发送HTTP请求变得超级简单。无论你是想抓取网页数据还是测试API接口,requests都能派上大用场。下面我们就一起来看看如何使用requests完成一些常见的任务。 引言 随着互联网技术的…

空洞卷积:Atrous/Dilated convolution - 语义分割中多用到

没办法,我还是很多基础的、底层的模块不通透,读论文难免会受到阻碍,而且这现在科研任务很急了,必须要马上动手实验,全给我弄明白、特别是算法! 空洞卷积-可变形卷积-这一个个我都要。 空洞卷积据说在语义分…

推动AI技术研发与应用,景联文科技提供专业高效图像采集服务

景联文科技提供专业图像采集服务,涵盖多个领域的应用需求。 包含人体图像、人脸图像、手指指纹、手势识别、交通道路、车辆监控等图像数据集,计算机视觉图像数据集超400TB,支持免费试采试标。 高质量人像采集服务:支持不同光线条件…

Netty入门基础:Netty架构设计模型介绍(主从Reactor多线程模型,Futrue-Listener模型)

文章目录 🎵单Reactor单线程✏单Reactor多线程🛒主从Reactor多线程🎐Netty模型🚴‍♀️Future-listener模型 🎵单Reactor单线程 Reactor通过select监控客户端的事件,通过dispatch分发。 如果是建立连接事件…

Unity-RetargetPro3-动画插件试用

一个名气大于实战的插件 目录 初见这个插件, 打开文档看看 下载并打开Demo项目 直接看Editor代码吧 这个插件,可以放弃了 初见这个插件, 觉得,1.都已经是3.0版本,不错哦 看上去,2.目录也 不错,有分Core,plugin等 (应该感觉,怎么也是大公司的代码分拆出来吧,感…

计算机的错误计算(一百三十)

摘要 用手持式计算器计算 则输出为0 . 计算机的错误计算(四十)探讨了计算器的计算精度问题。为了回应一位计算器收藏家来信中的疑问,既(四十)后再续若干节,以便更为广泛地讨论计算器的上述问题。 例1. …

【思维导图】C语言—数据类型和变量

今天我们来回顾——C语言【数据类型和变量】 我们先梳理一下思路:首先学习数据的类型,然后学会用类型去创建变量,接着学习操作符进行变量之间的运算,最后学习 scanf 输入数据, printf 进行数据的打印。回顾的时候最好…

【K8S系列】Kubernetes Pod 状态详细介绍及异常状态解决方案

在 Kubernetes 中,Pod 是最小的可调度单元,负责运行一个或多个容器。Pod 的状态能够反映其生命周期中的不同阶段,帮助用户了解当前的运行状况。本文将详细介绍 Kubernetes Pod 的各种状态及其可能的异常状态解决方案。 一、Pod 状态概览 Po…

【Git】远程操作-标签管理-多人协作

远程操作 分布式版本控制系统 概念理解 Git就像正在看的一本书。每当看完一章,可以将其保存起来,如果后面想修改或者查看以前自己看到哪里,随时可以翻看。Git就是帮助记录这些修改的工具,主要负责记录每次改动,就类似…

git命令笔记(速查速查)

git命令功能总结 1.创建git的本地仓库2. 配置本地仓库(name和email地址)3. 工作区、版本库、暂存区、对象区3.1 add, commit3.2 打印提交日志3.2 修改文件 4.版本回退(git reset)5. 撤销修改(在push之前撤销)6.删除版本库中的文件…

Github + 自定义域名搭建个人静态站点

Github 自定义域名搭建个人静态站点 使用 Github 部署一个自己的免费站点给你的站点添加上自定义域名 本文基于腾讯云基于二级域名, 作用于 Github 实现自定义域名站点 使用 Github 部署一个自己的免费站点 首先你得有一个 Github 账号, 没有就去注册一个,网上有教程,本文跳…

字典学习算法

分为固定基字典和学习型字典 学习型字典 是指通过训练大量与目标数据相似的数据,学习其特征获得的字典。字典学习主要包括两个阶段,一个是字典构建阶段,一个是利用字典进行样本表示阶段。 首次提出:最优方向法(Method …

JSON 注入攻击 API

文章目录 JSON 注入攻击 API"注入所有东西"是"聪明的"发生了什么? 什么是 JSON 注入?为什么解析器是问题所在解析不一致 JSON 解析器互操作性中的安全问题处理重复密钥的方式不一致按键碰撞响应不一致JSON 序列化(反序列化)中的不一致 好的。JSON 解析器…