1、GO程序的基本结构
答:关键字、包声明、函数、注释、变量和常量定义、类型、语句(赋值语句、条件语句、循环语句、跳转语句)、运算符(算术运算符、逻辑运算符、位运算符)
2、GO的关键字
答:关键字有25个,比较常用的包括package、import、func、return、defer、var、const、interface、struct、chan、map、type、range、break、case、continue、for、fallthrough、if、esle、dafault、switch、goto
3、GO的数据类型包括哪些
答:bool、uint、int、float32、float64、rune、byte、string、pointer、interface、func、method、array、slice、map、channel、struct
4、GO方法和函数的区别
答:方法是一个特殊的函数,方法是需要有一个接收者的,这个接收者的数据类型可以是一个自定义类型或者是结构体,但不能是基本数据类型。而函数是没有接收者。
5、Golang中make和new的区别
共同点:都是给变量进行内存的分配
区别:
(1)new一般给string、int和数组类型进行分配(但是实际所有的数据类型都可以进行new),make是给slice、map、channel进行分配,进行slice的make操作的时候,第二个参数也就是长度必须给出
(2)new分配内存之后会返回一个变量的指针,但是make分配之后会返回变量本身
(3)new分配空间之后变量会做清零处理,make分配空间之后会做初始化操作
(4)make在堆上进行内存分配、new可能在堆上也可能在栈上
(5)如果强行采用new进行slice、map、channel的初始化,代码上是可以运行的,但是实际map会不能插入元素,会报错panic,channel会发生阻塞,slice也是不可用的,但是nil slice本身有append函数,会对底层数组通过向GO内存管理空间申请内存,从而及进行数组扩容
6、数组和切片的区别
相同点:只能存储相同类型的数据结构,都是通过下标进行访问,其中长度通过len,容量通过cap
不同点:
(1)数组是定长的,切片不是定长的,长度和容量都是可以进行自动扩容的
(2)数组是值类型,切片是引用类型,每个切片都是会引用一个对应的底层数组,切片本身不存储数据,都是这个底层数组进行数据的存储,所以在进行切片的修改时候,修改的其实是底层数组,并且一旦切片进行扩容,那么就会指向一个新的底层数组,内存地址也会随之改变
7、for-range的时候内存地址如何变化的
答:for-range的时候,内存地址不会发生变化,index和val在内存中只会存储一份,每次遍历的时候,都是按照值覆盖的形式进行处理,对应的内存地址不会改变。由于这个特性,如果在for-range中开协程,不要直接把index或val的地址传给携程,解决办法是开一个临时变量进行存储
8、defer的作用,多个defer的执行顺序,以及defer在什么时间会修改返回值
答:defer作用就是延时处理,主要用来释放锁、关闭文件、关闭连接、捕获panic等。一般来说defer要严格跟在打开资源的后面,否则会发生内存泄露。多个defer的调用顺序是LIFO,可以理解为压栈运行。defer、return、return val的执行顺序,先执行return---return val---defer,defer是可以修改函数的返回值的。运行时机是在有名返回值或者是函数返回指针的时候。
9、类型溢出
答:例如:uint8最大存储255,如果255 +1 后会发生对应变量赋值为0;总之类型溢出,会发生很多问题。
10、介绍一下rune类型
答:rune类型相当于int32,占4个字节,golang底层的字符串都是通过byte数组进行实现的,在unicode编码下,中文字符占2个字节,utf-8的编码下,占3个字节,golang默认编码就是3个字节,所以可以用int32或rune类型进行保存。
11、Go的反射机制
答:Go中的解析tag就是根据反射机制进行实现的,
60道基础面试题
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 前言:面试笔试都是必考语法知识点。请认真复习和深入研究OC。 目录:iOS-面试题-OC基础篇 (1) - (84...
- 三重:代码、底层内存、源码 第一阶段:开发常用JavaSE基础、IDE、Maven、Gradle、SVN、Git、...