Go sync.Cond
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。sync.Cond 是一个条件锁,也被称为条件变量,常用来一写多读(一个 goroutine 通知多个在等待的 goroutines)的场景。
极客兔兔的博客,致力于分享一些技术教程和有趣的技术实践,包括但不限于 Go 语言/golang, Python, tensorflow, 分布式, 机器学习相关的内容。也可以通过搜索极客小站,jiketutu 找到我。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。sync.Cond 是一个条件锁,也被称为条件变量,常用来一写多读(一个 goroutine 通知多个在等待的 goroutines)的场景。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。本文介绍了编译器在死码消除(Dead code elimination, DCE) 方面的优化,在实际编程中如何利用这一优化提高程序性能。并结合构建标记(build tags) 增加调试模式。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。sync.Once 是 Golang package 中使方法只执行一次的对象实现,作用与 init 函数类似,但也有所不同。本文还解释了 sync.Once 源码中,done 为什么作为第一个字段。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。Go 语言标准库中的 sync.Pool 可以建立对象池,复用已有对象,解决内存分配碎片化的问题,有效减轻垃圾回收的压力(Garbage Collection, GC),在特定场景下可以有效地降低内存占用,提升性能。最后介绍了 sync.Pool 的作用和用法。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。介绍了 Go 内存分配逃逸分析(escape analysis)的几种典型场景,变量所使用的内存什么时候分配到栈上,什么时候分配到堆上。以及如何利用逃逸分析的原理优化代码的性能,例如传值 VS 传指针。
从 2020 年开始,在博客里记录每一年的成长与改变。年初的时候,给自己定了两个目标:工作上升一级,博客浏览量能翻一倍。第一个目标没想到刚过完年,就实现了。第二个目标到年底的时候也基本达成了,月 UV 3w,月 PV 8w。在这里,将过程中的一些经历和感悟记录下来。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。本文介绍了结构体(struct)占用的内存空间如何计算,为什么要字节对齐/内存对齐,Go 语言中的大小和对齐保证(size and alignment guarantees),字节对齐和安全访问(原子访问)的关系,以及如果利用内存对齐的规律减小 struct 内存占用。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。本文介绍了使用空 struct{}/空结构体的优点:不占用内存,且具有良好的语义。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。本文介绍了 goroutine 协程并发控制,避免并发过高,大量消耗系统资源,导致程序崩溃或卡顿,影响性能。主要通过 2 种方式控制,一是使用 channel 的缓冲区,二是使用第三方协程池,例如 tunny 和 ants。同时介绍了使用 ulimit 和虚拟内存(virtual memory)提高资源上限的技巧。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。本文介绍了协程没有正常关闭导致内存泄漏的场景,并介绍了如何借助通道/信道(channel) 优雅地退出协程。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。本文介绍了 Go 语言中实现超时(timeout)退出时常见的错误,即子协程(goroutine)不能正常关闭,导致内存泄漏。常见的实现超时的方式有 time.After 和 context.WithTimeout。
Go 语言/golang 高性能编程(high performance go),Go 语言进阶教程,Go 语言陷阱(gotchas)。这篇文章介绍了 Go 语言中数组(Array) 和切片(Slice)的常见陷阱和规避方式。例如数组作为参数,修改参数,原数组不会发生改变。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。介绍了 2 种方式(编译选项和 UPX 工具) 来减小 Go 代码编译后的二进制文件/可执行文件的体积/大小。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。本文介绍了反射的使用场景,并测试了反射的性能,以及某些场景下的替代方式。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。介绍了读写锁(sync.RWMutex)和互斥锁(sync.Mutex)在不同的读写比情况下的性能开销。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。本文比较了普通的 for 循环和 range 在不同场景下的性能,并解释了背后的原理:range 迭代时返回迭代值的拷贝,如果每个迭代值占用内存过大,性能将显著地低于 for,将元素类型改为指针,能够解决这一问题。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。详细介绍了切片(slice) 常用的几种操作 append、copy 等的性能及原理。并且介绍了切片的陷阱,即什么情况下会产生大量内存被占用,而没法释放的情况。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。详细介绍了构造字符串/拼接字符串(string concatation) 的 5 种方式:+, strings.Builder, bytes.Buffer, []byte 和 fmt.Sprintf,比较了这 5 种方式的性能,并且深入解释了背后的原理。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。详细介绍如何测试/评估 Go 代码的性能,内容包括使用 testing 库进行基准测试(benchmark),性能分析(profiling) 编译优化(compiler optimisations),内存管理(memory management)和垃圾回收(garbage collect)、pprof 等内容。同时也介绍了使用 Go 语言如何写出高性能的程序和应用,包括不限于 Go 语言标准库、第三方库的使用方式和最佳实践。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。详细介绍如何测试/评估 Go 代码的性能,内容包括使用 testing 库进行基准测试(benchmark),性能分析(profiling) 编译优化(compiler optimisations),内存管理(memory management)和垃圾回收(garbage collect)、pprof 等内容。同时也介绍了使用 Go 语言如何写出高性能的程序和应用,包括不限于 Go 语言标准库、第三方库的使用方式和最佳实践。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。详细介绍如何测试/评估 Go 代码的性能,内容包括使用 testing 库进行基准测试(benchmark),性能分析(profiling) 编译优化(compiler optimisations),内存管理(memory management)和垃圾回收(garbage collect)、pprof 等内容。同时也介绍了使用 Go 语言如何写出高性能的程序和应用,包括不限于 Go 语言标准库、第三方库的使用方式和最佳实践。
Go 语言/golang 中函数式接口或接口型函数的实现与价值,什么是接口型函数,为什么不直接将函数作为参数,而是封装为一个接口。Go 语言标准库 net/http 中是如何使用接口型函数的。
一篇文章入门 Python/Python3,Python简明教程,Python入门教程,Python中文教程(Python 3 tutorial)。Python 是一个易于学习、功能强大的编程语言,它拥有高效高级的数据结构和一种简单有效的面向对象编程的编程方法。本文介绍了 Python 的安装、基本类型/内置类型(字符串str,整型,数组,字典 dict 等)、控制流(if, for循环, while 等)、复杂类型(类 class, 方法 method 等),函数式编程,面向对象编程,错误处理(try except finally),pip 引入第三方依赖,以及如何写单元测试(unit test)等。
Go 语言/golang 笔试题,面试题,基础语法与内部实现原理,包括不限于垃圾回收机制(GC)、面向对象、并发编程等。
7天用 Go语言/golang 从零实现 RPC 框架 GeeRPC 教程(7 days implement golang remote procedure call framework from scratch tutorial),动手写 RPC 框架,参照 golang 标准库 net/rpc 的实现,实现了服务端(server)、支持异步和并发的客户端(client)、消息编码与解码(message encoding and decoding)、服务注册(service register)、支持 TCP/Unix/HTTP 等多种传输协议。第七天实现了一个简单的注册中心(registry),具备超时移除、接收心跳(heartbeat)等能力,并且实现了一个简单的服务发现(server discovery)模块。
7天用 Go语言/golang 从零实现 RPC 框架 GeeRPC 教程(7 days implement golang remote procedure call framework from scratch tutorial),动手写 RPC 框架,参照 golang 标准库 net/rpc 的实现,实现了服务端(server)、支持异步和并发的客户端(client)、消息编码与解码(message encoding and decoding)、服务注册(service register)、支持 TCP/Unix/HTTP 等多种传输协议。第六天实现了2种简单的负载均衡(load balance)算法,随机选择和 Round Robin 轮询调度算法。
7天用 Go语言/golang 从零实现 RPC 框架 GeeRPC 教程(7 days implement golang remote procedure call framework from scratch tutorial),动手写 RPC 框架,参照 golang 标准库 net/rpc 的实现,实现了服务端(server)、支持异步和并发的客户端(client)、消息编码与解码(message encoding and decoding)、服务注册(service register)、支持 TCP/Unix/HTTP 等多种传输协议。第五天支持了 HTTP 协议,并且提供了一个简单的 DEBUG 页面。
7天用 Go语言/golang 从零实现 RPC 框架 GeeRPC 教程(7 days implement golang remote procedure call framework from scratch tutorial),动手写 RPC 框架,参照 golang 标准库 net/rpc 的实现,实现了服务端(server)、支持异步和并发的客户端(client)、消息编码与解码(message encoding and decoding)、服务注册(service register)、支持 TCP/Unix/HTTP 等多种传输协议。第四天为RPC框架提供了处理超时的能力(timeout processing)。
7天用 Go语言/golang 从零实现 RPC 框架 GeeRPC 教程(7 days implement golang remote procedure call framework from scratch tutorial),动手写 RPC 框架,参照 golang 标准库 net/rpc 的实现,实现了服务端(server)、支持异步和并发的客户端(client)、消息编码与解码(message encoding and decoding)、服务注册(service register)、支持 TCP/Unix/HTTP 等多种传输协议。第三天实现了服务注册,即将 Go 语言结构体通过反射映射为服务。
7天用 Go语言/golang 从零实现 RPC 框架 GeeRPC 教程(7 days implement golang remote procedure call framework from scratch tutorial),动手写 RPC 框架,参照 golang 标准库 net/rpc 的实现,实现了服务端(server)、支持异步和并发的客户端(client)、消息编码与解码(message encoding and decoding)、服务注册(service register)、支持 TCP/Unix/HTTP 等多种传输协议。第二天实现了一个支持异步(asynchronous)和并发(concurrent)的客户端。
7天用 Go语言/golang 从零实现 RPC 框架 GeeRPC 教程(7 days implement golang remote procedure call framework from scratch tutorial),动手写 RPC 框架,参照 golang 标准库 net/rpc 的实现,实现了服务端(server)、支持异步和并发的客户端(client)、消息编码与解码(message encoding and decoding)、服务注册(service register)、支持 TCP/Unix/HTTP 等多种传输协议。第一天实现了一个简单的服务端和消息的编码与解码。
7天用 Go语言/golang 从零实现 RPC 框架 GeeRPC 教程(7 days implement golang remote procedure call framework from scratch tutorial),动手写 RPC 框架,参照 golang 标准库 net/rpc 的实现,实现了服务端(server)、支持异步和并发的客户端(client)、消息编码与解码(message encoding and decoding)、服务注册(service register)、支持 TCP/Unix/HTTP 等多种传输协议。并在此基础上新增了协议交换(protocol exchange)、注册中心(registry)、服务发现(service discovery)、负载均衡(load balance)、超时处理(timeout processing)等特性。
Go 语言/golang 笔试题,面试题,基础语法与内部实现原理,包括不限于垃圾回收机制(GC)、面向对象、并发编程等。
Go 语言/golang 笔试题,面试题,基础语法与内部实现原理,包括不限于垃圾回收机制(GC)、面向对象、并发编程等。
Go 语言/golang 笔试题,面试题,基础语法与内部实现原理,包括不限于垃圾回收机制(GC)、面向对象、并发编程等。
Go 语言/golang 笔试题,面试题,基础语法与内部原理/实现,包括不限于垃圾回收机制(GC)、面向对象、并发编程等。
WaitGroup 和信道(channel)是常见的 2 种并发控制的方式。但是对于复杂的并发场景,Context 上下文是更优雅的控制方式。Context 提供了 WithCancel(取消)、WithValue(传值)、WithTimeout(超时机制)、WithDeadline(截止时间)等4种并发控制的方式。
简单理解,mmap 是一种将文件/设备映射到内存的方法,实现文件的磁盘地址和进程虚拟地址空间中的一段虚拟地址的一一映射关系。也就是说,可以在某个进程中通过操作这一段映射的内存,实现对文件的读写等操作。修改了这一段内存的内容,文件对应位置的内容也会同步修改,而读取这一段内存的内容,相当于读取文件对应位置的内容。
7天用 Go语言/golang 从零实现 ORM 框架 GeeORM 教程(7 days implement golang object relational mapping framework from scratch tutorial),动手写 ORM 框架,参照 gorm, xorm 的实现。结构体(struct)变更时,数据库表的字段(field)自动迁移(migrate);仅支持字段新增与删除,不支持字段类型变更。
7天用 Go语言/golang 从零实现 ORM 框架 GeeORM 教程(7 days implement golang object relational mapping framework from scratch tutorial),动手写 ORM 框架,参照 gorm, xorm 的实现。介绍数据库中的事务(transaction);封装事务,用户自定义回调函数实现原子操作。
7天用 Go语言/golang 从零实现 ORM 框架 GeeORM 教程(7 days implement golang object relational mapping framework from scratch tutorial),动手写 ORM 框架,参照 gorm, xorm 的实现。通过反射(reflect)获取结构体绑定的钩子(hooks),并调用;支持增删查改(CRUD)前后调用钩子。
7天用 Go语言/golang 从零实现 ORM 框架 GeeORM 教程(7 days implement golang object relational mapping framework from scratch tutorial),动手写 ORM 框架,参照 gorm, xorm 的实现。通过链式(chain)操作,支持查询条件(where, order by, limit 等)的叠加;实现记录的更新(update)、删除(delete)和统计(count)功能。
7天用 Go语言/golang 从零实现 ORM 框架 GeeORM 教程(7 days implement golang object relational mapping framework from scratch tutorial),动手写 ORM 框架,参照 gorm, xorm 的实现。实现新增(insert)记录的功能;使用反射(reflect)将数据库的记录转换为对应的结构体实例,实现查询(select)功能。
7天用 Go语言/golang 从零实现 ORM 框架 GeeORM 教程(7 days implement golang object relational mapping framework from scratch tutorial),动手写 ORM 框架,参照 gorm, xorm 的实现。使用反射(reflect)获取任意 struct 对象的名称和字段,映射为数据中的表;使用 dialect 隔离不同数据库之间的差异,便于扩展;数据库表的创建(create)、删除(drop)。
7天用 Go语言/golang 从零实现 ORM 框架 GeeORM 教程(7 days implement golang object relational mapping framework from scratch tutorial),动手写 ORM 框架,参照 gorm, xorm 的实现。介绍了 SQLite 的基础操作(连接数据库,创建表、增删记录等),使用 Go 标准库 database/sql 操作 SQLite 数据库,包括执行(Exec),查询(Query, QueryRow)。
SQLite 常见的使用命令。包括数据库的安装与连接,表(table)的创建(create)与删除(delete),记录的插入(insert)删除(delete)查询(select)改(update),以及事务(transaction)等操作。
7天用 Go语言/golang 从零实现 ORM 框架 GeeORM 教程(7 days implement golang object relational mapping framework from scratch tutorial),动手写 ORM 框架,参照 gorm, xorm 的实现。功能包括对象和表结构的相互映射,表的创建删除(table),记录的增删查改,事务支持(transaction),数据库迁移(migrate),钩子(hooks)等。
7天用 Go语言/golang 从零实现分布式缓存 GeeCache 教程(7 days implement golang distributed cache from scratch tutorial),动手写分布式缓存,参照 groupcache 的实现。本文介绍了使用 protobuf(protocol buffer) 进行节点间通信,编码报文,提高效率
7天用 Go语言/golang 从零实现分布式缓存 GeeCache 教程(7 days implement golang distributed cache from scratch tutorial),动手写分布式缓存,参照 groupcache 的实现。本文介绍了缓存雪崩、缓存击穿与缓存穿透的概念,使用 singleflight 防止缓存击穿,实现与测试。
7天用 Go语言/golang 从零实现分布式缓存 GeeCache 教程(7 days implement golang distributed cache from scratch tutorial),动手写分布式缓存,参照 groupcache 的实现。本文介绍了为 GeeCache 添加了注册节点与选择节点的功能,并实现了 HTTP 客户端,与远程节点的服务端通信。
7天用 Go语言/golang 从零实现分布式缓存 GeeCache 教程(7 days implement golang distributed cache from scratch tutorial),动手写分布式缓存,参照 groupcache 的实现。本文介绍了一致性哈希(consistent hashing)的原理、实现以及相关测试用例,一致性哈希为什么能避免缓存雪崩,虚拟节点为什么能解决数据倾斜的问题。
gomock 是Go语言/golang 官方提供的mock库,用于在单元测试(unit tests) 中模拟一些依赖复杂,难以直接调用的场景,比如网络请求、数据库依赖和文件I/O等。本文介绍了 gomock 的使用方法,包括模拟参数(Any, Nil, Not, Eq)和返回值(Do, Return, DoAndReturn),以及调用次数(Times) 和顺序(InOrder),如何写可测试可mock的代码。
7天用 Go语言/golang 从零实现分布式缓存 GeeCache 教程(7 days implement golang distributed cache from scratch tutorial),动手写分布式缓存,参照 groupcache 的实现。本文介绍了如何使用标准库 http 搭建 HTTP Server,为 GeeCache 单机节点搭建 HTTP 服务,并进行相关的测试。
7天用 Go语言/golang 从零实现分布式缓存 GeeCache 教程(7 days implement golang distributed cache from scratch tutorial),动手写分布式缓存,参照 groupcache 的实现。本文介绍了 sync.Mutex 互斥锁的使用,并发控制 LRU 缓存。实现 GeeCache 核心数据结构 Group,缓存不存在时,调用回调函数(callback)获取源数据。
7天用 Go语言/golang 从零实现分布式缓存 GeeCache 教程(7 days implement golang distributed cache from scratch tutorial),动手写分布式缓存,参照 groupcache 的实现。本文介绍了常用的三种缓存淘汰(失效)算法:先进先出(FIFO),最少使用(LFU) 和 最近最少使用(LRU),并实现 LRU 算法和相应的测试代码。
本文介绍了Go语言(golang) 如何写单元测试(unit tests),详细介绍了标准库 testing 的使用。包括子测试(subtests),帮助函数(helpers),setup 和 teardown 机制,网络测试(Network, http) 和基准测试(benchmark)
7天用 Go语言/golang 从零实现分布式缓存 GeeCache 教程(7 days implement golang distributed cache from scratch tutorial),动手写分布式缓存,参照 groupcache 的实现。功能包括单机/分布式缓存,LRU (Least Recently Used) 缓存策略,防止缓存击穿、一致性哈希(Consistent Hash),protobuf 通信等。
本文介绍了如何使用Go 语言(golang)、WebAssembly 和 gopherjs 进行前端开发。包括注册函数,并与浏览器 JavaScript 对象交互,操作 DOM 元素,异步编程与回调函数等。最后介绍了一些进阶的 Demo(游戏,渲染等方面)和相关的项目和文档。
本文介绍了 Go 语言(Golang)中远程过程调用(Remote Procedure Call, RPC)的使用方式,使用 Golang 标准库 net/rpc,同时介绍了异步调用,以及如何使用 TLS/SSL/HTTPS 实现服务器端和客户端的单向鉴权、双向鉴权。
protobuf 即 Protocol Buffers,是一种轻便高效的结构化数据存储格式,与语言、平台无关,可扩展可序列化。protobuf 性能和效率大幅度优于 JSON、XML 等其他的结构化数据格式。protobuf 是以二进制方式存储的,占用空间小,但也带来了可读性差的缺点。protobuf 在通信协议和数据存储等领域应用广泛。本文介绍的是 Protocol Buffers 3 (protobuf3, proto3) 的安装和基本语法,以及如何在 Go 语言使用。
7天用 Go语言 从零实现Web框架教程(7 days implement golang web framework from scratch tutorial),用 Go语言/golang 动手写Web框架,从零实现一个Web框架,以 Gin 为原型从零设计一个Web框架。本文介绍了如何为Web框架增加错误处理机制。
记录开发过程中一些工具的常用配置,加速在新环境上的准备效率。工具包括不限于微软 Linux 子系统 Ubuntu (WSL, WSL2), Git, 微软最新发布的命令行神器( Mircosoft Terminal )等。
Rust简明教程,Rust入门教程,Rust 是一门系统编程语言(Systems Programming Language),兼顾安全(Safety)、性能(Speed)和并发(Concurrency)。包括 Rust 和 Cargo 安装、基本类型(字符串str,整形等)、控制流(if, if let, while let, loop, for循环等)、复杂类型(struct, enum等),以及错误处理(panic, Result),Cargo 项目的代码结构,如何测试 Rust 代码等。
7天用 Go语言 从零实现Web框架教程(7 days implement golang web framework from scratch tutorial),用 Go语言/golang 动手写Web框架,从零实现一个Web框架,以 Gin 为原型从零设计一个Web框架。本文介绍了如何为Web框架添加HTML模板(HTML Template)以及静态文件(Serve Static Files)的功能。
极客兔兔的百宝箱,都是些珍藏多年的宝贝。包括编程常用的网站,例如在线正则表达式;前端设计常用的网站,例如色彩搭配等。
7天用 Go语言 从零实现Web框架教程(7 days implement golang web framework from scratch tutorial),用 Go语言/golang 动手写Web框架,从零实现一个Web框架,以 Gin 为原型从零设计一个Web框架。本文介绍了如何为Web框架添加中间件的功能(middlewares)。
7天用 Go语言 从零实现Web框架教程(7 days implement golang web framework from scratch tutorial),用 Go语言/golang 动手写Web框架,从零实现一个Web框架,以 Gin 为原型从零设计一个Web框架。本文介绍了分组控制(Group Control)的意义,以及嵌套分组路由的实现。
7天用 Go语言 从零实现Web框架教程(7 days implement golang web framework from scratch tutorial),用 Go语言/golang 动手写Web框架,从零实现一个Web框架,以 Gin 为原型从零设计一个Web框架。本文介绍了如何用 Trie 前缀树实现路由 Route。支持简单的参数解析和通配符的场景。
极客兔兔(Geektutu)的博客折腾记的第七篇,模仿disqus的 SEE ALSO ON 功能,为静态博客添加“显示本站其他文章评论”的功能,完善内链。
7天用 Go语言 从零实现Web框架教程(7 days implement golang web framework from scratch tutorial),用 Go语言/golang 动手写Web框架,从零实现一个Web框架,以 Gin 为原型从零设计一个Web框架。本文介绍了请求上下文(Context)的设计理念,封装了返回JSON/String/Data/HTML等类型响应的方法。
GO 2 (golang 2) 的变化和新特性,与Go1相比Go2的变化。GO2草案,GO2设计草案。包管理机制(package)、错误处理(Error handling),错误值(Error values)和泛型(Generics)。GO语言的历史。difference between GO 2 and GO 1.
极客兔兔(Geektutu)的博客折腾记的第六篇,不要为了流量忘记了初心。
7天用 Go语言 从零实现Web框架教程(7 days implement golang web framework from scratch tutorial),用 Go语言/golang 动手写Web框架,从零实现一个Web框架,以 Gin 为原型从零设计一个Web框架。本文介绍了Go标准库 net/http 和 http.Handler 接口的使用,拦截所有的 HTTP 请求,交给Gee框架处理。
7天用 Go语言 从零实现Web框架教程(7 days implement golang web framework from scratch tutorial),用 Go语言/golang 动手写Web框架,从零实现一个Web框架,以 Gin 为原型从零设计一个Web框架。
Gin教程,Gin框架教程,Gin快速入门,Gin中文教程,Gin中文文档,Golang Web Framework Gin Tutorial (Go语言Web框架)。Go安装,环境搭建;热加载(hot reload, live reload);路由(Route, Router)和分组路由(Group Router);HTML模板(HTML Template);中间件(Middleware)。
一篇文章入门Go语言,Go语言(Golang)简明教程,Go语言入门教程,Go语言中文教程(golang tutorial)。Go 是一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。本文介绍了 Go 语言的安装、基本类型(字符串str,整型,数组,切片slice,字典 map 等)、控制流(if, for range, for循环, switch 等)、复杂类型(结构体 struct, 接口 interface,方法 method 等),并发编程(sync, chan),错误处理(panic, error),Go Modules 引入第三方依赖,以及如何写测试代码(Unit Test)等。
机器学习(machine learning)/深度学习(deep learning)/面试笔试题(interview questions),吴恩达(Andrew Ng)机器学习课程(machine learning course)课后习题,CMU 考试题和答案。
机器学习(machine learning)/深度学习(deep learning)/面试笔试题(interview questions),吴恩达(Andrew Ng)机器学习课程(machine learning course)课后习题,CMU 考试题和答案。
机器学习(machine learning)/深度学习(deep learning)/面试笔试题(interview questions),吴恩达(Andrew Ng)机器学习课程(machine learning course)课后习题,CMU 考试题和答案。
TensorFlow2文档,TensorFlow2.0文档,TensorFlow2.0 TF2.0 TensorFlow 2 / 2.0 官方文档中文版,循环神经网络(Recurrent Neural Network, RNN) 和 长短期记忆模型(Long Short-Term Memory,LSTM) 分类 IMDB 。
TensorFlow2文档,TensorFlow2.0文档,TensorFlow2.0 TF2.0 TensorFlow 2 / 2.0 官方文档中文版,迁移学习(transfer learning)分类 CIFAR-10 。
TensorFlow2文档,TensorFlow2.0文档,TensorFlow2.0 TF2.0 TensorFlow 2 / 2.0 官方文档中文版,卷积神经网络(Convolutional Neural Networks, CNN)分类 CIFAR-10 。
TensorFlow2文档,TensorFlow2.0文档,TensorFlow2.0 TF2.0 TensorFlow 2 / 2.0 官方文档中文版,保存与加载模型 Save and Restore model。
TensorFlow2文档,TensorFlow2.0文档,TensorFlow2.0 TF2.0 TensorFlow 2 / 2.0 官方文档中文版,过拟合与欠拟合 Explore overfitting and underfitting,示例使用 IMDB 影评数据集。
TensorFlow2文档,TensorFlow2.0文档,TensorFlow2.0 TF2.0 TensorFlow 2 / 2.0 官方文档中文版,Regression 回归,示例使用 Auto MPG 燃油效率数据集。
TensorFlow2文档,TensorFlow2.0文档,TensorFlow2.0 TF2.0 TensorFlow 2 / 2.0 官方文档中文版,结构化数据分类 Classify structured data,示例使用心脏病数据集。
TensorFlow2文档,TensorFlow2.0文档,TensorFlow2.0 TF2.0 TensorFlow 2 / 2.0 官方文档中文版,文本分类 Classify text,示例使用 IMDB 数据集。
TensorFlow2文档,TensorFlow2.0文档,TensorFlow2.0 TF2.0 TensorFlow 2 / 2.0 官方文档中文版,图像分类 Classify images,示例使用 Fashion MNIST 数据集。
TensorFlow2文档,TensorFlow2.0文档,TensorFlow2.0 TF2.0 TensorFlow 2 / 2.0 官方文档中文版,有删改,序言,介绍整个文档的构成。
TensorFlow2教程,TensorFlow2.0教程,TensorFlow 2.0 入门系列文章,第九篇,使用强化学习算法策略梯度(Policy Gradient),实战 OpenAI gym CartPole,代码仅70行。
极客兔兔(Geektutu)的博客折腾记的第五篇,介绍对于站点质量评估和高质量外链的一些思考。
极客兔兔(Geektutu)的博客折腾记的第四篇,介绍原创维权经历,与在 V2EX 发帖的一些总结思考。
TensorFlow2教程,TensorFlow2.0教程,TensorFlow 2.0 入门系列文章,第八篇,强化学习 DQN (Deep Q-Learning) 玩转 OpenAI gym game MountainCar-v0。
TensorFlow2教程,TensorFlow2.0教程,TensorFlow 2.0 入门系列文章,第七篇,Q-Learning 玩转 OpenAI gym game MountainCar-v0。
极客兔兔(Geektutu)的博客折腾记的第三篇,Hexo主题改版与提高人均阅读量的一些思考。
TensorFlow2教程,TensorFlow2.0教程,TensorFlow 入门系列文章,第六篇,监督学习玩转 OpenAI gym game。
极客兔兔(Geektutu)的博客折腾记的第一篇,介绍博主对原创有价值的理解。
极客兔兔(Geektutu)的博客折腾记的第一篇,介绍了博主从Koa+React到Hexo的切换,以及为达到极致性能的一些尝试。
Pandas_Cheat_Sheet_zh_CN.pdf 中文版,Geektutu翻译
TensorFlow2教程,TensorFlow2.0教程,TensorFlow 2.0 入门系列文章,第五篇,mnist手写数字识别(CNN卷积神经网络)。
TensorFlow 入门系列文章,第四篇,mnist手写数字识别(制作h5py训练集)。
TensorFlow 入门系列文章,第三篇,mnist手写数字识别(可视化训练)。
Pandas筛选DataFrame和Series数据的一些实用技巧。
DataFrame和Series是pandas中最常见的2种数据结构。DataFrame可以理解为Excel中的一张表,Series可以理解为一张Excel表的一行或一列数据。
TensorFlow 入门系列文章,第二篇,mnist手写数字识别(模型保存加载)。
TensorFlow 入门系列文章,第一篇,mnist手写数字识别(网络搭建)。
极客兔兔的小站,致力于分享一些技术教程和有趣的技术实践。
极客兔兔的友情链接
极客兔兔的博客,致力于分享一些技术教程和有趣的技术实践,包括但不限于 Go 语言/golang, Python, tensorflow, 分布式, 机器学习相关的内容。也可以通过搜索极客小站,jiketutu 找到我。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。sync.Cond 是一个条件锁,也被称为条件变量,常用来一写多读(一个 goroutine 通知多个在等待的 goroutines)的场景。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。本文介绍了编译器在死码消除(Dead code elimination, DCE) 方面的优化,在实际编程中如何利用这一优化提高程序性能。并结合构建标记(build tags) 增加调试模式。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。sync.Once 是 Golang package 中使方法只执行一次的对象实现,作用与 init 函数类似,但也有所不同。本文还解释了 sync.Once 源码中,done 为什么作为第一个字段。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。Go 语言标准库中的 sync.Pool 可以建立对象池,复用已有对象,解决内存分配碎片化的问题,有效减轻垃圾回收的压力(Garbage Collection, GC),在特定场景下可以有效地降低内存占用,提升性能。最后介绍了 sync.Pool 的作用和用法。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。介绍了 Go 内存分配逃逸分析(escape analysis)的几种典型场景,变量所使用的内存什么时候分配到栈上,什么时候分配到堆上。以及如何利用逃逸分析的原理优化代码的性能,例如传值 VS 传指针。
从 2020 年开始,在博客里记录每一年的成长与改变。年初的时候,给自己定了两个目标:工作上升一级,博客浏览量能翻一倍。第一个目标没想到刚过完年,就实现了。第二个目标到年底的时候也基本达成了,月 UV 3w,月 PV 8w。在这里,将过程中的一些经历和感悟记录下来。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。本文介绍了结构体(struct)占用的内存空间如何计算,为什么要字节对齐/内存对齐,Go 语言中的大小和对齐保证(size and alignment guarantees),字节对齐和安全访问(原子访问)的关系,以及如果利用内存对齐的规律减小 struct 内存占用。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。本文介绍了使用空 struct{}/空结构体的优点:不占用内存,且具有良好的语义。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。本文介绍了 goroutine 协程并发控制,避免并发过高,大量消耗系统资源,导致程序崩溃或卡顿,影响性能。主要通过 2 种方式控制,一是使用 channel 的缓冲区,二是使用第三方协程池,例如 tunny 和 ants。同时介绍了使用 ulimit 和虚拟内存(virtual memory)提高资源上限的技巧。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。本文介绍了协程没有正常关闭导致内存泄漏的场景,并介绍了如何借助通道/信道(channel) 优雅地退出协程。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。本文介绍了 Go 语言中实现超时(timeout)退出时常见的错误,即子协程(goroutine)不能正常关闭,导致内存泄漏。常见的实现超时的方式有 time.After 和 context.WithTimeout。
Go 语言/golang 高性能编程(high performance go),Go 语言进阶教程,Go 语言陷阱(gotchas)。这篇文章介绍了 Go 语言中数组(Array) 和切片(Slice)的常见陷阱和规避方式。例如数组作为参数,修改参数,原数组不会发生改变。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。介绍了 2 种方式(编译选项和 UPX 工具) 来减小 Go 代码编译后的二进制文件/可执行文件的体积/大小。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。本文介绍了反射的使用场景,并测试了反射的性能,以及某些场景下的替代方式。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。介绍了读写锁(sync.RWMutex)和互斥锁(sync.Mutex)在不同的读写比情况下的性能开销。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。本文比较了普通的 for 循环和 range 在不同场景下的性能,并解释了背后的原理:range 迭代时返回迭代值的拷贝,如果每个迭代值占用内存过大,性能将显著地低于 for,将元素类型改为指针,能够解决这一问题。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。详细介绍了切片(slice) 常用的几种操作 append、copy 等的性能及原理。并且介绍了切片的陷阱,即什么情况下会产生大量内存被占用,而没法释放的情况。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。详细介绍了构造字符串/拼接字符串(string concatation) 的 5 种方式:+, strings.Builder, bytes.Buffer, []byte 和 fmt.Sprintf,比较了这 5 种方式的性能,并且深入解释了背后的原理。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。详细介绍如何测试/评估 Go 代码的性能,内容包括使用 testing 库进行基准测试(benchmark),性能分析(profiling) 编译优化(compiler optimisations),内存管理(memory management)和垃圾回收(garbage collect)、pprof 等内容。同时也介绍了使用 Go 语言如何写出高性能的程序和应用,包括不限于 Go 语言标准库、第三方库的使用方式和最佳实践。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。详细介绍如何测试/评估 Go 代码的性能,内容包括使用 testing 库进行基准测试(benchmark),性能分析(profiling) 编译优化(compiler optimisations),内存管理(memory management)和垃圾回收(garbage collect)、pprof 等内容。同时也介绍了使用 Go 语言如何写出高性能的程序和应用,包括不限于 Go 语言标准库、第三方库的使用方式和最佳实践。
Go 语言/golang 高性能编程,Go 语言进阶教程,Go 语言高性能编程(high performance go)。详细介绍如何测试/评估 Go 代码的性能,内容包括使用 testing 库进行基准测试(benchmark),性能分析(profiling) 编译优化(compiler optimisations),内存管理(memory management)和垃圾回收(garbage collect)、pprof 等内容。同时也介绍了使用 Go 语言如何写出高性能的程序和应用,包括不限于 Go 语言标准库、第三方库的使用方式和最佳实践。
Go 语言/golang 中函数式接口或接口型函数的实现与价值,什么是接口型函数,为什么不直接将函数作为参数,而是封装为一个接口。Go 语言标准库 net/http 中是如何使用接口型函数的。
一篇文章入门 Python/Python3,Python简明教程,Python入门教程,Python中文教程(Python 3 tutorial)。Python 是一个易于学习、功能强大的编程语言,它拥有高效高级的数据结构和一种简单有效的面向对象编程的编程方法。本文介绍了 Python 的安装、基本类型/内置类型(字符串str,整型,数组,字典 dict 等)、控制流(if, for循环, while 等)、复杂类型(类 class, 方法 method 等),函数式编程,面向对象编程,错误处理(try except finally),pip 引入第三方依赖,以及如何写单元测试(unit test)等。
Go 语言/golang 笔试题,面试题,基础语法与内部实现原理,包括不限于垃圾回收机制(GC)、面向对象、并发编程等。
7天用 Go语言/golang 从零实现 RPC 框架 GeeRPC 教程(7 days implement golang remote procedure call framework from scratch tutorial),动手写 RPC 框架,参照 golang 标准库 net/rpc 的实现,实现了服务端(server)、支持异步和并发的客户端(client)、消息编码与解码(message encoding and decoding)、服务注册(service register)、支持 TCP/Unix/HTTP 等多种传输协议。第七天实现了一个简单的注册中心(registry),具备超时移除、接收心跳(heartbeat)等能力,并且实现了一个简单的服务发现(server discovery)模块。
7天用 Go语言/golang 从零实现 RPC 框架 GeeRPC 教程(7 days implement golang remote procedure call framework from scratch tutorial),动手写 RPC 框架,参照 golang 标准库 net/rpc 的实现,实现了服务端(server)、支持异步和并发的客户端(client)、消息编码与解码(message encoding and decoding)、服务注册(service register)、支持 TCP/Unix/HTTP 等多种传输协议。第六天实现了2种简单的负载均衡(load balance)算法,随机选择和 Round Robin 轮询调度算法。
7天用 Go语言/golang 从零实现 RPC 框架 GeeRPC 教程(7 days implement golang remote procedure call framework from scratch tutorial),动手写 RPC 框架,参照 golang 标准库 net/rpc 的实现,实现了服务端(server)、支持异步和并发的客户端(client)、消息编码与解码(message encoding and decoding)、服务注册(service register)、支持 TCP/Unix/HTTP 等多种传输协议。第五天支持了 HTTP 协议,并且提供了一个简单的 DEBUG 页面。
7天用 Go语言/golang 从零实现 RPC 框架 GeeRPC 教程(7 days implement golang remote procedure call framework from scratch tutorial),动手写 RPC 框架,参照 golang 标准库 net/rpc 的实现,实现了服务端(server)、支持异步和并发的客户端(client)、消息编码与解码(message encoding and decoding)、服务注册(service register)、支持 TCP/Unix/HTTP 等多种传输协议。第四天为RPC框架提供了处理超时的能力(timeout processing)。
7天用 Go语言/golang 从零实现 RPC 框架 GeeRPC 教程(7 days implement golang remote procedure call framework from scratch tutorial),动手写 RPC 框架,参照 golang 标准库 net/rpc 的实现,实现了服务端(server)、支持异步和并发的客户端(client)、消息编码与解码(message encoding and decoding)、服务注册(service register)、支持 TCP/Unix/HTTP 等多种传输协议。第三天实现了服务注册,即将 Go 语言结构体通过反射映射为服务。
7天用 Go语言/golang 从零实现 RPC 框架 GeeRPC 教程(7 days implement golang remote procedure call framework from scratch tutorial),动手写 RPC 框架,参照 golang 标准库 net/rpc 的实现,实现了服务端(server)、支持异步和并发的客户端(client)、消息编码与解码(message encoding and decoding)、服务注册(service register)、支持 TCP/Unix/HTTP 等多种传输协议。第二天实现了一个支持异步(asynchronous)和并发(concurrent)的客户端。
7天用 Go语言/golang 从零实现 RPC 框架 GeeRPC 教程(7 days implement golang remote procedure call framework from scratch tutorial),动手写 RPC 框架,参照 golang 标准库 net/rpc 的实现,实现了服务端(server)、支持异步和并发的客户端(client)、消息编码与解码(message encoding and decoding)、服务注册(service register)、支持 TCP/Unix/HTTP 等多种传输协议。第一天实现了一个简单的服务端和消息的编码与解码。
7天用 Go语言/golang 从零实现 RPC 框架 GeeRPC 教程(7 days implement golang remote procedure call framework from scratch tutorial),动手写 RPC 框架,参照 golang 标准库 net/rpc 的实现,实现了服务端(server)、支持异步和并发的客户端(client)、消息编码与解码(message encoding and decoding)、服务注册(service register)、支持 TCP/Unix/HTTP 等多种传输协议。并在此基础上新增了协议交换(protocol exchange)、注册中心(registry)、服务发现(service discovery)、负载均衡(load balance)、超时处理(timeout processing)等特性。
Go 语言/golang 笔试题,面试题,基础语法与内部实现原理,包括不限于垃圾回收机制(GC)、面向对象、并发编程等。
Go 语言/golang 笔试题,面试题,基础语法与内部实现原理,包括不限于垃圾回收机制(GC)、面向对象、并发编程等。
Go 语言/golang 笔试题,面试题,基础语法与内部实现原理,包括不限于垃圾回收机制(GC)、面向对象、并发编程等。
Go 语言/golang 笔试题,面试题,基础语法与内部原理/实现,包括不限于垃圾回收机制(GC)、面向对象、并发编程等。
WaitGroup 和信道(channel)是常见的 2 种并发控制的方式。但是对于复杂的并发场景,Context 上下文是更优雅的控制方式。Context 提供了 WithCancel(取消)、WithValue(传值)、WithTimeout(超时机制)、WithDeadline(截止时间)等4种并发控制的方式。
简单理解,mmap 是一种将文件/设备映射到内存的方法,实现文件的磁盘地址和进程虚拟地址空间中的一段虚拟地址的一一映射关系。也就是说,可以在某个进程中通过操作这一段映射的内存,实现对文件的读写等操作。修改了这一段内存的内容,文件对应位置的内容也会同步修改,而读取这一段内存的内容,相当于读取文件对应位置的内容。
7天用 Go语言/golang 从零实现 ORM 框架 GeeORM 教程(7 days implement golang object relational mapping framework from scratch tutorial),动手写 ORM 框架,参照 gorm, xorm 的实现。结构体(struct)变更时,数据库表的字段(field)自动迁移(migrate);仅支持字段新增与删除,不支持字段类型变更。
7天用 Go语言/golang 从零实现 ORM 框架 GeeORM 教程(7 days implement golang object relational mapping framework from scratch tutorial),动手写 ORM 框架,参照 gorm, xorm 的实现。介绍数据库中的事务(transaction);封装事务,用户自定义回调函数实现原子操作。
7天用 Go语言/golang 从零实现 ORM 框架 GeeORM 教程(7 days implement golang object relational mapping framework from scratch tutorial),动手写 ORM 框架,参照 gorm, xorm 的实现。通过反射(reflect)获取结构体绑定的钩子(hooks),并调用;支持增删查改(CRUD)前后调用钩子。
7天用 Go语言/golang 从零实现 ORM 框架 GeeORM 教程(7 days implement golang object relational mapping framework from scratch tutorial),动手写 ORM 框架,参照 gorm, xorm 的实现。通过链式(chain)操作,支持查询条件(where, order by, limit 等)的叠加;实现记录的更新(update)、删除(delete)和统计(count)功能。
7天用 Go语言/golang 从零实现 ORM 框架 GeeORM 教程(7 days implement golang object relational mapping framework from scratch tutorial),动手写 ORM 框架,参照 gorm, xorm 的实现。实现新增(insert)记录的功能;使用反射(reflect)将数据库的记录转换为对应的结构体实例,实现查询(select)功能。
7天用 Go语言/golang 从零实现 ORM 框架 GeeORM 教程(7 days implement golang object relational mapping framework from scratch tutorial),动手写 ORM 框架,参照 gorm, xorm 的实现。使用反射(reflect)获取任意 struct 对象的名称和字段,映射为数据中的表;使用 dialect 隔离不同数据库之间的差异,便于扩展;数据库表的创建(create)、删除(drop)。
7天用 Go语言/golang 从零实现 ORM 框架 GeeORM 教程(7 days implement golang object relational mapping framework from scratch tutorial),动手写 ORM 框架,参照 gorm, xorm 的实现。介绍了 SQLite 的基础操作(连接数据库,创建表、增删记录等),使用 Go 标准库 database/sql 操作 SQLite 数据库,包括执行(Exec),查询(Query, QueryRow)。
SQLite 常见的使用命令。包括数据库的安装与连接,表(table)的创建(create)与删除(delete),记录的插入(insert)删除(delete)查询(select)改(update),以及事务(transaction)等操作。
7天用 Go语言/golang 从零实现 ORM 框架 GeeORM 教程(7 days implement golang object relational mapping framework from scratch tutorial),动手写 ORM 框架,参照 gorm, xorm 的实现。功能包括对象和表结构的相互映射,表的创建删除(table),记录的增删查改,事务支持(transaction),数据库迁移(migrate),钩子(hooks)等。
7天用 Go语言/golang 从零实现分布式缓存 GeeCache 教程(7 days implement golang distributed cache from scratch tutorial),动手写分布式缓存,参照 groupcache 的实现。本文介绍了使用 protobuf(protocol buffer) 进行节点间通信,编码报文,提高效率
7天用 Go语言/golang 从零实现分布式缓存 GeeCache 教程(7 days implement golang distributed cache from scratch tutorial),动手写分布式缓存,参照 groupcache 的实现。本文介绍了缓存雪崩、缓存击穿与缓存穿透的概念,使用 singleflight 防止缓存击穿,实现与测试。
7天用 Go语言/golang 从零实现分布式缓存 GeeCache 教程(7 days implement golang distributed cache from scratch tutorial),动手写分布式缓存,参照 groupcache 的实现。本文介绍了为 GeeCache 添加了注册节点与选择节点的功能,并实现了 HTTP 客户端,与远程节点的服务端通信。
7天用 Go语言/golang 从零实现分布式缓存 GeeCache 教程(7 days implement golang distributed cache from scratch tutorial),动手写分布式缓存,参照 groupcache 的实现。本文介绍了一致性哈希(consistent hashing)的原理、实现以及相关测试用例,一致性哈希为什么能避免缓存雪崩,虚拟节点为什么能解决数据倾斜的问题。
gomock 是Go语言/golang 官方提供的mock库,用于在单元测试(unit tests) 中模拟一些依赖复杂,难以直接调用的场景,比如网络请求、数据库依赖和文件I/O等。本文介绍了 gomock 的使用方法,包括模拟参数(Any, Nil, Not, Eq)和返回值(Do, Return, DoAndReturn),以及调用次数(Times) 和顺序(InOrder),如何写可测试可mock的代码。
7天用 Go语言/golang 从零实现分布式缓存 GeeCache 教程(7 days implement golang distributed cache from scratch tutorial),动手写分布式缓存,参照 groupcache 的实现。本文介绍了如何使用标准库 http 搭建 HTTP Server,为 GeeCache 单机节点搭建 HTTP 服务,并进行相关的测试。
7天用 Go语言/golang 从零实现分布式缓存 GeeCache 教程(7 days implement golang distributed cache from scratch tutorial),动手写分布式缓存,参照 groupcache 的实现。本文介绍了 sync.Mutex 互斥锁的使用,并发控制 LRU 缓存。实现 GeeCache 核心数据结构 Group,缓存不存在时,调用回调函数(callback)获取源数据。
7天用 Go语言/golang 从零实现分布式缓存 GeeCache 教程(7 days implement golang distributed cache from scratch tutorial),动手写分布式缓存,参照 groupcache 的实现。本文介绍了常用的三种缓存淘汰(失效)算法:先进先出(FIFO),最少使用(LFU) 和 最近最少使用(LRU),并实现 LRU 算法和相应的测试代码。
本文介绍了Go语言(golang) 如何写单元测试(unit tests),详细介绍了标准库 testing 的使用。包括子测试(subtests),帮助函数(helpers),setup 和 teardown 机制,网络测试(Network, http) 和基准测试(benchmark)
7天用 Go语言/golang 从零实现分布式缓存 GeeCache 教程(7 days implement golang distributed cache from scratch tutorial),动手写分布式缓存,参照 groupcache 的实现。功能包括单机/分布式缓存,LRU (Least Recently Used) 缓存策略,防止缓存击穿、一致性哈希(Consistent Hash),protobuf 通信等。
本文介绍了如何使用Go 语言(golang)、WebAssembly 和 gopherjs 进行前端开发。包括注册函数,并与浏览器 JavaScript 对象交互,操作 DOM 元素,异步编程与回调函数等。最后介绍了一些进阶的 Demo(游戏,渲染等方面)和相关的项目和文档。
本文介绍了 Go 语言(Golang)中远程过程调用(Remote Procedure Call, RPC)的使用方式,使用 Golang 标准库 net/rpc,同时介绍了异步调用,以及如何使用 TLS/SSL/HTTPS 实现服务器端和客户端的单向鉴权、双向鉴权。
protobuf 即 Protocol Buffers,是一种轻便高效的结构化数据存储格式,与语言、平台无关,可扩展可序列化。protobuf 性能和效率大幅度优于 JSON、XML 等其他的结构化数据格式。protobuf 是以二进制方式存储的,占用空间小,但也带来了可读性差的缺点。protobuf 在通信协议和数据存储等领域应用广泛。本文介绍的是 Protocol Buffers 3 (protobuf3, proto3) 的安装和基本语法,以及如何在 Go 语言使用。
7天用 Go语言 从零实现Web框架教程(7 days implement golang web framework from scratch tutorial),用 Go语言/golang 动手写Web框架,从零实现一个Web框架,以 Gin 为原型从零设计一个Web框架。本文介绍了如何为Web框架增加错误处理机制。
记录开发过程中一些工具的常用配置,加速在新环境上的准备效率。工具包括不限于微软 Linux 子系统 Ubuntu (WSL, WSL2), Git, 微软最新发布的命令行神器( Mircosoft Terminal )等。
Rust简明教程,Rust入门教程,Rust 是一门系统编程语言(Systems Programming Language),兼顾安全(Safety)、性能(Speed)和并发(Concurrency)。包括 Rust 和 Cargo 安装、基本类型(字符串str,整形等)、控制流(if, if let, while let, loop, for循环等)、复杂类型(struct, enum等),以及错误处理(panic, Result),Cargo 项目的代码结构,如何测试 Rust 代码等。
7天用 Go语言 从零实现Web框架教程(7 days implement golang web framework from scratch tutorial),用 Go语言/golang 动手写Web框架,从零实现一个Web框架,以 Gin 为原型从零设计一个Web框架。本文介绍了如何为Web框架添加HTML模板(HTML Template)以及静态文件(Serve Static Files)的功能。
极客兔兔的百宝箱,都是些珍藏多年的宝贝。包括编程常用的网站,例如在线正则表达式;前端设计常用的网站,例如色彩搭配等。
7天用 Go语言 从零实现Web框架教程(7 days implement golang web framework from scratch tutorial),用 Go语言/golang 动手写Web框架,从零实现一个Web框架,以 Gin 为原型从零设计一个Web框架。本文介绍了如何为Web框架添加中间件的功能(middlewares)。
7天用 Go语言 从零实现Web框架教程(7 days implement golang web framework from scratch tutorial),用 Go语言/golang 动手写Web框架,从零实现一个Web框架,以 Gin 为原型从零设计一个Web框架。本文介绍了分组控制(Group Control)的意义,以及嵌套分组路由的实现。
7天用 Go语言 从零实现Web框架教程(7 days implement golang web framework from scratch tutorial),用 Go语言/golang 动手写Web框架,从零实现一个Web框架,以 Gin 为原型从零设计一个Web框架。本文介绍了如何用 Trie 前缀树实现路由 Route。支持简单的参数解析和通配符的场景。
极客兔兔(Geektutu)的博客折腾记的第七篇,模仿disqus的 SEE ALSO ON 功能,为静态博客添加“显示本站其他文章评论”的功能,完善内链。
7天用 Go语言 从零实现Web框架教程(7 days implement golang web framework from scratch tutorial),用 Go语言/golang 动手写Web框架,从零实现一个Web框架,以 Gin 为原型从零设计一个Web框架。本文介绍了请求上下文(Context)的设计理念,封装了返回JSON/String/Data/HTML等类型响应的方法。
GO 2 (golang 2) 的变化和新特性,与Go1相比Go2的变化。GO2草案,GO2设计草案。包管理机制(package)、错误处理(Error handling),错误值(Error values)和泛型(Generics)。GO语言的历史。difference between GO 2 and GO 1.
极客兔兔(Geektutu)的博客折腾记的第六篇,不要为了流量忘记了初心。
7天用 Go语言 从零实现Web框架教程(7 days implement golang web framework from scratch tutorial),用 Go语言/golang 动手写Web框架,从零实现一个Web框架,以 Gin 为原型从零设计一个Web框架。本文介绍了Go标准库 net/http 和 http.Handler 接口的使用,拦截所有的 HTTP 请求,交给Gee框架处理。
7天用 Go语言 从零实现Web框架教程(7 days implement golang web framework from scratch tutorial),用 Go语言/golang 动手写Web框架,从零实现一个Web框架,以 Gin 为原型从零设计一个Web框架。
Gin教程,Gin框架教程,Gin快速入门,Gin中文教程,Gin中文文档,Golang Web Framework Gin Tutorial (Go语言Web框架)。Go安装,环境搭建;热加载(hot reload, live reload);路由(Route, Router)和分组路由(Group Router);HTML模板(HTML Template);中间件(Middleware)。
一篇文章入门Go语言,Go语言(Golang)简明教程,Go语言入门教程,Go语言中文教程(golang tutorial)。Go 是一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。本文介绍了 Go 语言的安装、基本类型(字符串str,整型,数组,切片slice,字典 map 等)、控制流(if, for range, for循环, switch 等)、复杂类型(结构体 struct, 接口 interface,方法 method 等),并发编程(sync, chan),错误处理(panic, error),Go Modules 引入第三方依赖,以及如何写测试代码(Unit Test)等。
机器学习(machine learning)/深度学习(deep learning)/面试笔试题(interview questions),吴恩达(Andrew Ng)机器学习课程(machine learning course)课后习题,CMU 考试题和答案。
机器学习(machine learning)/深度学习(deep learning)/面试笔试题(interview questions),吴恩达(Andrew Ng)机器学习课程(machine learning course)课后习题,CMU 考试题和答案。
机器学习(machine learning)/深度学习(deep learning)/面试笔试题(interview questions),吴恩达(Andrew Ng)机器学习课程(machine learning course)课后习题,CMU 考试题和答案。
TensorFlow2文档,TensorFlow2.0文档,TensorFlow2.0 TF2.0 TensorFlow 2 / 2.0 官方文档中文版,循环神经网络(Recurrent Neural Network, RNN) 和 长短期记忆模型(Long Short-Term Memory,LSTM) 分类 IMDB 。
TensorFlow2文档,TensorFlow2.0文档,TensorFlow2.0 TF2.0 TensorFlow 2 / 2.0 官方文档中文版,迁移学习(transfer learning)分类 CIFAR-10 。
TensorFlow2文档,TensorFlow2.0文档,TensorFlow2.0 TF2.0 TensorFlow 2 / 2.0 官方文档中文版,卷积神经网络(Convolutional Neural Networks, CNN)分类 CIFAR-10 。
TensorFlow2文档,TensorFlow2.0文档,TensorFlow2.0 TF2.0 TensorFlow 2 / 2.0 官方文档中文版,保存与加载模型 Save and Restore model。
TensorFlow2文档,TensorFlow2.0文档,TensorFlow2.0 TF2.0 TensorFlow 2 / 2.0 官方文档中文版,过拟合与欠拟合 Explore overfitting and underfitting,示例使用 IMDB 影评数据集。
TensorFlow2文档,TensorFlow2.0文档,TensorFlow2.0 TF2.0 TensorFlow 2 / 2.0 官方文档中文版,Regression 回归,示例使用 Auto MPG 燃油效率数据集。
TensorFlow2文档,TensorFlow2.0文档,TensorFlow2.0 TF2.0 TensorFlow 2 / 2.0 官方文档中文版,结构化数据分类 Classify structured data,示例使用心脏病数据集。
TensorFlow2文档,TensorFlow2.0文档,TensorFlow2.0 TF2.0 TensorFlow 2 / 2.0 官方文档中文版,文本分类 Classify text,示例使用 IMDB 数据集。
TensorFlow2文档,TensorFlow2.0文档,TensorFlow2.0 TF2.0 TensorFlow 2 / 2.0 官方文档中文版,图像分类 Classify images,示例使用 Fashion MNIST 数据集。
TensorFlow2文档,TensorFlow2.0文档,TensorFlow2.0 TF2.0 TensorFlow 2 / 2.0 官方文档中文版,有删改,序言,介绍整个文档的构成。
TensorFlow2教程,TensorFlow2.0教程,TensorFlow 2.0 入门系列文章,第九篇,使用强化学习算法策略梯度(Policy Gradient),实战 OpenAI gym CartPole,代码仅70行。
极客兔兔(Geektutu)的博客折腾记的第五篇,介绍对于站点质量评估和高质量外链的一些思考。
极客兔兔(Geektutu)的博客折腾记的第四篇,介绍原创维权经历,与在 V2EX 发帖的一些总结思考。
TensorFlow2教程,TensorFlow2.0教程,TensorFlow 2.0 入门系列文章,第八篇,强化学习 DQN (Deep Q-Learning) 玩转 OpenAI gym game MountainCar-v0。
TensorFlow2教程,TensorFlow2.0教程,TensorFlow 2.0 入门系列文章,第七篇,Q-Learning 玩转 OpenAI gym game MountainCar-v0。
极客兔兔(Geektutu)的博客折腾记的第三篇,Hexo主题改版与提高人均阅读量的一些思考。
TensorFlow2教程,TensorFlow2.0教程,TensorFlow 入门系列文章,第六篇,监督学习玩转 OpenAI gym game。
极客兔兔(Geektutu)的博客折腾记的第一篇,介绍博主对原创有价值的理解。
极客兔兔(Geektutu)的博客折腾记的第一篇,介绍了博主从Koa+React到Hexo的切换,以及为达到极致性能的一些尝试。
Pandas_Cheat_Sheet_zh_CN.pdf 中文版,Geektutu翻译
TensorFlow2教程,TensorFlow2.0教程,TensorFlow 2.0 入门系列文章,第五篇,mnist手写数字识别(CNN卷积神经网络)。
TensorFlow 入门系列文章,第四篇,mnist手写数字识别(制作h5py训练集)。
TensorFlow 入门系列文章,第三篇,mnist手写数字识别(可视化训练)。
Pandas筛选DataFrame和Series数据的一些实用技巧。
DataFrame和Series是pandas中最常见的2种数据结构。DataFrame可以理解为Excel中的一张表,Series可以理解为一张Excel表的一行或一列数据。
TensorFlow 入门系列文章,第二篇,mnist手写数字识别(模型保存加载)。
TensorFlow 入门系列文章,第一篇,mnist手写数字识别(网络搭建)。
极客兔兔的小站,致力于分享一些技术教程和有趣的技术实践。
极客兔兔的友情链接