大数据 | 实验一:大数据系统基本实验 | 熟悉常用的HBase操作
文章目录
- 📚HBase安装
- 🐇安装HBase
- 🐇伪分布式模式配置
- 🐇测试运行HBase
- 🐇HBase java API编程环境配置
- 📚实验目的
- 📚实验平台
- 📚实验内容
- 🐇HBase Shell + 编程命令实现以下指定功能
- 🥕HBase Shell部分
- 🥕编程实现
- 🐇HBase 数据库操作
- 🥕学生表
- 🥕课程表
- 🥕选课表
- 🐇编程实现功能
📚HBase安装
前期准备:下载hbase-2.4.10-bin.tar.gz, HBase下载
🐇安装HBase
先把HBase拖进虚拟机,参考实验零的相关操作
⭐解压到目录下
sudo tar zxvf hbase-2.4.10-bin.tar.gz -C /usr/local
cd /usr/local #进入该目录
mv hbase hbase-2.4.10 hbase #重命名为 hbase 文件名规范
sudo chown -R hdoop ./hbase #将 hbase 目录权限赋予 hadop 用户
⭐配置hbase环境变量
vim ~/.bashrc
- 在~/.bashrc 中找到原来配置的 PATH,并添加下列代码
:/usr/local/hbase/bin。 - PATH最终效果:
export PATH=${JAVA_HOME}/bin:/usr/local/hbase/bin/:$PATH
⭐更新配置,并测试是否安装成功
source ~/.bashrc #使新配置的环境变量生效
/usr/local/hbase/bin/hbase version #检测是否安装成功,查看hbase 版本

🐇伪分布式模式配置
⭐配置/usr/local/hbase/conf/hbase-env.sh
vim /usr/local/hbase/conf/hbase-env.sh #打开文件
添加如下代码
export JAVA_HOME=/usr/lib/jvm/java
export HBASE_CLASSPATH=/usr/local/hbase/conf
export HBASE_MANAGES_ZK=true
⭐配置/usr/local/hbase/conf/hbase-site.xml
vim /usr/local/hbase/conf/hbase-site.xml #打开文件
进行如下配置修改
<configuration><property><name>hbase.rootdir</name><value>hdfs://localhost:9000/hbase</value></property><property><name>hbase.cluster.distributed</name><value>true</value></property><property><name>hbase.unsafe.stream.capability.enforce</name><value>false</value></property>
</configuration>
🐇测试运行HBase
⭐启动Hadoop:start-dfs.sh

⭐启动HBase
cd /usr/local/hbase
bin/start-hbase.sh
⭐进入Shell界面:bin/hbase shell

HBase停止命令(
我一般只挂起不停止,emmm
exit#退出 Shell 界面bin/stop-hbase.sh#停止 Hbase
🐇HBase java API编程环境配置
该部分参考博客,这一步主要是导入相关的JAVA包,不然之后相关头文件都报错。
⭐启动Eclipse,Eclipse的相关配置见实验零
⭐创建java Project HBaseExample
- 右键new一个project

- 在“JRE”选项卡中选中第2项“Use a project specific JRE”,然后点击界面底部的“Next”按钮。

- 在弹出的界面中(如下图所示),用鼠标点击“Libraries”选项卡,然后,点击界面右侧的“Add External JARs…”按钮。

- 在弹出的“JAR Selection”界面中(如下图所示),进入到“/usr/local/hbase/lib”目录(在
+ Other Locations里找),选中该目录下的所有jar文件(注意,不要选中client-facing-thirdparty、ruby、shaded-clients和zkcli这四个目录),然后,点击界面上方的“Open”按钮。

- 点完Open后会退出去,然后,再点界面右侧的“Add External JARs…”按钮。在“JAR Selection”界面中(如下图所示),点击进入到“client-facing-thirdparty”目录下。

- 全选中再点Open。

- 最后,再点击界面(如下图所示)底部的“Finish”按钮。

📚实验目的
1)理解 HBase 在 Hadoop 体系结构中的角色。
2)熟练使用 HBase 操作常用的 shell 命令。
3)熟悉 HBase 操作常用的 Java API。
📚实验平台
1)操作系统:Linux;
2)Hadoop 版本:3.2.2;
3)HBase 版本:1.2.6;
4)JDK 版本:1.8;
5)Java IDE:Eclipse。
📚实验内容
🐇HBase Shell + 编程命令实现以下指定功能
- 启动Hadoop:
start-dfs.sh- 启动HBase
-cd /usr/local/hbase
-bin/start-hbase.sh- 进入shell界面:
bin/hbase shell
🥕HBase Shell部分
🔔列出 HBase 所有的表的相关信息,例如表名

用HBase Shell创建表时出错,参考解决博客
🔔在终端打印出指定的表的所有记录数据

🔔向已经创建好的表添加和删除指定的列族或列

🔔清空指定的表的所有记录数据

🔔统计表的行数
为更明显,本题是在第4题还没进行的时候截的图

🥕编程实现
package hbase;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.client.ClusterConnection;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException;
import java.util.Scanner;
public class basic_hbase
{public static Configuration configuration;public static Connection connection;public static Admin admin;public static long ts;static Scanner sc=new Scanner(System.in);public static void main(String[] args) throws IOException{while (true){System.out.println("1.列出所有表的信息;");System.out.println("2.打印指定表的所有记录数据;");System.out.println("3.向创建好的表添加或删除指定的列族或列;");System.out.println("4.清空指定表的所有记录数据;");System.out.println("5.统计表的行数;");System.out.println("输入你的选择:");int no=sc.nextInt();if (no==1){First();}else if(no==2){System.out.println("输入你要查询的表:");String tablename=sc.next();Second(tablename);}else if (no==3){System.out.println("请输入要操作的表名");String tablename=sc.next();System.out.println("请输入要操作的表的行键");String rowKey=sc.next();System.out.println("请输入你要操作的列族名:");String colFamily=sc.next();System.out.println("输入你要操作的列名:");String col=sc.next();System.out.println("输入你要操作的参数值:");String val=sc.next();Third(tablename,rowKey,colFamily,col,val);}else if (no==4){System.out.println("输入你要操作的表:");String tablename=sc.next();Fourth(tablename);System.out.println("成功清空!");}else if (no==5){System.out.println("输入你要操作的表:");String tablename=sc.next();fift(tablename);}}}public static void init(){configuration = HBaseConfiguration.create();configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");try{connection = ConnectionFactory.createConnection(configuration);admin = connection.getAdmin();}catch (IOException e){e.printStackTrace();}}public static void close(){try{if(admin != null){admin.close();}if(null != connection){connection.close();}}catch (IOException e){e.printStackTrace();}}public static void First() throws IOException{//列出所有表的信息;init();HTableDescriptor hTableDescriptor[]=admin.listTables();for (HTableDescriptor s:hTableDescriptor ){System.out.println(s.getNameAsString());}close();}public static void Second(String tablename) throws IOException{//打印指定表的所有记录数据;init();Table table=connection.getTable(TableName.valueOf(tablename));Scan scan=new Scan();ResultScanner res=table.getScanner(scan);for (Result result:res){showCell(result);}}public static void Third(String tableName, String row, String column,String c ,String val) throws IOException{//向创建好的表添加或删除指定的列族或列;System.out.println("1、添加列;2、删除列");int no=sc.nextInt();if (no==1){insertRow(tableName,row,column,c,val);}else if (no==2){deleteRow(tableName,row,column,c);}}public static void Fourth(String tablename) throws IOException{//清空指定表的所有记录数据;init();TableName tableName=TableName.valueOf(tablename);admin.disableTable(tableName);admin.deleteTable(tableName);close();}public static void fift(String tablename) throws IOException{//统计表的行数;init();Table table=connection.getTable(TableName.valueOf(tablename));Scan scan=new Scan();ResultScanner scanner=table.getScanner(scan);int n=0;for (Result result=scanner.next();result!=null;result=scanner.next()){n++;}System.out.println("行数有"+n);scanner.close();close();}public static void insertRow(String tableName, String row, String column,String c ,String val) throws IOException {init();Table table=connection.getTable(TableName.valueOf(tableName));Put put=new Put(row.getBytes());put.addColumn(column.getBytes(), c.getBytes(), val.getBytes());table.put(put);System.out.println("成功添加!");table.close();close();}public static void deleteRow(String tableName, String row, String column,String c) throws IOException{init();Table table=connection.getTable(TableName.valueOf(tableName));System.out.println("1、删除列族;2、删除列名");Scanner sc=new Scanner(System.in);int no=sc.nextInt();Delete delete=new Delete(row.getBytes());if (no==1){delete.addFamily(Bytes.toBytes(column));System.out.println("成功删除"+column+"这个列族");}else if(no==2){delete.addColumn(Bytes.toBytes(column), Bytes.toBytes(c));System.out.println("成功删除"+c+"这个列名");}table.delete(delete);table.close();close();}public static void showCell(Result result){Cell[] cells = result.rawCells();for(Cell cell:cells){System.out.println("RowName(行键):"+new String(CellUtil.cloneRow(cell))+" ");System.out.println("Timetamp(时间戳):"+cell.getTimestamp()+" ");System.out.println("column Family(列族):"+new String(CellUtil.cloneFamily(cell))+" ");System.out.println("column Name(列名):"+new String(CellUtil.cloneQualifier(cell))+" ");System.out.println("value:(值)"+new String(CellUtil.cloneValue(cell))+" ");}}
}
🐇HBase 数据库操作
🥕学生表
🔔建学生表

🔔学生表数据添加


🥕课程表
🔔建课程表

🔔课程表数据添加


🥕选课表
🔔建选课表

🔔选课表数据添加


🐇编程实现功能

package hbase;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;
@SuppressWarnings("deprecation")
public class hbase
{public static Configuration configuration;public static Connection connection;public static Admin admin;//建立连接public static void init(){configuration = HBaseConfiguration.create();configuration.set("hbase.rootdir","hdfs://localhost:9000/hbase");try{connection = ConnectionFactory.createConnection(configuration);admin = connection.getAdmin();}catch (IOException e){e.printStackTrace();}}//关闭连接public static void close(){try{if(admin != null){admin.close();}if(null != connection){connection.close();}}catch (IOException e){e.printStackTrace();}}/*** 建表。参数tableName为表的名称,字符串数组fields为存储记录各个域名称的数组。* 要求当HBase已经存在名为tableName的表时,先删除原有的表,然后再创建新的表 field:列族* @param myTableName 表名* @param colFamily 列族名* @throws IOException*/public static void createTable(String tableName,String[] fields) throws IOException {init();TableName tablename = TableName.valueOf(tableName);if(admin.tableExists(tablename)){System.out.println("表已存在,将执行删除原表,重建新表!");admin.disableTable(tablename);admin.deleteTable(tablename);//删除原来的表}HTableDescriptor hTableDescriptor = new HTableDescriptor(tablename);for(String str:fields){HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(str);hTableDescriptor.addFamily(hColumnDescriptor);}admin.createTable(hTableDescriptor);System.out.println("表已创建成功"); close();}/*** 向表 tableName、行 row(用 S_Name 表示)和字符串数组 fields 指定的单元格中添加对应的数据 values。* 其中,fields 中每个元素如果对应的列族下还有相应的列限定符的话,用“columnFamily:column”表示。* 例如,同时向“Math”、“Computer Science”、“English”三列添加成绩时,* 字符串数组 fields 为{“Score:Math”, ”Score:Computer Science”, ”Score:English”},* 数组values 存储这三门课的成绩。*/public static void addRecord(String tableName,String rowKey,String []fields,String [] values) throws IOException {init();Table table = connection.getTable(TableName.valueOf(tableName));for (int i = 0; i < fields.length; i++) {Put put = new Put(rowKey.getBytes());String [] cols = fields[i].split(":");if(cols.length==1){//因为当输入的是单列族,split仅读出一个字符字符串,即cols仅有一个元素put.addColumn(cols[0].getBytes(), "".getBytes(), values[i].getBytes());}else {put.addColumn(cols[0].getBytes(), cols[1].getBytes(), values[i].getBytes());}table.put(put);}table.close();close();}/*** 根据表名查找表信息*/public static void getData(String tableName)throws IOException{init();Table table = connection.getTable(TableName.valueOf(tableName));Scan scan = new Scan();ResultScanner scanner = table.getScanner(scan); for(Result result:scanner){showCell((result));}close();}/*** 格式化输出* @param result*/public static void showCell(Result result){Cell[] cells = result.rawCells();for(Cell cell:cells){System.out.println("RowName(行键):"+new String(CellUtil.cloneRow(cell))+" ");System.out.println("Timetamp(时间戳):"+cell.getTimestamp()+" ");System.out.println("column Family(列族):"+new String(CellUtil.cloneFamily(cell))+" ");System.out.println("column Name(列名):"+new String(CellUtil.cloneQualifier(cell))+" ");System.out.println("value:(值)"+new String(CellUtil.cloneValue(cell))+" ");System.out.println();}}/*** 浏览表 tableName 某一列的数据,如果某一行记录中该列数据不存在,则返回 null。* 要求当参数 column 为某一列族名称时,如果底下有若干个列限定符,则要列出每个列限定符代表的列的数据;* 当参数 column 为某一列具体名称(例如“Score:Math”)时,只需要列出该列的数据。* @param tableName* @param column* @throws IOException*/public static void scanColumn (String tableName,String column) throws IOException{init();Table table = connection.getTable(TableName.valueOf(tableName));Scan scan = new Scan();String [] cols = column.split(":");if(cols.length==1){//如果参数只有一部分,那么就将这个参数作为列族来扫描scan.addFamily(Bytes.toBytes(column));}else {//否则就将这个参数作为具体的列名进行扫描scan.addColumn(Bytes.toBytes(cols[0]),Bytes.toBytes(cols[1]));}ResultScanner scanner = table.getScanner(scan);for (Result result = scanner.next(); result !=null;result = scanner.next()) {//扫描输出showCell(result);}table.close();close();}/*** 修改表 tableName,行 row(可以用学生姓名 S_Name 表示),列 column 指定的单元格的数据。* @throws IOException*/public static void modifyData(String tableName,String rowKey,String column,String value) throws IOException{init();Table table = connection.getTable(TableName.valueOf(tableName));//用rowKey参数设置要插入数据的行键Put put = new Put(rowKey.getBytes());String [] cols = column.split(":");if(cols.length==1){//如果参数只有一部分,则将该部分做为列族名,并设置列名为空字符串put.addColumn(column.getBytes(),"".getBytes() , value.getBytes());//qualifier:列族下的列名}else {//否则第一部分为列族名,第二部分为列名put.addColumn(cols[0].getBytes(),cols[1].getBytes() , value.getBytes());//qualifier:列族下的列名}//将数据插入到表中table.put(put);table.close();close();}/*** 删除表 tableName 中 row 指定的行的记录。根据行键删* @throws IOException*/public static void deleteRow(String tableName,String rowKey) throws IOException{init();Table table = connection.getTable(TableName.valueOf(tableName));//使用rowKey参数设置要删除数据的行键Delete delete = new Delete(rowKey.getBytes());table.delete(delete);table.close();close();}/*** @param args* @throws IOException*/public static void main(String[] args) throws IOException {// TODO Auto-generated method stubhbase test_Two = new hbase();boolean flag =true;while(flag){System.out.println("------------------------------------------------提供以下功能----------------------------------------------");System.out.println(" 1- createTable(创建表,提供表名、列族名) ");System.out.println(" 2- addRecord(向已知表名、行键、列簇的表添加值) ");System.out.println(" 3- ScanColumn(浏览表某一列的数据) ");System.out.println(" 4- modifyData(修改某表行,某一列,指定的单元格的数据) ");System.out.println(" 5- deleteRow(删除某表某行的记录) ");System.out.println("------------------------------------------------------------------------------------------------------------------");Scanner scan = new Scanner(System.in);String choose1=scan.nextLine();switch (choose1) {case "1":{System.out.println("请输入要创建的表名");String tableName=scan.nextLine();System.out.println("请输入要创建的表的列族个数");int Num=scan.nextInt();String [] fields = new String[Num];System.out.println("请输入要创建的表的列族");for(int i=0;i< fields.length;i++){scan = new Scanner(System.in);fields[i]=scan.nextLine();}System.out.println("正在执行创建表的操作");test_Two.createTable(tableName,fields);break;}case "2":{System.out.println("请输入要添加数据的表名");String tableName=scan.nextLine();System.out.println("请输入要添加数据的表的行键");String rowKey=scan.nextLine();System.out.println("请输入要添加数据的表的列的个数");int num =scan.nextInt();String fields[]=new String[num];System.out.println("请输入要添加数据的表的列信息 共"+num+"条信息");for(int i=0;i< fields.length;i++){BufferedReader in3= new BufferedReader(new InputStreamReader(System.in));fields[i] = in3.readLine();}System.out.println("请输入要添加的数据信息 共"+num+"条信息");String values[]=new String[num];for(int i=0;i< values.length;i++){BufferedReader in2 = new BufferedReader(new InputStreamReader(System.in));values[i] = in2.readLine();}System.out.println("原表信息");test_Two.getData(tableName);System.out.println("正在执行向表中添加数据的操作........\n");test_Two.addRecord(tableName, rowKey, fields, values);System.out.println("\n添加后的表的信息........");test_Two.getData(tableName);break;}case "3":{System.out.println("请输入要查看数据的表名");String tableName=scan.nextLine();System.out.println("请输入要查看数据的列名");String column=scan.nextLine();System.out.println("查看的信息如下:........\n");test_Two.scanColumn(tableName, column);break;}case "4":{System.out.println("请输入要修改数据的表名");String tableName=scan.nextLine();System.out.println("请输入要修改数据的表的行键");String rowKey=scan.nextLine();System.out.println("请输入要修改数据的列名");String column=scan.nextLine();System.out.println("请输入要修改的数据信息 ");String value=scan.nextLine();System.out.println("原表信息如下:........\n");test_Two.getData(tableName);System.out.println("正在执行向表中修改数据的操作........\n");test_Two.modifyData(tableName, rowKey, column, value);System.out.println("\n修改后的信息如下:........\n");test_Two.getData(tableName);break;}case "5":{System.out.println("请输入要删除指定行的表名");String tableName=scan.nextLine();System.out.println("请输入要删除指定行的行键");String rowKey=scan.nextLine();System.out.println("原表信息如下:........\n");test_Two.getData(tableName);System.out.println("正在执行向表中删除数据的操作........\n");test_Two.deleteRow(tableName, rowKey);System.out.println("\n删除后的信息如下:........\n");test_Two.getData(tableName);break;}default:{System.out.println(" 你的操作有误 !!! ");break;}}System.out.println(" 你要继续操作吗? 是-true 否-false ");flag=scan.nextBoolean();}System.out.println(" 程序已退出! ");}
}
相关文章:
大数据 | 实验一:大数据系统基本实验 | 熟悉常用的HBase操作
文章目录 📚HBase安装🐇安装HBase🐇伪分布式模式配置🐇测试运行HBase🐇HBase java API编程环境配置 📚实验目的📚实验平台📚实验内容🐇HBase Shell 编程命令实现以下指定…...
Linux command(split)
原理 在split.c中,首先处理传递给split命令的参数,包括需要拆分的文件、拆分大小/行数等选项。然后,通过调用open()函数打开需要拆分的文件,并获取文件信息。接着根据选项计算每个拆分文件的大小/行数,并根据需要创建输…...
开放式耳机好用吗,盘点几款口碑不错的开放式耳机
开放式耳机作为一种全新的耳机形态,已经成为了当前市场上非常火爆的一款产品。由于无需入耳佩戴,可以很好的避免了耳膜受到损伤,而且也能够让我们在佩戴眼镜时也能够正常使用。加上开放式耳机的音质和舒适度都要优于其他类型的耳机…...
法规标准-ISO 16787标准解读
ISO 16787是做什么的? ISO 16787全称为智能运输系统-辅助泊车系统(APS)-性能要求和测试程序,其中主要描述了对APS系统的功能要求及测试规范 APS类型 根据目标停车位类型将APS系统分为两类: 1)APS类型I&a…...
脑力劳动-英文单词
标题 前言必学场景词汇及用法会议简报电话出差市场调研广告与媒介电脑情境常用单词会议简报电话市场调研广告与媒介电脑前言 加油 必学场景词汇及用法 会议 1meeting [ˈmitɪŋ] n.会议hold / have / call off a meeting举办/取消会议be in a meeting在开会The meeting w…...
机器学习中的三个重要环节:训练、验证、测试
本文重点 模型训练、验证和测试是机器学习中的三个重要环节。这三个环节之间存在着紧密的关系,它们相互作用,共同构建出一个完整的机器学习模型。在本文中,我们将详细介绍模型训练、验证和测试之间的关系。 模型训练、验证和测试之间的关系 模型训练是机器学习中最基本的…...
机器学习实战:Python基于LDA线性判别模型进行分类预测(五)
文章目录 1 前言1.1 线性判别模型的介绍1.2 线性判别模型的应用 2 demo数据演示2.1 导入函数2.2 训练模型2.3 预测模型 3 LDA手写数字数据演示3.1 导入函数3.2 导入数据3.3 输出图像3.4 建立模型3.5 预测模型 4 讨论 1 前言 1.1 线性判别模型的介绍 线性判别模型(…...
Java枚举(Enum)
枚举(enum) enum全称enumeration,JDK 1.5中引入的新特性。在Java中,被enum关键字修饰的类型就是枚举类型 可以将枚举看成一个类,它继承于java.lang.enum类,当定义一个枚举类型时,每一个枚举类型…...
【Python】【进阶篇】二十一、Python爬虫的多线程爬虫
目录 二十一、Python爬虫的多线程爬虫21.1 多线程使用流程21.2 Queue队列模型21.3 多线程爬虫案例1) 案例分析2) 完整程序 二十一、Python爬虫的多线程爬虫 网络爬虫程序是一种 IO 密集型程序,程序中涉及了很多网络 和 本地磁盘的 IO 操作,这会消耗大…...
Python从入门到精通14天(eval、literal_eval、exec函数的使用)
eval、literal_eval、exec函数的使用 eval函数literal_eval函数exec函数三者的区别 eval函数 eval()是Python中的内置函数,它可以将一个字符串作为参数,并将该字符串作为Python代码执行。它的语法格式为:eval(expression,globalsNone,locals…...
队列的基本操作(C语言链表实现)初始化,入队,出队,销毁,读取数据
文章目录 前言一、队列基本变量的了解二、队列的基本操作2.1队列的初始化(QueueInit)2.2入队(QueuePush)2.3判断是否为空队(QueueEmpty)2.4出队(QueuePop)2.5队列的队头数据…...
项目支付接入支付宝【沙箱环境】
前言 订单支付接入支付宝,使用支付宝提供的沙箱机制模拟为订单付款。我这里主要记录一下沙箱环境如何接入到系统中,具体细节的实现。按照官方文档来就可以了。 1、使用步骤 这里有几个重要数据要拿到,一个是支付宝的公钥和私钥,…...
程序员应该如何提升自己
作为一名程序员,以下是您可以考虑的一些方法来提高自己的技能和知识: 深入学习编程语言和相关工具:了解您使用的编程语言和相关工具的基本原理和高级特性,以便更好地理解其工作方式并更有效地使用它们。 刻意练习:刻意…...
全球上线!ABB中国涡轮增压器分拆 – 数据清理阶段完成
ABB是数字行业的技术前沿者,拥有四项主营业务:电气化,工业自动化,运动控制以及机器人和离散自动化。ABB总部位于瑞士苏黎世,业务遍及100多个国家,拥有约105,000名员工。2021年,该公司…...
手写简易 Spring(三)
文章目录 三. 手写简易 Spring(三)1. Bean 对象初始化和销毁方法1. XML 添加 init-method 与实现 InitializingBean 接口注册初始化2. XML 添加 destroy-method 与实现 DisposableBean 接口注册销毁3. DefaultSingletonBeanRegistry 优秀的解耦方法 2. 定…...
设计模式-看懂UML类图和时序图
这里不会将UML的各种元素都提到,只讲类图中各个类之间的关系; 能看懂类图中各个类之间的线条、箭头代表什么意思后,也就足够应对 日常的工作和交流; 同时,应该能将类图所表达的含义和最终的代码对应起来; 1…...
2023年全国最新安全员精选真题及答案57
百分百题库提供安全员考试试题、建筑安全员考试预测题、建筑安全员ABC考试真题、安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 101.(单选题)遇有()及以上强风、浓雾等…...
数字图像处理基础
图像增强:不论方法,只要能够得到较好的图像即可 图像复原:找到图像退化的原因,把噪声过滤得到较好的图像 RGB——HSI(色调 饱和度 亮度)彩色图像处理需要用到灰度图像处理 直方图均衡,灰度概率密度函数接近均匀分布&a…...
onnx手动操作
使用onnx.helper可以进行onnx的制造组装操作: 对象描述ValueInfoProto 对象张量名、张量的基本数据类型、张量形状算子节点信息 NodeProto算子名称(可选)、算子类型、输入和输出列表(列表元素为数值元素)GraphProto对象用张量节点和算子节点组成的计算图对象ModelP…...
虚拟机安装Centos7,ping不通百度
虚拟机安装Centos7,ping不通百度 一、虚拟机网络配置 网络适配器选择桥接模式,不勾选复制物理网络连接状态。 同时虚拟机使用默认配置都是桥接。 二、配置静态IP 1、首先,查看宿主机的IP和网关 2、配置静态ip的文件地址及修改命令如下&…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 原创笔记:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:《数据结构第4章 数组和广义表》…...
针对药品仓库的效期管理问题,如何利用WMS系统“破局”
案例: 某医药分销企业,主要经营各类药品的批发与零售。由于药品的特殊性,效期管理至关重要,但该企业一直面临效期问题的困扰。在未使用WMS系统之前,其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...
文件上传漏洞防御全攻略
要全面防范文件上传漏洞,需构建多层防御体系,结合技术验证、存储隔离与权限控制: 🔒 一、基础防护层 前端校验(仅辅助) 通过JavaScript限制文件后缀名(白名单)和大小,提…...


