前两天有个朋友去面试,把他给问自闭了。。。 拿到他的面试题后,花了一些时间,整理了以下golang面试题,都是比较基础的问题,留给大家作为面试参考。
前两天有个朋友去面试,把他给问自闭了。。。 拿到他的面试题后,花了一些时间,整理了以下golang面试题,都是比较基础的问题,留给大家作为面试参考。
可简单描述工作中用到的东西,协程,通道,框架、加密等等,说一些关键的技术点
两种API架构概述
grpc相对于rest的优势
gRPC 对接口有严格的约束条件,安全性更高,对于高并发的场景更适用
为什么选择grpc
协程、通道、web框架、密码学等
过select可以监听channel上的数据流动。 select的用法与switch语言非常类似,由select开始一个新的选择块,每个选择条件由case语句来描述。
示例代码如下:
select {
case <-chan1:
// 如果chan1成功读到数据,则进行该case处理语句
case chan2 <- 1:
// 如果成功向chan2写入数据,则进行该case处理语句
default:
// 如果上面都没有成功,则进入default处理流程
}
注:先进后出的原因是后面定义的函数可能会依赖前面的资源,自然要先执行;否则,如果前面先执行,那后面函数的依赖就没有
先defer再return,函数执行之后,return返回之前,按照先进后出的顺序执行
详解请参考: 进程、线程、协程
空结构体不占任何内存,使用空结构体,可以帮咱们节省内存空间,提升性能golang
map不能顺序读取,是因为他是无序的,想要有序读取,首先的解决的问题就是,把key变为有序,所以可以把key放入切片,对切片进行排序,遍历切片,通过key取值。
代码示例:
package main
import (
"fmt"
"sort"
)
func main() {
map1 := make(map[int]string)
map1[1] = "红孩儿"
map1[2] = "牛魔王"
map1[3] = "白骨精"
map1[4] = "小钻风"
map1[5] = "黄袍怪"
map1[6] = "孔雀大明王"
map1[7] = "白毛鼠"
//获取所有的key,取值后存储到切片
keys := make([]int,0,len(map1))
for k,_ := range map1{
keys = append(keys,k)
}
fmt.Println(keys)
//对key值进行排序
//内置函数sort包下的排序方法
sort.Ints(keys)
fmt.Println(keys)
for _,key := range keys{
fmt.Println(key,"-->",map1[key])
}
//冒泡排序方法
for i := 1;i<len(keys);i++ {
for j := 0;j<len(keys)-1;j++ {
if keys[j] > keys[j+1] {
keys[j],keys[j+1] = keys[j+1],keys[j]
}
}
}
for i := 1;i<=len(keys);i++ {
fmt.Println(i,"-->",map1[i])
}
}
都会用到,包括基本数据类型:int、float、string、bool ,复合数据类型有:指针、数组、切片、字典(map)、通道、结构和接口
注:map和slice也会用到,当有明确的key值时,使用map,如果没有明显的key,就使用切片
我们经常会使用到range来帮助我们遍历一些数据,通常情况下都是查看操作多一些,但是当我们需要对其原地址上的内容进行变更时,通常都是使用 ==for i:=0; i<len(); i++== 来修改值。在使用range的时候,通常会将该数据结构进行拷贝,来遍历这一份拷贝后的副本,使用的是一个值传递,如果我们进行修改,修改的就只是副本,对原地址上的值不会产生任何影响。
构造一个set,首先定义set的类型svg
//set类型
type Set struct {
m map[int]Empty
}
为一个结构体类型,内部一个成员为一个map,这也是主要咱们存储值的容器函数产生set的工厂性能
//返回一19et
func SetFactory() *Set{
return &Set{
m:map[int]Empty{},#### 。所谓并发编程是指在一台处理器上“同时”处理多个任务。
}
}
一般没有效率太高的方法:
golang中的分布式锁可使用etcd进行实现,实现原理如下:
以上,就是今天分享的全部内容了,希望大家通过以上golang面试题解决自己的疑问,找到自己满意的工作。
如果文章中如果有不太正确的地方,欢迎指正,可以添加我的个人微信,备注:地区-职业方向-昵称,欢迎来撩,加入golang技术交流群,与更多的golang开发者、技术大佬学习交流。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!