From 92aa9f5d9da7cdcbaee077f6c1d03e3b0d535db8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BD=97=E7=A5=A5?= <1366971433@qq.com> Date: Wed, 24 Apr 2019 09:27:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- notes/Hadoop-HDFS.md | 2 +- notes/Scala简介及开发环境配置.md | 52 ++++++++++++++-------- pictures/scala-shell.png | Bin 0 -> 19949 bytes 3 files changed, 35 insertions(+), 19 deletions(-) create mode 100644 pictures/scala-shell.png diff --git a/notes/Hadoop-HDFS.md b/notes/Hadoop-HDFS.md index bdb1d1d..df010d9 100644 --- a/notes/Hadoop-HDFS.md +++ b/notes/Hadoop-HDFS.md @@ -187,6 +187,6 @@ HDFS的设计便于从一个平台移植到另一个平台。这有助于HDFS作 ## 参考资料 1. [Apache Hadoop 2.9.2 > HDFS Architecture](http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html) -2. Tom White. hadoop权威指南 [M]. 清华大学出版社, 2017. +2. Tom White . hadoop权威指南 [M] . 清华大学出版社 . 2017. 3. [翻译经典 HDFS 原理讲解漫画](https://blog.csdn.net/hudiefenmu/article/details/37655491) diff --git a/notes/Scala简介及开发环境配置.md b/notes/Scala简介及开发环境配置.md index 13c489f..eea1783 100644 --- a/notes/Scala简介及开发环境配置.md +++ b/notes/Scala简介及开发环境配置.md @@ -1,18 +1,24 @@ # Scala简介及开发环境配置 + + + ## 一、Scala简介 ### 1.1 概念 -Scala全称为scalable language,即“可伸缩的语言”,之所以这样命名,是因为它的设计目标是随着用户的需求一起成长。从技术上讲,Scala是一门综合了面向对象和函数式编程概念的静态类型的编程语言,它运行在标准的Java平台上,可以与所有的Java类库无缝协作。 +Scala全称为scalable language,即“可伸缩的语言”,之所以这样命名,是因为它的设计目标是随着用户的需求一起成长。从技术上讲,Scala是一门综合了**面向对象**和**函数式编程概念**的**静态类型**的编程语言,它运行在标准的Java平台上,可以与所有的Java类库无缝协作。 ### 1.2 特点 -#### 1. Scala是面向对象的 +#### 1. Scala是面向对象的 -Scala是一种面向对象的语言,每个值都是对象,每个方法都是调用。举例来说,如果你执行1+2,则对于Scala而言,实际是在调用Int类里定义的名为+的方法。 +Scala是一种面向对象的语言,每个值都是对象,每个方法都是调用。举例来说,如果你执行`1+2`,则对于Scala而言,实际是在调用Int类里定义的名为`+`的方法。 #### 2. Scala是函数式的 @@ -23,11 +29,11 @@ Scala不只是一门纯的面对对象的语言,它也是功能完整的函数 -### 3. Scala的优点 +### 1.3 Scala的优点 #### 1. 与Java的兼容 -Scala可以与Java无缝对接,其在执行时会被编译成JVM字节码,这使得其性能与Java相当。Scala可以直接调用Java中的方法、访问Java中的字段、继承Java类、实现Java接口,并且Scala也重度复用并包装了原生的Java类型,且支持隐式转换。 +Scala可以与Java无缝对接,其在执行时会被编译成JVM字节码,这使得其性能与Java相当。Scala可以直接调用Java中的方法、访问Java中的字段、继承Java类、实现Java接口。Scala重度复用并包装了原生的Java类型,并支持隐式转换。 #### 2. 精简的语法 @@ -35,11 +41,11 @@ Scala的程序通常比较简洁,相比Java而言,代码行数会大大减 #### 3. 高级语言的特性 -Scala具有高级语言的特定,对代码进行了高级别的抽象,能够让你更好的控制复杂度,保证开发的效率。 +Scala具有高级语言的特定,对代码进行了高级别的抽象,能够让你更好地控制程序的复杂度,保证开发的效率。 #### 4. 静态类型 -Scala拥有非常先进的静态类型系统,Scala不仅拥有与Java类似的允许嵌套类(内部类)的类型系统,还允许使用泛型对类型进行参数化,用交集(intersection)来组合类型,以及使用抽象类型来进行隐藏类型的细节。通过这些特定,我们可以更快地设计出安全易用的程序和接口。 +Scala拥有非常先进的静态类型系统,Scala不仅拥有与Java类似的允许嵌套类的类型系统,还允许使用泛型对类型进行参数化,用交集(intersection)来组合类型,以及使用抽象类型来进行隐藏类型的细节。通过这些特性,我们可以更快地设计出安全易用的程序和接口。 @@ -55,7 +61,7 @@ Scala拥有非常先进的静态类型系统,Scala不仅拥有与Java类似的 首先需要安装Scala插件,使得IDEA支持scala语言的开发。打开 IDEA,依次点击**File** => **settings**=> **plugins**选项卡,搜索Scala插件(如下图)。找到插件后进行安装,并重启IDEA使得安装生效。 -![idea-scala-plugin](D:\BigData-Notes\pictures\idea-scala-plugin.png) +
@@ -63,7 +69,7 @@ Scala拥有非常先进的静态类型系统,Scala不仅拥有与Java类似的 在IDEA中依次点击 **File** => **New** => **Project**选项卡,然后选择创建Scala—IDEA工程: -![idea-newproject-scala](D:\BigData-Notes\pictures\idea-newproject-scala.png) +
@@ -71,9 +77,9 @@ Scala拥有非常先进的静态类型系统,Scala不仅拥有与Java类似的 #### 1.方式一(不推荐) -此时看到Scala SDK为空,依次点击`Create => Download` ,选择所需的版本后,点击`OK`按钮进行下载,下载完成点击`Finish`进入工程。 +此时看到Scala SDK为空,依次点击`Create` => `Download` ,选择所需的版本后,点击`OK`按钮进行下载,下载完成点击`Finish`进入工程。 -![idea-scala-select](D:\BigData-Notes\pictures\idea-scala-select.png) +
@@ -85,21 +91,21 @@ Scala拥有非常先进的静态类型系统,Scala不仅拥有与Java类似的 这里我的系统是Windows,下载msi版本的安装包后,一直点击下一步安装即可,安装完成后会自动配置好环境变量。 -![idea-scala-select](D:\BigData-Notes\pictures\scala-other-resources.png) +
由于安装时已经自动配置好环境变量,所以IDEA会自动选择对应版本的SDK。 -![idea-scala-select](D:\BigData-Notes\pictures\idea-scala-2.1.8.png) +
### 2.5 创建Hello World -在工程 `src`目录上右击**New** => **Scala class**.创建`Hello.scala`。输入代码如下,完成后点击运行按钮,成功运行则代表开发环境搭建成功。 +在工程 `src`目录上右击**New** => **Scala class**.创建`Hello.scala`。输入代码如下,完成后点击运行按钮,成功运行则代表搭建成功。 -![scala-hello-world](D:\BigData-Notes\pictures\scala-hello-world.png) +
@@ -107,14 +113,24 @@ Scala拥有非常先进的静态类型系统,Scala不仅拥有与Java类似的 ### 2.6 切换Scala版本 -如果在日常的开发中,由于对应软件(如spark)的版本切换,导致需要切换Scala的版本,则可以在`Project Structures`中的`Global Libraries`选项卡中进行配置。 +在日常的开发中,由于对应软件(如spark)的版本切换,可能导致需要切换Scala的版本,则可以在`Project Structures`中的`Global Libraries`选项卡中进行切换。 -![scala-hello-world](D:\BigData-Notes\pictures\idea-scala-change.png) +
+### 2.7 使用scala命令行 + +采用msi方式安装,程序会自动配置好环境变量。此时直接可以使用命令行工具: + +
+ + + ## 参考资料 -1. Scala编程第三版 \ No newline at end of file +1. Martin Odersky(著),高宇翔(译) . Scala编程(第3版)[M] . 电子工业出版社 . 2018-1-1 + +2. https://www.scala-lang.org/download/ \ No newline at end of file diff --git a/pictures/scala-shell.png b/pictures/scala-shell.png new file mode 100644 index 0000000000000000000000000000000000000000..574d4264b18dc042743e8dacec9bbbf91cbc6d04 GIT binary patch literal 19949 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