青训营 – HikariLan's Blog https://blog.hikarilan.life 贺兰星辰的个人博客 Fri, 21 Jul 2023 14:19:57 +0000 zh-Hans hourly 1 https://wordpress.org/?v=6.9.1 一定不能错过的一场学习之旅 —— 第五届字节跳动青训营参赛有感 https://blog.hikarilan.life/thinking/989/%e4%b8%80%e5%ae%9a%e4%b8%8d%e8%83%bd%e9%94%99%e8%bf%87%e7%9a%84%e4%b8%80%e5%9c%ba%e5%ad%a6%e4%b9%a0%e4%b9%8b%e6%97%85-%e7%ac%ac%e4%ba%94%e5%b1%8a%e5%ad%97%e8%8a%82%e8%b7%b3%e5%8a%a8/ https://blog.hikarilan.life/thinking/989/%e4%b8%80%e5%ae%9a%e4%b8%8d%e8%83%bd%e9%94%99%e8%bf%87%e7%9a%84%e4%b8%80%e5%9c%ba%e5%ad%a6%e4%b9%a0%e4%b9%8b%e6%97%85-%e7%ac%ac%e4%ba%94%e5%b1%8a%e5%ad%97%e8%8a%82%e8%b7%b3%e5%8a%a8/#comments Tue, 28 Mar 2023 13:51:44 +0000 https://my.minecraft.kim/?p=989 在 2022 年十二月中旬至 2023 年二月下旬期间,我参加了由字节跳动的稀土掘金社区举办的第五届字节跳动青训营(后端,基础班),在完成了青训营所有学习任务的前提下,与大项目队友一起完成了简易版抖音后端的大项目作业并在大项目答辩中得到了第五名(一等奖码如磐石奖)的好成绩;最终,我获得了本届青训营优秀营员的荣誉和证书。本文简要讲述了本人参加青训营的大致历程和感想。 晒晒证书先: 也是一个偶然的机会,听说了字节跳动青训营这种形式,当听说了第五届字节跳动青训营后端部分正好是学习 Go 语言的相关知识,而我正巧又打算学习 Go,于是欣然报名。 青训营是线上授课+大作业答辩的形式,前一个月先进行线上学习,并公布大作业题目,后一个月根据学习到的内容和大作业题目进行开发,最后由导师对入围决赛的大项目进行答辩。 本届字节跳动青训营分基础班和进阶班两个班种,

来源

]]>
https://blog.hikarilan.life/thinking/989/%e4%b8%80%e5%ae%9a%e4%b8%8d%e8%83%bd%e9%94%99%e8%bf%87%e7%9a%84%e4%b8%80%e5%9c%ba%e5%ad%a6%e4%b9%a0%e4%b9%8b%e6%97%85-%e7%ac%ac%e4%ba%94%e5%b1%8a%e5%ad%97%e8%8a%82%e8%b7%b3%e5%8a%a8/feed/ 5
极简版抖音项目的实现(2) —— Mock 和单元测试 | 青训营笔记 https://blog.hikarilan.life/tech/957/%e6%9e%81%e7%ae%80%e7%89%88%e6%8a%96%e9%9f%b3%e9%a1%b9%e7%9b%ae%e7%9a%84%e5%ae%9e%e7%8e%b02-mock-%e5%92%8c%e5%8d%95%e5%85%83%e6%b5%8b%e8%af%95-%e9%9d%92%e8%ae%ad%e8%90%a5/ https://blog.hikarilan.life/tech/957/%e6%9e%81%e7%ae%80%e7%89%88%e6%8a%96%e9%9f%b3%e9%a1%b9%e7%9b%ae%e7%9a%84%e5%ae%9e%e7%8e%b02-mock-%e5%92%8c%e5%8d%95%e5%85%83%e6%b5%8b%e8%af%95-%e9%9d%92%e8%ae%ad%e8%90%a5/#respond Sun, 12 Feb 2023 14:54:50 +0000 https://my.minecraft.kim/?p=957 这是我参与「第五届青训营」伴学笔记创作活动的第 15 天 完结撒花!小小庆祝一下。 本文上接 极简版抖音项目的实现 | 青训营笔记,介绍了该项目视频流服务的单元测试代码。 Go 原生支持单元测试(Unit Test),为了对我们的视频流服务进行单元测试,创建 文件。 首先,在 函数中初始化数据,这包括我们一些预先设定好的来自上游服务的测试数据和我们预期的结果数据: 上述代码创建了 50 个预设的视频数据,如果服务正常工作,那么应当返回 值。 接下来,在 函数中编写正式的开发流程: 上述代码首先初始化了一些请求数据,然后对 和数据库进行了 Mock(Mock 可以理解为,将原有的函数和方法实现替换成仅在测试可用的特殊实现),以期其返回我们的期望数据,最后,对这些数据进行比对。 该文章部分内容来自于以下课程或网页:

来源

]]>
https://blog.hikarilan.life/tech/957/%e6%9e%81%e7%ae%80%e7%89%88%e6%8a%96%e9%9f%b3%e9%a1%b9%e7%9b%ae%e7%9a%84%e5%ae%9e%e7%8e%b02-mock-%e5%92%8c%e5%8d%95%e5%85%83%e6%b5%8b%e8%af%95-%e9%9d%92%e8%ae%ad%e8%90%a5/feed/ 0
极简版抖音项目的实现 | 青训营笔记 https://blog.hikarilan.life/tech/938/%e6%9e%81%e7%ae%80%e7%89%88%e6%8a%96%e9%9f%b3%e9%a1%b9%e7%9b%ae%e7%9a%84%e5%ae%9e%e7%8e%b0-%e9%9d%92%e8%ae%ad%e8%90%a5%e7%ac%94%e8%ae%b0/ https://blog.hikarilan.life/tech/938/%e6%9e%81%e7%ae%80%e7%89%88%e6%8a%96%e9%9f%b3%e9%a1%b9%e7%9b%ae%e7%9a%84%e5%ae%9e%e7%8e%b0-%e9%9d%92%e8%ae%ad%e8%90%a5%e7%ac%94%e8%ae%b0/#respond Mon, 06 Feb 2023 12:49:10 +0000 https://my.minecraft.kim/?p=938 这是我参与「第五届青训营」伴学笔记创作活动的第 11 天 本文大致介绍了本人及本人所在小组为第五届字节跳动青训营后端专场大项目需求 —— 「实现一个极简版抖音」的部分实现细节。 本届后端青训营大项目要求实现一个极简版抖音的后端服务,该后端服务通过 HTTP 协议向已被设计好的前端 App 传递数据,并通过 URL Query 获得请求参数。 该服务大致有如下类别的接口: TokTik 项目基于 Go 开发,采用微服务架构,由网关(Gateway)服务接受 HTTP 请求,将其转换为 RPC 调用后传入路由对应的其他服务。服务内部统一使用 RPC 调用进行数据交换。 TokTik 使用 protobuf 作为 IDL 语言,使用 gorm 作为 ORM 框架,使用 Kitex 作为 RPC 框架,使用 Hertz 作为 HTTP 框架,

来源

]]>
https://blog.hikarilan.life/tech/938/%e6%9e%81%e7%ae%80%e7%89%88%e6%8a%96%e9%9f%b3%e9%a1%b9%e7%9b%ae%e7%9a%84%e5%ae%9e%e7%8e%b0-%e9%9d%92%e8%ae%ad%e8%90%a5%e7%ac%94%e8%ae%b0/feed/ 0
微服务中的服务治理 | 青训营笔记 https://blog.hikarilan.life/tech/932/%e5%be%ae%e6%9c%8d%e5%8a%a1%e4%b8%ad%e7%9a%84%e6%9c%8d%e5%8a%a1%e6%b2%bb%e7%90%86-%e9%9d%92%e8%ae%ad%e8%90%a5%e7%ac%94%e8%ae%b0/ https://blog.hikarilan.life/tech/932/%e5%be%ae%e6%9c%8d%e5%8a%a1%e4%b8%ad%e7%9a%84%e6%9c%8d%e5%8a%a1%e6%b2%bb%e7%90%86-%e9%9d%92%e8%ae%ad%e8%90%a5%e7%ac%94%e8%ae%b0/#respond Sat, 04 Feb 2023 04:13:18 +0000 https://my.minecraft.kim/?p=932 这是我参与「第五届青训营」伴学笔记创作活动的第 9 天 本文介绍了微服务架构中的服务治理方式,包括服务注册与发现,服务发布和稳定治理。 对于微服务,有以下基本概念: 微服务架构的出现和应用大幅度的提升了大型程序的开发效率,降低了程序故障率,但其复杂的架构设计也引来了治理、运维难度飙升,观测难度大,安全性较低等劣势。 我们通过引入许多的服务治理模式来解决这些问题。 服务注册与发现是为了解决微服务中服务间通信地址难以确定的问题。 想象一个服务 A 试图通过网络请求调用服务 B 的某个接口,他应该如何确定服务 B 的网络地址? 如果我们通过硬编码的方式在服务 A 指定网络地址,灵活性低暂且不说,对于具有多个实例的服务 B,一个网络地址只能指定到同一个服务实例中,这会导致服务 A 的所有实例全部向服务 B 的单一实例进行网络请求,

来源

]]>
https://blog.hikarilan.life/tech/932/%e5%be%ae%e6%9c%8d%e5%8a%a1%e4%b8%ad%e7%9a%84%e6%9c%8d%e5%8a%a1%e6%b2%bb%e7%90%86-%e9%9d%92%e8%ae%ad%e8%90%a5%e7%ac%94%e8%ae%b0/feed/ 0
分布式系统中的数据库事务 | 青训营笔记 https://blog.hikarilan.life/tech/930/%e5%88%86%e5%b8%83%e5%bc%8f%e7%b3%bb%e7%bb%9f%e4%b8%ad%e7%9a%84%e6%95%b0%e6%8d%ae%e5%ba%93%e4%ba%8b%e5%8a%a1-%e9%9d%92%e8%ae%ad%e8%90%a5%e7%ac%94%e8%ae%b0/ https://blog.hikarilan.life/tech/930/%e5%88%86%e5%b8%83%e5%bc%8f%e7%b3%bb%e7%bb%9f%e4%b8%ad%e7%9a%84%e6%95%b0%e6%8d%ae%e5%ba%93%e4%ba%8b%e5%8a%a1-%e9%9d%92%e8%ae%ad%e8%90%a5%e7%ac%94%e8%ae%b0/#respond Thu, 02 Feb 2023 05:20:25 +0000 https://my.minecraft.kim/?p=930 这是我参与「第五届青训营」伴学笔记创作活动的第 8 天 本文简述了在分布式系统中使用的分布式数据库事务方案。 分布式系统是计算机程序的集合,这些程序利用跨多个独立计算节点的计算资源来实现共同的目标。可以分为分布式计算,分布式存储,分布式数据库等。 在分布式系统中,由于不同节点可能维护各自的数据库,但这些数据库有需要保持同步,这就可能引发同步问题。 为了解决这些问题,我们引入分布式事务的解决方案。 在分布式事务中,有多种处理方案可以在不同程度上解决我们的问题: 二阶段提交(Two-phase Commit)是为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种演算法。 在二阶段提交算法中,我们需要引入三个假设: 在以上三个假设中,二阶段提交算法以如下方式工作: 此时,可能出现以下异常情况:

来源

]]>
https://blog.hikarilan.life/tech/930/%e5%88%86%e5%b8%83%e5%bc%8f%e7%b3%bb%e7%bb%9f%e4%b8%ad%e7%9a%84%e6%95%b0%e6%8d%ae%e5%ba%93%e4%ba%8b%e5%8a%a1-%e9%9d%92%e8%ae%ad%e8%90%a5%e7%ac%94%e8%ae%b0/feed/ 0
浅谈软件工程架构及其演进 | 青训营笔记 https://blog.hikarilan.life/tech/926/%e6%b5%85%e8%b0%88%e8%bd%af%e4%bb%b6%e5%b7%a5%e7%a8%8b%e6%9e%b6%e6%9e%84%e5%8f%8a%e5%85%b6%e6%bc%94%e8%bf%9b-%e9%9d%92%e8%ae%ad%e8%90%a5%e7%ac%94%e8%ae%b0/ https://blog.hikarilan.life/tech/926/%e6%b5%85%e8%b0%88%e8%bd%af%e4%bb%b6%e5%b7%a5%e7%a8%8b%e6%9e%b6%e6%9e%84%e5%8f%8a%e5%85%b6%e6%bc%94%e8%bf%9b-%e9%9d%92%e8%ae%ad%e8%90%a5%e7%ac%94%e8%ae%b0/#respond Wed, 01 Feb 2023 11:10:38 +0000 https://my.minecraft.kim/?p=926 这是我参与「第五届青训营」伴学笔记创作活动的第 7 天 本文介绍了软件工程架构及其演进史,并包含了企业级后端架构刨析等内容。 简单来讲,软件架构就像建筑的地基一样,为指导软件实现的方法起到重要作用。只有地基坚实了,大厦才能盖的高。 我们以蛋糕店为例,假设有人想要开一家蛋糕店,那么作为蛋糕店的老板,一开始他可能会这样布置他的蛋糕店… 所谓单机架构,就是把所有功能都实现在一个进程里,并部署在一台机器上。对于蛋糕店来讲,就是一家蛋糕店里只有一个人工作,且这个人要负责所有制作,售卖蛋糕的工作。 这种架构的好处是,开发和部署起来十分简单,对于小型应用来说足矣。但对于大型应用来说,他的并发性不足,存在性能瓶颈(如著名的 The C10K problem),并且无法保证高可用性。对于蛋糕店来讲,就是这个人一个人不能服务成千上万的人,且这个人必须24小时不停的干,

来源

]]>
https://blog.hikarilan.life/tech/926/%e6%b5%85%e8%b0%88%e8%bd%af%e4%bb%b6%e5%b7%a5%e7%a8%8b%e6%9e%b6%e6%9e%84%e5%8f%8a%e5%85%b6%e6%bc%94%e8%bf%9b-%e9%9d%92%e8%ae%ad%e8%90%a5%e7%ac%94%e8%ae%b0/feed/ 0
从规则引擎开发的角度切入编译器原理 | 青训营笔记 https://blog.hikarilan.life/tech/923/%e4%bb%8e%e8%a7%84%e5%88%99%e5%bc%95%e6%93%8e%e5%bc%80%e5%8f%91%e7%9a%84%e8%a7%92%e5%ba%a6%e5%88%87%e5%85%a5%e7%bc%96%e8%af%91%e5%99%a8%e5%8e%9f%e7%90%86-%e9%9d%92%e8%ae%ad%e8%90%a5%e7%ac%94/ https://blog.hikarilan.life/tech/923/%e4%bb%8e%e8%a7%84%e5%88%99%e5%bc%95%e6%93%8e%e5%bc%80%e5%8f%91%e7%9a%84%e8%a7%92%e5%ba%a6%e5%88%87%e5%85%a5%e7%bc%96%e8%af%91%e5%99%a8%e5%8e%9f%e7%90%86-%e9%9d%92%e8%ae%ad%e8%90%a5%e7%ac%94/#respond Tue, 31 Jan 2023 08:49:20 +0000 https://my.minecraft.kim/?p=923 这是我参与「第五届青训营」伴学笔记创作活动的第 6 天 本文试图从规则引擎开发的角度切入编译器原理相关内容,介绍编译原理的基本概念。 思考如下例子:某商城开设一个活动,用户购买相应产品获得可以商城积分(对应某种业务逻辑),听起来用代码实现会很简单。但是,如果积分获取规则不断更改(对应业务逻辑的更改),那么程序员就需要不断地修改代码以实现业务逻辑,这无疑增加了无意义的工作。 规则引擎则是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。这样,业务人员便可以通过规则引擎直接修改规则决策,而避免通过开发人员修改,增加工作效率,同时解耦合了工作。 规则引擎由三部分组成:

来源

]]>
https://blog.hikarilan.life/tech/923/%e4%bb%8e%e8%a7%84%e5%88%99%e5%bc%95%e6%93%8e%e5%bc%80%e5%8f%91%e7%9a%84%e8%a7%92%e5%ba%a6%e5%88%87%e5%85%a5%e7%bc%96%e8%af%91%e5%99%a8%e5%8e%9f%e7%90%86-%e9%9d%92%e8%ae%ad%e8%90%a5%e7%ac%94/feed/ 0
一文学会 Go 的三个主流开发框架| 青训营笔记 https://blog.hikarilan.life/tech/909/%e4%b8%80%e6%96%87%e5%ad%a6%e4%bc%9a-go-%e7%9a%84%e4%b8%89%e4%b8%aa%e4%b8%bb%e6%b5%81%e5%bc%80%e5%8f%91%e6%a1%86%e6%9e%b6%ef%bd%9c-%e9%9d%92%e8%ae%ad%e8%90%a5%e7%ac%94%e8%ae%b0/ https://blog.hikarilan.life/tech/909/%e4%b8%80%e6%96%87%e5%ad%a6%e4%bc%9a-go-%e7%9a%84%e4%b8%89%e4%b8%aa%e4%b8%bb%e6%b5%81%e5%bc%80%e5%8f%91%e6%a1%86%e6%9e%b6%ef%bd%9c-%e9%9d%92%e8%ae%ad%e8%90%a5%e7%ac%94%e8%ae%b0/#comments Fri, 20 Jan 2023 09:15:56 +0000 https://my.minecraft.kim/?p=909 这是我参与「第五届青训营」伴学笔记创作活动的第 5 天 本文介绍了三个 Go 主流开发框架 GORM,Kitex,Hertz 的基本使用方法,覆盖了 ORM,RPC,HTTP 三个领域。帮助读者快速入门 Go 工程开发。 GORM 是一款面向 Go 开发的,对开发人员友好的,“梦幻般的” ORM 库。(The fantastic ORM library for Golang aims to be developer friendly.) 在学习 Gorm 前,你应该先了解什么是 ORM。ORM 全称Object–relational mapping,即对象关系映射,是一种用于在关系数据库和面向对象的编程语言堆之间转换数据的编程技术(Wikipedia,并非只有面向对象语言才支持 ORM,事实上,Go 就不是一个面向对象语言)。通过 ORM 技术,

来源

]]>
https://blog.hikarilan.life/tech/909/%e4%b8%80%e6%96%87%e5%ad%a6%e4%bc%9a-go-%e7%9a%84%e4%b8%89%e4%b8%aa%e4%b8%bb%e6%b5%81%e5%bc%80%e5%8f%91%e6%a1%86%e6%9e%b6%ef%bd%9c-%e9%9d%92%e8%ae%ad%e8%90%a5%e7%ac%94%e8%ae%b0/feed/ 1
从 Java 的角度看待 Go 的内存管理| 青训营笔记 https://blog.hikarilan.life/tech/903/%e4%bb%8e-java-%e7%9a%84%e8%a7%92%e5%ba%a6%e7%9c%8b%e5%be%85-go-%e7%9a%84%e5%86%85%e5%ad%98%e7%ae%a1%e7%90%86%ef%bd%9c-%e9%9d%92%e8%ae%ad%e8%90%a5%e7%ac%94%e8%ae%b0/ https://blog.hikarilan.life/tech/903/%e4%bb%8e-java-%e7%9a%84%e8%a7%92%e5%ba%a6%e7%9c%8b%e5%be%85-go-%e7%9a%84%e5%86%85%e5%ad%98%e7%ae%a1%e7%90%86%ef%bd%9c-%e9%9d%92%e8%ae%ad%e8%90%a5%e7%ac%94%e8%ae%b0/#respond Thu, 19 Jan 2023 06:05:39 +0000 https://my.minecraft.kim/?p=903 这是我参与「第五届青训营」伴学笔记创作活动的第 4 天 本系列文章试图从一名 Java 开发者(有时也会穿插其他语言)的角度窥探 Go 语言,并以注释的方式提及 Go 与 Java 的一些区别,方便 Java 开发者迅速入门 Go 语言。 这是该系列的第四章,将介绍 Go 的内存管理机制。 所谓自动内存管理,其实就是指垃圾回收,在 Go 中,程序在运行时根据需求动态分配的内存(即动态内存)会被纳入自动内存管理的范畴。 通过自动内存管理,我们可以避免手动释放内存,将注意力专注在业务逻辑,同时还可以避免发生内存安全问题(诸如 内存重复释放问题 或是 内存释放后使用问题 )。 一个垃圾回收周期大致有三个任务:为新对象分配空间,找到存活对象,回收死亡对象的内存空间。 要想详细了解垃圾回收,就必须先了解其相关概念: 要想评价一个 GC 算法,

来源

]]>
https://blog.hikarilan.life/tech/903/%e4%bb%8e-java-%e7%9a%84%e8%a7%92%e5%ba%a6%e7%9c%8b%e5%be%85-go-%e7%9a%84%e5%86%85%e5%ad%98%e7%ae%a1%e7%90%86%ef%bd%9c-%e9%9d%92%e8%ae%ad%e8%90%a5%e7%ac%94%e8%ae%b0/feed/ 0
从 Java 的角度看待 Go 的编码规范和性能调优| 青训营笔记 https://blog.hikarilan.life/tech/898/%e4%bb%8e-java-%e7%9a%84%e8%a7%92%e5%ba%a6%e7%9c%8b%e5%be%85-go-%e7%9a%84%e7%bc%96%e7%a0%81%e8%a7%84%e8%8c%83%e5%92%8c%e6%80%a7%e8%83%bd%e8%b0%83%e4%bc%98%ef%bd%9c-%e9%9d%92%e8%ae%ad%e8%90%a5%e7%ac%94/ https://blog.hikarilan.life/tech/898/%e4%bb%8e-java-%e7%9a%84%e8%a7%92%e5%ba%a6%e7%9c%8b%e5%be%85-go-%e7%9a%84%e7%bc%96%e7%a0%81%e8%a7%84%e8%8c%83%e5%92%8c%e6%80%a7%e8%83%bd%e8%b0%83%e4%bc%98%ef%bd%9c-%e9%9d%92%e8%ae%ad%e8%90%a5%e7%ac%94/#respond Tue, 17 Jan 2023 07:28:54 +0000 https://my.minecraft.kim/?p=898 这是我参与「第五届青训营」伴学笔记创作活动的第 3 天 本系列文章试图从一名 Java 开发者(有时也会穿插其他语言)的角度窥探 Go 语言,并以注释的方式提及 Go 与 Java 的一些区别,方便 Java 开发者迅速入门 Go 语言。 这是该系列的第三章,将从 Go 的编码规范和性能调优带领读者走近 Go 语言。 可以使用 gofmt 和 goimports 工具自动格式化代码。对于 GoLand,可以在 Settings – Tools – Actions on Save 中打开 Reformat code 和 Optimize imports(不出意外的话,它们应当是默认启用的)。也可通过 Ctrl+Alt+L 快捷键格式化代码(其实所有 Jetbrains 的 IDE 都支持使用这个快捷键格式化代码)。 一个好的代码注释应当做到以下几点:

来源

]]>
https://blog.hikarilan.life/tech/898/%e4%bb%8e-java-%e7%9a%84%e8%a7%92%e5%ba%a6%e7%9c%8b%e5%be%85-go-%e7%9a%84%e7%bc%96%e7%a0%81%e8%a7%84%e8%8c%83%e5%92%8c%e6%80%a7%e8%83%bd%e8%b0%83%e4%bc%98%ef%bd%9c-%e9%9d%92%e8%ae%ad%e8%90%a5%e7%ac%94/feed/ 0