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

Git系列——Git部署及应用

下面从如下几个方面介绍下其部署及应用:

Git服务器搭建

Git客户端搭建

Git常用命令

Git服务器搭建

Linux服务器搭建(Centos7.5):

一、安装配置SSH(参考XXX)

二、检查OS是否自带Git

1、git-version //查询版本

2、rpm -qa git //查询git详细信息

3、yum -y remove xxx //删除存在的git

三、新安装Git

1、cd /home //切换到home目录

2、mkdir /git //新建git目录

3、cd /home/git //切换到新建git目录下

4、yum -y install git //安装git

四、服务器端配置git

1、groupadd gitgrp //创建git用户组,gitgrp

2、useradd -m -g gitgrp gituser //创建用户gituser,隶属于用户组gitgrp

3、passwd gitpwd //设置用户密码 gitpwd

4、chmod 755 /home/git //修改/home/git目录权限

5、su gituser //切换到gituser用户

6、cd /home/git //切换到git所在目录

7、mkdir .ssh && chmod 700 .ssh //创建.ssh文件,并赋予操作权限

8、touch .ssh/authorized_keys && chmod600 .ssh/authorized_keys //创建公钥存储文件authorized_keys文件并赋予权限

五、服务器端创建git仓库

1、mkdir /home/git/repository //新建仓库目录

2、git init --bare/home/git/repository/gitrptest.git //创建仓库gitrptest.git

3、chown -R gitgrp:gituser /home/git/repository/gitrptest.git //将用户组及用户授权访问仓库gitrptest.git

六、安全处理

1、禁用gituser的ssh登录(若不禁用,加入公钥列表的用户,都能直接访问服务器,如:ssh gitsuer@ip

1)、nano /etc/passwd //打开密码文件

2)、按pagedown(PgDn)翻到下面,找到git:账户

3)、修改git用户权限

git:x:1001:1001:,,,:/home/git:/bin/bash 修改为:git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

七、客户端创建公钥

1、例如window下使用cmd、powershell、git bash里都可以执行,推荐git bash(在任意空白处右键,点击Gitbash here)

ssh-keygen -trsa //执行命令生成本地公钥

2、在用户/xxx(当前系统用户)/.ssh下有两个文件 id_rsa 和id_rsa.pub, 后面这个就是新生成的公钥

八、上传公钥到服务器并加入服务器公钥文件内(authorized_keys)

1、将刚创建的本地公钥文件id_rsa_pub文件copy到git服务器localrsa目录

scpid_rsa_put gituser@ip:/home/git/localrsa (弹出窗口按提示输入yes gituser的密码, 即可上传到服务器)

2、在服务器端追加刚上传的本地公钥文件到authorized_keys

cat /home/git/localrsa/id_rsa_pub >> /home/git/.ssh/authorized_keys

3、可以查看服务器公钥文件内容

1)、使用vi查看,具体操作自行查找

2)、head -n x /home/git/authorized_key //查看文件前x行内容, x为具体数量

九、团队权限管理

Git是为了管理Linux的源代码而开发的,延续了开源精神,所以没有提供权限管理,但提供了hook,可以直接控制git操作,做到权限管理。

下面有几种方式可以实现权限管理:

1、收集客户端公钥:共用gituser(这种方式使用简单,但不能做到实际的权限管理)

2、采用Gitosis:通过构建一个特殊的仓库来方便集中管理公钥,通过其配置文件实现权限管理

3、采用Gitolite:通过git用户和git进行通讯,用Python编写的,自己本身采用虚拟账户来进行权限管理,做到向SVN一样的权限控制

Windows服务器搭建(windows server 2012):

在windows平台下可以使用如下两种方式搭建Git服务器,Bonobo Git Server 和 Gitblit, 可根据自行条件选择。

两种方式本质上一样都是开发一套web应用集中管理用户及文件,底层仍旧是通过git来实现,都比较简单,自行查找搭建方式。

1、Bonobo Git Server (https://bonobogitserver.com)采用ASP.NET研发的

2、Gitblit (http://www.gitblit.com)采用Java研发的

Git客户端搭建

Linux(centos7.5)客户端:

在centos下有两种安装方式,都比较简单:

一、通过yun命令安装

1、yum remove git //卸载旧版本

2、yum install -y git //安装 yum 源的 Git 版本(注意:该源下一般git版本都比较旧)

3、git version //查看版本

4、配置环境变量

vim ~/.bashrc //文件末尾添加如下内容:

exportPATH="/usr/local/git/bin:$PATH"

source~/.bashrc //使配置生效

二、下载源代码编译安装

1、yum install -y wget //若没有wget,先安装

2、//下载目标版本,例如v2.39.2.tar.gz

wgethttps://github.com/git/git/archive/refs/tags/v2.39.2.tar.gz

3、tar v2.39.2.tar.gz //解压

4、cd v2.39.2 //进入目录

5、./configure --prefix=/usr/local/git //配置安装路径, 可自行定义

6、make && make install //编译安装

7、配置环境变量

vim ~/.bashrc //文件末尾添加如下内容:

exportPATH="/usr/local/git/bin:$PATH"

source~/.bashrc //使配置生效

Git常用命令

一般推荐直接使用GUI工具使用Git,例如:TortoiseGit

A、git配置命令

1、git config -l //查看当前git环境详细配置

2、git config --system --list //查看系统config

3、git config --global --list //查看当前用户配置

4、git config --local --list //查看当前仓库配置信息

5、git config [--local][--global][--system]section.key value //修改git配置

6、git config --local user.name xxx //设置当前项目的用户名

7、git config --global core.quotepathfalse //配置当前用户的编码项,可以解决中文编码问题

8、git config --local core.ignorecasefalse //配置当前项目不忽略文件大小写,git默认忽略文件名的大小写,这点值得注意

B、git操作命令

1、初始化、远程仓库

1.1 初始化

git init //进入当前目录执行,创建一个本地库

1.2 远程仓库

git remote -v //显示所有远程仓库

git remote show[remote] //显示某个远程仓库

git remote add[shortname] [url] // 添加远程仓库

git remote rmname //删除远程仓库

git remote renameold_name new_name //修改仓库名

2、克隆

git clone //克隆一个版本库,主要有3种形式:

用法1 : git clonegituser@ip:/home/git/repository/gitrptest.git 当前目录

说明:克隆一个选定版本库到当前目录,相当于copy了一个选定版本库的副本(称之为非裸版本库),里面有着一样的工作区,一样的 .git目录。差别是新克隆出来的这个版本库里的.git/config文件会记录上游版本库repository的位置。

用法2 : git clone --baregituser@ip:/home/git/repository/gitrptest.git 当前目录

说明:克隆出来的版本库不包括工作区,直接就是版本库的内容(即.git目录里的内容)。称之为裸版本库。

用法3 : git clone --mirrorgituser@ip:/home/git/repository/gitrptest.git 当前目录

说明:也是克隆出一个裸版本库。但可以通过git fetch命令与上游版本库持续同步。

3、添加、提交、回退、修改、删除、查看

3.1 添加(将工作区的文件添加到暂存区)

git add dir1 //指定目录,包括目录下的所有文件和子目录

git add fileName1,fileName2 //指定文件

git add . //所有

3.2 提交(将暂存区内容提交到本地库)

git commit -m '描述' fileName //-m 表示同时提交描述信息

git commit [file1][file2] ... -m [message] //提交指定文件

git commit -am '描述' //-a 表示修改文件后不需要执行 git add 命令,直接来提交

git revertHEAD //撤销最近的一个提交

git revert 版本号 // 撤销某次commit

3.3 回退

git reset [--soft| --mixed | --hard] [HEAD]

--mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。

git resetHEAD^ //回退所有内容到上一个版本

git reset HEAD^hello.php //回退 hello.php 文件的版本到上一个版本

git reset xxx指针 //回退到指定版本

git reset HEADfile //回退已缓存的文件

--soft 参数用于回退到某个版本

git reset --softHEAD~3 //回退上上上一个版本

--hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交:

git reset --hardHEAD~3 //回退上上上一个版本

git reset –hard bae128 //回退到某个版本回退点之前的所有信息。

git reset --hardorigin/master //将本地的状态回退到和远程的一样

注意:谨慎使用 –-hard 参数,它会删除回退点之前的所有信息。

HEAD 说明:

HEAD 表示当前版本

HEAD^ 上一个版本

HEAD^^ 上上一个版本

HEAD^^^ 上上上一个版本

以此类推...

可以使用 ~数字表示

HEAD~0 表示当前版本

HEAD~1 上一个版本

HEAD^2 上上一个版本

HEAD^3 上上上一个版本

以此类推...

3.4修改

git mv [file][newfile] //移动或重命名一个文件、目录或软连接(linux下的目录映射,俗称软连接)

git mv -f [file][newfile] //-f 参数 表示新文件名已经存在,但还是要重命名它

3.5 删除

git rm<file> //将文件从暂存区和工作区中删除

git rm -f<file> //强行从暂存区和工作区中删除修改后的文件

git rm --cached<file> //把文件从暂存区域移除,但仍然保留在当前工作目录中

git rm –r * //执行此语句,会删除当前目录下的所有文件和子目录

git clean -df //加-d是指包含目录,加-f是指强制,删除所有未跟踪的文件

3.6 查看

git status //查看工作区、暂存区状态,在你上次提交之后是否有对文件进行再次修改。

git status -s //-s 参数来获得简短的输出结果

git diff HEAD //查看已缓存的与未缓存的所有改动

git diff --statHEAD //显示摘要而非整个diff

git diff[file] //显示暂存区和工作区的差异

git diff --cached[file] //显示暂存区和上一次提交(commit)的差异

git diff[first-branch]...[second-branch] //显示两次提交之间的差异

git log //查看历史日志

git log --oneline//历史记录的简洁的版本

git log --graph--oneline //历史记录的简洁的版本,同时展现分支、合并情况

git log--pretty=oneline //漂亮一行显示

git log --reverse--oneline //逆向显示

git log --author=某个用户 --oneline -n //显示某用户的最近n次日志

git blame<file> //查看指定文件的日志

git reflog //显示操作本地版本库的命令

4、拉取

4.1 拉取

git pull <远程主机名> <远程分支名>:<本地分支名>

git pull originmaster:brantest //将远程主机 origin 的 master 分支拉取过来,与本地的 brantest 分支合并。

git pull originmaster //如果远程分支是与当前分支合并,则冒号后面的部分可以省略。

注意:git pull 其实就是 git fetch 和 git merge FETCH_HEAD 的简写。

4.2 fetch

git fetch [仓库] //拉取仓库

4.3 merge

git merge [仓库]/[branch] //将远程分支合并到当前分支

5、推送(将本地的分支版本上传到远程并合并,正常情况需要保证远程目标分支必须是本地分支的祖先)

git push <远程主机名> <本地分支名>:<远程分支名>

git push <远程主机名> <本地分支名> //本地分支名与远程分支名相同,则可以省略冒号:

push文件, 新建任意文件,例如:test.txt

git add -A //添加所有文件

git commit //提交文件

git push originmaster <=> git push originmaster:master //推送本地master分支到服务器主分支,远程克隆下的仓库,默认主分支名称叫:origin

git push -f originmaster //强制提交,正常情况需要保证目标分支必须是本地分支的祖先

git push origin--delete master //删除远程主机的分支可以使用 --delete 参数,以下命令表示删除origin 主机的 master 分支:

6、分支管理

git branch //列出所有分支

git branch(branchname) //新建分支

git checkout(branchname) //切换分支

git checkout -b(branchname) //-b表示创建新分支并立即切换到该分支下

git branch -d(branchname) //删除分支

//合并分支,先切换到要合并到的分支,然后merge需要合并的分支

git checkout (要合并到的目标分支)

git merge (被合并的分支)

例如:下面表示将otherbranc分支合并到master分支

git checkoutmaster

git mergeotherbranch

7、tag管理

git tag //查看所有标签

git tag -a <tagname> //执行打标签,会弹出输入标签描述

git tag -a<tagname> <分支号> //给某个分支追加标签

例如:git tag -a v0.9 85fc7e7

git tag -a <tagname>-m "描述" //创建标签并同时添加描述信息

git tag -s<tagname> -m "描述" //用自己的私钥签署标签

git show <tagname> //查看某个标签信息

git push<origin> <tagname> //将tagname标签推送到远程仓库

git push<origin> --tags //一次性推送全部尚未推送到远程的本地标签

//删除远程标签

git tag -d<tagname> //先删除本地标签

git push<origin> :refs/tags/<tagname> //删除远程标签

8、变基

git rebase masterfeature //将feature分支的基地址变更到master上

等价于下面两个命令

git checkoutfeature

git rebase master

git rebase -imaster feature //-i 表示以交互式方式执行,可以人工干预进行或终止

git rebase--continue; //让 rebase 过程继续执行。

git rebase--abort; //发生代码冲突后,放弃合并,回到操作前的样子。

rebase主要优点:

1、将当前分支的commit记录也合并到目标分支上

2、不会产生多余的合并提交commit,合并比较干净

3、可以回退到合并上来的分支上的某天commit提交

rebase主要缺点:

1、执行变基后就不知道最初是从那个节点上拉取的分支了

2、若commit提交过多,会执行多次解决冲突

注意:rebase和merge都是合并代码,二者可理解为互反

例如:将A分支合并到B分支, 一种是rebase操作,一种是merge操作

rebase:

git rebase A B

等价于

git checkout B

git rebase A

merger:

git checkout B

git merge A

merger主要优点:

1、直接一次解决完冲突

merge主要缺点:

1、会产生一条多余的合并commit记录

2、待合并分支上的所有commit提交记录都丢弃了

3、没办法再回退到合并分支的某个commit提交

相关文章:

Git系列——Git部署及应用

下面从如下几个方面介绍下其部署及应用&#xff1a;Git服务器搭建Git客户端搭建Git常用命令Git服务器搭建Linux服务器搭建(Centos7.5):一、安装配置SSH&#xff08;参考XXX)二、检查OS是否自带Git1、git-version //查询版本2、rpm -qa git //查询git详细信息3、yum -y remove x…...

Java多线程(二)--线程相关内容

1.创建线程的几种方式继承 Thread 类&#xff1b;public class MyThread extends Thread { Override public void run() {System.out.println(Thread.currentThread().getName() " run()方法正在执行..."); }实现 Runnable 接口&#xff1b;public class MyRunnable…...

CF1692E Binary Deque 题解

CF1692E Binary Deque 题解题目链接字面描述题面翻译题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示思路代码实现题目 链接 https://www.luogu.com.cn/problem/CF1692E 字面描述 题面翻译 有多组数据。 每组数据给出 nnn 个数&#xff0c;每个数为 000 或 1…...

rust方法和关联函数

Rust方法 在大多数面向对象的语言中都存在方法&#xff0c;方法一般和类关联在一起。在Rust中也是类似的&#xff0c;方法和对象总是一起出现。Rust的方法和结构体&#xff0c;枚举&#xff0c;特征一起使用。 定义方法 Rust使用关键字impl来定义方法&#xff0c;例如&#…...

深度学习如何训练出好的模型

深度学习在近年来得到了广泛的应用&#xff0c;从图像识别、语音识别到自然语言处理等领域都有了卓越的表现。但是&#xff0c;要训练出一个高效准确的深度学习模型并不容易。不仅需要有高质量的数据、合适的模型和足够的计算资源&#xff0c;还需要根据任务和数据的特点进行合…...

智慧教室系统--重点设备监控系统

随着教育信息化的不断发展&#xff0c;智慧教室已成为现代教育的重要组成部分。而智慧教室的设备管理和维护也变得越来越重要。一旦智慧教室的重要设备出现故障或异常&#xff0c;将会对教学活动产生不利影响&#xff0c;因此建立智慧教室重点设备监控系统是必要的。一、智慧教…...

Linux中断处理

目录 一、什么是中断 二、中断处理原理 三、中断接口 3.1 中断申请 3.2 中断释放 3.3 中断处理函数原型 四、按键驱动 一、什么是中断 一种硬件上的通知机制&#xff0c;用来通知CPU发生了某种需要立即处理的事件 分为&#xff1a; 1. 内部中断 CPU执行程序的过程中&am…...

python中安装gurobi和pycharm没有语法提示问题解决

安装gurobi第一步 &#xff1a;下载gurobi ( http://www.gurobi.com ) &#xff0c;需要注册账号第二步、申请License注册如果可以通过校园网&#xff0c; 则直接生成。不能的话&#xff0c;通过网站&#xff0c;发邮件申请 http://www.gurobi.cn/NewsView1.Asp?id4第三、邮件…...

滤波算法:经典卡尔曼滤波

卡尔曼滤波实质上就是基于观测值以及估计值二者的数据对真实值进行估计的过程。预测步骤如图1所示&#xff1a; ​图1 卡尔曼滤波原理流程图 假设我们能够得到被测物体的位置和速度的测量值 ​&#xff0c;在已知上一时刻的最优估计值 ​以及它的协方差矩阵 的条件下&#xff…...

flask框架(下)

文章目录flask框架(下)werkzeug简介请求上下文flask 处理方案回到 wsgi_app 方法中push 源码总结补充flask框架(下) werkzeug简介 Werkzeug是一个WSGI工具包&#xff0c;他可以作为一个Web框架的底层库。这里稍微说一下&#xff0c; werkzeug 不是一个web服务器&#xff0c;也…...

Airbyte架构

作为一款技术复杂的数据集成管道&#xff0c;Airbyte的架构模式非常清晰明了。Airbyte应用模式Airbyte管道架构UI&#xff1a;一个易于使用的图形界面&#xff0c;用于与Airbyte API进行交互。WebApp Server&#xff1a;处理 UI 和 API 之间的连接。Config Store&#xff1a;存…...

anchor box只是先验知识,bounding box是一种过程,ground truth才是标准答案,

anchor boxes是一组提前预定义的边框&#xff0c;这些框的宽高和数据集中目标物体的宽高大体是一致的&#xff0c;换句话说&#xff0c;数据集中的绝大多数物体都能找到与其大小一致的anchor box。 举例来说&#xff0c;如果数据集中包含苹果、猫&#xff0c;那么这组anchor bo…...

带你轻松实现通讯录(C语言版)

文章目录前言通讯录初始化通讯录运行的基本框架和菜单增添联系人删除联系人查找联系人修改联系人信息展示通讯录通讯录联系人个数排序通讯录文件操作储存通讯录信息销毁通讯录整体代码Contacts.hContacts.ctest.c写在最后前言 学习C语言的小伙伴&#xff0c;相信都要经历实现通…...

渗透测试之交换式网络嗅探实验

渗透测试之交换式网络嗅探实验实验目的一、实验原理1.1 网络嗅探器Sniffer的工作原理1.2 网络嗅探器的分类1.3 网络嗅探器Sniffer的作用二、实验环境2.1 操作机器2.2 实验工具Sniffer2.3 安装工具Sniffer三、实验步骤1. 熟悉Sniffer工具的启动2. 进行监听3. 熟悉Sniffer工具的介…...

rust 安装

rust 安装一、需要一个c的环境二、配置环境变量三、开始安装一、需要一个c的环境 安装Visual Studio 二、配置环境变量 Rust需要安装两个东西&#xff0c;一个是rustup&#xff0c;一个是cargo。所以你需要设置两个环境变量来分别指定他们的安装目录。 通过RUSTUP_HOME指定…...

机器学习和深度学习综述

机器学习和深度学习综述 1. 人工智能、机器学习、深度学习的关系 近些年人工智能、机器学习和深度学习的概念十分火热&#xff0c;但很多从业者却很难说清它们之间的关系&#xff0c;外行人更是雾里看花。在研究深度学习之前&#xff0c;先从三个概念的正本清源开始。概括来说…...

SQL零基础入门学习(八)

SQL零基础入门学习&#xff08;七&#xff09; SQL 连接(JOIN) SQL join 用于把来自两个或多个表的行结合起来。 下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法。 SQL JOIN SQL JOIN 子句用于把来自两个或多个表的行结合起来&#xff0c;基…...

若依系统如何集成qq邮件发送【超详细,建议收藏】

若依系统的部署博主就不在这儿阐述了&#xff0c;默认大家的电脑已经部署好了若依系统&#xff0c;这里直接开始集成邮件系统&#xff0c;首先我们得需要对qq邮箱进行配置&#xff1b;一套学不会你来打我&#x1f600;&#xff1b; 一、开启我们的qq邮箱发送邮件的配置 1、先进…...

前端-CSS-zxst

CSS 层叠样式表&#xff0c;为了定义HTML标签的样式 内联样式 在标签内部通过 style 属性设置样式值样式名:样式值;样式名:样式值; 内部样式 在 head 标签内通过 style 标签选择器设置样式&#xff0c;供这个网页上的元素使用 外部样式 在 head 标签内通过 link 标签引入外部…...

合宙Air105|fonts库|mcu.ticks()|LuatOS-SOC接口|官方demo|学习(19):fonts库

基础资料 基于Air105开发板&#xff1a;Air105 - LuatOS 文档 上手&#xff1a;开发上手 - LuatOS 文档 探讨重点 官方fonts库函数介绍以及利用mcu.ticks()计算程序运行周期相关内容的学习及探讨。 软件版本 AIR105&#xff1a;LuatOSAIR105 base 22.12 bsp V0014 32bit …...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...