Dubbo快速入门

2023-11-19

一、初识Dubbo

1、Dubbo是什么

  • 轻量级,高性能的RPC框架
  • 并不是要成为一个微服务的全面解决方案
  • 以Java语言而出名

2、Dubbo现状

  • 全称是Apache Dubbo
  • 微店,网易云音乐,考拉,滴滴,中国电信,人寿

3、Dubbo的故事:主要历程

  • 09年开始做,做的第1个版本
  • 10年初的时候,架构升级,Dubbo 2.0
  • 开源
  • one company战略
  • 合到HSF去
  • 第3节点,捐给Apache

二、RPC介绍

  • RPC———远程过程调用
  • 早期单机时代:IPC
  • 网络时代:把IPC扩展到网络上,这就是RPC
  • 实现RPC很头疼,于是就有了RPC框架
  • 调用其他机器上的程序和调用本地的程序一样方便

常见的RPC框架

  • 阿里的Dubbo
  • 新浪的Montan
  • Facebook的Thrift
  • 各个框架都有各自的优缺点

HTTP和RPC对比

  • 传输效率
  • 性能消耗,主要在于序列化和反序列化的耗时
  • 负载均衡

三、Dubbo工作原理

在这里插入图片描述
在这里插入图片描述

1、服务容器负责启动,加载,运行服务提供者
2、服务提供者在启动时,向注册中心注册自己提供的服务
3、服务消费者在启动时,向注册中心订阅自己所需的服务
4、注册中心返回服务提供者地址列表给消费者
5、从提供者地址列表中,选一台提供者进行调用
6、定期发送一次统计数据到监控中心

四、案例实操:项目编写

以实现课程查询的接口,来实操整合Dubbo和Zookeeper,并实现服务间的调用。

1、项目创建

项目创建IDEA创建Maven项目,删除原src,创建子模块,项目结构如下:
在这里插入图片描述
父模块依赖添加pom.xml:

parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.12.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
    <java.version>1.8</java.version>
    <spring-boot.version>2.1.12.RELEASE</spring-boot.version>
    <dubbo.version>2.7.4.1</dubbo.version>
</properties>

<dependencyManagement>
    <dependencies>
        <!-- Spring Boot -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

        <!-- Apache Dubbo  -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-bom</artifactId>
            <version>${dubbo.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>${dubbo.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>javax.servlet</groupId>
                    <artifactId>servlet-api</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
</dependencyManagement>

2、服务提供者(producer)的开发

producer模块引入依赖pom.xml:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <!-- Dubbo Spring Boot Starter -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>2.7.4.1</version>
    </dependency>

    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo</artifactId>
    </dependency>
    <!-- Zookeeper dependencies -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-dependencies-zookeeper</artifactId>
        <version>${dubbo.version}</version>
        <type>pom</type>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- Web 功能 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- MySQL connector, 需要与 MySQL 版本对应 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <!-- MyBatis依赖-->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.1</version>
    </dependency>
</dependencies>

entity包下的实体类Course.java(生成get和set方法):

public class Course implements Serializable {
	Integer id;
	Integer courseId;
	String name;
	//1上架,0下架
	Integer valid;
}

mapper包下的CourseMapper.java:

@Mapper
@Repository
public interface CourseMapper {

	@Select("SELECT * FROM course WHERE valid = 1")
	List<Course> findValidCourses();
}

service包下的CourseListService.java:

public interface CourseListService {

	List<Course> getCourseList();
}

impl包下的CourseListServiceImpl.java(需要注意的是@Service的包将不在是我们平时的http,而是换成了dubbo):

import com.ygayddcxy.producer.entity.Course;
import com.ygayddcxy.producer.mapper.CourseMapper;
import com.ygayddcxy.producer.service.CourseListService;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;

@Service(version = "${demo.service.version}")
public class CourseListServiceImpl implements CourseListService {

	@Autowired
	private CourseMapper courseMapper;

	@Override
	public List<Course> getCourseList() {
		return courseMapper.findValidCourses();
	}
}

application.properties配置:

demo.service.version=1.0.0

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/course_prepare?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=1214

logging.pattern.console=%clr(%d{${LOG_DATEFORMAT_PATTERN:HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}

spring.application.name=course-list

#dubbo协议
dubbo.protocol.name=dubbo
#-1随机找一个端口号
dubbo.protocol.port=-1  
#dubbo注册
dubbo.registry.address=zookeeper://192.168.17.132:2181
# 配置中心连接时间改为20秒
dubbo.config-center.timeout=20000
dubbo.registry.file=${user.home}/dubbo-cache/${spring.application.name}/dubbo.cache

mybatis.configuration.map-underscore-to-camel-case=true

dubbo.scan.base-packages=com.ygayddcxy.producer.service.impl

服务提供者的启动类DubboProducerApplication.java:

@EnableAutoConfiguration
public class DubboProducerApplication {

	public static void main(String[] args) {
		SpringApplication.run(DubboProducerApplication.class, args);
	}
}

3、服务消费方(consumer)的开发

先引入依赖pom.xml:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <!-- Dubbo Spring Boot Starter -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>2.7.4.1</version>
    </dependency>

    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo</artifactId>
    </dependency>
    <!-- Zookeeper dependencies -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-dependencies-zookeeper</artifactId>
        <version>${dubbo.version}</version>
        <type>pom</type>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- Web 功能 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- MySQL connector, 需要与 MySQL 版本对应 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <!-- MyBatis依赖-->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.1</version>
    </dependency>
    <dependency>
        <groupId>com.ygayddcxy</groupId>
        <artifactId>producer</artifactId>
        <version>1.0-SNAPSHOT</version>
        <scope>compile</scope>
    </dependency>
</dependencies>

添加application.properties配置:

demo.service.version=1.0.0
server.port=8084
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/course_prepare?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=1214

logging.pattern.console=%clr(%d{${LOG_DATEFORMAT_PATTERN:HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}

spring.application.name=course-price

#dubbo协议
dubbo.protocol.name=dubbo
#-1随机找一个端口号
dubbo.protocol.port=-1  
#dubbo注册
dubbo.registry.address=zookeeper://192.168.17.132:2181
# 配置中心连接时间改为20秒
dubbo.config-center.timeout=20000
dubbo.registry.file=${user.home}/dubbo-cache/${spring.application.name}/dubbo.cache

在entity包下添加实体类:
添加实体类CoursePrice.java(自行补充get和set):

public class CoursePrice implements Serializable {
	Integer id;
	Integer courseId;
	Integer price;
}

添加实体类CourseAndPrice.java(自行补充get和set):

public class CourseAndPrice implements Serializable {
	Integer id;
	Integer courseId;
	String name;
	Integer price;
}

在dao包下:
添加CoursePriceMapper.java:

@Mapper
@Repository
public interface CoursePriceMapper {

	@Select("SELECT * FROM course_price WHERE course_id = #{courseId}")
	CoursePrice findCoursePrices(Integer courseId);
}

在service包下添加CoursePriceService.java:

// 课程价格服务
public interface CoursePriceService {

	CoursePrice getCoursePrice(Integer courseId);

	List<CourseAndPrice> getCoursesAndPrice();
}

在impl包下添加CoursePriceServiceImpl.java:

// 课程价格服务
@Service
public class CoursePriceServiceImpl implements CoursePriceService {

	@Autowired
	CoursePriceMapper coursePriceMapper;

	@Reference(version = "${demo.service.version}")
	CourseListService courseListService;

	@Override
	public CoursePrice getCoursePrice(Integer courseId) {
		return coursePriceMapper.findCoursePrices(courseId);
	}

	@Override
	public List<CourseAndPrice> getCoursesAndPrice() {
		List<CourseAndPrice> courseAndPriceList = new ArrayList<>();
		List<Course> courseList = courseListService.getCourseList();
		for (int i = 0; i < courseList.size(); i++) {
			Course course = courseList.get(i);
			if (course != null) {
				CoursePrice price = getCoursePrice(course.getCourseId());
				if (price != null && price.getPrice() > 0) {
					CourseAndPrice courseAndPrice = new CourseAndPrice();
					courseAndPrice.setId(course.getId());
					courseAndPrice.setCourseId(course.getCourseId());
					courseAndPrice.setName(course.getName());
					courseAndPrice.setPrice(price.getPrice());
					courseAndPriceList.add(courseAndPrice);
				}
			}
		}
		return courseAndPriceList;
	}
}

在controller包下添加CoursePriceController.java:

@RestController
public class CoursePriceController {

	@Autowired
	CoursePriceService coursePriceService;

	@GetMapping({"/price"})
	public Integer getCoursePrice(Integer courseId) {
		CoursePrice coursePrice = coursePriceService.getCoursePrice(courseId);
		if (coursePrice != null) {
			return coursePrice.getPrice();
		} else {
			return -1;
		}
	}

	@GetMapping({"/coursesAndPrice"})
	public List<CourseAndPrice> getCoursesAndPrice() {
		return coursePriceService.getCoursesAndPrice();
	}
}

添加服务消费方的启动类DubboConsumerApplication.java:

@SpringBootApplication
public class DubboConsumerApplication {

	public static void main(String[] args) {
		SpringApplication.run(DubboConsumerApplication.class, args);
	}
}

至此项目的代码实现便写到这里,接下来便是测试项目,首先需要启动Zookeeper,然后在启动服务提供者,最后在启动服务消费方。
服务提供者:
在这里插入图片描述
服务消费方:
在这里插入图片描述
项目启动完成后,浏览器访问:http://127.0.0.1:8084/coursesAndPrice
在这里插入图片描述

案例实操

  • 自动检查zk和依赖的服务
  • dubbo.scan.base-packages配置
  • 实现服务间调用

最后在附上用到的数据库表结构命令:

资料:数据库结构与数据

/*
 Navicat Premium Data Transfer

 Source Server         : MySQL
 Source Server Type    : MySQL
 Source Server Version : 80022
 Source Host           : localhost:3306
 Source Schema         : course_prepare

 Target Server Type    : MySQL
 Target Server Version : 80022
 File Encoding         : 65001

 Date: 25/04/2022 00:11:20
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for course
-- ----------------------------
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course`  (
  `id` int(0) NOT NULL,
  `course_id` int(0) NULL DEFAULT NULL,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `valid` int(0) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of course
-- ----------------------------
INSERT INTO `course` VALUES (1, 1, '深入理解Java虚拟机', 1);
INSERT INTO `course` VALUES (2, 2, 'Java编程思想', 1);

-- ----------------------------
-- Table structure for course_price
-- ----------------------------
DROP TABLE IF EXISTS `course_price`;
CREATE TABLE `course_price`  (
  `id` int(0) NOT NULL,
  `course_id` int(0) NULL DEFAULT NULL,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `price` int(0) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of course_price
-- ----------------------------
INSERT INTO `course_price` VALUES (1, 1, '深入理解Java虚拟机', 399);
INSERT INTO `course_price` VALUES (2, 2, 'Java编程思想', 999);

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

Dubbo快速入门 的相关文章

  • JavaMail Gmail 问题。 “准备启动 TLS”然后失败

    mailServerProperties System getProperties mailServerProperties put mail smtp port 587 mailServerProperties put mail smtp
  • 如何在 JFace 的 TableViewer 中创建复选框?

    我创建了一个包含两列的 tableViewer 我想将其中一列设为复选框 为此 我创建了一个 CheckBoxCellEditor 但我不知道为什么它不起作用 名为 tableName 的列显示其值正常 色谱柱规格如下 String COL
  • ElasticBeanstalk Java,Spring 活动配置文件

    我正在尝试通过 AWS ElasticBeanstalk 启动 spring boot jar 一切正常 配置文件为 默认 有谁知道如何为 java ElasticBeanstalk 应用程序 不是 tomcat 设置活动配置文件 spri
  • AES 加密 Java/plsql

    我需要在Java和plsql DBMS CRYPTO for Oracle 10g 上实现相同的加密 解密应用程序 两种实现都工作正常 但这里的问题是我对相同纯文本的加密得到了不同的输出 下面是用于加密 解密过程的代码 Java 和 PLS
  • 如何测试 JUnit 测试的 Comparator?

    我需要测试 Compare 方法 但我对如何测试感到困惑 我可以看看该怎么做吗 public class MemberComparator implements Comparator
  • 线程自动利用多个CPU核心?

    假设我的应用程序运行 2 个线程 例如渲染线程和游戏更新线程 如果它在具有多核 CPU 当今典型 的移动设备上运行 我是否可以期望线程在可能的情况下自动分配给不同的核心 我知道底层操作系统内核 Android linux内核 决定调度 我的
  • JNI 不满意链接错误

    我想创建一个简单的 JNI 层 我使用Visual studio 2008创建了一个dll Win 32控制台应用程序项目类型 带有DLL作为选项 当我调用本机方法时 出现此异常 Exception occurred during even
  • ExceptionConverter:java.io.IOException:文档没有页面。我正在使用 iText

    当我执行下面的代码时 File f new File c sample pdf PdfWriter getInstance document new FileOutputStream f document open System out p
  • Java 页面爬行和解析之 Crawler4j 与 Jsoup

    我想获取页面的内容并提取其中的特定部分 据我所知 此类任务至少有两种解决方案 爬虫4j https github com yasserg crawler4j and Jsoup http jsoup org 它们都能够检索页面的内容并提取其
  • Java中接口作为方法参数

    前几天去面试 被问到了这样的问题 问 反转链表 给出以下代码 public class ReverseList interface NodeList int getItem NodeList nextNode void reverse No
  • 反思 Groovy 脚本中声明的函数

    有没有一种方法可以获取 Groovy 脚本中声明的函数的反射数据 该脚本已通过GroovyShell目的 具体来说 我想枚举脚本中的函数并访问附加到它们的注释 Put this到 Groovy 脚本的最后一行 它将作为脚本的返回值 a la
  • 检查 protobuf 消息 - 如何按名称获取字段值?

    我似乎无法找到一种方法来验证 protobuf 消息中字段的值 而无需显式调用其 getter 我看到周围的例子使用Descriptors FieldDescriptor实例到达消息映射内部 但它们要么基于迭代器 要么由字段号驱动 一旦我有
  • 尝试使用 Ruby Java Bridge (RJB) gem 时出现错误“无法创建 Java VM”

    我正在尝试实现 Ruby Java Bridge RJB gem 来与 JVM 通信 以便我可以运行 Open NLP gem 我在 Windows 8 上安装并运行了 Java 所有迹象 至少我所知道的 都表明 Java 已安装并可运行
  • 使用 AWS Java SDK 为现有 S3 对象设置 Expires 标头

    我正在更新 Amazon S3 存储桶中的现有对象以设置一些元数据 我想设置 HTTPExpires每个对象的标头以更好地处理 HTTP 1 0 客户端 我们正在使用AWS Java SDK http aws amazon com sdkf
  • Tomcat 6找不到mysql驱动

    这里有一个类似的问题 但关于类路径 ClassNotFoundException com mysql jdbc Driver https stackoverflow com questions 1585811 classnotfoundex
  • 当单元格内的 JComboBox 中有 ItemEvent 时,如何获取 CellRow

    我有一个 JTable 其中有一列包含 JComboBox 我有一个附加到 JComboBox 的 ItemListener 它会根据任何更改进行操作 但是 ItemListener 没有获取更改的 ComboBox 所在行的方法 当组合框
  • android Accessibility-service 突然停止触发事件

    我有一个 AccessibilityService 工作正常 但由于开发过程中的某些原因它停止工作 我似乎找不到这个原因 请看一下我的代码并告诉我为什么它不起作用 public class MyServicee extends Access
  • KeyPressed 和 KeyTyped 混淆[重复]

    这个问题在这里已经有答案了 我搜索过之间的区别KeyPressedand KeyTyped事件 但我仍然不清楚 我发现的一件事是 Keypressed 比 KeyTyped 首先被触发 请澄清一下这些事件何时被准确触发 哪个适合用于哪个目的
  • 中断连接套接字

    我有一个 GUI 其中包含要连接的服务器列表 如果用户单击服务器 则会连接到该服务器 如果用户单击第二个服务器 它将断开第一个服务器的连接并连接到第二个服务器 每个新连接都在一个新线程中运行 以便程序可以执行其他任务 但是 如果用户在第一个
  • Swagger/Openapi-Annotations:如何使用 $ref 生成 allOf?

    我正在生成 Rest 端点 包括添加OpenAPI Swagger对生成的代码进行注释 虽然它对于基本类型运行得很好 但我在自定义类方面遇到了一些问题 现在我有很多自定义类的重复架构条目 使用 Schema 实现 MyClass class

随机推荐

  • hexo d时提示错误ssh: Could not resolve hostname e. coding. net: Name or service not known解决方案

    步骤1 命令符ping github com 得出的IP github com添加到 etc hosts hosts文件在C Windows System32 drivers etc目录 如拒绝修改 可右键添加用户完全控制权限
  • vue 项目全局修改element-ui的样式

    引入了element ui 但是和我们自己的样式颜色有很大的不同 官网自定义主题 点击查看 修改例子 在src文件下创建 element var scss 代码如下 color primary yellow 修改按钮primary的颜色 改
  • windows MongoDB安装和配置

    一 MongoDB安装和配置 1 进入官网下载你所需要的安装版本 点击直通官网 Step1 进入官网后 将看到如下界面 点击上方导航栏Products 找到Community Server Step2 选择自己需要的版本 系统和压缩方式 2
  • centos启动停留在started GNOME display manager

    Centos启动卡死进不去界面 停留在started GNOME display manager 在安装Centos7 9系统成功后 需要安装显卡驱动 显卡驱动有一个驱动程序自带这图形化界面 安装该驱动程序后 系统一直处于started G
  • Python连接MySQL数据库

    一 准备模块 python连接SQL数据库首先需要用到 pymysql 模块 这里使用pip install指令来安装步骤如下 1 在安装的python的路径下找到Scripts文件夹并打开 在路径上面写成 cmd 后回车 2 进入这个界面
  • springboot配置自定义数据源(Druid德鲁伊)的步骤。

    今天和大家分享下在Springboot中配置自定义数据源Druid的两种方法及步骤 方法一 1 在pom xml配置依赖 注释里面的内容 2 配置自己的数据源设置 我是在yaml文件中配置的 顺便提醒一下 在配置yaml文件的时候缩进问题一
  • 【引用】四元组与旋转矩阵

    引用 四元组与旋转矩阵 2011 09 22 17 13 39 分类 DirectX资料 举报 字号 订阅 下载LOFTER客户端 本文转载自ericyang1231 四元组与旋转矩阵 在3D程序中 通常用quaternion来计算3D物体
  • iOS开发之状态栏statusBar颜色变化

    在网上搜索了很久 我也试了很多种情况 下面我为每种情况排布一下优先级 刚开始的时候我没有写播放器 使用的是腾讯的SDK 发现我之前设置的状态栏变化不在发生变化啦 所以在这里做一个小结 Xcode默认的颜色是黑色 记录优化代码的点滴 第一种
  • C++---背包模型---装箱问题(每日一道算法2023.3.9)

    注意事项 本题是 动态规划 01背包 的扩展题 dp和优化思路不多赘述 题目 有一个箱子容量为 V 同时有 n 个物品 每个物品有一个体积 正整数 要求 n 个物品中 任取若干个装入箱内 使箱子的剩余空间为最小 输入格式 第一行是一个整数
  • int $0x80系统调用的idea

    1 基础知识 用户态和内核态 一般现代CPU都有几种不同的指令执行级别 Linux总共划分为4个指令执行级别 内核运行在0级别上 1 2级别默认不运行 用户程序运行在3级别上 在内核指令执行级别上 代码可以执行特权指令 访问任意的物理地址
  • 微信小程序组件 - 部门机构人员岗位树组件

  • 国产版Airtag防丢器

    Airtag是什么 AirTag是苹果公司设计的一款定位神奇 它通过一款纽扣电池进行供电 即可实现长达1 2年的关键物品的定位 查找的功能 按照苹果公司自己的话说 您 丢三落四这门绝技 要 失 传 了 AirTag 可帮你轻松追踪并查找各种
  • 华为手机怎样才算激活了_华为P30 Pro手机壳不要闹,简约个性才是王道

    提起手机壳相信大家都不会陌生 在曾经 很多人对于手机壳的印象还只是停留于保护阶段 但是伴随着人们生活水屏的不断提升 手机壳设计师们为了迎合年轻消费者的需求 在外观上做出了升级 风格款式多样 材质分门别类 如今市场上的手机壳可谓是琳琅满目 不
  • 【大数据】Hive: 获取字段数据类型

    2018 12 01 文章目录 前言 方法 前言 某项目涉及将Hive中的textFile表转换成parquet表 由于parquet表不支持date类型 需要判断字段是否是date 并cast成timestamp 方法 采用DESCRIB
  • redis缓存机构-持久化详解(二)

    redis缓存机构 持久化详解 1 redis对于生产环境的灾难恢复的意义 在于故障恢复 2 redis的持久化 RDB AOF 区别 特点是什么 适合什么场景 1 RDB持久化机制 对redis中的数据执行周期性的持久化 数据快照 RDB
  • luaj使用 方法签名规则 Cocos2dxLuaJavaBridge

    function AndroidHandler getParamJson local args nil local ok ret luaj callStaticMethod className getParamJson args Ljava
  • P1609 最小回文数 题解

    本题位数较大 所以只能使用字符串读入 因为是回文数 所以我们只考虑前半部分的情况就能确定一个回文数 如一个型为 x y z overline xyz xy
  • 在安装了vcpkg,并编译了osgEarth后,osgEarth工程中所有依赖项vs2019会自动默认生成最新,解决办法

    前言 问题描述 在安装了vcpkg 并编译了osgEarth后 osgEarth工程中所有依赖项 1 hdf dll 2 hdf5 dll 3 hdf5 cpp dll 4 hdf5 hl dll 5 hdf5 hl cpp dll 6 l
  • sql sever文件导入mysql服务器,怎样将外部数据库文件导入MySQL

    怎样将外部数据库文件导入MySQL 内容精选 换一换 数据导入 章节适用于MRS 3 x及后续版本 Loader是实现MRS与外部数据源如关系型数据库 SFTP服务器 FTP服务器之间交换数据和文件的ETL工具 支持将数据或文件从关系型数据
  • Dubbo快速入门

    文章目录 一 初识Dubbo 1 Dubbo是什么 2 Dubbo现状 3 Dubbo的故事 主要历程 二 RPC介绍 三 Dubbo工作原理 四 案例实操 项目编写 1 项目创建 2 服务提供者 producer 的开发 3 服务消费方