后端学习计划

目录

学习计划参照

第一阶段  JAVA基础

Day 1

Day 2

Day 3

Day 4

Day 5

第二阶段  数据库MySQL

Day 6

Day 7

第三阶段  项目框架

Day 8


下表转自黄高原老师-《新生培训方案》

学习内容

学习资料

第一阶段:

 JAVA基础

(2周)

java环境搭建:对jvm,jre,jdk 和系统环境变量都有了解,能搭建运行编译环境,编译运行helloworld

java 语法,包括变量、对象、接口、泛型、异常、IO 都有了解

java8: stream、 lambda 等

视频 :

https://www.bilibili.com/video/BV1fh411y7R8

文档:

https://www.runoob.com/java/java-tutorial.html

https://www.runoob.com/java/java8-new-features.html

https://www.liaoxuefeng.com/wiki/1252599548343744

书籍

《Head First Java》

第二阶段:

数据库MySQL

(1周)

SQL 语句、索引,食物,库表设计

视频 :  https://www.bilibili.com/video/BV1Vy4y1z7EX

文档

SQL - 菜鸟教程:https://www.runoob.com/sql/sql-tutorial.html

MySQL - 菜鸟教程:https://www.runoob.com/mysql/mysql-tutorial.html

第三阶段:

项目框架

(4周)

maven

spring

springboot

spring jpa

视频:

Spring 5 框架最新版教程(idea版):https://www.bilibili.com/video/BV1Vf4y127N5

SpringMVC 2021 最新教程:https://www.bilibili.com/video/BV1Ry4y1574R

Maven 零基础入门教程:https://www.bilibili.com/video/BV1TW411g7hP

SpringBoot2 零基础入门:https://www.bilibili.com/video/BV19K4y1L7MT

网站:

maven和spring官网

学习计划参照

第一阶段  JAVA基础

Day 1

(2023-08-12)

1.1.1 学习内容

  • jvm, jre, jdk
  • Java环境搭建与运行

1.1.2 学习目标

  • 明晰JDK、JRE和JVM的意义和关系
  • 下载安装JDK,配置系统环境变量,搭建运行编译环境
  • 编译运行helloworld

1.1.3 学习成果

  • JDK、JRE和JVM关系图

        JVM (Java Virtual Machine  Java 虚拟机)

        JRE (Java Runtime Environment  Java 运行环境)

        JDK (Java Development Kit  Java 开发工具包)

  • 第一个helloworld程序

  • 运行结果

Day 2

(2023-08-13)

1.2.1 学习内容

  • 变量
  • 运算符
  • 程序控制结构
  • 数组、排序和查找

1.2.2 学习目标

  • 明晰Java变量、运算符、程序控制结构(if-else/ switch,for/ while/ do..while,break/ continue/ return)、数组(一维/二维)、排序和查找的基本用法和结构
  • 综合上述学习内容练习综合案例
  • 二维数组应用案例(如杨辉三角)

1.2.3 学习成果

public class ArrayTest {
    public static void main(String[] args) {
        MyTools mt = new MyTools();
        int[] arr = {10, -1, 8, 0, 34};
        mt.bubble(arr);
        System.out.println("======");
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i] + "\t");
            // System.out.println("args = " + Arrays.toString(args));

        }
    }

}


class MyTools {

    public void bubble(int[] arr) {
        int temp = 0;
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }
}

Day 3

(2023-08-14)

1.3.1 学习内容

   面向对象编程(基础)

  • 对象
  • 实例
  • 方法递归
  • 方法重载
  • this关键字

   面向对象编程(中级)  

  • 封装
  • 继承
  • 多态
  • 方法重写
  • 4种修饰符使用
  • super关键字

1.3.2 学习目标

  • 根据教程明晰Java面向对象编程的基本特征和方法
  • 完成零钱通项目,实现明细、入账、消费、退出的功能

  • 完成房屋出租系统项目,实现新增房源、查找、删除、修改、列表、退出的功能

1.3.3 学习成果

        8.14 学习成果

Day 4

(2023-08-15)

1.4.1 学习内容

  • 类变量和类方法
  • 代码块
  • 单例模式
  • final关键字
  • 抽象类和模板设计模式
  • 接口
  • 内部类

1.4.2 学习目标

  • 静态方法只能访问静态成员,非静态方法可以访问所有成员,遵守访问权限
  • static代码块在类加载时才执行,只执行一次(创建对象实例、当创建子类对象实例时父类被加载、使用类的静态成员);普通代码块每创建对象一次调用一次
  • 创建对象时,对一个类的调用顺序为:静态代码块和静态属性初始化(两个都有看各自顺序)=》普通代码块和普通属性初始化(两个都有看各自顺序)=》构造方法
  • 创建子类对象调用顺序:父类静态 =》子类静态 =》父类普通 =》父类构造 =》子类普通 =》子类构造
  • final应用场景:类不能被继承(但可以实例化对象)、子类不能重写父类方法(但子类可以继承)、类属性值不能修改、局部变量不能修改
  • final赋初值:定义时、构造器中、代码块中;(静态)定义时、静态代码块
  • 抽象类abstract不能用private、final、static修饰
  • interface接口中(1 抽象方法 2 默认实现方法 3 静态方法)
  • 接口中属性等价 public static final 
  • 类继承类是单继承,但类和接口可以继承多个接口
  • 类的五大成员:属性、方法、构造器、代码块、内部类
  • 局部内部类:外部其他类不能访问局部内部类;访问外部类成员使用外部类名.this.成员访问;局部内部类直接访问外部类成员、外部类访问局部内部类成员需要先创建对象
  • 匿名内部类

1.4.3 学习成果

        8.15 学习成果

知识点:继承、多态、动态绑定、内部类接口

package com.weiwei.innerclass_;

public class InnerClassExercise02 {
    public static void main(String[] args) {
        CellPhone cellPhone = new CellPhone();
        cellPhone.alarmClock(new Bell() {
            @Override
            public void ring() {
                System.out.println("懒猪起床了");
            }
        });

        cellPhone.alarmClock(new Bell() {
            @Override
            public void ring() {
                System.out.println("小伙伴上课了");
            }
        });


    }
}

interface Bell{
    void ring();
}

class CellPhone{
    public void alarmClock(Bell bell){
        bell.ring();
    }
}

知识点:代码块静态变量(方法)、构造器

package com.weiwei.codeblock_;

public class CodeBlockDetail04 {
    public static void main(String[] args) {

        new B02();
    }
}

class A02 { 
    private static int n1 = getVal01();
    static {
        System.out.println("A02的一个静态代码块..");//(2)
    }
    {
        System.out.println("A02的第一个普通代码块..");//(5)
    }
    public int n3 = getVal02();
    public static int getVal01() {
        System.out.println("getVal01");//(1)
        return 10;
    }

    public int getVal02() {
        System.out.println("getVal02");//(6)
        return 10;
    }

    public A02() {
        System.out.println("A02的构造器");//(7)
    }

}

class B02 extends A02 { 

    private static int n3 = getVal03();

    static {
        System.out.println("B02的一个静态代码块..");//(4)
    }
    public int n5 = getVal04();
    {
        System.out.println("B02的第一个普通代码块..");//(9)
    }

    public static int getVal03() {
        System.out.println("getVal03");//(3)
        return 10;
    }

    public int getVal04() {
        System.out.println("getVal04");//(8)
        return 10;
    }

    public B02() {

        System.out.println("B02的构造器");//(10)

    }
}

Day 5

(2023-08-16)

1.5.1 学习内容

  • 异常
  • 泛型
  • IO
  • Java8

1.5.2 学习目标

  •  try-catch-finally 和 throws(默认)
  • 注意泛型的语法 ;泛型类、泛型接口、泛型方法( 泛型创建对象时,必须说明其类型,不指定默认为Object)
  •  InputStream 和 OutputStream

1.5.3 学习成果

       8.16 学习成果

        ( 代码见上 )

知识点:异常处理(try-catch、throws、throw)

知识点:泛型、集合的操作

第二阶段  数据库MySQL

Day 6

(2023-08-17)

2.1.1 学习内容

  • MySQL安装配置
  • 简单查询
  • 条件查询
  • 排序数据
  • 单行处理
  • 多行处理
  • 分组查询
  • 连接查询
  • 子查询
  • 表的创建

2.1.2 学习目标

  • DQL 语句总结:

        select 
                ...
            from
                ...
            where
                ...
            group by
                ...
            having
                ...
            order by
                ...
            limit
                ...
    
            执行顺序:
                1.from
                2.where
                3.group by
                4.having
                5.select
                6.order by
                7.limit..

DQL操作命令(操作符)语句结构
条件查询

=、<>、between...and...、is null、and、or、in、not、like

select...from...where...
数据排序order by、asc(desc)select...from...order by...(asc/desc)
单行处理lower、upper、substr、length、rand()、case...when...then...else...end、ifnullselect 命令(...) from...
多行处理count、sum、avg、max、minselect 命令(...) from...
分组查询group by、havingselect...from...where...group by...having...order by...
连接查询join...on...、inner/left outer/right outerselect...from...left/right outer join...on...
其他union、limit
DDL操作语法格式
建表

create table 表名(字段名1 数据类型, 字段名2 数据类型, 字段名3 数据类型);

    create table 表名(
        字段名1 数据类型, 
        字段名2 数据类型, 
        字段名3 数据类型
    );
 

DML操作语法格式
插入数据insert into 表名(字段名1,字段名2,字段名3...) values(值1,值2,值3);
修改数据update 表名 set 字段名1=值1,字段名2=值2,字段名3=值3... where 条件;
删除数据delete from 表名 where 条件;

2.1.3 学习成果

       8.17 学习成果

        ( 代码见上 )

知识点:DQL操作

知识点:DQL操作

补充:DDL,DML操作

Day 7

(2023-08-18)

2.2.1 学习内容

  • 事务
  • 索引
  • 视图
  • DBA命令
  • 数据库设计三范式

2.2.2 学习目标

  • 事务只对DML语句有效果
  • 事务开启:start transaction; 回滚事务:rollback; 提交事务:commit;
隔离级别要求

 读未提交

(READ UMCOMMITTED)

允许一个事务可以看到其他事务未提交的修改

读已提交

(READ COMMITTED)

允许一个事务只能看到其他事务已经提交的修改,未提交的修改是不可见的

可重复读

(REPEATABLE READ)

事务不会读到其他事务对已有数据的修改,即使其他事务已提交

串行化

(SERIALIZABLE)

相当于单线程,后一个事务的执行必须等待前一个事务结束
索引操作语句结构
创建索引create unique index 索引名 on 表名(列名);
查看索引show index from ...;
使用索引explain select ... from ... where ...;
删除索引drop index ... on ...;
三范式要求
第一范式有主键,具有原子性,字段不可分割
第二范式完全依赖,没有部分依赖
第三范式没有传递依赖

2.2.3 学习成果

       8.18 学习成果

        ( 代码见上 )

知识点:事务

mysql> insert into t_vip values(9,'lwl');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t_vip values(10,'lwl');
Query OK, 1 row affected (0.00 sec)

mysql> select * from t_vip;
+----+----------+
| id | name     |
+----+----------+
|  1 | zhangsan |
|  2 | zhangsan |
|  3 | zhangsan |
|  4 | zhangsan |
|  5 | zhangsan |
|  6 | zhangsan |
|  7 | zhangsan |
|  8 | zhangsan |
|  9 | lwl      |
| 10 | lwl      |
+----+----------+
10 rows in set (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from t_vip;
+----+----------+
| id | name     |
+----+----------+
|  1 | zhangsan |
|  2 | zhangsan |
|  3 | zhangsan |
|  4 | zhangsan |
|  5 | zhangsan |
|  6 | zhangsan |
|  7 | zhangsan |
|  8 | zhangsan |
+----+----------+
8 rows in set (0.00 sec)

知识点:索引

mysql> select * from emp;
+-------+--------+-----------+------+------------+---------+---------+--------+
| EMPNO | ENAME  | JOB       | MGR  | HIREDATE   | SAL     | COMM    | DEPTNO |
+-------+--------+-----------+------+------------+---------+---------+--------+
|  7369 | SMITH  | CLERK     | 7902 | 1980-12-17 |  800.00 |    NULL |     20 |
|  7499 | ALLEN  | SALESMAN  | 7698 | 1981-02-20 | 1600.00 |  300.00 |     30 |
|  7521 | WARD   | SALESMAN  | 7698 | 1981-02-22 | 1250.00 |  500.00 |     30 |
|  7566 | JONES  | MANAGER   | 7839 | 1981-04-02 | 2975.00 |    NULL |     20 |
|  7654 | MARTIN | SALESMAN  | 7698 | 1981-09-28 | 1250.00 | 1400.00 |     30 |
|  7698 | BLAKE  | MANAGER   | 7839 | 1981-05-01 | 2850.00 |    NULL |     30 |
|  7782 | CLARK  | MANAGER   | 7839 | 1981-06-09 | 2450.00 |    NULL |     10 |
|  7788 | SCOTT  | ANALYST   | 7566 | 1987-04-19 | 3000.00 |    NULL |     20 |
|  7839 | KING   | PRESIDENT | NULL | 1981-11-17 | 5000.00 |    NULL |     10 |
|  7844 | TURNER | SALESMAN  | 7698 | 1981-09-08 | 1500.00 |    0.00 |     30 |
|  7876 | ADAMS  | CLERK     | 7788 | 1987-05-23 | 1100.00 |    NULL |     20 |
|  7900 | JAMES  | CLERK     | 7698 | 1981-12-03 |  950.00 |    NULL |     30 |
|  7902 | FORD   | ANALYST   | 7566 | 1981-12-03 | 3000.00 |    NULL |     20 |
|  7934 | MILLER | CLERK     | 7782 | 1982-01-23 | 1300.00 |    NULL |     10 |
+-------+--------+-----------+------+------------+---------+---------+--------+
14 rows in set (0.00 sec)

mysql> explain select * from emp where ename = 'KING';
+----+-------------+-------+------------+------+-----------------+-----------------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys   | key             | key_len | ref   | rows | filtered | Extra |
+----+-------------+-------+------------+------+-----------------+-----------------+---------+-------+------+----------+-------+
|  1 | SIMPLE      | emp   | NULL       | ref  | emp_ename_index | emp_ename_index | 13      | const |    1 |   100.00 | NULL  |
+----+-------------+-------+------------+------+-----------------+-----------------+---------+-------+------+----------+-------+
1 row in set, 1 warning (0.00 sec)

mysql> drop index emp_ename_index on emp;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> create index emp_ename_index on emp(ename);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> explain select * from emp where ename = 'KING';
+----+-------------+-------+------------+------+-----------------+-----------------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys   | key             | key_len | ref   | rows | filtered | Extra |
+----+-------------+-------+------------+------+-----------------+-----------------+---------+-------+------+----------+-------+
|  1 | SIMPLE      | emp   | NULL       | ref  | emp_ename_index | emp_ename_index | 13      | const |    1 |   100.00 | NULL  |
+----+-------------+-------+------------+------+-----------------+-----------------+---------+-------+------+----------+-------+
1 row in set, 1 warning (0.00 sec)

第三阶段  项目框架

Day 8

(2023-08-21)

3.1.1 学习内容

  • 反射
  • Maven

3.1.2 学习目标

  • 反射机制和用法
  • Maven负责项目的自动构建,帮助开发人员做项目代码的编译,测试, 打包,安装,部署等工作;以及管理依赖(管理项目中使用的各种jar包)
  • maven工具的获取和安装
  • maven中的概念

    ①POM
    ②约定的目录结构
    ③坐标
    ④依赖管理
    ⑤仓库管理
    ⑥生命周期
    ⑦插件和目标
    ⑧继承
    ⑨聚合

  • 命令:

    1) mvn clean: 清理命令, 作用删除以前生成的数据, 删除target目录。

    2)mvn compile:编译命令,执行的代码编译。

    3)mvn test-compile: 编译命令, 编译src/test/java目录中的源文件。

    4)mvn test:测试命令, 作用执行 test-classes目录的程序, 测试主程序代码是否符合要求。

    5)mvn package:打包,作用是把项目中的资源class文件和配置文件都放到一个压缩文件中, 默认压缩文件是jar类型的。 

    6)mvn install : 把生成的打包的文件 ,安装到maven仓库。

  •  idea中集成maven

 

3.1.3 学习成果

        8.21 学习成果

        ( 代码见上 )

  知识点:反射

        Homework01.java

package com.weiwei.reflection.homework;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Homework01 {
    public static void main(String[] args) throws InstantiationException, IllegalAccessException, NoSuchFieldException, NoSuchMethodException, InvocationTargetException {
        Class<PrivateTest> privateTestClass = PrivateTest.class;
        PrivateTest privateTestObj = privateTestClass.newInstance();
        Field name = privateTestClass.getDeclaredField("name");
        name.setAccessible(true);
        name.set(privateTestObj,"天龙八部");
        Method getName = privateTestClass.getMethod("getName");
        Object invoke = getName.invoke(privateTestObj);
        System.out.println("name的属性值=" + invoke);


    }
}


class PrivateTest{
    private String name = "hellokitty";

    public String getName(){
        return name;
    }
}

        Car.java

package com.weiwei.reflection;

public class Car {
    public String brand = "宝马";
    public int price = 500000;
    public String color = "白色";

    @Override
    public String toString() {
        return "Car{" +
                "brand='" + brand + '\'' +
                ", price=" + price +
                ", color='" + color + '\'' +
                '}';
    }
}

        知识点:Maven

 

<think>嗯,用户之前让我帮忙生成一个每天固定时间段的ICS文件,比如早上8点到11点40分,下午1点半到5点半。现在他们提到的是要把“前面C++后端学习计划”生成ICS代码。我需要先理解用户的需求。 首先,用户之前可能已经有一个C++后端学习计划,可能包括不同的主题或任务,分布在不同的时间段。现在他们希望将这些计划转换成ICS格式,方便导入到日历应用中,按时提醒学习。 我需要确认用户的具体计划结构。比如,是否有不同的学习模块,每个模块的时间安排是怎样的?是每天重复相同的安排,还是每周有不同的内容?比如,可能周一、周三、周五学习数据结构,周二、周四学习网络编程,或者类似的结构。 用户之前的例子是每天固定两个时间段,但这次可能更复杂,可能涉及不同的主题在不同时间段的安排。因此,可能需要创建多个VEVENT,每个对应不同的学习主题,并设置不同的RRULE,比如每周重复,或者特定星期几。 另外,用户可能没有明确说明时间安排的具体细节,比如开始日期、持续时间、是否有例外日期(如周末休息)等。这些都需要假设或询问用户,但根据之前的例子,可能需要假设一个开始日期,比如2024年9月1日,并默认每天重复,除非用户有其他要求。 还需要注意ICS文件的格式是否正确,比如时区设置、UID唯一性、DTSTAMP等字段。可能需要提供示例代码,并解释关键参数,方便用户修改。 另外,用户可能希望用Python自动生成,像之前的例子那样,或者直接给出ICS代码。需要根据用户的历史提问,判断他们可能更倾向于哪种方式。之前的回复中既有直接ICS代码,也有Python脚本,所以可能需要同时提供两种方法,或询问用户偏好,但根据当前问题,可能直接给出ICS示例更合适。 可能需要将C++后端学习计划分解为多个事件,每个事件对应一个学习主题,分布在不同的时间段。例如,上午学习一个主题,下午另一个主题,或者不同天有不同的安排。但用户可能希望每天固定时间学习不同的内容,或者每周循环。需要进一步假设,但如果没有更多信息,可能需要采用通用结构,例如每天重复相同的学习时间段,但不同事件名称,或者按周循环。 可能的例子是创建多个VEVENT,每个对应一个学习主题,使用RRULE设置重复频率,比如每周一、三、五学习主题A,周二、四学习主题B,周末休息。或者每天分为不同时段学习不同内容。 此外,需要确保每个VEVENT的UID唯一,DTSTAMP正确,时间格式正确,时区正确设置为Asia/Shanghai或其他用户所在时区。 总结步骤: 1. 假设用户的学习计划结构,比如每天分为不同时段学习不同主题,或每周不同天安排不同内容。 2. 根据假设的结构生成ICS代码示例,包含多个VEVENT,每个对应一个学习任务。 3. 提供关键参数说明,帮助用户修改日期、时间、重复规则等。 4. 可能提供Python脚本生成方法,方便自动化。 5. 注意事项部分提醒用户修改开始日期、时区、排除日期等。 需要确保回答清晰,结构合理,符合用户之前接受的格式,比如分章节、代码块、表格说明等。</think>根据您之前提供的C++后端学习计划,以下是生成ICS日历文件的完整解决方案: --- ### 一、ICS代码示例(含多科目循环) ```ics BEGIN:VCALENDAR VERSION:2.0 PRODID:-//C++ Learning Plan//CN BEGIN:VEVENT UID:cplusplus1@example.com DTSTAMP:20240720T000000Z DTSTART;TZID=Asia/Shanghai:20240901T080000 DTEND;TZID=Asia/Shanghai:20240901T113000 SUMMARY:C++核心语法(循环) RRULE:FREQ=WEEKLY;BYDAY=MO,WE,FR DESCRIPTION:学习指针/内存管理/模板编程 LOCATION:线上学习平台 END:VEVENT BEGIN:VEVENT UID:cplusplus2@example.com DTSTAMP:20240720T000000Z DTSTART;TZID=Asia/Shanghai:20240901T140000 DTEND;TZID=Asia/Shanghai:20240901T173000 SUMMARY:网络编程实践(循环) RRULE:FREQ=WEEKLY;BYDAY=TU,TH DESCRIPTION:Socket编程/协议实现 LOCATION:开发环境 END:VEVENT BEGIN:VEVENT UID:cplusplus3@example.com DTSTAMP:20240720T000000Z DTSTART;TZID=Asia/Shanghai:20240902T090000 DTEND;TZID=Asia/Shanghai:20240902T113000 SUMMARY:项目实战日 RRULE:FREQ=WEEKLY;BYDAY=SA DESCRIPTION:分布式系统开发实践 END:VEVENT END:VCALENDAR ``` --- ### 二、计划结构解析 ```mermaid gantt title C++学习日历结构 dateFormat YYYY-MM-DD section 常规学习 核心语法 :a1, 2024-09-01, 12w 网络编程 :a2, 2024-09-01, 12w section 项目实战 分布式系统 :crit, 2024-09-02, 12w ``` --- ### 三、Python动态生成(含注释) ```python from ics import Calendar, Event import pytz from datetime import datetime, timedelta def create_cpp_calendar(): tz = pytz.timezone("Asia/Shanghai") cal = Calendar() # 核心语法课程(周一、三、五) core_event = Event() core_event.uid = "cpp_core@learning" core_event.name = "C++核心语法" core_event.begin = tz.localize(datetime(2024,9,2,8,0)) # 首个周一 core_event.end = core_event.begin + timedelta(hours=3.5) core_event.rrule = "FREQ=WEEKLY;BYDAY=MO,WE,FR;COUNT=36" # 三个月周期 core_event.description = "重点:智能指针/移动语义/模板元编程" # 网络编程课程(周二、四) network_event = Event() network_event.uid = "cpp_network@learning" network_event.name = "网络编程" network_event.begin = tz.localize(datetime(2024,9,3,14,0)) # 首个周二 network_event.end = network_event.begin + timedelta(hours=3.5) network_event.rrule = "FREQ=WEEKLY;BYDAY=TU,TH;COUNT=24" network_event.location = "实验环境:Ubuntu 22.04" cal.events.extend([core_event, network_event]) return cal # 生成ICS文件 calendar = create_cpp_calendar() with open("cpp_learning.ics", "w", encoding="utf-8") as f: f.write(calendar.serialize()) ``` --- ### 四、高级配置技巧 1. **弹性时间设置**:通过`RDATE`添加特殊加课 ```ics RDATE;TZID=Asia/Shanghai:20241007T080000 ``` 2. **进度跟踪**:添加进度标记 ```ics X-MICROSOFT-CDO-PERCENT-COMPLETE:50 ``` 3. **多设备同步**:建议添加提醒规则 ```ics BEGIN:VALARM TRIGGER:-PT15M ACTION:DISPLAY DESCRIPTION:课前提醒 END:VALARM ``` --- ### 五、使用建议 1. 用`VSCode`安装`ICS`插件可直接预览日历 2. 在手机日历中添加`WebDAV`账户实现自动同步 3. 每完成一个阶段后,可通过修改`RRULE`的`UNTIL`参数结束旧事件 生成文件后建议先导入`Google Calendar`测试时间逻辑,确认无误后再同步到常用设备。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值