Android studio编译JNI遇到的坑

1.加载build.gradle文件里面通过 externalNativeBuild { cmake { path file('src/main/cpp/CMakeLists.txt') version '3.18.1' } } 加载CMakeList.txt文件 报错 1.加载demo项目,grader编译使用的SDK不是合适当前APP版本,需要修改成29的版本,或者本地as下载对应的31的sdk,minSDK版本最小适应26 2.移植过来的demo,JNI无法加载,显示搜不到对应的JNI方法,SDK插件版本与NDK版本不一致,导致搜索不到对应的JNI方法 3.打开Project Structure 默认是没有NDK的,手动安装NDK确保编译正常 4.报错 [CXX1405] error when building with cmake using D:\gongzuo\demo\FASTDDSServer-master\app\src\main\cpp\CMakeLists.txt: Build command failed. Error while executing process C:\Users\user\AppData\Local\Android\Sdk\cmake\3.18.1\bin\cmake.exe with arguments {-HD:\gongzuo\demo\FASTDDSServer-master\app\src\main\cpp -DCMAKE_SYSTEM_NAME=Android -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_SYSTEM_VERSION=26 -DANDROID_PLATFORM=android-26 -DANDROID_ABI=arm64-v8a -DCMAKE_ANDROID_ARCH_ABI=arm64-v8a -DANDROID_NDK=C:\Users\user\AppData\Local\Android\Sdk\ndk\21.4.7075529 -DCMAKE_ANDROID_NDK=C:\Users\user\AppData\Local\Android\Sdk\ndk\21.4.7075529 -DCMAKE_TOOLCHAIN_FILE=C:\Users\user\AppData\Local\Android\Sdk\ndk\21.4.7075529\build\cmake\android.toolchain.cmake -DCMAKE_MAKE_PROGRAM=C:\Users\user\AppData\Local\Android\Sdk\cmake\3.18.1\bin\ninja.exe -DCMAKE_CXX_FLAGS=-std=c++11 -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=D:\gongzuo\demo\FASTDDSServer-master\app\build\intermediates\cxx\Debug\4t4fd482\obj\arm64-v8a -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=D:\gongzuo\demo\FASTDDSServer-master\app\build\intermediates\cxx\Debug\4t4fd482\obj\arm64-v8a -DCMAKE_BUILD_TYPE=Debug -BD:\gongzuo\demo\FASTDDSServer-master\app.cxx\Debug\4t4fd482\arm64-v8a -GNinja} 存在CXX1405 这样的保存,且NDK可以使用但是无法生成os库,原因是因为DLL文件损坏导致,需要到网上去下载DLL库放置到C:\Windows\System32目录下,再执行 cmake成功 C:\Users\user\AppData\Local\Android\Sdk\cmake\3.18.1\bin>cmake.exe Usage cmake [options] cmake [options] cmake [options] -S -B Specify a source directory to (re-)generate a build system for it in the

Cisco Firepower FMCv修改管理Ip方法

FMCv 是部署在VMWARE虚拟平台上的FMC 部署完成后,如何修改管理IP 1 查看当前版本 show version 可以看到是for VMware 2 修改管理IP步骤 2.1 进入expert模式 expert 2.2 进入超级用户 sudo su 并输入密码 2.3 查看当前网卡Ip 2.4 修改Ip 命令: /usr/local/sf/bin/configure-network 配置示例: root@firepower:/Volume/home/admin# /usr/local/sf/bin/configure-network Do you wish to configure IPv4 ? (y or n) y Management IP address? [192.168.45.45] 10.248.1.111 !! ip Management netmask? [255.255.255.0] 255.255.255.0 !!netmask Management default gateway? 10.248.1.254 Management IP address? 10.248.1.111 Management netmask? 255.255.255.0 Management default gateway? 10.248.1.254 Are these settigns correct?

都2024年了,还不知道怎么学习网络安全?来看看吧,很难找全的

前言 最近收到不少关注朋友的私信和留言,大多数都是零基础小友入门网络安全,·需要相关资源学习。其实看过的铁粉都知道,之前的文里是有过推荐过的。新来的小友可能不太清楚,这里就系统地叙述一遍。 01.简单了解一下网络安全 说白了,网络安全就是指网络系统中的数据受到保护不被破坏。而我们从事网络信息安全工作的安全工程师,主要工作当然是设计程序来维护网络安全了。 网络安全工程师是一个统称,还包含很多职位,像安全产品工程师、安全分析师、数据恢复工程师、网络构架工程师、网络集成工程师、安全编程工程师等等。 所有工作内容包括漏洞挖掘、代码编程、安全服务、流量分析、入侵检测、云防护、系统攻防、代码审计等等。 当然了,这些职位跟你现阶段并没有什么关系,我只是想让你知道网络安全这个行业也是大有天地的。而你现在要做的是学好入门知识,等将来某一天,或许你就能接触到了。 网络渗透想要成为高手,需要掌握计算机、网络、编程的全栈能力,操作系统、日志分析、流量分析、漏洞攻击、安全审计、Web 安全、网络协议、编程语言等等这些东西都是需要学习的。 **如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!** 所以可以从这方面入手,可以看一些教程 刚接触网络安全,无论是自学还是上课都有一个大前提,就是掌握安全基本知识。 因为网络安全涉及的知识面广、术语多、理论知识多,需要我们投入很多时间和精力来学习,掌握网络安全基本知识,安全的概念和定义、常见的安全标准等。 以下几本书(搭配视频阅读效果最佳)至少应该读一遍,一开始你可能会感觉理论部分看得云里雾里的,但是坚持啃下来,在今后的学习中你会发现,这部分的积累非常重要。 这里我推荐:《计算机系统安全》、《计算机网络安全导论》、《Web 安全深度剖析》、《网络安全 Linux 系统 150 条命令》 掌握了必要的理论,就要开始展开技能方面的学习了。具体的技能与之前的理论结合起来,你会有茅塞顿开的感觉。 当然了,如果你是一个完全小白,也可以先看看这本 WEB 安全笔记,内容涵盖了整个 web 安全阶段,从计算机的发源史都有详细地叙述 了解了基础阶段打牢基础之后,就开始学习常见黑客和渗透工具的使用 注意:这里绝对不是说的那些什么抓鸡啊、远控啊一些软件,你需要系统的学习,就算你说你时间不够,但是常见的工具还是要知道的,比如:Hydra、medusa、sqlmap、AWVS、Burpsuite、Beef-XSS、Metasploit、Nessus、wireshark 等安全工具,这些是在安全圈和渗透圈比较知名的渗透工具与平台。 熟悉完 linux 后,你现在可以开始学习一些编程相关的知识,因为一个黑客至少都是掌握 2 种或多种编程语言,你如果没有编程基础的话,我这里推荐 Python 这个语言。 因为 Python 这个语言代码简短,小白是很容易理解的,比如 C 语言的代码写一个 helloworld 需要 5-6 行,而 Python 只需要 1 行,学完了 Python 后可以再去学习一下 C 语言或者 Java,你学会了一门语言后是会有基础的,而且语言都是一通互通,所以你学完 Python 之后再去学 C 应该不会有多难了,有必要的时候你也可以编写一款自己的黑客或渗透工具。 这个时候理论知识基本上已经学完了,重要阶段在:实战 实战可以到一些靶场练习,也可以到漏洞平台挖漏洞提交(注意:任何未经授权渗透挖洞都是违法)这个是近 100 份 src 技术文档,仅提供一些漏洞思路 每年地护网也可以去参加,红蓝对抗也是可以锻炼到实战能力。 如果你也想学习:黑客&网络安全的渗透攻防 今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。 在这里领取: 这个是我花了几天几夜自整理的最新最全网安学习资料包免费共享给你们,其中包含以下东西: 1.

java springboot软件工程毕业设计项目选题分享

文章目录 前言 题目1 : 基于SSM的旅游资源网站 <br /> 题目2 : 基于SSM的中药店商城网站 <br /> 题目3 : 基于SSM的汽车租赁网站<br /> 题目4 : 基于SSM的汉服文化平台网站 <br /> 题目5 : 基于SSM的校园疫情师生防疫登记备案系统 <br /> 题目6 : 基于SSM的农业商品信息管理权限后台子网站 <br /> 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的java web缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的java web管理系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享5个优质java web毕业设计项目,需要的自取。 题目1 : 基于SSM的旅游资源网站 🥇 题目综合评分(每项满分5分) 难度系数:3分工作量:5分创新点:3分界面美化:5分 🥇 相关技术和工具 : 开发语言:Java框架:ssmJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9 🥇 功能模块 管理员:首页、个人中心、用户管理、景点信息管理、购票信息管理、酒店信息管理、客房类型管理、客房信息管理、客房预订管理、交流论坛、系统管理用户:首页、个人中心、购票信息管理、客房预订管理、我的收藏管理前台首页:首页、景点信息、酒店信息、客房信息、交流论坛、红色文化、个人中心、后台管理、客服 题目2 : 基于SSM的中药店商城网站 🥇 题目综合评分(每项满分5分) 难度系数:3分工作量:5分创新点:3分界面美化:5分 🥇 相关技术和工具 : 开发语言:Java框架:ssmJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9 🥇 功能模块 管理员:会员管理、药材分类管理、药材信息管理、保健药方管理、送礼套餐管理、入库记录管理、出库记录管理、管理员管理、系统管理、订单管理会员前台:首页、药材信息、保健药方、送礼套餐、新闻资讯、我的、跳转到后台、购买车、客服会员后台:我的收藏管理、订单管理 题目3 : 基于SSM的汽车租赁网站

写读后感的时候,可以适当地引用书中的内容吗?

写读后感时,适当地引用书中的内容是可以的,这样可以更好地支持你的观点和感受,增强文章的可信度和说服力。 引用书中的内容可以帮助读者更好地理解你所讨论的主题和人物,同时也可以展示你对原著的深入理解和阅读能力。但是,在引用书中的内容时,需要注意以下几点: 1.引用要准确:引用的内容应该与原文一致,不要出现错误或歪曲原意的情况。 2.引用要适度:引用的内容应该与你的观点和感受密切相关,不要过多地引用无关的内容。 3.引用要注明出处:引用的内容应该注明出处,包括书名、作者、出版社、页码等信息,以方便读者查阅。 4.引用要合理:引用的内容应该符合文章的逻辑和结构,不要出现突兀或不协调的情况。 总之,适当地引用书中的内容可以增强读后感的可信度和说服力,但需要注意引用的准确性、适度性、注明出处和合理性。

快速上手Spring Cloud三:API网关深入探索与实战应用

快速上手Spring Cloud 一:Spring Cloud 简介 快速上手Spring Cloud 二:核心组件解析 快速上手Spring Cloud 三:API网关深入探索与实战应用 快速上手Spring Cloud 四:微服务治理与安全 快速上手Spring Cloud 五:Spring Cloud与持续集成/持续部署(CI/CD) 快速上手Spring Cloud 六:容器化与微服务化 快速上手Spring Cloud 七:事件驱动架构与Spring Cloud 快速上手Spring Cloud 八:微服务架构中的数据管理 快速上手Spring Cloud 九:服务间通信与消息队列 快速上手Spring Cloud 十:Spring Cloud与微前端 快速上手Spring Cloud 十一:微服务架构下的安全与权限管理 快速上手Spring Cloud 十二:与云原生不得不说的故事 一、服务发现与动态路由 在微服务架构中,服务的动态注册与发现是一个核心功能。API网关可以与服务注册中心(如Eureka、Consul等)集成,动态获取服务实例的信息,并根据这些信息构建路由规则。这样,即使服务实例的地址发生变化,API网关也能自动更新路由规则,确保请求的正确转发。 示例代码:使用Eureka与Spring Cloud Gateway实现服务发现与动态路由 首先,确保Eureka服务注册中心已经搭建并运行。然后,在Spring Cloud Gateway的配置中启用服务发现功能: spring: cloud: gateway: discovery: locator: enabled: true # 启用服务发现功能 接下来,你可以通过服务名称来定义路由规则,而无需指定具体的IP地址和端口: spring: cloud: gateway: routes: - id: myservice_route uri: lb://MYSERVICE # 使用服务名称替代具体的URI predicates: - Path=/myservice/** 在上述配置中,lb://MYSERVICE表示将请求负载均衡到名为MYSERVICE的服务实例上。Spring Cloud Gateway会自动从Eureka中获取MYSERVICE的服务实例列表,并根据负载均衡算法选择一个实例进行请求转发。

【FFmpeg】ffmpeg 命令行参数 ⑥ ( 使用 FFmpeg 提取 YUV 像素格式数据 | 使用 FFmpeg 提取 RGB 像素格式数据 | RGB 与 YUV 之间的格式转换 )

文章目录 一、使用 FFmpeg 提取 YUV 像素格式数据1、YUV 像素格式2、提取 YUV 数据3、提取 YUV 数据 - 设定提取长度和画面大小4、使用 ffplay 播放 YUV 视频 二、使用 FFmpeg 提取 RGB 像素格式数据1、提取 RGB 像素格式2、提取 RGB 像素格式 - 设定提取长度和画面大小3、使用 ffplay 播放 RGB 视频 三、RGB 与 YUV 之间的格式转换1、设置分辨率与像素格式2、设置分辨率与像素格式 - 同时设置输入 / 输出文件的参数3、设置分辨率与像素格式 - 只设置输入文件的参数 一、使用 FFmpeg 提取 YUV 像素格式数据 1、YUV 像素格式 FFmpeg 是一个非常强大的多媒体处理工具 , 可以用来 处理 / 转换 / 播放 各种音视频格式的数据 , 因此 使用 FFmpeg 自然也可以提取 YUV 像素格式的数据 ; 在学习 FFmpeg 时 , 经常需要使用 YUV 像素格式 的 视频数据 来测试 编解码器 , 网上一般很少有 像素格式 的视频 , 因为占据的空间巨大 , 此时就需要 使用 FFmpeg 工具自己提取像素格式的视频数据 ;

Vue时间组件:Dayjs与Moment对比

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》 文章目录 摘要:引言:正文:1️⃣ Dayjs2️⃣ Moment3️⃣ Dayjs与Moment对比 总结:参考资料: 摘要: 本文将详细介绍Vue中常用的两个时间组件库:Dayjs和Moment,探讨它们的特点、使用场景和性能对比。 引言: 在Vue.js开发中,处理时间和日期是常见的需求。Dayjs和Moment是两个流行的时间组件库,它们提供了丰富的时间操作和格式化功能。本文将对比分析这两个库,帮助大家更好地理解它们的特点和适用场景。 正文: 1️⃣ Dayjs 定义:Dayjs是一个轻量级的时间日期处理库,与Moment.js的API设计相似,但具有更高的性能和更小的体积。特点: 轻量级:Dayjs的压缩后大小只有2KB左右,远小于Moment.js。可扩展:Dayjs支持通过插件扩展功能,如自定义解析和格式化等。兼容性:Dayjs兼容大多数浏览器,包括IE10+。 使用方法: 安装:通过npm或yarn安装dayjs库。引入:在Vue组件中引入dayjs,并使用其API进行时间日期的处理和格式化。 以下是如何安装 Day.js 的示例: 使用 npm 或 yarn 安装 Day.js: npm install dayjs 或者 yarn add dayjs 在你的 JavaScript 文件中导入 Day.js: import dayjs from 'dayjs'; 使用 Day.js 处理时间日期: // 当前时间 const now = dayjs(); // 解析日期字符串 const date = dayjs('2021-01-01'); // 添加时间 const dateTime = now.

探索BPMN:业务流程模型与表示法

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》 文章目录 摘要:引言:正文:1️⃣ BPMN的定义与作用2️⃣ BPMN的组成元素3️⃣ BPMN的应用场景 总结:实际案例分析 摘要: 本文将详细介绍BPMN(业务流程模型与表示法),探讨其在业务流程管理中的应用和重要性。 引言: 在当今的商业环境中,有效地管理和优化业务流程对于企业的成功至关重要。BPMN(业务流程模型与表示法)提供了一种统一的标准,用于图形化地表示和理解业务流程。本文将深入解析BPMN,帮助大家更好地理解其原理和应用。 正文: 1️⃣ BPMN的定义与作用 定义:BPMN(Business Process Model and Notation)是一种标准的图形化表示法,用于描述和建模业务流程。作用:BPMN提供了一种通用的语言和视觉表示,使不同利益相关者能够理解和交流业务流程。 2️⃣ BPMN的组成元素 流对象:包括事件(如开始事件、结束事件)、活动(如任务、子流程)和网关(如排他网关、并行网关)。连接线:用于表示流对象之间的顺序流和关系。数据:包括数据对象、数据输入和数据输出,用于描述活动所需和产生的信息。泳道:用于表示不同的组织或角色,如部门、系统或参与者。 3️⃣ BPMN的应用场景 流程分析:使用BPMN对现有业务流程进行分析和优化,提高效率和效果。流程设计:使用BPMN设计新的业务流程,确保流程的合理性和可行性。流程沟通:使用BPMN作为沟通工具,使不同利益相关者能够共同理解和讨论业务流程。 总结: BPMN是一种重要的业务流程模型与表示法,它提供了一种统一的标准,用于图形化地表示和理解业务流程。掌握BPMN,有助于我们更好地管理和优化业务流程,提高企业的运营效率和竞争力。 实际案例分析 案例一:某大型制造企业的生产流程优化 背景:该企业生产流程复杂,涉及多个部门和环节,导致生产效率低下。解决方案:使用BPMN对生产流程进行建模和分析,识别出瓶颈和冗余环节,然后进行优化。结果:通过优化,生产周期缩短了30%,生产成本降低了20%。 案例二:某银行的信贷审批流程改造 背景:该银行信贷审批流程繁琐,审批周期长,客户满意度低。解决方案:使用BPMN对信贷审批流程进行建模和分析,简化流程,实现自动化审批。结果:审批周期缩短了50%,客户满意度提升了30%。 案例三:某电商平台的订单处理流程优化 背景:该电商平台订单量大,订单处理流程复杂,容易出错。解决方案:使用BPMN对订单处理流程进行建模和分析,优化流程,实现自动化处理。结果:订单处理时间缩短了40%,订单错误率降低了50%。 通过以上案例分析,我们可以看出BPMN在实际业务场景中的重要性和价值。它可以帮助企业更好地理解和优化业务流程,提高运营效率和客户满意度。

六大原则与设计模式

1. 六大原则 1.1 单一原则(SRP) 应该有且仅有一个原因引起类的变更 1. 复杂性降低,可读性高,可维护性提高 2. 变更引起的风险降低,变更是必不可少的,如果接口的单一职责做得好,一个接口修改只对相应的实现类有影响,对其他的接口无影响,这对系统的扩展性、维护性都有非常大的帮助。 class a{ public function info(){ echo "第一条消息"; } } class b{ public function text(){ echo "第二条消息"; } } class c { public function run(){ $a = new a(); $a->info(); $b = new b(); $b->text(); } } $c = new c(); $c->run(); 1.2 开闭原则 类应该对扩展开放,对修改关闭 interface A{ public function boot(); } class B implements A{ public function boot(){ return rand(1,100); } } class cli{ public function run(){ $b= new B(); return $b->boot(); } } $cli = new cli(); echo $cli->run(); 1.

畅谈近年来网络安全发展趋势以及薪资情况

近年来,网络安全发展趋势持续加强,同时网络安全行业的薪资情况也呈现出稳步增长的态势。 在发展趋势方面,首先,全球网络安全问题日益凸显,包括网络安全鸿沟的扩大、地缘政治和技术转型带来的挑战,以及网络技术和人才短缺等问题。随着技术的快速发展,网络攻击手段也变得更加复杂和隐蔽,给企业和个人带来了更大的安全威胁。因此,构建网络弹性、提高网络安全防护能力成为重要的发展方向。 其次,随着数字化转型的加速推进,云计算、大数据、物联网等新技术广泛应用,网络安全的需求也呈现出爆炸式增长。同时,随着人工智能、区块链等新兴技术的应用,网络安全防御手段也在不断创新和演进。 在薪资情况方面,随着网络安全需求的不断增长,网络安全运维人员的薪资水平呈现稳步上升的趋势。根据行业调查数据,网络安全运维人员的薪资水平普遍高于IT行业平均水平。具备丰富经验和高级技能的网络安全运维专家年薪可高达数十万元。此外,随着企业对于网络安全重视程度的提升,网络安全运维人员的福利待遇也愈发优厚,如提供专业培训、晋升机会以及丰厚的奖金等。 总的来说,网络安全行业正在快速发展,网络安全人才需求旺盛,薪资水平也在稳步提升。未来,随着技术的不断进步和应用场景的不断拓展,网络安全行业将继续保持强劲的发展势头,同时也将吸引更多的人才加入。 极客安全(jikeanquan.com) 极客安全(jikeanquan.cn)

KubeSphere简单介绍及安装使用

KubeSphere 概述 官网地址:https://kubesphere.io/zh/ 什么是 kubesphere KubeSphere 是一个开源的多云容器管理平台,旨在简化企业级 k8s 集群的部署、管理和运维。它提供了一个可视化的管理界面,帮助用户更轻松地管理和监控 k8s 集群,同时集成了常用的 DevOps 工具和服务,如 CI/CD、日志管理、监控告警等,进一步提高了开发和运维效率。KubeSphere 还支持跨云、混合云和多集群的管理,帮助用户更好地应对复杂多样的场景需求。作为一个开源项目,KubeSphere 也积极参与社区,与 k8s 生态系统保持紧密的技术合作和交流。 KubeSphere 愿景是打造一个以 k8s 为内核的云原生分布式操作系统,它的架构可以非常方便地使第三方应用与云原生生态组件进行即插即用(plug-and-play)的集成,支持云原生应用在多云与多集群的统一分发和运维管理。提供简单易用的操作界面以及向导式操作方式,在降低用户使用容器调度平台学习成本的同时,极大减轻开发、测试、运维的日常工作的复杂度。 全栈的 k8s 容器云 PaaS 解决方案,KubeSphere 是在 k8s 之上构建的以应用为中心的多租户(NS、sa )容器平台,提供全栈的 IT 自动化运维的能力,简化企业的 DevOps 工作流。KubeSphere 提供了运维友好的向导式操作界面,帮助企业快速构建一个强大和功能丰富的容器云平台。 KubeSphere 作为企业级的全栈化容器平台,为用户提供了一个极致体验的 Web 控制台,让您能够像使用任何其他互联网产品一样,快速上手各项功能与服务。KubeSphere 目前提供了工作负载管理、微服务治理、DevOps 工程、Source to Image、多租户管理、多维度监控、日志查询与收集、告警通知、服务与网络、应用管理、基础设施管理、镜像管理、应用配置密钥管理等功能模块,并支持对接多种开源的存储与网络方案,支持高性能的商业存储与网络服务。 线上Demo体验:https://kubesphere.cloud/login/?redirect=%2Fconsole%2Fmanaged-cluster%2F 参考设置 pwd:Aa123456. kubesphere 优点 KubeSphere 具有以下优点: 简化部署和管理:KubeSphere 提供了一个直观的可视化管理界面,使得用户可以轻松地部署、管理和监控 k8s 集群,无需深入了解底层的技术细节。 多云支持:KubeSphere 可以集中管理不同云平台上的 k8s 集群,使得用户可以轻松地在多个云提供商之间进行迁移和管理,降低了云厂商锁定的风险。 集成 DevOps 工具:KubeSphere 集成了常用的 DevOps 工具和服务,如 CI/CD、日志管理、监控告警等,帮助用户构建端到端的开发流水线,提高开发效率和质量。 多集群管理:KubeSphere 支持跨多个 k8s 集群的管理,使得用户可以轻松地管理和监控多个集群,提供了更好的灵活性和扩展性。

k8s入门到实战(十四)—— Helm详细介绍及使用

Helm 使用 Helm 是一个 k8s 应用的包管理工具,类似于 Ubuntu 的 APT 和 CentOS 中的 YUM。 Helm 使用 chart 来封装 k8s 应用的 yaml 文件,我们只需要设置自己的参数,就可以实现自动化的快速部署应用。 Helm 通过打包的方式,支持发布的版本管理和控制,很大程度上简化了 k8s 应用的部署和管理。 Helm 有一个跟 docker Hub 类似的应用中心(https://artifacthub.io/),我们可以在里面找到我们需要部署的应用。 helm 概述 Helm 是一个流行的 k8s 包管理工具,它用于简化在 k8s 上部署、管理和扩展应用程序的过程。Helm 允许用户定义可重复使用的 k8s 部署模板,称为 “charts”,并使用这些 charts 来创建、配置和管理 k8s 中的应用程序。 Helm 由两个核心组件组成: Helm Client(helm):这是与用户交互的命令行工具。用户可以使用 Helm Client 来搜索、安装、升级和删除 charts,并管理 Helm Repositories(存储 charts 的位置)。 Tiller(已弃用):在 Helm 2.x 版本中,Tiller 是 Helm 的服务端组件,负责将 charts 渲染为 k8s 资源对象,并将它们部署到 k8s 集群中。然而,在 Helm 3.

k8s入门到实战(十一)—— DaemonSet详细介绍及使用

DaemonSet 说明 是个 Pod 控制器能够确保 k8s 的所有节点都运行一个相同的 pod 副本,假设这个 pod 名称为 pa 当增加 node 节点时,这个节点会自动创建一个 pa副本当删除 node 节点时,pa 副本会自动删除 删除 daemonset 会删除它们创建的 pod 使用场景 需要在每一个 node 节点运行一个存储服务,例如 gluster,ceph需要在每一个 node 节点运行一个日志收集服务,例如 fluentd,logstash需要在每一个 node 节点运行一个监控服务,例如 Prometheus Node Exporter,zabbix agent 等 DaemonSet 概述 在 k8s 中,DaemonSet 是一种用于在集群中的每个节点上运行一个副本的资源对象。它确保每个节点上都运行一个 Pod 的副本,以便在整个集群中提供特定的服务或功能。 DaemonSet 具有以下特点: 每个节点一个副本:每个节点上都会自动创建一个 Pod 的副本,并且不会自动在新节点上创建副本。节点自动感知:当节点加入或离开集群时,DaemonSet 会自动调整 Pod 的数量,以保证每个节点上都有运行的副本。节点亲和性:可以使用节点选择器或亲和性规则来选择在特定节点上运行 DaemonSet 的 Pod。基于 Pod 模板:DaemonSet 使用 Pod 模板来定义要创建的 Pod 的配置,包括容器镜像、命令、环境变量等。 DaemonSet 在很多场景中都非常有用,例如: 日志收集:在每个节点上运行日志收集代理,将节点日志发送到集中的存储或分析系统。监控和度量:在每个节点上运行监控代理,收集节点和容器的度量指标。网络代理:在每个节点上运行网络代理,实现网络隔离、负载均衡等功能。 通过使用 DaemonSet,您可以确保在整个集群中的每个节点上都运行指定的 Pod,以提供特定的服务或功能,并确保集群中的每个节点都具有相同的配置。

【零基础C语言】动态内存管理

目录 1.动态内存分配的意义 2. malloc 函数 3. free 函数 4.calloc 函数 5.realloc 函数 6.常见的动态内存错误 6.1 对NULL指针的解引⽤操作 6.2 对动态开辟空间的越界访问 6.3 对非动态开辟内存使⽤free释放 6.4 使⽤free释放⼀块动态开辟内存的⼀部分 6.5 对同⼀块动态内存多次释放 6.6 动态开辟内存忘记释放(内存泄漏) 7. 动态内存笔试题 8. 柔性数组 8.1 什么是柔性数组 8.2 柔性数组的特点 8.3 柔性数组的使用 1.动态内存分配的意义 在C语言中我们常常写到这样的代码 int arr[10] = { 0 }; int a = 10; 这样开辟空间的大小是固定的,并且数组一旦声明后,必须指定长度 这意味着数组的空间大小一旦确定就无法更改 为了解决这个问题,C语言中引入了动态内存管理,它可以让我们自由的分配和释放空间。 2. malloc 函数 头文件 - stdlib.h 作用:C语言中一个可以开辟动态内存的函数 函数原型: void* malloc(size_t size); size_t size - 需要开辟空间的大小 void* - 返回指向开辟空间的指针 开辟成功,返回指向开辟空间的指针 开辟失败,返回NULL指针

ES6-模块化介绍

文章目录 模块化定义模块的好处没有模块化系统带来的影响模块化的优点 模块化规范及对应的产品ES6模块化的语法ES6暴露模块export分别暴露统一暴露默认暴露 ES6暴露引入模块import通用导入方式解构赋值形式简便形式(只针对默认暴露) 模块化引入模块代码在项目中的使用Babel简介Babel使用 ES6模块化第三方模块ES6模块和CommonJS模块的区别模块的异步加载和同步加载 模块化定义 模块化是指将一个大的程序文件,拆分成许多小的文件,一个小文件就是一个模块。 然后各模块即可以相互引入, 模块的好处 没有模块化系统带来的影响 引入方式 没有模块化之前js代码的引入方式是通过<script src="">标签来引入到同一个html文件中。 <script src="lib.js"></script> <!-- 第三方库 --> <script src="utils.js"></script> <script src="app.js"></script> 并且两个js之前是不恒互相引入的 命名空间的问题: 当我们引入多个js文件,不同的js文件可能会有相同的变量名字,那么后引入的就会覆盖先引入的。即所有的js文件都是再全局空间进行定义的,每个js文件没有自己私有的命名空间。 依赖关系 如果按两个js文件之间有依赖关系,必须保证引入的顺序。如果文件A依赖于文件B,那么在引入时,就需要先引入文件B,再引入文件A。如果文件之间的依赖关系很复杂,这样的引入顺序就非常难以维护。 eg:没有模块化的文件引入 a.js: function a (){ console.log("我是a中的函数") } b.js: b = 100 a() text.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> </head> <body> <script type='text/javascript' src='./a.js'></script> <script type='text/javascript' src='b.js'></script> <script type='text/javascript'> </script> </body> </html> 浏览器输出: 我是a中的函数 如果先引入b.js再引入a.js,就会报错 a未定义 使用模块化之后,就可以在b.js文件中引入a.js文件,避免了依赖引入的问题,同时可以确保依赖加载的顺序是先加载a.js,再加载b.js 模块化的优点 防止命名冲突,每个模块都有自己的命名空间代码复用,每个模块可以被其他多个模块引用高维护性,修改一个模块其他引用该模块的地方都改变确保引入顺序的正确性,使用模块化之后一般都是在自己的中引入所依赖的模块,所以避免了依赖顺序的引入问题 模块化规范及对应的产品 模块化规范产品CommonJSNodeJS、Browserify(前端打包工具)AMDrequireJSCMDseaJS ES6模块化的语法 模块功能主要由两个命令构成:export和 import

每日一题——LeetCode1748.唯一元素的和

方法一 两次遍历 var sumOfUnique = function(nums) { let map = new Map() for(let num of nums){ map.set(num,map.has(num)?map.get(num)+1:1) } let res=0 for(let num of nums){ if(map.get(num)===1) res+=num } return res }; 消耗时间和内存情况: 方法二 一次遍历 var sumOfUnique = function(nums) { let ans = 0; const state = new Map(); for (const num of nums) { if (!state.has(num)) { ans += num; state.set(num, 1); } else if (state.get(num) === 1) { ans -= num; state.

春秋云境CVE-2022-23880

简介 taoCMS v3.0.2 文件管理处存在任意文件上传漏洞,攻击者可执行任意代码 正文 首先进入靶场,我们发现在首页底部有个管理界面,那么就直接点进去进入后台。 找到后台 找到后台,尝试弱口令,发现不成功,那么就尝试打开F12看看有没有遗留下什么信息,。 果然在前端代码界面找到默认账号密码admin/tao 上传失败 进入后台,首先就看到文件管理,点进去,发现上传,那就直接尝试上传.php文件,但是发现是白名单。上传不了.php,所以就需要换一种方式上传。 修改文件 这个时候我们发现这里有很多.php的文件,那么就直接在这些文件里面进行修改。 我随便选了给config.php文件,在最底下添加一个phpinfo()和一句话木马,添加phpinfo()的原因是方便我们能够看到我们这两行代码是否执行成功,成功了就会有phpinfo()返回。 蚁剑连接 上传成功,直接进行蚁剑连接。 找到flag 在根目录下找到flag结束靶场。

Windows系统部署Net2FTP网站结合内网穿透轻松打造可公网访问个人云盘

文章目录 1.前言2. Net2FTP网站搭建2.1. Net2FTP下载和安装2.2. Net2FTP网页测试 3. cpolar内网穿透3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 文件传输可以说是互联网最主要的应用之一,特别是智能设备的大面积使用,无论是个人存储文件资料,还是商业文件流转,都有数据存储和传输的需求。有需求就有市场,相应的传输软件层出不穷,而这些软件也各有各的特色,在这些软件的加持下,我们可以轻松的将不方便携带的电脑转变成为数据存储中心,再配合cpolar内网穿透创建的数据隧道,就可以轻松构建专属的私有云盘。今天,笔者就为大家介绍,如何使用Cpolar内网穿透+Net2FTP,打造私人专属的文件共享网站。 2. Net2FTP网站搭建 Net2FTP算是比较出名的web文件管理器,经常在将资料上传服务器时使用。Net2FTP基于Web技术,因此可以使用各种浏览器打开,并通过网页页面进行数据传输操作,因此使用范围很广,用来搭建自己的私有云盘正合适。 2.1. Net2FTP下载和安装 首先我们需要下载Net2FTP的安装文件,可以在其官网(net2ftp.com/)找到,这里笔者下载的是完整版。下载完成后,将下载好的压缩包解压,并粘贴到网页运行环境中。 笔者使用的是PHPstudy,因此将net2ftp_v1.3文件夹粘贴到www文件夹下。 接着打开phpstudy,点击左侧的网站按钮。在“网站”页面下,点击左上角的创建网站,对本地的net2ftp网站进行设置。 具体需要设置的内容很少也很简单,具体为: 域名:本地访问net2ftp网页所使用的域名端口:即网页输出端口根目录:即net2ftp网页文件存放的位置,也就是files_to_upload文件夹的位置,需要注意的是,下载的net2ftp_v1.3没法安装网站,安装文件在files_to_upload文件夹,根目录也必须定在这里勾选FTP和数据库 完成各项设置后点击下方的确认,就能完成net2ftp网站的搭建。 接着点击网站条目右侧的管理按钮,选择弹出菜单中的打开网站按钮,就能访问到本地net2ftp网站。此处要注意的是,必须将php扩展栏目中的ftp项目勾选,否则可能导致网页出错。 2.2. Net2FTP网页测试 只要phpstudy中对net2ftp网站的设置正确,就能打开net2ftp的本地网页。 由于net2ftp是FTP客户端的网页化界面,因此我们需要设置好本地电脑上的ftp服务。笔者使用的是filezilla作为ftp管理软件,因此打开filezilla界面,点击左上方“文件”菜单下的“站点管理器”。 在站点管理器中,新建一个站点: 主机栏位设置为12.0.0.1端口选择21号输入用户名和密码(此处的密码仅在ftp使用) 完成设置后,点击页面下方的确认创建该站点。 接着,我们将filezilla创建的ftp主机信息(包括地址和端口),填入net2ftp页面中,再填入用户名、密码、邮箱等信息,就能登录net2ftp网页,进行文件的上传下载。 3. cpolar内网穿透 在本地电脑上安装net2ftp网页并成功进行访问测试后,就可以进行Cpolar内网穿透的安装。Cpolar的安装注册也很简便。可直接在cpolar的官网页面(www.cpolar.com)找到下载按钮。 笔者使用的是Windows操作系统,因此选择Windows版本进行下载。 Cpolar下载完成后,将下载的文件解压,双击解压后的.msi文件,即可自动执行安装程序,一路点击“Next”就能完成安装。 由于cpolar会为每个用户创建独立的数据隧道,并辅以用户密码和token码保证数据安全,因此我们在使用cpolar之前,需要进行用户注册。注册过程也非常简单,只要在cpolar主页右上角点击“用户注册”,在注册页面填入必要信息,就能完成注册。 到这一步,我们完成了net2ftp页面的本地访问测试,也在本地电脑上安装了cpolar内网穿透软件,接下来我们就可以创建一条能够连接本地net2ftp的内网穿透数据隧道,让我们能在公共互联网上访问到本地net2ftp网站。 3.1.Cpolar云端设置 数据访问并没有特定时间,也就是随时可能发生,因此需要我们的内网穿透数据隧道能够长期稳定在线。但cpolar免费版的数据隧道每24小时重置一次,笔者并不想每天进行重连设置,因此笔者将cpolar升级至vip版,以便能获得能长期稳定存在的内网穿透数据隧道。 要达到内网穿透的目的,需要先登录cpolar的官网,并在用户主页面左侧找到预留按钮,并点击进入cpolar的数据隧道预留页面。 在这里生成一个公共互联网地址(也可以看做数据隧道的入口),由于此时这个地址没有连接本地的软件输出端口,因此也可以看做是一条空白的数据隧道。 在预留页面,可以看到很多种可保留的数据隧道,这里我们选择保留二级子域名栏位。 在“保留二级子域名”栏位,需要进行几项信息的简单设置,即 地区:服务器所在区域,就近选择即可二级域名:会最终出现在生成的公共互联网地址中,作为网络地址的标识之一描述:可以看做这条数据隧道的描述,能够与其他隧道区分开即可)。 完成这几项设置后,就可以点击右侧的“保留”按钮,将这条数据隧道保留下来。 当然,如果这条数据隧道不打算再使用,还可以点击右侧的“x”将其轻松删除,节约宝贵的隧道名额。 3.2.Cpolar本地设置 完成cpolar云端的设置,并保留了空白数据隧道后,我们回到本地的cpolar客户端,将云端生成的空白数据隧道与本地的测试页面连接起来,让我们能在公共互联网上访问到本地的测试页面。 在本地打开并登录cpolar客户端(可以在浏览器中输入localhost:9200直接访问,也可以在开始菜单中点击cpolar客户端的快捷方式)。 点击客户端主界面左侧隧道管理项下的创建隧道按钮,进入本地隧道创建页面(如果要创建没24小时重置地址的临时数据隧道,可直接在此进行设置,不必再cpolar官网设置空白数据隧道)。 在这个页面,同样需要进行几项信息设置,这些信息设置包括: 1. 隧道名称 – 可以看做cpolar本地的隧道信息注释,只要方便我们分辨即可; 2. 协议 – 由于的测试页面是网页,因此选择http协议; 3. 本地地址 – 本地地址即为本地网站的输出端口号,而默认输出端口为,因此这里也填入81; 4. 域名类型 – 在这个例子中,我们已经在cpolar云端预留了二级子域名的数据隧道,因此勾选“二级子域名”(如果预留的是自定义域名,则勾选自定义域名),并在下一行“Sub Domain”栏中填入预留的二级子域名,该例子中为“net2ftpweb”。如果打算创建临时数据隧道,则直接勾选“随机域名”,由cpolar客户端自行生成网络地址; 5. 地区 – 与cpolar云端预留的信息一样,我们依照实际使用地填写即可;

Shell脚本之流程控制语句

条件测试语句 格式 格式1:test 条件表达式 格式2:[ 条件表达式 ] 类型 文件测试 常用的测试操作符 -d:测试是否为目录(Directory) -e:测试目录或文件是否存在(Exist) -f:测试是否为文件(File) -r:测试当前用户是否有权限读取(Read) -w:测试当前用户是否有权限写入(Write) -x:测试当前用户是否有权限执行(eXcute) 整数值比较 常用的测试操作符 -eq:等于(Equal) -ne:不等于(Not Equal) -gt:大于(Greater Than) -lt:小于(Lesser Than) -le:小于或等于(Lesser or Equal) -ge:大于或等于(Greater or Equal) 字符串比较 常用的测试操作符 =:字符串内容相同 !=:字符串内容不同,! 号表示相反的意思 -z:字符串内容为空 逻辑测试 常用的测试操作符 -a或&&:逻辑与,“而且”的意思 -o或||:逻辑或,“或者”的意思 !:逻辑否 if条件语句 格式: 单分支 if 条件测试操作 then 命令序列 fi 多分支 if 条件测试操作 then 命令序列1 else 命令序列2 fi 案例:判断学生成绩 # if 语句可以直接对命令状态进行判断,就省去了获取$?这一步! # 如果第一个条件符合就不再向下匹配 #!/bin/bash # this check grade shell grade=$1 if [ $grade -gt 90 ];then echo "