January 1, 2022

新员工培训手册V1

欢迎加入红创的大家庭,让我共同努力,乘风破浪!

学习路线

每周学习完,请在钉钉上完成周报,详细写一下本周学习收获,心得或者对学习计划的建议。

第一周

本周学习主要内容如下:

  • 新员工培训项目库的使用说明
  • 熟悉Git常用命令
  • 开发环境的搭建
  • 学习Clojure语法

1. 使用新员工培训项目库

公司专门为新人学习创建了Git仓库,今后的学习成果都要整理到这个项目里,这样不仅可以练习Git的使用,而且可以保存你的学习成果,也希望你在学习中培养记录笔记的好习惯。下面说明一下该库的使用:

# 第一步:克隆代码
git clone git@codeup.aliyun.com:hc/41674-redcreation/hc-training.git
# 第二步:在根目录下创建文件夹,以你名字全拼命名,例:张三
cd hc-training
mkdir zhangsan
# 学习的代码、笔记和成果都放在该文件夹下,按时提交

2. 熟悉Git常用命令

下面列举了我们使用最频繁的Git命令,自行查阅或者问问同事,搞清下面常用命令的作用。

  • git add
  • git commit
  • git fetch
  • git rebase
  • git push

在熟悉了以上的命令后,在上一步创建的文件中新建一个自己的笔记文件,并把它提交到远程的git仓库中。

# 第一步 新建笔记文件
touch zhangsannotes.org
# 第二步 查看此时文件夹内的状态,推荐在每一步完成后都查看并了解状态的信息
git status / git status -s
# 第三步 将文件添加到暂存区
git add . / git add zhangsannotes.org
# 第四步 将暂存区的改动提交到本地仓库 message处记录本次提交的一些信息
git commit -m[message]
# 第五步 将本地仓库提交到远程仓库
git push

3. 开发环境的搭建

  1. scoop, windows的包管理器, 有篇介绍的blog
  2. scoop安装emacs
  3. scoop安装git
  4. leiningen
  5. sqlite
  6. babashka
  7. etc.
  8. 熟悉下emacs

观看视频1~10段,学习开发环境的搭建及基本语法概念 视频地址:点击查看

4. 学习Clojure语法

至少完成4clojure前50道题
在公司blog中有可以参考的答案Red Creation Technology Blog: 4clojure
遇到没能理解的函数可以在这里搜索函数

本周要求

  • 完成本地开发环境的搭建,能运行一个clojure项目
  • 写一下对git常用命令作用的理解,以为文档的形式提交到Git中
  • 4clojure完成程度截图,要求完成50道题,提交到Git库中
  • 练习使用clojure函数时在repl敲过的都提交git上,同时贴到钉钉周报中

第二周

本周目标是完成一个简单的后台项目,实现用户检索、增加、修改、删除接口。通过这个项目可以熟悉后台的开发流程。其中主要涉及如下内容:

  • 创建luminus web项目
  • 学习使用migrations
  • 学习HugSQL操作数据库
  • 学习单元测试
  • 学习路由配置
  • 学习clojure spec

1. 创建项目

使用红创脚手架创建项目,关于Emacs的使用可以参考新手入门clojure开发(本入门为windows10系统)

# 用hc-template 模板创建一个名为 project-name 的项目
lein new hc-template project-name
cd project-name
lein run

在VSCode中运行项目可以查看这篇文章

或者可以选择创建使用luminus模板+附加功能来创建项目

lein new luminus project-name + ...

GitHub - luminus-framework中可以了解增加功能的方式

2. 学习使用migrations

学习资料:

学习目标:

  • 实现一个用户表的migrations。

    -- 启动REPL并执行(start)后
    -- 创建两个sql脚本(创建的脚本会在resources/migrations下)
    (user/create-migration "username-table")
    -- 生成的两个文件up对应迁移,down对应回滚
    -- 在up文件中创建一个简单的用户表
    CREATE TABLE username (id INT,name VARCHAR (25))
    -- 在相应的down文件将上述迁移文件删除
    DROP TABLE username
    

3. 学习HugSQL操作数据库

学习资料:

+-----------------------+          +----------------------+
|        SQL file       |          |  clojure namespace   |
+-----------------------+          +----------------------+
|                       | bind-conn|                      |
|name:select-username---+----------+->func:select-username|
|         ?             |          |      query           |
|         *             |          |       []             |
| doc:xxxxxxxxx         |          |      docstring       |
| keyword: :id          |          |      params          |
+-----------------------+          +----------------------+

学习目标:

  • 观察hc-template项目模板下各个包的组成
    • 在resources/sql下新建sql文件编写sql代码
    • 在src/clj/<项目名>/modules/<模块名>/.clj文件中将<文件名>.sql中方法绑定到命名空间
(ns <项目名>.modules.<模块名>.<文件名>-db
  (:require [conman.core :as conman]
            [<项目名>.db.core :refer [*db*]]))

(conman/bind-connection *db* "sql/<文件名>.sql")
  • 实现用户的curd操作。
-- :name select-username :? :*
-- :doc 全部查询
select * from t_username

-- :name insert-username! :! :1
-- :doc 单条新增
INSERT INTO t_username
(id, name) VALUES (:id, :name)

-- :name update-username! :! :1
-- :doc 单条更新
UPDATE t_username
SET name = :name
WHERE id = :id

-- :name delete-username! :! :1
-- :doc 单条删除
DELETE FROM t_username
WHERE id = :id

调用方法

(create-user!
   {:id "user1"
    :first_name "Bob"
    :last_name "Bobberton"
    :email "bob.bobberton@mail.com"
    :pass "verysecret"})

4. 学习单元测试

学习资料:

学习目标:

  • 实现实现用户curd的单元测试。

5. 学习路由配置

学习资料:

学习目标:

  • 完成用户操作的接口。

在modules之前创建的文件夹中新建test-routes.clj文件

(ns <项目名>.modules.<模块名>.test-routes
  (:require
   [clojure.spec.alpha :as s]
   [spec-tools.core :as st]
   [spec-tools.data-spec :as ds]
   [<项目名>.common.result :refer [ok sorry]]
   [<项目名>.modules.<模块名>.test-db :as test-user-db]))

(defn hello-routes []
  ["/hello"
   {:swagger {:tags ["增删改查"]}}

   ["/select"
    {:get {:summary "全部查询"
           :handler (fn [_]
                        (-> (在学习hugsql时绑定到命名空间的方法) (ok)))}}]])

以此类推完成其他的三个操作的接口

6. 学习clojure spec

学习资料:

学习目标:

  • 使用clojure spec完成用户请求参数的约束。

7. 本周学习要求

  • [ ] 创建migrate文件
  • [ ] 编写up和down两个migrate文件,id用uuid
  • [ ] 编写单表的CRUD接口,涉及route文件,service文件,db文件,sql文件.

要求: 1. 查询接口是分页查询 2. 查询接口除了分页至少有一个非必须参数,类型string,访问时可填可不填 3. 查询接口有=,in,like三种例子 4. 添加接口,有参数校验,如果参数不符合能返回400错误 5. 修改接口根据id更新, 6. 删除接口,逻辑删除 7. 4个接口中分别用到了path,query,body,header传参.有get情况,也有post请求

加分项: 1. 批量添加接口 2. 批量删除接口

第三周

本周目标完成一个用户管理前端展示,实现用户列表组件、用户表单组件。其中主要涉及如下内容:

  • 使用shadow-cljs初始化前端项目
  • 学习Reagent开发基于组件的前端项目
  • 学习clojurescript和javascript代码交互
  • 简单了解React, 学习React和Reagent的交互
  • 学习ant design组件

1. 使用shadow-cljs创建前端项目

阅读shadow-cljs文档,初始化一个前端项目

2. 学习Reagent

学习资料:

学习目标:

  • 要搞清楚组件、属性、状态等概念。
  • 实现一个用户列表的组件、用户表单组件。

3. 学习clojurescript和javascript代码交互

前端开发免不了与javascript交互,这篇文章点击查看可以帮助你。

4. 简单了解React, 学习React和Reagent的交互

对React不熟悉,可以自行查阅或问问同事,对React有个简单的了解。然后阅读React和Reagent交互搞清React和Reagent的交互方式。

5. 学习ant design组件

学习资料:

学习目标:

  • 将用户列表,用户表单自己写的组件替换成Antd的组件

6. 本周学习要求

  1. 本地能运行shadow-cljs项目,知道编译有没有问题,会初始化项目并运行.
  2. 会用antd组件编写一个单表的列表,新建和编辑页面.
  3. 知道shadow-clj库的作用,知道怎么引入一个新的npm包

第四周

本周目标是将后台接口和前端展示联调起来,实现一个用户管理的功能。其中主要涉及如下内容:

  • 学习re-frame全局状态管理
  • 学习使用reframe发起Request请求
  • 学习kee-frame路由控制

1. 学习re-frame全局状态管理

学习资料:

学习目标:

  • 搞清reg-event-fxreg-event-dbreg-subdispatchsubscribe这几个核心api的作用。
  • 使用Re-frame保存用户管理的状态。

2. 学习使用reframe发起Request请求

学习资料:

学习目标:

  • 完成对接用户检索、用户添加、用户编辑、用户删除接口

3. 学习kee-frame路由控制

学习资料:

学习目标:

  • 完成用户管理的路由跳转

本周学习要求

  1. 能用re-frame对db进行数据的存储,订阅,查看,了解event-db和event-fx的区别和使用场景
  2. 会用kee-frame的controller对路由进入前后做处理
  3. 会自己写一个request,用json,form,文件等

第五周

本周工作根据公司项目具体情况进行安排,如果有实际可以参与的项目,可以安排新人参与项目。如果没有实际项目,可以考虑给内管项目舔砖加瓦,小组长可以考虑增加实用的功能,这样新人可以接触实战项目,又可以推进内管的版本迭代。

文档版本

版本内容作者修改时间
V1创建文档红创2022-02-16
Tags: 培训