Table of Contents
Linux 基础
目标和要求
- 能够熟练使用 Linux 或者 Mac OS 完成开发和日常工作使用
- 熟练使用稍后列出的常见 Unix 基本工具集
- 可以从容穿梭于远程服务器之间,进行基本的系统管理和应用部署维护
- 熟练掌握 GNU Readline 命令行技巧
- 耗时: 16~32h
教材
- The Linux Command Line
安装 Linux 系统
可以自由选择以下 Linux 发行版
Deepin Linux: https://www.deepin.org/ (如果你对 Linux 一无所知)Ubuntu(not Ubuntu Kylin): https://www.ubuntu.com/desktop or http://cn.ubuntu.com/Debian: http://www.debian.org/Fedora: https://getfedora.org/Gentoo: http://gentoo.org/ (慎重,除非你非常清楚自己需要什么)Arch: https://www.archlinux.org/ (慎重,除非你非常清楚自己需要什么)
安装使用 zsh + oh-my-zsh
zsh: http://www.zsh.org/oh-my-zsh: https://github.com/robbyrussell/oh-my-zsh
常见 Unix 工具集
- 相对路径与绝对路径
- echo
- ls
- mkdir
- mv
- cp
- rm
- df
- du
- cat
- for…do…done
- top / htop
- cd
- man
- less
- head
- tail
- time
- date
- ping
- wc
- curl
- wget
- 文件描述符
- 流、管道和重定向
- nohup
- chmod
- chown
- sudo / su
- password
- grep
- sort
- uniq
- tar / unzip / gunzip
- ssh
- rsync
- scp
- awk
- sed
Readline 入门
常见 Linux 包管理系统
掌握开发所用系统对应的一种,其余按需学习。
- apt 系
- rpm 系
Systemd
最简单的 shell script 写法
以下任选一:
OpenSSH
- 建议读 SSH安全性和配置入门
- 最低要求:掌握以下常见用法或配置要点
- ssh-keygen
- ssh-copy-id
- ~/.ssh/config
- sshd
Git
耗时: 2~4h
以胜任日常开发协作为准。以下材料可任选一种:
文本编辑器基础
耗时: 1~3h
以下任选一种:
- Emacs
- Vim
- Gedit
Sbt 简单使用
耗时: 1~2h
修改镜像配置
~ $ cat ~/.sbt/repositories [repositories] local repox-maven: http://repox.gtan.com:8078/ repox-ivy: http://repox.gtan.com:8078/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext] aliyun: http://maven.aliyun.com/nexus/content/groups/public/
Intellij Idea + Scala Plungin 简单使用
耗时: 2~4h(有些库和依赖安装会非常慢,需要注意配置镜像)
Scala 基础
Scala School!, Twitter 出品的 Scala 快速入门,有中文版: https://twitter.github.io/scala_school/A Tour of Scala, Scala 官方出品的入门指南: http://docs.scala-lang.org/tutorials/Effective Scala, Twitter 的 Scala 最佳实践: http://twitter.github.io/effectivescala/- (书)
Scala实用指南:https://item.jd.com/12383836.html - (书)
快学 Scala: https://item.jd.com/11113845.html - (书)
Scala函数式编程: http://item.jd.com/11905178.html - Scala 标准库 API: http://www.scala-lang.org/api/current/
Scala 进阶
目标: 写出结构清晰,抽象合理,健壮而优雅的 Scala 代码。
Scala 标准库中以下数据类型的常见用法(仅考虑不可变集合,可变集合按需学习):
ListSeqMapSetOptionEither
尤其掌握以下几种与函数式编程范式关系密切的用法:
mapflatMapfilter/filterNotflattenfold/foldLeftreduce/reduceLeft/reduceLeftOptioncollectcountdistinctdroptakegroupByisEmpty/nonEmptyhead/headOption/tail/initmax/maxBy/min/minBysumzip/zipAll/zipWithIndex
Scala 标准库练习
Projcect Euler上的 1~20 题,对于掌握 Scala 标准库而言是个非常好的练习对象。而编号 20 以后的题目,其数学(尤其是数论)的成分显著增大,难度也随之上升,不适合作为本阶段的练习项目。理解 Scala 标准库庞大数据类型的层级结构,了解如何选取合理的数据结构和类型。
Scala Future 和 Promise
Scala Implicit Pattern
Scala Type Class
Functor, Applicative and Monad (有助于加深对 Type Class 的理解,可选)
- 一篇图文并茂的形象解释
- Learn You a Haskell for Great Good! (高能,可选)
- 中文翻译: Haskell 趣學指南
- 中文实体书: 京东自营的“Haskell趣学指南(新锐编程语言集萃)”
Scala 常用库
目标: 能够自由地使用 Scala 和 Java 生态圈的工具和组件,写出结构清晰,抽象合理,健壮而坚固的项目。
akka-actorakka-streamakka-http, 用于构建高性能 HTTP Service 和 HTTP Client: https://github.com/akka/akka-httpakka-testkit, 用于测试akka-slf4j+logback classic, 用于日志系统json4s, JSON 库: https://github.com/json4s/json4sspray-json, JSON 库: https://github.com/spray/spray-jsoncirce, JSON 库: https://github.com/circe/circeswagger-akka-http, 用于生成 Swagger API 文档: https://github.com/swagger-akka-http/swagger-akka-httptwirl, Scala 的 HTML 模板引擎: https://github.com/playframework/twirlReactive Kafka(用作 kafka client, producer && consumer): https://github.com/akka/reactive-kafkaSlick, 与 MySQL/PostgreSQL/TiDB 交互的 FRM: http://slick.lightbend.com/Scalatest,Scala Specs2用于测试Spark, 用作计算/查询引擎Protobuf,ScalaPB, 用于消息传输格式Finagle, RPC 系统Prometheus(Server && Client), 用于构建监控系统
Scala 项目构建与测试
目标: 构建稳定可靠的,便于交付和监控的代码。
sbt-scoverage, 用于单元测试覆盖率诊断: https://github.com/scoverage/sbt-scoveragesbt-native-packager, 用于从项目源码生成可交付的可执行文件和可安装包: https://github.com/sbt/sbt-native-packagersbt-wartremover, 用于 Scala 代码的编译期静态检查: https://github.com/wartremover/wartremover
大数据生态系统常用组件
目标:
- 对于实际项目中用到的组件,理解其设计要点,熟悉其特性和性能优劣,熟练部署运维和使用。
- 对于实际项目中尚未使用的组件,理解其设计要点,熟悉其特性和性能优劣。
列举如下:
- 传统关系型数据库及其衍生物
- MySQL / MariaDB / Percona
- PostgreSQL / PostgreSQL-XC / PostgreSQL-XL
- 传统 NoSQL 数据库
- MongoDB
- 集群化 Redis
- Apache Kafka
- Apache Spark
- Spark SQL
- DataFrame / DataSet
- Spark Streaming
- Apache Hadoop
- Yarn
- HDFS
- Apache Mesos
- Cassandra
- Hbase
- Hive
- 分布式服务组件
- Apache Zookeeper: https://zookeeper.apache.org/
- Etcd: https://github.com/coreos/etcd
- Consul: https://www.consul.io/
- TiDB, 分布式关系型数据库,MySQL 的理想替代物 https://github.com/pingcap/tidb
- Aerospike, 分布式高性能 NoSQL 存储 http://www.aerospike.com/
- Parquet, 用作高性能列式存储格式: https://parquet.apache.org/
- 多维分析和报表引擎
- Druid http://druid.io/
- Apache Kylin http://kylin.apache.org/
- Apache Kudu https://kudu.apache.org/
- Pinot https://github.com/linkedin/pinot