为了账号安全,请及时绑定邮箱和手机立即绑定

Java主流技术实战入门教程

标签:
Java
概述

本文详细介绍了Java主流技术实战,包括编程基础、主流框架实战、数据库技术以及Web开发实战等内容,旨在帮助开发者掌握Java开发的核心技能。此外,文章还提供了丰富的实战项目案例,以加深读者对Java企业级应用的理解和应用。

Java主流技术实战入门教程
Java编程基础

Java简介与环境搭建

Java是一种广泛使用的编程语言和计算平台,开发于20世纪90年代,由Sun Microsystems(现为Oracle公司)创建。Java因其跨平台性(一次编写,到处运行)而广受开发者的欢迎。Java程序可以在任何安装了Java运行时环境(JRE)的机器上运行,这使得Java成为了开发跨平台应用程序的理想选择。

为了开始使用Java,你需要搭建一个Java开发环境。环境搭建主要包括安装Java开发工具包(JDK)和选择一个集成开发环境(IDE)。以下是详细的步骤:

  1. 安装JDK

    • 访问Oracle官方网站下载页面或从OpenJDK获取最新版本的JDK。
    • 下载完成后,根据操作系统类型(Windows, Linux, macOS)安装JDK。
    • 安装完成后,建议设置JDK的环境变量。
    • 对于Windows用户,编辑PATH环境变量以包含JDK的bin目录。
    • 对于Linux用户,编辑~/.bashrc~/.zshrc以设置JAVA_HOMEPATH
    • 对于macOS用户,可以通过Homebrew等工具安装JDK,并设置相应的环境变量。
  2. 选择IDE
    • Eclipse是最受欢迎的Java IDE之一,提供丰富的插件支持和强大的代码编辑功能。
    • IntelliJ IDEA是另一个流行的IDE,尤其是对于Java企业级应用开发。
    • NetBeans也是不错的选择,特别是对于初学者。

Java语法入门与基本语法

Java语言的语法与C++类似,但语法更简单,更注重安全性和面向对象编程。以下是Java中的一些基本语法:

变量与类型

Java使用变量来存储数据,并使用类型来定义变量的数据类型。Java中的基本数据类型包括:

  • int:整数类型,例如int a = 10;
  • double:浮点类型,例如double b = 3.14;
  • boolean:布尔类型,例如boolean c = true;
  • char:字符类型,例如char d = 'A';

声明和初始化变量

声明变量时需要指定变量的数据类型,然后给变量赋初值。例如:

int number = 10;
double pi = 3.14;
boolean flag = true;
char letter = 'A';

控制结构

Java中的控制结构包括条件语句(ifelse)、循环结构(forwhiledo-while)和switch语句。以下是一些示例:

  1. 条件语句
int age = 18;
if (age >= 18) {
    System.out.println("成年人");
} else {
    System.out.println("未成年人");
}
  1. 循环结构
// for 循环
for (int i = 0; i < 5; i++) {
    System.out.println("循环次数:" + i);
}

// while 循环
int j = 0;
while (j < 5) {
    System.out.println("while 循环次数:" + j);
    j++;
}

// do-while 循环
int k = 0;
do {
    System.out.println("do-while 循环次数:" + k);
    k++;
} while (k < 5);
  1. switch 语句
int day = 3;
switch (day) {
    case 1:
    case 2:
    case 3:
        System.out.println("是工作日");
        break;
    case 4:
    case 5:
        System.out.println("是周末");
        break;
    default:
        System.out.println("未知");
}

Java面向对象编程基础

面向对象编程(OOP)是Java的核心,它通过类和对象来组织和封装代码。以下是面向对象编程的基本概念:

类和对象

  • 类(Class):定义对象的模板。类中定义了对象的属性和方法。
  • 对象(Object):类的实例。对象是类的具体实现。
// 定义一个Person类
public class Person {
    // 属性
    String name;
    int age;

    // 方法
    public void sayHello() {
        System.out.println("你好,我是" + name + ",我" + age + "岁了");
    }
}

// 创建Person对象
Person person = new Person();
person.name = "张三";
person.age = 20;
person.sayHello(); // 输出:你好,我是张三,我20岁了

继承

继承是一种机制,允许一个类继承另一个类的属性和方法。被继承的类称为父类或超类,继承的类称为子类。

// 定义父类Animal
public class Animal {
    public void eat() {
        System.out.println("动物在进食");
    }
}

// 定义子类Dog,继承自Animal
public class Dog extends Animal {
    public void bark() {
        System.out.println("狗在吠叫");
    }
}

// 使用Dog类
Dog dog = new Dog();
dog.eat(); // 输出:动物在进食
dog.bark(); // 输出:狗在吠叫

多态

多态是指同一个行为在不同的时候表现不同,这是通过方法重写(覆盖)实现的。

// 定义一个接口Shape
interface Shape {
    void draw();
}

// 定义一个类Circle,实现Shape接口
public class Circle implements Shape {
    public void draw() {
        System.out.println("画一个圆形");
    }
}

// 定义一个类Rectangle,实现Shape接口
public class Rectangle implements Shape {
    public void draw() {
        System.out.println("画一个矩形");
    }
}

// 使用多态
Shape circle = new Circle();
circle.draw(); // 输出:画一个圆形
Shape rectangle = new Rectangle();
rectangle.draw(); // 输出:画一个矩形
Java主流框架实战

Spring框架简介与基础使用

Spring是一个开源的Java平台,它提供了全面的基础设施支持,以简化Java应用程序的开发。Spring框架主要有几个核心模块,包括核心容器、数据访问/集成、Web、AOP(面向切面编程)等。

基础配置

Spring的核心是IoC(控制反转)容器。容器负责管理、配置、装配、装配对象及其依赖关系。

XML配置
<bean id="helloBean" class="com.example.HelloBean">
    <property name="message" value="Hello, Spring!"/>
</bean>
Java配置
@Configuration
public class AppConfig {
    @Bean
    public HelloBean helloBean() {
        HelloBean bean = new HelloBean();
        bean.setMessage("Hello, Spring!");
        return bean;
    }
}

依赖注入

Spring使用依赖注入来管理对象及其依赖关系。注入方式包括构造方法注入、属性注入和工厂方法注入。

属性注入
public class HelloBean {
    private String message;

    public void setMessage(String message) {
        this.message = message;
    }

    public void display() {
        System.out.println(message);
    }
}

// XML配置
<bean id="helloBean" class="com.example.HelloBean">
    <property name="message" value="Hello"/>
</bean>

// Java配置
@Configuration
public class AppConfig {
    @Bean
    public HelloBean helloBean() {
        HelloBean bean = new HelloBean();
        bean.setMessage("Hello");
        return bean;
    }
}

AOP

Spring AOP提供了面向切面编程的支持,可以将横切关注点(如日志、事务管理)从业务逻辑中分离出来。

基本配置
// 定义切面
@Aspect
@Component
public class LoggingAspect {
    @Before("execution(* com.example..*(..))")
    public void beforeAdvice() {
        System.out.println("调用前");
    }
}

// 配置AOP
@Configuration
@EnableAspectJAutoProxy
public class AppConfig {
}

Spring Boot快速开发入门

Spring Boot是一个构建在Spring框架之上的框架,用于快速构建Spring应用。Spring Boot简化了Spring应用的配置,可以大幅减少开发、测试、部署等环节的复杂性。

创建Spring Boot项目

创建Spring Boot项目可以使用Spring Initializr或IDE中的插件(如Spring Boot CLI)。

使用Spring Initializr
  1. 访问Spring Initializr网站(https://start.spring.io/)。
  2. 选择所需的技术栈,如Web、JPA等。
  3. 生成项目并导入到IDE中。

Spring Boot基本配置

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

控制器

控制器负责与HTTP请求交互,并将请求转发给服务层处理。

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello";
    }
}

服务层

服务层处理业务逻辑。

@Service
public class HelloService {
    public String sayHello() {
        return "Hello, Service!";
    }
}

Spring Boot Web项目实战

开发Java Web项目时,通常会使用MVC(Model-View-Controller)模式来组织代码。Model负责业务逻辑,View负责展示数据,Controller负责处理用户请求。

示例代码
@Controller
public class HelloController {
    @RequestMapping("/hello")
    public String hello() {
        return "hello";
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h1>Hello Spring MVC!</h1>
</body>
</html>

MyBatis框架简介与基础使用

MyBatis是一个优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射。

基本配置

<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

映射文件

<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectUser" resultType="com.example.model.User">
        SELECT * FROM user WHERE id = #{id}
    </select>
</mapper>

使用Mapper接口

public interface UserMapper {
    User selectUser(int id);
}
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public User getUser(int id) {
        return userMapper.selectUser(id);
    }
}
数据库技术实战

MySQL数据库基础操作

MySQL是一种关系型数据库管理系统,支持多种编程语言,包括Java。以下是MySQL的一些基本操作:

创建数据库

CREATE DATABASE mydb;

创建表

CREATE TABLE user (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100),
    age INT
);

插入数据

INSERT INTO user (name, age) VALUES ('张三', 20);

查询数据

SELECT * FROM user;

更新数据

UPDATE user SET age = 21 WHERE name = '张三';

删除数据

DELETE FROM user WHERE name = '张三';

使用JDBC进行数据库操作

JDBC(Java Database Connectivity)是Java中用于数据库访问的标准API。以下是使用JDBC进行数据库操作的基本步骤:

连接数据库

String url = "jdbc:mysql://localhost:3306/mydb";
String username = "root";
String password = "password";

Connection conn = DriverManager.getConnection(url, username, password);

执行SQL语句

String sql = "SELECT * FROM user";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);

while (rs.next()) {
    System.out.println(rs.getInt("id") + " " + rs.getString("name") + " " + rs.getInt("age"));
}

关闭资源

rs.close();
stmt.close();
conn.close();

ORM技术与Hibernate入门

ORM(对象关系映射)是一种编程技术,用于在关系型数据库和面向对象的程序设计之间架起桥梁。Hibernate是Java中一个流行的ORM框架,它提供了强大的工具用于持久化Java对象。

基本配置

<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mydb</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">password</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.show_sql">true</property>
        <mapping class="com.example.model.User"/>
    </session-factory>
</hibernate-configuration>

实体类

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String name;
    private int age;

    // getters and setters
}

使用Hibernate

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();

User user = new User();
user.setName("张三");
user.setAge(20);
session.save(user);

tx.commit();
session.close();
Web开发实战

Java Web基础与Servlet/JSP技术

Java Web开发主要基于Servlet和JSP技术。Servlet是运行在服务器端的Java类,用于处理HTTP请求。JSP(JavaServer Pages)是一种动态Web页面技术,允许在页面中嵌入Java代码。

Servlet

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<body>");
        out.println("<h1>Hello Servlet!</h1>");
        out.println("</body>");
        out.println("</html>");
    }
}

JSP

<%@ page import="java.util.Date" %>
<html>
<body>
<h1>Hello JSP!</h1>
<%= new Date() %>
</body>
</html>

Java Web项目实战

开发Java Web项目时,通常会使用MVC(Model-View-Controller)模式来组织代码。Model负责业务逻辑,View负责展示数据,Controller负责处理用户请求。

Spring MVC

@Controller
public class HelloController {
    @RequestMapping("/hello")
    public String hello() {
        return "hello";
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h1>Hello Spring MVC!</h1>
</body>
</html>

RESTful API设计与实践

REST(Representational State Transfer)是一种架构风格,用于设计网络应用程序。RESTful API是指遵循REST架构风格的API。

设计原则

  1. 资源定位:每个资源都有一个唯一的URI。
  2. 无状态:客户端和服务器之间的会话状态不能保存在服务器端。
  3. 统一接口:使用标准的HTTP方法(GET、POST、PUT、DELETE)。
  4. 自描述:通过HTTP头部提供元数据。
  5. 分层系统:客户端与服务器之间的交互通过中间层进行。

示例

@RestController
public class UserController {
    @GetMapping("/users/{id}")
    public User getUser(@PathVariable int id) {
        return userService.getUser(id);
    }

    @PostMapping("/users")
    public User createUser(@RequestBody User user) {
        return userService.createUser(user);
    }

    @PutMapping("/users/{id}")
    public User updateUser(@PathVariable int id, @RequestBody User user) {
        return userService.updateUser(id, user);
    }

    @DeleteMapping("/users/{id}")
    public void deleteUser(@PathVariable int id) {
        userService.deleteUser(id);
    }
}
常见问题与调试技巧

Java开发常见问题与解决方法

  1. Class Not Found Exception:当Java程序试图加载一个不存在的类时,会抛出这个异常。解决方法是检查类路径是否正确,确保所有依赖库都已正确引入。

  2. NullPointerException:当试图调用一个空对象的方法或访问空对象的属性时,会抛出这个异常。解决方法是检查对象是否为null。

  3. OutOfMemoryError:当Java程序消耗了太多的内存时,会抛出这个异常。解决方法是增加JVM堆内存大小,优化代码减少内存使用。

Java调试工具使用教程

Java提供了多种调试工具,如JDB(Java Debugger)、IDE内建的调试工具(如Eclipse、IntelliJ IDEA)等。

使用JDB

  1. 启动调试模式
java -agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=n -jar myapp.jar
  1. 连接到调试器
jdb -attach localhost:8000
  1. 设置断点、单步执行
stop at com.example.MyClass:10
step
next
print variable

使用IDE调试

  1. 在代码中设置断点

点击代码行号左侧的空白区域,设置断点。

  1. 启动调试模式

点击IDE中的“Debug”按钮或使用快捷键。

  1. 单步执行

使用“Step Over”或“Step Into”进行单步执行。

调试技术

  • 堆栈跟踪
  • 变量监视
  • 表达式评估

Java性能优化入门

Java性能优化涉及多个方面,包括代码优化、JVM调优、算法优化等。

JVM调优

  1. 设置堆大小
-Xms512m -Xmx1024m
  1. 设置新生代大小
-XX:NewSize=256m -XX:MaxNewSize=256m
  1. 设置元空间大小
-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m

代码优化

  1. 避免不必要的对象创建

减少对象创建,可以使用对象池或重用对象。

  1. 使用StringBuilder

对于字符串拼接,使用StringBuilder比String更适合。

String result = new StringBuilder()
    .append("Hello, ")
    .append("World")
    .toString();
  1. 使用HashMap

HashMap的性能优于ArrayList。

Map<String, String> map = new HashMap<>();
map.put("key1", "value1");
map.put("key2", "value2");
实战项目案例

博客系统开发实战

博客系统是一个典型的Web应用,可以用于发布文章、管理用户、评论等。

  1. 需求分析

    • 用户注册、登录。
    • 发布、编辑、删除文章。
    • 用户评论。
  2. 技术栈

    • Spring Boot
    • MyBatis
    • MySQL
    • Thymeleaf(模板引擎)
  3. 项目结构

    • src/main/java: Java源代码。
    • src/main/resources: 配置文件、SQL脚本。
    • src/main/resources/templates: HTML模板。
    • src/main/resources/static: 静态资源(CSS、JS、图片)。
  4. 实现
    • 用户模块
      • User实体类。
      • UserService服务类。
      • UserController控制器类。
    • 文章模块
      • Article实体类。
      • ArticleService服务类。
      • ArticleController控制器类。
    • 评论模块
      • Comment实体类。
      • CommentService服务类。
      • CommentController控制器类。

示例代码

// User实体类
@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String name;
    private String password;

    // getters and setters
}

// UserService服务类
@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public void registerUser(User user) {
        userRepository.save(user);
    }
}

// UserController控制器类
@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @PostMapping("/users")
    public User registerUser(@RequestBody User user) {
        userService.registerUser(user);
        return user;
    }
}

简易电商系统开发实战

电商系统是一个复杂的Web应用,涉及商品管理、订单管理、支付等。

  1. 需求分析

    • 商品展示。
    • 购物车管理。
    • 订单管理。
    • 支付接口。
  2. 技术栈

    • Spring Boot
    • MyBatis
    • MySQL
    • Thymeleaf(模板引擎)
  3. 项目结构

    • src/main/java: Java源代码。
    • src/main/resources: 配置文件、SQL脚本。
    • src/main/resources/templates: HTML模板。
    • src/main/resources/static: 静态资源(CSS、JS、图片)。
  4. 实现
    • 商品模块
      • Product实体类。
      • ProductService服务类。
      • ProductController控制器类。
    • 订单模块
      • Order实体类。
      • OrderService服务类。
      • OrderController控制器类。
    • 支付模块
      • Payment实体类。
      • PaymentService服务类。
      • PaymentController控制器类。

示例代码

// Product实体类
@Entity
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String name;
    private double price;

    // getters and setters
}

// ProductService服务类
@Service
public class ProductService {
    @Autowired
    private ProductRepository productRepository;

    public List<Product> getAllProducts() {
        return productRepository.findAll();
    }
}

// ProductController控制器类
@RestController
public class ProductController {
    @Autowired
    private ProductService productService;

    @GetMapping("/products")
    public List<Product> getAllProducts() {
        return productService.getAllProducts();
    }
}

Java企业级应用案例分析

企业级应用通常涉及复杂的业务逻辑、高并发处理、分布式架构等。以下是几个企业级应用案例分析:

  1. 在线教育平台
    • 需求分析
      • 用户注册、登录。
      • 课程管理。
      • 作业提交、评分。
    • 技术栈
      • Spring Boot
      • MyBatis
      • MySQL
      • Redis(缓存)
      • RabbitMQ(消息队列)
    • 项目结构
      • src/main/java: Java源代码。
      • src/main/resources: 配置文件、SQL脚本。
      • src/main/resources/templates: HTML模板。
      • src/main/resources/static: 静态资源(CSS、JS、图片)。
    • 实现
      • 用户模块
      • User实体类。
      • UserService服务类。
      • UserController控制器类。
      • 课程模块
      • Course实体类。
      • CourseService服务类。
      • CourseController控制器类。
      • 作业模块
      • Homework实体类。
      • HomeworkService服务类。
      • HomeworkController控制器类。

示例代码

// User实体类
@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String name;
    private String password;

    // getters and setters
}

// Course实体类
@Entity
public class Course {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String name;
    private String description;

    // getters and setters
}

// UserService服务类
@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public void registerUser(User user) {
        userRepository.save(user);
    }
}

// CourseService服务类
@Service
public class CourseService {
    @Autowired
    private CourseRepository courseRepository;

    public void addCourse(Course course) {
        courseRepository.save(course);
    }
}

// UserController控制器类
@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @PostMapping("/users")
    public User registerUser(@RequestBody User user) {
        userService.registerUser(user);
        return user;
    }
}

// CourseController控制器类
@RestController
public class CourseController {
    @Autowired
    private CourseService courseService;

    @PostMapping("/courses")
    public Course addCourse(@RequestBody Course course) {
        courseService.addCourse(course);
        return course;
    }
}
  1. 在线商城
    • 需求分析
      • 商品展示。
      • 购物车管理。
      • 订单管理。
      • 支付接口。
    • 技术栈
      • Spring Boot
      • MyBatis
      • MySQL
      • Redis(缓存)
      • Kafka(消息队列)
    • 项目结构
      • src/main/java: Java源代码。
      • src/main/resources: 配置文件、SQL脚本。
      • src/main/resources/templates: HTML模板。
      • src/main/resources/static: 静态资源(CSS、JS、图片)。
    • 实现
      • 商品模块
      • Product实体类。
      • ProductService服务类。
      • ProductController控制器类。
      • 订单模块
      • Order实体类。
      • OrderService服务类。
      • OrderController控制器类。
      • 支付模块
      • Payment实体类。
      • PaymentService服务类。
      • PaymentController控制器类。

示例代码

// Product实体类
@Entity
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String name;
    private double price;

    // getters and setters
}

// ProductService服务类
@Service
public class ProductService {
    @Autowired
    private ProductRepository productRepository;

    public List<Product> getAllProducts() {
        return productRepository.findAll();
    }
}

// ProductController控制器类
@RestController
public class ProductController {
    @Autowired
    private ProductService productService;

    @GetMapping("/products")
    public List<Product> getAllProducts() {
        return productService.getAllProducts();
    }
}

// Order实体类
@Entity
public class Order {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String orderNumber;
    private double total;

    // getters and setters
}

// OrderService服务类
@Service
public class OrderService {
    @Autowired
    private OrderRepository orderRepository;

    public void createOrder(Order order) {
        orderRepository.save(order);
    }
}

// OrderController控制器类
@RestController
public class OrderController {
    @Autowired
    private OrderService orderService;

    @PostMapping("/orders")
    public Order createOrder(@RequestBody Order order) {
        orderService.createOrder(order);
        return order;
    }
}

// Payment实体类
@Entity
public class Payment {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String paymentId;
    private double amount;

    // getters and setters
}

// PaymentService服务类
@Service
public class PaymentService {
    @Autowired
    private PaymentRepository paymentRepository;

    public void processPayment(Payment payment) {
        paymentRepository.save(payment);
    }
}

// PaymentController控制器类
@RestController
public class PaymentController {
    @Autowired
    private PaymentService paymentService;

    @PostMapping("/payments")
    public Payment processPayment(@RequestBody Payment payment) {
        paymentService.processPayment(payment);
        return payment;
    }
}
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消