Blog
Technical thoughts and practice notes
深入分析OpenClaw的爆火
深度解析OpenClaw为什么能在短时间内爆火,从泛流量、垂直流量、大厂跟进时间线等多个维度分析,以及我们能从中学到什么。
逆向初识
博客:cbb777.fun
软件安全之堆栈攻击
博客:cbb777.fun
认识区块链(四):区块链的底层实现之密码学
区块链起源于密码学,可以说区块链的核心,以及安全性、不可篡改性的来源很大一部分都是基于密码学实现的。
认识区块链(六):区块链的底层实现之共识机制与P2P
在认识区块链系列的前几篇中,我们已经介绍了区块链的作用、发展、解决了什么问题、以及底层实现之密码学、分布式等等,这篇博客主要围绕的是区块链的另外两个底层技术--**共识机制与P2P。**
认识区块链(八):安装fabric
curl -sSLO -o install-fabric.sh https://github.com/hyperledger/fabric/raw/main/scripts/install-fabric.sh
认识区块链(五):区块链的底层实现之分布式
在认识区块链系列的前几篇中,我们已经介绍了区块链的作用、发展、解决了什么问题、以及底层实现之密码学等等,这篇博客主要围绕的是区块链的另一个底层技术--**分布式。**
认识区块链(二):区块链解决了什么问题
区块链的本质是**分布式账本技术** ,也可以看做是**分布式数据库技术** ,从性能上来说,它并不优秀,但是它新壶装老酒,将**密码学、分布式、共识机制、P2P协议等技术** 结合在一起,使得区块链具备**去中心化、安全、可追溯** 等等,同时,它也向全人类提供了一个新的共识方法。
认识区块链(三):区块链的前世今生
说到区块链,就不得不提到比特币,甚至有很多人将区块链和比特币等同起来,这是因为区块链的出现就是为了构建出比特币,二者相辅相成,很难脱离比特币去讲区块链,也很难脱离区块链去讲比特币。很多人分不清比特币与区块链,以为比特币就是区块链,区块链就是比特币,其实比特币只是第一个成功的区块链应用。
认识区块链(七):公链、联盟链、私链
在认识区块链系列的前几篇中,我们已经介绍了区块链的作用、发展、解决了什么问题、以及底层实现之密码学、分布式、共识机制、P2P等等,这篇博客主要围绕的是区块链的分类:公有链、私有链、联盟链等等**。**
认识区块链(一):区块链是什么?
《认识区块链》是一个系列,因为笔者的毕设与区块链相关,所以打算把所学所想通过博客的形式记录下来。这个专栏会从区块链是什么,拓展到区块链核心技术实现,区块链应用,以及区块链相关开发,最后会带大家一步步完成一个DAPP的开发。
计算机专业大学四年应该怎么过?听听过来人的建议
韶华易逝,劝君惜取少年时。我并不是说每个人都需要去卷考研、卷工作,只要你有热爱的事情,并为之努力奋斗,没有在浪费自己的生命,那么你就可以很骄傲的挺起胸膛了。
计算机专业 读研 OR 就业? 希望你能早点看到这篇文章
考研和工作是完全不同的两个方向,考察的侧重点和需要准备的内容可以说是天差地别,如果可以的话,我希望本文的读者能尽早选好自己的路,并且在选择好方向之后不断前进。
深入了解异地多活
故障不可避免,可能来自硬件故障、软件问题,甚至是不可抗力的因素。因此,如何快速而有效地恢复系统运行,成为衡量可用性的关键因素。在这个背景下,异地多活应运而生,为解决系统故障时的快速恢复提供了高效的解决方案。
服务端开发常见工具,你都会吗?
在浏览器的开发者工具(F12)中,有一些服务端常用的工具和内容。
有了HTTP协议为什么还需要RPC协议?
当我们需要实现进程间通信时,即在两个不同的四元组之间进行通信时,通常会使用`socket`编程来实现,选择`TCP`或`UDP`作为传输协议。在实际应用中,为了确保数据稳定性,常常选择使用`TCP`。
最规范的git工作流(翻译)
记得我正式在第一家公司实习的时候(2022.09),当时的团队就出现过git开发流程的问题,包括但不限于:分支如何管理、合并分支用`rebase/merge`,如何进行`release`版本的管理等等。这些问题在接下来的文章中都会迎刃而解。
最新《Go学习路线图》及就业准备
下面是**Go学习路线思维导图** ,我将整个`roadmap`分成了七个部分,由浅入深分别是:**语法、日常开发、web、**
时间处理
在处理时间和日期数据时,格式的细微差异可以导致解析错误,如你所遇到的问题。这里,我们看到两种不同的时间表示方式:
我们为什么需要努力?
"去年花里逢君别,今日花开已一年",时间总是在指尖悄悄划走,2023年笔者基本没有在学校进行停留也没怎么休息过,从找实习到入职,到实习过程中,再到秋招,整个人一直处于一个多线程忙碌的状态。最近打算回学校了,终于可以抽出时间写一点自己最近的思考和想法了。
想为K8S做贡献?先把CLA签署了
七月毕业之后正式入职了深圳的某家大厂,最近慢慢的能cover住手里的工作(主要是前端部分)之后,就想着开始做自己一直想做但是没有做的事情,为现在最大的云原生技术K8S做贡献。
开发中常用的数据库命令,你都会吗
**查看一张表的数据量**
工业界的几种发布模式
* 蓝绿发布的本质上是通过系统冗余来解决上线风险的问题,通常生产环境中配置两套完全一样的环境,一组是active的生产环境配置(绿色),一组是inactivate的准备环境配置(蓝色),两套系统都是功能完善的,并且正在运行的系统,只是系统版本和对外服务情况不同
如何在微服务间通信?
在微服务架构中,不同的服务是托管在不同的代码库,运行在不同的进程甚至是机器上的,这会比单体架构中服务之间进行通信付出更大的成本。
实习生必看!!!如何完美度过实习期
相信每位同学,迈出校门,通过实习进入职场都有自己的需要,大部分人应该是基于以下几点:
实习求职总结
前言:其实我是比较喜欢用文字、博客来记录自己的生活,记录自己的一些想法和感悟的,但是之前我一直觉得博客嘛,就应该发一些技术相关的东西,看了很多同龄人的博客我才发现,其实博客可以发的东西有很多很多,不一定要仅限于技术,于是就有了这篇文章。
大厂程序员讲解git开发流程和回退
因为项目都是多人开发,所以一般都是采用的`fork`模式进行开发,也就是程序员们先把修改提交到自己`fork`的仓库,然后在这个仓库的某个分支上进行项目的仓库分支的`merge request`,一般是向`develop`分支发起合并。
多种常见设计模式的学习--Go实现版本
模式:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,也就是说,**设计模式是在特定环境下人们解决某类重复出现问题的一套成功或者有效的解决方案**
在校生必看! 2023:前进 工作 恋爱
下面这篇博客是笔者的2023年总结,记录一下这一年的具体经历,审视自己身上的不足,记录一些感悟还有一些我的碎碎念,**最后附有面经,想要看面经的同学可以直接跳到最后** 。
告高中学弟学妹书
**1.好学生为什么是好学生,通用点是什么**
后端程序员快速入门前端02:HTML文本与列表
HTML只能帮助我们构建静态页面,在一个静态页面中,一般只有以下几种元素
后端程序员快速入门前端01:了解HTML
之前在学校的时候就有一点前端基础,但也只有一点点,勉强能写HTML的程度。之前的前端水平只能在页面加个按钮,改个描述之类的,而且通常还要gpt帮忙。
前端路由实现方式
博客:cbb777.fun
前端html入门
HTML是文本标记语言,经过浏览器内核的渲染就变成了我们能够看到的页面
前端debug学习
找元素,右边会显示style样式
分布式事务常见方案汇总
在[一文带你理解什么是分布式事务 - 掘金](<https://juejin.cn/post/7340865231379628041>)中我们介绍了什么是分布式事务,这篇文章会深入介绍市面上常见的分布式事务实现方案,并探讨它们的优缺点,以及可能会产生的问题。
关于MySQL主键的一些思考
之前有在面试中被问到过几次`MySQL`主键相关问题,以及偶尔听说了`MySQL`官方并不推荐雪花算法生成主键,引起了我的好奇,故有以下文章。
入职一家新公司如何配置Git及远程开发?
首先在我们的开发机上生成对应的`ssh-key`公钥和私钥
14.【云原生-K8S】:资源与服务质量
我们可以精确到容器级别为其设置资源数量,资源`resource`由两部分组成,分别是请求`requests`和限制`limits`。**当我们设置**`**limits**`**时,**`**kubelet**`**和容器运行时以及底层的**`**cgroup**`**会保证容器使用的资源不超过设置
15.告别手搓Yaml文件,Jetbrains全家桶都可用的插件
在使用K8S的过程中,我们不可避免的会需要接触到Yaml文件,如果一直用`vim/vi`来编写、修改Yaml文件也未尝不可,就是失去了对齐校验和自动补全,免不了造成效率低下的问题。这里推荐几个工具帮助我们快速编写、验证Yaml文件的可用性。
16.【云原生-K8S】 往容器中注入数据
在实际应用中,很多程序都需要拥有K8S的相关信息,比如运行在哪个Pod、哪个Cluster、哪个Namespace下,而为了避免容器或容器内部的应用程序和K8S过度耦合,引入了`Downward API`这种方式,将Pod和容器字段暴露给运行中的容器。
17.想为K8S做贡献?先把CLA签署了
七月毕业之后正式入职了深圳的某家大厂,最近慢慢的能cover住手里的工作(主要是前端部分)之后,就想着开始做自己一直想做但是没有做的事情,为现在最大的云原生技术K8S做贡献。
13.【云原生-K8S】 污点与容忍度
污点的作用就像一个过滤器,能够使节点排斥一些Pod,它是一个作用于Node的键值对;熟悉K8S的同学可能立马能想到有一个相反作用的属性叫做节点亲和性`Affinity`,作用于Pod,使得Pod能够被吸引到一类特定的节点。
12.【云原生-K8S】:临时 容器与Pod调试
对于临时容器Ephemeral Containers最准确的定义是:临时容器是一种特殊的用于`debug`的容器,可以**动态的** 添加到Pod中,通常用来对难以复现的问题进行排查,而不对业务有帮助。因为pod由规约控制,一旦pod创建就无法将容器新加到pod中,如果需要对pod的状态进行检查,那
11.源码级别Pod详解(七) Init 容器
`Init Containers`是一个或者一组专用的容器,在业务容器`app containers`之前启动运行,`app containers`是我们认为的业务容器,即专门干活的容器。我们可以在`pod spec`中使用一个数组声明`init Containers`。
10.源码级别Pod详解(六):Pod、Image与Container
在[前文](<https://juejin.cn/column/7291519245334347836>)中向大家介绍了Pod的一些高级特性,如底层实现、生命周期、探针、宽限期等等,本文将向大家介绍Pod、Image与Container之间的联系与作用,并会通过两则实战带领大家走近镜像与多容器Pod
09.源码级别Pod详解(五): Pod Termination
我们在前面几篇博客中介绍了`Pod`生命周期各类组件与相关字段,比如`Phase`与`Condition`、`Probe`与`lifecycle`等等,这些组件的作用都是描述或调控`Pod`生命周期。这篇文章会向大家介绍`Pod`终止相关内容。
08.源码级别Pod详解(四): Pod readiness与Container Probe
在前文我们[05.源码级别Pod详解(二):Pod生命周期](<https://juejin.cn/post/7295565904406511657>)说过,因为`Pod`通常不直接被部署,而是通过更高级别的`Workload`所进行调度和管控,于是K8S提供了一种检测`Pod`是否成功部署的机制,
07.一分钟安装K8S学习环境
你需要一台`Linux`操作系统的虚拟机,服务器也可以,不过这个需要花点钱,新人优惠的话阿里云服务器第一年不到一百元,还是比较良心的。
你真的理解分布式理论吗?
随着时代的发展,传统的单台机器可能无法完成我们期待的任务,所以发展出了分布式系统这么一个概念,目的是为了提高系统的性能、可伸缩性、可用性、容错性。其本质就是**堆机子** ,通过增加机器数量,完成之前单台机器难以完成的任务。
你写的代码真的符合RESTful风格的设计吗?
之前一直认为接口按照增删改查的功能,使用`GET POST PUT DELETE`这几个`HTTP`方法,并且URL符合对应对象,比如书籍的增删改查用`book`,用户的增删改查用`user`就算是`RESTUful`风格了,这和实际上的`RESTful`要求的相去甚远。
06.源码级别Pod详解(三):Container 生命周期
K8S除了会全生命周期跟踪`Pod`的状况,还会跟踪更底层的`Container`生命周期,`Container`的生命周期主要是由三部分组成、调控的,分别是`Container States`、`postStart&&preStop`以及`Container RestartPolicy`。
以拉取镜像失败问题排查为例,谈谈我是如何排查底层问题的
放空脑子的时候在告警群里看到了一个拉取镜像失败的报错,`Failed|Error: ImagePullBackOff`,当时看到就觉得非常奇怪,这个报错意味着镜像拉取失败,通常原因是
05.源码级别Pod详解(二):Pod生命周期
`pod`遵循一个既定的生命周期,在起始的时候,它会是`Pending`状态,然后如果有一个主容器运行成功,那么就进入`Running`状态,之后取决于有没有容器失败,如果有失败的话则进入`Failed`状态,否则则是`Succeeded`状态。
04.源码级别Pod详解(一):对象字段及源码实现
K8S使用的`API`风格为**声明式API** ,声明式API更加容易理解与维护,因为它们隐藏了底层的实现细节、我们通过`yaml`文件这种方式去创建、声明对应的对象,在K8S中的每一个对象都对应着一个`yaml`文件,即通过文件完成一次声明,而不是向命令式`API`一样通过一条条命令进行`API
03.你不得不知道的K8S核心概念
在K8S中,`Cluster`是一个核心概念,它代表了**整个K8S管理的节点、命名空间、各类对象和资源的集合** ,在K8S中,一个`Cluster`至少包含一个工作结点和一个主节点,这些结点是运行在K8S系统的服务器或者虚拟机,目标是提供一个同一的视图,使得K8S集群成为一个单一的大型计算资源。
02.K8S架构详解
上图包含了K8S中的所有组件,我们把K8S集群分为两个部分,即`Master`节点(主结点)和`Node`节点(工作结点),其中主节点运行着控制平面组件`Control Plane Components`,工作结点运行着必要的`Kubelet`和`Kube-proxy`组件。
01.你为什么需要学习K8S
在"云原生"、"应用上云"火热的这几年,相信大家或多或少都听说过K8S这个可以称得上是**容器编排领域事实** 的存在。
什么是正排索引与倒排索引?
正排索引和倒排索引是信息检索场景中常见的概念,比如数据库、搜索引擎等技术中,大部分关系型数据库都是使用正排索引存储记录,一些文档型数据库,比如ES使用的则是倒排数据库。
五分钟上手Gin框架核心内容
因为毕设是用`Go`写的,涉及到`Web`的内容用的是`Gin`框架,所以顺便归纳总结了一下`Gin`的一些核心使用方法,下面是Gin框架开发会用到的核心内容。
事件溯源是什么?如何基于事件溯源进行开发
之前偶尔接触到了事件溯源,但没有刨根究底的学习,最近抽时间看了一下有关这方面的内容。
不背八股!!!面试官:有了HTTP为什么还需要RPC?
在前文[为什么说TCP是基于字节流的?](<https://juejin.cn/post/7304531203771449379>)中我们介绍了为什么`TCP`是基于字节流的,其中最本质的原因就是因为`TCP`是流式传输数据的,并且`TCP`的数据格式没有消息边界。
不背八股!!!面试官:为什么你手机的IP会是192.168
在构建局域网时,`IP`地址的管理是至关重要的。由于`IPv4`地址是非常有限的,**私有IP地址** 的使用成为解决IP地址不足问题的有效手段。
不背八股!!!为什么说TCP是基于字节流的?
我们都知道`TCP`的一大特点就**是基于字节流** ,从字面意思上来说,`TCP`在传输报文的时候并不是一个个报文传输的,而是一个个**字节** 传输的。
不太熟悉Git? 不妨看看这篇文章
Git是目前世界上最先进的分布式版本控制系统,由C语言进行开发
不公平!我们组的好绩效只给嫡系
初入职场,身份将从学生转变成正式的职场人,因为对身份转换的迷茫,所以最近阅读了不少关于职场的博客和书籍。
一步步带你了解锁底层
`Go`语言中的`sync`包主要提供的对并发操作的支持,标志性的工具有`cond`(条件变量) `once` (原子性) 还有 锁,本文会主要向大家介绍`Go`语言中锁的特性和实现。
一步步带你了解waitgroup底层
回顾一下Go的并发控制,其实大概有以下几种控制手段
一文搞懂到底什么是云原生
近年来微服务与云原生、CI/CD这些概念被炒得很火,多数应用都会说自己利用了“云”资源,是一个云原生架构的应用。那么云原生到底是什么呢,或者说使用了什么样的技术的应用才能被称之为云原生应用呢?
一文带你理解什么是分布式事务
之前在朋友圈看到有大佬推荐《微服务系统架构》一书,陆陆续续花了数个月阅读完成,是一本非常值得后端开发人员阅读的书籍,里面从分布式开始,一直讲到微服务架构,分布式一致性,分布式事务,虚拟化,事件溯源开发等等,有兴趣的朋友可以买来看看。
vue学习笔记
在你给出的代码中,`:key="item.id"`是为Vue的列表渲染指令`v-for`提供一个唯一的键(key)。这个键用于追踪每个节点的身份,从而进行高效的列表更新。
queryset和list区别
在编程中,特别是在使用Django框架时,`queryset`和`list`这两个概念经常被提到,它们各自有不同的特点和用途:
limit与分页键
查询数据库偏移量的数据,或者查询分页的数据是很常见的需求,本文会介绍一些常用的查询方法。
js笔记
* 返回第一个满足条件的元素
go.sum是什么
博客:cbb777.fun
django
**Django的开发服务器具有自动重载功能,当你的Python代码有修改,服务器会在一个时间周期后自动重载。** 但是,有一些动作,比如增加文件,不会触发服务器重载,这时就需要你自己手动重启。所以建议,在任何修改代码的操作后,手动重启开发服务器,确保修改的内容被重载。
curl入门
博客:cbb777.fun
Python进阶技巧二三事(十一)
python内置的字典类型可以保存某个对象的动态内部状态,我们定义了字典之后可以手动的为这个字典添加/删除元素。
Python进阶技巧二三事(十)
#!/usr/bin/env python
Python进阶技巧二三事(六):字典解包与外键
在我们的开发过程中,会碰到这种场景:**在查询的时候不明确查询的字段,如果上层传递或参数不为空,就需要将这个参数作为查询字段传入** ,在`Go`这种静态语言中通常是通过拼接`sql`,或者动态修改`orm`的查询参数来实现这个功能的;而`Python`这种动态语言自带了一种解决方法,那就是`kwa
Python进阶技巧二三事(八)
Python提供了一种把序列切成小块的写法,语法是`somlist[start:end]`,遵循左闭右开原则,start的元素在结果之中,end的元素在结果之外。同样我们也可以使用负数来倒取切片,这也是被推荐的切片方式。
Python进阶技巧二三事(五):PEP8之必须遵守的规范
链接http://www.python.org/dev/peps/pep0008,建议每位python开发者都自己看一遍规则详情,下面列出几条绝对应该遵守的规则。
Python进阶技巧二三事(九)
部署环境指的是程序在运行的时候所用的一套配置,每个程序至少都会有一种部署环境,这就是生产环境。同样的,我们需要再开发机运行代码,这套环境的具体配置可能和生产环境有很大区别,所以通常情况下还需要额外和生产环境做一个区分环境,也就是开发环境或者是测试环境。
Python进阶技巧二三事(七):字符串、python版本控制、
Python2中有两种表示字符序列的类型,分别是str和unicode,str的实例的每个元素包含原始的8位二进制码,而unicode的实例,则包含Unicode字符。
Python进阶技巧二三事(四) all 与高级查询
在python中,`__all__ `是一个特殊的变量,用于定义模块的公开接口。它是一个包含字符串的列表,指定了在使用 from module import * 语句时,应该导入哪些名称。通过定义 `__all__`,你可以明确控制模块的导出接口,限制哪些名称在` from module impor
Python进阶技巧二三事(二) 继承与取值
`Python`是一门纯面向对象的语言,面向对象的三大特征相信大家都已经听烂了,那就是:继承、多态、封装。和`Go`语言这种类`c`的语言不一样,`Go`是通过结构体组合的方式实现继承的,而`Python`则是完完全全的直接继承基类,和`Php`的`extend`有异曲同工之妙。
Python进阶技巧二三事(三) Django语法糖
`SomeModel.objects.filter(env=env).prefetch_related('fileds')`
Python进阶技巧二三事(一): 常见的装饰器
`classmethod`是`python`中的一个装饰器,它的作用是:无需创建类的实例,就能够使用类的方法。很典型的一个使用就是
Prometheus存储拓展
`Prometheus`可以监控各种不同类型的应用、服务和基础设施。但是它自身也存在着一些瓶颈和问题,比如默认存储方案是使用内置的时序数据库`TSDB`进行数据存储,这在数据量、采集量偏大的时候往往是性能不够的。
Mac快捷键帮助提升效率
短按中/英键为切换输入法,长按则为切换大小写,同时control+ space 也是切换输入法。
K8S 调度器与Pod调度
`kube-scheduler`是k8s的核心组件之一,负责整个集群资源的调度功能。
JavaScript学习笔记
JavaScript是一种嵌在浏览器中执行的脚本语言,目的是让静态页面能够变得“响应式”。譬如点一个按钮能够触发某些事件、对于某些输入进行限制、保存的时候进行表单校验等等,都隶属于JS的功能范围。
HPA详解
HPA是Pod水平自动扩缩Horizontal Pod Autoscaler的简称,可以基于多指标,比如CPU利用率、内存利用率等自动扩缩ReplicationController Deployment ReplicaSet 和 StatefulSet这些工作负载中的Pod数量,当然,它不能作用于无
Go语言模糊测试
在Go 1.18开始提供了Fuzzing能力的支持,testing包在我们常见的T B类型之外新增了F的类型,用于支持模糊测试。
Go如何解析不定JSON数据
在开发中常常会碰到很多JSON类型的数据进行交互,而其中有很多JSON数据你是不能确定它的字段和结构的,而Go语言是一门静态强类型的语言,在进行JSON解析的时候必须要确定字段的类型,定义出对应的结构体,然后再进行Unmarshal,那这二者之间的冲突我们该如何解决呢?
Go云原生与微服务学习三
metadata是指在处理RPC请求和响应过程中需要但又不属于具体业务的信息,比如身份验证等详细信息,metadata采用的是`key-value`的键值对形式,其中键是string类型,值通常是[]string类型。有点类似于我们的HTTP headers中的键值对,通常来说metadata可以包
Git高级——忽略文件的几种方式
首先我们创建一个`git-learn`目录,通过`git init`来初始化`git`仓库。
2023年度总结
今天提了离职,打算给自己一点修整和忙自己感兴趣的事情的时间。同时,大学的学业已经基本结束,只需要半年后完成毕业答辩,我的本科生涯就彻底宣告结束了。