- 博客(109)
- 资源 (2)
- 收藏
- 关注

原创 超清晰-数据结构之线性表
鸟哥说,坚持学习基础才能有出人头地的一天。不能只专注于练武功了,内功也得练。本篇文章是讲数据结构的第一篇,跟着书好好再过一篇基础。一、线性表线性表是n个数据特性相同的元素的组成有限序列,是最基本且常用的一种线性结构(线性表,栈,队列,串和数组都是线性结构),同时也是其他数据结构的基础。对于非空的线性表或者线性结构的特点:(1)存在唯一的一个被称作“第一个”的数据元素;(2)...
2018-05-25 16:37:51
39705
20
原创 Ai学习之LangChain框架
LangChain 是一个用于开发由大型语言模型(LLMs)驱动的应用程序的开源框架。它提供了标准接口、工具和抽象,帮助开发者更高效地构建和部署与 LLM 相关的复杂应用,而不必从头开始处理所有底层细节。其本质上就是基于大模型研发的框架,可以大大降低开发者的开发工作量。核心价值说明抽象与模块化将 LLM 应用拆解为可复用组件(模型调用、提示词管理等),通过统一接口降低开发复杂度。链式处理(Chains)
2025-05-20 21:18:10
522
原创 Ai学习之openai api
OpenAI API 是由马斯克投资的 OpenAI 公司提供的人工智能接口,旨在推动人工智能技术的发展并确保其安全性和通用性。OpenAI 在自然语言处理领域取得了显著成就,尤其是 GPT 系列模型,如 GPT-3 和 GPT-4,这些模型在文本生成、翻译等任务中表现出色。ChatGPT 是基于 GPT 模型的网页应用,而 OpenAI API 则为开发者提供了标准接口,使其能够利用大模型实现各种功能。API 支持多种功能,如文本生成、语音转文本、图像生成等,并通过不同的路径进行区分。接口的核心参数包括模
2025-05-20 21:17:06
1069
原创 Ai学习之LLM
可以把LLM当作一个知识特别渊博的大博士,他经过海量文本数据的训练,这些文本就像是给它 “喂” 的知识,他脑子里有超级多的神经元(参数),因此他学富五车,你可以通过他帮你写作,解答问题,文本翻译等。但是他和普通人一样,也会一本正经的胡说八道(幻觉),但是绝大多数场景他都可以帮你解决,是你工作中生活中必不可少的工具。知识丰富拥有海量的知识,可以回答各种类型的问题,涉及的领域也非常广泛,包括历史、文化、科学、技术等诸多方面。知人晓事能够根据上下文理解人们的意图和兴趣,提供个性化的回答和解决方案。
2025-05-11 17:31:52
1012
原创 Go怎么做性能优化工具篇之基准测试
在 Go 中,基准测试是通过创建以Benchmark开头的函数,并接收一个 *testing.B 类型的参数来实现的。testing.B 提供了控制基准测试执行的接口,比如设置测试执行的次数、记录每次执行的时间等。每个基准测试函数都必须接受一个 *testing.B 类型的参数。函数体内通过b.N来控制基准测试的执行次数,Go 会自动调整 b.N 的值,确保每次基准测试运行的时间足够长。import ("testing"// 基准测试函数// 这里是测试的代码,每次循环 b.N 次。
2024-12-22 18:04:46
901
原创 Go怎么做性能优化工具篇之 trace工具
trace 是 Go 语言的一个非常强大的性能分析工具,它用于追踪和记录 Go 程序的执行过程。与 CPU 和内存性能分析工具(如 pprof)不同,trace 侧重于在时间维度上分析程序的行为,帮助开发者理解程序执行中的时间分布、并发和调度等方面的细节。
2024-12-22 18:03:31
1117
原创 聊聊系统的弹力设计-服务器性能指标篇(一)
弹性,大家可以轻易的联想到橡胶,可伸缩性是弹性机制的一个很重要的特点,但是实际上弹性不等同于可伸缩性弹性(Elasticity) 通常指的是系统能够自动适应负载的变化,即自动扩展和收缩资源。可伸缩性(Scalability) 则侧重于系统能够通过增加或减少资源来处理更大规模的负载,通常是指静态扩展或手动扩展的能力。我们可以看出,弹性强调动态响应负载波动,而可伸缩性则强调在需求增长时能够提供更大的处理能力,两者的概念是完全不同的。而动态调整,则是系统设计中最为关键的部分。
2024-12-08 18:08:01
1447
原创 多级缓存设计实践
CPU 多级缓存(,简称)是为了提高 CPU 访问内存的速度而设计的一种缓存层次结构。由于直接从主内存读取数据的速度相对较慢,因此,现代 CPU 采用了多级缓存来加速数据访问,减少访问内存的延迟。
2024-12-02 19:01:35
1410
原创 团队管理-如何组织好一场会议
很多人在讨论问题的时候,不经意会提到另一个问题,然后就兴高采烈的去讲新的问题,这个时候,组织者要识别到新问题是不是和本次会议有关,如果无关或者不会阻塞本次会议的主要问题,那就及时让其停止,回到原本的问题上来,组织者一定要果断、大胆,敢于正确的打断,最好的方式就是等其把一句话讲完之后,再打断,避免话说到一半,你就不让他讲了,这样对参与者是不大尊重的。3、如果你是管理者,你可以减少一些不必要的会议主持,尤其是形式主义的会议,能少开就少开,也可以轮流让成员去主持会议,你来辅导。
2024-02-06 17:18:44
2181
原创 团队管理-如何提高员工积极性
3、工作主动性,是否主动的承担一些工作职责,不排斥额外工作。2、问题解决,处理问题的态度是否积极,效率是否提高。1、迭代工作交付量,单位时间内完成的工作内容。
2024-01-31 09:50:17
2206
原创 GO并发编程基础- 如何使用channel
通道,顾名思义,使用来传递数据信号的,和队列类似,有发送端和接收端,也是先进先出的数据结构,通常是在不同的goroutine做通信处理,结合select,是GO并发编程中的武功秘籍。
2022-07-19 21:34:49
414
原创 一文让你理解GO的数组和切片的本质
Go 的数组,其实和C的数组没有什么区别,同样有着以下的特点:上面是一个长度为9的整形数组。在内存是连续的存储空间。在我们定义一个数组之后,其中所有的元素值都会是该类型的零值。因此我们无法判定我们存的就是零值还是初始化给的零值,但其实这并不重要。使用数组的好处和坏处都显而易见。数组可以节省空间,不像链表和其他数据结构,需要额外存储其他的标识。而且他很简单,作为基础数据结构之一,他简单而朴实无华,在一些指定的场景中,发挥着很大的作用。指定下标 访问元素 O(1) 的时间复杂度,又让他很快。但是人不完人,
2022-07-03 15:41:13
431
原创 排序算法详解(一)Go
生活中经常有需要我们排序的栗子,比如说成绩排名,按照分数从高到底排序,对绝大多数程序员来说,排序算法可能是学过的第一种算法,但是不同的排序算法是存在差异的,有的算法花费时间很长,有的算法花费空间很多,就好比我们的代码质量,不同的算法得到的程序性能是不一样的。因此我们要学习下优秀的算法,用一种更合适的方式去处理问题。主要是有以下几类指标。指的是在一个算法在最好的情况下的执行效率,比如说要排序的数组刚好是已经有序的,要吃饭的时候刚好外卖到了。当然这是理想状态下,不可强求。指的是在最糟糕的情况下,执行这段代码的时
2022-06-05 17:37:42
309
1
原创 Go命令行实现工具- flag大法详解
一、flag 是什么东西?对于很多语言,都支持用命令行执行。例如 PHP 支持用PHP命令 解析PHP脚本语言,Java 支持用 Java命令编译 Java代码,golang 也支持用 go 命令编译执行。既然都支持用命令行执行,但是命令行又不像web 页面那样有输入框给我们填充参数,那么怎么让程序可以读取我们输入的值呢?为了解决这样的问题,golang 为此提供了 flag 标准库。它的主要功能是实现命令行参数的解析。二、flag 入门?我们简单举一个简单的例子:package main
2021-12-04 21:55:23
2206
原创 数据库编程两大神器-存储过程和函数
一、什么是过程化sql1.基本概念:基本的sql 都是高度非过程化的语言,过程化sql 是对SQL 的拓展,使其增加了过程化语句功能,过程化sql 程序的基本结构是块。所有的过程化SQL都是由块组成的。这些块可以相互嵌套,每个块都可以单独完成一个逻辑操作。例如:declareset ... /*定义部分*/ ... /*执行部分*/ begin sql语句、过程化SQL的流程控制语句 exception 异常处理部分 end;2.过程化sql的两种形式过程
2021-09-12 21:51:47
556
1
原创 手把手教你微信第三方平台开发
本文适合想接入第三方平台开发的同学,通过真实经验大致讲解一下相关业务,建议收藏以备不时之需。一、什么是微信开放平台微信开放平台地址微信开发平台实际上就是给微信外部人员提供微信能力的平台,我们可以在这个平台创建相关的应用,管理对应的认证、授权信息,然后通过开放接口对接微信提供的种种能力。其中,账号的申请需要公司主体的相关信息。二、如何接入微信第三方平台的开发2.1 注册开放平台账号注册账号需要邮箱(这个邮箱贼恶心,不能是微信绑定过的,也不能是公众号平台绑定的,小程序平台绑定的也不行),.
2021-09-07 00:20:54
9234
1
原创 用docker五分钟快速搭建Redis小集群
一、用docker 快速配置Redis 集群1. 查询最新的镜像docker search redis2.下载镜像docker pull redis3.起三个容器docker run --name redis-6379 -p 6379:6379 -d redisdocker run --name redis-6380 -p 6380:6379 -d redisdocker run --name redis-6381 -p 6381:6379 -d redis4.查看容器启动情况
2021-09-02 08:18:54
233
1
原创 Redis挂了,我的数据还能恢复吗(二)?
一、前言我们在上一篇文章聊到了 redis 通过 aof 机制确保了数据的可靠性,但是 aof 日志记录的其实是操作过的命令,并不是实际数据本身,通过 aof 日志进行恢复需要消耗较多的时间,因为每个命令都要执行一遍。这个时间基本上和 aof 日志的大小成正比,如果数据量不大,那倒是无所谓,但是如果数据量特别大,恢复数据的时间可就长了,那么 redis 的团队难道就没考虑到这种情况吗?当然考虑到了,所以才有了 RDB 机制。二、什么是 COW 机制写时复制技术,实际上是linux 系统提供的一种内存优
2021-08-29 19:44:04
2361
原创 Redis挂了,我的数据还能恢复吗(一)?
一、内存和磁盘的区别计算机的CPU只能读取内存里的东西,无法直接磁盘读取数据。因此程序和数据必须先从磁盘中读取到内存中,才能被CPU使用。电脑硬盘作为计算机最主要的存储设备,具有比较稳定的数据存储能力,又称之为外存,从介质上来区分,可分为 SSD (固态硬盘) 和 HD (普通磁盘),SSD 主要是利用电子来存储数据,而 HD 是利用磁性来存储数据,相对来说,SSD IO 相对较快,但是比较贵,而 HD 相对速度慢,容易损坏,但是价格便宜。内存用于暂时存放CPU中的运算数据,与硬盘等外部存储器交换的数
2021-08-28 10:00:43
779
原创 数据结构之散列表
一、什么是散列表散列表又称哈希表,这种数据结构提供了键和值的映射关系,只要给出一个 key, 就可以高效查找到它所匹配的 value,时间复杂度接近️ O(1)举个例子,在读书的时候,我们每个人都有一个学号,一个学号对应一个学生。学号可以当作一个key, 学生名字就是一个value。二、哈希表的作用在日常开发中,我们经常会用到哈希表,如 redis 缓存,PHP 的关联数组,go 的 map 等。再比如说,假设我们要统计一份名单中,每个名字出现的重复次数,那么我们就可以建立一个简单的哈希表,ke
2021-08-14 22:46:42
1211
原创 单点登录之CAS实践
博主在前段时间参与开发了公司内部的统一登陆认证平台,于是,便有了这篇文章。一、为何要开发这个东西?现状:各系统都有自己的登陆页各系统单独维护自己一套登陆体系,使用方需要记住多套账号密码各系统都有自己的UI ,布局不统一使用成本高,多个系统都有属于自己的权限控制,对新人不友好,授权入口也不统一…总之,很麻烦很麻烦。于是为了解决这些问题,统一登陆认证平台势在必得。二、相关概念为了更好的理解这篇文章,我们首先需要先了解一些相关的概念。ssosso 是英文 Single Si.
2021-08-08 23:24:04
594
1
原创 GO并发编程入门-协程和锁
一、使用协程go 的协程使用上十分的简单,只需要在方法前添加 go 关键字,就可以开启一个新的用户态线程去异步执行。package mainimport ( "fmt" "time")func main() { go doSomething("mclink") doSomething("study")}func doSomething(str string) { for i:=0 ;i < 5 ; i++ { time.Sleep(time.Second) fmt
2021-06-07 00:03:31
1665
1
原创 浅谈GO语言包管理
一、包管理的作用不论是哪种语言,都会有很多大佬写的框架以及工具包,我们为了可以增加代码跨项目的可复用性,经常会把一些常用的功能或者轮子写成一个或者多个包,因为包的独立性,使得我们可以在不同的项目或仓库对它进行使用,间接提高了代码的可复用性,减少了 CP 的场景。不同语言对包的概念界限不同,但是他们的本质是相同的,都是为了提供一些便于开发使用的工具方法或者轮子。本质就是一个文件夹的代码,当然包可以用来区分相同名字的函数、变量等标识符等。二、如何进行包管理1. GOPATH 模式Go 的包管理方式是逐
2021-05-25 23:10:43
559
原创 看完这些,小姐姐不会说你不懂线程了
在现实生活中,底层劳动人民往往容易被忽视,在大场合交际的一般是老板,但是没有了真正劳动者,是无法正常运转公司的。操作系统也是如此。文章最后有福利。一、概念上一篇我们简单了解了进程。进程是资源调度的最小单位,但并不是真正干活的人,真正在调度机上运行而是线程。线程是进程中执行运算的最小单位,也是执行处理机调度的基本单位。好比说一个进程是一家公司,公司的老板是第一个线程,手下的员工也是线程,他们共享着公司的资源,在对外的时候,我们一般会以公司为最小单位参加各类融资活动。不同公司的交涉往往没有公司内部交流来.
2021-05-16 23:29:03
2397
原创 你真的懂进程吗?熬夜总结的进程知识梳理。
进程=程序+数据+数据结构,这句话大家应该不陌生。让我们一起重新了解进程吧。一、程序设计我们先来聊聊程序,按处理方式的不同,程序的设计一般分为两种类型1. 顺序程序设计1.1 特性封闭性指只有程序本身的动作才能改变程序的运行环境再现性指程序的执行结果与程序的运行速度无关顺序性指程序所规定的每个动作都在上个动作结束后才开始顺序程序设计,也就是一个单核CPU一次性只能干一件事,干完了这件事,下一件才能开始。从日常生活我们就知道,我们经常需要一天干很多的事情,经常.
2021-04-26 23:35:45
394
原创 进程管理之死锁
1.死锁的概念1.1 什么是死锁 先来看下一个例子:连接两个地方之间有一座桥,这座桥很窄,一次只能容纳一辆车的通行,这时候,从桥的两侧分别各有一辆车上来,对于A车而言,它行走了桥的一段路(占有该桥的一部分资源),想要过桥到达另一端需要B车让开从而才可以行驶,这时出于等待状态,而B车,也行走了桥的一段路(占有该桥的一部分资源),想要过桥到达另一端也需要A车让开从而才可以行驶,这时也出于等待状态。 A车和B车两者之间谁也不让路,都处于等待对方的状态,结果造成两边的车都不倒车,互相等待对方让...
2021-04-19 09:27:57
401
原创 浅谈 GO 语言错误处理
go 的异常处理一直都是一种让人感觉奇怪的设计,本文用较多的篇幅和大家一起聊聊go 的异常处理的一些姿势一、error 是什么玩意话不多说 ,先放下源码(也就几行)package builtin// The error built-in interface type is the conventional interface for// representing an error condition, with the nil value representing no error.typ.
2021-04-18 17:12:04
656
原创 浅谈单体向微服务架构的演进
一、什么是架构首先,要理解架构,我们需要先理解几个有关系又相似的概念,包括:系统和子系统、模块和组件、框架和架构。我们以一个学生管理系统为例。1. 系统和子系统系统:系统泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。它的意思是“总体”“整体”或“联盟”。子系统子系统也是由一群有关联的个体所组成的系统,多半会是更大系统中的一部分。一个可用的、完整的学生管理系统便是一个系统,系统一般是具有完整性的。而学生管理系统又可以包括用户子系统,学生
2021-04-04 15:46:14
2708
4
原创 gorm 如何实现支持任意原生SQL查询
目标:实现一个通用查询。传入任意的原生SQL,使其能基于 gorm 上获取结果一、gorm 能否直接实现?首先,我们分析一下,首先要支持任意原生SQL,然后返回结果无法确定结构体。很多人说,gorm 本身支持原生SQL查询啊。是的没错,但是实现上却有一定的限制,通过阅读文档,发现以下两种查询方式:// 第一种type Result struct { ID int Name string Age int}var result Resultdb.Raw("SELECT i.
2021-03-27 21:28:54
5398
3
原创 GO进阶之类型篇
数据类型是语言的基础,对于强类型的语言来说,正确使用类型也是一个基本功,不可轻视。一、Go 的类型有哪些?Go语言内置以下这些基础类型:布尔类型: bool。整型: int8、 byte、 int16、 int、 uint、 uintptr等。浮点类型: float32 、 float64。复数类型: complex64、 complex128。字符串: string。字符类型: rune。错误类型: error。同时, Go语言也支持以下这些复合类型:指针( pointer.
2021-03-02 23:12:29
723
原创 原码、反码、补码运算规则
一. 机器数和真值在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念.1、机器数一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。那么,这里的 00000011 和 10000011 就是机器数。2、因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 100
2021-03-01 23:27:16
9762
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人