IT评测·应用市场-qidao123.com技术社区

标题: 字节头条golang二面 [打印本页]

作者: 络腮胡菲菲    时间: 4 天前
标题: 字节头条golang二面

docker和云服务的区别

首先明白Docker的焦点功能是容器化,它通过容器技术将应用程序及其依赖项打包在一起,确保应用在差别环境中可以或许同等地运行。而云服务则是由第三方提供商通过互联网提供的盘算资源,例如盘算能力、存储、数据库等。云服务的范围更广,涵盖了IaaS(基础设施即服务)、PaaS(平台即服务)和SaaS(软件即服务)等多种情势。
Docker可以与云服务结合利用,例如在云服务商提供的虚拟机中运行Docker容器,大概直接利用云服务商提供的容器服务(如AWS ECS、Google Kubernetes Engine等)。但两者本质上办理的问题差别,Docker关注的是应用的封装和隔离,而云服务关注的是盘算资源的按需分配和管理

golang中读取文件的流程是什么


一个URL的输入到浏览器展示页面的过程


1. 浏览器分析url,产生http请求信息


2. DNS查询服务器域名对应的 IP 地址


3. 应用程序(浏览器)通过调用Socket库,来委托协议栈工作
协议栈的上半部分有两块,分别是负责收发数据的TCP和UDP协议,这两个传输协议会继承应用层的委托实行收发数据的操作。
协议栈的下面一半是用IP协议控制网络包收发操作,在互联网上传数据时,数据会被切分成一块块的网络包,而将网络包发送给对方的操作就是由IP负责的。

4. 可靠传输TCP(传输层)


5. 远程定位IP(网络层)

6. 两点传输MAC(数据链路层)



7. 网卡 网线

8. 交换机、路由器

KafKa

参考:https://blog.csdn.net/weixin_45366499/article/details/106943229


发送数据




生存数据



消费数据





GMP

Go语言的GPM调理模子是Go运行时中用于处理并发的焦点机制之一,它将Goroutine(轻量级线程)有效地映射到系统线程上,以最大化并发性能。GPM模子紧张由三个部分组成:G(Goroutine)、P(Processor)、M(Machine)。让我们逐一详细介绍:
P的焦点作用
资源隔离与负载均衡
P作为逻辑“处理器”,负责管理本地Goroutine队列(runq),使每个OS线程(M)绑定到一个P上工作。这种筹划避免了全局队列的锁竞争,同时支持差别P之间通过工作盗取(Work Stealing)动态平衡负载。
多核利用率
P的数目默认等于CPU焦点数,确保Goroutine能均匀分配到多个焦点上实行。若去掉P,调理器将无法有效利用多核,可能退化为单线程或引发全局锁争用。
调理效率低落
P的本地队列镌汰了Goroutine的调理延迟。若去掉P,每次调理都需要访问全局队列,增长延迟和不确定性。
阻塞操作的协作困难
当Goroutine因系统调用阻塞时,P会解绑M并创建/复用新的M继续运行其他Goroutine。若无P,阻塞操作可能导致线程长时间挂起,浪费资源。
GC


插入写屏障:黑色对象引用的对象变为灰色(栈区不会触发, stw+remark)

删除写屏障:删除的对象如果为白色被标记为灰色(被删除后纵然没有别的对象再引用他,也会活到下一轮)
混合写屏障

GC期间,任安在栈上新创建的对象均为黑色。
上面两点只有一个目标,将栈上的可达对象全部标黑,最后无需对栈进行STW,就可以保证栈上的对象不会丢失。有人说,一直是黑色的对象,那么不就永久扫除不掉了么,这里夸大一下,标记为黑色的是可达对象,不可达的对象一直会是白色,直到最后被接纳。
堆上被删除的对象标记为灰色
堆上新添加的对象标记为灰色
k个一组翻转列表

https://leetcode.cn/problems/reverse-nodes-in-k-group/description/
  1. /**
  2. * Definition for singly-linked list.
  3. * type ListNode struct {
  4. *     Val int
  5. *     Next *ListNode
  6. * }
  7. */
  8. func reverseKGroup(head *ListNode, k int) *ListNode {
  9.     if head==nil{
  10.         return nil
  11.     }
  12.     l,r := head, head
  13.     root := &ListNode{}
  14.     rr := root
  15.     num := 0
  16.     for r!=nil{
  17.         num++
  18.         if num%k==0{
  19.             tmp := r.Next
  20.             r.Next = nil
  21.             rr.Next = reverse(l)
  22.             rr = l
  23.             l,r = tmp, tmp
  24.         }else{
  25.             r = r.Next
  26.         }
  27.     }
  28.     rr.Next = l
  29.     return root.Next
  30. }
  31. func reverse(head *ListNode) *ListNode{
  32.     if head==nil || head.Next==nil{
  33.         return head
  34.     }
  35.     l,r := head, head.Next
  36.     l.Next = nil
  37.     for r!=nil{
  38.         tmp := r.Next
  39.         r.Next = l
  40.         l = r
  41.         r = tmp
  42.     }
  43.     return l
  44. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4