总结
一般像这样的大企业都有好几轮面试,所以自己一定要花点时间去收集整理一下公司的背景,公司的企业文化,俗话说「知己知彼百战不殆」,不要盲目的去面试,还有很多人关心怎么去跟HR谈薪资。
这边给大家一个建议,如果你的理想薪资是30K,你完全可以跟HR谈33~35K,而不是一下子就把自己的底牌暴露了出来,不过肯定不能说的这么直接,比如原来你的公司是25K,你可以跟HR讲原来的薪资是多少,你们这边能给到我的是多少?你说我这边希望可以有一个20%涨薪。
最后再说几句关于招聘平台的,总之,简历投递给公司之前,请确认下这家公司到底咋样,先去百度了解下,别被坑了,每个平台都有一些居心不良的广告党等着你上钩,千万别上当!!!
Java架构学习资料,学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。
还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书。
// 创建表
Admin admin = connection.getAdmin();
admin.createTable(tableDescriptorBuilder.build());
admin.close();
// 获取表实例
Table table = connection.getTable(tableName);
// 插入数据
Put put = new Put(Bytes.toBytes(“row1”));
put.addColumn(columnFamily, Bytes.toBytes(“col1”), Bytes.toBytes(“value1”));
table.put(put);
// 查询数据
Get get = new Get(Bytes.toBytes(“row1”));
Result result = table.get(get);
byte[] value = result.getValue(columnFamily, Bytes.toBytes(“col1”));
System.out.println("Value: " + Bytes.toString(value));
// 删除数据
Delete delete = new Delete(Bytes.toBytes(“row1”));
table.delete(delete);
// 关闭连接
table.close();
connection.close();
}
}
这个示例演示了如何使用HBase的Java API来创建一个名为"my\_table"的表,插入一条数据(行键为"row1",列族为"cf",列限定符为"col1",值为"value1"),然后查询并打印出该数据的值,并最后删除该数据。注意,这只是一个简单的示例,实际使用中可能会涉及更复杂的操作和更多的配置选项。
1. 与相关相似主题的异同点:
HBase Java API是访问HBase数据库的主要方式之一。除了HBase Java API外,还有其他一些API可以用于访问HBase,例如REST API、Thrift API和Avro API等。这里我们主要横向比较HBase Java API与REST API和Thrift API的异同点。
异同点如下:
1. 语言支持:HBase Java API是Java编写的,而REST API和Thrift API可以使用多种语言编写,包括Java、Python、Ruby等。这使得REST API和Thrift API更加灵活,适合多语言开发团队。
2. 性能:HBase Java API直接调用HBase内部的Java代码,因此性能更高。而REST API和Thrift API需要将请求解析为HTTP或Thrift协议,并且需要进行序列化和反序列化操作,因此性能相对较低。
3. 功能支持:HBase Java API支持HBase的所有功能,包括表管理、数据插入、查询、更新和删除等。而REST API和Thrift API不支持所有功能,有一些高级功能只能通过Java API实现。
4. 开发难度:HBase Java API是封装HBase操作最为方便的方法,但对于初学者来说,可能需要花费时间学习Java API的使用方法。而REST API和Thrift API使用简单,只需要发送HTTP或Thrift请求并解析响应即可,对于初学者更为友好。
5. 安全性:REST API和Thrift API支持基于Kerberos的安全认证,可以在客户端和服务器端之间进行安全认证。而HBase Java API需要通过配置文件来实现安全认证,可能需要更多的工作量。
相同点如下:
1. 访问HBase:无论是HBase Java API、REST API还是Thrift API,它们都提供了访问HBase数据库的能力。
2. 数据操作:这三种API都支持对HBase表进行数据的插入、查询、更新和删除等操作。
3. 并发性:无论是HBase Java API、REST API还是Thrift API,它们都可以处理多个并发请求。
4. 跨平台支持:这三种API都可以在不同的操作系统上运行,并且可以与各种编程语言进行集成和使用。
5. 扩展性:这三种API都具有良好的扩展性,可以根据需要进行自定义开发和优化。
总体上来说,HBase Java API是最为直接、方便且功能最为丰富的访问HBase的方式之一。但对于不同的开发团队和应用场景,选择最适合自己的API也很重要。
* 实验情况
1)实验环境描述:
为了使用HBase Java API进行实验,您需要设置以下环境:
1. Java开发环境:确保您已经安装了Java Development Kit (JDK)。建议使用最新版本的JDK。
2. HBase依赖库:您需要下载HBase的Java客户端库并将其添加到您的项目中。您可以从HBase的官方网站或Maven仓库获取HBase的Java客户端库。
![](https://img-blog.csdnimg.cn/direct/5dfbb1a99b4e4dbcb028505428385cc3.png)
3. Hadoop集群:HBase是建立在Hadoop之上的分布式数据库,因此您需要配置一个可用的Hadoop集群以供HBase使用。您可以使用Hadoop的单节点模式进行开发和测试,也可以配置一个多节点的Hadoop集群。
4. HBase配置文件:HBase有一些配置文件,您需要根据您的环境进行相应的配置。主要的配置文件包括`hbase-site.xml`、`hbase-env.sh`和`regionservers`。您需要根据您的Hadoop集群配置修改这些文件。
5. HBase表的创建:在使用HBase Java API之前,您需要在HBase中创建表并定义列族。您可以使用HBase shell或HBase管理界面(如Hue)来创建表,或者使用HBase Java API动态创建表。
| |
| --- |
| |
| | |
| |
| --- |
| |
| | |
6. Java代码编写:最后,您需要使用Java编写代码来连接HBase集群、执行操作。您可以使用HBase提供的Java API来进行连接、插入、查询等操作。确保您已经导入了相关的类和方法,并按照API文档进行操作。
这些是使用HBase Java API进行实验的基本环境要求和步骤。根据您的具体需求,可能还需要进行其他配置和操作。请参考HBase官方文档以获取更详细的信息和示例代码。
2)实验过程:
以下是使用HBase Java AP创建表格,删除表格并判断表格是否存在的过程:
public static boolean isTableExists(String namespace,String tableName) throws IOException {
// 1. 获取 admin
Admin admin = connection.getAdmin();
// 2. 使用方法判断表格是否存在
boolean b = false;
try {
b = admin.tableExists(TableName.valueOf(namespace, tableName));
} catch (IOException e) {
e.printStackTrace();
| |
| --- |
| |
| | |
}
// 3. 关闭 admin
admin.close();
// 3. 返回结果
return b;
// 后面的代码不能生效
}
//创建表格 namespace:命名空间名称 tableName:表
名 columnFamilies:列族名
public static void createTable(String namespace , String tableName , String… columnFamilies) throws IOException {
// 判断是否有至少一个列族
if (columnFamilies.length == 0){
System.out.println(“创建表格至少有一个列族”);
return;
}
// 判断表格是否存在
if (isTableExists(namespace,tableName)){
System.out.println(“表格已经存在”);
return;
}
// 1.获取 admin
Admin admin = connection.getAdmin();
// 2. 调用方法创建表格
// 2.1 创建表格描述的建造者
TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf(namespace, tableName));
// 2.2 添加参数
for (String columnFamily : columnFamilies) {
// 2.3 创建列族描述的建造者
ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(columnFamily));
// 2.4 对应当前的列族添加参数
// 添加版本参数
columnFamilyDescriptorBuilder.setMaxVersions(5);
// 2.5 创建添加完参数的列族描述
tableDescriptorBuilder.setColumnFamily(columnFamilyDescriptorBuilder.build());
}
// 2.6 创建对应的表格描述
try {
admin.createTable(tableDescriptorBuilder.build());
| |
| --- |
| |
| | |
} catch (IOException e) {
e.printStackTrace();
}
// 3. 关闭 admin
admin.close();
}
//修改表格 namespace:命名空间名称 tableName:表名 columnFamily:列族名 version:版本号
public static void modifyTable(String namespace ,String tableName,String columnFamily,int version) throws IOException {
// 判断表格是否存在
if (!isTableExists(namespace,tableName)){
System.out.println(“表格不存在无法修改”);
return;
}
// 1. 获取 admin
Admin admin = connection.getAdmin();
try {
// 2. 调用方法修改表格
// 2.0 获取之前的表格描述
TableDescriptor descriptor =
admin.getDescriptor(TableName.valueOf(namespace, tableName));
// 2.1 创建一个表格描述建造者
// 如果使用填写 tableName 的方法 相当于创建了一个新的表格描述建造者 没有之前的信息
// 如果想要修改之前的信息 必须调用方法填写一个旧的表格描述
TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(descriptor);
// 2.2 对应建造者进行表格数据的修改
ColumnFamilyDescriptor columnFamily1 = descriptor.getColumnFamily(Bytes.toBytes(columnFamily));
// 创建列族描述建造者
// 需要填写旧的列族描述
ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(columnFamily1);
// 修改对应的版本
columnFamilyDescriptorBuilder.setMaxVersions(version);
// 此处修改的时候 如果填写的新创建 那么别的参数会初始化
tableDescriptorBuilder.modifyColumnFamily(columnFamilyDescriptorBuilder.build());
admin.modifyTable(tableDescriptorBuilder.build());
} catch (IOException e) {
e.printStackTrace();
}
// 3. 关闭 admin
admin.close();
}
| |
| --- |
| |
| | |
//删除表格 namespace:命名空间名称 tableName:表名 返回值:是否删除成功
public static boolean deleteTable(String namespace ,String tableName) throws IOException {
// 1. 判断表格是否存在
if (!isTableExists(namespace,tableName)){
System.out.println(“表格不存在 无法删除”);
return false;
}
// 2. 获取 admin
Admin admin = connection.getAdmin();
// 3. 调用相关的方法删除表格
try {
// HBase 删除表格之前 一定要先标记表格为不可以
TableName tableName1 = TableName.valueOf(namespace, tableName);
admin.disableTable(tableName1);
admin.deleteTable(tableName1);
} catch (IOException e) {
e.printStackTrace();
}
// 4. 关闭 admin
admin.close();
return true;
}
| |
| --- |
| |
| | |
1. 实验结果分析
通过对HBase Java API的使用,我们可以得出以下结论:
1. 创建HBase表格:
- 首先,我们需要创建一个HBase配置对象和连接对象。
### 最后
**Java架构进阶面试及知识点文档笔记**
> **这份文档共498页,其中包括Java集合,并发编程,JVM,Dubbo,Redis,Spring全家桶,MySQL,Kafka等面试解析及知识点整理**
![image](https://img-blog.csdnimg.cn/img_convert/d175854dd054b0a757d81042924b421c.webp?x-oss-process=image/format,png)
**Java分布式高级面试问题解析文档**
**其中都是包括分布式的面试问题解析,内容有**分布式消息队列,Redis缓存,分库分表,微服务架构,分布式高可用,读写分离等等!
![image](https://img-blog.csdnimg.cn/img_convert/7f51350462b8cb612b28c80346ef6fb9.webp?x-oss-process=image/format,png)
**互联网Java程序员面试必备问题解析及文档学习笔记**
![image](https://img-blog.csdnimg.cn/img_convert/e86c3673eae5196c134171531975557f.webp?x-oss-process=image/format,png)
**Java架构进阶视频解析合集**
> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**
**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
,内容有**分布式消息队列,Redis缓存,分库分表,微服务架构,分布式高可用,读写分离等等!
[外链图片转存中...(img-rvr5ueE1-1715059222427)]
**互联网Java程序员面试必备问题解析及文档学习笔记**
[外链图片转存中...(img-fQqJXZI6-1715059222428)]
**Java架构进阶视频解析合集**
> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**
**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**