云计算 美的社招 一面面经(golang)

美的一面挂

一、Linux上对服务的性能进行分析

        1、对服务器的性能进行分析

                对服务器的性能主要从以下几方面进行分析,cpu占用率,磁盘IO、内存占用率、虚拟内存使用率。服务器以上性能的判断可以通过iostat、vmstat和top命令来查看。

        2、对服务的性能进行分析

                对服务的性能跟服务器的性能分析基本一致,可以用top、ps -p、perf来分析服务的资源占用情况,另外可以通过strace类分析服务的系统调用。

二、业务上如何选择redis的数据类型

        选择redis的数据结构时,需要考虑如下因素:

                数据的特性:例如,数据是否具有唯一性,是否需要排序,是否需要分数等。

                访问模式:例如,数据时单个读写操作还是批量操作,是否需要对数据进行聚合计算等。

                性能要求:需要高频读写还是低频,需要快速响应还是接受一定的延迟等。

        各个数据结构的适用常见为:

                字符串(string):适合存储单个值,比如计数器、缓存和会话数据等。

                列表(list):存储有序元素的集合,支持在头尾插入、删除元素,适合实现队列、堆栈等。

                集合:适用于存储无序的唯一元素的集合,支持快速增加、删除和查找,适合实现标签系统,好友关系等

                有序集合:存储有序的唯一元素的集合,常用来实现排行榜、计分系统等。

                哈希表:适合存储具有多个字段并且有些字段会频繁改动的对象,常用来作为缓存存储用户对象、文章对象等,比字符串节省空间,灵活性高。

三、熟悉orm、protobuf框架或者说工具吗

四、for循环中goroutine的注意事项

        1、注意变量的安全性,由于gorotutine是异步执行的,他可能会捕获到变量更新前的值,所以最好是将变量传递给goroutine函数

        2、并发安全性,确认不会因为并发导致竞争、死锁等。

        3、资源管理,注意释放资源(defer)

        4、调度控制,由于goroutine是并发执行的,可能会导致系统高负载或者执行顺序不一致。

五、golang中协程的管理和通信

        协程的管理主要是使用select进行多路复用和调度,或者使用sync包中的锁、条件变量(cond.wait, cond.broadcast,cond.singal)等机制进行同步和互斥

        协程的通信可以使用通道(channel)进行通信和同步。通道的注意事项主要有:

                需要初始化(不初始化写入会导致死锁,关闭会导致panic);

                如果不使用协程的情况下,读取数据之前一定要先写入;

                写入数据注意不能超过缓冲大小,否则会死锁。

                如果通道关闭之后仍然读取,会读取到类型的0值。

六、gin、go-zero的特性(使用过的golang框架)

七、了解常用的中间件吗

八、new和make的区别

        1、都是在堆上分配内存

        2、入参(个数)不一样

        3、返回类型不一样,new返回接收类型的指针,make返回接收第一个参数的类型(非指针)

        4、应用场景不一样,make专门用来给slice、map、chan分配内存并做初始化的,new是一个通用的内存分配工具,可以给其他类型分配内存(分配0值)。

九、对项目的目录设计的理解

十、了解gorm和protobuf吗

十一、介绍项目

猜你喜欢

转载自blog.csdn.net/MrBlind/article/details/129103304