Hbase的SQL接口之Phoenix使用心得
PHOENIX 官方定义
A SQL layer over HBase delivered as a client-embedded JDBC drivertargeting low latency queries over HBase data
不同于Hive on HBase的方式,Phoenix将Query Plan直接使用HBaseAPI实现,目的是规避MapReduce框架,减少查询的时间延迟
Phoenix中SQL Query Plan的执行,基本上是通过构建一系列的Hbase scan来完成。
为了尽可能减少数据传输,在Region Server使用Coprocessor来尽可能的执行Aggregate相关工作,基本思想是使用RegionObserver在PostScannerOpen hook中将RegionScanner替换成支持Aggregation工作的定制化的Scanner,具体的Aggregate操作通过custom的scan属性传递给RegionScanner。与基于MapReduce的框架执行Plan的思想比较,基本上就是通过Coprocessor,使用RegionServer自身来在各个节点上执行Aggregation。
采用JDBC接口和应用程序交互。
二、hbase建表、phoenix格式数据导入
创建表结构、rowkey索引确定
根据业务需求建表、rowkey、索引列,前期规划设计对后期查询性能的优化尤为重要。
表字段类型要前期规划好,比如要排序的字段,最好是用int或者bigint,要确定常用查询列。确定rowkey,确定hbase分区规则,防止后面数据倾斜。
为了查询性能尽量的好,分区规则是有规则的,简单的hash分区,效果是不好的。
注意:目前支持了不同数据格式的phoenix格式,但是建表的时候还是需要考虑的,比如排序字段尽量考虑int,事先要确定一些常用列,都死为了优化查询。
数据灌入
有三种数据灌入的方式:
1.简单phoenix接口put数据
通过java代码,插入数据进hbase,几条记录写入
HTable table = new HTable(conf, “tableName”);
Put put = new Put(rowkey);
table.put(put);
2.datax少量数据导入
传统的etl开发根据建表sql将云梯生产的数据转换成phoenix格式的文件导入,但文件大小控制在几百M大小,不易过大。
3.hfile超大数据量bulkload
在这里我们遇到了比较大的坎,云梯1、odps对自动脚本灌数据支持的不够好,需要进行个性化需求的开发,中间搞了个收到bulkload到hbase的方法是。
找了台机器单独弄了个 gateway,部署了hadoop客户端,手动bulkload数据。
下载并、配置好环境,搞2个手动bulkload和load的脚本,即可搞了。
(一)bulkload脚本如下图:
alt
(二)bulkload完成后还需要将数据load到hbase的库里,脚本如下:
${HBASE_HOME}/bin/hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles hdfs://hdfscluster-1/group/aplus-48/201403211000/ TABLE_NAME
三、应用层phoenix接口开发、调试
类jdbc数据源、查询等接口开发
需要注意的是:
1.日常环境搭建,因为测试环境没有dns转发,所以需要进行host绑定到相应的zk服务器,
2.应用的预发生产环境都是连hbase的生产环境
2.1 但是必须确保生产环境有正确格式的数据在hbase里面,否则会报一系列的让你难以捉摸的异常。
2.2 因为初期对phoenix语法的不熟悉,你需要搭建一个phoenix的客户端,进行sql查询。
否则java应用启动发布、查错、改sql,这活菊有的你苦了。
你只需要下载一tar包到随便一台能连phoenix生产的机器,一般为预发环境,就可以。
它支持单sql执行,切记要在sql结尾加上分号。
也支持批量的sql执行,psql同时会将sql的执行时间打印出来,如下
alt
3.phoenix的语法和sql基本类似,但是也是有点区别的,比如:
3.1 分页不行mysql那样的limit 1,10 ;phoenix的格式是where (field1,field2) > ('75','47') limit 10这里的列值就是上次分页最后一条记录的某个列值。3.2 join查询的性能会慢3.3 order by只能在内存里做,limit也是3.4 当查询结果集大到一定程度,rs读取的速度会降低减慢3.5 因为很多排序、查询计算会在内存里做,所以phoenix会在应用服务器/tmp目录产生很多临时文件,如果代码中没有将 rs.close(),那么那些临时文件会很快撑爆硬盘。如图:
alt
四、hbase存储结合phoenix优势
1.海量低成本的存储空间2.快速敏捷接入hbase解决方案phoenix3.业务逻辑优化过后的匹配特征的高查询性能(一个月4T数据查询速度在毫秒级别)4.云梯数据快速导入hbase(4T一个小时bulkload完成datax传统导入是它几倍)4.强大的sql语法、功能支持5.专业团队持续维护、改进
相关文章:
TCP为什么需要3次握手?
一、3次握手过程 客户端向服务端发送一个表示建立连接的SYN报文段,服务端从IP数据报中提取出TCP SYN报文段,为该TCP连接分配需要的缓存和变量,并向客户端发送表示允许连接的报文段ACK。客户端在收到ACK报文段之后,也要给该连接分配…...
find和grep查找搜索命令常用的一些使用方式
目录 find和grep查找搜索命令常用的一些使用方式 一、find命令 二、grep命令 find和grep查找搜索命令常用的一些使用方式 一、find命令 我们知道在Windows系统中想要搜索查找文件,一般需要满足两个条件: 1、知道在哪些目录中查找 2、知道查找的内容&…...
ts中的dom元素和event事件类型声明
1, HTMLElement 和 Element<div id="divClick"></div>const docu = document.getElementById(divClick);const docu1 = document.querySelector(#divClick);把鼠标分别放在docu和docu1上:HTMLElement HTMLElement 是 HTML 文档中某个元素的具体类型,该…...
GPT国内怎么用?4月最新版本来了
ChatGPT镜像 今天在知乎看到一个问题:“平民不参与内测的话没有账号还有机会使用ChatGPT吗?” 从去年GPT大火到现在,关于GPT的消息铺天盖地,真要有心想要去用,途径很多,别的不说,国内GPT的镜像…...
2024.4.18作业
...
CESSCN认证通信网络安全服务能力评定企业资质介绍
通信网络安全服务能力评定资质是中国通信企业协会通信网络安全专业委员会(简称通信安委会)颁发的一项专业资质,旨在评定通信网络安全服务单位的服务资格、水平和能力。这项资质对于从事网络安全服务的企业尤为重要,因为它直接反映…...
Hbase的SQL接口之Phoenix使用心得
PHOENIX 官方定义 A SQL layer over HBase delivered as a client-embedded JDBC drivertargeting low latency queries over HBase data 不同于Hive on HBase的方式,Phoenix将Query Plan直接使用HBaseAPI实现,目的是规避MapReduce框架,减少…...
Springboot萌宠社交分享系统的设计与实现hfdwz计算机毕业设计-课程设计-期末作业-毕设程序代做
Springboot萌宠社交分享系统的设计与实现hfdwz计算机毕业设计-课程设计-期末作业-毕设程序代做 【免费赠送源码】Springboot萌宠社交分享系统的设计与实现hfdwz计算机毕业设计-课程设计-期末作业-毕设程序代做本源码技术栈: 项目架构:B/S架构 开发语言…...
线性代数与解析几何——Part4 欧式空间 酉空间
线性代数与解析几何——Part4 欧式空间 & 酉空间 1. 欧氏空间 1. 定义 & 性质2. 内积表示与标准正交基3. 欧氏空间的同构4. 欧氏空间的线性变换5. 欧氏空间的子空间 2. 酉空间 1. 定义 & 性质2. 酉变换3. Hermite变换4. 规范变换 1. 欧氏空间 1. 定义 & 性质…...
带头双向循环链表的实现
目录前言节点声明链表的初始化尾插打印链表头插尾删头删查找节点指定位置插入指定位置删除链表销毁前言 之前讲过单链表的实现,在实现的过程中,我们会发现每次删除或者在前面插入节点的时候,都要提前保存上一个节点的地址。这样做十分麻烦&a…...
07【C语言 趣味算法】最佳存款方案(采用 从后往前 递推解决)
目录 一、前情回顾二、Problem:最佳存款方案2.1 Description of the problem2.2 Analysis of the problem2.3 Algorithm design2.4 The complete code and the results of the run(完整的代码 以及 运行结果)一、前情回顾 06【C语言 & 趣味算法】牛顿迭代法求方程根(可…...
游戏开发36课 cocoscreator scrollview优化
在cocoscreator内,ScrollView控件封装的挺完美的了,不过对于一些对性能要求比较高的场景,会存在问题,以top100排行榜排行榜举例子 1、应用卡顿甚至崩溃 按照官方用例使用ScrollView,插入100个玩家的item,理…...
屏幕开发学习 -- 迪文串口屏
一 前言 最近学习了一款基于图形化开发的屏幕,在摸索一周后,基本熟悉了这款产品的一个开发过程,今天给大家分享一下迪文串口屏的学习过程,有不足之处,还请见谅😁,包含了环境搭建和功能DEMO 二 …...
微机-------CPU与外设之间的数据传送方式
目录 一、无条件方式二、查询方式三、中断方式四、DMA方式一、无条件方式 外设要求:简单、数据变化缓慢。 外设被认为始终处于就绪状态。始终准备好数据或者始终准备好接收数据。 IN AL,数据端口 数据端口的地址通过CPU的地址总线送到地址译码器进行译码,同时该指令进行的是…...
从源码上解决rosdep update失败问题
(一)卸载官方的rosdep、rosdistro 卸载rosdistro # python2 sudo apt-get purge python-rosdistro# python3 sudo apt-get purge python3-rosdistro卸载rosdep # python2 sudo apt-get purge python-rosdep# python3 sudo apt-get purge python3-rosd…...
常用的shell命令
常用的shell命令 1、ls命令 功能:显示文件和目录的信息 ls 以默认方式显示当前目录文件列表 ls -a 显示所有文件包括隐藏文件 ls -l 显示文件属性,包括大小,日期,符号连接,是否可读写及是否可执行 ls -lh 显示文件的…...
新手入门SLAM必备资料
新手入门SLAM必备资料 文章目录 新手入门SLAM必备资料一、SLAM学习书籍1.必读经典2.有很多期,跟着会议一起出的文集3.入门书籍,简单实现及代码4.SLAM入门教材吐血推荐,对深入理解SLAM实质非常有帮助5.作者Joan Sola关于Graph-SLAM的教程,包含位姿变换、传感器模型、图优化以…...
如何选择和使用腾讯云服务器的方法新手教程
本文将介绍如何选择和使用腾讯云服务器的方法新手教程。云服务器能帮助快速构建更稳定、安全的应用,降低开发运维的难度和整体IT成本。腾讯云CVM云服务器提供多种类型的实例、操作系统和软件包。各实例中的 CPU、内存、硬盘和带宽可以灵活调整,以满足应用…...
亚马逊云科技re:Invent:Serverless是所有构想的核心
12月2日,2022亚马逊云科技re:Invent全球大会上,Amazon.com副总裁兼首席技术官Werner Vogels博士向开发者们展示了另一种可能。在一系列Serverless工具的帮助下,一些代码可以少写,因为未来你可能再也不需要写它们了。这恐怕是自云原…...
数据链路层(必备知识)
文章目录1、数据链路层的作用2、认识以太网<1>以太网帧格式<2>认识MAC地址<3>认识MTU<4>查看硬件地址和MTU3、ARP协议<1>什么是ARP协议<2>ARP数据报格式<3>ARP协议的工作机制4、其他重要协议或技术<1> DNS<2>NAT技术1、…...
【Spring系列】- Spring循环依赖
Spring循环依赖 😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🏆 一个有梦有戏的人 怒放吧德德 🌝分享学习心得,欢迎指正,大…...
Python学习基础笔记二十一——迭代器
列表,我们使用for循环来取值,我们把每个值都取到,不需要关心每一个值的位置,因为只能顺序的取值,并不能跳过任何一个去取其他位置的值。那么我们为什么可以使用for循环来取值,for循环内部是怎么工作的呢&am…...
【云原生之Docker实战】使用docker部署IT资产管理系统GLPI
【云原生之Docker实战】使用docker部署IT资产管理系统GLPI 一、GLPI介绍1.GLPI简介2.GLPI功能二、检查本地docker环境1.检查docker版本2.检查docker状态三、下载GLPI镜像四、编辑docker-compose.yaml文件五、部署GLPI系统1.创建数据目录2.使用docker compose创建容器应用3.查看…...
【SSM框架 二】Spring
文章目录二、Spring1、简介2、IOC理论思想3、Hello Spring4、IOC创建对象的方式4.1 无参构造构造器注入4.2 有参构造器注入5、Spring的配置5.1 别名5.2 Bean的配置5.3 import6、DI依赖注入6.1 构造方法注入6.2 set方法注入6.3 扩展注入6.4、Bean的作用域7、Bean的自动装配7.1 正…...
基于java+ssm+vue+mysql的社区流浪猫狗救助网站
项目介绍 随着迅速的发展,宠物饲养也较以前发生很大的变化,社区流浪猫狗救助网站系统以其独有的优势脱颖而出。“社区流浪猫狗救助网站”是以JAVA程序设计语言课为基础的设计出适合社区流浪猫狗救助网站,其开发过程主要包括后台数据库的建立…...
推特营销引流入门指南
一、关注 当您关注另一个Twitter用户时,您进行订阅,即可立即阅读其内容分享。因此,请评估您关注的人,尤其是刚开始时。跟踪新用户的一种简单方法是找到他们的个人资料,然后单击“关注”按钮。 Twitter对于那些疯狂点…...
Seata概述基础
分布式事务原因: 单体架构的spring事务不能跨机器,不能跨数据源 分布式事务的概念: 一个业务流程,在分布式系统(微服务)中,每个业务模块都是一个分支,保证每个业务分支一起成功&am…...
Python学习基础笔记二十二——生成器
一个包含yield关键字的函数就是一个生成器函数。yield可以为我们从函数中返回值,但是yield又不同于return,return的执行意味着程序的结束,调用生成器函数不会得到返回的具体的值,而是得到一个可迭代的对象。每一次获取这个可迭代对…...
python -- PyQt5(designer)中文详细教程(四)事件和信号
事件 signals and slots也 被其他⼈翻译成信号和槽机制。 所有的应用都是事件驱动的。事件大部分都是由用户的行为产⽣的,当然也有其他的事件产生方式,比如网络的连接,窗口管理器或者定时器等。调⽤应⽤的exec_()⽅法时,应⽤会进⼊…...
你绝对想象不到的端对端通信的几种方式
一、前言 今天要和大家说的是我们常用的一些端对端的通信方式,这里我们会以python和php语言为主,举例说明客户端、浏览器端和服务器端通信,部分代码可能展示不全,不过我会放在文末链接供大家下载测试,下面我们先来让大…...
序列化--Serial
序列化:将数据结构或对象转换成二进制串的过程。 反序列化:将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程。 Parcelable 与 Serializeable 的区别 SerializableParcelable通过IO对硬盘操作,速度较慢直接在内存操作&#x…...
BDD - SpecFlow ExternalData Plugin 导入外部测试数据
BDD - SpecFlow ExternalData Plugin 导入外部测试数据引言SpecFlow ExternalData 插件支持的数据源Tags实践创建一个 Class Libary Project添加 NuGet Packages添加测试数据源文件CSV 文件Excel 文件添加 Feature 文件实现 Step Definition执行Scenario 导入测试数据源Scenari…...
[Power Query] 日期和时间处理
Power Query查询编辑器为日期和时间数据提供了强大而快捷的处理方式 例1: 从日期中提取年、月份、日、季度、周、天等信息 数据源 步骤1:将数据源导入到Power BI Desktop,单击【转换数据】选项,进入Power Query查询编辑器界面 步骤2:选中"日期&qu…...
设计模式之抽象工厂模式
利用反射技术简单梳理抽象工厂模式 工厂模式实现 通常我们在实际工作中,经常遇到需要访问数据库的场景。 而常见的数据库又多种多样,怎么样针对不同的数据库来建立不同的数据库连接呢? 我们可以看下用抽象工厂模式加上反射技术来如何实现。…...
JavaWeb_第5章_会话技术_Cookie+Session
JavaWeb_第5章_会话技术_CookieSession 文章目录JavaWeb_第5章_会话技术_CookieSession1,会话跟踪技术的概述2,Cookie2.1 Cookie的基本使用2.2 Cookie的原理分析2.3 Cookie的使用细节2.3.1 Cookie的存活时间2.3.2 Cookie存储中文3,Session3.1…...
跟着实例学Go语言(一)
本教程全面涵盖了Go语言基础的各个方面。一共80个例子,每个例子对应一个语言特性点,非常适合新人快速上手。 教程代码示例来自go by example,文字部分来自本人自己的理解。 本文是教程系列的第一部分,共计20个例子、约1万字。 目…...
数据库基础 - 数据类型、关键字、cmd中操作数据库的命令
cmd中操作数据库的命令 mysql -hlocalhost -用户名 -密码 show database;查询数据库中的小数据库 show 数据库名;查询某一个小数据库 show 表名;查询表的结构 exit 退出数据类型 数值类型 int :整形 double:双精度&…...
2022SDNU-ACM结训赛题解
首先感谢一下各位出题人的精心准备、验题人的辛勤付出、以及选手的积极参加 题解 Problem A 柳予欣的归来【数学】 出题人: bhq 没想到一血是被打完山大的牛客比赛后来结训赛玩的wyx拿走的! 题目描述: 计算(∑0<d<pd−1)m(\sum_{0…...
《人类简史》笔记三—— 历史从无正义
目录 一、尽管把人人生而平等喊得震天响,其实还是把人分成了上下等级 二、恶性循环 三、当男人究竟有什么好的? 一、尽管把人人生而平等喊得震天响,其实还是把人分成了上下等级 古时候: 上等人 平民和奴隶 现在:…...
Python实现基于用户的协同过滤推荐算法构建电影推荐系统
说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 基于用户的协同过滤推荐(User-based CF)的原理假设:跟你喜好相似的人…...
阿里巴巴专场——第322场周赛题解
目录 模拟法:6253.回环句 排序后模拟:6254. 划分技能点相等的团队 BFS:6255. 两个城市间路径的最小分数 BFS:6256. 将节点分成尽可能多的组 模拟法:6253.回环句 这道题直接按照题目的意思暴力模拟即可:…...
【机器学习】支持向量回归
有任何的书写错误、排版错误、概念错误等,希望大家包含指正。 在阅读本篇之前建议先学习: 【机器学习】支持向量机【上】硬间隔 【机器学习】支持向量机【下】软间隔与核函数 支持向量回归 支持向量回归(support vector regression…...
Linux安装mysql
1、 查看是否已经安装 Mysql rpm -qa | grep mysql 如果你查看出来有东西,可以使用下面命令将其删除 rpm -e 文件名 2 、下载官方 Mysql 包 wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm 如果安装有提示:Cannot…...
JeecgBoot搭建(低代码)
环境安装 后端:JDK: 1.8 (小于11)、Maven: 3.5、MySql: 5.7、Redis: 3.2 前端:Node Js: 14.18 / 16、Npm: 5.6.0、Yarn: 1.21.1 、Pnpm 工具: IDEA、Navicat、Git、TortoiseGit拉取代码 后端:git clone https://gitee.com/jeecg/…...
【java】3-获取线程引用与线程的属性
1.获取线程的引用 在创建一个线程之后,我们很有必要去获取当前线程实例的引用,以便能够观察到线程的一些属性,或是对于当前线程进行一系列的操作 调用Thread类的静态方法currentThread,我们便能拿到当前线程的引用 Thread.curr…...
2022-12-04一周学习
这周基本上还是在对前端学习的更多一点,主要是之前没有重视vue3的学习,现在在补上来,学习了vue3的一些知识,前端的权限管理,设置路由守卫,pinia,还学习了redis的一些基本操作,之前只是照搬了别人…...
CG-34 浊度传感器 简单说明
产品概述 浊度传感器是一种智能监测水中悬浮物对光线透过时所发生的阻碍程度的仪器。允许在水中的测量点进行无人值守的操作。采用自清洗设计,可清除水中附着物以及气泡聚集而影响测量结果。具有优异的抗污染能力,即使恶劣的环境长期在线监测,…...
跟着实例学Go语言(二)
本教程全面涵盖了Go语言基础的各个方面。一共80个例子,每个例子对应一个语言特性点,非常适合新人快速上手。 教程代码示例来自go by example,文字部分来自本人自己的理解。 本文是教程系列的第二部分,共计20个例子、约1.2万字。 …...
linux+window+macos下的JDK安装
1. Linux中安装JDK (1)下载Linux版本的jdk压缩包 (2)解压 tar -zxvf 压缩包名 例如: tar -zxvf jdk-8u251-linux-x64.tar.gz(3)在系统配置文件配置java 编辑profile配置文件 vim /etc/prof…...
DiffuSEEG:一种基于stable diffusion 的SEEG数据补全方法
目录一. 立体脑电图(SEEG)1.1 SEEG概念1.2 SEEG作用1.3 SEEG的适用场景1.4 操作方法一. 立体脑电图(SEEG) 1.1 SEEG概念 立体脑电图(SEEG):是一种借助外科微创的方法将电极植入到大脑不同的部…...
kubernetes—Service介绍
Service介绍 在kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这也就意味着不方便直接采用pod的ip对服务进行访问。 为了解决这个问题,kubernetes提供了Service资…...
AlphaFold2源码解析(7)--模型之Evoformer
AlphaFold2源码解析(7)–模型之Evoformer 这篇文章我们主要药讲解AlphaFold2的Evoformer的代码细节。 Evoformer Stack 该网络有一个双塔结构,在MSA堆栈中具有轴向的自我注意;在Pair堆栈中具有三角形的乘法更新和三角形的自我注意;以及外积…...
docker 安装 redis 6.0.8 cluster 实战 (3主3从) 动态扩容
这里将上篇博客搭建的3主3从 扩容为 4主4从 1. 新建两个node节点 docker run -d \ --net host \ --privileged \ --name redis-node-7 \ --log-opt max-size100m \ --log-opt max-file3 \ -v /root/docker/redis-node-7/data:/data \ redis:6.0.8 \ --cluster-enabled yes \ -…...
20221204
You are so much more than how you look. 你比你的外表更有魅力 Never give up until the fight is over. 永远不要放弃,要一直战斗到最后一秒。 whats done cannot be undone 覆水难收 If I was going somewhere, I was running。 如果我要去哪儿ÿ…...
CN_数据链路层流量控制@可靠的传输机制@ARP协议
文章目录流量控制技术(协议)停止-等待流量控制滑动窗口流量控制发送窗口接收窗口基本原理可靠的传输机制确认机制ACK超时重传机制RTOARQ处理差错自动重传请求ARQ协议🎈ARQ具体协议单帧ARQ协议停止-等待协议SW-ARQ例连续ARQ协议后退N帧协议(GBN)GBN多帧滑动窗口累计确…...
程序人生 | 与足球共舞的火柴人(致敬格拉利什,赋予足球更深的意义)
个人简介 👀个人主页: 前端杂货铺 🙋♂️学习方向: 主攻前端方向,也会涉及到服务端 📃个人状态: 在校大学生一枚,已拿多个前端 offer(秋招) 🚀未…...
[Python开发问题] Selenium ERROR: Unable to find a matching set of capabilities
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...
Meta的 Llama-3 在线使用与下载
前言 2024年4月19日,全球社交巨头Meta在他们的官网,正式发布了开源大模型 Llama-3 !! 该版本包括预训练和指令调整的 Llama 3 语言模型的模型权重和起始代码 - 包括 8B 到 70B 参数! 简介 Llama 3 在 24K GPU 集群…...
Linux中的 mount -a
mount -a 是一个在 Linux 系统中用来挂载所有在 /etc/fstab 文件中定义的文件系统的命令。在 Linux 中,/etc/fstab 文件包含了系统启动时需要挂载的文件系统的信息,mount -a 命令会根据这些信息自动挂载这些文件系统。 mount -a 命令的作用:…...
spring事件监听
spring事件监听 ApplicationListener监听容器中发布的事件 实现ApplicationListener来完成事件监听 public interface ApplicationListener<E extends ApplicationEvent> extends EventListener { /** * Handle an application event. * param event the event t…...
String替换术:深入探索Java String类的替换方法
1. 概述 Java的String类提供了三种替换方法:replace()、replaceAll()和replaceFirst()。这些方法用于将字符串中的指定字符或子串替换为新的字符或子串。了解和正确使用这些方法有助于提高应用程序的性能和减少内存占用。 2. replace()方法详解 replace() 方法用于…...
【数据分析】AHP层次分析法
博主总结:根据每个方案x各准则因素权重累加结果 对比来选择目标。数据主观性强 简介 AHP层次分析法是一种解决多目标复杂问题的定性和定量相结合进行计算决策权重的研究方法。该方法将定量分析与定性分析结合起来,用决策者的经验判断各衡量目标之间能…...