美的一面挂
一、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值)。