zoukankan      html  css  js  c++  java
  • debezium学习

    # 1. 启动zookeeper
    docker run -it --rm --name zookeeper -p 2181:2181 -p 2888:2888 -p 3888:3888 debezium/zookeeper:1.5
    # 2. 启动kafka
    docker run -it --rm --name kafka -p 9092:9092 --link zookeeper:zookeeper debezium/kafka:1.5
    # 3. 启动mysql
    docker run -it --rm --name mysql57 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw debezium/example-mysql:1.5
    # 4. 启动connect
    docker run -it --rm --name connect -p 8083:8083 -e GROUP_ID=1 -e CONFIG_STORAGE_TOPIC=my_connect_configs -e OFFSET_STORAGE_TOPIC=my_connect_offsets -e STATUS_STORAGE_TOPIC=my_connect_statuses --link zookeeper:zookeeper --link kafka:kafka --link mysql57:mysql debezium/connect:1.5
    # 5. 登录mysql
    docker run -it --rm --name mysqlterm --link mysql57:mysql --rm mysql:5.7 sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
    
    ### 查看connect
    curl -i -X GET -H "Accept:application/json" localhost:8083
    curl -i -X GET -H "Accept:application/json" localhost:8083/connectors
    curl -i -X GET -H "Accept:application/json" localhost:8083/connectors/cdc_inst_huanan
    curl -i -X DELETE -H "Accept:application/json" localhost:8083/connectors/cdc_inst_huanan_agile
    
    ### 新增connect
    curl -i -X POST -H "Accept:application/json" -H "Content-Type:application/json" localhost:8083/connectors/ -d '
    {
        "name": "cdc_inst_huanan",
        "config": {
            "connector.class": "io.debezium.connector.mysql.MySqlConnector",
            "tasks.max": "1",
            "database.hostname": "mysql",
            "database.port": "3306",
            "database.user": "debezium",
            "database.password": "dbz",
            "database.server.id": "184054",
            "database.server.name": "cdc_inst_huanan",
            "database.exclude.list": "information_schema,mysql,performance_schema,sys",
            "database.history.kafka.bootstrap.servers": "kafka:9092",
            "database.history.kafka.topic": "dbhistory.inventory"
        }
    }
    '
    
    ### topic命名如下 [database.server.name].[database.include.list].[table.name]
    inst_huadong.mycommunity_agile.products
    inst_huadong.mycommunity_agile.tmpb
    inst_huadong.mycommunity_agile.tmpc
    
    ### 查看topic
    docker exec -it kafka bash
    /kafka/bin/kafka-topics.sh --zookeeper zookeeper:2181 --list
    
    ### 消费数据
    docker run -it --rm --name watcher_products --link zookeeper:zookeeper --link kafka:kafka debezium/kafka:1.5 watch-topic -a -k cdc_inst_huanan
    docker run -it --rm --name watcher_products --link zookeeper:zookeeper --link kafka:kafka debezium/kafka:1.5 watch-topic -a -k cdc_inst_huanan.mycommunity_agile.tmpa
    docker run -it --rm --name watcher_products --link zookeeper:zookeeper --link kafka:kafka debezium/kafka:1.5 watch-topic -a -k cdc_inst_huanan.mycommunity_agile.tmpa
    
    
    -- 第一段为主键
    -- 第二段第一部分为数据结构,第二部分数据
    -- https://debezium.io/documentation/reference/connectors/mysql.html
    -- INSERT记录
    {
        "schema": {
            "type": "struct",
            "fields": [
                {
                    "type": "int32",
                    "optional": false,
                    "field": "id"
                }
            ],
            "optional": false,
            "name": "dbserver1.inventory.products.Key"
        },
        "payload": {
            "id": 112
        }
    }
    {
        "schema": {
            "type": "struct",
            "fields": [
                {
                    "type": "struct",
                    "fields": [
                        {
                            "type": "int32",
                            "optional": false,
                            "field": "id"
                        },
                        {
                            "type": "string",
                            "optional": false,
                            "field": "name"
                        },
                        {
                            "type": "string",
                            "optional": true,
                            "field": "description"
                        },
                        {
                            "type": "double",
                            "optional": true,
                            "field": "weight"
                        }
                    ],
                    "optional": true,
                    "name": "dbserver1.inventory.products.Value",
                    "field": "before"
                },
                {
                    "type": "struct",
                    "fields": [
                        {
                            "type": "int32",
                            "optional": false,
                            "field": "id"
                        },
                        {
                            "type": "string",
                            "optional": false,
                            "field": "name"
                        },
                        {
                            "type": "string",
                            "optional": true,
                            "field": "description"
                        },
                        {
                            "type": "double",
                            "optional": true,
                            "field": "weight"
                        }
                    ],
                    "optional": true,
                    "name": "dbserver1.inventory.products.Value",
                    "field": "after"
                },
                {
                    "type": "struct",
                    "fields": [
                        {
                            "type": "string",
                            "optional": false,
                            "field": "version"
                        },
                        {
                            "type": "string",
                            "optional": false,
                            "field": "connector"
                        },
                        {
                            "type": "string",
                            "optional": false,
                            "field": "name"
                        },
                        {
                            "type": "int64",
                            "optional": false,
                            "field": "ts_ms"
                        },
                        {
                            "type": "string",
                            "optional": true,
                            "name": "io.debezium.data.Enum",
                            "version": 1,
                            "parameters": {
                                "allowed": "true,last,false"
                            },
                            "default": "false",
                            "field": "snapshot"
                        },
                        {
                            "type": "string",
                            "optional": false,
                            "field": "db"
                        },
                        {
                            "type": "string",
                            "optional": true,
                            "field": "sequence"
                        },
                        {
                            "type": "string",
                            "optional": true,
                            "field": "table"
                        },
                        {
                            "type": "int64",
                            "optional": false,
                            "field": "server_id"
                        },
                        {
                            "type": "string",
                            "optional": true,
                            "field": "gtid"
                        },
                        {
                            "type": "string",
                            "optional": false,
                            "field": "file"
                        },
                        {
                            "type": "int64",
                            "optional": false,
                            "field": "pos"
                        },
                        {
                            "type": "int32",
                            "optional": false,
                            "field": "row"
                        },
                        {
                            "type": "int64",
                            "optional": true,
                            "field": "thread"
                        },
                        {
                            "type": "string",
                            "optional": true,
                            "field": "query"
                        }
                    ],
                    "optional": false,
                    "name": "io.debezium.connector.mysql.Source",
                    "field": "source"
                },
                {
                    "type": "string",
                    "optional": false,
                    "field": "op"
                },
                {
                    "type": "int64",
                    "optional": true,
                    "field": "ts_ms"
                },
                {
                    "type": "struct",
                    "fields": [
                        {
                            "type": "string",
                            "optional": false,
                            "field": "id"
                        },
                        {
                            "type": "int64",
                            "optional": false,
                            "field": "total_order"
                        },
                        {
                            "type": "int64",
                            "optional": false,
                            "field": "data_collection_order"
                        }
                    ],
                    "optional": true,
                    "field": "transaction"
                }
            ],
            "optional": false,
            "name": "dbserver1.inventory.products.Envelope"
        },
        "payload": {
            "before": null,
            "after": {
                "id": 112,
                "name": "c",
                "description": null,
                "weight": null
            },
            "source": {
                "version": "1.5.0.Final",
                "connector": "mysql",
                "name": "dbserver1",
                "ts_ms": 1620714890000,
                "snapshot": "false",
                "db": "inventory",
                "sequence": null,
                "table": "products",
                "server_id": 223344,
                "gtid": null,
                "file": "mysql-bin.000003",
                "pos": 2249,
                "row": 0,
                "thread": null,
                "query": null
            },
            "op": "c",
            "ts_ms": 1620714890168,
            "transaction": null
        }
    }
    -- update记录
    {
        "schema": {
            "type": "struct",
            "fields": [
                {
                    "type": "int32",
                    "optional": false,
                    "field": "id"
                }
            ],
            "optional": false,
            "name": "dbserver1.inventory.products.Key"
        },
        "payload": {
            "id": 111
        }
    }
    {
        "schema": {
            "type": "struct",
            "fields": [
                {
                    "type": "struct",
                    "fields": [
                        {
                            "type": "int32",
                            "optional": false,
                            "field": "id"
                        },
                        {
                            "type": "string",
                            "optional": false,
                            "field": "name"
                        },
                        {
                            "type": "string",
                            "optional": true,
                            "field": "description"
                        },
                        {
                            "type": "double",
                            "optional": true,
                            "field": "weight"
                        }
                    ],
                    "optional": true,
                    "name": "dbserver1.inventory.products.Value",
                    "field": "before"
                },
                {
                    "type": "struct",
                    "fields": [
                        {
                            "type": "int32",
                            "optional": false,
                            "field": "id"
                        },
                        {
                            "type": "string",
                            "optional": false,
                            "field": "name"
                        },
                        {
                            "type": "string",
                            "optional": true,
                            "field": "description"
                        },
                        {
                            "type": "double",
                            "optional": true,
                            "field": "weight"
                        }
                    ],
                    "optional": true,
                    "name": "dbserver1.inventory.products.Value",
                    "field": "after"
                },
                {
                    "type": "struct",
                    "fields": [
                        {
                            "type": "string",
                            "optional": false,
                            "field": "version"
                        },
                        {
                            "type": "string",
                            "optional": false,
                            "field": "connector"
                        },
                        {
                            "type": "string",
                            "optional": false,
                            "field": "name"
                        },
                        {
                            "type": "int64",
                            "optional": false,
                            "field": "ts_ms"
                        },
                        {
                            "type": "string",
                            "optional": true,
                            "name": "io.debezium.data.Enum",
                            "version": 1,
                            "parameters": {
                                "allowed": "true,last,false"
                            },
                            "default": "false",
                            "field": "snapshot"
                        },
                        {
                            "type": "string",
                            "optional": false,
                            "field": "db"
                        },
                        {
                            "type": "string",
                            "optional": true,
                            "field": "sequence"
                        },
                        {
                            "type": "string",
                            "optional": true,
                            "field": "table"
                        },
                        {
                            "type": "int64",
                            "optional": false,
                            "field": "server_id"
                        },
                        {
                            "type": "string",
                            "optional": true,
                            "field": "gtid"
                        },
                        {
                            "type": "string",
                            "optional": false,
                            "field": "file"
                        },
                        {
                            "type": "int64",
                            "optional": false,
                            "field": "pos"
                        },
                        {
                            "type": "int32",
                            "optional": false,
                            "field": "row"
                        },
                        {
                            "type": "int64",
                            "optional": true,
                            "field": "thread"
                        },
                        {
                            "type": "string",
                            "optional": true,
                            "field": "query"
                        }
                    ],
                    "optional": false,
                    "name": "io.debezium.connector.mysql.Source",
                    "field": "source"
                },
                {
                    "type": "string",
                    "optional": false,
                    "field": "op"
                },
                {
                    "type": "int64",
                    "optional": true,
                    "field": "ts_ms"
                },
                {
                    "type": "struct",
                    "fields": [
                        {
                            "type": "string",
                            "optional": false,
                            "field": "id"
                        },
                        {
                            "type": "int64",
                            "optional": false,
                            "field": "total_order"
                        },
                        {
                            "type": "int64",
                            "optional": false,
                            "field": "data_collection_order"
                        }
                    ],
                    "optional": true,
                    "field": "transaction"
                }
            ],
            "optional": false,
            "name": "dbserver1.inventory.products.Envelope"
        },
        "payload": {
            "before": {
                "id": 111,
                "name": "b",
                "description": null,
                "weight": null
            },
            "after": {
                "id": 111,
                "name": "bb",
                "description": null,
                "weight": null
            },
            "source": {
                "version": "1.5.0.Final",
                "connector": "mysql",
                "name": "dbserver1",
                "ts_ms": 1620714931000,
                "snapshot": "false",
                "db": "inventory",
                "sequence": null,
                "table": "products",
                "server_id": 223344,
                "gtid": null,
                "file": "mysql-bin.000003",
                "pos": 2530,
                "row": 0,
                "thread": null,
                "query": null
            },
            "op": "u",
            "ts_ms": 1620714931862,
            "transaction": null
        }
    }
    -- 删除记录
    {
        "schema": {
            "type": "struct",
            "fields": [
                {
                    "type": "int32",
                    "optional": false,
                    "field": "id"
                }
            ],
            "optional": false,
            "name": "dbserver1.inventory.products.Key"
        },
        "payload": {
            "id": 110
        }
    }
    {
        "schema": {
            "type": "struct",
            "fields": [
                {
                    "type": "struct",
                    "fields": [
                        {
                            "type": "int32",
                            "optional": false,
                            "field": "id"
                        },
                        {
                            "type": "string",
                            "optional": false,
                            "field": "name"
                        },
                        {
                            "type": "string",
                            "optional": true,
                            "field": "description"
                        },
                        {
                            "type": "double",
                            "optional": true,
                            "field": "weight"
                        }
                    ],
                    "optional": true,
                    "name": "dbserver1.inventory.products.Value",
                    "field": "before"
                },
                {
                    "type": "struct",
                    "fields": [
                        {
                            "type": "int32",
                            "optional": false,
                            "field": "id"
                        },
                        {
                            "type": "string",
                            "optional": false,
                            "field": "name"
                        },
                        {
                            "type": "string",
                            "optional": true,
                            "field": "description"
                        },
                        {
                            "type": "double",
                            "optional": true,
                            "field": "weight"
                        }
                    ],
                    "optional": true,
                    "name": "dbserver1.inventory.products.Value",
                    "field": "after"
                },
                {
                    "type": "struct",
                    "fields": [
                        {
                            "type": "string",
                            "optional": false,
                            "field": "version"
                        },
                        {
                            "type": "string",
                            "optional": false,
                            "field": "connector"
                        },
                        {
                            "type": "string",
                            "optional": false,
                            "field": "name"
                        },
                        {
                            "type": "int64",
                            "optional": false,
                            "field": "ts_ms"
                        },
                        {
                            "type": "string",
                            "optional": true,
                            "name": "io.debezium.data.Enum",
                            "version": 1,
                            "parameters": {
                                "allowed": "true,last,false"
                            },
                            "default": "false",
                            "field": "snapshot"
                        },
                        {
                            "type": "string",
                            "optional": false,
                            "field": "db"
                        },
                        {
                            "type": "string",
                            "optional": true,
                            "field": "sequence"
                        },
                        {
                            "type": "string",
                            "optional": true,
                            "field": "table"
                        },
                        {
                            "type": "int64",
                            "optional": false,
                            "field": "server_id"
                        },
                        {
                            "type": "string",
                            "optional": true,
                            "field": "gtid"
                        },
                        {
                            "type": "string",
                            "optional": false,
                            "field": "file"
                        },
                        {
                            "type": "int64",
                            "optional": false,
                            "field": "pos"
                        },
                        {
                            "type": "int32",
                            "optional": false,
                            "field": "row"
                        },
                        {
                            "type": "int64",
                            "optional": true,
                            "field": "thread"
                        },
                        {
                            "type": "string",
                            "optional": true,
                            "field": "query"
                        }
                    ],
                    "optional": false,
                    "name": "io.debezium.connector.mysql.Source",
                    "field": "source"
                },
                {
                    "type": "string",
                    "optional": false,
                    "field": "op"
                },
                {
                    "type": "int64",
                    "optional": true,
                    "field": "ts_ms"
                },
                {
                    "type": "struct",
                    "fields": [
                        {
                            "type": "string",
                            "optional": false,
                            "field": "id"
                        },
                        {
                            "type": "int64",
                            "optional": false,
                            "field": "total_order"
                        },
                        {
                            "type": "int64",
                            "optional": false,
                            "field": "data_collection_order"
                        }
                    ],
                    "optional": true,
                    "field": "transaction"
                }
            ],
            "optional": false,
            "name": "dbserver1.inventory.products.Envelope"
        },
        "payload": {
            "before": {
                "id": 110,
                "name": "a",
                "description": null,
                "weight": null
            },
            "after": null,
            "source": {
                "version": "1.5.0.Final",
                "connector": "mysql",
                "name": "dbserver1",
                "ts_ms": 1620714956000,
                "snapshot": "false",
                "db": "inventory",
                "sequence": null,
                "table": "products",
                "server_id": 223344,
                "gtid": null,
                "file": "mysql-bin.000003",
                "pos": 2820,
                "row": 0,
                "thread": null,
                "query": null
            },
            "op": "d",
            "ts_ms": 1620714956514,
            "transaction": null
        }
    }
    
    {"schema":{"type":"struct","fields":[{"type":"int32","optional":false,"field":"id"}],"optional":false,"name":"dbserver1.inventory.products.Key"},"payload":{"id":112}}  {"schema":{"type":"struct","fields":[{"type":"struct","fields":[{"type":"int32","optional":false,"field":"id"},{"type":"string","optional":false,"field":"name"},{"type":"string","optional":true,"field":"description"},{"type":"double","optional":true,"field":"weight"}],"optional":true,"name":"dbserver1.inventory.products.Value","field":"before"},{"type":"struct","fields":[{"type":"int32","optional":false,"field":"id"},{"type":"string","optional":false,"field":"name"},{"type":"string","optional":true,"field":"description"},{"type":"double","optional":true,"field":"weight"}],"optional":true,"name":"dbserver1.inventory.products.Value","field":"after"},{"type":"struct","fields":[{"type":"string","optional":false,"field":"version"},{"type":"string","optional":false,"field":"connector"},{"type":"string","optional":false,"field":"name"},{"type":"int64","optional":false,"field":"ts_ms"},{"type":"string","optional":true,"name":"io.debezium.data.Enum","version":1,"parameters":{"allowed":"true,last,false"},"default":"false","field":"snapshot"},{"type":"string","optional":false,"field":"db"},{"type":"string","optional":true,"field":"sequence"},{"type":"string","optional":true,"field":"table"},{"type":"int64","optional":false,"field":"server_id"},{"type":"string","optional":true,"field":"gtid"},{"type":"string","optional":false,"field":"file"},{"type":"int64","optional":false,"field":"pos"},{"type":"int32","optional":false,"field":"row"},{"type":"int64","optional":true,"field":"thread"},{"type":"string","optional":true,"field":"query"}],"optional":false,"name":"io.debezium.connector.mysql.Source","field":"source"},{"type":"string","optional":false,"field":"op"},{"type":"int64","optional":true,"field":"ts_ms"},{"type":"struct","fields":[{"type":"string","optional":false,"field":"id"},{"type":"int64","optional":false,"field":"total_order"},{"type":"int64","optional":false,"field":"data_collection_order"}],"optional":true,"field":"transaction"}],"optional":false,"name":"dbserver1.inventory.products.Envelope"},"payload":{"before":null,"after":{"id":112,"name":"c","description":null,"weight":null},"source":{"version":"1.5.0.Final","connector":"mysql","name":"dbserver1","ts_ms":1620714890000,"snapshot":"false","db":"inventory","sequence":null,"table":"products","server_id":223344,"gtid":null,"file":"mysql-bin.000003","pos":2249,"row":0,"thread":null,"query":null},"op":"c","ts_ms":1620714890168,"transaction":null}}
    {"schema":{"type":"struct","fields":[{"type":"int32","optional":false,"field":"id"}],"optional":false,"name":"dbserver1.inventory.products.Key"},"payload":{"id":111}}  {"schema":{"type":"struct","fields":[{"type":"struct","fields":[{"type":"int32","optional":false,"field":"id"},{"type":"string","optional":false,"field":"name"},{"type":"string","optional":true,"field":"description"},{"type":"double","optional":true,"field":"weight"}],"optional":true,"name":"dbserver1.inventory.products.Value","field":"before"},{"type":"struct","fields":[{"type":"int32","optional":false,"field":"id"},{"type":"string","optional":false,"field":"name"},{"type":"string","optional":true,"field":"description"},{"type":"double","optional":true,"field":"weight"}],"optional":true,"name":"dbserver1.inventory.products.Value","field":"after"},{"type":"struct","fields":[{"type":"string","optional":false,"field":"version"},{"type":"string","optional":false,"field":"connector"},{"type":"string","optional":false,"field":"name"},{"type":"int64","optional":false,"field":"ts_ms"},{"type":"string","optional":true,"name":"io.debezium.data.Enum","version":1,"parameters":{"allowed":"true,last,false"},"default":"false","field":"snapshot"},{"type":"string","optional":false,"field":"db"},{"type":"string","optional":true,"field":"sequence"},{"type":"string","optional":true,"field":"table"},{"type":"int64","optional":false,"field":"server_id"},{"type":"string","optional":true,"field":"gtid"},{"type":"string","optional":false,"field":"file"},{"type":"int64","optional":false,"field":"pos"},{"type":"int32","optional":false,"field":"row"},{"type":"int64","optional":true,"field":"thread"},{"type":"string","optional":true,"field":"query"}],"optional":false,"name":"io.debezium.connector.mysql.Source","field":"source"},{"type":"string","optional":false,"field":"op"},{"type":"int64","optional":true,"field":"ts_ms"},{"type":"struct","fields":[{"type":"string","optional":false,"field":"id"},{"type":"int64","optional":false,"field":"total_order"},{"type":"int64","optional":false,"field":"data_collection_order"}],"optional":true,"field":"transaction"}],"optional":false,"name":"dbserver1.inventory.products.Envelope"},"payload":{"before":{"id":111,"name":"b","description":null,"weight":null},"after":{"id":111,"name":"bb","description":null,"weight":null},"source":{"version":"1.5.0.Final","connector":"mysql","name":"dbserver1","ts_ms":1620714931000,"snapshot":"false","db":"inventory","sequence":null,"table":"products","server_id":223344,"gtid":null,"file":"mysql-bin.000003","pos":2530,"row":0,"thread":null,"query":null},"op":"u","ts_ms":1620714931862,"transaction":null}}
    {"schema":{"type":"struct","fields":[{"type":"int32","optional":false,"field":"id"}],"optional":false,"name":"dbserver1.inventory.products.Key"},"payload":{"id":110}}  {"schema":{"type":"struct","fields":[{"type":"struct","fields":[{"type":"int32","optional":false,"field":"id"},{"type":"string","optional":false,"field":"name"},{"type":"string","optional":true,"field":"description"},{"type":"double","optional":true,"field":"weight"}],"optional":true,"name":"dbserver1.inventory.products.Value","field":"before"},{"type":"struct","fields":[{"type":"int32","optional":false,"field":"id"},{"type":"string","optional":false,"field":"name"},{"type":"string","optional":true,"field":"description"},{"type":"double","optional":true,"field":"weight"}],"optional":true,"name":"dbserver1.inventory.products.Value","field":"after"},{"type":"struct","fields":[{"type":"string","optional":false,"field":"version"},{"type":"string","optional":false,"field":"connector"},{"type":"string","optional":false,"field":"name"},{"type":"int64","optional":false,"field":"ts_ms"},{"type":"string","optional":true,"name":"io.debezium.data.Enum","version":1,"parameters":{"allowed":"true,last,false"},"default":"false","field":"snapshot"},{"type":"string","optional":false,"field":"db"},{"type":"string","optional":true,"field":"sequence"},{"type":"string","optional":true,"field":"table"},{"type":"int64","optional":false,"field":"server_id"},{"type":"string","optional":true,"field":"gtid"},{"type":"string","optional":false,"field":"file"},{"type":"int64","optional":false,"field":"pos"},{"type":"int32","optional":false,"field":"row"},{"type":"int64","optional":true,"field":"thread"},{"type":"string","optional":true,"field":"query"}],"optional":false,"name":"io.debezium.connector.mysql.Source","field":"source"},{"type":"string","optional":false,"field":"op"},{"type":"int64","optional":true,"field":"ts_ms"},{"type":"struct","fields":[{"type":"string","optional":false,"field":"id"},{"type":"int64","optional":false,"field":"total_order"},{"type":"int64","optional":false,"field":"data_collection_order"}],"optional":true,"field":"transaction"}],"optional":false,"name":"dbserver1.inventory.products.Envelope"},"payload":{"before":{"id":110,"name":"a","description":null,"weight":null},"after":null,"source":{"version":"1.5.0.Final","connector":"mysql","name":"dbserver1","ts_ms":1620714956000,"snapshot":"false","db":"inventory","sequence":null,"table":"products","server_id":223344,"gtid":null,"file":"mysql-bin.000003","pos":2820,"row":0,"thread":null,"query":null},"op":"d","ts_ms":1620714956514,"transaction":null}}
    
  • 相关阅读:
    20145223《信息安全系统设计基础》第7周学习总结
    20145223《信息安全系统设计基础》第6周学习总结
    20145223《信息安全系统设计基础》第5周学习总结
    20145223《信息安全系统设计基础》第3周学习总结
    20145223《信息安全系统设计基础》第2周学习总结
    20145223《信息安全系统设计基础》第1周学习总结
    node小爬虫
    node知识
    css之单行缩略..以及多行缩略
    html两大布局
  • 原文地址:https://www.cnblogs.com/chenzechao/p/14756662.html
Copyright © 2011-2022 走看看