回忆点
- 语法小点:输入输出,运算符
- 引用数据类型,去完善数据类型,数组vs切片
- 没懂切片的底层原理
- 声明的作用是什么?初始化为零值?值类型,与引用类型
- 不要太混杂,要一是以实践顺序为准,二是,把关键点点出即可
- 值类型vs引用类型,底层原理?应用?
- 常量(只有const,idot是const中的特殊常所量)
- 工程管理,包
- 基本语法的问题
- 数据类型上,c语言vsgo语言都到有什么区别
- 流程控制的,继承,方法,接口
- 错误处理
- 并发编程(先回忆一下操作系统)
- 文本处理,go标准库,我们在数据结构中用到,再去学
- 工程管理
- 调用包,从最大的文件夹开始(一开始创建的文件夹)不是,从gopath的src开始,gomod又如何管理呢?
- 如果调用了一个大包(里面有子包),那调用的时候,是,大包.中包.小包.函数?可能能调用大包吗?
- src,pkg,bin目录,实际到底如何运用?
- gomod到底是怎么用?
- 如何使用dep来管理代码?
- idle里如何使用命令?cmd窗口里?
- main函数必须在main包下,必须有个main目录???我印象里就是src文件夹下,必须有个main函数,emmm,或许是main包下有多个模块一个可执行程序只能有一个main包,那么生成一个可执行程序需要什么?又会给pkg和bin生成了什么?
- 基础面试:
- new函数与make函数
同: ?
不同:作,返,初new- 值类型,int, string, ?(基本数据类型+数组与结构体!!!),返回其类型的指针,make→创建引用类型,切片和集合(还有channel!!!!)
- 数组vs切片
同:同类型,随机读取
不同: 数组是值类型,定长,切片是引用类型,其的长度和容量可扩容(底层是数组,一旦扩容超过容量,就会生成新数组)问题来了,那go的链表是如何实现的???
- new函数与make函数
任务顺序:
- 函数,尤其匿名函数
- 力扣,数组和字符串
- 力扣,链表
- 课+力扣→堆栈
- go语言,并发编程
- go语言,文本处理
解决什么问题 | 未能解决什么问题? | ||
---|---|---|---|
1 - [x] |
函数 | 尤其匿名函数 | 闭包的根本原理到底是什么? 为什么能够具有记忆性? 特点: 闭包捕获的变量,具有记忆性,可迭代 条件: 1. 外部函数A,包含着函数B,函数B 2. 函数B引用了外部的(外部函数A内或者全局)变量C,且不会被垃圾回收机制回收 1. 如何理解外部的? 1. C是在外部函数A外定义的 2. C是在外部函数A内定义的 2. 如何保证不会被垃圾机制回收? 前言:闭包捕获的变量C是作用域=闭包的声明周期 →闭包生命周期的结束取决于闭包本身是否还被其它代码引用。具体: 1. 执行了包含闭包的函数并返回了闭包,但是没有将闭包赋值给任何变量或者将闭包从变量中移除了,从而使闭包无法再被访问。 2. 将包含闭包的变量从内存中删除或销毁,例如通过垃圾回收器清除了不再被使用的变量。 需要注意的是,在闭包中引用的外部变量如果是指针类型的话,需要注意内存泄漏的问题。如果闭包中引用的外部变量是一个指针,并且在闭包的生命周期中没有被正确释放,那么就可能会导致内存泄漏,从而影响程序的性能和稳定性。因此,在使用闭包时需要注意避免这种情况的发生。 3. 函数B作为输入参数或者返回值 1. 输入参数实例,! 2. 返回值实例 4. 函数B通常是匿名函数,但也可以是普通函数??? 应用场景 什么叫不支持函数重载 |
2 - [ ] |
力扣,数组和字符串 | 遇到不懂的,就当即解决 | |
3 | 力扣,链表 | 1. 会比较困难,自己要做好心理准备,要先看看书籍,直接写肯定不会 2. go语言,那些基础问题 1. 数组vs切片 2. new函数vsmake |
|
4 | 课+力扣→堆栈 | 解决飞书文档里的内容 | |
5 | go语言,工程管理 | 得去回顾视频和搜寻新的资料 | |
6 | go语言,并发编程 | 1. 去看操作系统,回忆完已学章节 2. 再来深刻理解 |
|
7 | 看极客时间里的数据结构 | ||
8 | 系统回忆,再学习go的编程库 | ||
9 | 以我现在的功力,一下能刷很多题不现实,后面先学,力扣题一天2-3道题,或者去做更多的数据结构题 | ||
10 | 把面试题给背了,然后在周日前,搞懂大明老师的课 |
1 | 草稿本上有一个关于go的集中思考,还有待解决的问题 1. 引用类型,各种变量的数据结构的初始化标志 1. slice, len!=0 2. map? 3. interface? 方法实现? 4. 函数?函数实现? 5. channel? 2. go语言有无深浅拷贝一说?赋值?copy函数? 3. 变量底层的探究,尤其是结构体和各种引用类型的底层 4. 为什么会区分值类型和引用类型?引用类型表里不一? |
|
当下问题
1 | for range可以实现倒序吗? | |
之后要解决的问题
问题 | 问题描述 | 反馈 | |
---|---|---|---|
1 | 闭包 | 作用域 | √ |
2 | map工厂模式 | 压根不知道 | |
3 | 错误处理 | 乱糟糟 | |
4 | 方法和函数的区别 | 除了对象区别外,不过彻底 | √ |
5 | 实践—排序和查找 | 数组切片没落地实践 | |
6 | 继承 | 匿名字段之前,先去看一下闭包 | √ |
7 | 封装 | 运用 | |
8 | 多态 | 运用 | |
9 | 类型断言 | 类型断言用于类型转化? | |
10 | channel的遍历 | 搞定了 | √ |
11 | k, ok:= |
- 代码太长咋办
- 逗号之后,enter自动换行
问题编写
go语言里是否有“深拷贝,浅拷贝”一说?@
- 我在力扣里练一个题的时候,想用一个切片覆盖另一个切片,无法用赋值运算符
=
,只能用copy函数
我的答案(我知道这不符合不占用额外内存空间的要求,但力扣官方也给出了这种简易解法,并在对比我的答案与官方答案后,只有下方红框框出的这一个差距):
- 通过查阅资料,我发现,赋值运算符
=
是地址复制,而copy函数,只是值复制,以下代码是一个证明,不知是否客观?- 就算知道了以上这点,我依旧不知道,这一题,为什么不能用赋值运算符
=
,而只能用copy函数,老师怎么看?
go语言引用类型变量(指针类型)初始化标志是什么?
引用类型,比如slice,map,channel,interface,函数,引用类型变量不同于值类型变量,引用类型零值为nil,只有初始化后才可用,那么各种引用类型初始化的标志是什么?以下是我的猜测
- slice,标志是len !=0 ?
- channel,不知道标志,用make函数创建后就直接用了
- interface,标志是接口实现?
- 函数,标志是函数定义?
append函数是否创建新切片?
在探究append函数的时候,我做了以下论证,不知是否准确?
- 假如是
x = append(x []Type, elems ...Type) []Type
超过容量会创建新切片,但&x是不变的
结果- 假如是
y = append(x, elems ...)
&x与&y绝对不相同,且如果x后续没用到,会被垃圾回收
go语言为什么会分成值类型变量和引用类型变量?是因为“表里不一”?有底层数据类型?从应用的角度考虑,哪些是我们需要辨析的?
我之所以说“表里不一”是因为联想到比如slice的底层就是一个数组,从应用的角度,我目前能察觉到,就是值类型声明后,有零值,即可用,而引用类型变量声明后零值为nil,必须初始化后才可用,