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的协议界说,报文是什么样的
- GET http://jsuacm.cn/ HTTP/1.1
- Host: jsuacm.cn
- Connection: keep-alive
- Upgrade-Insecure-Requests: 1
- 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
- Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
- Accept-Encoding: gzip, deflate
- Accept-Language: zh-CN,zh;q=0.9
- //”请求数据”(GET方式的请求一般不包含)
复制代码
http1和http2的区别
- HTTP/1.x:
- 特点:
- 基于文本的协议,请求和响应以文本形式传输,容易理解和调试。
- 采用短连接或长连接(通过 Connection: keep-alive)来提高性能,但一个连接同时只能处理一个请求 / 响应序列,会出现队头阻塞问题,即如果一个请求阻塞,后续请求会被延迟。
- 通常使用 TCP 三次握手建立连接,性能在高并发场景下可能受限。
- 示例:
- 一个简单的 HTTP/1.1 请求:
- GET /index.html HTTP/1.1
- Host: www.example.com
- 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.在主协程上打印
- // 传递自定义结构体的 Channel
- type Message struct {
- Content string
- Sender string
- }
- msgCh := make(chan Message)
复制代码- go func(){//创建一个协程
- msgCh <- Message{
- Content: "Hello, World!",
- Sender: "Alice",
- }
- 向msgCh里面传入数据
- }
- //打印到主协程
- fmt.Println(<-msgCh)
复制代码 什么是RPC
RPC意思是远程过程调用,一种通讯协议,答应一个服务调用另一个服务,就像是在调用本地的方法一样,无需了解网络通讯,序列化和反序列化等细节,
比如说gRPC是谷歌的RPC,使用Protocol Buffers作为序列化协议
主要优点是抽象网络通讯细节,简化远程调用
流程:消费者–>代理对象–>哀求客户端–>序列化与反序列化–>web服务器–>哀求处置惩罚–>实现对应类并且调用提供者方法
中间还涉及到服务注册,负载平衡,心跳查抄,熔断等操作
go多线程加锁标题
我们想要创建一个安全的计数器,该计数器可以被多个 goroutine 访问和增长,但是必要保证计数器的值不会因为并发访问而出现竞态条件。
- import (
- "fmt"
- "sync"
- "time"
- )
- // MyCounter 结构体包含一个 int 类型的计数器和 sync.Mutex 用于同步
- type MyCounter struct {
- mu sync.Mutex
- value int
- }
- // Inc 方法用于增加计数器的值,需要加锁以保证线程安全
- func (c *MyCounter) Inc() {
- c.mu.Lock()
- defer c.mu.Unlock()
- c.value++
- }
- // GetValue 方法用于获取当前计数器的值
- func (c *MyCounter) GetValue() int {
- c.mu.Lock()
- defer c.mu.Unlock()
- return c.value
- }
- func main() {
- var wg sync.WaitGroup
- const numGoroutines = 100 // 启动的 goroutine 数量
- const numIncsPerGoroutine = 100 // 每个 goroutine 增加计数器的次数
- c := MyCounter{}
- // 启动多个 goroutine 来增加计数器
- for i := 0; i < numGoroutines; i++ {
- wg.Add(1)
- go func() {
- defer wg.Done()
- for j := 0; j < numIncsPerGoroutine; j++ {
- c.Inc()
- }
- }()
- }
- // 等待所有 goroutine 完成
- wg.Wait()
- // 输出最终的计数器值
- fmt.Printf("Final counter value: %d\n", c.GetValue())
- time.Sleep(1 * time.Second) // 等待一秒,确保所有输出都完成
- }
复制代码 计算机网络
略
算法
略
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |