- 博客(37)
- 收藏
- 关注
原创 如何构建并优化提示词?
提示词是一个小白最容易上手大模型的方式,提示词就是你告诉大模型应该如何去完成一项工作的系统性的命令,所以写一个好的提示词是比较关键的,那么如何写好一个提示词呢?要写好提示词,其实就像我们要把一些命令清晰地传达出来,大家想象我们在职场中要交给别人一个任务的时候,比如让分析师去分析下数据,我们一般是不是要告诉这个分析师对应的工作任务是什么,然后有哪些对应的业务的背景信息,这个分析的样例之前有没有呢,这个任务完成后给你的交付物应该是什么,是ppt还是一个word或者一个表格就行了呢?
2025-04-09 20:25:09
347
原创 大模型应用开发之RAG学习
RAG的全称是Retrieval Augumented Generation, 翻译过来就是检索增强式生成,那么它对应的工作原理是什么呢?对应的步骤如下所示,分成了两个步骤,分别是建立索引阶段和检索与生成阶段2.1: RAG 建立索引阶段。
2025-03-31 20:08:21
377
原创 大模型应用开发之大模型工作流程
那么如果我们想让大模型每次的输出都大部分是一致的,应该如何呢?这里只说我们调用api可以控制的两个参数,分别是temperature 和 对应的top_p 两个参数,temperature 的意思是温度,我突然想到了炼铁所需的温度,大家想想,如果炼铁的温度很高,铁都变成铁水了,是不是后期可以变成多种多样的各种工具,温度很低的时候,可能刚开始这个产出品就是固定的,所以温度越低,产出就趋向于稳定;温度越高,产出就越多样;这就是我们所说的分词和向量化;一:大模型的问答工作流程。1.3: 参数的选择。
2025-03-25 19:43:36
167
原创 python出现non-default parameter follows default parameter
non-default parameter follows default parameter 是 Python 解释器抛出的一个错误信息,它提示你在函数定义时,非默认参数(没有默认值的参数)跟在了默认参数(有默认值的参数)后面,这违反了 Python 函数定义的规则。
2025-03-04 19:17:04
186
原创 python出现 exit code 132
我在运行某段代码的时候,python出现这个现象Process finished with exit code 132 (interrupted by signal 4:SIGILL),明明昨天就运行的是ok的,但是今天就不行了,去问了下DeepSeek,这个情况是什么样的,后来它给我的回答是执行了非法命令,还是和CPU相关的。一看,估计是mindnlp 有问题,然后我就卸载了这个包,安装了下更低的版本,再运行对应的代码就成功了。
2025-03-03 17:55:54
223
原创 想让初中生都懂的A技术I进化史
要大概搞懂AI的发展进化史,那么我们就要从最开始的机器学习说起,然后到复杂点的拥有人工神经网络的深度学习,再去后面了解大模型和自我学习的AGI。
2025-02-28 22:59:48
599
原创 ChatGPT是如何生成长文的
比如我们先选取第一个词为我,我们可以从这500万个词中找到我后面跟的所有词吧,然后对应的这些词的出现次数我们可以拿到吧,比如”的”出现的次数为1万,”是”出现的次数为0.5万,所以”我” 后面出现的”的”概率相对来说最大,这样”我”后面是不是就可以跟”的”了,依次类推,”的”后面跟的词可能就是”家”,这样下来也可以让chatGPT生成一部短篇小说了;chatGPT其实是在做选择题,它并不知道下一个词是什么,只是选择概率比较大的词,然后生成对应的文章,所以问题的关键就是,如何知道下一个概率最大的词呢?
2024-12-29 19:51:15
810
原创 细说Flink状态管理
KeyedState 顾名思义就是某个key对应的某些状态的值,因为我们在进行keyBy的时候,我们是需要知道这个对应的key的value值有哪些,也需要知道这个value值有多少等,所以这个KeyedState 一般分为ValueState,ListState, MapState等,分别存储这些key对应的不同的状态类型,也就是不同的数据情况。3.1: 如果是memoryStateBackend, 状态的数据是存储在tm的内存中,checkpoint 的数据是存储在jm 的内存中。
2024-09-19 16:30:33
1226
1
原创 jvm的各种性能检测工具
可以输出并修改运行时的java 进程的opts。用处比较简单,就是能输出并修改运行时的java进程的运行参数。这个的全称是JVM Statistics Monitoring Tool,说白了就是统计jvm的各种指标的,我们这边主要关注内存使用指标,一般我们后面要跟上pid的进程。这个说白了就是看进程中调用的各种栈,对于程序hung住排查调用的各种栈很有帮助,使用方法就是 jstack。2.1: 首先查看对应的堆内存使用的各种情况,堆内存溢出。第二个命令就是看这个pid 对应的对象的个数和大小。
2024-09-10 17:24:20
275
原创 数仓建模和数据治理
tmp 表转成view;一般采用将不同的分类实例化成不同的纬度,在公共维表中保存公共的纬度属性,比如淘宝中的淘系商品和旅游类商品分类,有公共的基础商品属性,也有些各自的特殊属性,旅游类的可能就是有酒店,门票啥的属性;一致性上卷,就是说一个纬度的属性是另一个纬度属性的子集,且两个纬度的公共属性是相同的,比如类目纬度是商品纬度的子集,那么可以基于相同的类目属性进行不同的业务探查,验证指标的正确性和合理性。而纬度则指的是刻画描述某些业务过程的一个个方面,也可以理解为“环境”,比如买家啊,卖家啊,商品啊,时间啊;
2024-09-10 17:22:21
927
原创 数据库,数据仓库,数据湖,湖仓一体到底是什么区别
这个时候就该我们的数据湖隆重登场了,他就是为存储历史的所有结构化,半结构化以及非结构化数据,历史所有的离线的,实时的,外部的,内部的数据而生的,而且是以成本比较低的对象存储为底座去进行数据存储的,支持近乎无限的扩展;但是,如果你要让数据库去分析为什么最近一个月的库存少了,订单数少了,那他就显得无能为力了。先说下上面的答案,数据仓库和数据湖可以是互相独立存在的,不存在谁是谁的缓存一说,但是如果涉及到湖仓一体的时候,数仓是结构化的数据访问入口,而底层的数据湖是可以作为数仓的底层的存储支持。
2024-09-09 11:01:36
626
原创 Flink,spark对比
最终打包成一个zip包上传。它的目的是为了控制一个taskManager 能运行多少个task,所以对资源进行了分配,划分成不同的slot,一般和cpu是1:1 的关系,所以一个算子分布在不同的taskManger 上面,在一个tm的并行度和slot是一比一的关系,那么全局的并行度就是我们自己设置的并行度了,不过我们在考虑的时候就是考虑单个tm里面的并行度好点;其实Flink 和Spark 也会进行数据的落盘,但是他们和mr的最大的本质不同就是他们可以把数据放在内存中,最后再落盘,而MR一定会落盘;
2024-07-06 17:44:31
1173
1
原创 数仓的随想
6.7: 数仓分层,ods, dwd, dws, ads,前面三个才是数仓里面的东西,dws 是数据服务层,说白了就是根据一个个主题汇总起来的,做的是轻度汇总的工作,一般以日为单位进行汇总,比如日活跃设备数,日下单数,日注册用户数;5.1: 第一范式,1NF,属性不可切割,比如,某个表里的字段叫做商品,但是值不可能是5台电脑,因为5台应该是另一个字段的值,比如数量的字段;1.1:选择业务过程,选择我们感兴趣的业务作为整个数仓的分析的底层数据,比如下单业务,物流业务,售后业务,快递业务等等;
2024-06-30 15:50:40
591
原创 大数据Spark 面经
所以兄弟们可以看到,说白了,我们进行spark的编程的时候,就是基于RDD的,然后和算子一起,把RDD当作点,这些算子当成边,不就构建成了我们的这个有向无环图(DAG) 嘛;大家可以想想,这个spark的RDD 也是基于内存的计算,如果一个任务一直这样计算下去,比如算到90%的时候,机器突然宕机了,任务全部失败了,是不是又得重新计算,所以我们就要进行个中间数据的备份嘛,比如算完了一个stage的数据,先把它存储到外部系统,这样就不怕任务突然中断了;这两个算子分区内的逻辑和分区间的逻辑都是一致的;
2024-06-30 15:49:55
959
原创 大数据java面经一
15:什么是CAS 算法,就是比较并交换,CAS(V,E,N),v 就是这个变量,表示要更新的值,E 就是预期值,旧的值;5.8: 结构型模式之桥接模式,将抽象部分与它的实现部分分离,使得都可以互相变化,解决子类爆炸的问题,比如生产不同类型的车如果都放在一个生产线上,会相当的复杂,所以就抽象出来,搞发动机的一条线,搞电机的一条线,搞车载系统的一条线,然后生产之后组装起来,桥接模式里面都是定义的接口和类的组合。就是个资源让出的结果嘛,要么当前线程被阻塞了,被挂起了,正常执行完了等。
2024-06-16 11:32:08
945
原创 大数据Hive,Flink等面经
分布式快照参考的算法是Chandy-lamport的算法,其中最重要的一个机制就是checkpoint ,就是检查点,它就像一个守门员似的,当每批人经过它,它都会给大家插入一个编码,编码是递增的;就不用进行频繁的shuffle了,极大地提高了数据处理的速度;全称是Flink Complexible Event Processing, 就是复杂事件处理,它的流程就是设定一个源源不断的规则,对进来的事件流做个判断,如果有符合相关判断的事件就收集起来,然后做个告警,分别有patter,event等关键概念,
2024-06-16 11:31:02
1302
原创 Flink CDC 实现原理
如果后期有个binlog的chunk 过来,比如是105,150和160的数据发生了变化,那么我们就会针对相应的值改动,并不会改动全部的值,改动效率就比较高了;简单点来说,就是一旦开启同步数据的事务了,Debezium 就会对全局加锁,先把当前加锁的这个时间点的全部数据select 出来,这需要一点时间的,然后这个时间节点的select 事务啊,update 事务啊,都会被阻塞,严重的时候会导致mysql 的整个进程都被hang 住了,提供不了服务了,所以我们Flink 就要进入2.x 时代。
2024-06-16 11:02:17
608
原创 别傻傻分不清SAS,SATA和SSD
协议,哈哈哈,兄弟们就可以理解为我们电脑要往硬盘中装东西,可以有几个通道,通道多是不是效率高,而且装东西的时候是不是类似要经过保安检查啥的,这个就是约定了,就是我们所说的协议了。哈哈哈,所以兄弟们就迫不及待地选择固态硬盘了是吧,别急,也得看你有没有钱了,固态硬盘好是好,但是价格肯定就是同级别容量下的机械硬盘的几倍;相信很多兄弟们之前听过硬盘,什么机械硬盘,固态硬盘,什么SATA硬盘,SAS,心里都在想,这tm地该怎么选?首先,兄弟们要知道,硬盘这个东西就是存储数据的,一个容器,帮你把数据都装进去的。
2024-06-15 09:54:00
2632
原创 Kafka 如何保证数据可靠
对头,所以这就涉及到一开始分区的副本的leader 和follower 之间通信同步数据的问题,假设producer 发送一条消息到topiA 的partition-0,它有三个副本,我们要保证数据可靠肯定要确保老大leader把数据拿到手了,告诉了其他的副本兄弟之后,然后给producer 发送一个ack 表示确认消息已经收到了,你开始发送下一条消息吧,哥们。如果不怎么同步又会说你tm符合cap 定理嘛;所以这就涉及到了我们的topic 的分区的副本机制了,副本就是做容错的嘛,即使老大挂了,副本顶上。
2024-06-10 22:58:52
994
1
原创 Java 的设计模式(一)
说白了就是一个类只有一个对象实例,哈哈哈,不管谁去调用这个类,都是这样的,就是天王老子调用也是哈哈哈哈。3.2: 简单工厂模式,就是指定个生产线(这里是某个类),专门生产某种产品(这里也是某个对象实例),说白了就是某个类生产出其他对应类的对象实例。兄弟们都知道Java中有很多常见的设计模式,最全的是有23种设计模式,但是在工作中用到的也不是有那么多,我们就先来介绍下最常见的10中设计模式吧。工厂工厂,不就是根据需求生产出来所需要的产品吗?上述第三个有点问题,所以我们用电更高效的,内部类模式,如下所示。
2024-06-09 11:46:59
267
原创 线程并发随想
java 中出现volatile 就是为了打造一个更轻量级的锁,不要像synchronized 那样那么重,volatile 一般是用来修饰变量的,它保证修饰的变量修改了在所有线程中都是立马可见的的,说白了它就是在主内存中把这个变量修改,不是放在每个线程的cpu的高速缓存中读这个变量,(变量可见性)AQS 里面有两个关键点,一个是state,一个是阻塞队列;对这个变量的操作都是原子性的,在这里理解就是基本只有一步操作的,原子性说的是要么全部执行,要么都不执行,某个操作过程,这里对变量加了一把小锁;
2024-06-08 12:19:09
671
原创 浅谈线程池
兄弟们都知道,我们在搞多线程并发的时候,刚开始的时候是通过实现Runnable 接口或者 继承Thread 的类来构建线程的,但是这个线程创建和消费一般比较费资源,所以我们业界也就出现了使用线程池的方式,一个是可以复用线程执行任务,一个是可以不用频繁的创建消费线程。这个一看就是创建固定线程的线程池,如果池里面的线程都在执行任务,新的任务进来了就需要等待了;这个说白了就是一个需要时可以创建新的线程的线程池,而且没有固定数量,如果之前的线程还在就可以复用,而且会自动清理掉超过60秒以上没有使用的线程。
2024-06-06 22:46:49
205
原创 一文讲透java 集合
Set 说白了就是个无序的集合,这里的无序指的是放入的顺序和取出来的顺序不是一样的,比如某个元素a是第一个放入集合中的位置,但是你进入集合的第一个位置并不一定是元素啊,这就是说的Set 的无序,而且放入的元素是不会重复的。就是说HashMap 中的两个key值最终算出来的hash值是一样的,这不就冲突了嘛,那么这个后来的值覆盖前面的值,前面的值说凭啥啊,java官方说是的啊,不应该啊,这样可不就会丢掉元素,所以就让后来的值排在新来的值后面,这就形成了一个链表了。如果是2的n次幂,则求余运算是一样的。
2024-06-04 08:32:42
577
原创 常见的排序算法
所以我们的冒泡排序的核心思想就是在一个队列里面,从第一个哥们开始,如果第二个哥们比前面的矮,那么两个人交换位置,如果不矮就比较第二个哥们和第三个哥们的高度,依次类推,这样比较到最后,最高的那个哥们就被冒出来了排到最后了;这是第一轮冒泡,后面继续从第一个哥们开始,这次只要到倒数第二个哥们结束就行,这样就把第二高的哥们放到倒数第二高的位置了,反复进行,最终一列的哥们就是从矮到高了;那就是说我们要排序的话,就要从现有的还是混乱的队列中找到这个最小的元素,让他和这个现有的混乱的第一个元素进行交换;
2024-06-02 11:38:28
366
原创 浅谈JVM的类运行机制
解析就相当于把那些常量一一组合起来,然后相应的东西就有地址或者句柄啥的,这就是我们说的直接借用,然后变成相应的一个类名,方法,让类可以找到方法,方法可以找到类;.jar 里面的所有的class,哈哈哈,其他的class 它是不管的;类加载器说白了就是在jar包里面找到某个名字为xxx的class 的类文件,然后对这个文件进行解析,把这个类的一些静态方法,静态变量,对象,方法啥的放在jvm的内存里,这就相当于完成了一次我们所谓的加载,然后类的加载遵循个规则,兄弟们,叫做双亲委派模型。
2024-06-02 11:37:23
795
原创 Java 中的IO/NIO详解
一:Java IO 模型兄弟们,什么是Java的IO呢?首先我们看看这两个单词的全拼,不就是Input 和Output嘛?那么到底是什么的输入和输出呢?本质上在互联网的世界中,不就是数据的输入输出吗?而我们java 中对于数据的这个输入和输出都是基于线程来说的,那么线程在接收这个数据的输入和输出的时候线程的状态是怎么样的呢,在一直等待还是说先干自己的事,等数据来了再去接收这个数据呢?所以这个就涉及到了我们的这个IO模型了。它分为下面几种
2024-06-01 15:40:00
438
原创 数据结构中的线性表
顺序表里最常见的就是数组,不过还有分成了引用数组和动态数组,数组它是一系列相同类型的元素的集合,里面的元素类型必须一样,存放的都是比如五根笔,六本书,七台电脑这样的元素;说白了,就是这个动态数组的长度是会动态变化的,刚开始比如你申请了长度为6,实际上它的实际内存空间里面有10个元素的长度供你使用,比较常见的动态数组就是Python里面的List 和Java中的ArrayList。这个数组里面存的全是其它元素的地址,其实它本质上也是数组,不过存放的元素全部是其它元素的地址了,限定死了咱就是说;
2024-05-28 21:54:46
421
原创 JVM中的垃圾收集器
前面我们说到了,GC老大爷是统一管理维护这些垃圾清理的工作的,但是活不可能让老大爷干吧,这老胳膊老腿的,也不太能干的动啊,老大爷主要是做工作指导和工作分配,具体工作还得是我们一个个垃圾收集器去干,就像总裁下面有不同的秘书,有写报告的,有负责生活起居的,有开车的司机,有负责订酒店的等等,所以GC老大爷手下也有不同的垃圾收集器,让我们一同看看。经过了第二步之后,可能程序继续运行,某些对象的标记发生了变化,这个变化的记录那的确需要记录下来,这个时候也是需要停止其他的工作线程,为后面的清除做准备。
2024-05-26 17:41:07
698
原创 java的垃圾回收机制
哈哈哈,你大爷不愧是你大爷,讲的还挺清晰, 兄弟们是不是意犹未尽啊,不过是不是还有个疑虑,什么叫做不活跃的小屁孩,大爷说,“孺子可教也,这个是关键,不活跃的小屁孩可不就是生产线(线程)再也不太用的人力吗,就是对应我们书本上说的引用,你的作用都没了,不清理你清理谁,哈哈哈,感觉有亿点点残忍啊!所以给本大爷好好听话,乖乖接受监督。2: 本地方方法区和栈就不用说了,人会有自动入栈和出栈操作,当一个线程结束后,这个栈就空了,多自觉,都不用我催,而且人平时存储的就是一些局部变量和操作栈而已,字节数估计就三四个字节。
2024-05-26 09:57:44
959
原创 JVM 中的内存分配
2: 虚拟机栈,先给结论,这个也是线程私有的,为什么呢,首先我们来看看这个虚拟机栈里面包含了什么东西。随着一个方法的开始执行到结束,就是一个栈帧出入虚拟机栈的过程,而这个局部变量表当然是包含这个方法里面的自定义局部变量,操作数栈就是说明当前正在操作的变量,动态链接就是保存这个方法调用的其他方法的地址,而方法退出就是说这个方法是异常还是正常退出的地址的保存。兄弟们又会疑惑了,什么是Native方法呢?说白了就是这个方法的实现可以不使用Java,使用其他语言实现,哈哈哈,相当于不是亲儿子,有点私生子的味道。
2024-05-25 17:59:29
159
原创 操作系统一些基本概念详解
进程,按照官方的说法,就是一个操作系统里面调度和资源分配的基本单位,如果把一个操作系统比作一个工厂,进程是不是可以理解为一某一类产品的业务线,因为工厂在调度和分配资源的时候都是以业务线为基础去派发的;那么线程就可以比作为这个业务线里面的某条生产线,比如要生产一个矿泉水瓶的业务线,一个生产瓶盖的生产线就是一个进程,一个生产包装纸的生产线又是另一个进程。但是,其实,我们可以试着和生活联系下,比如,要说进程和线程,不都是干活的吗,不停地在电脑里面干活的吗,就像工厂运转起来了,工人和机器是不是都要不停的干活呢?
2024-05-25 16:15:28
190
原创 clickhouse 索引大白话
当我们的clickhouse在解析这个sql语句的时候,where的这个查询条件命中了我们的主键UserID,所以查询引擎就会走索引,它就会去把primary.idx 文件加载到内存中,然后使用二分法查找,对这个UserID进行比较,最终可以定位得到这个条件的UserID是位于如下的mark176的位置中,索引就如同我们的字典或者书的目录一样,就是为了让我们快速找到我们想要的数据,索引索引,就是一个引路人嘛,引领我们快速到达目的地。那么,clickhouse 中的索引具体是啥样的呢?
2024-04-06 22:22:24
952
1
原创 python3.7解决ModuleNotFoundError: No module named ‘_bz2‘
如果我们想要安装比如pandas的这个模块,我们会想到使用pip install pandas,系统在执行这个命令的时候,它首先会去把pandas相关的依赖一起整理出来,区分系统库和第三方库,先确认有没有系统库,没有的话就默认安装或者提示安装,之后再去python的第三方库中拉取其他第三方库安装。我们这个python3.7是新安装的,是不是运维少装了啥东西,应该是少了文件或者哪些包。笔者对python这一块不是很熟悉,所以我以为是缺少了相关的bz2的pip的包,但是实际上pip中没有相关的module。
2023-07-21 22:52:21
1255
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人