Linux——应用软件的生命周期
- 功能开发
- 测试:
- 功能性测试
- 对应开发框架的测试用例
- 代码的漏洞扫描
- Web服务器版本
- 应用开发语言的依赖关系和版本信息
- 是否会造成类似内存泄露等影响系统性能的问题
- 压力测试
- 功能性测试
- 应用的部署
- 获取应用代码以及应用静态文件的代码包
- 将安装包中的文件按照服务器配置的架构,将代码文件上传到指定的位置
传统应用开发生命周期中,使用一个名为“瀑布式开发”的概念。各个部门的人员,各司其职,互相之间的工作联系并不紧密。
“敏捷开发”:开发人员一边开发,一边对已经开发完成的部分,进行测试和集成,提升开发效率。
持续集成:开发人员一边进行开发,同时及时进行应用的集成
- 一旦检测到代码发生变化,立刻运行测试(自动化出发)
- 测试无误的情况下,继续进行代码的打包发布(自动完成,无需人工操作)
- 如果测试出现问题,将问题通知给相关人员(无需人工操作,根据测试结果,自动发生)。继续修改
- 相关开发人员针对测试中出现的问题进行修改后,此时代码发生变化,回到第一步。
持续部署:一定那检测到新版本程序包的发布,就立刻按照提前规划好的方式进行应用的更新部署。
- 可以利用puppet chef ansible 等自动化管理软件,配置应用的自动化部署
- 应用更新策略的选择:
- 滚动更新:以K8S中部署的具有10个副本数量要求的deployment为例:
- K8S中如果没有设置更新比例的情况下,默认使用25%作为控制值
- 10 * 0.25 = 2.5 取整3 每次更新3个副本的pod
- 更新的批次安排: 3 3 3 1
- K8S维持本身的10个pod不变,新调度3个pod,新调度的pod使用新发布的应用 ,此时deployment控制的pod数量为13, 10 个旧版本应用 3 个新版本应用
- 等待新调度的3个pod返回状态为running之后,移除原本10个pod中的3个 此时deployment控制的pod数量为10,3个新应用 7 旧的应用
- 如果新调度的3个pod在指定的时间内,没有返回running状态,则此时更新中止,对应的deployment继续控制10个运行旧版本应用的pod
- 然后回到第三步,以3个pod为单位,依次更新,最后deployment控制到的pod都是新版本的应用
- 滚动更新:以K8S中部署的具有10个副本数量要求的deployment为例:
滚动更新是一种更新策略,在滚动更新的过程中如果出现任何问题,可以进行回滚以实现应用版本回溯,恢复到没有问题的版本。而这种更新策略所规划的更新部署可以通过任意方式实现。Shell 剧本 应答文件
-
- 灰度发布:生产环境下的服务器将被分为两个集群。一个集群用来部署灰度发布的应用,一个集群用来部署正常更新的应用。
灰度发布和滚动更新都是为了避免同一个问题,即新版本代码发布到生产环境下,出现问题后,不应该影响用户对于应用的正常访问
-
- 蓝绿发布:生产环境下服务器被分为两个集群,一个集群使用绿色表示,一个集群使用蓝色表示,这两套集群环境一致,一般同时只有一个集群开放给用户访问。
- 蓝色集群部署了稳定版本的应用,绿色集群部署了开发版本的应用
- 绿色集群中的新版本应用经过测试稳定运行后,将用户的访问全部转发给绿色集群处理
- 此时蓝色集群不再用户的访问,但是蓝色集群可以用来部署最新版本的应用,并测试其稳定性。
- 蓝绿发布:生产环境下服务器被分为两个集群,一个集群使用绿色表示,一个集群使用蓝色表示,这两套集群环境一致,一般同时只有一个集群开放给用户访问。
金丝雀测试:在应用更新部署前,一定要在生产环境下进行测试,以验证没有任何问题,才可以进行大规模的应用更新。
代码仓库:保存代码的集中仓库。
代码仓库可以使用传统的文件共享协议进行部署,也可以使用专门的代码仓库软件进行部署。目前大部分公司的代码仓库都是用了支持版本控制功能的应用来进行管理。
常见的版本控制软件:
- Git
- Mercuril
- SVN
Git :
git add //文件提交到暂存区,已经被追踪的文件,也可以提交未追踪的文件
git commit // 将暂存区的文件提交到本地仓库
git log // 查看git commit的提交次数和记录
git rm // 将文件从本地目录和仓库中移除
git mv //对文件进行重命名的操作,同时发生在本地和仓库中
Git status // 显示本地目录中文件的状态,
文件状态显示: 未追踪 //在本地git仓库中不存在该文件
已修改未提交 // 文件的修改已使用git add 命令同步至暂存区,但是未提交到比本地git仓库
已修改未暂存 // 文件的修改未提交到暂存区
git reset // 将文件从暂存区移除
git restore // 从本地仓库恢复文件到本地
Git checkout -- 文件名 // 将文件未提交的变更全部移除
课堂演示记录:
[student@harbor ~]$ sudo yum -y install git // 包含下面所有的功能,同时支持tab 键自动补齐子命令和选项
[student@harbor ~]$ rpm -qa | grep git-core //git核心功能,功能完善,不影响使用
git-core-2.43.5-1.el9.x86_64
git-core-doc-2.43.5-1.el9.noarch
[student@harbor ~]$
[student@harbor ~]$ sudo git config --system user.email admin@123.com
[student@harbor ~]$ cat /etc/gitconfig
[user]email = admin@123.com
[student@harbor ~]$ git config --list
user.email=admin@123.com
[student@harbor ~]$ git config --list --show-origin
file:/etc/gitconfig user.email=admin@123.com
[student@harbor ~]$ git config --global user.email student@123.com
[student@harbor ~]$ git config --list
user.email=admin@123.com
user.email=student@123.com
[student@harbor ~]$ git config --list --show-origin
file:/etc/gitconfig user.email=admin@123.com
file:/home/student/.gitconfig user.email=student@123.com
[student@harbor ~]$ cat .gitconfig
[user]email = student@123.com
[student@harbor ~]$ git config --global core.editor vim
[student@harbor ~]$ git config --global user.name student
[student@harbor ~]$ git config --list
user.email=admin@123.com
user.email=student@123.com
user.name=student
core.editor=vim
[student@harbor ~]$ git config user.name
student
[student@harbor ~]$ git config user.email
student@123.com
[student@harbor ~]$ git config help
error: key does not contain a section: help
[student@harbor ~]$ git help config
[student@harbor ~]$
[student@harbor ~]$ cd practice/demo/
[student@harbor demo]$
[student@harbor demo]$ ls
Dockerfile HELP.md mvnw mvnw.cmd pom.xml src target
[student@harbor demo]$ cd ..
[student@harbor practice]$ cp -r demo demo_1
[student@harbor practice]$ cd demo
[student@harbor demo]$ ls
Dockerfile HELP.md mvnw mvnw.cmd pom.xml src target
[student@harbor demo]$ ls -a
. .. Dockerfile .gitignore HELP.md .mvn mvnw mvnw.cmd pom.xml src target
[student@harbor demo]$ rm -rf .gitignore
[student@harbor demo]$
[student@harbor demo]$ git init
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: git branch -m <name>
Initialized empty Git repository in /home/student/practice/demo/.git/
[student@harbor demo]$ ls
Dockerfile HELP.md mvnw mvnw.cmd pom.xml src target
[student@harbor demo]$ ls .git/
branches config description HEAD hooks info objects refs
[student@harbor demo]$
[student@harbor demo]$ git status
On branch masterNo commits yetUntracked files:(use "git add <file>..." to include in what will be committed).mvn/DockerfileHELP.mdmvnwmvnw.cmdpom.xmlsrc/target/nothing added to commit but untracked files present (use "git add" to track)
[student@harbor demo]$ git add Dockerfile
[student@harbor demo]$ git status
On branch masterNo commits yetChanges to be committed:(use "git rm --cached <file>..." to unstage)new file: DockerfileUntracked files:(use "git add <file>..." to include in what will be committed).mvn/HELP.mdmvnwmvnw.cmdpom.xmlsrc/target/[student@harbor demo]$ git rm --cached Dockerfile
rm 'Dockerfile'
[student@harbor demo]$ ls
Dockerfile HELP.md mvnw mvnw.cmd pom.xml src target
[student@harbor demo]$ git status
On branch masterNo commits yetUntracked files:(use "git add <file>..." to include in what will be committed).mvn/DockerfileHELP.mdmvnwmvnw.cmdpom.xmlsrc/target/nothing added to commit but untracked files present (use "git add" to track)
[student@harbor demo]$ vim Dockerfile
[student@harbor demo]$ git status
On branch masterNo commits yetUntracked files:(use "git add <file>..." to include in what will be committed).mvn/DockerfileHELP.mdmvnwmvnw.cmdpom.xmlsrc/target/nothing added to commit but untracked files present (use "git add" to track)
[student@harbor demo]$ git add Dockerfile
[student@harbor demo]$
[student@harbor demo]$ git status
On branch masterNo commits yetChanges to be committed:(use "git rm --cached <file>..." to unstage)new file: DockerfileUntracked files:(use "git add <file>..." to include in what will be committed).mvn/HELP.mdmvnwmvnw.cmdpom.xmlsrc/target/[student@harbor demo]$ vim Dockerfile
[student@harbor demo]$ git status
On branch masterNo commits yetChanges to be committed:(use "git rm --cached <file>..." to unstage)new file: DockerfileChanges not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified: DockerfileUntracked files:(use "git add <file>..." to include in what will be committed).mvn/HELP.mdmvnwmvnw.cmdpom.xmlsrc/target/[student@harbor demo]$ git add Dockerfile
[student@harbor demo]$ git commit
[master (root-commit) 6072b75] Add container image build file1 file changed, 6 insertions(+)create mode 100644 Dockerfile
[student@harbor demo]$ git status
On branch master
Untracked files:(use "git add <file>..." to include in what will be committed).mvn/HELP.mdmvnwmvnw.cmdpom.xmlsrc/target/nothing added to commit but untracked files present (use "git add" to track)
[student@harbor demo]$ tree src
src
├── main
│ ├── java
│ │ └── com
│ │ └── example
│ │ └── demo
│ │ ├── Application.java
│ │ └── HelloController.java
│ └── resources
│ └── application.properties
└── test└── java└── com└── example└── demo├── HelloControllerITest.java└── HelloControllerTest.java11 directories, 5 files
[student@harbor demo]$ ls
Dockerfile HELP.md mvnw mvnw.cmd pom.xml src target
[student@harbor demo]$ vim .gitignore
# maven's working directory
target/
#project default mvn program
mvnw*
#project help file
HELP.md
#but track all readme file
!readme.txt
!README.txt
!README.md
!readme.md[student@harbor demo]$ git status
On branch master
Untracked files:(use "git add <file>..." to include in what will be committed).gitignore.mvn/pom.xmlsrc/nothing added to commit but untracked files present (use "git add" to track)
[student@harbor demo]$ ls .mvn/
wrapper
[student@harbor demo]$ ls .mvn/wrapper/
maven-wrapper.properties
[student@harbor demo]$ vim .gitignore
# ignore git-ignore file
.gitignore
# maven's working directory
target/
#project default mvn program
mvnw*
.mvn/
#project help file
HELP.md
#but track all readme file
!readme.txt
!README.txt
!README.md
!readme.md[student@harbor demo]$ git status
On branch master
Untracked files:(use "git add <file>..." to include in what will be committed)pom.xmlsrc/nothing added to commit but untracked files present (use "git add" to track)
[student@harbor demo]$ ls
Dockerfile HELP.md mvnw mvnw.cmd pom.xml src target
[student@harbor demo]$ git add .
[student@harbor demo]$ git commit
[master 78aa0f9] source code and project maven configuration6 files changed, 170 insertions(+)create mode 100644 pom.xmlcreate mode 100644 src/main/java/com/example/demo/Application.javacreate mode 100644 src/main/java/com/example/demo/HelloController.javacreate mode 100644 src/main/resources/application.propertiescreate mode 100644 src/test/java/com/example/demo/HelloControllerITest.javacreate mode 100644 src/test/java/com/example/demo/HelloControllerTest.java
[student@harbor demo]$ git status
On branch master
nothing to commit, working tree clean
[student@harbor demo]$ vim readme.txt
[student@harbor demo]$ git status -s
?? readme.txt
[student@harbor demo]$ git add readme.txt
[student@harbor demo]$ git commit "add readme file"
error: pathspec 'add readme file' did not match any file(s) known to git
[student@harbor demo]$ git commit -m "add readme file"
[master 6acb2a6] add readme file1 file changed, 2 insertions(+)create mode 100644 readme.txt
[student@harbor demo]$ vim readme.txt
[student@harbor demo]$ git status -sM readme.txt
[student@harbor demo]$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index a3365b1..2bf0964 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,4 @@project purpose:practice how to deploy an app base on springboot development infrustracture
+
+this project run on port 8080
[student@harbor demo]$ git add readme.txt
[student@harbor demo]$ git diff readme.txt
[student@harbor demo]$ git diff readme.txt
[student@harbor demo]$ git diff readme.txt --staged
fatal: option '--staged' must come before non-option arguments
[student@harbor demo]$ git diff --staged readme.txt
diff --git a/readme.txt b/readme.txt
index a3365b1..2bf0964 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,4 @@project purpose:practice how to deploy an app base on springboot development infrustracture
+
+this project run on port 8080
[student@harbor demo]$ vim Dockerfile
[student@harbor demo]$ vim readme.txt
[student@harbor demo]$ git status
On branch master
Changes to be committed:(use "git restore --staged <file>..." to unstage)modified: readme.txtChanges not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified: Dockerfilemodified: readme.txt[student@harbor demo]$ git commit -am "add all changes to repository"
[master b7abcf7] add all changes to repository2 files changed, 7 insertions(+), 1 deletion(-)
[student@harbor demo]$ git status
On branch master
nothing to commit, working tree clean
[student@harbor demo]$ echo "test " >> test.txt
[student@harbor demo]$ git add test.txt
[student@harbor demo]$ git commit -m 'test'
[master 1b64891] test1 file changed, 1 insertion(+)create mode 100644 test.txt
[student@harbor demo]$ git status
On branch master
nothing to commit, working tree clean
[student@harbor demo]$ ls
Dockerfile HELP.md mvnw mvnw.cmd pom.xml readme.txt src target test.txt
[student@harbor demo]$ rm -f test.txt
[student@harbor demo]$ git status
On branch master
Changes not staged for commit:(use "git add/rm <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)deleted: test.txtno changes added to commit (use "git add" and/or "git commit -a")
[student@harbor demo]$ ls
Dockerfile HELP.md mvnw mvnw.cmd pom.xml readme.txt src target
[student@harbor demo]$ git restore test.txt
[student@harbor demo]$ ls
Dockerfile HELP.md mvnw mvnw.cmd pom.xml readme.txt src target test.txt
[student@harbor demo]$ git rm test.txt
rm 'test.txt'
[student@harbor demo]$ ls
Dockerfile HELP.md mvnw mvnw.cmd pom.xml readme.txt src target
[student@harbor demo]$ git status
On branch master
Changes to be committed:(use "git restore --staged <file>..." to unstage)deleted: test.txt[student@harbor demo]$ git commit
[master 5066a6f] delete unraleted files1 file changed, 1 deletion(-)delete mode 100644 test.txt
[student@harbor demo]$ mv readme.txt README.txt
[student@harbor demo]$ git status
On branch master
Changes not staged for commit:(use "git add/rm <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)deleted: readme.txtUntracked files:(use "git add <file>..." to include in what will be committed)README.txtno changes added to commit (use "git add" and/or "git commit -a")
[student@harbor demo]$ git mv readme.txt README.txt
fatal: bad source, source=readme.txt, destination=README.txt
[student@harbor demo]$ git mv readme.txt README.txt
Dockerfile pom.xml readme.txt README.txt src/
[student@harbor demo]$ ls
Dockerfile HELP.md mvnw mvnw.cmd pom.xml README.txt src target
[student@harbor demo]$
[student@harbor demo]$ mv README.txt readme.txt
[student@harbor demo]$ git status
On branch master
nothing to commit, working tree clean
[student@harbor demo]$ git mv readme.txt README.txt
[student@harbor demo]$ git status
On branch master
Changes to be committed:(use "git restore --staged <file>..." to unstage)renamed: readme.txt -> README.txt[student@harbor demo]$ ls
Dockerfile HELP.md mvnw mvnw.cmd pom.xml README.txt src target
[student@harbor demo]$ git commit
[master 8150f9a] rename readme to README1 file changed, 0 insertions(+), 0 deletions(-)rename readme.txt => README.txt (100%)
[student@harbor demo]$ git log
commit 8150f9ac7721a074a7bea55f1fa9a321482cfee1 (HEAD -> master)
Author: student <student@123.com>
Date: Fri Oct 18 15:03:04 2024 +0800rename readme to READMEcommit 5066a6f4e44521ca7ae92f48a482e90d644b8c85
Author: student <student@123.com>
Date: Fri Oct 18 14:58:28 2024 +0800delete unraleted filescommit 1b648917cc774f1239a6be2b8ccae2b6a7ca1ac6
Author: student <student@123.com>
Date: Fri Oct 18 14:55:54 2024 +0800testcommit b7abcf70832a81e796e1a16a3548038d1d169577
Author: student <student@123.com>
Date: Fri Oct 18 14:54:14 2024 +0800add all changes to repositorycommit 6acb2a653db83193e4b7b51ecff39d6d252af457
Author: student <student@123.com>
Date: Fri Oct 18 14:45:55 2024 +0800add readme filecommit 78aa0f986c5e4084969b674bea50b20949966250
Author: student <student@123.com>
Date: Fri Oct 18 14:39:25 2024 +0800source code and project maven configurationcommit 6072b75fed80c8ab6777dd52c7955ead217e5f8e
Author: student <student@123.com>
Date: Fri Oct 18 14:20:53 2024 +0800Add container image build file
[student@harbor demo]$ git log -2
commit 8150f9ac7721a074a7bea55f1fa9a321482cfee1 (HEAD -> master)
Author: student <student@123.com>
Date: Fri Oct 18 15:03:04 2024 +0800rename readme to READMEcommit 5066a6f4e44521ca7ae92f48a482e90d644b8c85
Author: student <student@123.com>
Date: Fri Oct 18 14:58:28 2024 +0800delete unraleted files
[student@harbor demo]$ vim README.txt
[student@harbor demo]$ git status -sM README.txt
[student@harbor demo]$ git add README.txt
[student@harbor demo]$ vim pom.xml
[student@harbor demo]$ git status -s
M README.txtM pom.xml
[student@harbor demo]$ git commit -m 'modify readme'
[master bde40f3] modify readme1 file changed, 2 insertions(+)
[student@harbor demo]$ git commit --amend
[master 0ae7c5d] modify readmeDate: Fri Oct 18 15:13:04 2024 +08001 file changed, 2 insertions(+)
[student@harbor demo]$ git add pom.xml
[student@harbor demo]$ git commit --amend
[master 4516228] modify readme and pom.xmlDate: Fri Oct 18 15:13:04 2024 +08002 files changed, 3 insertions(+), 1 deletion(-)
[student@harbor demo]$ git log -3
commit 451622813a89a19b12be78dd6aa9e364bb891164 (HEAD -> master)
Author: student <student@123.com>
Date: Fri Oct 18 15:13:04 2024 +0800modify readme and pom.xmlcommit 8150f9ac7721a074a7bea55f1fa9a321482cfee1
Author: student <student@123.com>
Date: Fri Oct 18 15:03:04 2024 +0800rename readme to READMEcommit 5066a6f4e44521ca7ae92f48a482e90d644b8c85
Author: student <student@123.com>
Date: Fri Oct 18 14:58:28 2024 +0800delete unraleted files
相关文章:
Linux——应用软件的生命周期
功能开发测试: 功能性测试 对应开发框架的测试用例代码的漏洞扫描 Web服务器版本应用开发语言的依赖关系和版本信息是否会造成类似内存泄露等影响系统性能的问题压力测试应用的部署 获取应用代码以及应用静态文件的代码包将安装包中的文件按照服务器配置的架构&…...

【Linux】exec系列函数详细介绍
首先,exec 是 execute (意为:执行) 的缩写。 exec系列函数 各个“后缀”的意思: l 为 list 可变参数列表、v 为 vector、p 为 PATH、e 为环境变量数组 envp execl:l 为 list 可变参数列表 原型:int execl(const char *path, cons…...

ARINC 429总线协议
一、概述 ARINC 是美国航空无线电公司英文字头的缩写, 该公司1977年7月21日出版了“ARINC 429规范”一书,429规范就是飞机电子系统之间数字式数据传输的标准格式,在飞机上使用429总线的电子设备均应遵守这个规范,这样才能保证电子…...
Qt解决槽函数中发送的信号的参数会变化带来的错误
connect(item, &MusicItemWidget::playRequest, this, [this] { emit playMusic(QUrl(this->m_mediaPath); ); 如上图,this->m_mediaPath是个成员变量,但自己的初衷是发送一个最开始捕获的值,那么可以使用下面的方法…...
C C++ 如何编写库级接口
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...

安装TDengine数据库3.3版本和TDengine数据库可视化管理工具
安装TDengine数据库3.3版本和TDengine数据库可视化管理工具 一、下载安装包二、解压安装包三、部署四、启动服务五、进入数据库六、创建数据库、表和往表中插入数据七、测试 TDengine 性能八、使用数据库九、查询数据十、TDengine数据库可视化界面 一、下载安装包 TDengine-cl…...

详解CAS
一、CAS是什么? CAS是Java中Unsafe类里面的一个方法,是Compare and Swap的缩写,中文翻译成比较并交换,主要功能是能够去保证在多线程的环境下对于共享变量修改的一个原子性,实现并发算法时常用到的一种技术。它包含三…...

《环境感知方案:探索未来智能世界的关键技术》
《环境感知方案:探索未来智能世界的关键技术》 一、环境感知方案的研究现状(一)机器人领域的环境感知(二)农业领域的环境感知(三)智能网联汽车领域的环境感知 二、先进的环境感知技术࿰…...

Android 编译时出现Android resource linking failed.without required default value.
错误信息如下: Execution failed for task :app:processDebugResources. > A failure occurred while executing com.android.build.gradle.internal.res.LinkApplicationAndroidResourcesTask$TaskAction> Android resource linking failedwarn: removing r…...
golang ws升级为wss
首先需要一份openssl证书 1.安装openssl windows安装openssl 的下载地址在 https://slproweb.com/products/Win32OpenSSL.html 无脑点安装就行,记得最后安装完成的页面取消勾选 安装完成后记得配置环境变量 2.生成证书 openssl req -x509 -days 36500 -nodes …...
FFMPEG录屏(17)--- 使用 DwmRegisterThumbnail 捕获指定窗口图像数据
使用 DwmRegisterThumbnail 捕获指定窗口图像数据 在 Windows 平台上,捕获指定窗口的图像数据可以通过多种方法实现,其中一种高效的方法是使用 [DwmRegisterThumbnail] 本文将介绍如何使用 [DwmRegisterThumbnail] 捕获窗口图像数据,并提供一…...

点亮一个LED(51)
目录 1.LED介绍 2.硬件电路 3.程序设计 3.1.点亮一颗LED 3.2.LED闪烁 3.3.LED流水灯实现 1.LED介绍 发光二极管也具有二极管普遍的特性单向导电性,有阳极和阴极之分 ,上图左侧式插件式LED ,长的引脚是阳极;左侧是贴片式的带…...

Flink窗口分配器WindowAssigner
前言 Flink 数据流经过 keyBy 分组后,下一步就是 WindowAssigner。 WindowAssigner 定义了 stream 中的元素如何被分发到各个窗口,元素可以被分发到一个或多个窗口中,Flink 内置了常用的窗口分配器,包括:tumbling wi…...

【Tinymce】富文本编辑器在vue项目中的使用;引入付费格式刷,上传视频、图片
引言 富文本编辑器有很多,对比了一下,还是决定用tinymce(号称宇宙最强),基础的插件确实好用,但是一些更好用的插件,比如格式刷等都是高级版(付费),当然也有人…...

Java实现简单的5阶m序列密钥生成
选择5阶本原多项式:x^5 x^2 1,初始值为{1,0,0,1,1},易得,递推公式为:ak ak-5 ⊕ ak-2 ,其中k≥5。于是可以写出下面这段代码: class BitsEncode {public static void main(String[] args) {//初始化数组…...

013_django基于大数据的高血压人群分析系统2024_dcb7986h_055
目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍:CodeMentor毕业设计领航者、全网关注者30W群落,InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者,博客领航之星、开发者头条/腾讯云/AW…...
OpenCV高级图形用户界面(21)暂停程序执行并等待用户按键输入函数waitKey()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 等待按键 该函数 waitKey 在 delay≤0 时无限等待按键事件,或者在 delay 为正数时等待 delay 毫秒。由于操作系统在切换线程时有最小…...

其他css的用途
1.animation-fill-mode: backwards; //避免了在动画开始前元素的突然显现,动画必要。 2.用rem响应式字体大小,可以在html样式定义font-size?(例10px,62.5%(100%是16px))。然后样式就可以用rem代替px。 3.color: transparent;: 这行代码将文…...
json路径 [‘a‘].b.c[0].d[‘1‘].f,具体代表什么意思
JSON路径是一种用于从JSON对象中提取数据的表达方式。你给出的路径 [a].b.c.d[1].f 代表了如何逐层访问JSON对象中的数据。让我们逐步解析这个路径: [a]: 表示访问JSON对象的根元素中键为 a 的值。使用方括号 [] 通常意味着这个键是一个字符串&#…...
等保测评:如何进行有效的安全合规性审查
等保测评(信息安全等级保护测评)是一项至关重要的安全合规性审查工作,旨在帮助组织保障信息系统的安全性、合规性,有效应对安全风险,提升整体安全防护水平。下面将从等保测评的流程、意义、应用场景,以及实…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...

ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...

R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...

Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...