github编辑

作业

^_^

Git

  1. 试着理解并总结 Git 的底层原理. 我们推荐你去阅读 Pro Gitarrow-up-right 关于这一部分的讲解.

  2. 创建一个属于自己的 Git 仓库! 然后在你的机子上试着执行我们文档里给出的指令. 看看会发生什么! 这也是熟悉命令行工具的一环. 同样, 我们推荐你阅读官方文档去了解这些命令背后的原理.

  3. 熟悉 Git 在 IDE 里的使用方式. 完成各大 IDE 文档给出的教程内容. 在接下来的课程中, 我们都会改用 IDE 进行 Git 操作.

  4. 完成 Learn Git Branchingarrow-up-right 的全部练习. 分支操作很有用!

  5. 这里是本次训练营文档的仓库arrow-up-right. 我们在这个仓库里藏了一个小彩蛋, 看看你能通过什么方式找到它! (其实方法很简单) 如果找到了, 你可以 fork 一下然后开一个 Pull Request 向我们提交(如果你发现文档里有错误, 可以用相同的方式提交).

  6. 看看是哪位部长创建了 zuo-ye.md :)

  7. 创建一个 git log --all --graph --decorate --oneline 的别名 git graph. 你可以在 ~/.gitconfig 去配置(不要去修改 ~/.bash_profile).

  8. 使用 Git 的一个常见错误是提交不应该由 Git 管理的大文件, 例如视频文件(但实际上有一个 Git Large Filearrow-up-right 的东西), 或者把敏感信息(例如数据库的密码)提交给了 Git. 先前我们提到 Git 会把一切对象存储到仓库内, 撤回也只是新建一个抹除文件后的快照, 这些内容仍然存储在历史记录内. 试着把某一个文件彻底地从历史记录中删去. (参考这篇文章arrow-up-right)

  9. 这是 T 大暑期培训 Git 的讲义arrow-up-right, 里面讲到了很多命令的细节. 同时涉及的作业也很有意思, 采用的是 CTF(夺旗), 如果你感兴趣可以用 Docker pull 他们的镜像然后尝试完成.

Python

  1. 完成 CS-61A 的一个 OOP Labarrow-up-right. 按照文档指示一直做到最后, 同时完成自动化评测. 注意: 你需要添加一个 --local 的标记(因为我们不是UCB的学生).

  2. 尝试去阅读并完成 Python-masteryarrow-up-right 的练习.

  3. 之前我们提到了, Git 里的一切都是对象. 你会发现, 我们可以用 OOP 的思想去设计一个 Git 的模型:

  • 设计一个基类 Object, 然后它的子类 Blob, Tree, Commit.

  • 你只需要设计 Template. 换句话说不需要你实现, 但你需要把接口设计出来.

  • 学习下 argparse 或者 click 这个库. 试着能够在终端里像执行 git 一样执行你的应用程序. (创建一个 mygit 文件, 调用 mygit_lib.py 然后将它添加到你的 PATH, 可以去了解下 shebang)

  • 你只需要实现一个打印功能, 例如下面的演示

circle-info

构建命令行接口你也可以 google 开发的 python-firearrow-up-right 库. 但我们推荐你先学习传统的构建方式.

  • 如果你愿意进一步探索, 可以去实现一些简单的 Git 功能. 参考我们对 Git 底层原理的讲解, 以及 wyagarrow-up-right 的项目.

实践环节: 上传到你的 Git 仓库! 就算你还是 WIP, 照样可以上传. 如果你愿意, 可以分享出来. 说不定你还可以拉上几个小伙伴一起团队开发一个 Git 呢!

JAVA

  1. 深入理解java的面向对象部分,并自己实现一个基于继承的工厂模式。要求能够生产至少3个类别。

  2. 更进一步的理解泛型,自己动手实现一个基于泛型的计算器。这个计算器要求包含加减乘除功能,使用命令行交互。

circle-check
  1. 反射部分需要大家实现一个反编译器,不过只是基础版本大家不要担心。你需要实现反汇编一个类的import部分、属性部分、方法部分并将其格式化(即标准的java缩进),最后在输出到一个.java文件中即可。

该如何反编译呢?你只需要先写出一个真正的类(比如在第一项作业中实现的factory),然后使用java的反射机制,在运行时将整个类的信息读取出来,具体的做法请详细阅读我们提供的反射一节。再使用一些字符串拼接的技巧,拼出完整的类再输出出来即可。

  1. 注解部分基础要求为仔细阅读注解的原理与接口。详细描述注解如何发挥作用并提交即可。

circle-check

最后更新于