每日go语言面试题三
创始人
2024-05-25 13:31:10
0

1.说一下go和其他语言的区别

我是最开始是学习c语言的,c语言是面向过程的一种语言,一般用于写底层,性能高,贴合硬件,之后学习很长时间的java,java语言是面向对象语言,简单易入手,当然要学深也是非常难的,java生态非常庞大,阿里系,京东系都市用java的。go语言是一种新兴语言,专门为了微服务而生,写法相当简单,go语言提出了协程的概念,进一步细分了线程,协程的调度是由程序自己进行控制的,并且协程是线程的千分之一,切换开销小,并发度高。

2.说一下你是怎么学Go的

先学习了基础的语法,然后是通过对比学习的,因为学习一个新的语言,会渐渐的忘记以前学过的语言,通过对比学习不仅能学到两者的区别,还能加深学习的印象。

3.说一下Go的调度模型

go语言调度模型是gmp,g表示协程、m表示内核线程、p表示调度器,一般等于内核数,p中有一个本地的g队列,还有一个全局的g队列,m的数量一般大于p的数量,且gmp模型中存在m协程池用来减少m的创建和销毁,m必须和p结合后,才可以进行处理g,先处理p中的本地队列中的g,处理完之后,才会去全局队列中获取g,全局队列中为空的时候,会去其他p中窃取g来执行,每个g执行时间一般不超过10ms,这样能保证其他的g不会因为等太长的时间而出现饿死。gmp会采用窃取和提交来优化gmp的性能。

具体流程是:执行一段go func代码则会创建一个g,g会尝试着加入p中的本地队列,加不进去则会加到全局队列。m必须绑定p,一一对应才可以执行g,m先循环执行p本地队列的g,每个g占用执行时间不超过10ms,防止其他的g饿死,本地的g执行完之后,会去全局队列里面获取g,全局队列中为空之后,在去其他p中去窃取一半的g。当m正在执行某个g的时候发生系统调用,与和当前的m进行解绑,m和当前的g会进行等待,当前的p与寻找空闲的m或者从新创建m继续执行,当m系统调用完之后,会尝试寻找一个空闲的p,并且把g放进去,如果找不到则会将g放入全局队列。

4.讲一下你对channel的理解。没有goroutine在读channel时去写会反发生什么。读的时候呢。channel读的时候是有序还是无序的?

channel是go并发重要的核心之一,可以把chan理解为mutux+队列的组合,其数据结构包含,,,,channel存储数据是有序的,其底层数据结果是一个循环数组。

5.讲一下你对map的理解。map是有序还是无序,如何扩容的,并发安全。

go语言中的map,有hamp和bmap两个结构,采用数组➕链表的形式,通过拉链法来处理冲突,每个bmap最多存储八个键值对,超过之后则通过指针指向下一个bmap。

map中的数据是无序的,需要并发安全的话需要使用sync.map或者配合mutex一起使用。

代补充,,,

6.说一下你学过哪些golang的框架。gin框架怎么实现优雅重启?

可以考虑采用endless来实现优雅的重启

7.讲一下MySQL的索引规范。MySQL有哪些索引类型?索引的底层实现是什么?具体的算法是如何实现的?

索引一般分为主键索引和非主键索引,非主键索引包括普通索引、唯一索引、联合索引等,索引添加的规范一般包括:进行对区分度高的字段添加索引,不能盲目的添加索引,在添加索引的时候根据具体的需求添加不同类型的索引。索引的底层是B+树,为了就是加快检索的效率。

8.MySQL中explain的type种类

system > const > eq_ref > ref > range > index > ALL

9.MySQL的int和tidyint的区别?

tidyint占用1个字节,int占用四个字节。

10.进程间的通信方式?

共享内存、管道、信号量、消息队列、套接字等

11.状态码502,504有什么区别?

502表示网关错误、504表示网关超时

12.讲一下你用过哪些Linux的命令?

最常用的linux命令大全(建议收藏)_海鸥爱上鱼的博客-CSDN博客_linux命令行大全

13.sed和awk有什么区别?

sed和awk都是处理文本常用的工具,awk应用的更加广泛,sed是一种面向字符流的编辑器,一行一行的加载到模式空间里面,处理完在进行输出。awk是更像是一种字符模式匹配的语言,其功能很丰富。

14.MySQL规范

MySQL 规约(转自阿里巴巴开发手册)_韩某Hyman的博客-CSDN博客

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...