Skip to content

Commit 3c2564a

Browse files
author
henryjia
committed
go
1 parent c05ef77 commit 3c2564a

File tree

7 files changed

+547
-3
lines changed

7 files changed

+547
-3
lines changed

docs/.DS_Store

2 KB
Binary file not shown.

docs/Go/.DS_Store

6 KB
Binary file not shown.

docs/Go/Go.md

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
> Go 语言入门垫脚石
2+
>
3+
> https://www.runoob.com/go/go-tutorial.html
4+
5+
6+
7+
Go语言是什么?
8+
9+
Go出自名门Google公司,是一门支持并发 、垃圾回收的编译型高级编程语言。Go兼具静态编译语言的高性能以及动态语言的高开发效率。 该项目的三位领导者均是著名的语言学家:
10+
11+
Rob Pike:
12+
13+
Go 语言项目总负责人,贝尔实验室 Unix 团队成员,参与的项目包括 Plan9,Inferno 操作系统和 Limbo 编程语言
14+
15+
Ken Thompson:
16+
17+
贝尔实验室 Unix 团队成员,C 语言、Unix 和 Plan 9 的创始人之一,与 Rob Pike 共同开发了 UTF-8 字符集规范,图灵奖获得者
18+
19+
Robert Griesemer:
20+
21+
参与开发 Java HotSpot 虚拟机、 V8 Javascript engine
22+
23+
24+
25+
**为什么选** **Go****?**
26+
27+
❑ 语言简单、开发效率高
28+
❑ 高效的垃圾回收机制
29+
❑ 支持多返回值
30+
❑ 更丰富的内置类型:map、slice、channel、interface ❑ 语言层面支持并发编程
31+
32+
❑ 编译型语言,编译即测试 ❑ 跨平台编译
33+
34+
35+
36+
![](/Users/apple/Desktop/screenshot/截屏2022-05-05 下午4.16.44.png)
37+
38+
39+
40+
![](/Users/apple/Desktop/screenshot/截屏2022-05-05 下午4.17.19.png)
41+
42+
![](/Users/apple/Desktop/screenshot/截屏2022-05-05 下午4.17.43.png)
43+
44+
45+
46+
47+
48+
基础概念
49+
50+
数据类型和语句
51+
52+
Go 程序的测试
53+
54+
标准库的用法
55+
56+
57+
58+
## Hello world
59+
60+
Go 语言的基础组成有以下几个部分:
61+
62+
- 包声明
63+
- 引入包
64+
- 函数
65+
- 变量
66+
- 语句 & 表达式
67+
- 注释
68+
69+
```go
70+
package main
71+
72+
import "fmt"
73+
74+
func main() {
75+
/* 这是我的第一个简单的程序 */
76+
fmt.Println("Hello, World!")
77+
}
78+
```
79+
80+
> 1. 第一行代码 *package main* 定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。
81+
> 2. 下一行 *import "fmt"* 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。
82+
> 3. 下一行 *func main()* 是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)。
83+
> 4. 下一行 /*...*/ 是注释,在程序执行时将被忽略。单行注释是最常见的注释形式,你可以在任何地方使用以 // 开头的单行注释。多行注释也叫块注释,均已以 /* 开头,并以 */ 结尾,且不可以嵌套使用,多行注释一般用于包的文档描述或注释成块的代码片段。
84+
> 5. 下一行 *fmt.Println(...)* 可以将字符串输出到控制台,并在最后自动增加换行字符 \n。
85+
> 使用 fmt.Print("hello, world\n") 可以得到相同的结果。
86+
> Print 和 Println 这两个函数也支持使用变量,如:fmt.Println(arr)。如果没有特别指定,它们会以默认的打印格式将变量 arr 输出到控制台。
87+
> 6. 当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 protected )。
88+
89+
90+
91+
92+
93+
与Java 的区别:
94+
95+
- 行分隔符:在 Go 程序中,一行代表一个语句结束。每个语句不需要像 C 家族中的其它语言一样以分号 ; 结尾,因为这些工作都将由 Go 编译器自动完成。
96+
97+
![](/Users/apple/Desktop/screenshot/截屏2022-05-05 下午4.26.00.png)
98+
99+
## 工作区和GOPATH
100+
101+
我们学习 Go 语言时,要做的第一件事,都是根据自己电脑的计算架构(比如,是 32 位的计算机还是 64 位的计算机)以及操作系统(比如,是 Windows 还是 Linux),从[Go 语言官网](https://golang.google.cn)下载对应的二进制包,也就是可以拿来即用的安装包。
102+
103+
随后,我们会解压缩安装包、放置到某个目录、配置环境变量,并通过在命令行中输入`go version`来验证是否安装成功。
104+
105+
在这个过程中,我们还需要配置 3 个环境变量,也就是 GOROOT、GOPATH 和 GOBIN。这里我可以简单介绍一下。
106+
107+
- GOROOT:Go 语言安装根目录的路径,也就是 GO 语言的安装路径。
108+
- GOPATH:若干工作区目录的路径。是我们自己定义的工作空间。
109+
- GOBIN:GO 程序生成的可执行文件(executable file)的路径。
110+
111+
其中,GOPATH 背后的概念是最多的,也是最重要的。那么,**今天我们的面试问题是:你知道设置 GOPATH 有什么意义吗?**
112+
113+
关于这个问题,它的**典型回答**是这样的:
114+
115+
你可以把 GOPATH 简单理解成 Go 语言的工作目录,它的值是一个目录的路径,也可以是多个目录路径,每个目录都代表 Go 语言的一个工作区(workspace)。
116+
117+
我们需要利于这些工作区,去放置 Go 语言的源码文件(source file),以及安装(install)后的归档文件(archive file,也就是以“.a”为扩展名的文件)和可执行文件(executable file)。
118+
119+
事实上,由于 Go 语言项目在其生命周期内的所有操作(编码、依赖管理、构建、测试、安装等)基本上都是围绕着 GOPATH 和工作区进行的。所以,它的背后至少有 3 个知识点,分别是:
120+
121+
**1. Go 语言源码的组织方式是怎样的;**
122+
123+
**2. 你是否了解源码安装后的结果(只有在安装后,Go 语言源码才能被我们或其他代码使用);**
124+
125+
**3. 你是否理解构建和安装 Go 程序的过程(这在开发程序以及查找程序问题的时候都很有用,否则你很可能会走弯路)。**
126+
127+
128+
129+
## 命令源码文件
130+
131+
**源码文件又分为三种,即:命令源码文件、库源码文件和测试源码文件,它们都有着不同的用途和编写规则。**
132+
133+
![](https://static001.geekbang.org/resource/image/9d/cb/9d08647d238e21e7184d60c0afe5afcb.png)

docs/data-structure-algorithms/soultion/binary-tree.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,7 @@ public TreeNode buildTree(int[] preorder, int[] inorder) {
461461
for (int i = 0; i < n; i++) {
462462
indexMap.put(inorder[i], i);
463463
}
464-
return build(preorder, n - 1, 0, inorder, 0, n - 1);
464+
return build(preorder, 0, n - 1 , inorder, 0, n - 1);
465465
}
466466
467467
public TreeNode build(int[] preorder, int preStart, int preEnd,
@@ -681,6 +681,8 @@ public TreeNode build(int[] preorder, int preStart, int preEnd,
681681
682682
683683
684+
685+
684686
### [114. 二叉树展开为链表](https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list/)
685687
686688
> 给你二叉树的根结点 root ,请你将它展开为一个单链表:
@@ -722,3 +724,9 @@ private void preorder(TreeNode node, List<TreeNode> res) {
722724
723725

724726

727+
技术驱动优化:
728+
729+
1. 完成商品库 pipeline 方案优化调整,全流量上线更新保护策略,保障商品物料稳定和提升抓取性能
730+
2. 完成定制报告服务重构,提升扩展性和可维护性
731+
3. 聚合服务和原子服务分离,负责完成一个层级服务的领域建模落地和改造
732+

0 commit comments

Comments
 (0)