啥是大模型 介绍完了chatGPT的生成原理, 那么我们继续介绍介绍大模型。大模型的缩写是LLM,全称是Large Language Model, 所以这个大模型也可以被称作为大语言模型那么问题来了,为啥有了大模型呢,难道之前都是小模型吗?确实,大模型刚开始就是因为参数大,训练数据多所以就叫做大模型,在大模型之前的模型参数和训练数据相比之下确实小,这解释了大模型中的大字,那么模型两字该如何理解呢?是我们所说的数学模型、软件系统中的软件模型还是说科学研究中的理论假设或者时尚界的诸如实物的模型呢?
ChatGPT是如何生成长文的 比如我们先选取第一个词为我,我们可以从这500万个词中找到我后面跟的所有词吧,然后对应的这些词的出现次数我们可以拿到吧,比如”的”出现的次数为1万,”是”出现的次数为0.5万,所以”我” 后面出现的”的”概率相对来说最大,这样”我”后面是不是就可以跟”的”了,依次类推,”的”后面跟的词可能就是”家”,这样下来也可以让chatGPT生成一部短篇小说了;chatGPT其实是在做选择题,它并不知道下一个词是什么,只是选择概率比较大的词,然后生成对应的文章,所以问题的关键就是,如何知道下一个概率最大的词呢?
细说Flink状态管理 KeyedState 顾名思义就是某个key对应的某些状态的值,因为我们在进行keyBy的时候,我们是需要知道这个对应的key的value值有哪些,也需要知道这个value值有多少等,所以这个KeyedState 一般分为ValueState,ListState, MapState等,分别存储这些key对应的不同的状态类型,也就是不同的数据情况。3.1: 如果是memoryStateBackend, 状态的数据是存储在tm的内存中,checkpoint 的数据是存储在jm 的内存中。
jvm的各种性能检测工具 可以输出并修改运行时的java 进程的opts。用处比较简单,就是能输出并修改运行时的java进程的运行参数。这个的全称是JVM Statistics Monitoring Tool,说白了就是统计jvm的各种指标的,我们这边主要关注内存使用指标,一般我们后面要跟上pid的进程。这个说白了就是看进程中调用的各种栈,对于程序hung住排查调用的各种栈很有帮助,使用方法就是 jstack。2.1: 首先查看对应的堆内存使用的各种情况,堆内存溢出。第二个命令就是看这个pid 对应的对象的个数和大小。
数仓建模和数据治理 tmp 表转成view;一般采用将不同的分类实例化成不同的纬度,在公共维表中保存公共的纬度属性,比如淘宝中的淘系商品和旅游类商品分类,有公共的基础商品属性,也有些各自的特殊属性,旅游类的可能就是有酒店,门票啥的属性;一致性上卷,就是说一个纬度的属性是另一个纬度属性的子集,且两个纬度的公共属性是相同的,比如类目纬度是商品纬度的子集,那么可以基于相同的类目属性进行不同的业务探查,验证指标的正确性和合理性。而纬度则指的是刻画描述某些业务过程的一个个方面,也可以理解为“环境”,比如买家啊,卖家啊,商品啊,时间啊;
数据库,数据仓库,数据湖,湖仓一体到底是什么区别 这个时候就该我们的数据湖隆重登场了,他就是为存储历史的所有结构化,半结构化以及非结构化数据,历史所有的离线的,实时的,外部的,内部的数据而生的,而且是以成本比较低的对象存储为底座去进行数据存储的,支持近乎无限的扩展;但是,如果你要让数据库去分析为什么最近一个月的库存少了,订单数少了,那他就显得无能为力了。先说下上面的答案,数据仓库和数据湖可以是互相独立存在的,不存在谁是谁的缓存一说,但是如果涉及到湖仓一体的时候,数仓是结构化的数据访问入口,而底层的数据湖是可以作为数仓的底层的存储支持。
Flink,spark对比 最终打包成一个zip包上传。它的目的是为了控制一个taskManager 能运行多少个task,所以对资源进行了分配,划分成不同的slot,一般和cpu是1:1 的关系,所以一个算子分布在不同的taskManger 上面,在一个tm的并行度和slot是一比一的关系,那么全局的并行度就是我们自己设置的并行度了,不过我们在考虑的时候就是考虑单个tm里面的并行度好点;其实Flink 和Spark 也会进行数据的落盘,但是他们和mr的最大的本质不同就是他们可以把数据放在内存中,最后再落盘,而MR一定会落盘;
数仓的随想 6.7: 数仓分层,ods, dwd, dws, ads,前面三个才是数仓里面的东西,dws 是数据服务层,说白了就是根据一个个主题汇总起来的,做的是轻度汇总的工作,一般以日为单位进行汇总,比如日活跃设备数,日下单数,日注册用户数;5.1: 第一范式,1NF,属性不可切割,比如,某个表里的字段叫做商品,但是值不可能是5台电脑,因为5台应该是另一个字段的值,比如数量的字段;1.1:选择业务过程,选择我们感兴趣的业务作为整个数仓的分析的底层数据,比如下单业务,物流业务,售后业务,快递业务等等;
大数据Spark 面经 所以兄弟们可以看到,说白了,我们进行spark的编程的时候,就是基于RDD的,然后和算子一起,把RDD当作点,这些算子当成边,不就构建成了我们的这个有向无环图(DAG) 嘛;大家可以想想,这个spark的RDD 也是基于内存的计算,如果一个任务一直这样计算下去,比如算到90%的时候,机器突然宕机了,任务全部失败了,是不是又得重新计算,所以我们就要进行个中间数据的备份嘛,比如算完了一个stage的数据,先把它存储到外部系统,这样就不怕任务突然中断了;这两个算子分区内的逻辑和分区间的逻辑都是一致的;
大数据java面经一 15:什么是CAS 算法,就是比较并交换,CAS(V,E,N),v 就是这个变量,表示要更新的值,E 就是预期值,旧的值;5.8: 结构型模式之桥接模式,将抽象部分与它的实现部分分离,使得都可以互相变化,解决子类爆炸的问题,比如生产不同类型的车如果都放在一个生产线上,会相当的复杂,所以就抽象出来,搞发动机的一条线,搞电机的一条线,搞车载系统的一条线,然后生产之后组装起来,桥接模式里面都是定义的接口和类的组合。就是个资源让出的结果嘛,要么当前线程被阻塞了,被挂起了,正常执行完了等。
大数据Hive,Flink等面经 分布式快照参考的算法是Chandy-lamport的算法,其中最重要的一个机制就是checkpoint ,就是检查点,它就像一个守门员似的,当每批人经过它,它都会给大家插入一个编码,编码是递增的;就不用进行频繁的shuffle了,极大地提高了数据处理的速度;全称是Flink Complexible Event Processing, 就是复杂事件处理,它的流程就是设定一个源源不断的规则,对进来的事件流做个判断,如果有符合相关判断的事件就收集起来,然后做个告警,分别有patter,event等关键概念,
Flink CDC 实现原理 如果后期有个binlog的chunk 过来,比如是105,150和160的数据发生了变化,那么我们就会针对相应的值改动,并不会改动全部的值,改动效率就比较高了;简单点来说,就是一旦开启同步数据的事务了,Debezium 就会对全局加锁,先把当前加锁的这个时间点的全部数据select 出来,这需要一点时间的,然后这个时间节点的select 事务啊,update 事务啊,都会被阻塞,严重的时候会导致mysql 的整个进程都被hang 住了,提供不了服务了,所以我们Flink 就要进入2.x 时代。
别傻傻分不清SAS,SATA和SSD 协议,哈哈哈,兄弟们就可以理解为我们电脑要往硬盘中装东西,可以有几个通道,通道多是不是效率高,而且装东西的时候是不是类似要经过保安检查啥的,这个就是约定了,就是我们所说的协议了。哈哈哈,所以兄弟们就迫不及待地选择固态硬盘了是吧,别急,也得看你有没有钱了,固态硬盘好是好,但是价格肯定就是同级别容量下的机械硬盘的几倍;相信很多兄弟们之前听过硬盘,什么机械硬盘,固态硬盘,什么SATA硬盘,SAS,心里都在想,这tm地该怎么选?首先,兄弟们要知道,硬盘这个东西就是存储数据的,一个容器,帮你把数据都装进去的。
Kafka 如何保证数据可靠 对头,所以这就涉及到一开始分区的副本的leader 和follower 之间通信同步数据的问题,假设producer 发送一条消息到topiA 的partition-0,它有三个副本,我们要保证数据可靠肯定要确保老大leader把数据拿到手了,告诉了其他的副本兄弟之后,然后给producer 发送一个ack 表示确认消息已经收到了,你开始发送下一条消息吧,哥们。如果不怎么同步又会说你tm符合cap 定理嘛;所以这就涉及到了我们的topic 的分区的副本机制了,副本就是做容错的嘛,即使老大挂了,副本顶上。
Java 的设计模式(一) 说白了就是一个类只有一个对象实例,哈哈哈,不管谁去调用这个类,都是这样的,就是天王老子调用也是哈哈哈哈。3.2: 简单工厂模式,就是指定个生产线(这里是某个类),专门生产某种产品(这里也是某个对象实例),说白了就是某个类生产出其他对应类的对象实例。兄弟们都知道Java中有很多常见的设计模式,最全的是有23种设计模式,但是在工作中用到的也不是有那么多,我们就先来介绍下最常见的10中设计模式吧。工厂工厂,不就是根据需求生产出来所需要的产品吗?上述第三个有点问题,所以我们用电更高效的,内部类模式,如下所示。
线程并发随想 java 中出现volatile 就是为了打造一个更轻量级的锁,不要像synchronized 那样那么重,volatile 一般是用来修饰变量的,它保证修饰的变量修改了在所有线程中都是立马可见的的,说白了它就是在主内存中把这个变量修改,不是放在每个线程的cpu的高速缓存中读这个变量,(变量可见性)AQS 里面有两个关键点,一个是state,一个是阻塞队列;对这个变量的操作都是原子性的,在这里理解就是基本只有一步操作的,原子性说的是要么全部执行,要么都不执行,某个操作过程,这里对变量加了一把小锁;
浅谈线程池 兄弟们都知道,我们在搞多线程并发的时候,刚开始的时候是通过实现Runnable 接口或者 继承Thread 的类来构建线程的,但是这个线程创建和消费一般比较费资源,所以我们业界也就出现了使用线程池的方式,一个是可以复用线程执行任务,一个是可以不用频繁的创建消费线程。这个一看就是创建固定线程的线程池,如果池里面的线程都在执行任务,新的任务进来了就需要等待了;这个说白了就是一个需要时可以创建新的线程的线程池,而且没有固定数量,如果之前的线程还在就可以复用,而且会自动清理掉超过60秒以上没有使用的线程。
一文讲透java 集合 Set 说白了就是个无序的集合,这里的无序指的是放入的顺序和取出来的顺序不是一样的,比如某个元素a是第一个放入集合中的位置,但是你进入集合的第一个位置并不一定是元素啊,这就是说的Set 的无序,而且放入的元素是不会重复的。就是说HashMap 中的两个key值最终算出来的hash值是一样的,这不就冲突了嘛,那么这个后来的值覆盖前面的值,前面的值说凭啥啊,java官方说是的啊,不应该啊,这样可不就会丢掉元素,所以就让后来的值排在新来的值后面,这就形成了一个链表了。如果是2的n次幂,则求余运算是一样的。