面试宝典

1. 语言基础

1.1 make和new

make只能创建引用类型,例如:slice、map、channel,并且返回引用类型;并且在分配完内存空间后会初始化 new可以创建值类型,会为其赋初始值,返回指针类型,new分配的空间会被清零

1.2 字符串拼接方式

  • 使用“+”拼接,str = str1+str2;
  • 使用 sprintf 拼接,str = sprintf("%s%d%s", str1, 1, str2)
  • 使用join拼接,s = []string{str1,str2}; str = strings.Join(s, "");

1.3 切片扩容机制

切片底层使用数组实现,与数组共享同一块内存空间,当使用append方法向切片内追加元素时,如果容量不足,会发生扩容,扩容时,会先申请一块内存空间,然后将数据copy过去,再将新的元素追加到新的内存空间。申请的内存空间机制是,如果原来的切片容量小于1024,则新的内存空间为原来的2倍,如果原来的切片容量大于等于1024,则内存空间为原来的1.25倍。

1.4 锁有几种,都有什么特点

1.5 gorutine运行机制(协成的实现机制)

2. gin框架

2.1 路由实现

2.2 定义中间件

2.3 前置和后置中间件

3. gorm

3.1 怎样使用gorm连表查询