回忆点

  • 语法小点:输入输出,运算符
  • 引用数据类型,去完善数据类型,数组vs切片
  1. 没懂切片的底层原理
    1. 声明的作用是什么?初始化为零值?值类型,与引用类型
  2. 不要太混杂,要一是以实践顺序为准,二是,把关键点点出即可
  • 值类型vs引用类型,底层原理?应用?
  • 常量(只有const,idot是const中的特殊常所量)
  • 工程管理,包
  • 基本语法的问题
  • 数据类型上,c语言vsgo语言都到有什么区别
  • 流程控制的,继承,方法,接口
  • 错误处理
  • 并发编程(先回忆一下操作系统)
  • 文本处理,go标准库,我们在数据结构中用到,再去学
  1. 工程管理
    1. 调用包,从最大的文件夹开始(一开始创建的文件夹)不是,从gopath的src开始,gomod又如何管理呢?
    2. 如果调用了一个大包(里面有子包),那调用的时候,是,大包.中包.小包.函数?可能能调用大包吗?
    3. src,pkg,bin目录,实际到底如何运用?
    4. gomod到底是怎么用?
    5. 如何使用dep来管理代码?
    6. idle里如何使用命令?cmd窗口里?
    7. main函数必须在main包下,必须有个main目录???我印象里就是src文件夹下,必须有个main函数,emmm,或许是main包下有多个模块一个可执行程序只能有一个main包,那么生成一个可执行程序需要什么?又会给pkg和bin生成了什么?
  2. 基础面试:
    1. new函数与make函数
      同: ?
      不同:作,返,初new
      1. 值类型,int, string, ?(基本数据类型+数组与结构体!!!),返回其类型的指针,make→创建引用类型,切片和集合(还有channel!!!!)
    2. 数组vs切片
      同:同类型,随机读取
      不同: 数组是值类型,定长,切片是引用类型,其的长度和容量可扩容(底层是数组,一旦扩容超过容量,就会生成新数组)问题来了,那go的链表是如何实现的???

任务顺序:

  1. 函数,尤其匿名函数
  2. 力扣,数组和字符串
  3. 力扣,链表
  4. 课+力扣→堆栈
  5. go语言,并发编程
  6. 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. select语句,涉及到通道channel,会在并发里解决,索引
  2. 函数
    1. 函数的不定参数,和传入切片有什么差别?—传入形式有差别,返回一定返回的是切片
    2. 引用传递
    3. 闭包,由函数和引用环境?
问题 问题描述 反馈
1 闭包 作用域
2 map工厂模式 压根不知道
3 错误处理 乱糟糟
4 方法和函数的区别 除了对象区别外,不过彻底
5 实践—排序和查找 数组切片没落地实践
6 继承 匿名字段之前,先去看一下闭包
7 封装 运用
8 多态 运用
9 类型断言 类型断言用于类型转化?
10 channel的遍历 搞定了
11 k, ok:=
  1. 代码太长咋办
    1. 逗号之后,enter自动换行

问题编写

go语言里是否有“深拷贝,浅拷贝”一说?@

  1. 我在力扣里练一个题的时候,想用一个切片覆盖另一个切片,无法用赋值运算符=,只能用copy函数
    疑问 - 图1
    我的答案(我知道这不符合不占用额外内存空间的要求,但力扣官方也给出了这种简易解法,并在对比我的答案与官方答案后,只有下方红框框出的这一个差距):
    疑问 - 图2
    1. 通过查阅资料,我发现,赋值运算符=是地址复制,而copy函数,只是值复制,以下代码是一个证明,不知是否客观?
      疑问 - 图3
    2. 就算知道了以上这点,我依旧不知道,这一题,为什么不能用赋值运算符=,而只能用copy函数,老师怎么看?

go语言引用类型变量(指针类型)初始化标志是什么?

引用类型,比如slice,map,channel,interface,函数,引用类型变量不同于值类型变量,引用类型零值为nil,只有初始化后才可用,那么各种引用类型初始化的标志是什么?以下是我的猜测

  1. slice,标志是len !=0 ?
  2. channel,不知道标志,用make函数创建后就直接用了
  3. interface,标志是接口实现?
  4. 函数,标志是函数定义?

append函数是否创建新切片?

在探究append函数的时候,我做了以下论证,不知是否准确?

  1. 假如是x = append(x []Type, elems ...Type) []Type超过容量会创建新切片,但&x是不变的
    疑问 - 图4
    结果
    疑问 - 图5
  2. 假如是y = append(x, elems ...)&x与&y绝对不相同,且如果x后续没用到,会被垃圾回收
    疑问 - 图6

go语言为什么会分成值类型变量和引用类型变量?是因为“表里不一”?有底层数据类型?从应用的角度考虑,哪些是我们需要辨析的?

我之所以说“表里不一”是因为联想到比如slice的底层就是一个数组,从应用的角度,我目前能察觉到,就是值类型声明后,有零值,即可用,而引用类型变量声明后零值为nil,必须初始化后才可用,