面试题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 有两种限流方式:基于请求速率限制和基于连接速率限制。
下面分别介绍这两种方式以及常用的限流算法。
- 基于请求速率限制:基于请求速率限制是指限制每个客户端的请求速率,常用的限流算法有以下几种:
- 漏桶算法:在单位时间内处理一定数量的请求,多余的请求则会放入一个“漏桶”中,随后以固定速率处理。
- 令牌桶算法:在每个单位时间内,将一定数量的“令牌”放入桶中,每次请求需要获取一个令牌才能被处理,当桶中没有令牌时,请求将被拒绝。
- 计数器算法:简单地对请求计数,并限制每个客户端在单位时间内最多可以处理的请求数量。
在 Nginx 中实现基于请求速率的限流通常需要使用模块,如 ngx_http_limit_req_module、ngx_http_limit_conn_module 等。
- 基于连接速率限制:基于连接速率限制是指限制每个客户端的连接速率,常用的限流算法有以下几种:
- 并发连接数:限制每个客户端同时能够建立的连接数,以此来限制连接速率。
- 队列长度:将每个连接加入到一个队列中,限制队列中同时存在的连接数量,以此来限制连接速率。
在 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 中实现:
- 漏桶算法
漏桶算法是一种比较简单的限流算法,它的原理是将请求放入一个固定容量的桶中,在一段时间内以一个固定的速率将请求处理出桶,超出桶容量的请求则被丢弃或延迟响应。这种算法可以稳定地控制请求处理的速率。
在 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 参数则会丢弃,否则会延迟响应)。
- 令牌桶算法
令牌桶算法是一种比较高效的限流算法,它的原理是维护一个令牌桶,每到达一个请求就从桶中取走一个令牌,如果桶中的令牌数量不足,则拒绝请求。这种算法可以根据业务需求调整令牌的发放速率,从而实现更加灵活的限流。
使用限速模块 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。
- 基于计数器和滑动窗口的限流
此类算法相对于前两种算法,在实现上稍微复杂一些,但是在应对突发流量时效果更好。基本思路是使用计数器来记录某个时间段内的请求数量,并使用滑动窗口算法来平滑处理计数器的波动。
我们需要限制单个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都是用于拉取远程代码的命令,但它们在执行过程中有一些区别。
- git fetch:
使用 git fetch 可以从远程仓库获取最新代码。执行 git fetch 后,并不会对当前本地代码进行任何改动,也不会自动合并代码。它会将远程仓库的代码更新到本地的一个单独的分支上(例如,origin/master分支),并且该分支的指针会向前移动到最新的提交记录。这个过程只会更新本地代码库的信息,但是不会合并到你的工作区。如果要将远程分支合并到本地分支,则需要使用 git merge 命令进行合并操作。
示例:
git fetch origin master // 从远程的origin仓库的master分支获取最新版本到本地的origin/master分支
git merge origin/master // 将本地的origin/master分支合并到当前所在的分支
- git pull:
git pull 是将远程仓库的最新代码更新到本地,并与本地仓库合并的操作。
它的执行过程大致可以分为以下步骤:
- 获取远程仓库的更新信息
使用 git fetch 命令获取远程仓库的最新(或指定)分支的相关更新信息,包括分支名称、最新的提交记录等,在本地创建一个对应于远程分支的本地分支(默认情况下名称为origin/remote_branch_name
)。
- 合并远程分支到本地分支
使用 git merge 命令将本地分支与远程分支进行合并,这个过程会将本地分支里的代码与远程分支里的代码进行比较,然后执行一个三方合并操作,将两者的差异代码融合在一起。
- 解决合并冲突
如果本地分支和远程分支之间存在代码冲突,那么在执行合并操作时就会出现合并冲突。此时需要手动解决冲突,然后重新添加、提交、推送本地分支。
- 更新工作区
最后,将合并后的代码更新到工作区,使得工作区的代码也同步到最新的状态。
因此,git pull 可以看做是 git fetch 和 git merge 命令的组合,先获取远程仓库的更新信息,再将其与本地分支进行合并,并将合并后的代码更新到工作区。在合并过程中,如果出现代码冲突,则需要手动解决冲突,然后重新提交本地分支。
示例:
git pull origin master //将远程的origin仓库的master分支获取最新版本并merge到当前分支
git fetch
和git 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 的值是多少 花括号 、--操作 表达式匹配:贪心算法 深刻理解整形提升 #include <stdio.h> int main() {char c 0;printf("sizeof(c): %d\n", sizeo…...

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

小红的好数组陡峭值之和
题目如下 这个题我一开始是先生成满足0,1,2的全排列,但是n很大时很快就超出内存限制了,后来想到用动态规划的方法做,这里先分析一下。 n2时,有01,02,10,12,2…...
MySQL中存储具有不定列的数据-EAV模型
当需要在MySQL中存储具有不定列的数据时,一种常见的解决方案是使用EAV(Entity-Attribute-Value)模型。EAV模型允许灵活地存储不同实体的不同属性,适用于属性数量不确定的情况。本文将介绍如何使用Java和MySQL来实现EAV模型的存储和…...

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

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

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

Angular之创建项目报错:setTimeout is not defined
零基础的宝们,跟着视频学习Angular中,会教授大家如何创建一个新项目。 但是在操作时就会遇到无法创建的问题。 接下来我们一起来看看,本人Angular起步时卡在家门口的问题。 在已经安装了nodejs的情况下,被建议使用cnpm命令全局安装…...
python实现神经网络之---构建神经元模型1(python3.7)
本文主要要以周志华的机器学习书为蓝本编写 第5章神经网络 5.1python 实现神经元模型 神经网络中最基本的成分是神经元 (neuro且)模型,如下图所示: 1943 年, [McCulloch and Pitts, 1943] 将上述情形抽象为国 5.1所示的简单模型,…...
前端面试题 —— JavaScript (三)
一、JavaScript有哪些内置对象 全局的对象( global objects )或称标准内置对象,不要和 "全局对象(global object)" 混淆。这里说的全局的对象是说在全局作用域里的对象。全局作用域中的其他对象可以由用户的…...
【openGauss】一键编译openGauss5.0+dolphin,体验新增的mysql兼容特性
脚本 新建一个/opt/onekey-build-og.sh文件,存入以下内容 #!/bin/bash # 环境 centos 7.9 4C 8G (配置越高编译越快,4G内存编译不了,磁盘大概需要14GB) # 安装一些依赖 (libaio-devel如果不卸载重装,可能会找不到io_c…...
【LeetCode - 每日一题】1073. 负二进制数相加 (2023.05.18)
1073. 负二进制数相加 题意 基数为 -2 。实现两个 0/1 数组串的加法。 解法 这是一道模拟题。 设 arr1[i] 和 arr2[i] 是数组 arr1 和 arr2 从低到高的第 i 位数。 首先回顾普通的二进制数的相加,从低位开始计算,在计算的同时维护用一个变量 carry…...
软件上线会面临哪些缺陷?这四种你一定很熟悉
上线对任何软件产品来说都是一件大事,确保一切正常并且向用户发布高质量的软件非常重要。劣质、过早、不稳定、难以使用的产品会产生大量经济损失,也可能使用户对品牌本身失去信任。一直以来,我们都说应该测试,应该将缺陷修复到可…...

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

Springboot启动失败 DB连不上竟然是maven配置的问题
Springboot启动失败:Failed to instantiate [javax.sql.DataSource]。 最开始以为是DB版本后,需要升级驱动版本,但更新驱动版本还是不行,而且另外一个项目同样驱动同样配置可以启动。 后面发现代码读取不到yml文件中的配置信息。…...
P9234 [蓝桥杯 2023 省 A] 买瓜 题解
题目传送门 前言 说实话这题根本用不到什么折半……,今天看机房大佬写了半天加了一堆剪枝还以为很难,其实是你们想复杂了 20分钟不到从看题到代码实现 这题其实只需要可行性剪枝加排序 哦还有个后缀和 进入正题 小木棍子都听说过吧 没错就是小波上…...

ThingsBoard自定义分发节点duplicate to related
------------------------------------内容仅博主所有,订阅者请勿泄露,感谢--------------------- 1、概述 大家好,我又更新干货了,还是那句话,我绝不像某些博主“拿我格子衫”分享那些照抄官网翻译的东西来骗订阅,我觉得那是浪费时间,要搞就搞干货,今天给大家分享Th…...
vim自动更新ctags与taglist
vim的 ctags 和 taglist 在默认情况下是不进行自动更新的,这对于编写代码是非常不方便的,好在vim的脚本还是很强大的,于是在vimrc中添加如下函数: function! UpdateCtags()let curdirgetcwd()while !filereadable("./tags&qu…...
linux查看日志常用命令,动态日志命令
linux查看日志命令,动态日志命令: tail: -n是显示行号;相当于nl命令;例子如下: tail -100f test.log 实时监控100行日志。 tail -n 10 test.log 查询日志尾部最后10行的日志。 tail -…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...

2025-05-08-deepseek本地化部署
title: 2025-05-08-deepseek 本地化部署 tags: 深度学习 程序开发 2025-05-08-deepseek 本地化部署 参考博客 本地部署 DeepSeek:小白也能轻松搞定! 如何给本地部署的 DeepSeek 投喂数据,让他更懂你 [实验目的]:理解系统架构与原…...

Axure零基础跟我学:展开与收回
亲爱的小伙伴,如有帮助请订阅专栏!跟着老师每课一练,系统学习Axure交互设计课程! Axure产品经理精品视频课https://edu.csdn.net/course/detail/40420 课程主题:Axure菜单展开与收回 课程视频:...