
笔记
自驱
ALOHA HEJA HE
展开
-
Go map 如何实现“泛型”?
1 思考 go是没有泛型的语言,他是如何制止假泛型的呢?以上两个图,帮助大家理解原创 2021-10-22 09:19:35 · 307 阅读 · 0 评论 -
Reactor 高性能模式
1 单reactor && 单进程/单线程 代表:RedisReactor 对象通过 select 监控连接事件,收到事件后通过 dispatch 进行分发。 如果是连接建立的事件,则由 Acceptor 处理,Acceptor 通过 accept 接受连接,并创建一个 Handler 来处理连接后续的各种事件。 如果不是连接建立事件,则 Reactor 会调用连接对应的 Handler(第 2 步中创建的 Handler)来进行响应。 Handler 会完成 read-&g.原创 2021-08-12 10:19:08 · 163 阅读 · 0 评论 -
【CS基础】计算机系统知识
从最底层的数据在内存中的表示到流水线指令的构成,到虚拟存储器,到编译系统,到动态加载库,到最后的用户态应用。通过掌握程序是如何映射到系统上,以及程序是如何执行的,你能够更好地理解程序的行为为什么是这样的,以及效率低下是如何造成的。========================================================================次级推荐:http://www.tcpipguide.com/free/index.htm...原创 2021-08-07 21:27:12 · 141 阅读 · 0 评论 -
【CS基础】数据结构和算法
1 基础知识:《算法》https://book.douban.com/subject/10432347/红黑树的讲解非常精彩。或者https://book.douban.com/subject/26979890/《算法图解》。《算法导论》这本书更为专业一些,是美国计算机科学本科生的教科书。2 思维改善:《编程珠玑》他的学生:一个是 Tcl 语言设计者约翰·奥斯德奥特(John Ousterhout),另一个是 Java 语言设计者詹姆斯·高斯林(James...原创 2021-08-07 20:43:50 · 159 阅读 · 0 评论 -
配置中心架构
1 经典架构流程:配置录入后,配置中心发出变更通知,配置变更控制器会来读取最新的配置,然后应用配置。2 细节2.1 为什么需要一个变更通知的组件,而不是让配置中心直接推送?原因是,分布式环境下,服务器太多,推送不太现实,而采用一个 Pub/Sub 的通知服务可以让数据交换经济一些。2.2 为什么不直接 Pub 数据过去,还要订阅方反向拉数据?直接推数据当然可以,但让程序反过来用 API 读配置的好处是,一方面,API 可以校验请求者的权限,另一方面,有时候还是需要调用配置中心的基原创 2021-08-05 07:59:08 · 227 阅读 · 0 评论 -
全栈监控--是什么样的?怎么用?
1 没有监控怎么样? 将无法进行自动化运维和资源调度;全栈系统监控,它就像是我们的眼睛,没有它,我们就不知道系统到底发生了什么,我们会无法管理或是运维整个分布式系统。2 监控系统完成的功能全栈监控; 关联分析; 跨系统调用的串联; 实时报警和自动处置; 系统性能分析;3全栈监控(三层监控)基础层:监控主机和底层资源。比如:CPU、内存、网络吞吐、硬盘 I/O、硬盘使用等。 中间层:就是中间件层的监控。比如:Nginx、Redis、ActiveM...原创 2021-08-01 16:34:56 · 540 阅读 · 0 评论 -
golang for range 不可不知的坑
1 测试代码 demo arr := [2]int{1, 2} res := []*int{} resValue := []int{} for _, v := range arr { // address store res = append(res, &v) // value store resValue = append(resValue, v) } // expect: 1 2 // 取地址时注意 使用的是同一个内存变量,地址都是一样的,因为传值!copy.原创 2021-07-29 16:56:15 · 247 阅读 · 0 评论 -
golang Map Reduce Filter 业务和控制分离
package mainimport ( "fmt" "strings")func Filter(arr []int, fn func(n int) bool) []int { var newArray = []int{} for _, it := range arr { if fn(it) { newArray = append(newArray, it) } } return newArray}func Reduce(arr []string, fn func.原创 2021-07-27 18:32:32 · 353 阅读 · 0 评论 -
Golang 接口 性能 tips
1 切片结构体使用数组指针----数据会发生共享2 深度比较reflect.DeepEqual()3 接口编程3.1 Receiver:成员函数编程方式,参考多态使用https://beijingngcc.blog.youkuaiyun.com/article/details/1191037263.2 用接口把“业务类型” 和“控制逻辑” 给解耦了,可参考方法模板设计模式;4 接口完整性检查...原创 2021-07-26 10:28:25 · 264 阅读 · 0 评论 -
golang--接口和多态示例
//---------- 接 口 --------//type shape interface { area() float64 //计算面积 perimeter() float64 //计算周长}//--------- 长方形 ----------//type rect struct { width, height float64}func (r *rect) area() float64 { //面积 return r.width * r.height.原创 2021-07-26 10:11:25 · 113 阅读 · 0 评论 -
沟通方式-技巧
好的沟通方式有很多种,我主要介绍最常用的三种:尊重、倾听和情绪控制1引起对方的兴趣只有利益,才能引起对方的兴趣。2直达主题,强化观点员工有一个能力就是,你一定要有把模糊的理解变成准确理解的能力,因为如果不这样,你是写不出代码来的。这种过滤掉无用或者非关键信息的能力很重要。确定自己的目标,学会抓重点,知道自己要什么和不要什么,这样你要的才会更鲜明。当一些事情变得简明和鲜明起来时,你才会表现出有力量的观点和话语。而这些被强化过的观点和话语,只需要一句,就会在对方脑子里形成一个小爆点,要么..原创 2021-07-25 16:06:53 · 101 阅读 · 0 评论 -
golang orm mysql order by 语句
指定从数据库检索记录时的排序方式 db.Order("age desc, name").Find(&users)// SELECT * FROM users ORDER BY age desc, name;// 多个 orderdb.Order("age desc").Order("name").Find(&users)// SELECT * FROM users ORDER BY age desc, name;db.Clauses(clause.OrderBy{原创 2021-06-25 15:09:10 · 952 阅读 · 0 评论 -
golang orm 获取数据库指定字段
type User struct { ID uint Name string Age int Gender string // hundreds of fields}type APIUser struct { ID uint Name string}// Select `id`, `name` automatically when queryingdb.Model(&User{}).Limit(10).Find(&AP...原创 2021-06-25 10:00:24 · 920 阅读 · 0 评论 -
系统设计思考
1 主要是向记录下业务扩展对设计的考验。 上层业务发生变化时,底层系统需不需要做迁移变更?重构变更?还是默认支持业务变更? y原创 2021-06-18 09:58:36 · 85 阅读 · 0 评论 -
Postman code 选项不见了?curl如何用?版本8.5.1 (8.5.1)
原创 2021-06-10 22:10:34 · 5710 阅读 · 8 评论 -
Mybatis 嵌套list<String>
<resultMap id="UserMap" type="User"> <result column="id" property="id" jdbcType="BIGINT" /> <collection property="names" resultMap="NamesMap" /> <collection property="roles" resultMap="RolesMap" /></resultMap>&l.原创 2021-06-10 10:15:49 · 647 阅读 · 0 评论 -
golang orm 批量删除正确姿势
Batch DeleteThe specified value has no priamry value, GORM will perform a batch delete, it will delete all matched records db.Where("email LIKE ?", "%jinzhu%").Delete(Email{})// DELETE from emails where email LIKE "%jinzhu%";db.Delete(Email{}, "原创 2021-06-09 14:42:10 · 1055 阅读 · 0 评论 -
golang list struct sort 自定义排序
package mainimport ( "fmt" "sort")type employee struct { name string salary int}type employeeList []employeefunc (e employeeList) Len() int { return len(e)}func (e employeeList) Less(i, j int) bool { return e[i].sala.原创 2021-06-09 11:43:51 · 538 阅读 · 0 评论 -
达克效应一图看懂
原创 2021-06-06 10:16:12 · 1628 阅读 · 0 评论 -
Mysql 时间戳格式化输出
select from_unixtime(1622461737)原创 2021-06-04 14:56:20 · 396 阅读 · 0 评论 -
golang chan close + select 输出结果?
package mainimport ( "fmt" "time")func main() { ch := make(chan int, 1) go func() { ch <- 1 close(ch) }() for { select { case i, ok := <-ch: if ok { time.Sleep(1*time.Second) fmt.Println("-----------") fmt.Println(i.原创 2021-06-03 21:12:42 · 445 阅读 · 0 评论 -
golang panic error 最佳实践
1 panic 的坑package mainimport ( "fmt")func main(){ foo() foo_poniter() foo_chan() foo_interface() foo_map() fmt.Println("exit")}func foo_interface(){ defer func(){ if err := recover(); err != nil { fmt.Println(err) } }() var i in原创 2021-06-03 18:28:02 · 178 阅读 · 0 评论 -
golang 业务中使用协程的姿势
package mainimport "fmt"func sum(s []int) int { sum := 0 for _, v := range s { sum += v } return sum}func sumF(s []int) chan int { future := make(chan int) go func(){ future <- sum(s) }() return future}func main() { s := []int.原创 2021-06-03 15:39:28 · 186 阅读 · 0 评论 -
golang 实现线程安全的计数器-sync.Mutex
package mainimport ( "fmt" "sync" "time")// SafeCounter is safe to use concurrently.type SafeCounter struct { mu sync.Mutex v map[string]int}// Inc increments the counter for the given key.func (c *SafeCounter) Inc(key string) { c.mu.Lock.原创 2021-06-03 14:51:25 · 777 阅读 · 0 评论 -
为什么写作?✏️
写作的方式去释放知识,因为写作是会留下痕迹的。第一次写的见不得人的初稿,现在被点赞上千的回答,文字把你的这些进步可视化,让你的成长能够有迹可循,或者说,你把自己的每一次成长,都用文字固定了下来。而且写一篇文章能够同时对许多人「说话」,其背后是一个原则:能用相同的时间对一群人讲道理,就不要只跟一个人讲道理。...原创 2021-06-03 09:04:19 · 75 阅读 · 0 评论 -
golang orm insert唯一键冲突则忽略
// MCreateXYA .func MCreateStudentAiwareCollection(ctx context.Context, s []*model.StudentAiwareCollection) ([]*model.StudentAiwareCollection, error) { conn, err := GetDbWriterConn(ctx) if err != nil { logs.CtxError(ctx, "func `GetDbWriterCon.原创 2021-06-02 10:34:24 · 1881 阅读 · 0 评论 -
学习方法论——费曼学习法
费曼是 20 世纪著名的理论物理学家,曾获诺贝尔物理学奖,很多人都听说过著名的「费曼学习法」,这也就是他提出的「4 步学习」技巧:1、Pick a topic you want to understand and start studying it.选择一个学习主题,开始阅读关于它的所有资料,做必要的笔记。2、Pretend to teach your topic to a classroom. Make sure you’re able to explain the topic in simple原创 2021-06-02 09:11:51 · 360 阅读 · 0 评论 -
早起还是熬夜?
**其实可以用早起代替熬夜,世界都还在睡,爸妈都还在睡,老板在睡老师在睡,全世界都还在睡,你就可以看着太阳慢慢升起,就会感到光明原来总会来到。**你在乎的人也会慢慢醒来,世界还在慢慢运转,你依旧会有属于自己的时间。SO,早起比熬夜更值得.有人认为:精力槽不一样,心累密度不一样,心灵充盈度不一样,时间感知度不一样。所以:把平时用到工作上的精力,在早起这里截取一段,先用于你的自我实现而已。人不为己天诛地灭,我们的时间和精力应该多元的分配,以保证在不同领域里收获更多的正反馈去彼此互补能量...原创 2021-06-02 08:45:52 · 113 阅读 · 0 评论 -
厉害的人
动手,从「消费」到「创造」。这点很好理解,就是当你意识到自己正在纯粹「消费」时,尝试去转向「创造」。当你看到了一篇优秀的文章,你花费时间去阅读消费了它。但你有没有想过自己也按照这篇文章的结构和手法,去创造一篇文章呢?当你看到了一部很精彩的悬疑电影,你花费注意力去观看消费了它。但你有没有想过去主动拆解作者埋伏笔和设线索的手法,去做一期电影解析呢?当你玩到一款精良的神作游戏,当然不用你去再做一个游戏,但你有没有想过去主动寻找游戏彩蛋,创造新的玩法,写攻略分享出去呢?*一些自由度极高的游戏里这种大神原创 2021-05-31 09:10:48 · 117 阅读 · 0 评论 -
个人思考记录0526
1 思考:问题的本质是什么? 把路径复原,接受普通节点丢失的实时,然后根据关键路径节点,复原完整的一个路径出来。2 思考:一个完整的中台,提供元素生命的周期。生--->死原创 2021-05-26 15:32:29 · 121 阅读 · 0 评论 -
golang mysql 使用唯一键做:存在更新,不存在则插入
1 规则 根据唯一索引,执行upsert2 示例 https://gorm.io/docs/create.html#Upsert-On-Conflictimport "gorm.io/gorm/clause"// Do nothing on conflictdb.Clauses(clause.OnConflict{DoNothing: true}).Create(&user)// Update columns to default value on `id` con...原创 2021-05-25 15:08:28 · 5587 阅读 · 4 评论 -
Go语言切片注意问题
1 如果使用切片做参数传递,调用方还需要感知切片的内容,注意函数内不要使用:=赋值,这相当于var一个变量,即重新声明了一个变量。2 切片内部是指针,封装了大小个容量。因为传值的特性,所以返回值必须用原切片接收,比如append函数。使用=,不使用:=赋值。...原创 2021-05-23 22:39:28 · 220 阅读 · 0 评论 -
【go】构造切片的常用方式
1 使用 make() 函数构造切片如果需要动态地创建一个切片,可以使用 make() 内建函数,格式如下:make( []Type, size, cap )其中 Type 是指切片的元素类型,size 指的是为这个类型分配多少个元素,cap 为预分配的元素数量,这个值设定后不影响 size,只是能提前分配空间,降低多次分配空间造成的性能问题。使用场景:'service 中存储元素,retList := make([]int32, 0, len(rawList)) 从0小标开始a..原创 2021-05-23 10:48:04 · 182 阅读 · 0 评论 -
【go】字典操作和约束--经典3问
1. 问题:字典的键类型不能是那些类型? Go语言字典的键类型不可以是:函数类型,字典类型和切片类型。(键类型之间必须可以实施操作符 == 和 !=)2. 问题:字典键类型最佳实践 本质:哈希和判等操作速度快的类型。即 数值类型和指针类型,通常情况下类型宽度越小越好。3 问题:在值为nil的字典上执行读操作会成功吗? 写呢? write操作会panic,read操作不会报错; 如下:(结果+源码)...原创 2021-05-16 09:03:40 · 154 阅读 · 0 评论 -
【go】 面试题:多线程打印1-10 并要求顺序保证?
1 答案:package mainimport ( "fmt" "sync/atomic" "time")func main() { var count uint32 trigger := func(i uint32, fn func()){ for{ if n := atomic.LoadUint32(&count); n == i { fn() .原创 2021-04-30 10:13:44 · 903 阅读 · 0 评论 -
【视频直播系统】WebRTC 组成和原理
WebRTC处理过程:WebRTC 终端,负责音视频采集、编解码、NAT 穿越、音视频数据传输。Signal 服务器,负责信令处理,如加入房间、离开房间、媒体协商消息的传递等。STUN/TURN 服务器,负责获取 WebRTC 终端在公网的 IP 地址,以及 NAT 穿越失败后的数据中转。...原创 2021-04-24 16:18:26 · 221 阅读 · 0 评论 -
Golang 数组传递为什么是值类型?而不是引用?
1 首先go中所有的参数传递都是值类型!并且有三个特殊的数据结构:slice map Chan,他们是引用类型,可以理解为特殊的值类型。 而对于type struct 自定义类型,如果不想传值可以使用传指针。2 数组的抽象层slice一句话,永远将slice考虑成引用类型。拼接方法func Concat(s1, s2 []int) (r []int) {r = make([]int, len(s1)+len(s2))copy(r, s1)copy(r[len(s1):], s2)return原创 2021-04-14 08:26:43 · 1357 阅读 · 0 评论 -
NSInvalidArgumentException mac Sequel Pro 链接数据库崩溃-解决方案
NSInvalidArgumentException-[_NSInlineData isEqualToString:]: unrecognized selector sent to instance 0x604000033360( 0 CoreFoundation 0x00007fff3454832b __exceptionPreprocess + 171 1 libobjc.A.dylib 0x0000.原创 2021-04-07 09:38:18 · 1027 阅读 · 0 评论 -
入职字节第三天感悟
总的来说:周围的人很优秀,应届生实习生好努(nei)力()。不去想去阿里想来字节的可以帮你们内推,快来体验一把go,体验一把字节范,体验一把和更优秀的人一起做事,体验了就不后悔了。欢迎投简历留言。非诚勿扰。...原创 2021-03-31 22:25:48 · 351 阅读 · 0 评论 -
【GO】go新入门者2021 vscode最全的配置方略
quick start :参考:https://my.oschina.net/iyf/blog/599112原创 2021-03-26 15:10:31 · 664 阅读 · 0 评论