GORM 核心功能的实现原理 GORM 是 Golang 在数据库操作上经常使用到的 ORM 库,相较于同类其他 ORM 库,该库支持的功能更丰富,更新也较为活跃。 本文是基于 GORM V2(版本号: v1.23.5),对核心功能的源码进行探究。 初始化官方推荐的连接数据库方法是 gorm.Open,该方法接收至少两个参数。 123func Open(dialector Dialector, opts ...Option) 2022-04-09 Golang #后端 #底层 #源码
认识 WebAssembly 起源WebAssembly 起源于 Mozilla 员工的一个业余项目。2010年,在 Mozilla 从事 Android Firefox 开发的 Alon Zakai,为了把他以前开发的游戏引擎移植到浏览器上运行,利用业余时间开发了一款名叫 Emscripten 的编译器,可以把 C++ 代码通过 LLVM IR 编译成 JavaScript 代码。 到了 2011 年底,Emscripten 2022-02-24 Other #后端 #前端
认识 LLVM 简介LLVM是一套提供编译器基础设施的开源项目,是用 C++ 编写,包含一系列模块化的编译器组件和工具链,用来开发编译器前端和后端。它是为了任意一种编程语言而写成的程序,利用虚拟技术创造出编译时期、链接时期、执行时期以及“闲置时期”的优化。 LLVM的命名源自于底层虚拟机(Low Level Virtual Machine)的首字母缩写,导致不了解它的人以为它是类似于 JVM(Java Virtu 2022-01-26 Other #后端 #前端
Crawlab Lite 正式发布,更轻量的爬虫管理平台 前言Crawlab 是一款基于 Golang 的分布式爬虫管理平台,产品发布已经一年有余,经过开发团队的不断打磨,即将迭代到 v0.5 版本。在这期间我们为 Crawlab 加入了大量社区用户共同期望的功能,使产品更加专业。但与此同时我们也注意到,部分用户并不是分布式爬虫用户,他们更多只是在单机情况下使用 Crawlab。其次目前 Crawlab 逐步加入了丰富的功能,也使整个产品逐渐巨化,大部分 2020-07-15 Golang #爬虫 #后端 #开源
源码解读 Golang 中 sync.Map 的实现原理 简介Go 的内建 map 是不支持并发写操作的,原因是 map 写操作不是并发安全的,当你尝试多个 Goroutine 操作同一个 map,会产生报错:fatal error: concurrent map writes。 因此官方另外引入了 sync.Map 来满足并发编程中的应用。 sync.Map 的实现原理可概括为: 通过 read 和 dirty 两个字段将读写分离,读的数据存在只读字 2020-03-23 Golang #后端 #底层 #源码
经典面试题:青蛙跳台阶 「剑指Offer」里的经典题目,近期群里聊到这题,特来复习一波。 题目一只青蛙一次可以跳上 1 级台阶,也可以跳上 2 级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 思路首先跳到 n 级台阶可以分解为两种情况: 之前跳到 n-1 级台阶,然后再跳 1 级到达 n 级; 之前跳到 n-2 级台阶,然后再跳 2 级到达 n 级; 因此 n 级跳法数量,等于这两种情况之和。即 F(n 2020-03-09 Python #后端 #刷题
探究 Go 语言 defer 语句的三种机制 Golang 的 1.13 版本 与 1.14 版本对 defer 进行了两次优化,使得 defer 的性能开销在大部分场景下都得到大幅降低,其中到底经历了什么原理? 这是因为这两个版本对 defer 各加入了一项新的机制,使得 defer 语句在编译时,编译器会根据不同版本与情况,对每个 defer 选择不同的机制,以更轻量的方式运行调用。 堆上分配在 Golang 1.13 之前的版本中,所有 2020-03-01 Golang #后端 #底层
一道快速考察 Python 基础的面试题 这是前一阵子群友发在群里的一道面试题,利用 Python 字典的特性,可以巧妙地使用精简代码达成完美解。 题目将 data 转换成 new_data 这种形式,写出转换过程。 1234567891011121314151617181920212223data = { 'a_b_h':1, 'a_b_i':2, 'a_ 2020-02-08 Python #刷题 #经验
编写自己的 GitHub Action,体验自动化部署 本文将介绍如何使用 GitHub Actions 部署前端静态页面,以及如何自己创建一个 Docker 容器 Action。 简介 ActionsGitHub Actions 是 GitHub 官方推出的持续集成/部署模块服务(CI/CD),和 jenkins、Travis CI 是同一类产品定位。 但 Actions 的最大优势,就是它是与 GitHub 高度整合的,只需 2020-01-20 Other #开源
Python 2 与 3 共存了 11 年,新年就要和它道别 在 Python 3.9 都已经进入 dev 版本的 2020 年,Python 2 终于要和我们告别了。 2 and 3Python 2 第一个版本发布于 2000 年 10 月 16 日,到今年正好是第 20 个年头。而 Python 3 发布于 2008 年 12 月 3 日,但由于 3.0 版本在底层进行了大量重构(主要是 Unicode 与 C API 的改动),无法完整兼容 Pyt 2019-12-31 Python #杂文