【Go口试】基础八股文篇 (连续整合)

打印 上一主题 下一主题

主题 900|帖子 900|积分 2700

Cookie、Session、Token、JWT之间的区别


对HTTP协议有什么了解

超文本传输协议,互联网应用广泛使用的网络协议,
处于TCP/IP协议族的应用层
使得客户端能够向服务器哀求网页,图片,脚本等资源,
主要作用于客户端与服务端之间的通讯,
HTTP有哪些方法

GET:从服务器获取资源,比如浏览器地址栏输入一个网址去检察网页内容,通常就是发送GET哀求,哀求参数在URL之后,一样平常是幂等性的:多次实行雷同GET,结果一样,并且安全,不会对资源进行修改等操作
POST:常用于向服务器提交数据,不是幂等的,多次操作结果大概不一样
PUT:更新服务器上资源,大概要求客户端提供完整的资源数据
DELETE:删除一些指定资源
HEAD:和GET类似,但是只返回响应头的信息,一样平常用于判定资源是否存在,检察资源末了需改时间等环境
OPTIONS:获取HTTP服务器支持的http哀求方法,答应客户端检察服务器性能,比如ajax跨域时的预检
TRACE:测试和诊断,一样平常禁用,防止被攻击
CONNECT, HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。就是把服务器作为跳板,去访问其他网页然后把数据返回回来,连接成功后,就可以正常的get、post了。
什么环境会用到post方法

注册登录,表单提交或生存,文件上传
HTTP Body的四种格式

**form-data:**表单数据
上传键值对,文件

**x-www-from-urlencoded:**表单数据转成键值对,
name=oneby&hobby=coding
raw 可以上传任何文本
text,javascript,json,html,application/xml
等操作,一样平常是传json
binary,上传文件,一次一个文件,(少出现)
golang中可读可写(可实行IO操作)的文件一样平常会实现哪些接口(Reader,Writer接口)

io.Reader接口,实现了Read方法,从源读取数据到切片p中
io.Writer接口:将字符切片p的数据写入目标
HTTP的协议界说,报文是什么样的

  1. GET http://jsuacm.cn/ HTTP/1.1
  2. Host: jsuacm.cn
  3. Connection: keep-alive
  4. Upgrade-Insecure-Requests: 1
  5. User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3877.400 QQBrowser/10.8.4506.400
  6. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
  7. Accept-Encoding: gzip, deflate
  8. Accept-Language: zh-CN,zh;q=0.9
  9. //”请求数据”(GET方式的请求一般不包含)
复制代码

http1和http2的区别

  1. HTTP/1.x:
  2. 特点:
  3. 基于文本的协议,请求和响应以文本形式传输,容易理解和调试。
  4. 采用短连接或长连接(通过 Connection: keep-alive)来提高性能,但一个连接同时只能处理一个请求 / 响应序列,会出现队头阻塞问题,即如果一个请求阻塞,后续请求会被延迟。
  5. 通常使用 TCP 三次握手建立连接,性能在高并发场景下可能受限。
  6. 示例:
  7. 一个简单的 HTTP/1.1 请求:
  8. GET /index.html HTTP/1.1
  9. Host: www.example.com
  10. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3
复制代码
redis相关标题


gin的使用过程

1.go get gin 引入gin
2.在代码里导入gin的包
3.初始化默认Gin引擎(gin.Default())
4.界说路由和处置惩罚函数(数据库操作等)
5.启动web服务(router.Run())
6.中间件(日志或者身份认证)
GORM是什么

Go的一个对象关系映射库
可以帮忙映射go布局体与数据库的表
提供API资助编写复杂sql,支持事件
怎么设计一个channel

channel是一个内置的数据范例,提供一种同步和通讯机制,确保并发安全,类似一个管道一边发一遍接
1.界说一个"消息"的布局体,以布局体为数据布局创建msgCh
2.创建发送消息的协程,并在协程里转达数据给msgCh
3.在主协程上打印
  1. // 传递自定义结构体的 Channel
  2. type Message struct {
  3.     Content string
  4.     Sender  string
  5. }
  6. msgCh := make(chan Message)
复制代码
  1. go func(){//创建一个协程
  2.         msgCh <- Message{
  3.                 Content: "Hello, World!",
  4.                 Sender:  "Alice",
  5.         }
  6.         向msgCh里面传入数据
  7. }
  8. //打印到主协程
  9.         fmt.Println(<-msgCh)
复制代码
什么是RPC

RPC意思是远程过程调用,一种通讯协议,答应一个服务调用另一个服务,就像是在调用本地的方法一样,无需了解网络通讯,序列化和反序列化等细节,
比如说gRPC是谷歌的RPC,使用Protocol Buffers作为序列化协议
主要优点是抽象网络通讯细节,简化远程调用
流程:消费者–>代理对象–>哀求客户端–>序列化与反序列化–>web服务器–>哀求处置惩罚–>实现对应类并且调用提供者方法
中间还涉及到服务注册,负载平衡,心跳查抄,熔断等操作
go多线程加锁标题

我们想要创建一个安全的计数器,该计数器可以被多个 goroutine 访问和增长,但是必要保证计数器的值不会因为并发访问而出现竞态条件。
  1. import (
  2.         "fmt"
  3.         "sync"
  4.         "time"
  5. )
  6. // MyCounter 结构体包含一个 int 类型的计数器和 sync.Mutex 用于同步
  7. type MyCounter struct {
  8.         mu    sync.Mutex
  9.         value int
  10. }
  11. // Inc 方法用于增加计数器的值,需要加锁以保证线程安全
  12. func (c *MyCounter) Inc() {
  13.         c.mu.Lock()
  14.         defer c.mu.Unlock()
  15.         c.value++
  16. }
  17. // GetValue 方法用于获取当前计数器的值
  18. func (c *MyCounter) GetValue() int {
  19.         c.mu.Lock()
  20.         defer c.mu.Unlock()
  21.         return c.value
  22. }
  23. func main() {
  24.         var wg sync.WaitGroup
  25.         const numGoroutines = 100       // 启动的 goroutine 数量
  26.         const numIncsPerGoroutine = 100 // 每个 goroutine 增加计数器的次数
  27.         c := MyCounter{}
  28.         // 启动多个 goroutine 来增加计数器
  29.         for i := 0; i < numGoroutines; i++ {
  30.                 wg.Add(1)
  31.                 go func() {
  32.                         defer wg.Done()
  33.                         for j := 0; j < numIncsPerGoroutine; j++ {
  34.                                 c.Inc()
  35.                         }
  36.                 }()
  37.         }
  38.         // 等待所有 goroutine 完成
  39.         wg.Wait()
  40.         // 输出最终的计数器值
  41.         fmt.Printf("Final counter value: %d\n", c.GetValue())
  42.         time.Sleep(1 * time.Second) // 等待一秒,确保所有输出都完成
  43. }
复制代码
计算机网络


算法



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

数据人与超自然意识

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表