No10.精选前端面试题,享受每天的挑战和学习

news2025/1/11 12:45:12

在这里插入图片描述

文章目录

    • Linux 中五种 IO 模型
    • 四次挥手之后为什么还要等待 2msl
    • cookie 和 session 的区别是什么
    • tcp 怎么保证可靠性
    • css实现图片自适应宽高的几种方法

Linux 中五种 IO 模型

在 Linux 中,常见的五种 I/O(Input/Output)模型包括:

  1. 阻塞 I/O(Blocking I/O):

    • 当应用程序调用 I/O 操作时,它会一直阻塞,直到数据被完全传输或操作失败。期间,应用程序无法执行其他任务。
    • 这种模型适用于简单和同步的 I/O 操作,但对多个并发连接的应用程序来说,可能会导致性能问题。
  2. 非阻塞 I/O(Non-blocking I/O):

    • 在非阻塞 I/O 模型中,应用程序发起 I/O 操作后,不会等待操作完成。如果操作不能立即完成,应用程序会立即返回并继续执行其他任务。
    • 应用程序需要通过轮询来检查 I/O 操作的状态,以确定是否已经完成。这种方式可以实现并发处理多个 I/O 操作,但会消耗一定的 CPU 资源。
  3. I/O 复用(I/O Multiplexing):

    • 使用 I/O 复用模型时,应用程序可以同时等待多个 I/O 事件的到达。它使用 select、poll 或 epoll 等系统调用来监视多个文件描述符的状态。
    • 当至少一个文件描述符准备好进行 I/O 操作时,应用程序将被通知,并可以针对就绪的文件描述符执行相应的操作,而不会阻塞其他文件描述符。
    • 这种模型适用于同时处理多个连接的服务器应用程序。
  4. 信号驱动 I/O(Signal-driven I/O):

    • 在信号驱动 I/O 模型中,应用程序通过向内核注册信号处理函数来请求异步通知。
    • 当 I/O 操作完成时,内核将发送一个信号给应用程序,应用程序可以在信号处理函数中执行相应的操作。
    • 这种模型可以使应用程序在等待 I/O 完成时继续执行其他任务,但信号驱动 I/O 的实现可能有限制,且需要处理信号相关的竞争条件。
  5. 异步 I/O(Asynchronous I/O):

    • 在异步 I/O 模型中,应用程序发起 I/O 操作后,可以立即返回并继续执行其他任务。当 I/O 操作完成时,应用程序会得到通知,并处理已传输的数据。
    • 这种模型通过使用专门的系统调用(如 aio_read、aio_write)来实现异步 I/O 操作。
    • 异步 I/O 模型可以在不阻塞应用程序的情况下进行高效的 I/O 处理。

这些 I/O 模型提供了不同的方式来处理输入输出,选择合适的模型取决于应用程序的需求和设计考虑。

四次挥手之后为什么还要等待 2msl

在 TCP 连接的四次挥手过程中,等待 2MSL(Maximum Segment Lifetime)是为了确保连接中的所有数据包都已经被网络完全丢弃,以避免出现类似于 “僵尸连接” 的问题。

  1. MSL 的定义:MSL 是指一个数据包在网络中最长的存活时间,通常默认为两倍的最大报文段寿命。最大报文段寿命是一个 IP 数据包在网络中能够存活的最长时间,它的具体值由操作系统决定,一般为几十秒至几分钟。

  2. 等待 2MSL 的原因:

    • 可靠性:等待 2MSL 可以确保连接中所有的 ACK(确认应答)报文都能够被另一端接收到。这是因为在 TCP 中,ACK 报文的丢失是可能发生的,所以发送端需要确保对方收到了自己发送的 FIN(连接终止)报文。
    • 避免旧连接干扰:等待 2MSL 也可以防止旧的、已经关闭的连接的数据包出现在新建立的连接中。如果新连接的第一个 SYN 报文与上一个连接传输的 FIN 报文相撞,就可能导致错误的连接建立。
  3. 2MSL 大小的选择:2MSL 的选取应该足够长,以确保网络中的所有数据包都已经被丢弃,同时又不应过长以避免资源浪费。通常,2MSL 的时间推荐为两倍的最大报文段寿命。

总之,在 TCP 连接的四次挥手完成后等待 2MSL 是为了确保连接的可靠关闭,并避免新旧连接的混淆。这是一种网络协议设计上的保护机制,确保网络通信的稳定性和可靠性。

cookie 和 session 的区别是什么

Cookie 和 Session 是两种常用的 web 开发中用于跟踪用户状态的机制,它们的主要区别如下:

  1. 数据存储位置:

    • Cookie: Cookie 是存储在客户端(浏览器)中的小型文本文件,以键值对的形式存在。它会被保存在用户的硬盘上,每次用户发送请求时都会自动附带在请求头中。
    • Session: Session 是存储在服务器端的数据结构,用于保存用户的会话信息。每个客户端与服务器之间建立连接时,会在服务器端创建一个唯一的 session,并将 session ID 发送给客户端,通常以 Cookie 的形式存储在客户端。
  2. 数据存储内容:

    • Cookie: Cookie 主要用于存储少量的简单数据,例如用户的偏好设置、登录凭证等。它的大小限制为每个域名下的总共 Cookie 大小通常不超过 4KB。
    • Session: Session 可以存储较大量和复杂的数据,通常存储用户的登录状态、购物车内容等。服务器端会维护一个 session 数据结构,通过 session ID 将用户的数据与对应的会话关联起来。
  3. 安全性:

    • Cookie: Cookie 存储在客户端,可以被客户端篡改,因此安全性较低。但可以通过设置 Cookie 的属性来增加一定的安全性,例如设置 HttpOnly 属性可以防止客户端的 JavaScript 访问 Cookie。
    • Session: Session 存储在服务器端,在客户端只保存了一个 session ID。相比 Cookie,Session 的安全性较高,因为用户无法直接修改服务器端的数据。
  4. 生命周期:

    • Cookie: Cookie 可以设置过期时间,可以是会话级别的(浏览器关闭后失效)或具体的日期时间。如果没有设置过期时间,Cookie 默认为会话级别。
    • Session: Session 的生命周期依赖于用户会话的开始和结束。当用户打开网站时,服务器会创建一个 session;当用户关闭浏览器或长时间不活动时,session 会被销毁。

总结来说,Cookie 存储在客户端的小型文本文件中,主要用于存储简单的数据;而 Session 存储在服务器端,用于保存用户的会话信息,可以存储较大量和复杂的数据。Cookie 的安全性较低,但具有较长的生命周期;Session 的安全性较高,但随着用户会话的结束而销毁。在实际使用中,Cookie 和 Session 可以配合使用,以实现更灵活和安全的用户状态跟踪。

tcp 怎么保证可靠性

TCP(Transmission Control Protocol)通过一系列的机制来保证数据传输的可靠性:

  1. 序列号和确认应答:发送方为每个数据包分配一个唯一的序列号,接收方通过确认应答来告知发送方已经成功接收到数据包。如果发送方在一定时间内没有收到确认应答,将会重传该数据包。

  2. 超时重传:发送方在发送数据包后会启动一个定时器,如果在规定时间内没有收到确认应答,发送方会认为数据包丢失,会重新发送该数据包。

  3. 流量控制:接收方可以通过 TCP 标准中的滑动窗口机制告诉发送方自己还有多少可用缓冲区来接收数据。发送方根据接收方的滑动窗口大小来控制发送数据的速率,以避免接收方的缓冲区溢出。

  4. 拥塞控制:TCP 通过拥塞窗口来控制发送方发送数据的速率。拥塞窗口的大小由网络的拥塞程度决定,如果网络拥塞,拥塞窗口会减小,从而降低发送方发送数据的速率;反之,如果网络通畅,拥塞窗口会增大,提高发送方的数据发送速率。

  5. 重排序和丢包恢复:接收方在接收到乱序的数据包时,会将其缓存起来,并按正确的顺序重新组装。当发生数据包丢失时,接收方会通过选择性重传机制告知发送方重新发送丢失的数据包。

通过上述机制,TCP 可以确保数据在网络中可靠地传输,并且可以应对网络中的各种情况,如丢包、延迟和拥塞等。这使得 TCP 成为一种广泛使用的可靠传输协议。

css实现图片自适应宽高的几种方法

有几种方法可以使用 CSS 实现图片的自适应宽高:

  1. 使用 max-widthmax-height

    img {
      max-width: 100%;
      max-height: 100%;
    }
    

    这样设置后,图片的宽度和高度将自动根据容器的宽度和高度进行调整,保持比例不失真。图片会根据容器的大小等比例缩放,并且不会超出容器的范围。

  2. 使用 width: autoheight: auto

    img {
      width: auto;
      height: auto;
    }
    

    这样设置后,图片的宽度和高度会自动根据原始图片的宽高比例进行调整,以适应容器的大小。图片会根据容器的大小进行缩放,保持比例不失真。

  3. 使用 object-fit 属性:

    img {
      width: 100%;
      height: 100%;
      object-fit: contain; /* 可选值:contain、cover、fill、none、scale-down */
    }
    

    object-fit 属性指定图片如何适应其容器。contain 值会保持图片的比例,缩放图片以适应容器,并在容器内居中显示。其他可选值还包括 coverfillnonescale-down,可以根据需要选择适合的值。

  4. 使用 flexboxgrid 布局:

    .container {
      display: flex; /* 或 display: grid; */
    }
    
    img {
      width: 100%;
      height: 100%;
      object-fit: contain;
    }
    

    使用 flexboxgrid 布局可以让容器自动调整图片的大小,以填充整个容器。将图片的宽度和高度设置为 100%,并使用适当的布局属性,可以实现自适应宽高。

以上是几种常用的方法,根据实际需求和使用场景选择合适的方法来实现图片的自适应宽高效果。

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

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

相关文章

机器学习19:多类别神经网络-Multi-Class Neural Networks

在【机器学习12:分类 Classification】一文中,笔者介绍了二元分类模型,它可以在两个可能的选择之一之间进行选择,例如: 电子邮件是垃圾邮件还是非垃圾邮件。肿瘤是恶性的或良性的。 在本文中,我们将研究多类…

将ChatGPT变成Midjourney提示生成器

已经有人总结过可以让ChatGPT作为Midjourney图像生成的模板。在本文中,我们将展示如何根据个人用例创建这些提示,这可以让ChatGPT生成的提示可控性更高。 选择提示模板 Midjourney的模板结构性很强,所以我们这里使用一下的结构: …

rsync远程同步(可爱可抵漫长岁月)

文章目录 一、简介二、部署rsync主客服务器1.关闭防火墙(真的老生常谈了 一生之敌!)2.建立/etc/rsyncd.conf 配置文件3.客户端配置4.发起端配置 rsyncinotify 三、拓展使用rsync来实现快速删除大量文件。 一、简介 什么是rsync? …

【Linux】Linux项目自动化构建工具-make/makefile

Linux项目自动化构建工具-make/makefile 什么是make/makefile?make/makefile的使用依赖关系依赖方法makefile是如何工作的?为什么要使用makefile呢?makefile是怎么做到的呢?make和make clean.PHONY:伪目标 特殊符号&am…

Vue 之 mixins 和 provide/inject

一、mixins 1、简介 ​ mixins 又称 混入,是指将一些可复用的代码(JS、生命周期钩子函数等等)抽离出来,定义成mixins模块,然后混入到多个组件中,从而实现组件间的逻辑代码共享,减少重复代码。…

Nginx正向代理、反向代理,动静分离

目录 正向代理 反向代理 动静分离 正向代理 正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。 反向代理 客户端给服…

C#(四十六)之基于流的文件操作(FileStream)

FileStream类属性和方法 属性 CanRead 指示当前文件流是否支持读取 CanWrite 指示当前文件流是否支持写入 CanSeek 指示当前文件流是否支持查找 IsAsync FileStream是同步打开还是异步打开 Length 流的长度(字节数) CanTimeOut 当前文件流是否可以…

【C++进阶】哈希表

文章目录 前言哈希概念哈希冲突哈希函数哈希冲突解决一.闭散列解决哈希冲突1. 线性探测2.二次探测 二、闭散列的实现1.准备2.闭散列插入3.闭散列查找4.闭散列删除 三、闭散列完整源码四、开散列解决哈希冲突1.开散列概念2.哈希桶的结构3.哈希桶的插入4.哈希桶的查找5.哈希桶的删…

学习多线程

1、学习线程池 1.1jdk中的线程池 推荐使用ThreadPoolExecutor 1.1.1先了解参数的意义 首先看下ThreadPoolExecutor的构造函数 public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueu…

对话e签宝,解读 SaaS圈“头部玩家”的增长故事

可以肯定的是&#xff0c;未来3年&#xff0c;整个中国SaaS市场会逐步确认船票分配。穿越周期&#xff0c;告别不确定的三年&#xff0c;给幸存下来的企业上了淋漓生动的一课。在新的起点上&#xff0c;SaaS也需要一种新的打开方式。谁扎得牢、想得透、做的好、跑得快&#xff…

Docker数据卷和数据卷容器应用

学习目的 掌握Docker数据卷和数据卷容器使用方法。 学习准备 要求实验主机能够连接外网&#xff0c;已经正确安装Docker&#xff0c;并关闭防火墙和selinux。 学习步骤 步骤1&#xff1a;创建数据卷 &#xff08;1&#xff09;创建容器&#xff0c;为容器添加一个数据卷&…

基于树莓派4B与STM32的智能门禁系统项目(代码开源)

前言&#xff1a;本文为手把手教学嵌入式经典项目——智能门禁项目&#xff0c;本次项目采用 树莓派4B 与 STM32F103C8T6 进行联合开发。项目充分发挥各自 CPU 的优势与长处&#xff0c;将人脸识别的大计算量任务给树莓派4B&#xff0c;将门禁系统的控制部分交给 STM32 进行处理…

外包干了2个月,技术退步明显...

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

举个栗子!Quick BI 技巧(1):创建趋势折线图

自 2016 年以来&#xff0c;优阅达《举个栗子》内容专栏已陪伴众多企业用户高效工作&#xff0c;解决真实业务场景中的用数问题。 2023 年&#xff0c;全新系列《举个栗子&#xff01;Quick BI 技巧》出炉啦~ 优阅达期待能够持续分享经验&#xff0c;帮助用户发现更多 Quick …

剑指 Offer. 二叉树中和为某一值的路径

给你二叉树的根节点 root 和一个整数目标和 targetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum 22 输出&…

ATA3000系列功率放大器——水声信号中的典型应用

ATA3000系列功率放大器——水声信号中的典型应用 水声领域介绍&#xff1a; 主动声纳是通过声纳本身发射声波&#xff0c;根据声信号反射回波来发现目标&#xff0c;并测定目标的位置和运动参数。水声信号发射机在主动声纳设备中是非常重要的组成部分&#xff0c;其产生特定形式…

YoloV5/YoloV7改进---注意力机制:引入瓶颈注意力模块BAM,对标CBAM

目录 1.BAM介绍 2.BAM引入到yolov5 2.1 加入common.py中&#xff1a; 2.2 加入yolo.py中&#xff1a; 2.3 yolov5s_BAM.yaml 1.BAM介绍 论文&#xff1a;https://arxiv.org/pdf/1807.06514.pdf 摘要&#xff1a;提出了一种简单有效的注意力模块&#xff0c;称为瓶颈注意力模块…

【数据仓库】Apache Doris介绍

Apache Doris介绍 Apache Doris应用场景 Apache Doris核心特性 Apache Doris架构 Doris数据模型三种 Aggregate模型介绍 Uniq模型介绍 在某些多维分析场景下,用户更关注的是如何保证Key的唯一性Key 唯一性约束。因此&#xff0c;我们引入了 Unig 的数据模型。该模型本质上是聚…

微信如何创建自己的小程序?

微信如何创建自己的小程序&#xff1f;微信小程序成为了很多商家、企业甚至是个人在互联网中的营销工具&#xff0c;微信小程序基本上可以说是属于必备工具。那么微信如何创建自己的小程序呢&#xff1f;下面一起来给大家说说。 一、注册小程序账号 微信如何创建自己的小程序…

12.JavaWeb-Node.js

1.Node.js的概念 传统的Web服务器中&#xff0c;每个请求都会创建一个线程&#xff0c;这会导致线程数的增加&#xff0c;从而影响服务器的性能和扩展性&#xff0c;Ryan Dahl借助Chrome的V8引擎提供的能力实现了Node.js——可以在服务端运行的JavaScript&#xff08;可以把Nod…