当前位置: 首页 > news >正文

面试题30天打卡-day30

1、如何在 Linux 中查看系统资源使用情况?比如内存、CPU、网络端口。

以下是Linux中一些常用的命令来查看系统资源使用情况:

  • top:实时动态地显示系统的 CPU 使用情况、进程信息、内存占用情况等。可以使用 q 键退出。top命令可以实时显示各个进程的 CPU 占用率、内存占用率等信息。
  • htop:类似于 top,但是在交互性和功能上更加强大。可以使用 q 键退出。
  • free:查看系统内存的使用情况,包括总共的内存量、已使用的内存量、空闲的内存量等。可以使用 -h 参数让输出结果以易读的方式显示。
    • 内存使用情况: free -h,其中 -h 参数可以让输出结果以易读的方式显示,该命令可以显示系统总共的内存量、已使用的内存量、空闲的内存量等信息。
  • vmstat:以文本形式显示系统的 CPU 使用情况、内存使用情况、虚拟内存使用情况等。可以使用 -s 参数来查看更详细的信息。
  • sar:收集系统历史性能数据,并以报告形式输出。可以通过安装 sysstat 包来使用该命令。
  • iostat:显示磁盘 I/O 活动情况,包括读写速度、等待时间等信息。可以使用 -x 参数来显示更详细的信息。
    • iostat -c 1 1 命令可以显示 CPU 的负载情况。
  • mpstat:显示每个 CPU 核心的使用情况,包括用户模式下和内核模式下的占用情况、CPU 间的切换次数等信息。
  • nmon:显示 Linux 系统的各种性能指标,包括 CPU 使用率、内存使用率、磁盘 I/O 使用率、网络吞吐量等。可以使用交互式界面查看。
  • netstat:可以查看正在使用的网络连接、监听的端口等信息。如果只想查看特定端口的连接情况,可以使用 netstat -an | grep PORT 命令来进行过滤。
    • 该命令可以显示当前正在使用的网络连接、监听的端口等信息。如果只想查看特定端口的连接情况,可以使用 netstat -an | grep PORT 命令来进行过滤,其中 PORT 指代特定的端口号。

2、如何用 Nginx 做限流,有几种限流算法,分别如何实现?

回答一:

Nginx 可以通过配置限制每个客户端请求的速率来实现限流。具体来说,Nginx 有两种限流方式:基于请求速率限制基于连接速率限制

下面分别介绍这两种方式以及常用的限流算法。

  1. 基于请求速率限制:基于请求速率限制是指限制每个客户端的请求速率,常用的限流算法有以下几种:
    • 漏桶算法:在单位时间内处理一定数量的请求,多余的请求则会放入一个“漏桶”中,随后以固定速率处理。
    • 令牌桶算法:在每个单位时间内,将一定数量的“令牌”放入桶中,每次请求需要获取一个令牌才能被处理,当桶中没有令牌时,请求将被拒绝。
    • 计数器算法:简单地对请求计数,并限制每个客户端在单位时间内最多可以处理的请求数量。

在 Nginx 中实现基于请求速率的限流通常需要使用模块,如 ngx_http_limit_req_module、ngx_http_limit_conn_module 等。

  1. 基于连接速率限制:基于连接速率限制是指限制每个客户端的连接速率,常用的限流算法有以下几种:
    • 并发连接数:限制每个客户端同时能够建立的连接数,以此来限制连接速率。
    • 队列长度:将每个连接加入到一个队列中,限制队列中同时存在的连接数量,以此来限制连接速率。

在 Nginx 中实现基于连接速率的限流通常需要使用模块,如 ngx_http_limit_conn_module 等。

要实现基于请求速率或连接速率的限流,我们需要在 Nginx 配置文件中设置相应的限流规则。以下是一个基于漏桶算法的 Nginx 配置示例:

http {limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;server {location / {limit_req zone=one burst=20;proxy_pass http://backend;}}
}

其中,limit_req_zone 指定了一个名为 one 的共享内存区域,用于存储请求的统计信息,同时指定了速率为 10r/s。在 location 中,limit_req 指定了限流规则,并将请求转发到后端服务器。

需要注意的是,不同的限流算法适用于不同的场景,我们需要根据实际情况选择合适的算法和配置参数。同时,在实际应用中,为了防止恶意攻击和 DDOS 攻击,通常需要将多种限流算法组合起来使用。

回答二:

Nginx 提供了几种限流算法,包括漏桶算法、令牌桶算法、基于计数器和滑动窗口的限流等。这里简单介绍一下这几种算法以及如何在 Nginx 中实现:

  1. 漏桶算法

漏桶算法是一种比较简单的限流算法,它的原理是将请求放入一个固定容量的桶中,在一段时间内以一个固定的速率将请求处理出桶,超出桶容量的请求则被丢弃或延迟响应。这种算法可以稳定地控制请求处理的速率。

在 Nginx 中,可以使用 ngx_http_limit_req_module 模块来实现漏桶算法的限流。可以通过配置文件设置桶的容量和速率限制,比如:

http {limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;server {location /api {limit_req zone=mylimit burst=20 nodelay;...}}
}

上面的配置意味着对于每个 IP 地址,最多处理 10 个请求/秒,并且可以瞬间处理 20 个请求(即 burst 值),如果超过则会被丢弃或延迟响应(如果使用 nodelay 参数则会丢弃,否则会延迟响应)。

  1. 令牌桶算法

令牌桶算法是一种比较高效的限流算法,它的原理是维护一个令牌桶,每到达一个请求就从桶中取走一个令牌,如果桶中的令牌数量不足,则拒绝请求。这种算法可以根据业务需求调整令牌的发放速率,从而实现更加灵活的限流。

使用限速模块 ngx_http_limit_req_module 实现 Nginx 请求限制。

该模块允许您设置限制以控制客户端可以向服务器发送请求的速率。

这里是一个简单的例子:

http {limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;server {location / {limit_req zone=one burst=5;proxy_pass http://backend;}}
}

上面的配置限制了来自同一 IP 的请求速率为每秒 1 个(rate=1r/s)。在每秒内请求速率超过 1 个的情况下,将会触发 ngx_http_limit_req_module 模块的拒绝服务逻辑。burst=5 表示在 5 个请求内允许出现短时间的突发流量。

在 Nginx 中,可以使用 ngx_http_limit_conn_module 模块或者第三方模块 ngx_http_limit_traffic_module 来实现令牌桶算法的限流。其中 ngx_http_limit_conn_module 模块支持限流的粒度为 IP 地址,而 ngx_http_limit_traffic_module 支持限流的粒度可以是一个自定义的 key。

  1. 基于计数器和滑动窗口的限流

此类算法相对于前两种算法,在实现上稍微复杂一些,但是在应对突发流量时效果更好。基本思路是使用计数器来记录某个时间段内的请求数量,并使用滑动窗口算法来平滑处理计数器的波动。

我们需要限制单个IP每分钟访问不超过100次,并且防止恶意攻击。可以使用Nginx的limit_req模块实现基于计数器和滑动窗口的限流。具体代码如下:

http {limit_req_zone $binary_remote_addr zone=mylimit:10m rate=100r/m;server{location /{limit_req zone=mylimit burst=10 nodelay;//其他处理代码}}
}

其中,limit_req_zone命令定义了一个名为mylimit、大小为10M的共享内存区,用来存储访问信息。rate=100r/m表示限制速率为100次/分钟。在nginx配置文件的server块中,使用limit_req命令实现对每个请求的限流,burst=10表示允许短时间内处理10次请求,而nodelay则指定处理延迟最小化。

在 Nginx 中,可以使用第三方模块 ngx_http_slab_stat_module 或者 ngx_http_limit_requests_module 来实现基于计数器和滑动窗口的限流。其中 ngx_http_slab_stat_module 模块通过记录访问日志并使用 LRU 缓存来计算请求数量和请求时间窗口;而 ngx_http_limit_requests_module 则是使用 shdict 缓存和滑动窗口算法来实现的。

以上是 Nginx 中常见的限流算法和实现方式,选择何种算法取决于具体的业务需求和系统目标。

3、git pull 和 git fetch 命令分别有什么作用?二者有什么区别?

git pull和git fetch都是用于拉取远程代码的命令,但它们在执行过程中有一些区别。

  1. git fetch:

使用 git fetch 可以从远程仓库获取最新代码。执行 git fetch 后,并不会对当前本地代码进行任何改动,也不会自动合并代码。它会将远程仓库的代码更新到本地的一个单独的分支上(例如,origin/master分支),并且该分支的指针会向前移动到最新的提交记录。这个过程只会更新本地代码库的信息,但是不会合并到你的工作区。如果要将远程分支合并到本地分支,则需要使用 git merge 命令进行合并操作。

示例:

git fetch origin master    // 从远程的origin仓库的master分支获取最新版本到本地的origin/master分支
git merge origin/master   // 将本地的origin/master分支合并到当前所在的分支
  1. git pull:

git pull 是将远程仓库的最新代码更新到本地,并与本地仓库合并的操作。

它的执行过程大致可以分为以下步骤:

  1. 获取远程仓库的更新信息

使用 git fetch 命令获取远程仓库的最新(或指定)分支的相关更新信息,包括分支名称、最新的提交记录等,在本地创建一个对应于远程分支的本地分支(默认情况下名称为origin/remote_branch_name)。

  1. 合并远程分支到本地分支

使用 git merge 命令将本地分支与远程分支进行合并,这个过程会将本地分支里的代码与远程分支里的代码进行比较,然后执行一个三方合并操作,将两者的差异代码融合在一起。

  1. 解决合并冲突

如果本地分支和远程分支之间存在代码冲突,那么在执行合并操作时就会出现合并冲突。此时需要手动解决冲突,然后重新添加、提交、推送本地分支。

  1. 更新工作区

最后,将合并后的代码更新到工作区,使得工作区的代码也同步到最新的状态。

因此,git pull 可以看做是 git fetch 和 git merge 命令的组合,先获取远程仓库的更新信息,再将其与本地分支进行合并,并将合并后的代码更新到工作区。在合并过程中,如果出现代码冲突,则需要手动解决冲突,然后重新提交本地分支。

示例:

git pull origin master   //将远程的origin仓库的master分支获取最新版本并merge到当前分支

git fetchgit pull 的区别:

  • git fetch 只是将远程仓库的代码下载到本地,可以选择合并或不合并到本地分支
  • git pull 则是将远程仓库的最新代码下载到本地,并直接合并到当前分支中,它相当于是先执行 git fetch,再执行 git merge 的操作。

相关文章:

面试题30天打卡-day30

1、如何在 Linux 中查看系统资源使用情况?比如内存、CPU、网络端口。 以下是Linux中一些常用的命令来查看系统资源使用情况: top:实时动态地显示系统的 CPU 使用情况、进程信息、内存占用情况等。可以使用 q 键退出。top命令可以实时显示各…...

learn_C_deep_11 (深刻理解整形提升、左移和右移规则、花括号、++和--操作、表达式匹配:贪心算法)

目录 深刻理解整形提升 左移和右移规则 如何理解"丢弃" 一个问题 0x01<<23 的值是多少 花括号 、--操作 表达式匹配&#xff1a;贪心算法 深刻理解整形提升 #include <stdio.h> int main() {char c 0;printf("sizeof(c): %d\n", sizeo…...

十个高质量工具网站推荐,AI自动抠图换背景,任意背景自动融合

AI 背景更换是一种利用生成式人工智能创建新图像背景的软件工具。与传统方法需要移除原有的背景并更换新的不同&#xff0c;AI背景生成器使用先进的算法生成与前景完美融合的全新背景。这项技术彻底改变了图像编辑的方式&#xff0c;为设计提供了更多的创造自由和灵活性。 特点…...

小红的好数组陡峭值之和

题目如下 这个题我一开始是先生成满足0&#xff0c;1&#xff0c;2的全排列&#xff0c;但是n很大时很快就超出内存限制了&#xff0c;后来想到用动态规划的方法做&#xff0c;这里先分析一下。 n2时&#xff0c;有01&#xff0c;02&#xff0c;10&#xff0c;12&#xff0c;2…...

MySQL中存储具有不定列的数据-EAV模型

当需要在MySQL中存储具有不定列的数据时&#xff0c;一种常见的解决方案是使用EAV&#xff08;Entity-Attribute-Value&#xff09;模型。EAV模型允许灵活地存储不同实体的不同属性&#xff0c;适用于属性数量不确定的情况。本文将介绍如何使用Java和MySQL来实现EAV模型的存储和…...

COM接口规则的存在是有原因的

可能有些人认为接口上的 COM 接口规则没有必要设计的那么严格&#xff0c;但我想说的是&#xff0c;这些规则的存在是有原因的。 假设你在你的产品代码中新增加了版本号为 N 的接口&#xff0c;由于这个接口是内部使用的&#xff0c;没有任何公开文档。所以你可以随意修改它&a…...

并行分布式计算 并行计算性能评测

文章目录 并行分布式计算 并行计算性能评测基本性能指标参数CPU 基本性能指标存储器性能并行与存储开销 加速比性能定律Amdahl 定律Gustafson 定律Sun 和 Ni 定律加速比讨论 可括放性评测标准等效率度量标准等速度度量标准平均延迟度量标准 基准评测程序&#xff08;Benchmark&…...

[网络安全]XSS之Cookie外带攻击姿势及例题详析

[网络安全]XSS之Cookie外带攻击姿势及例题详析 概念姿势及Payload启动HTTP协议 method1启动HTTP协议 method2 例题详析Payload1Payload2window.open 总结 本文仅分享XSS攻击知识&#xff0c;不承担任何法律责任。 本文涉及的软件等请读者自行安装&#xff0c;本文不再赘述。 概…...

Angular之创建项目报错:setTimeout is not defined

零基础的宝们&#xff0c;跟着视频学习Angular中&#xff0c;会教授大家如何创建一个新项目。 但是在操作时就会遇到无法创建的问题。 接下来我们一起来看看&#xff0c;本人Angular起步时卡在家门口的问题。 在已经安装了nodejs的情况下&#xff0c;被建议使用cnpm命令全局安装…...

python实现神经网络之---构建神经元模型1(python3.7)

本文主要要以周志华的机器学习书为蓝本编写 第5章神经网络 5.1python 实现神经元模型 神经网络中最基本的成分是神经元 (neuro且)模型&#xff0c;如下图所示&#xff1a; 1943 年&#xff0c; [McCulloch and Pitts, 1943] 将上述情形抽象为国 5.1所示的简单模型&#xff0c…...

前端面试题 —— JavaScript (三)

一、JavaScript有哪些内置对象 全局的对象&#xff08; global objects &#xff09;或称标准内置对象&#xff0c;不要和 "全局对象&#xff08;global object&#xff09;" 混淆。这里说的全局的对象是说在全局作用域里的对象。全局作用域中的其他对象可以由用户的…...

【openGauss】一键编译openGauss5.0+dolphin,体验新增的mysql兼容特性

脚本 新建一个/opt/onekey-build-og.sh文件&#xff0c;存入以下内容 #!/bin/bash # 环境 centos 7.9 4C 8G (配置越高编译越快&#xff0c;4G内存编译不了&#xff0c;磁盘大概需要14GB) # 安装一些依赖 &#xff08;libaio-devel如果不卸载重装&#xff0c;可能会找不到io_c…...

【LeetCode - 每日一题】1073. 负二进制数相加 (2023.05.18)

1073. 负二进制数相加 题意 基数为 -2 。实现两个 0/1 数组串的加法。 解法 这是一道模拟题。 设 arr1[i] 和 arr2[i] 是数组 arr1 和 arr2 从低到高的第 i 位数。 首先回顾普通的二进制数的相加&#xff0c;从低位开始计算&#xff0c;在计算的同时维护用一个变量 carry…...

软件上线会面临哪些缺陷?这四种你一定很熟悉

上线对任何软件产品来说都是一件大事&#xff0c;确保一切正常并且向用户发布高质量的软件非常重要。劣质、过早、不稳定、难以使用的产品会产生大量经济损失&#xff0c;也可能使用户对品牌本身失去信任。一直以来&#xff0c;我们都说应该测试&#xff0c;应该将缺陷修复到可…...

html监听界面被隐藏或显示

vue相比于小程序和uni-app 显然少了两个有点用的生命周期 onShow 应用被展示 onHide 应用被隐藏 但其实这个 要做其实也很简单 JavaScript中 有对应的visibilitychange事件可以监听 我们Html参考代码如下 <!DOCTYPE html> <html lang"en"> <head>…...

Springboot启动失败 DB连不上竟然是maven配置的问题

Springboot启动失败&#xff1a;Failed to instantiate [javax.sql.DataSource]。 最开始以为是DB版本后&#xff0c;需要升级驱动版本&#xff0c;但更新驱动版本还是不行&#xff0c;而且另外一个项目同样驱动同样配置可以启动。 后面发现代码读取不到yml文件中的配置信息。…...

P9234 [蓝桥杯 2023 省 A] 买瓜 题解

题目传送门 前言 说实话这题根本用不到什么折半……&#xff0c;今天看机房大佬写了半天加了一堆剪枝还以为很难&#xff0c;其实是你们想复杂了 20分钟不到从看题到代码实现 这题其实只需要可行性剪枝加排序 哦还有个后缀和 进入正题 小木棍子都听说过吧 没错就是小波上…...

ThingsBoard自定义分发节点duplicate to related

------------------------------------内容仅博主所有,订阅者请勿泄露,感谢--------------------- 1、概述 大家好,我又更新干货了,还是那句话,我绝不像某些博主“拿我格子衫”分享那些照抄官网翻译的东西来骗订阅,我觉得那是浪费时间,要搞就搞干货,今天给大家分享Th…...

vim自动更新ctags与taglist

vim的 ctags 和 taglist 在默认情况下是不进行自动更新的&#xff0c;这对于编写代码是非常不方便的&#xff0c;好在vim的脚本还是很强大的&#xff0c;于是在vimrc中添加如下函数&#xff1a; function! UpdateCtags()let curdirgetcwd()while !filereadable("./tags&qu…...

linux查看日志常用命令,动态日志命令

linux查看日志命令&#xff0c;动态日志命令&#xff1a; tail&#xff1a; -n是显示行号&#xff1b;相当于nl命令&#xff1b;例子如下&#xff1a; tail -100f test.log 实时监控100行日志。 tail -n 10 test.log 查询日志尾部最后10行的日志。 tail -…...

Linux 中常见的安全与权限机制

Linux 中常见的安全与权限机制主要包括以下几类&#xff0c;从文件系统权限到系统级访问控制&#xff0c;构建了多层次的安全保障体系。 &#x1f510; 一、文件权限与用户管理 1. 基本权限&#xff08;rwx&#xff09; r&#xff08;read&#xff09;&#xff1a;读取文件内…...

组合型回溯+剪枝

本篇基于b站灵茶山艾府。 77. 组合 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ]示例 2&#…...

ORM++ 封装实战指南:安全高效的 C++ MySQL 数据库操作

ORM 封装实战指南&#xff1a;安全高效的 C MySQL 数据库操作 一、环境准备 1.1 依赖安装 # Ubuntu/Debian sudo apt-get install libmysqlclient-dev # CentOS sudo yum install mysql-devel# 编译时链接库 (-I 指定头文件路径 -L 指定库路径) g main.cpp -stdc17 -I/usr/i…...

【HTML-13】HTML表格合并技术详解:打造专业数据展示

表格是HTML中展示结构化数据的重要元素&#xff0c;而表格合并则是提升表格表现力的关键技术。本文将全面介绍HTML中的表格合并方法&#xff0c;帮助您创建更专业、更灵活的数据展示界面。 1. 表格合并基础概念 在HTML中&#xff0c;表格合并主要通过两个属性实现&#xff1a…...

3D PDF如何制作?SOLIDWORKS MBD模板定制技巧

SOLIDWORKS制作3D PDF模版 SOLIDWORKS MBD能够帮助工程师以清晰直观的方式描述产品尺寸信息。在3D PDF文件中&#xff0c;用户可以自由旋转和移动视图&#xff0c;方便查看模型的各个尺寸细节。 本文将带您一步步学习如何使用SOLIDWORKS MBD制作专业的3D PDF模板&#xff0c;…...

VMware-MySQL主从

MySQL主从 服务器信息 服务器类型角色主机地址主机名称虚拟机master192.168.40.128test-1虚拟机slave192.168.40.129test-2 Master 配置&#xff08;192.168.40.128&#xff09; 删除自动生成的配置 /var/lib/mysql/auto.cnf [roottest-1 ~]# rm -rf /var/lib/mysql/auto.…...

服务器开机自启动服务

前言&#xff1a; 将服务器中脚本开启自启动执行 步骤&#xff1a; 1.创建一个 systemd 服务文件: /etc/systemd/system/ 目录下创建一个新的服务文件。例如&#xff0c;命名为 myapp.service&#xff1a; sudo nano /etc/systemd/system/myapp.service2.编写 [Unit] Descri…...

Kotlin 活动事件通讯跳转深度讲解

在 Android 开发的浩瀚海洋中,活动(Activity)间的事件通讯与跳转犹如构建复杂应用程序的桥梁与纽带,而 Kotlin 语言的加入,更是为这一过程注入了简洁、优雅与高效的活力。本文将深入剖析 Kotlin 开发中安卓活动事件通讯跳转的方方面面,从基础概念到高级技巧,从代码示例到…...

github双重认证怎么做

引言 好久没登陆github了&#xff0c; 今天登陆github后&#xff0c;提醒进行2FA认证。 查看了github通知&#xff0c;自 2023 年 3 月起&#xff0c;GitHub 要求所有在 GitHub.com 上贡献代码的用户启用一种或多种形式的双重身份验证 (2FA)。 假如你也遇到这个问题&#xf…...

前端EXCEL插件智表ZCELL数据源功能详解

一、数据源功能介绍 前端EXCEL插件智表ZCELL提供了强大的数据源管理功能&#xff0c;使开发者能够灵活地在电子表格中集成和管理结构化数据。数据源功能主要分为两种类型&#xff1a; 卡片式数据源&#xff1a;适合展示和编辑单个数据记录 表格式数据源&#xff1a;适合处理表…...