- 博客(29)
- 收藏
- 关注
原创 DSL初探
只要自底向上从左到右遍历树结构(后序遍历),根据节点的树结构类型去执行对应的转换函数,构建我们的执行算法。DSL的主要优势在于其在特定领域内的强大表达能力,可以减少开发者的工作量,提高代码质量。然而,设计和实现一个好的DSL并非易事,需要深入理解领域知识,同时也需要精通语言设计和实现技术。DSL广泛应用于各种领域,如Web开发中的HTML和CSS,数据库查询中的SQL,以及构建系统中的Makefile等。随着编程领域的发展,DSL将会越来越重要,我们也应该学习和掌握DSL,以便能更好地解决特定领域的问题。
2024-03-22 16:45:20 1031
原创 深入解析搜索Query向量化算法
向量化算法是一种将非结构化文本数据转化为结构化数值向量的方法,以便于计算机进行处理和分析。在搜索引擎中,查询向量化算法主要负责将用户输入的查询语句转化为向量,进而在文档集合中寻找与之最相似的结果。这一过程中涉及到的主要技术包括文本表示方法和相似性度量等。查询向量化算法在搜索引擎中具有广泛的应用场景。首先,它可以提高搜索的准确性和效率,通过将查询和文档都转化为向量,搜索引擎可以在向量空间中进行快速的相似度计算和排序。
2024-03-15 11:25:24 1019
原创 大模型基础技术:理解与实施
在深度学习中,数据通过多层的神经网络进行处理,每层神经元都会接收上一层神经元的输出作为输入,并产生自己的输出,供下一层神经元使用。这些技术为大模型的实施提供了强大的支持,使得大模型在各个领域都能取得显著的效果。然而,大模型的训练和部署也面临着许多挑战,如计算资源的需求、过拟合问题、模型的可解释性等。随着大数据和人工智能的快速发展,大模型已经成为许多领域的重要工具,如自然语言处理、图像识别、语音识别等。大模型的基础技术,包括深度学习、神经网络和优化算法等,对于理解和实施大模型至关重要。
2024-03-12 00:05:07 350
原创 词转化为向量方法
本文对Word Embedding原理和生成方法进行了讲解,对Word Embedding生成过程中的相关问题进行了解答,希望能帮助读者提升Word Embedding的实践效率。
2024-03-08 00:54:21 618
原创 【 Sora是如何做到文生视频】
本文以Sora文生视频的技术为切入点,从原理演进的角度逐步剖析了文生视频的演进方向和特点,最后讲述了Sora是如何做到文生视频的。有很多部分着重原理方向的概述,比如VAE、DDPM、LDM、DiT等,对细节部分描述的较少,感兴趣的同学可以自行学习。
2024-03-04 19:46:11 1024
原创 深入浅出Transformer
当我们谈论人工智能(AI),我们指的是让机器模拟和实现人类的智慧行为的科学。AI的目标是创建一种可以理解、学习、适应和反应的先进技术。AI已经成为我们生活中的一个重要组成部分,从智能助手如Siri和Alexa,到推荐系统如Netflix和Amazon,再到自动驾驶汽车,AI的应用已经无处不在。深度学习,作为AI的一个子集,是一种通过模拟人脑神经元的工作方式来学习复杂模式的方法。深度学习利用了神经网络,这些神经网络有多个隐层,可以自动学习数据中的有代表性特征。
2023-12-20 10:22:14 965
原创 扩散模型介绍 & 原理 & 应用
为了更好的理解扩散模型,我们首先需要理解生成模型。人工智能生成内容(AI Generated Content,AIGC)近年来成为了非常前沿的一个研究方向,生成模型目前有四个流派,分别是生成对抗网络(Generative Adversarial Models,GAN):生成对抗网络GAN通过一种生成对抗式的方式进行学习,其生成器G根据潜在空间的采样z生成图像x’,判别器D则判断输入图像是真实图像x还是生成图像x’变分自编码器。
2023-11-29 10:42:18 2479
原创 【C++开发的极限性能优化】
在现代多处理器系统中,大多采用非统一内存访问架构(NUMA, Non-Uniform Memory Access),在NUMA架构下,多个CPU被封装在一起,这种封装被称为CPU Socket(插槽),每个CPU Socket拥有自己的本地内存。假如一个本来在CPU Socket 0,它需要的数据被load到CPU Socket 0的本地内存,后来任务被调度到CPU Socket 1中,那CPU需要通过互连技术(QPI或IF)跨Socket访问远端内存,这样会导致访问耗时增加。
2023-08-22 17:56:24 560
原创 微服务设计模式概述
Design Patterns for Microservices微服务在企业中可以带来积极的影响。 因此,如何处理微服务体系架构(MSA)和一些微服务设计模式以及微服务体系架构的一般目标或原则是很有必要的。 以下是微服务架构实现中要考虑的四个目标
2022-10-11 11:56:04 768
原创 数据湖&数据仓库&仓湖一体
数据湖&数据仓库&仓湖一体首先提及一个最常用的概念数据库, 但凡是线系统基本都离不开数据库。数据库最主要的功能就是要强调事务处理, 比如 QPS(每秒查询数)、TPS(每秒事务数) 和 IOPS(每秒读写数)但是数据库擅长的是事务性工作, 对于分析型的工作并不擅长,于是诞生了数据仓库。随着企业持续的发展,虽然含金量比较高的数据都在”数据库“和”数据仓库“中。但是公司希望把生产经营相关的所有数据都保存下来,方便后续沙中淘金,可以构建起来数据湖。|而根据数据湖和数据仓库的特点,数据仓库前
2022-03-07 17:23:11 5163
原创 将欲歙之,必固张之
随感&随笔将欲歙之,必固张之;将欲弱之,必固强之;将欲废之,必固兴之;将欲取之,必故与之。是谓微明,柔弱胜刚强。鱼不可脱于渊,国之利器不可以示人。这些看似“荒谬”的道理,其实是字字深刻。告诉我们需要时刻警惕。有些人看似一步登天,其实并不脚踏实地,看似获得了鲜花掌声荣耀, 实际上当你不再谦逊, 当你傲慢顿生、口吐芬芳的时候,其实也在挥霍自己的“福报”。这些东西一旦被消耗殆尽就会物极必反, 讲大灾于身上。上天逾期灭亡,必先令其疯狂。当有一点点小小的工作上的成就的时候一定要保持空杯心态-----敦兮
2022-03-02 20:14:06 176
原创 漫谈KVRocks
什么是 KVRocksKvrocks是一种基于RocksDB之上兼容RESP协议的NoSQL剑指数据库。设计的核心目标就是将原生的Redis依赖纯内存资源转化为依赖其他SSD资源,在同样保证服务性能满足需求的前提将,降低服务成本。核心功能兼容Redis 的协议(RESP)支持组从复制, 类似于Mysql BinLog复制支持namespace隔离, 类似于Redis 的不同DB高可用,支持 Redis Sentinel 自动主从切换架构设计 整体上来说架构设计不复杂,从逻辑上来
2022-03-02 10:40:51 2863
原创 什么是领域驱动设计
什么是DDDDDD, 即Domain-Driven Design,就是领域驱动设计的缩写。它是一种根据领域专家的输入对软件进行建模以匹配该领域的软件设计方法。它主要是为了构建复杂领域,将业务的复杂性和技术的架构的实现解耦开来。DDD并不是一种具体的架构,而是一种方法论,通过边界的划分方法构建出清晰的领域和应用边界,让架构更加容易的进行演进。核心概念值对象: 简单来说就是没有ID但是需要了解上下文的东西。例如,当我们在外面吃饭的时候,在餐厅里面选位子落座,我们会关心这个桌子是哪里生成的,编码是什么以
2022-02-28 16:01:30 5600
原创 云原生项目初探
文章目录背景基本概念CNCF全景图详细解读数据库Vitess: 云原生加强版的MysqlTikv: 云原生版本的KV存储运行时环境Rook:云原生环境下的存储编排系统ContainerD:从 Docker Daemon 剥离的镜像管理和容器执行技术总结备注背景现在云原生越来越重要,成为一个越来越关键的话题,我们大多数人,包括笔者在内对于云原生处于”似懂非懂“的一个状态,最近由于工作需要,也属于自己工作的一项进行梳理。基本概念CNCF:即Cloud Native Computing Foundatio
2021-12-21 20:49:47 1499
原创 漫谈缓存架构
漫谈缓存架构背景当前提起缓存估计又很多同学的第一反应就是Redis。的确Redis 的确可以作为缓存,而且引入redis 作为缓存是一种很重要的技术手段,但是只是这样距离真正掌握缓存架构还有一段距离,下文中会主要介绍缓存设计中的重要核心思路,大部分是文中会以Caffeine 为例介绍假设绝大多数缓存的设计都是基于一种读多写少的场景进行设计, 只有在这种场景下才会需要使用缓存技术进行优化。淘汰算法进程内缓存我们可以通过 Hash类型的Map 来实现(C++通常使用unordered_map、Jav
2021-09-19 12:15:54 191
原创 c++构造/析构/拷贝/赋值/移动那些事
前言C++作为一门非常强大的语言在(Google/Facebook/Microsoft/Baidu/Tencent等)被广泛使用。也是入门成本相对于比较高的一门语言,很多开发过程中的对象的细节,其实可能多年的开发老手都可能注意不到。本文就是针对C++基础在构造、析构、拷贝、移动等一些部分,针对于实际开发过程中的工程经验。下面的很多结论都是通过实际功能经验的出来的,并不是说只能这样写,但是这样写可以避免很多问题。本文档风格约定部分可能跟你的喜好有冲突,请尽量用包容的心态来阅读。构造函数构造函数
2021-09-02 19:04:06 344
原创 浅谈向量检索
文章目录浅谈向量检索背景什么是向量什么是向量检索距离度量检索方法ANN的基本思路举个容易理解栗子举个正常的例子具体算法树方法KD-TreeAnnoyHash方法LSH 算法矢量量化方法乘积量化码本的建立码字搜索算法倒排乘积量化临近图方法HNSW 算法朴素想法Delaunay算法NSW 主要思想NSW构图NSW查找参考浅谈向量检索背景索引一直被认为是检索引擎最重要的组成部分,之所以数据库能够快速的查询出来结果。系统设计中很多常见的多种数据结构都是为了快速命中索引设计的, 比如 红黑树、跳跃表、倒排索引、
2021-08-17 20:49:14 4793
原创 Redis底层实现---Ziplist
Redis底层实现—Ziplist简介redis 是开源用C语言编写的一个远程的KV词典存储服务,里面有很多经典的设计结构对后续的设计很有启发, 其中最著名的恐怕就是排序链表的底层实现—跳表。本次要说的是他的另外一个核心的实现,他的重要程度应该说一定程度上来说远高于跳表,他的名字就是压缩链表。底层数据结构Redis 有 5 种基础数据结构,分别为:string (字符串)、list (列表)、set (集合)、hash (哈希) 和 zset (有序集合) , 而这5种常见数据结构底层实现分别为:
2021-07-25 22:08:44 374
原创 RocksDB参数调优
前言RocksDB 是基于LSM的树存储引擎,可调参的有上百个,并且参数之间还有相互的影响,另外根据RUM猜想,读放大、写放大以及空间放大之间是制约关系,生产环境下需在三种放大因子之间进行权衡,这更增加了调优的难度。架构图RUM猜想猜想指的是在 Read Overhead,Update Overhead 和 Memory (or Storage) Overhead 中,同时优化 2 项时需要以剩余的 1 项劣化作为代价关键指标调优需要关注的关键指标:磁盘写带宽:Compaction的压力超
2021-06-30 17:04:02 966
原创 Pulsar-消息传递
概述Pulsar是建立在publish-subscribe模式(通常缩写为pub-sub)上的。在这种模式中,生产者将消息发布到主题。使用者订阅这些主题,处理传入的消息,并在处理完成时发送确认。创建订阅后,Pulsar将保留所有消息,即使用户已断开连接。只有当使用者确认已成功处理保留的消息时,才会丢弃这些消息。消息消息是Pulsar的基本单元, 下面表格叙述的是pulsar 的基本组件。组件描述内容(Value/data payload)消息携带着数据。虽然说数据可以有自己的
2021-05-24 13:10:16 1022
原创 Pulsar 概述
Pulsar 概述概念Pulsar是一个多租户、高性能的服务器间消息传递解决方案。Pulsar最初由雅虎开发,由Apache软件基金会管理。核心特点通过无缝的跨集群的消息复制,支持多集群的Pulsar实例极低的发布和端到端的数据延迟在百万Topic上的无缝扩容简易客户端支持 Java,Go, Python 和 C++多种订阅模式,包括 独占、共享 和 主备通过 Apache BookKeeper保证消息的传递的持久化存储Pulsar Functions 提供轻量级的无服务计算框架以P
2021-05-20 13:51:20 438
原创 架构优化-压缩
引入压缩的本质上就是牺牲精度或者cpu计算换空间的一种做法,所以通常情况下来说架构设计的过程中都会更加偏向针对热点优化解决,『压缩』的引入就是最常用的手法之一。原理压缩的基本原理就是将原来数据文件的编码方式通过找寻期中的编码排序的规律,分类压缩从精度损失来看基本上分成两种: 无损压缩 和 有损压缩两种:有损压缩:一般来说有损压缩的压缩比比较大,是牺牲数据精度或者次要数据来换取更大压缩比的算。无损压缩:无损压缩主要是使用两种编码思路来进行数据压缩,熵编码和字典编码。熵编码根据信息
2021-05-04 18:55:47 337
原创 Serverless 是啥
Serverless背景Serverless(无服务器架构)指的是由开发者实现的服务端逻辑运行在无状态的计算容器中,它由事件触发, 完全被第三方管理,其业务层面的状态则被开发者使用的数据库和存储资源所记录。基本特征serverless服务是指完全或几乎完全具有五个共同特征的服务。本系列小文章描述了这五个特性,即无服务器服务:用户无需管理服务器的主机和服务器进程基于负载的自动扩缩容的能力精确计算使用成本除了主机大小和机器数量以外有其他的计算成本的方式保证数据的高可用性。本质上来说就是用
2021-04-18 10:19:52 423 1
原创 K8S的设计理念
简介K8S 成为事实上资源调度管理事实标准。有些人甚至认为K8S已经成为了云原生时代的资源容器调度的操作系统。这么牛叉的K8S,他是怎么设计的呢?设计模块K8S的设计大致分成三大部分:Client、Master、WorkerClient: 属于用户触发请求的客户端,即Kubectl, 用户的各种触发的命令就是通过kuberctl统一封装后进行命令触发的Master:用于处理用户触发的请求,进行处理决策,Worker:命令真正的执行者,读取etcd的结果将数据最终执行...
2021-03-24 17:36:59 895
原创 架构设计本质
前提架构设计的前提都是与业务相结合的,任何完全抛开业务的架构都是在空谈,或者说没有意义的,每个业务系统都有自己的特点,不可一概而论。如果是做公有云化服务的,服务群体属于普通公司或者部门这种开发者,他们可能对于云的稳定性和易用性有要求。如果是做电商推荐的系统,服务群体属于购买商品的用户,可能对于推荐商品的准确性,模型反馈速度有要求。设计内核第一,确认痛点是啥:架构设计是为了解决问题而产生的,所有的设计都不是凭空想出来,是需要根据我们当前需要解决的问题例如:延迟过高是我们当前最重要解决的问题
2021-03-09 11:59:44 293 4
原创 编程范式概述
编程范式概述基本概念编程范式这个名词听起来好像比较高深,但是其实本质上是它是对于程序设计风格,或者设计思路的抽象。它并不是跟编程语言是一一绑定的关系,有些编程语言Python 天生可以支持多种编程范式。分类从编程根本思维上的差异上区分,目前主要分成两种: 命令式(指令式)编程 和 声明式 编程命令式编程:是过程导向的,告诉计算机”怎么做“,即一步一步的执行过程都需要描述清楚,计算机所有的硬件都是通过命令式编程实现的声明式编程:是结果导向的,告诉计算机”做什么“,以数据结构的形式来表达程序
2021-03-06 18:55:15 297 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人