HiKariのTechLab

光の技术屋


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 站点地图

  • 搜索

【极客日常】初体验rust语言

发表于 2023-05-01 | 更新于 2024-04-07 | 分类于 极客日常

作为一门“网红”语言,rust,已经在区块链、Web前端、游戏开发等领域凸显了作用。相对于golang、python、java、js跟cpp等其余主流语言,rust语言的编写和呈现方面都算是一个更为独立的体系。因此,本着对技术的好奇心,笔者也决定学习下rust语言,一是体验一下新一门编程语言的逻辑艺术,二来也是为未来可能的变化做一做准备。

由于还没有明确要写什么小demo的想法,笔者决定先参照官网rust-by-example给到的代码案例,体验一下rust这门语言是如何做到实现各种基础场景的,心里有个底。官网所有的rust代码案例,笔者一一临摹,记录在了这个repo当中。

阅读全文 »

【极客日常】聊聊ChatGPT对于八股文程序员的冲击

发表于 2023-05-01 | 更新于 2024-04-07 | 分类于 极客日常

2023年ChatGPT系列的问世,可谓是对整个世界的人类造成了冲击。在此之前,人们最多以为AI能够做的事情,主要是下棋玩游戏,但是对话模型AI的到来,造成的效果,是AI具备了和人交流的能力,能够理解人类语言,通过其它AI工作流,自动整合资料,生成人类想要的内容。也就是说,AI可以从事人类的工作了。

很多程序员同行开始恐慌,自己的工作是否会被这类AI所替代,笔者的答案是——不应该会。对于AI,拥抱它的能力,把关它的成果,才是人类程序员需要做的事情,而不是说强行去杠AI的长处。脑细胞再怎么多,大脑也就这么大,而且人类还要生活,管理情绪,大脑不可能100%专注到一个工作。在工作执行方面,AI必然超越人类,但在工作内容把控方面,一切应该由人类定义。如果说你作为一个程序员,过分沉浸在一些八股文知识里,不去构建自己的思维体系,那么从编程工作本身的角度考虑,可怕的不仅是你很难做出更有质量的程序,更甚的是这些工作都正好能被ChatGPT代替掉。这类八股文程序员,才是ChatGPT真正会给到冲击的对象。

阅读全文 »

【测试人生】《阿里测试之道》笔记之大促全链路压测

发表于 2023-04-08 | 更新于 2025-04-12 | 分类于 测试人生

在2022年,阿里出品了一本《阿里测试之道》,讲述在阿里电商、物流、金融、大数据等业务场景下,测试活动业务层面是如何开展,以及技术层面是如何实现的。笔者有幸拜读此书,从其中也有所收获。本次以其中涉及电商的测试场景为例,记录一下“大促质量保障”一章的读书笔记。这一章主要讲述了在大促场景下,全链路压测是如何实施的,以及通过什么方式保证最终大促时的生产环境稳定性。

风险与挑战

全链路压测目标:尽可能真实模拟流量洪峰,进行高可用验证
用例场景需要考虑两个方面:

阅读全文 »

【从零单排Golang】第十话:快速理解并上手context的基础用法

发表于 2023-04-01 | 更新于 2024-04-07 | 分类于 从零单排Golang

在Golang的各种用法当中,context可谓是最能够体现Golang语言特性的模块之一。context的本意为情境、上下文,而在Golang程序当中,则可以被用于描述一次调用、会话或者任务的状态信息。关于context网上有很多语法以及源码分析的文档,但是里面很多却不能从实战场景体现context的作用,导致这个概念难以理解。因此这一回,经由踩坑context后,笔者将结合自己的理解,给大家讲述context在Golang怎么用来最为方便,怎么理解最为实用。

首先来了解一下什么是context。我们先走源码:

1
2
3
4
5
6
type Context interface {
Deadline() (deadline time.Time, ok bool)
Done() <-chan struct{}
Err() error
Value(key any) any
}

在源码定义中可以看到,context模块给开发者定义了一个接口约定Context。在先前关于接口的文章中有提到,接口本身定义的是一个实体可以做的行为,那么我们初步理解context的时候,就可以通过Context的定义,知道一个Context可以干什么。

假设一个Context实例ctx,关联到了一次会话,作为当次会话的情境。根据代码定义,Context可以做以下几种行为:

阅读全文 »

【Python随笔】一天搞定,爬虫爬取w3schools的sql语句案例集

发表于 2023-03-11 | 更新于 2024-04-07 | 分类于 Python随笔

在很久以前的Easy Python系列中,介绍了通过爬虫手段爬取豆瓣电影信息的一种技术套路。今天故技重施,为了迎合先前做SQL语句分析的需要,决定爬取w3schools网站上面所有SQL案例,用作测试用例。

本文就来详细讲述,爬取w3schools网站的实现方式,以及里面需要注意的一些点。代码统一放在这里。

阅读全文 »

【从零单排Golang】第九话:用go语言解析并分析sql语句的方法

发表于 2023-03-04 | 更新于 2024-04-07 | 分类于 从零单排Golang

在Golang的实战中,总会遇到一些场景,比如抓包分析sql指纹,或者是输入sql时检查sql的风险,这类操作都需要解析sql的工具才能够生效。今天,就来介绍一些Golang当中解析sql的工具包和使用方法。

本文介绍的工具是vitess-sqlparser,主要结合了两个sql解析工具:

  • xwb1989/sqlparser
  • tidbparser

其中,xwb1989/sqlparser项目支持的功能有限,尤其对于DDL没有很好的支持,而tidbparser则功能比较全面。下面以tidbparser为例,讲述一下解析以及分析sql里DDL语句的一种方式。

代码相关写法可以查看这篇文章。首先,我们先自定义一个要验证的DDL语句:

阅读全文 »

【从零单排Golang】第八话:通过cache缓存模块示范interface该怎么用

发表于 2023-02-18 | 更新于 2024-04-07 | 分类于 从零单排Golang

和许多面向对象的编程语言一样,Golang也存在interface接口这样的概念。interface相当于是一个中间层,下游只需要关心interface实现了什么行为,利用这些行为做些业务级别事情,而上游则负责实现interface,把这些行为具象化。本文就来通过一个简单的缓存cache模块的实现,来示范一下Golang的interface该怎么用。

首先,从业务service角度而言,一个cache模块可能需要以下几种方法:

  • 获取缓存中的某个值
  • 缓存数据,加缓存时效
  • 删除缓存内容

那么这些个方法,就可以用一类叫Cache的interface来表示:

阅读全文 »

【DIY小记】VMWare设置主机连接到的Ubuntu虚拟机的网络端口

发表于 2023-02-05 | 更新于 2024-04-07 | 分类于 DIY小记

很多同学在自己机器上玩开发的时候,都会用到VMWare、VirtualBox之类的虚拟OS容器装一个带GUI的Linux OS,然后在里面另外安装开发工具做开发。这里面遇到的最经典问题,就是比如我在虚拟机里面起了个MySQL、Redis之类的服务,如果DB的客户端/GUI工具是放在主机里面,不在虚拟机里,那怎么连进去?这个问题,本文提供一种解决方案。

本文采取的虚拟机环境如下:

  • 主机:Win11
  • 虚拟机容器:VMWare Workstation 16
  • 虚拟机:Ubuntu 22.04

首先需要了解到,VMWare场景下,我们通常用NAT模式新开一个网段来管理虚拟机的网络配置,而虚拟机内部,假设使用IPV4,会默认采取DHCP机制,自动设置一个IP跟相应的网络配置。相关资料可以看这几篇文档:

  • 网络中的NAT模式
  • DHCP百度百科

而为了让我们主机能连到虚拟机内部,实际上是满足下面两个条件之一即可:

阅读全文 »

【测试人生】准入准出质量红线的技术设计

发表于 2023-01-26 | 更新于 2025-03-21 | 分类于 测试人生

在应用日常开发的过程中,不论是在测试、开发联调,还是实际构建发布的时候,我们都需要一定的指标去衡量技术产物的质量,从而判断技术产物是否符合质量标准,是否能够继续发布投产,如果不符合投产标准则拦截发布。从发布过程的角度,由于一般发布过程会收口到特定的CI流水线上,因此在做这类能力的时候,通常是采用开发一个特殊的质量红线原子的方案,集成到CI流水线当中,实现发布准入准出的原子能力。

准入准出质量红线能力的开发者,通常是DevOps中台,中台提供原子能力以及配置化的能力,用户可以根据自己的业务去配置相应的指标产出与拦截规则,也可以直接套用特定的模板来快速实现准入准出的效果。本文就来讨论,这类能力要开发出来,在技术实现上,需要做怎样的考虑跟设计。

首先,针对真实业务,要用到准入准出质量红线的话,可能会考虑以下场景:

  • 日常开发提测,在代码提交MR时,通过MR的hook触发对最新代码的规范检查
    • 代码检查需要关心一系列指标,包括:代码缺陷、代码安全、编码规范、重复代码、复杂度
    • 不符合指标的情况下,显示被质量红线拦截,MR被阻止
  • 版本转测时,保证代码质量与单元测试代码覆盖率符合要求
    • 不符合指标的情况下,终止归档构件
  • 用户采用脚本等方式,自定义发布红线指标与生成过程,不符合指标的,阻止发布流程

因此,从技术实现角度上,这里可以拆解成几个维度:

阅读全文 »

【从零单排Golang】第七话:反射模块reflect使用方式探索

发表于 2023-01-01 | 更新于 2024-04-07 | 分类于 从零单排Golang

Golang的反射功能,在很多场景都会用到,最基础的莫过于rpc、orm跟json的编解码,更复杂的可能会到做另外一门语言的虚拟机。通过反射模块,我们可以在编程语言的runtime运行时期间去访问内部产生对象的信息。了解反射模块的实现,对我们了解Golang对象机制本身,也是莫大的帮助。

今天,恰逢阳康+新年,就决定来探究一下Golang的反射模块——reflect。

从最基础的开始,reflect模块,以获取整数对象的类型信息为例,我们可以这么用:

阅读全文 »
1…678…20
ひかり.HDQ

ひかり.HDQ

talk is cheap, code is rich
195 日志
14 分类
417 标签
GitHub Mail CSDN Juejin Steam Bilibili
© 2019 – 2025 ひかり.HDQ
|