HBase-API

2023-05-16

目录

引入的依赖

创建连接

命名空间


引入的依赖

    <dependencies>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>2.4.11</version>
            <exclusions>
                <exclusion>
                    <artifactId>javax.el</artifactId>
                    <groupId>org.glassfish</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.glassfish</groupId>
            <artifactId>javax.el</artifactId>
            <version>3.0.1-b06</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-common</artifactId>
            <version>2.4.11</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-common</artifactId>
            <version>2.4.11</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.10.0</version>
        </dependency>
    </dependencies>

创建连接

单线程使用连接

conf.set的配置信息具体跟本地hosts文件中的配置有关

public class HBaseConnection {
    public static void main(String[] args) throws IOException {
        //1.创建连接配置对象
        Configuration conf = new Configuration();
        //2.添加配置参数 zookeeper地址
        conf.set("hbase.zookeeper.quorum","node1,node2,node3");
        //3.创建连接,默认使用同步连接
        Connection connection = ConnectionFactory.createConnection(conf);
        //也可以使用异步连接
        //CompletableFuture<AsyncConnection> asyncConnection = ConnectionFactory.createAsyncConnection();
        //4.使用连接
        System.out.println(connection);
        //5.关闭连接
        connection.close();
    }
}

在创建连接时,由于该连接是重量级的,创建时最好创建一个,所以当多个线程使用连接时,需要只创建一个连接,采用单例的模式

多线程使用连接

public class HBaseConnection2 {
    public static Connection connection = null;
    static {
        //1.创建连接配置对象
        Configuration conf = new Configuration();
        //2.添加配置参数 zookeeper地址
        conf.set("hbase.zookeeper.quorum","node1,node2,node3");
        //3.创建连接,默认使用同步连接
        try {
            connection = ConnectionFactory.createConnection(conf);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void closeConnection(){
        if(connection != null) {
            try {
                connection.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args) {
        //4.使用连接
        System.out.println(HBaseConnection2.connection);
        HBaseConnection2.closeConnection();
    }
}

命名空间

public class HBaseDDL {
    public static Connection connection = HBaseConnection2.connection;
    public static void createNameSpace(String namespace) throws IOException {
        //1.获取admin,admin是轻量级,不是线程安全的,不推荐池化或缓存这个连接
        //连接出现问题不属于createNameSpace的问题,应该抛出
        Admin admin = connection.getAdmin();
        //2.调用方法,创建命名空间
        //2.1 创建命名空间描述,利用了建造者模式,拓展丰富了构造器
        NamespaceDescriptor.Builder builder = NamespaceDescriptor.create(namespace);
        //2.2 给命名空间添加需求,就是命名空间的描述
        builder.addConfiguration("user","zz");
        //2.3 使用builder构造出对应的添加完参数的对象  完成创建
        //创建命名空间出现的问题,都属于本方法自身的问题,不应该抛出
        try {
            admin.createNamespace(builder.build());
        } catch (IOException e) {
            System.out.println("命名空间已经存在");
            e.printStackTrace();
        }
        //3关闭admin
        try {
            admin.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) throws IOException {
        HBaseDDL.createNameSpace("company");
        HBaseConnection2.closeConnection();
    }
}

判断表是否存在

//判断表格是否存在
    public static boolean isTableExists(String namespace,String tableName) throws IOException {
        //1.获取admin 连接的异常不属于该方法所以抛出
        Admin admin = connection.getAdmin();
        //2.使用方法判断表格是否存在,该异常是属于该方法,所以try起来
        boolean b = false;
        try {
            b = admin.tableExists(TableName.valueOf(namespace,tableName));
        } catch (IOException e) {
            e.printStackTrace();
        }
        //3.关闭admin
        admin.close();
        //4.返回结果
        return b;
    }
    public static void main(String[] args) throws IOException {
        System.out.println(isTableExists("bigdata","student"));
    }

创建表

//创建表格
    public static void createTable(String namespace,String tableName,String... columnFamilys) throws IOException {
        //判断是否至少有一个列族
        if(columnFamilys.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 : columnFamilys){
            //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) {
            System.out.println("表格已经存在");
            e.printStackTrace();
        }
        //3.关闭admin
        admin.close();
    }
    public static void main(String[] args) throws IOException {
        createTable("company","worker","info","msg");
    }

修改表格

    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.1获取之前的表格描述 :先获取描述,再获取建造者,再根据建造者获取表格对象
            TableDescriptor tableDescriptor = admin.getDescriptor(TableName.valueOf(namespace, tableName));
            TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(tableDescriptor);
            //2.2获取旧的列族描述
            ColumnFamilyDescriptor columnFamilyDescriptor = tableDescriptor
                    .getColumnFamily(Bytes.toBytes(columnFamily));
            ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder
                    .newBuilder(columnFamilyDescriptor);
            //修改对应信息
            columnFamilyDescriptorBuilder.setMaxVersions(version);
            //将修改后的列族赋给旧的表格
            tableDescriptorBuilder.modifyColumnFamily(columnFamilyDescriptorBuilder.build());
            //3.修改版本数
            admin.modifyTable(tableDescriptorBuilder.build());
        } catch (IOException e) {
            e.printStackTrace();
        }
        //4.关闭admin
        admin.close();
    }
    public static void main(String[] args) throws IOException {
        modifyTable("company","worker","info",6);
    }

删除表格

    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 {
            //删除表格之前,先标记表格为不可用
            TableName tableName1 = TableName.valueOf(namespace, tableName);
            admin.disableTable(tableName1);
            admin.deleteTable(tableName1);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //4.关闭admin
        admin.close();
        return true;
    }

数据

写入数据

public class HBaseDML {
    public static Connection connection = HBaseConnection2.connection;

    public static void putCell(String namespace,String tableName,
                               String rowKey,String columnFamily,
                               String columnName,String value) throws IOException {
        //1.获取Table
        Table table = connection.getTable(TableName.valueOf(namespace, tableName));
        //2.调用相关方法插入数据
        //2.1创建put对象
        Put put = new Put(Bytes.toBytes(rowKey));
        //2.2给put对象添加数据
        put.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(columnName),Bytes.toBytes(value));
        //2.3将对象写入方法
        try {
            table.put(put);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //3.关闭table
        table.close();
    }

    public static void main(String[] args) throws IOException {
        putCell("bigdata","student","1005","info","age","100");
        HBaseConnection2.closeConnection();
    }

读取数据

get

用get读取数据只能读取一行

public static void getCells(String namespace,String tableName,
                                String rowKey,String columnFamily,
                                String columnName) throws IOException {
        //1.获取table
        Table table = connection.getTable(TableName.valueOf(namespace,tableName));
        //2.创建get对象
        Get get = new Get(Bytes.toBytes(rowKey));
        //3.如果直接调用get方法读取数据 此时读取一整行数据
        //如果读取某几列需要增加参数
        get.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(columnName));
        //设置读取的版本
        get.readAllVersions();
        Result result = null;
        try {
            //4.获取并处理数据
            result = table.get(get);
            Cell[] cells = result.rawCells();
            for(Cell cell:cells){
                String value = new String(CellUtil.cloneValue(cell));
                System.out.println(value);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        //5.关闭table
        table.close();

    }
    public static void main(String[] args) throws IOException {
        getCells("bigdata","student","1005","info","age");
        HBaseConnection2.closeConnection();
    }

scan

    public static void scanRows(String namespace,String tableName,String startRow,String stopRow) throws IOException {
        //1.获取table
        Table table = connection.getTable(TableName.valueOf(namespace,tableName));
        //2.创建scan对象
        Scan scan = new Scan();
        //如果不写这一句就扫描整张表
        scan.withStartRow(Bytes.toBytes(startRow)).withStopRow(Bytes.toBytes(stopRow));
        //3.读取多行数据,Result记录一行数据,ResultScanner记录多行数据,Result是cell的数组,ResultScanner是Result的数据
        ResultScanner resultScanner = null;
        try {
            resultScanner = table.getScanner(scan);
            for (Result result : resultScanner) {
                Cell[] cells = result.rawCells();
                for(Cell cell:cells){
                    System.out.println(new String(CellUtil.cloneRow(cell))+"-"
                            +new String(CellUtil.cloneFamily(cell))+"-"
                            +new String(CellUtil.cloneQualifier(cell))+"-"
                            +new String(CellUtil.cloneValue(cell)));
                }
                System.out.println();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        //4.关闭table
        table.close();
    }
    public static void main(String[] args) throws IOException {
        scanRows("bigdata","student","1001","1004");
        HBaseConnection2.closeConnection();
    }

scan之单列过滤扫描

输出多行数据的某一列,并且这些行中可以按值去筛选,选中从startRow到stopRow的所有行的columnName的列的内容,再根据value进行筛选

    public static void filterScan(String namespace,String tableName,
                                String startRow,String stopRow,
                                String columnFamily,String columnName,
                                String value) throws IOException {
        //1.获取table
        Table table = connection.getTable(TableName.valueOf(namespace,tableName));
        //2.创建scan对象
        Scan scan = new Scan();
        //如果不写这一句就扫描整张表
        scan.withStartRow(Bytes.toBytes(startRow)).withStopRow(Bytes.toBytes(stopRow));
        //可以添加多个过滤器
        FilterList filterList = new FilterList();
        //创建过滤器
        //(1)结果只保留当前列的数据
        ColumnValueFilter columnValueFilter = new ColumnValueFilter(
                //列族名称
                Bytes.toBytes(columnFamily),
                //列名
                Bytes.toBytes(columnName),
                //比较关系
                CompareOperator.EQUAL,
                //值
                Bytes.toBytes(value)
        );
        filterList.addFilter(columnValueFilter);
        scan.setFilter(filterList);
        //3.读取多行数据,Result记录一行数据,ResultScanner记录多行数据,Result是cell的数组,ResultScanner是Result的数据
        ResultScanner resultScanner = null;
        try {
            resultScanner = table.getScanner(scan);
            for (Result result : resultScanner) {
                Cell[] cells = result.rawCells();
                for(Cell cell:cells){
                    System.out.println(new String(CellUtil.cloneRow(cell))+"-"
                            +new String(CellUtil.cloneFamily(cell))+"-"
                            +new String(CellUtil.cloneQualifier(cell))+"-"
                            +new String(CellUtil.cloneValue(cell)));
                }
                System.out.println();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        //4.关闭table
        table.close();
    }

    public static void main(String[] args) throws IOException {
        filterScan("bigdata","student",
                "1001","1005",
                "info","name",
                "wangwu");
        HBaseConnection2.closeConnection();
    }

scanf之整行过滤扫描

跟上面过滤的区别是:假设某行数据没有我们指定的columnFamily和columnName,那么该行数据也会作为结果保留下来

    public static void filterScan(String namespace,String tableName,
                                String startRow,String stopRow,
                                String columnFamily,String columnName,
                                String value) throws IOException {
        //1.获取table
        Table table = connection.getTable(TableName.valueOf(namespace,tableName));
        //2.创建scan对象
        Scan scan = new Scan();
        //如果不写这一句就扫描整张表
        scan.withStartRow(Bytes.toBytes(startRow)).withStopRow(Bytes.toBytes(stopRow));
        //可以添加多个过滤器
        FilterList filterList = new FilterList();
        //创建过滤器
        //(1)结果只保留当前列的数据
        ColumnValueFilter columnValueFilter = new ColumnValueFilter(
                //列族名称
                Bytes.toBytes(columnFamily),
                //列名
                Bytes.toBytes(columnName),
                //比较关系
                CompareOperator.EQUAL,
                //值
                Bytes.toBytes(value)
        );
        //(2)结果保留整行数据
        SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter(
                //列族名称
                Bytes.toBytes(columnFamily),
                //列名
                Bytes.toBytes(columnName),
                //比较关系
                CompareOperator.EQUAL,
                //值
                Bytes.toBytes(value)
        );
        filterList.addFilter(singleColumnValueFilter);
        scan.setFilter(filterList);
        //3.读取多行数据,Result记录一行数据,ResultScanner记录多行数据,Result是cell的数组,ResultScanner是Result的数据
        ResultScanner resultScanner = null;
        try {
            resultScanner = table.getScanner(scan);
            for (Result result : resultScanner) {
                Cell[] cells = result.rawCells();
                for(Cell cell:cells){
                    System.out.println(new String(CellUtil.cloneRow(cell))+"-"
                            +new String(CellUtil.cloneFamily(cell))+"-"
                            +new String(CellUtil.cloneQualifier(cell))+"-"
                            +new String(CellUtil.cloneValue(cell)));
                }
                System.out.println();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        //4.关闭table
        table.close();
    }

    public static void main(String[] args) throws IOException {
        filterScan("bigdata","student",
                "1001","1005",
                "info","name",
                "wangwu");
        HBaseConnection2.closeConnection();
    }

删除数据

删除某一列数据

    public static void deleteColumn(String namespace,String tableName,
                                    String rowKey,String columnFamily,
                                    String columnName) throws IOException {
        //1.获取table
        Table table = connection.getTable(TableName.valueOf(namespace,tableName));
        //2.获取delete对象
        Delete delete  = new Delete(Bytes.toBytes(rowKey));
        //添加列信息,删除一个版本
        //delete.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(columnName));
        //删除所有版本
        delete.addColumns(Bytes.toBytes(columnFamily),Bytes.toBytes(columnName));
        try {
            table.delete(delete);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //3.关闭table
        table.close();
    }
    public static void main(String[] args) throws IOException {
        deleteColumn("bigdata","student","1002","info","name");
        HBaseConnection2.closeConnection();
    }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HBase-API 的相关文章

  • 使用 Swagger 的 Spring REST API 文档 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个可以帮助我生成 RESTful API 文档的工具 我的服务器是用Java编写的并使用S
  • 如何通过Grape API获取路由

    我使用 gem grape 作为 api 我尝试通过命令获取 api urlrake grape routes namespace grape do desc routes task routes gt environment do API
  • 将 Hbase 与 PHP 集成 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经安装了 Hbase 现在我正在寻找一些 PHP 库来将 hbase 与 PHP 集成 我尝试了 2 个库 第一个是我尝试与 th
  • Google BigQuery 与 PHP 集成

    我需要帮助将 google bigquery 代码集成到 PHP 中 所以我可以从 php 代码本身执行查询和其他类型的操作 需要您的帮助并建议我一些工作示例链接 提前致谢 这是一段代码 正确地创建一个Google Client using
  • 如何在使用 Piwik 进行分析的页面上显示点击/访问计数器

    我想在主页上显示当天的访问量 该页面由 Piwik 跟踪 如何将 API 与 PHP 结合使用来获取今天的 唯一 访问量和点击量 以便我可以将它们显示在页面上的某个位置 result file get contents http mysit
  • 从纬度经度查找时区[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何库 或者更好的网络服务 可以将纬度 经度转换为时区 对于我正在从事的一个项目 我相当深入地研究
  • RabbitMQ HTTP API 请求 401 未经授权

    我正在尝试访问 RabbitMQ Rest 但收到 401 未经授权的错误 我想访问队列信息并获取消息编号 我发现这是一个解决方案 DefaultHttpClient httpClient new DefaultHttpClient Htt
  • 通过 C# 访问 Google 拼写/建议 API [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想在我正在开发的应用程序中使用 Google 的拼写纠正 建议 我用 google 搜索过 但发现的只是 Google 取消的 SO
  • 访问应用程序,带有表单任务栏图标的隐藏应用程序窗口

    我有一个带有一个主表单的访问应用程序 当您打开应用程序时 AutoExec 宏会通过 Windows API apiShowWindow 隐藏应用程序 然后 AutoExec 打开设置为 Popup 的主窗体 这一切都很顺利 我的数据库内容
  • MongoRuntimeError:连接池已关闭

    我看到我的猫鼬池在插入数据之前似乎已关闭 因为在调用云集群中的猫鼬数据库时出现此错误 MongoRuntimeError Connection pool closed 但我正在等待所有的电话 所以我不确定为什么会看到这个问题 也许这与我定义
  • twig json_encode 空 json

    我正在从 API 接收元素列表 所有元素的格式都很好 当我使用树枝转储其中一个时 我得到以下信息 Leg 2695 id null reservation null airportStart AIX LES MILLES airplaneT
  • 如何使用 Azure DevOps 的 python 客户端 API 将用户添加到 Azure DevOps?

    我正在编写一个 python 脚本来将用户 来自 AAD 支持的提供商的现有用户 添加到 Azure DevOps 我正在使用 Azure DevOps 的 python 客户端库来实现此目的 身份验证后 我可以从 azure devops
  • 在 C# 控制台应用程序中使用 HttpClient 使用 WEB API

    我使用 MySQL 数据库在 Visual Studio 2015 中创建了一个 Web API API 运行完美 所以我决定做一个控制台client http www c sharpcorner com article web api w
  • C# CreatePipe() -> 受保护的内存错误

    我尝试使用 C 创建管道 代码非常简单 但是当行与CreatePipe 调用被执行我得到一个System AccessViolationException并出现以下错误消息 尝试读取或写入受保护的内存 这通常表明其他内存已损坏 这是我的表单
  • 尝试在 Facebook 中注册成就时出现 OAuthException 2500(未知路径组件)

    我正在尝试为应用程序注册 Facebook 开放图谱成就 我获取应用程序访问令牌并使用开放图 API 资源管理器发布以下请求 请注意 上面的应用程序 ID 和访问令牌不是真实的 但是 我得到以下答复 error message Unknow
  • RESTful API:仅用于验证的方法/标头组合

    我希望我的 API 有一个仅验证请求 例如 如果我有一个 URL 例如 http api somesite com users 12345 用户正在客户端上填写一份信息表单 我最终会将其修补 放置 发布到该资源 当用户填写表单时 我可能希望
  • 创建连接到 facebook 的 j2me 应用程序(不是 swt 项目)

    我想创建一个简单的 j2me 应用程序作为开始 它与 facebook 链接 为了这 我从下载了 facebook apihttp kenai com projects facebookapime downloads http kenai
  • 如何在 Google 知识图谱中搜索具有特定属性的条目?

    应如何制定搜索查询kgsearch googleapis com查找给定类别中的所有条目 例如 如果我想搜索 Schema org 类别中的内容应用类别 http schema org applicationCategory 我该怎么办呢
  • 在库的公共接口中使用 boost::shared_ptr

    我们有一个 C 库 提供给多个不同的客户 最近 我们从在公共接口中使用原始指针改为使用 boost sharedptr 正如您可能猜到的那样 这提供了巨大的好处 因为现在客户不再需要担心谁需要删除什么以及何时删除 当我们进行切换时 我相信这
  • SoftLayer_Account::getOperatingSystemReloadImages

    我想在 OSReload 期间使用 API 获取可用操作系统列表 我发现提到了 SoftLayer Account getOperatingSystemReloadImages 方法 但找不到该方法的用法 谁能帮我解决这个问题 谢谢 我找不

随机推荐

  • VMware虚拟机安装Linux教程(超详细)

    一 安装 VMware 官方正版VMware下载 xff08 16 pro xff09 xff1a https www aliyundrive com s wF66w8kW9ac 下载Linux系统镜像 xff08 阿里云盘不限速 xff0
  • WIFI模块——ESP8266

    1 ESP8266简介 ESP8266是一款高性能的WIFI串口模块 xff0c 内部集成MCU能实现单片机之间串口通信 xff0c 是目前使用最广泛的一种WIFI模块之一 可以简单理解为一个WIFI转串口的设备 xff0c 不用知道太多W
  • 姿态传感器——MPU6050

    1 MPU6050介绍 MPU6050是由三个陀螺仪和三个加速度传感器组成的6轴运动处理组件 xff0c 是一款六轴 xff08 三轴加速度 43 三轴角速度 xff08 陀螺仪 xff09 xff09 传感器 内部主要结构 陀螺仪 加速度
  • Arch | Nodejs 配置

    今天在使用 npm 时出现了一些错误 xff0c 之前那个文章内容有点多 xff0c 找起来比较麻烦 xff0c 所以这里单独把一些软件的配置单独拉出来写一个文章 参考 ArchWiki Node js 安装 如果没有多版本需求的话 xff
  • 基于I2C协议利用STM32进行温湿度传感器的数据采集

    目录 一 I2C总线通信协议的介绍1 I2C简介2 I2C总线时序图3 五种速率4 四种信号5 I2C的优缺点6 软件IIC和硬件IIC 二 创建工程1 实验目的2 工具的选择3 相关代码分析 三 线路的连接四 结果实现五 总结参考文献 一
  • 海康嵌入式软件面试经验(已拿offer)

    本科双非 xff0c 计算机类专业学渣 xff0c 0实习经历 xff0c 复习考研的时候学了一遍408 xff0c 强化阶段学的心态崩了就边复习边投简历 xff0c 之前投了好几次体面厂的测试岗都没进面试 xff0c 投开发岗反而进了 7
  • 前端浏览器渲染原理及优化

    文章目录 一 浏览器组成1 对浏览器内核的理解2 浏览器的主要组成部分 二 浏览器渲染原理1 浏览器的渲染过程步骤一 xff1a 步骤二 xff1a 步骤三 xff1a 步骤四 xff1a 步骤五 xff1a 2 相关概念 重排 更新元素的
  • Docker+github actions部署前端项目

    Docker 43 github actions部署前端项目 文章目录 Docker 43 github actions部署前端项目前言1 Docker相关文件配置2 创建自己的dokcer hub仓库3 yml文件配置 前言 在进行本篇实
  • pytorch可视化之:可视化网络结构+CNN可视化+TensorBorad使用

    Pytorch学习第五部分 xff1a pytorch可视化 Let 39 s go 一 可视化网络结构1 1 Resnet18结构1 2 使用torchinfo可视化网络结构1 2 1 torchinfo安装1 2 2 torchinfo
  • spring中用到的设计模式及应用场景

    spring中用到的设计模式及应用场景 1 工厂模式 xff1a 在Beanfactory和applicationContext创建中都用到了 2 单例模式 xff1a Bean默认就是单例模式 单例模式只允许创建一个对象 xff0c 获取
  • python架构之Django学习------流程总结

    python架构之Django学习 一 二 三 开发流程 xff1a step1 创建虚拟环境 mkvirtrualenv step2 安装django pip install django step3 创建项目 python manage
  • PDU 发送短信3

    T指令收发短信主要有两种模式 xff1a Text模式和PDU xff08 Protocol Data Unit xff0c 协议数据单元 xff09 模式 使用Text模式收发短信代码简单 xff0c 很容易实现 xff0c 最大缺点不支
  • Linux驱动---休眠与唤醒

    Linux 休眠与唤醒 文章目录 Linux 休眠与唤醒前言一 休眠 唤醒 机制二 重要的函数及其数据结构wait内核函数唤醒函数 三 驱动编程步骤附录 xff08 源码 xff09 前言 当应用程序必须等待某个时间发生 xff0c 比如必
  • 序列化Writable接口

    基本序列化类型往往不能满足所有需求 xff0c 比如在Hadoop框架内部传递一个自定义bean对象 xff0c 那么该对象就需要实现Writable序列化接口 实现Writable序列化步骤如下 xff08 1 xff09 必须实现Wri
  • MapReduce读取数据

    1 InputFormat 运行MapReduce程序时 xff0c 输入的文件格式包括 基于行的日志文件 二进制格式文件 数据库表等 那么 xff0c 针对不同的数据类型 xff0c MapReduce是如何读取这些数据的呢 InputF
  • Git的安装与配置,VScode如何连接Gitee?

    什么是gitee 要学gitee 你首先得知道gitee是什么 而且你得知道它的好处 首先它是国内最大的代码托管平台 国外GitHub的弟弟 然后 它能帮你 管理 昨天和今天 改动的文件 xff0c 还给你做 备份 xff1b 它能管理让你
  • 下载并使用Maven创建运行项目(配置Maven、tomcat、含idea实例)【精细教程】

    前言 xff08 重点 xff01 xff01 xff09 xff1a 很多人在安装好maven后 xff0c 遇到idea与maven版本不匹配的问题 xff0c 首先要根据自己的idea版本来选择maven版本 xff01 IDEA 2
  • 将本地项目commit到gitee上

    在新建的项目路径中 xff0c shift 43 右键 xff0c 打开powershell窗口 查看状态 xff1a git status 再执行 xff1a git add git commit m 34 add files 34 再次
  • docker搭建私有仓库

    一 宿主机安装 1 extras源中下载安装distributon包 编写源 extras name 61 extra baseurl 61 https mirrors aliyun com centos vault 7 9 2009 ex
  • HBase-API

    目录 引入的依赖 创建连接 命名空间 表 引入的依赖 lt dependencies gt lt dependency gt lt groupId gt org apache hbase lt groupId gt lt artifactI