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

【Linux】Linux开发:GDB调试器与Git版本控制工具指南

在这里插入图片描述

Linux相关知识点可以通过点击以下链接进行学习一起加油!
初识指令指令进阶权限管理yum包管理与vim编辑器GCC/G++编译器
make与Makefile自动化构建

在 Linux 开发中,GDB 调试器和 Git 版本控制工具是开发者必备的利器。GDB 帮助快速定位代码问题,Git 则提供高效的版本管理与协作支持。本指南将简明介绍两者的核心功能与使用技巧,助力提升开发效率。

请添加图片描述
Alt
🌈个人主页:是店小二呀
🌈C语言专栏:C语言
🌈C++专栏: C++
🌈初阶数据结构专栏: 初阶数据结构
🌈高阶数据结构专栏: 高阶数据结构
🌈Linux专栏: Linux

🌈喜欢的诗句:无人扶我青云志 我自踏雪至山巅 请添加图片描述

文章目录

  • 一、Git版本控制器
    • 1.1 Git与GitHub关系
    • 1.2 安装git
  • 二、GitHub创建项目
    • 2.1 新建仓库
    • 2.2 将远端仓库拉起到本地
    • 2.3 一、二板斧:add+commit
      • 2.3.1 设置git上传
      • 2.3.2 git add与git commit在做什么?(重点)
    • 2.4 三板斧:push
    • 2.5 git其他选项
      • 2.5.1 git log可以查看提交记录
      • 2.5.2 git status可以查看当前目录状态
  • 三、git流程解析
  • 四、Linux调试器-gbd
    • 4.1 、可执行程序生成调试信息
    • 4.3 readELF指令查看调试信息
  • 五、gdb相关调式指令
    • 5.1 list调式指令
    • 5.2 run调试指令
    • 5.3 断点相关调试指令
      • 5.3.1 breakpoint调试指令
      • 5.3.2 info breakdpoints调试指令
      • 5.3.3 delete调试指令
      • 5.3.4 disable调试指令
      • 5.3.5 enable调试指令
    • 5.4 next调试指令
    • 5.5 step调式指令
    • 5.6 printf 调式指令
    • 5.7 display调试指令
    • 5.8 undisplay调式指令
  • 六、快速排查问题
    • 6.1 continue 调式指令
    • 6.2 finish 调式指令
      • 6.2.1 next和finish区别
    • 6.3 until调式指令
    • 6.4 set var调式指令

一、Git版本控制器

1.1 Git与GitHub关系

  • Git】:Git是版本控制系统,专门用于管理和跟踪代码的修改历史。**它能够在本地完整保存项目的所有版本,方便开发者在自己的电脑上管理项目,记录每次更改。
  • 【GitHub】:GitHub是基于Git的远程平台,GitHub是一个托管代码的在线平台,它建立在Git之上,为Git仓库提供了一个云端存储库。

Git主要是一个在本地管理文件版本的工具,用于跟踪文件的每次修改,实现代码的历史管理。而为了满足大规模协作的需求,GitHub应运而生,它在云端提供了一个基于Git的仓库平台,让开发者可以远程存储、共享代码,并实现多人协作和代码同步。Git负责本地的版本控制,而GitHub是对Git功能的拓展,实现了在云端共享和管理代码的能力。

1.2 安装git

Linux下安装git: sudo yum install -y git

二、GitHub创建项目

2.1 新建仓库

对于Git是一个工具,而是gitee和github是为了Git搭建的网址。

在这里插入图片描述

在这里,选择你需要的代码语言来保存版本。README文件用于仓库的说明,创建时会自动生成中英文版本。在分支选项中,这里推荐选择单分支是为了简化项目管理,特别是在项目初期或只是用于代码托管时,不需要复杂的分支结构。单分支模式更适合简单的版本控制,避免了多分支带来的合并冲突和管理开销。

2.2 将远端仓库拉起到本地

在这里插入图片描述

1.首先在普通用户家目录下,下载代码请复制以下命令到终端执行。

指令:git clone 地址

在这里插入图片描述

2.克隆到普通用户家目录下,我们通过ls -la指令进行查看。

在这里插入图片描述

3.当我们将远端仓库拉取到本地,为了确保提交的代码身份被Gitee/GitHub正确识别,需要在本地进行相关配置

在这里插入图片描述

在这里插入图片描述

  1. 将本地仓库里的文件拷贝远端仓库为了方便测试代码,统一放到一个testgit文件中,然后进入远端仓库目录进行拷贝。

命令:cp …/testgit . -rf

在这里插入图片描述

2.3 一、二板斧:add+commit

相关指令命令

  • git add . 】:将当前位置的所有文件都添加到本地仓库上
  • git commit -m"内容"】 (内容可以是日志或记录,不能随便填写,必须填写):该步骤是把内容提交到本地仓库中,跟远端仓库没有关系的

在这里插入图片描述

2.3.1 设置git上传

如果是首次使用,需要配置邮箱和用户名。是为了确保可以找到这份代码的源头。

设置命令

  • git config -global user.email-“你的邮箱”
  • git config -global user.name-“你的名字”

在这里插入图片描述

2.3.2 git add与git commit在做什么?(重点)

git addgit commit 只能在 Git 仓库的目录及其子目录中操作,不能直接将其他路径的文件添加到该仓库的版本控制中。

Git 的工作流程分成了几个不同的区域:工作区、暂存区和本地仓库。简单来说,Git 并不会自动保存工作区中的修改,而是需要显式地通过 git addgit commit 命令将更改记录到本地仓库。

  • 工作区(Working Directory):这是你在项目目录中看到的文件。当你对文件进行修改时,这些更改只存在于工作区,还没有被 Git 跟踪为新版本。
  • 暂存区(Staging Area):当你运行 git add 命令时,Git 会将选定的更改(比如修改、添加或删除的文件)添加到暂存区。暂存区是一个“待提交”的清单,是 Git 知道你想提交的内容,但还没有正式保存的地方
  • 本地仓库(Local Repository):当你运行 git commit 命令时,Git 会将暂存区的内容提交到本地仓库中,这就创建了一个新的“版本”记录。这些提交在本地仓库中保存下来,可以随时查阅或还原。

2.4 三板斧:push

命令: git push

在这里插入图片描述

这里需要输入你在平台上的账号名和密码,完成本地仓库跟远端仓库进行同步

2.5 git其他选项

2.5.1 git log可以查看提交记录

在这里插入图片描述

2.5.2 git status可以查看当前目录状态

在这里插入图片描述

这里我只是add+commit,并没有同步到远端。系统就会提示当前我已经托管到本地仓库,但是还没有同步到远端。然后push同步就不需要做任何操作拉。

三、git流程解析

1..git 目录是 Git 本地仓库,通过 add 命令可以将修改的内容提交到一个暂存区,方便后续的版本控制和管理。

在这里插入图片描述

2.commit 会将暂存区中的内容提交到本地仓库,并清空暂存区。最后,push 会将本地仓库的更改同步到远程仓库。

在这里插入图片描述

3..gitgnore文件

在这里插入图片描述

  1. 它实际上是一个配置文件,用于指定哪些文件或文件类型不应被添加到版本控制中。
  2. 不要忘记使用*符号,它是一个通配符,用于匹配任意数量的字符。
  3. 我们可以自行编辑该文件,将不想纳入版本控制的文件后缀或路径写入其中。

四、Linux调试器-gbd

知识铺垫

  • 程序的发布方式有两种,debug模式和release模式
  • Linux gcc/g++出来的二进制程序,默认是release模式
  • 要使用gdb调试,*必须在源代码生成二进制程序的时候,加上 -g 选项

4.1 、可执行程序生成调试信息

gdb系统是默认安装,直接输入 gdb 即可启动调试器。

在Linux下调试,只能使用gdb进行调试。-g选项用于在编译时生成调试信息,对此启用 -g 选项后文件体积会增大,但不会影响程序的执行速度

在这里插入图片描述

4.3 readELF指令查看调试信息

通过 readelf 工具可以查看使用 -g 选项生成的可执行文件中的调试信息。readelf 是一个用于读取 ELF 格式文件的命令行工具,可以帮助我们检查 ELF 文件的头信息、段和节的内容,其中也包括调试信息。

在这里插入图片描述

在 Linux 系统中,虽然可执行文件是二进制格式,但其内部结构采用了 ELF (Executable and Linkable Format/可执行与可链接格式)格式,可以通过 readELF 工具查看。

五、gdb相关调式指令

调式指令可以全称和简写,得到效果是一致的,这里通常采用简写。 q(退出quit)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5.1 list调式指令

l/list】:查找源文件内容

两种使用方式

  • list/l 行号】:显示binFile源代码,接着上次的位置往下列,每次列10行
  • list/l 函数名】:列出某个函数的源代码
  • 注意事项】:如果list/ l 后面直接跟对应的文件名是无法进行查看的,在gdb当中默认可以在该文件直接查看。

如果想要从头开始进行查找,可以简写l 0从0开始进行查找

虽然上list/ l 后面直接跟对应的文件名是无法进行查看的,但是我们可以文件名基础之上,带上行号或函数可以进行查找啦。

**gdb会默认记录你最近执行的一条命令的,这里默认打印十行,这里可以直接回车回车,就看见全部源文件。**如果查找到结尾,会有系统提示,比如:我们对应的整个文件一共有24行。

在这里插入图片描述

查找时,是否应该以被查找的行号或函数作为起点?

如果输入想查看的行号和函数,会显示上下文。因为我们一般在看一份代码的上下号,指定的行就是我们默认调试就是想看他的上下文。

5.2 run调试指令

r/run】:运行程序

在调试之前都需要将程序运行起来,r回车

在这里插入图片描述

**r 指令类似于按下 F5,会直接编译并运行程序直到结束。**但在这种模式下无法进行调试,因此我们可以先设置一个断点,以便在指定位置暂停执行。

5.3 断点相关调试指令

5.3.1 breakpoint调试指令

b/breakpoint】:设置断点

打断点方式

  • break(b) 行号 :】:在某一行设置断点
  • break 函数名 :】:在某个函数开头设置断点
  • 其中 : 用于指定文件和函数
  • 断点不能连续打,编号被使用不会重现。断点编号本质是一个线性增长的计数器

使用场景】:b myproess.c :main

在这里插入图片描述

图片效果解释

  • 函数本质上就是一个代码块。设置断点时,不是设置在某一行代码上,而是设置在函数的入口地址。例如,不是第 15 行,而是第 17 行(函数的起始位置)

5.3.2 info breakdpoints调试指令

i b/info breakdpoints】:查看当前设置了哪些断点

通过info b调试指令可以查看当前设置断点,其中设置断点都是具有线性增加的Num编号。

在这里插入图片描述

5.3.3 delete调试指令

d/delete Num(编号)】:删除指定编号断点

这里删除断点,不能通过指定文件名、行号、函数名等形式删除,而是通过Num编号

在这里插入图片描述

在这里插入图片描述

在调试过程中,断点编号是线性增长的计数器,因此断点的编号会逐渐增加而不会重复使用。由于编号不会重置,所以断点不能连续设置(即使之前的断点已删除或禁用,其编号也不会再重新分配)。这种设计保证了每个断点在整个调试过程中都有一个唯一编号。

5.3.4 disable调试指令

disable Num(编号)】:禁用断点,关闭Enb使能

在这里插入图片描述

在这里插入图片描述

5.3.5 enable调试指令

enable Num(编号)】:启用断点,开启Enb使能

5.4 next调试指令

gbd会默认记录最近一次的指令,可以回车执行最近一次指令。

n/next】:"逐过程"调试,类似于我们F10

在这里插入图片描述

5.5 step调式指令

s/step】:"逐过程逐语句"调试,可进入到函数内部,类似于我们F11

5.6 printf 调式指令

p/printf 变量】:打印变量值

在调试器中,$ 通常用于表示查询结果的编号。查看变量的内容或地址时,不能直接使用 p 变量名,而应通过 p $变量名 来引用已查询过的结果。

5.7 display调试指令

如果希望变量的数值始终显示,并在每次调试时自动刷新,可以使用 display 变量名 命令。

display】:常显示变量的数值,具有相关编号

在这里插入图片描述

在这里插入图片描述

5.8 undisplay调式指令

要取消变量的自动显示,不能直接使用 undisplay aundisplay &a,而是需要使用 undisplay 编号 命令。

undisplay 编号】:取消变量的自动显示

在这里插入图片描述

六、快速排查问题

问题】:无论是使用 VS 调试器还是 gdb 调用调试,核心目标是什么?

并不是单纯地通过调试就能解决所有问题,而是找到代码中的具体问题,并针对性地分析和修复。归根结底,调试的核心在于发现问题

通过设置断点,可以将程序执行划分为不同的范围。如果某个范围内发生崩溃,就可以对这一范围进行局部调试。断点的作用就是帮助我们快速缩小问题范围,尤其在面对冗长的代码时,断点能显著提高排查效率。

6.1 continue 调式指令

c/continue】:断点处跳跃

在这里插入图片描述

6.2 finish 调式指令

【finish】指令:直接运行完当前所在的函数并停下。使用 finish 时,调试器不会逐步执行函数内部的代码,而是快速跳出函数,直接返回调用点。这在函数内部细节不重要、或者希望快速查看函数返回结果时非常实用。

在这里插入图片描述

6.2.1 next和finish区别

因此,nfinish 的关键区别在于 finish 能让你在函数返回后停留并显示返回值,而 n 只是跳过整个函数调用,并不提供返回值的详细信息。

6.3 until调式指令

【until】指令:将程序运行到指定的行号并暂停,期间的代码会被正常执行。这非常适合快速跳过某段代码,直接查看指定位置的运行状态

在这里插入图片描述

6.4 set var调式指令

set var 变量名 = 新值,这个指令非常适合调试复杂逻辑时临时调整变量值!

【set var】:用于在调试过程中直接修改变量的值,从而影响程序的运行状态

在这里插入图片描述


在这里插入图片描述

以上就是本篇文章的所有内容,在此感谢大家的观看!这里是Linux笔记,希望对你在学习Linux旅途中有所帮助!

相关文章:

【Linux】Linux开发:GDB调试器与Git版本控制工具指南

Linux相关知识点可以通过点击以下链接进行学习一起加油!初识指令指令进阶权限管理yum包管理与vim编辑器GCC/G编译器make与Makefile自动化构建 在 Linux 开发中,GDB 调试器和 Git 版本控制工具是开发者必备的利器。GDB 帮助快速定位代码问题,G…...

Git 的引用规格(refspec)语法

目录 引用规格语法格式常见用法强制 -f 和 的区别git fetch origin remote-branch:local-branch 和 git push origin local-branch:remote-branch 区别 引用规格语法格式 格式如下&#xff1a;[]<src>:<dst> 常见用法 # fetch git fetch origin <remote-bra…...

反转链表题目

文章目录 反转链表题目链接&#xff1a;[在线OJ](https://leetcode.cn/problems/reverse-linked-list/description/)题目详解思路1&#xff1a;思路1算法复杂度 思路2代码实现思路2算法复杂度 结语 欢迎大家来到我的博客&#xff0c;给生活来点impetus 让我们进入《题海探骊》…...

LED灯按键调光芯片、PWM调光IC、发光灯控制调光芯片

按键调光芯片&#xff0c;特别是LED灯使用PWM调光的芯片IC&#xff0c;是一种用于控制LED灯具亮度的集成电路&#xff0c;常用于台灯、壁灯、吊灯等照明设备中。这种芯片通过脉冲宽度调制&#xff08;PWM&#xff09;技术来调节LED的亮度&#xff0c;可以实现从最亮到最暗的平滑…...

Android Room 报错:too many SQL variables (code 1 SQLITE_ERROR) 原因及解决方法

报错信息&#xff1a; android.database.sqlite.SQLiteException: too many SQL variables (code 1 SQLITE_ERROR): while compiling: SELECT * FROM points WHERE id IN (?,?,?,...,?,?,?)SQLiteException: too many SQL variables 通常是由于一次查询或插入的 SQL 语句…...

USA-Entrepreneur-20240708-Business/Unusual

How to Get More Attention You can’t run a great business if you can’t capture people’s attention, says Gary Vaynerchuk. “如果你无法吸引人们的注意力&#xff0c;你就不能经营一家伟大的企业。”——Gary VaynerchukGary Vaynerchuk是一位知名的企业家、作家和公…...

AI算法在目标锁定跟踪领域的利与弊!

AI目标锁定与制导的优点 提高精度和效率&#xff1a; AI算法能够快速准确地分析大量数据&#xff0c;从而改进目标识别和跟踪&#xff0c;提高打击或投放的准确性和效率。 通过深度学习模型&#xff0c;AI可以识别图像中的特征并判断是否存在目标&#xff0c;进一步提取目标…...

移远BC28_opencpu方案_pin脚分配

先上图&#xff0c;BC28模块的pin脚如图所示&#xff1a; 下面看看GPIO的复用管脚 然后我自己整理了一份完整的pin功能列表...

初学stm32 --- II2C_AT24C02,向EEPROM中读写数据

目录 IIC总线协议介绍 IIC总线结构图 IIC协议时序 1. ACK&#xff08;Acknowledge&#xff09; 2. NACK&#xff08;Not Acknowledge&#xff09; IO口模拟II2C协议 发送起始信号&#xff1a; 发送停止信号&#xff1a; 检测应答信号&#xff1a; 发送应答信号&#x…...

动态规划汇总1

1.动态规划 动态规划&#xff0c;英文&#xff1a;Dynamic Programming&#xff0c;简称DP&#xff0c;如果某一问题有很多重叠子问题&#xff0c;使用动态规划是最有效的。 所以动态规划中每一个状态一定是由上一个状态推导出来的&#xff0c;这一点就区分于贪心&#xff0c…...

【计算机网络】lab5 ARP协议

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;计算机网络_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2.…...

分布式缓存redis

分布式缓存redis 1 redis单机&#xff08;单节点&#xff09;部署缺点 &#xff08;1&#xff09;数据丢失问题&#xff1a;redis是内存存储&#xff0c;服务重启可能会丢失数据 &#xff08;2&#xff09;并发能力问题&#xff1a;redis单节点&#xff08;单机&#xff09;部…...

【Rust】数据类型

目录 思维导图 1. 数据类型概述 1.1 标量类型 1.1.1 整数类型 1.1.2 浮点数类型 1.1.3 布尔类型 1.1.4 字符类型 1.2 复合类型 1.2.1 元组类型 1.2.2 数组类型 2. 类型注解与类型推断 3. 整数溢出处理 4. 数字运算 5. 示例 思维导图 1. 数据类型概述 Rust是一种静…...

在现代工业自动化领域CClinkIE转ModbusTCP网关的应用

在现代工业自动化领域&#xff0c;开疆智能CCLINKIE转ModbusTCP网关扮演着至关重要的角色&#xff0c;尤其是在立体仓库的应用中。立体仓库系统通过高度集成的自动化设备和先进的信息技术&#xff0c;实现了物料存储和管理的高效率。CCLINKIE转ModbusTCP网关作为连接不同工业通…...

ASP.NET Core与GraphQL集成

一、引言&#xff1a;探索 C# 与ASP.NET Core、GraphQL 的协同魅力 在当今数字化浪潮中&#xff0c;Web 开发领域不断演进&#xff0c;新技术层出不穷。C# 作为.NET 平台上的中流砥柱&#xff0c;凭借其强大的功能与优雅的语法&#xff0c;成为众多开发者构建各类应用程序的得…...

Zabbix 从入门到精通

一、Zabbix 简介 1.1 什么是 Zabbix Zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级开源解决方案。它能监控各种网络参数&#xff0c;保证服务器系统的安全运营&#xff1b;并提供灵活的通知机制以让系统管理员快速定位 / 解决存在的各种问题。 1…...

文生图模型的技术原理、训练方案与微调方案

文生图模型的技术原理、训练方案与微调方案 引言 文生图(Text-to-Image)模型是一类能够根据文本描述生成对应图像的深度学习模型。近年来,随着生成对抗网络(GANs)和扩散模型(Diffusion Models)等技术的进步,文生图模型在图像生成领域取得了显著的进展。本文将详细介绍…...

3_CSS3 渐变 --[CSS3 进阶之路]

CSS3 引入了渐变&#xff08;gradients&#xff09;&#xff0c;它允许在两个或多个指定的颜色之间显示平滑的过渡。CSS3 支持两种类型的渐变&#xff1a; 线性渐变&#xff08;Linear Gradients&#xff09;&#xff1a;颜色沿着一条线性路径变化&#xff0c;可以是水平、垂直…...

国内主流的Spring微服务方案指南

构建一个完整的 Spring 微服务方案涉及多个关键组件的集成与配置&#xff0c;包括服务注册与发现、配置管理、API 网关、负载均衡、服务调用、熔断与限流、消息中间件、分布式追踪、服务网格、容器编排以及数据库与缓存等。以下将结合前述内容&#xff0c;详细介绍一个完整的中…...

docker更换镜像源脚本

Ubuntu / Debian 系统下的脚本 sudo curl -fsSL http://luyuanbo79.iepose.cn/wenjian/docker%20jingxiangyuan/Ubuntu-Debian.sh | sh CentOS / RHEL 系统下的脚本 sudo curl -fsSL\n\nhttp://luyuanbo79.iepose.cn/wenjian/docker%20jingxiangyuan/CentOS%20%20RHEL.sh | …...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

redis和redission的区别

Redis 和 Redisson 是两个密切相关但又本质不同的技术&#xff0c;它们扮演着完全不同的角色&#xff1a; Redis: 内存数据库/数据结构存储 本质&#xff1a; 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能&#xff1a; 提供丰…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!

目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...