集群使用——资源管理和租户创建
概述
OceanBase 数据库是多租户的分布式数据库,租户使用的资源建立在资源池上。资源池包含了资源单元,而资源单元则规定了具体资源的量化(如
CPU、Memory、Disk_Size 和 IOPS 等)。
创建租户前,必须规定租户使用的资源范围,资源池和资源单元就是为了满足租户资源隔离和负载均衡而存在的。
资源管理中的概念
资源单元(Resource Unit,Unit)
- 资源单元是一个容器。实际上,副本是存储在资源单元之中的,所以资源单元是副本的容器。
- 资源单元包含了计算存储资源(Memory、CPU 和 IO 等)同时资源单元也是集群负载均衡的一个基本单位,
- 在集群节点上下线,扩容缩容时会动态调整资源单元在节点上的分布进而达到资源的使用均衡。
资源池 (Resource Pool)
- 一个租户拥有若干个资源池,这些资源池的集合描述了这个租户所能使用的所有资源。
- 一个资源池由具有相同资源规格(Unit Config)的若干个资源单元组成。
- 一个资源池只能属于一个租户。每个资源单元描述了位于一个 Server 上的一组计算和存储资源,可以视为一个轻量级虚拟机,包括若干 CPU 资源、内存资源、磁盘资源等。一个租户在同一个 Server 上最多有一个资源单元(资源单元是和副本关联的,显而易见一个服务器不能有同一份数据的两个副本)。
资源配置(Resource Config)
- 资源配置是资源单元的具体配置,包含资源单元所属的资源池信息、使用资源的租户信息、资源单元的配置信息(如 CPU 核数和内存资源)等。修改资源配置可以动态调整资源单元的计算资源,进而调整对应租户的资源。
下面开始演示资源管理和租户创建:
1)资源管理
集群默认有个内部租户(sys),可以查看和管理集群的资源(sql如下):
select a.zone,concat(a.svr_ip,':',a.svr_port) observer, cpu_total, cpu_assigned, (cpu_total-cpu_assigned) cpu_free,mem_total/1024/1024/1024 mem_total_gb, mem_assigned/1024/1024/1024 mem_assign_gb, (mem_total-mem_assigned)/1024/1024/1024 mem_free_gbfrom __all_virtual_server_stat a join __all_server b on (a.svr_ip=b.svr_ip and a.svr_port=b.svr_port) order by a.zone, a.svr_ip;
结果如下(实验环境集群为单节点集群):
+-------+---------------------+-----------+--------------+----------+----------------+----------------+----------------+| zone | observer | cpu_total | cpu_assigned | cpu_free | mem_total_gb | mem_assign_gb | mem_free_gb |+-------+---------------------+-----------+--------------+----------+----------------+----------------+----------------+| zone1 | 192.168.152.30:2882 | 14 | 2.5 | 11.5 | 5.000000000000 | 1.250000000000 | 3.750000000000 |+-------+---------------------+-----------+--------------+----------+----------------+----------------+----------------+1 row in set (0.006 sec)
查看资源单元规格
MySQL [oceanbase]> select * from __all_unit_config;+----------------------------+----------------------------+----------------+-----------------+---------+---------+------------+------------+----------+----------+---------------+---------------------+| gmt_create | gmt_modified | unit_config_id | name | max_cpu | min_cpu | max_memory | min_memory | max_iops | min_iops | max_disk_size | max_session_num |+----------------------------+----------------------------+----------------+-----------------+---------+---------+------------+------------+----------+----------+---------------+---------------------+| 2023-02-07 09:51:59.323369 | 2023-02-07 09:51:59.323369 | 1 | sys_unit_config | 5 | 2.5 | 1610612736 | 1342177280 | 10000 | 5000 | 10737418240 | 9223372036854775807 |+----------------------------+----------------------------+----------------+-----------------+---------+---------+------------+------------+----------+----------+---------------+---------------------+1 row in set (0.001 sec)MySQL [oceanbase]>
可以看出,资源单元规格 sys_unit_config 的定义里 CPU 和内存的最小值和最大值定义不一样,而第一条sql统计资源中的已分配资源时是按最小值进行计算的。这将会导致剩余的可用资源计算不那么准确。 所以,建议把该资源单元规格中定义的 CPU 和内存的最小值和最大值拉平。
修改资源单元 sys_unit_config:
alter resource unit sys_unit_config min_cpu=5,max_cpu=5,min_memory='1610612736B', max_memory='1610612736B';再次查看资源情况可以看见资源统计计算准确
查看已分配资源池的情况
select t1.name resource_pool_name, t2.`name` unit_config_name, t2.max_cpu, t2.min_cpu, t2.max_memory/1024/1024/1024 max_mem_gb, t2.min_memory/1024/1024/1024 min_mem_gb,t3.unit_id, t3.zone, concat(t3.svr_ip,':',t3.`svr_port`) observer,t4.tenant_id,t4.tenant_name from __all_resource_pool t1 join __all_unit_config t2 on (t1.unit_config_id=t2.unit_config_id)join __all_unit t3 on (t1.`resource_pool_id` = t3.`resource_pool_id`)left join __all_tenant t4 on (t1.tenant_id=t4.tenant_id)order by t1.`resource_pool_id`, t2.`unit_config_id`, t3.unit_id;+--------------------+------------------+---------+---------+----------------+----------------+---------+-------+---------------------+-----------+-------------+
| resource_pool_name | unit_config_name | max_cpu | min_cpu | max_mem_gb | min_mem_gb | unit_id | zone | observer | tenant_id | tenant_name |
+--------------------+------------------+---------+---------+----------------+----------------+---------+-------+---------------------+-----------+-------------+
| sys_pool | sys_unit_config | 5 | 5 | 1.500000000000 | 1.500000000000 | 1 | zone1 | 192.168.152.30:2882 | 1 | sys |
+--------------------+------------------+---------+---------+----------------+----------------+---------+-------+---------------------+-----------+-------------+
2 rows in set (0.005 sec)
2)如何创建和连接 MySQL 租户
1.创建资源单元规格:该步骤为可选步骤,如果有合适的规格可以跳过此步骤,直接进行复用
2.创建资源池:可以每个 zone 一个资源池,使用独立的资源单元规格,也可以所有 zone 使用同一个资源单元规格,都在一个资源池下。
3.创建租户:创建租户时需关联到第 2 步中创建的资源池。
4.连接租户:
MySQL 客户端连接
OBClient 客户端连接
OceanBase 连接驱动(JDBC)
DBEAVER 客户端连接
ODC 客户端连接:OceanBase 提供官方图形化客户端工具 OceanBase Developer Center,简称 ODC
-创建资源单元规格
查看创建的资源单元规格:select * from __all_unit_config;
CREATE resource unit S1max_cpu=3, min_cpu=3, max_memory='3G', min_memory='3G', max_iops=10000, min_iops=1000, max_session_num=1000000, max_disk_size='1024G';
CREATE resource unit S2 max_cpu=4, min_cpu=4, max_memory='3G', min_memory='3G', max_iops=10000, min_iops=1000, max_session_num=1000000, max_disk_size='1024G';
MySQL [oceanbase]> select * from __all_unit_config;+----------------------------+----------------------------+----------------+-----------------+---------+---------+------------+------------+----------+----------+---------------+---------------------+| gmt_create | gmt_modified | unit_config_id | name | max_cpu | min_cpu | max_memory | min_memory | max_iops | min_iops | max_disk_size | max_session_num |+----------------------------+----------------------------+----------------+-----------------+---------+---------+------------+------------+----------+----------+---------------+---------------------+| 2023-02-07 09:51:59.323369 | 2023-02-07 12:20:46.250880 | 1 | sys_unit_config | 5 | 5 | 1610612736 | 1610612736 | 10000 | 5000 | 10737418240 | 9223372036854775807 || 2023-02-07 14:09:21.996793 | 2023-02-07 14:09:21.996793 | 1001 | S1 | 3 | 3 | 3221225472 | 3221225472 | 10000 | 1000 | 1099511627776 | 1000000 || 2023-02-07 14:09:37.685271 | 2023-02-07 14:09:37.685271 | 1002 | S2 | 4 | 4 | 3221225472 | 3221225472 | 10000 | 1000 | 1099511627776 | 1000000 |+----------------------------+----------------------------+----------------+-----------------+---------+---------+------------+------------+----------+----------+---------------+---------------------+3 rows in set (0.001 sec
-创建资源池
创建语法:单节点集群的话:create resource pool pool_1 unit='S1' , unit_num=1, zone_list=('zone1') ;(单副本单节点集群unit_num只能是1)1-1-1集群的话:create resource pool pool_1 unit='S1' , unit_num=1, zone_list=('zone1' ,'zone2') ;(1-1-1集群,每一个zone中的server是1,unit_num最大是1) create resource pool pool_2 unit='S2' , unit_num=1, zone_list=('zone3');3-3-3集群的话create resource pool pool1unit=‘s1’,unit_num=3#一个zone中包含的observer数据量x>=3), 集群最低要求3-3-3,否则会报错(3个zone(表示3副本),每个zone中3台observer。zone_list=(‘zone1’,‘zone2’,‘zone3’,‘zone4’)
UNIT_NUM = unitnum:指定要创建的单个 Zone 下的 Unit 个数。每个单元会根据当前集群负载,自动在每个 Zone中选择一个 Server 负载,
但同一个资源池的多个 Unit 不能分配到同一个 Server,即一个资源池包含的 Unit 个数不能超过单 Zone 内 Server 的个数。
资源池创建出来后,集群的可用资源就减少了。但是这个资源池还没有关联到具体租户,所以无法被业务使用。
查看已分配资源池的情况select t1.name resource_pool_name, t2.`name` unit_config_name, t2.max_cpu, t2.min_cpu, t2.max_memory/1024/1024/1024 max_mem_gb, t2.min_memory/1024/1024/1024 min_mem_gb,t3.unit_id, t3.zone, concat(t3.svr_ip,':',t3.`svr_port`) observer,t4.tenant_id,t4.tenant_name from __all_resource_pool t1 join __all_unit_config t2 on (t1.unit_config_id=t2.unit_config_id)join __all_unit t3 on (t1.`resource_pool_id` = t3.`resource_pool_id`)left join __all_tenant t4 on (t1.tenant_id=t4.tenant_id)order by t1.`resource_pool_id`, t2.`unit_config_id`, t3.unit_id;+--------------------+------------------+---------+---------+----------------+----------------+---------+-------+---------------------+-----------+-------------+| resource_pool_name | unit_config_name | max_cpu | min_cpu | max_mem_gb | min_mem_gb | unit_id | zone | observer | tenant_id | tenant_name |+--------------------+------------------+---------+---------+----------------+----------------+---------+-------+---------------------+-----------+-------------+| sys_pool | sys_unit_config | 5 | 5 | 1.500000000000 | 1.500000000000 | 1 | zone1 | 192.168.152.30:2882 | 1 | sys || pool_1 | S1 | 3 | 3 | 3.000000000000 | 3.000000000000 | 1001 | zone1 | 192.168.152.30:2882 | NULL | NULL |+--------------------+------------------+---------+---------+----------------+----------------+---------+-------+---------------------+-----------+-------------+
再次查看剩余资源MySQL [oceanbase]> select a.zone,concat(a.svr_ip,':',a.svr_port) observer, cpu_total, cpu_assigned, (cpu_total-cpu_assigned) cpu_free,-> mem_total/1024/1024/1024 mem_total_gb, mem_assigned/1024/1024/1024 mem_assign_gb, (mem_total-mem_assigned)/1024/1024/1024 mem_free_gb-> from __all_virtual_server_stat a join __all_server b on (a.svr_ip=b.svr_ip and a.svr_port=b.svr_port) order by a.zone, a.svr_ip;+-------+---------------------+-----------+--------------+----------+----------------+----------------+----------------+| zone | observer | cpu_total | cpu_assigned | cpu_free | mem_total_gb | mem_assign_gb | mem_free_gb |+-------+---------------------+-----------+--------------+----------+----------------+----------------+----------------+| zone1 | 192.168.152.30:2882 | 14 | 8 | 6 | 5.000000000000 | 4.500000000000 | 0.500000000000 |+-------+---------------------+-----------+--------------+----------+----------------+----------------+----------------+1 row in set (0.005 sec)MySQL [oceanbase]>
-创建租户:
创建租户时需关联到第 2 步中创建的资源池。
create tenant obmysql resource_pool_list=('pool_1'), primary_zone='RANDOM',comment 'mysql tenant/instance', charset='utf8' set ob_tcp_invited_nodes='%' ;
ob_tcp_invited_nodes设置客户端IP白名单,‘%’,表示允许所有的来源,默认仅为本机127.0.0.1。
zone_list=(‘zone1’,‘zone2’,‘zone3’) 租户资源使用的zone(资源分布在哪些zone上,实验环境是单机集群,没法按照示例创建)。
primary_ZONE=‘ZONE1,ZONE2,ZONE3’ 主副本偏好设置。
查看tenant信息
MySQL [oceanbase]> select * from gv$tenant;+-----------+-------------+-----------+--------------+----------------+-----------------------+-----------+---------------+| tenant_id | tenant_name | zone_list | primary_zone | collation_type | info | read_only | locality |+-----------+-------------+-----------+--------------+----------------+-----------------------+-----------+---------------+| 1 | sys | zone1 | zone1 | 0 | system tenant | 0 | FULL{1}@zone1 || 1001 | obmysql | zone1 | RANDOM | 0 | mysql tenant/instance | 0 | FULL{1}@zone1 |+-----------+-------------+-----------+--------------+----------------+-----------------------+-----------+---------------+2 rows in set (0.003 sec)
总结:一个资源单元为 UNIT,UNIT是最小的资源分割单位。一个资源池中包含若干 UNIT,一台Observer 只能有一个资源池的一个 UNIT。(所以创建resourcepool时unit_num最大数不能超过单个zone总observer的数目)一个资源池只能赋予给一个租户,一个租户可以包含多个资源池。资源池若指定只分布在一个zone,则该zone失效后,数据丢失,无副本。一个资源池建议指定分布在多个zone,多个zone则存在副本。(最好是全部zone,需大于2,若等于2,一个zone损坏,由于不满足多数派,虽然数据还有一个副本,但是服务会停止)
–连接租户
1.obclient
obclient -h192.168.152.30 -uroot@obmysql -P2881 -p -c -A oceanbasealter user root identified by 'bJVqqEVt' ;obclient -h192.168.152.30 -uroot@obmysql -P2881 -pbJVqqEVt -c -A oceanbaseshow databases;
过程如下:
[admin@obce01 ~]$ obclient -h192.168.152.30 -uroot@obmysql -P2881 -p -c -A oceanbaseEnter password: --------------------------------------------------------初始密码为空Welcome to the OceanBase. Commands end with ; or \g.Your MySQL connection id is 3221489885Server version: 5.7.25 OceanBase 3.1.0 (r3-b20901e8c84d3ea774beeaca963c67d7802e4b4e) (Built Aug 10 2021 08:10:38)MySQL [oceanbase]> alter user root identified by 'bJVqqEVt' ;Query OK, 0 rows affected (0.014 sec)MySQL [oceanbase]> Bye[admin@obce01 ~]$ obclient -h192.168.152.30 -uroot@obmysql -P2881 -pbJVqqEVt -c -A oceanbaseWelcome to the OceanBase. Commands end with ; or \g.Your MySQL connection id is 3221489906Server version: 5.7.25 OceanBase 3.1.0 (r3-b20901e8c84d3ea774beeaca963c67d7802e4b4e) (Built Aug 10 2021 08:10:38)Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MySQL [oceanbase]> show databases;+--------------------+| Database |+--------------------+| oceanbase || information_schema || mysql || test |+--------------------+4 rows in set (0.005 sec)MySQL [oceanbase]>
-
ODC客户端
下载安装:下载客户端版 ODC新建连接串:智能识别 obclient -h192.168.152.30 -uroot@obmysql -P2881 -pbJVqqEVt -c -A oceanbase
相关文章:
集群使用——资源管理和租户创建
概述 OceanBase 数据库是多租户的分布式数据库,租户使用的资源建立在资源池上。资源池包含了资源单元,而资源单元则规定了具体资源的量化(如 CPU、Memory、Disk_Size 和 IOPS 等)。 创建租户前,必须规定租户使用的资源…...
谷歌浏览器登录失败,提示【无法同步到“...@gmail.com”】
首先安装Chrome同步助手(Chrome-Sync-Helper,看了很多博客,谷歌浏览器同步问题好像都要用这个),改成.rar,解压,文件夹_metadata重命名为metadata,然后添加到谷歌浏览器的扩展程序中。…...
75 111111
选择题(共75题,合计75.0分) 1. 选项ABCD中显示了所创造的商业价值以及在产品中实施各种功能需要进行的开发工作。团队应优先实施哪项功能? The business value created and the development effort needed to implement the various features in the product are sh…...
分销系统逻辑
相关概念 主营商户: 提供分销商品和佣金的商户分销商: 拥有自己的销售渠道,能够帮助推动产品销售的个人或商户消费者: 购买分销商品的人。佣金: 主营商户返还给经销商的比例抽成 分销功能设计 (1)分销商准入规则设计 无规则: 没有分销商的准入门槛限制…...
MySQL视图特性
文章目录MySQL视图特性基本使用准备测试表创建视图修改视图影响基表修改基表影响视图删除视图视图规则和限制MySQL视图特性 视图的概念 视图是一个虚拟表,其内容由查询定义,同真实的表一样,视图包含一系列带有名称的列和行数据。视图中的数据…...
RabbitMQ详解(二):Docker安装RabbitMQ
在Docker上安装部署RabbitMQ方便快捷,不需要额外安装Erlang环境,所以写该篇文章先来介绍如何在Docker上部署RabbitMQ。 一、安装并运行 (1)、在docker hub 中查找rabbitmq镜像 docker search rabbitmq:3.9.12-management带有“mangement”的版本&…...
如何使用代码注释:关于JavaScript与TypeScript 注释和文档的自动生成
如何使用代码注释:关于JavaScript与TypeScript 注释和文档的自动生成jcLee95:https://blog.csdn.net/qq_28550263?spm1001.2101.3001.5343 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/detail…...
Echarts 设置面积区域图(areaStyle核心)
第011个点击查看专栏目录Echarts折线区域面积图的视觉效果更加饱满丰富,在系列不多的场景下尤其适用。区域面积图将折线到坐标轴的空间设置背景色,用区域面积表达数据。通过 areaStyle 设置折线图的填充区域样式,将其设为为 {} 表示使用默认…...
pandas——字符串处理【建议收藏】
pandas——字符串处理 作者:AOAIYI 创作不易,如果觉得文章不错或能帮助到你学习,记得点赞收藏评论一下哦 文章目录pandas——字符串处理一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤1.cat() 拼接字符串2.split()切片字符串…...
反射,枚举,lambda表达式
目录 1、反射 1.1 基本概念 1.2 反射相关的类 1.3 创建 Class 对象 1.4 反射的使用 1.4.1 通过反射创建对象: 1.4.2 获取私有的构造方法 1.4.3 获取私有的成员变量 1.4.4 获取私有的方法 1.5 总结 2、枚举 2.1 认识枚举 2.2 使用枚举 2.3 枚举与反射…...
.Net Core对于RabbitMQ封装分布式事件总线
首先我们需要了解到分布式事件总线是什么; 分布式事件总线是一种在分布式系统中提供事件通知、订阅和发布机制的技术。它允许多个组件或微服务之间的协作和通信,而无需直接耦合或了解彼此的实现细节。通过事件总线,组件或微服务可以通过发布…...
GPIO功能描述
GPIO 文章目录 GPIO1. 功能描述1.1 OSCI/OSCO 引脚1.3 HSEIN/HSEOUT引脚1.2 Bit-Band1.4 VRTCAFx引脚1.5 EWKUPx引脚1.6 QSPI0 引脚1.7 LVDIN引脚1.8 SARADC引脚1.9 ADCIN引脚2. 测试项描述2.1 PAD Location2.2 LBOR和BOR复位2.3 驱动能力2.4 模拟态\高阻态2.5 SWD\JTAG2.6 输出…...
指派问题与匈牙利法讲解
指派问题概述:实际中,会遇到这样的问题,有n项不同的任务,需要n个人分别完成其中的1项,每个人完成任务的时间不一样。于是就有一个问题,如何分配任务使得花费时间最少。通俗来讲,就是n*n矩阵中&a…...
day5——冒泡排序,选择排序和插入排序的学习
选择排序冒泡排序插入排序 选择排序 选择排序的基本思路就是: 首先假定第一个的下表为所有元素中最小的一个, 然后用后面的每一个元素跟这个元素进行比较, 如果后面的元素比这个元素更小一点, 那么就将找到的最小的元素的下标和…...
Windows 数据类型 (Windows Data Types)
参考:https://learn.microsoft.com/en-us/windows/win32/winprog/windows-data-types 要求 要求值最低受支持的客户端Windows XP [仅限桌面应用]最低受支持的服务器Windows Server 2003 [仅限桌面应用]HeaderBaseTsd.h;WinDef.h;WinNT.hAPIENTRY 系统函数的调用约…...
九龙证券|本周5只新股申购,特斯拉、蔚来、理想的供应商来A股了!
据现在组织,2月13日到17日共有5只新股申购,其间上证主板2只,深证主板1只,北交所2只。 2月14日发动打新的深证主板新股多利科技成立于2010年,是一家专心于轿车冲压零部件及相关模具的开发、出产与出售的企业。从2020年…...
设计模式(持续更新)
本文主要是记录java的设计模式在实际工作中的应用案例,或者是对设计模式的个人理解及备忘 一、单例模式Singleton 工作场景(静态类): 在外部系统对接中,需要调用外部系统A的接口,但是接口是有身份校验的…...
Prometheus 告警规则
Prometheus 告警规则 Prometheus官方内置的第三方报警通知包括:邮件、 即时通讯软件(如Slack、Hipchat)、移动应用消息推送(如Pushover)和自动化运维工具(例如:Pagerduty、Opsgenie、Victorops) Promethe…...
mulesoft MCIA 破釜沉舟备考 2023.02.13.02
mulesoft MCIA 破釜沉舟备考 2023.02.13.03 1. According to MuleSoft, which deployment charcateristic applies to a microservices application architecture?2. A mule application designed to fulfil two requirements3. A mule application must periodically process…...
获取DLL运行时路径的方法
之前项目中发现的问题,记录下解决方案1. 问题背景OVVRNTool项目中,底层图像基本操作功能由DLL库函数提供,上层基于DLL封装了两个应用CMD和GUI,然后通过Qt打包分发;发布是直接采用绿色免安装的方式打包,具体…...
“华为杯”研究生数学建模竞赛2006年-【华为杯】D题:学生面试中教师安排的优化与算法(附获奖论文)
赛题描述 高校自主招生是高考改革中的一项新生事物,现在仍处于探索阶段。某高校拟在全面衡量考生的高中学习成绩及综合表现后再采用专家面试的方式决定录取与否。该校在今年自主招生中,经过初选合格进入面试的考生有N人,拟聘请老师M人。每位学生要分别接受4位老师(简称该学…...
【JavaScript】复习 【对象参数】【函数参数】
js不会检查任何参数类型,任何参数都可以作为参数传递 1、对象参数 改变量随便改,改对象要看这个对象是不是有多个变量同时指向这个对象 const 用来定义常量,只能赋值一次。 变量------->对象------->属性 被const修饰的对象 …...
如何批量提取文件名到excel表格?
批量提取文件名到excel表格?关于这个问题相信很多人都遇到过,大多数人在第一次碰到的时候都不知道如何下手,大家都会立即在百度里面搜索相关方法教程,小编也试着搜索了一下,发现找到的很多方法都大同小异,需…...
CUDA线程层次一文搞懂|参加CUDA线上训练营
设备术语 Host:CPU 和 内存 (host memory)Device:GPU 和显存 (device memory) CUDA 线程层次 CUDA 线程层次分为: Thread 所有线程执行相同的核函数并行执行 Thread Block 执行在一个 Streaming Multiprocessor (SM)…...
Linux文件默认权限:umask
umask就是指定目前用户在建立文件或目录时候的权限默认值 查看方式有两种:一种可以直接输入umask,就可以看到数字类型的权限设置值,一种则是加入umask后加入-S(Symbolic)选项,就会以符号类型的方式来显示出…...
SonicWall:请立即修复SMA 1000 漏洞
近日,网络安全供应商SonicWall发布了关于安全移动访问 (SMA) 1000设备的三个安全漏洞的紧急报告,其中包括一个高威胁性的身份验证绕过漏洞。SonicWall指出,攻击者可以利用这些漏洞绕过授权,并可能破坏易受攻击的设备。 从报告中可…...
基于VS调试分析 + 堆栈观察问题代码段
文章目录问题代码段1 —— 阶乘之和问题代码段2 —— 越界的危害① 发现问题② 分析问题③ 思考问题【⭐堆栈原理⭐】④ 解决问题【DeBug与Release】👨程序员与测试人员👩✒总结与提炼问题代码段1 —— 阶乘之和 先来看一道C语言中比较基础的题目&#x…...
QFramework框架学习
主要学习内容TypeEventSystemActionKitTimer类1、TypeEventSystem-适用于一个条件触发,多个组件响应的情况例如:动物园系统中,点击肉食动物按钮,动物园中有肉食属性的动物都进行显示。步骤:1、动物自身脚本上进行判断是…...
移动OA系统,联动企业协作让办公高效无间断
移动oa系统,近年来随着企业办公节奏的变化及人们个性化办公需求的增加迎来了快速发展。一方面,它兼具OA系统诸多优势,既凝聚了企业基础管理工作,联动了企业协作、沟通交流,又进一步提高了企业的综合实力与市场竞争力。…...
结构体熟练掌握--实现通讯录
魔王的介绍:😶🌫️一名双非本科大一小白。魔王的目标:🤯努力赶上周围卷王的脚步。魔王的主页:🔥🔥🔥大魔王.🔥🔥🔥 ❤️…...
南阳教育论坛网站建设/个人网站怎么做
2...
优化服务内容/网站seo优化步骤
2019独角兽企业重金招聘Python工程师标准>>> gulp gulp是基于Node.js的前端自动化构建工具,主要用于代码打包。目前主流的前端打包工具,grunt,gulp,webpack。grunt现在似乎慢慢被gulp取代,而我使用gulp也是…...
金融集团网站建设方案/网络营销渠道策略有哪些
前言 随着技术的不断发展,前端工程师也被赋予了越来越多的职责。不再是从前只需要切个图,加个css样式就能完成任务的切图仔了。接下来这篇文章,完成一个简单的登录注册,能让你快速上手,成为一个‘小全栈工程师’&…...
简述设计web站点的一般步骤/鹤壁seo推广
[1].[代码] [Python]代码1.生成随机数02 import random #这个是注释,引入模块03 rnd random.randint(1,500)#生成1-500之间的随机数0405 2.读文件0607 f open("c:\\1.txt","r")08 lines f.readlines()#读取全部内容09 for line in lines10 p…...
图标设计网站/长春百度网站快速排名
题库来源:安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通:流动式起重机司机报名考试考前必练!安全生产模拟考试一点通每个月更新流动式起重机司机考试报名题目及答案!多做几遍,其实通过流动式起重机司机…...
做网站可以用什么软件/优化关键词排名外包
(前提要求都是把第二个页面的只传给第一个页面) 1.代理 一对一 在第二个页面设置代理 1.1在最上方设置 //选择房间的代理 protocol RoomVCDelegate <NSObject> 1.2设置代理方法 // 方法 -(void)selectRoomName:(NSString *)name; 1.3定…...