Springboot项目实战

SpringBoot项目-基础

Springboot

概念

开发目的:简化spring

redis
zookeeper
xxl-job
mysql
maven
druid
mybatis
clickhouse
servlet
mybatis-plus
RebbitMQ

SpringBoot+Vue后台管理系统

学习视频:
https://www.bilibili.com/video/BV1U44y1W77D/?spm_id_from=333.337.search-card.all.click&vd_source=c901ae3ff497a02016ba7bada52b2e3b
该项目所需基础内容:
IDEA、jdk、mysql5.7、navicat12、Navicat15、node-v1.14.16.0-x64、Postman-win64-8.8.0-Setup、Redis-行4-3.0.504.

所需软件下载、安装、版本查询

IDEA 版本2021.1.3
	打开软件help-关于
jdk 版本1.8 
	查看jdk的版本号;
	cmd中输入:java -version 
navicat 版本16
	是一套广泛使用的数据库管理工具,它为用户提供了一个直观的图形用户界面(GUI),使得数据库管理和开发工作变得更加简单和高效。
	下载安装参考链接 版本16:https://blog.csdn.net/taiyang3285/article/details/130115829?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170908947016800180691601%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=170908947016800180691601&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-130115829-null-null.nonecase&utm_term=navicat&spm=1018.2226.3001.4450
	下载安装参考链接 版本12:https://blog.csdn.net/bruceoxl/article/details/89456708
	参考navicat 16 已完成安装和激活。

node 版本是v16.20.1
npm 版本号是8.19.4
	是一个开源、跨平台的JavaScript运行环境,它允许开发者使用JavaScript语言编写服务器端代码。
	进入该node项目所在文件夹,通过cmd进入命令行,执行node -v命令查看版本号;
	npm
		是JavaScript编程环境中的核心工具之一,尤其对于使用Node.js作为后端或构建工具链的项目来说至关重要。
		主要负责安装和管理依赖、管理项目依赖关系、共享和发布代码等。
		安装node就会自带npm,执行npm -v命令查看版本号;
	又下载webpack,出现不是内部命令的情况,通过node设置全局变量可以解决。
PostmanAPI开发与测试工具,它提供了一个直观的图形用户界面,使开发者和测试人员能够方便地发送HTTP/HTTPS请求,并检查服务器响应。
	用户可以模拟各种HTTP方法(如GETPOSTPUTDELETE等),设置请求头、URL参数、请求体内容等,以便于调试Web服务接口、验证API的行为以及进行RESTful API的集成测试。
	参考博客:https://blog.csdn.net/weixin_44257023/article/details/115307490
	已按照该博客方法成功安装。
vue 版本2.9.6
	是一个开源的渐进式JavaScript框架,用于构建用户界面;
	Vue以其响应式的数据绑定、组件化和简单易用的API而闻名于前端开发社区。
	安装参考博客:https://blog.csdn.net/dream_summer/article/details/108867317
	问题1参考博客:https://blog.csdn.net/qq_31594665/article/details/135750276
JS 
	JavaScript(简称JS)是一种广泛应用于网页和网络应用开发的高级、解释型、动态类型的编程语言。
	最初目的是为了给网页增加动态功能和交互操作;
element组件
	指的是 Element UI,这是一个基于 Vue.js 框架设计和实现的开源 UI 组件库,主要用于构建美观、易用的桌面端 Web 应用程序。Element UI 提供了一整套丰富且易于使用的 UI 组件,涵盖了常见的诸如按钮、输入框、表格、菜单、通知、对话框等各种界面元素,同时也包含了布局、导航、数据展示等各种复杂组件,极大地简化了开发者创建企业级应用的工作量。
	安装参考博客:https://element.eleme.cn/#/zh-CN/component/installation

Vue

官网:https://cn.vuejs.org/
Vue 2 已经终止支持且不再维护。 如有需要请升级到 Vue 3 或了解有关 Vue 2 终止支持 (EOL) 的信息。
Vue CLI标准开发工具:https://cli.vuejs.org/zh/

搭建一个简单的Vue项目

问题1
下载vue-cli 版本2.9.6 使用vue create xx命令,报错,
原因在于:该命令是vue-cli 版本3的,所以需要更新版本;使用如图显示的两条命令。
在这里插入图片描述
问题2
运行vue vreate vue-xhj命令后,根据视频与真实操作情况,存在区别。
在这里插入图片描述

创建过程

进入想要创建vue项目的文件夹,通过cmd进入该文件夹;
输入vue create xxx 执行该命令;其中项目的依赖在node_modules;
切换到该项目目录xxx cd xxx
运行项目 npm run serve ; 项目启动后展示该项目的访问路径以及端口号,通过该信息可以在浏览器进行访问;
安装element-ui;在IDEA命令框中执行 npm i element-ui -S
	快速上手,参考https://element.eleme.cn/#/zh-CN/component/quickstart
	快速构建简单的可视化前端界面;
	Vue.use(ElementUI,{size:"mini"}); //添加size的目的是为了将使用的组件设置合适的大小。

项目结构分析:
在这里插入图片描述
项目优化细节#2

去掉初始化项目界面中的边框:
	项目/src/assets 创建global.css文件去掉某些元素的边框;
	再main.js中引入该创建好的文件;
进行了一些配置,包括边框修改等,再代码中通过注解#2 xhj标识

项目优化#3


在这里插入图片描述

Spring项目1

项目架构

参考博客:https://blog.csdn.net/weixin_43823808/article/details/115254603

问题导向学习

接口接收数据并进行数据清洗

  1. 基本信息
Java Spring Boot环境中,可以使用Spring Data JPAHibernate ORM来操作SQLite数据库,来处理如何创建一个接收并同步数据到服务器端数据库的RESTful API接口;
参考博客:https://blog.csdn.net/u013735734/article/details/136361244#%E9%85%8D%E7%BD%AE%20SQLite%20&%20JPA

项目基础配置:
需要确保配置:Spring Data JPASQLite连接
参考博客:https://blog.csdn.net/zyd573803837/article/details/109263219

VScode

  1. 需要确保配置:Spring Data JPA和SQLite连接
    参考博客:https://blog.csdn.net/zyd573803837/article/details/109263219

  2. vscode提交代码
    整体过程是:提交-推送;
    git使用介绍博客:https://blog.csdn.net/Shids_/article/details/112250700
    提交很慢,解决博客:https://blog.csdn.net/m0_60322614/article/details/133017449

  3. windows11 docker mysql
    参考博客:https://blog.csdn.net/nmajsjpy/article/details/130183104
    参考博客2:https://blog.csdn.net/joeyoj/article/details/136427362

Docker

  1. docker相关知识学习?

  2. docker启动mysql,如何创建数据库以及查看当前本机有哪些数据库?
    参考博客:
    https://blog.csdn.net/LegendaryChen/article/details/136050305?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-136050305-blog-132284868.235%5Ev43%5Epc_blog_bottom_relevance_base1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-136050305-blog-132284868.235%5Ev43%5Epc_blog_bottom_relevance_base1&utm_relevant_index=5

启动mysql命令:
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:latest

Dockerhouse

Dockerhub

MyBatis

  1. mybatis+mysql 实现数据读取?
    参考博客;https://blog.csdn.net/qq_39746820/article/details/124571053
    已经实现;

参考博客:https://blog.csdn.net/huangxiaoben/article/details/130683023
该博客中mapper继承的是BaseMapper,该类中以及存在数据库的增删改查等操作;

思考1:mybatis实现数据持久化

在springboot项目中会涉及到entity、mapper、controller、service四个文件夹
entity = 存储与数据库中某个数据表对应的实例对象的类;
	通过@TableName("table name") 将数据库中的表映射到该类上;
	通过resource文件夹中的与mapper同目录的.xml文件,编写sql语句实现映射;
mapper = 接口,创建要执行的抽象方法,具体的实现在resource中的同文件夹索引目录下;注解是@mapper
	demo\src\main\java\com\example\testxhj1\demo\mapper\TestClass1Mapper.java
	demo\src\main\resources\com\example\testxhj1\demo\mapper\TestClass1Mapper.xml
	可以看出 两个文件夹只有java 以及 resources的区别;
	.xml文件:
	<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">        
<mapper namespace= "com.example.testxhj1.demo.mapper.TestClass1Mapper">
<select id="selectTestClass1ById" resultType="com.example.testxhj1.demo.entity.TestClass1">
        select id,str1,str2 from table1 where id = #{id}
    </select>
   // 其中id的内容需要与mapper接口的抽象方法名称一致;
</mapper>
service = 与mapper接口相同,但是注解不同 @Service 同样也是接口
	serviceImpl service接口的实现;使用mapper接口实现,自动装载@Autowired;
controller = 类,自动装载service接口;
整体调用流程是:controller类--service接口实现-mapper接口
  1. mybatis+mysql 导入csv数据?
    参考博客:https://blog.51cto.com/u_16213374/7691073
    https://cloud.tencent.com/developer/article/2106459
    在这里插入图片描述
    在这里插入图片描述

Clickhouse

基础概念:

背后的研发团队是俄罗斯的yandex公司,该公司是搜索引擎公司。
是关系数据库的一种,与传统的mysql不同采用行式存储不同,该数据库采用的是列式存储。
  1. windows + docker desktop 下载clickhouse
    参考博客:https://blog.csdn.net/qubernet/article/details/121013960
    在这里插入图片描述
    命令出现问题:
    PASSWORD=$(base < /dev/urandom | head -c8); echo “testroot”; echo -n “123456” | sha256sum | tr -d ‘-’
    需要通过apt-get下载 coreutils包 和 openssl包

账号密码:
testroot
8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92

testroot
8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92

两次运行的结果都一样。

最新处理数据:
quber
8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92

存在问题1

问题描述:
按照参考博客配置,会出现:
std::exception. Code: 1001, type: std::out_of_range, e.what() = unordered_map::at: key not found (version 21.12.3.32 (official build))的问题
问题分析:
<quber>
	这是XML元素的根标签,代表正在配置的ClickHouse用户名称,即“quber”。
<password_sha256_hex>
	表示用户“quber”的密码经过SHA-256算法加密后得到此十六进制表示的哈希值;
<networks incl="networks" replace="replace">
	incl=“networks” :指示可能有其他地方定义了一组通用的网络规则(如在父级配置或外部文件中),这里将包括(include)那些通用规则;
	replace=“replace”:表示即使有通用规则存在,也应该完全替换(replace)为这里指定的网络规则,即只允许来自::/0的所有IPv6地址的连接。
<ip>::/0</ip>
	指定了一个IPv6 CIDR块,::/0相当于IPv6中的“任意地址”,意味着用户可以从任何IPv6网络访问ClickHouse服务器。
<profile>quber</profile>
	profile 指定了用户将使用的权限配置文件或访问控制配置文件的名称;
	用户“quber”关联到同名的“quber”访问控制配置文件。
	配置成quber不能实现访问,是否是quber的配置文件存在问题?待考证;
<quota>quber</quota>
	quota 指定了用户将遵循的配额规则;
	quber 同样表示用户将使用同名的配额配置文件;配额文件定义了该用户在资源使用方面的限制,如查询速率、磁盘空间使用量、内存使用量等,用于控制单个用户或用户组对系统资源的消耗。
	配置成quber不能正常访问,是否不存在同名的配额配置文件?待考证;

想要配置成功,直接将profile和quota都配置成default即可。

问题2

描述:
	vscode中采用SQLTools Clickhouse 插件,访问clickhouse数据库;
	show databases; 命令可以使用
	use xx数据库; 命令不可行,会报错;
		scode使用 clickhouse插件 执行show databases 可以正常运行。但执行命令use xxx数据库 出现There is no session or session context has expired. 问题,给出具体原因以及解决方案
	select * from 表1;  命令可以执行
分析:
	具体原因未知。

问题3

描述:
	多源数据库加载异常;
参考:
	https://cloud.tencent.com/developer/article/2000075

问题4:
在docker desktop启动的contains中创建新的容器;

springboot项目配置clickhouse
参考博客1:https://blog.csdn.net/csdn_xpw/article/details/121981940 待验证;

描述:
	springboot项目+clickhouse配置信息,仅通过配置application.properties文件配置,数据库不能实现访问;
	需要创建一个类A具有clickhouse涉及变量,然后被@ConfigurationProperties修饰;
	由于配置了链接池druid,则需要创建一个配置类B,将A作为属性创建到B类中,然后创建返回DruidDataSource对象的方法。
分析:
	原因在于:Properties中配置了druid连接池,但是在代码中没有配置。

JPA

可以通过项目中的实现类生成数据库的表,还附带增删改查的方法。

Druid

Druid 是一个分布式的、支持实时多维联机分析处理OLAP (On-Line Analytical Processing)分析的数据处理系统。

项目相关内容的理解

Springboot启动日志理解

 .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.2.4)

## 标志着Spring Boot应用正在初始化和启动。可以自定义Beaner,在src/main/resources中配置;

2024-04-01T16:52:29.367+08:00  INFO 23720 --- [xhjclass1] [           main] c.x.t.xhjclass1.Xhjclass1Application     : Starting Xhjclass1Application using Java 17.0.10 with PID 23720 (D:\xhjwork\testwork\databaseTest1\xhjclass1\target\classes started by 13834 in D:\xhjwork\testwork\databaseTest1\xhjclass1)
## 应用程序启动类,使用Java版本为17.0.10,进程IDPID)为23720 ,用户ID13834的操作员

2024-04-01T16:52:29.378+08:00  INFO 23720 --- [xhjclass1] [           main] c.x.t.xhjclass1.Xhjclass1Application     : No active profile set, falling back to 1 default profile: "default"  
## 当Spring Boot应用启动时,它会查找激活的profile(配置文件集)。没有找到用于区分不同环境下的应用配置,比如开发环境、测试环境和生产环境等,则默认回退到default properties。
    
2024-04-01T16:52:30.279+08:00  INFO 23720 --- [xhjclass1] [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
## Spring Boot应用在启动时正在自动配置并初始化Spring Data JPA的相关组件

2024-04-01T16:52:30.297+08:00  INFO 23720 --- [xhjclass1] [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 6 ms. Found 0 JPA repository interfaces.
## 扫描6毫秒,发现0JPA依赖接口;

2024-04-01T16:52:30.393+08:00  WARN 23720 --- [xhjclass1] [           main] o.m.s.mapper.ClassPathMapperScanner      : No MyBatis mapper was found in '[com.xhj.test1.xhjclass1]' package. Please check your configuration.
## MyBatis没有找到任何映射器接口(Mapper)。映射器接口是用来定义SQL操作的方法以及与XML映射文件关联的Java接口,在MyBatis中它们扮演着数据访问层的核心角色。

2024-04-01T16:52:31.051+08:00  INFO 23720 --- [xhjclass1] [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port 8080 (http)
## 初始化tomcat 以及其8080端口

2024-04-01T16:52:31.061+08:00  INFO 23720 --- [xhjclass1] [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
## 启动tomcat

2024-04-01T16:52:31.061+08:00  INFO 23720 --- [xhjclass1] [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.19]
## Spring Boot应用已开始启动嵌入式的Apache Tomcat 10.1.19版本作为Web容器,用于托管和运行你的Web应用程序。


2024-04-01T16:52:31.162+08:00  INFO 23720 --- [xhjclass1] [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2024-04-01T16:52:31.164+08:00  INFO 23720 --- [xhjclass1] [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1734 ms
## 初始化一个嵌入式的WebApplicationContext2024-04-01T16:52:31.432+08:00  INFO 23720 --- [xhjclass1] [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2024-04-01T16:52:31.564+08:00  INFO 23720 --- [xhjclass1] [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 6.4.4.Final
2024-04-01T16:52:31.591+08:00  INFO 23720 --- [xhjclass1] [           main] o.h.c.internal.RegionFactoryInitiator    : HHH000026: Second-level cache disabled
## Hibernate ORM框架 处理日志

2024-04-01T16:52:31.835+08:00  INFO 23720 --- [xhjclass1] [           main] o.s.o.j.p.SpringPersistenceUnitInfo      : No LoadTimeWeaver setup: ignoring JPA class transformer
## 当Spring找不到或无法设置LoadTimeWeaver时,会出现这条日志信息,意味着Spring不能启用JPA的类转换器(class transformer),即不会在类加载时对JPA实体类进行额外的处理。

2024-04-01T16:52:31.870+08:00  INFO 23720 --- [xhjclass1] [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2024-04-01T16:52:33.047+08:00  INFO 23720 --- [xhjclass1] [           main] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Added connection org.sqlite.jdbc4.JDBC4Connection@8f2e3e6 
2024-04-01T16:52:33.047+08:00  INFO 23720 --- [xhjclass1] [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
## HikariCP连接池,它是Spring Boot应用中常用的一种高性能的JDBC连接池实现。

2024-04-01T16:52:33.371+08:00  INFO 23720 --- [xhjclass1] [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
## 这条日志信息来自Hibernate ORM框架,它表明当前环境中没有可用的Java Transaction API (JTA) 平台。

2024-04-01T16:52:33.380+08:00  INFO 23720 --- [xhjclass1] [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' 
## Spring Framework在启动过程中完成了对JPAJava Persistence API)持久化单元(Persistence Unit)'default'的Entity Manager Factory的初始化。
     
2024-04-01T16:52:33.421+08:00  WARN 23720 --- [xhjclass1] [           main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
## Spring Boot默认开启了spring.jpa.open-in-view属性,这意味着在Spring MVC渲染视图(View Rendering)期间,仍会保持JPAEntityManager处于打开状态,即实体管理器作用域跨越了HTTP请求的整个生命周期,包括视图渲染阶段。
## 可以通过spring.jpa.open-in-view=false 实现关闭

2024-04-01T16:52:34.206+08:00  INFO 23720 --- [xhjclass1] [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port 8080 (http) with context path ''
## Apache Tomcat服务器已经成功启动,并监听在8080端口上等待HTTP请求

2024-04-01T16:52:34.222+08:00  INFO 23720 --- [xhjclass1] [           main] c.x.t.xhjclass1.Xhjclass1Application     : Started Xhjclass1Application in 5.343 seconds (process running for 5.879)

项目修改文件路径

修改项目文件夹的路径,即从:
main/java/com/demo/example/testxhj1/demo 改成:
main/java/com/demo

文件夹修改成功之后,需要对class类中的package以及import导包路径修改,之后就可以运行了。
以及再修改对应的mapper文件中涉及到类的定位等内容。

项目启动异常1java.lang.AbstractMethodError

异常描述:
java.lang.AbstractMethodError: Receiver class org.springframework.boot.env.EnvironmentPostProcessorApplicationListener does not define or inherit an implementation of the resolved method 'abstract boolean supportsSourceType(java.lang.Class)' of interface org.springframework.context.event.SmartApplicationListener. 

异常分析:
pom文件中,添加如下配置,但是会报上述错误。
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context</artifactId>
	<version>4.3.12.RELEASE</version>
</dependency>

原因分析:

springboot项目pom文件

<!-- 基本信息 -->
pom文件是maven构建工具使用的配置文件,用于定义项目的各种信息和依赖管理。
    <groupId>com.unicom</groupId>
    // 定义项目的组织唯一标识符,通常通过反域名的形式保证全球唯一性;
    <artifactId>anon.sub</artifactId>
    // 定义实际项目的名称与模块名称,与groupId构成项目的唯一坐标;
    <version>1.0-SNAPSHOT</version>
    // 指定项目的版本号
    <packaging>jar</packaging>
    // 指定项目打包后的类型
    <name>anon.sub</name>
    // 为项目提供一个人类可读的名称
    <description>Anonymous Subscription</description>
    // 为项目提供一个简短描述

日志文件

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,您想要了解关于springboot项目实战的内容。我可以为您提供一些基本的信息,帮助您入门。 Spring Boot是一个基于Spring框架的快速开发Web应用的框架,它可以提供一些默认的配置,使得开发者可以更快的进行开发。下面是一些Spring Boot项目实战的经验: 1. 创建一个Spring Boot项目 您可以通过Spring Boot官网提供的Spring Initializr来创建一个Spring Boot项目,它提供了一个可视化的界面,您可以选择您所需的依赖和配置,然后下载生成的项目。 2. 配置数据库 Spring Boot框架提供了对多种数据库的支持,您可以通过配置文件来配置您需要使用的数据库。例如,如果您想使用MySQL数据库,可以在application.properties或application.yml文件中进行配置: ``` spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driver ``` 3. 编写Controller 在Spring Boot中,您可以使用注解来标记您的Controller类和方法,使其能够接受HTTP请求并返回响应。例如: ``` @RestController @RequestMapping("/hello") public class HelloController { @GetMapping public String hello() { return "Hello, Spring Boot!"; } } ``` 4. 使用模板引擎 Spring Boot提供了对多种模板引擎的支持,例如Thymeleaf、Freemarker、Velocity等。您可以在pom.xml文件中添加对应的依赖,然后在Controller中使用模板引擎来渲染页面。 5. 部署应用程序 最后,您可以使用Spring Boot提供的打包工具将应用程序打包成可执行的jar文件,然后在服务器上运行它。您也可以将应用程序部署到云平台,例如AWS、Azure、Heroku等。 希望这些信息能帮助您入门Spring Boot项目实战。如有疑问,可以随时向我提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值