字节训练营三天小总结Day1 | 青训营笔记

234 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记

Day1:基础语言

因为有Go语言的基础知识,所以前面的例子相当于帮忙复习一遍基础知识。

项目实战的知识点补充:

1.猜词游戏

关键知识点是Go的随机数需要种子才能实现随机,如rand.Seed(time.Now().UnixNano())

补充一个Go语言在写笔试题遇到的读数据超时问题:

package main

import (
   "bufio"
   "fmt"
   "os"
)
func main() {
   in := bufio.NewReader(os.Stdin)
   var s string
   fmt.Fscan(in,&s)
}

2.词典翻译

首先是GET两个新工具。

curlconverter.com/#go 用于解析URL bash为Go代码,极大地方便Web开发

oktools.net/json2go JSON转结构体也是一个超实用功能

同时巩固了数据读写:

读单个字节:
b, err := reader.ReadByte() 
把method数组读满:
_, err = io.ReadFull(reader, method)

关于课后作业。选取了www.deepl.com/translator#… ,读取URL转换成Go代码。利用strings.Replace替换词语为输入单词。来实现第二个搜索引擎的单词,此外需要解析相应的JSON为结构体数据。需要注意好数组、对象的区别

3.proxy代理服务器

从day3回来发现自上而下写逻辑代码,然后用额外的函数填充真的非常有利于阅读。优秀的编码习惯实在太帅了,字节UPUPUP!

先对代理服务器定义。首先需要Auth模块对客户端请求鉴权,除了socks5,还运用于HTTP转HTTPS,中继网关验证请求,用于RPC调用的注册中心的验证工作。核心检验connect请求是否按照对应格式进行请求,若请求失败则利用fmt.ErrorF通知鉴权失败。

第二步才是对目标服务器进行请求连接并发送数据。需要解析版本号、请求、目标地址类型【因为通信包括ipv4,ipv6,host,可能还有本机socket通信】。凭借以上信息,代理服务器才得知需要建立连接通信的目标服务器信息。随后与目标服务器建立连接并启动两个协程执行转发工作io.Copy(A,B)可以实现将数据从B读出并写入到A。

小细节补充:经过实验demo,我们可以得知b, err := reader.ReadByte() 负责从Socket缓存区读字符到用户程序。_ , err = conn.Write([]byte{b})负责将用户程序的数据写入到Socket缓存区。具体的收发操作都依赖于操作系统实现。

工作量比想象中的多=-=于是后面两天的,明天再来复盘把!

最后,非常感谢字节跳动提供这个青训营机会。真的非常棒,dream company哈哈哈。