golang 面试题目,go 面试题 阿里

  golang 面试题目,go 面试题 阿里

  1 .行程安排

  调度程序有三种基本结构:G、M和P。一个G是一个goroutine,另一个M是一个操作系统线程,另一个P是一个逻辑处理器。

  调度程序有GOMAXPROCS的确切数量。GOMAXPROCS是一个环境变量和运行时函数,用于设置程序中的并发性。要执行G,你必须得到P并运行G直到它停止。进行系统调用,如I/O操作、阻塞通道操作和调用C函数。在“先发制人”或其他小情况下停止。G只在安全的地方被抢占。在当前的实现中,它只在代码调用函数时发生。

  如果一个G被阻塞了,就像一个通道操作一样,放在一个队列里,M寻找另一个可执行的G,如果没有可执行的G,M就会释放P,进入睡眠。

  g完成系统调用后,需要再次获取P。如果P不可用,则标记为可执行,M进入睡眠状态。

  通道操作成功后,启动另一个goroutine,并将其标记为可执行。如果P可用,启动M并执行它。

  尽管大多数垃圾收集器是并发的,但为了安全地迁移到下一个收集阶段,所有线程都必须挂起。通过标记所有正在运行的goroutine来抢占。当他们到达安全点时,G和M就睡觉了。如果垃圾收集器是唯一运行的G,则进入下一阶段,唤醒GOMAXPROC的M个数,然后找到每个可以运行的G。

  运行时。Gosched函数允许M把当前的G放到可执行的goroutine列表中,然后从列表中选择一个新的G开始执行。

  2.能把2。围棋结构比较?

  因为是强类型语言,所以不能比较不同类型的结构,但是可以比较相同类型的实例值。是实例指针类型,不能进行比较。

  3 .戈德弗(福德弗),先进先出,后进先出

  4.4.select可以用来做什么?常用语gorotine的完美退出

  谷歌的选择是监控IO操作。当IO操作发生时,触发相应动作的每个case语句必须是IO操作,特别是针对通道的IO操作。

  5.上下文包的目的

  语境通常翻译为语境,是一个相对抽象的概念。其本质是【上下】由上下级沟通,内容向下传达。在Go语言中,程序单元指Goroutine。

  6.客户端如何实现长连接?

  为循环遍历设置服务器超时。

  7.其余协会之后主协会如何运作?

  沟通、语境、渠道选择

  8、切片、镜头、封顶、共享、扩展

  Append函数由于slice的基本数据结构由array、len和cap组成,在使用append扩展时,会考察数组后面是否有连续内存,如果有,就在后面添加,如果没有,就生成新的大像素组。

  9.如何按顺序读图?

  映射不能按顺序读,因为他想乱读,想按顺序读。首先要解决的问题是把钥匙变成秩序。因此,您可以将键放入切片,对切片进行排序,遍历切片,或者用键取值。

  10.实现设置。

  1.实现消息队列(多生产者、多消费者)。

  这可以通过使用一片锁来实现。

  12.分类大文件

  合并,排序,分裂,分裂和排序小文件。

  13.基础排名,稳14,http get和head哪个好?

  1HEAD和GET本质相同,区别在于HEAD不包含表示数据,只包含HTTP头信息。可能有人觉得这种方法没用,其实不然。想象一个商业场景。判断一个资源是否存在,我们一般用GET,但是这里用HEAD会让它的意思更清楚。

  十五。http401,403

  00 badrequest,请求消息有语法错误。

  401未授权意味着发送的请求需要通过HTTP认证的认证信息。

  403禁止,表示服务器拒绝访问请求的资源。

  404 not found表示在服务中找不到请求的资源。

  16、http保活

  您必须在客户端发出的HTTP请求的头中添加connection: keep-alive字段。

  Web服务器可以识别连接:保持活动字段,并在http响应中指定连接:保持活动字段,以提供保持活动服务。

  17.http可以一次多次请求而不等待后端返回吗?

  Http本质上使用的是socket连接,所以发送一个请求,连接tc进行写入。

  p,缓冲可以做很多次,这也是http无状态的原因。

  18.tcp和udp的区别,udp的优势,适用场景

  Tcp传输的是数据流,udp是数据包。tcp会通过三次握手,不需要udp。

  19、时间的作用——等待

  20.如何索引数据库?

  21、孤儿进程、僵尸进程22、死锁条件、如何避免23、linux命令、检查端口占用、cpu负载、内存占用、如何向一个进程发送信号24、git文件版本、使用顺序、合并和rebase

  25、切片和数组的区别,切片的底层结构

  26.项目中的微信支付,在支付微信通知后,两次收到微信相同的支付通知。如何防止重复消费(幂等像接口),讲了和Redis或者数据库的交易。

  27.如何在项目中推送消息(业务相关)

  28.如何找到Go的反射包对应的方法(这里忘了怎么问了,就直接说没有,只用DeepEqual,简单说一下DeepEqual)

  9.Redis的基本数据结构

  30.你用过Redis的列表吗?底层是如何实现的?但是我知道我没用过,也不知道怎么实现。

  31.Mysql有几个索引,有时间复杂度。

  32.InnoDb是表锁还是行锁,为什么?(这里回答不了为什么,只能排锁)

  3.Go通道(缓冲和非缓冲)

  34.如何在退出程序时防止频道用完消费?一开始,我不知道面试官问的是什么。然后我说监控中断信号,做处理再退出。然后面试官说不是这个意思,然后告诉我长度再发。长度未知怎么办?Close的下游会收到一个值0,可以使用(这里也有点让面试官迷惑)

  35.有没有用过什么消息中间件之类的?没有

  36.有什么问题吗?评价?一会儿有面试,一会儿再问。

  38.生产者-消费者模式,手写代码(直接用channel for Go很简单,不知道面试官会不会让用channel实现,不过不用channel可以用数组加条件变量)。如何确定渠道的缓冲长度,如何控制上游生产速度过快?这里没有提到解决方案,只是简单地说通道长度可以与上游和下游速度比线性相关。面试官说这是一个解决方案。

  9.手写循环队列

  40.写操作的循环队列是线程安全的吗?没有,怎么保证线程安全,锁起来,效率有点低。然后面试官提醒Go提倡原子运营和渠道。

  41.写完代码,面试官说后面问的问题可以回答。如果你不知道,没关系

  42.会不会Linux,只有几个命令,面试官说总共只有一百多个命令?

  3.TimeWait和CloseWait的原因

  44.你了解细分市场树吗?不,字典树?明白;理解

  45.你看过什么源代码,nsq(Go的消息中间件)?我只是要求我体内的waitgroup包证明我已经阅读了它。

  46.有同步。泳池被用过吗?为什么?对象池,避免频繁分配对象(与GC相关)。里面的物体是固定的吗?我不知道。我没看过这个的源代码。

  47.有什么问题吗?评价?基础不错,Linux还欠缺,对围棋的理解还不够深入,高级数据结构未知。好处是看源代码。

  48.后来面试官讲了他们做的,主要是广告部分,说平均每天数据量至少一百万,最多上亿,高并发使用Go支持,微服务,服务治理,还有很多我需要学习的。

  49.证明二叉树的叶节点与度为2的节点之间的关系。

  50.唯一索引和主键索引

  51.智能指针

  52.字符串被解析成数字(考虑浮点类型)

  53、单点登录、tcp粘性数据包

  54.用手洗牌。

  5.处理贴破包的实现,面试官认为和negle算法有关,解释negle和糊涂窗综合症有关。然后面试官觉得其他项目都是crud,就没问。

  56.goroutine使用了什么系统调用进行调度?这种情况不会发生。面试官想从go问操作系统,然后觉得* * *系统基础不好,就问了操作系统。

  57.进程的虚拟空间分布,全局变量在哪里?回答,操作系统不会问。

  58.有没有网络编程?是的,如何查看连接状态?Netstat,有哪些?成立,听听之类的,有什么异常吗?TIME_WAIT很多,为什么?大量的短链接

  59.先说几个基本的排序算法,再问时间复杂度,稳定性,堆为什么不稳定。

  60、topk问题,海量数据topk(答案是分多次加载内存,然后用一个保持K长度的有序链表,然后说时间复杂度不好,提示说还用堆,然后ooooooo对)。我这里说的解决方案不用dp(不熟悉dp),面试官也一直在引导我dp,但还是不会。

  61.什么是主键62,联合索引和唯一索引62?指数越多越好?

  63.建立指数需要注意什么?

  64.进程和线程的区别是什么?65.僵局?67.tcp三次握手67,http,https68 68,状态码401,301,302,20169。我说只有一台机器,就用单机部署了。面试官说单机也可以部署多台机器。有什么办法吗?我说docker,问docker有哪些网络,对dockerfile关键字不熟悉,只回答了几个。对了,nginx转发的。

  70.数据库隔离级别,提交读会导致什么?71.去排班?72.goroutine的泄漏处理好了吗?设置超时,选择并添加计时器。

  74、mysql高可用性方案74、进程线程差异

  76.排序算法和时间复杂度。76.如何学习go77和go的螺纹?我跟他讲了用goroutine调度78和io模型,同步阻塞,同步非阻塞,异步79,cookie和session。

  80、接口kps测试81、redis排名数据结构(跳转表)、查询时间复杂度82、redis分布式、如何减少同步延迟83、mysql能否实现redis的功能84、平时如何学习?85.你读什么书?86.爱好87。你看过google的四篇分发论文吗?从没读过89。上限理论,比如90。LRU算法LFU91。说说怎么理解网络编程?

  93.go使用了什么pit(对于范围,数据库连接延迟关闭)?93.围棋的利与弊?95.围棋的价值传递与借鉴?96.慢速查询?97.为什么用pg98?redis的数据类型。

  99.找出所有左叶节点和100,m个n大小的有序数组的并集。一开始是2路合并,发现时间复杂度。后来面试官提醒我直接合并M种方式,求时间复杂度。101.静态关键字。还有其他关键词吗?102.哈希表设计,线程安全?103.线程拥有什么?104.网络编程流程?105.选择?EPOLL?106.你读什么书?

  07.排行榜怎么实现?108.如何实现围棋的锁定?使用什么cpu指令?109.如何实现go的运行时?110.你见过sql的连接池实现吗?111.你知道ctx套餐吗?有什么用?12.围棋在什么情况下会出现内存泄露?(他说ctx没取消的时候,我还真不知道这个。) 113.如何实现协调过程的完美退出?14.智力拼图:1000瓶酒里有1瓶毒酒和10只老鼠。毒性发作需要7天,第8天就能卖出去。我怎么能要那瓶毒酒呢?15.简单的dp问题。n*n矩阵从左上角到右下角有多少种方式(只向下和向右)?116.利用通道实现定时器?(其实两个过程是同步的)117。为什么go高并发?讨论了围棋的调度模型。

  18.操作系统内存管理?交流,为什么共享存储区效率最高?119.实现一个hashmap,解决哈希冲突的方法,解决哈希倾斜的方法。120.如何理解围棋的界面?121.100亿个数字选top5。小根堆122、N的数组和数组对123、最大邻接子数组和124、redis容灾、备份、扩展125、跳转表、为什么用跳转表代替红黑树126、输入url后涉及到什么127、tcp如何找到哪个socket 128、ipc模式、共享存储区的原理130、进程虚拟空间的布局131、进程状态转移132、线程的栈分配在哪里133、多线程读取、是否会有(这里面试官后来说,要看数据总线的位数。如果是32位,写int32没问题,但是int64有问题。) 134.判断二叉树是否是全二叉树135,lru实现136,一个大整数(以字符串形式表示),移动字符找到比它大的最小数。137.比如系统设计。

  评论

  问题

  作者最新文章URL和URI微分分析已经成为顶级自由职业者必备的七大软技能之二:回归时间的主人为什么选择go语言?相关文章2小时整理了16个文本函数的用法,使用时效率翻倍。

  解放程序员的双手!GPT-3自动生成SQL语句开源代码

  超精加工 Python操作Excel库xlwings常用操作详解!

  OpenAI CLIP模型是一种新的尝试,Colab实现了近200万幅图像的精确检索和匹配。

  PyTorch指南:让你的深度学习模型训练快速起来的17个小技巧!

golang 面试题目,go 面试题 阿里