获得徽章 0
#青训营 x 字节后端训练营#
方法值
我们经常选择一个方法,并且在同一个表达式里执行,比如常见的p.Distance()形式,实际上将其分成两步来执行也是可能的。p.Distance叫作“选择器”,选择器会返回一个方法"值"一个将方法(Point.Distance)绑定到特定接收器变量的函数。这个函数可以不通过指定其接收器即可被调用;即调用时不需要指定接收器,只要传入函数的参数即可。
展开
评论
#青训营 x 字节后端训练营#
Go里面提供了一个关键字select,通过select可以监听channel上的数据流动。
有时候我们希望能够借助channel发送或接收数据,并避免因为发送或者接收导致的阻塞,尤其是当channel没有准备好写或者读时。select语句就可以实现这样的功能。
select的用法与switch语言非常类似,由select开始一个新的选择块,每个选择条件由case语句来描述。
与switch语句相比,select有比较多的限制,其中最大的一条限制就是每个case语句里必须是一个IO操作。
展开
评论
#青训营 x 字节后端训练营#
常见的编程原则:
1. KISS原则(保持简单和直接):使用简单和直接的方式编写代码,以减少复杂性和可能的错误。
2. DRY原则(不要重复自己):避免在代码中重复相同的逻辑或代码段。
3. SOLID原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖反转原则。
4. YAGNI原则(您不需要它):只编写您需要的功能,避免在代码中添加不必要的功能。
5. 高内聚低耦合:模块内部的各项功能高度相关,模块间的耦合度尽量低。
6. 鲁棒性:程序需要具有良好的鲁棒性,能够处理各种异常情况。
7. 可读性和可维护性:代码应该易于阅读和理解,能够方便地进行维护和修改。
展开
评论
#青训营 x 字节后端训练营#
协程并发
协程:coroutine。也叫轻量级线程。
与传统的系统级线程和进程相比,协程最大的优势在于“轻量级”。可以轻松创建上万个而不会导致系统资源衰竭。而线程和进程通常很难超过1万个。这也是协程别称“轻量级线程”的原因。
一个线程中可以有任意多个协程,但某一时刻只能有一个协程在运行,多个协程分享该线程分配到的计算机资源。
多数语言在语法层面并不直接支持协程,而是通过库的方式支持,但用库的方式支持的功能也并不完整,比如仅仅提供协程的创建、销毁与切换等能力。如果在这样的轻量级线程中调用一个同步 IO 操作,比如网络通信、本地文件读写,都会阻塞其他的并发执行轻量级线程,从而无法真正达到轻量级线程本身期望达到的目标。
在协程中,调用一个任务就像调用一个函数一样,消耗的系统资源最少!但能达到进程、线程并发相同的效果。
在一次并发任务中,进程、线程、协程均可以实现。从系统资源消耗的角度出发来看,进程相当多,线程次之,协程最少。
展开
评论
#青训营 x 字节后端训练营#
Go语言的进阶知识:
1. 接口与多态:Go语言中的接口是一种高级的灵活特性。它可以实现多态,使得代码更具扩展性。
2. 并发模型:Go语言对并发编程提供了很好的支持。它使用goroutine和channel的并发模型,能够实现高效的并发编程。
3. 内存管理:Go语言的内存管理比C++、Java和Python都更具优势,它有自己的垃圾回收机制,能够自动管理内存。
4. 反射:Go语言支持反射,允许程序在运行时检查和修改部分数据类型、变量或者函数等信息,让代码更具灵活性。
5. Web开发:Go语言的快速开发和高效性能使得它在Web开发领域受到广泛关注。常用的Web框架有gin、echo、beego等等。
6. 分布式系统:由于Go语言天生具备并发的能力,因此在分布式系统的开发中也有很好的应用。常用的分布式框架有etcd、consul、raft等。
在学习Go语言过程中可以尝试掌握这些知识点,能够更好地了解Go语言的特点和优势,提高开发效率和代码质量。
展开
评论
#青训营 x 字节后端训练营#
Go moudles 目前集成在 Go 的工具链中,只要安装了 Go,自然而然也就可以使用 Go moudles 了,而 Go modules 的出现也解决了在 Go1.11 前的几个常见争议问题:
1. Go 语言长久以来的依赖管理问题。
2. “淘汰”现有的 GOPATH 的使用模式。
3. 统一社区中的其它的依赖管理工具(提供迁移功能)。
展开
评论
#青训营 x 字节后端训练营#
Golang的语言中提供了断言的功能。golang中的所有程序都实现了interface{}的接口,这意味着,所有的类型如string,int,int64甚至是自定义的struct类型都就此拥有了interface{}的接口,这种做法和java中的Object类型比较类似。那么在一个数据通过func funcName(interface{})的方式传进来的时候,也就意味着这个参数被自动的转为interface{}的类型。
展开
评论
#青训营 x 字节后端训练营#
一个有经验的开发和新人写的代码,往往最大的差别不是功能的实现,而是在于代码的风格和规范
- 良好的注释习惯,有复杂的地方时间长了自己都会忘
- 不要有魔法数字和魔法字符串,比如在判断条件里判断某个变量等于2,2代表什么?可以用常量来定义
- 重复的逻辑可以抽象成公共的方法,不要到处copy代码,不然每次修改都要改很多地方
- 正确使用IDE的功能进行重构,不要手动去编辑或者全局替换
展开
评论
#青训营 x 字节后端训练营#
Kafka问题总结:

第一,因为有数据复制的问题,所以Kafka运维的时间成本和人力人本都不低
第二,对于负载不均衡的场景,我们需要有一个较为复杂的解决方案进行数据迁移,从而来权衡IO升高的问题
除了以上两个问题以外,Kafka自身还存在其他的问题
比如,Kafka没有自己的缓存,在进行数据读取的时候,只有Page Cache可以用,所以不是很灵活
另外在前面的介绍当中,相信大家也了解到了,Kafka的Controller和Coordinator都是和Broker部署在一起的,Broker因为承载大量IO的原因,会导致Controller和Coordinator的性能下降,如果到一定程度,可能会影响整个集群的可用性
展开
评论
#青训营 x 字节后端训练营#
iota可以做更多事情,而不仅仅是 increment。更精确地说,iota总是用于 increment,但是它可以用于表达式,在常量中的存储结果值。
评论
#青训营 x 字节后端训练营#
解耦是消息队列要解决的最本质问题。
最终一致性不是消息队列的必备特性,但确实可以依靠消息队列来做最终一致性的事情。
消息队列的基本功能之一是进行广播。
典型的使用场景就是秒杀业务用于流量削峰场景。
producer通过压缩减少消息大小,对网络的要求降低。
展开
评论
#青训营 x 字节后端训练营#
Golang适合做什么
(1)、云计算基础设施领域
代表项目:docker、kubernetes、etcd、consul、cloudflare CDN、七牛云存储等。
(2)、基础后端软件
代表项目:tidb、influxdb、cockroachdb等。
(3)、微服务
代表项目:go-kit、micro、monzo bank的typhon、bilibili等。
展开
评论
#青训营 x 字节后端训练营#
缓存 很重要,贯穿整个存储体系,可以解决速度差的问题;
拷贝 很昂贵,需要消耗大量cup的资源,应该尽量减少;
硬件设备多种多样,需要设计抽象统一的接入层,增加适用性,如果只适用单一设备,一当更换设备,就要修改大量的地方,非常消耗时间与资源。
展开
评论
#青训营 x 字节后端训练营# 数据库作为后端软件的底座,性能敏感; 存储系统软件架构,容易受硬件影响; 存储系统代码,既“简单”又复杂“。(简单:代码结构相对简单,对比传统存储系统,进行数据读写操作只需要几行代码就可以实现。复杂:部分存储分支问题较为复杂。 )
评论
#青训营 x 字节后端训练营#
Go1.14版本之后,都推荐使用go mod模式来管理依赖了,也不再强制我们把代码必须写在GOPATH下面的src目录了,你可以在你电脑的任意位置编写go代码,所有GOPATH可以不设置。
评论
下一页
个人成就
文章被阅读 1,399
掘力值 55
收藏集
0
关注标签
0
加入于