线段树
线段树 线段树是一种二叉树,也就是对于一个线段,我们会用一个二叉树来表示。 性质:节点 i 的权值 = 她的左儿子权值 + 她的右儿子权值。 1. 建树 根据这个思路,我们就可以建树了,我们设一个结构体 tree,tree[i].l 与 tree[i].r 分别表示这个点代表的线段的左右下标,tree[i].sum 表示这个节点表示的线段和。 我们知道,一颗从1开始编号的二叉树,结点 i 的左儿子和右儿子编号分别是 2×i 和 2×i+1。 再根据刚才的性质,得到式子:tree[ i ].sum = tree[i∗2].sum + tree [i∗2+1].sum ,就可以建一颗线段树了!代码如下(这里以区间求和的查询为例): 12345678910111213void build(int i,int l,int r){//递归建树 tree[i].l=l;tree[i].r=r; if(l==r){//如果这个节点是叶子节点 tree[i].sum=input[l]; return ; } //二...
两万字讲清楚:现在的AI产品有多难做?
两万字讲清楚:现在的AI产品有多难做? https://mp.weixin.qq.com/s/pMt_VMs6uq5wsPPscOyefA 这篇文章深入探讨了AI产品经理在处理大型AI模型时应该考虑的关键问题和机遇。 1. 关注API而非仅仅是产品 核心观点:产品经理应该深入理解大模型的API,因为这是模型能力的直接体现。产品的最终形态往往是API能力的延伸,但可能会因为各种工程限制而与API的能力有所差异。 实际意义:了解API的能力和限制可以帮助产品经理更准确地设计产品功能,避免过度依赖模型无法实现的功能。 2. AI与移动互联网的类比不恰当 核心观点:简单地将AI技术应用到所有应用中并不是一个有效策略。只有那些真正能够从AI中获得显著优势的应用才应该进行AI重构。 实际意义:这要求产品经理进行深入的需求分析和成本效益分析,以确定AI的投入是否真正值得。 3. 产品经理需要学会调用API 核心观点:产品经理应该具备直接与AI模型交互的能力,这有助于更好地理解模型的能力和局限。 实际意义:这种能力可以帮助产品经理在产品开发过程中做出更准确的决策,并能够快速迭代产品以适...
Transformer解析
Transformer解析(Attention Is All You Need) 【超详细】【原理篇&实战篇】一文读懂Transformer-CSDN博客 Transformer论文逐段精读【论文精读】_哔哩哔哩_bilibili 【超详细】【原理篇&实战篇】一文读懂Transformer-CSDN博客 大模型面试准备(十二):深入剖析Transformer - 残差连接和层归一化_残差层和归一化层-CSDN博客 Transformer通俗笔记:从Word2Vec、Seq2Seq逐步理解到GPT、BERT-CSDN博客 “Attention Is All You Need” 是一篇由 Ashish Vaswani 等人撰写的论文,发表于 2017 年的 NeurIPS 会议上。这篇论文提出了 Transformer 模型,Transformer是一种用于自然语言处理(NLP)和其他序列到序列(sequence-to-sequence)任务的深度学习模型架构。Transformer架构引入了自注意力机制(self-attention mechanism),这是一个...
大模型学习路线
大模型学习路线 现在门槛降低了,成本也降低了。大模型技术爆发,抓住机会。 开源大模型(离线,更安全)/在线大模型 微调:Lora->垂类 适用于用户意图识别 RAG:检索增强生成(一系列专家,提升表现幅度,降低幻觉) 只要提供了正确答案,大概率就不会答错 适合私有数据库 所以依赖于提供的数据库的信息,对数据质量要求比较高 推理更加缓慢(低于微调) 对知识库构建/信息压缩排名等(并非深度学习方面,需要深度学习算法工程师进行辅助) 提示词工程 【AI大模型】Prompt 提示词工程使用详解_大模型prompt的用法详解-CSDN博客 预训练:创造出属于自己的全新大模型 需要算力最多(微调其次,RAG和提示词工程对于算力的要求就没那么高) agent->担任80%脑力工作 一些课程 NLP FudanNLP/nlp-beginner: NLP上手教程 (github.com) 自然语言处理的入门练习 深度学习 跟李沐学AI的个人空间-跟李沐学AI个人主页-哔哩哔哩视频 (bilibili.com) 动手学深度学习 论文精读 https://...
xxl-job学习笔记
xxl-job学习笔记 基础概念 xxl-job是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 任务执行流程 执行流程 任务执行器根据配置的调度中心的地址,自动注册到调度中心 达到任务出发条件,调度中心下发任务 执行器基于线程池执行任务,并把执行结果放入内存队列、把执行日志写入日志文件中 执行器消费内存队列中的执行结果,主动上报给调度中心 当用户在调度中心查看任务日志,调度中心请求任务执行器,任务执行器读取任务日志文件并返回日志详情 搭建xxl-job xxl-job: 一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 (gitee.com) 使用docker搭建xxl-job 12345678910111213docker search xxl-jobdocker pull xuxueli/xxl-job-admin:2.4.0docker run -d \ -p 8088...
Java反射:获取类字段(getDeclaredFields())
Java反射:获取类字段getFields()方法和getDeclaredFields ()方法 1. 概念 反射是Java中一种强大的机制,允许在运行时获取、检查和操作类、方法、字段等信息,而不需要在编译时知道这些信息。 其中字段(Field)在Java中是类中用于存储数据的成员变量。在反射中,可以通过Field类获取和操作类的字段。 getFields(): 该方法用于获取某个类及其父类中所有的公有字段。公有字段是指用public修饰的字段。 这个方法对于需要获取类的公有属性时很有用,例如在某些框架或通用库中。 getDeclaredFields(): 该方法用于获取某个类中声明的所有字段,包括公有、私有、受保护的字段,但不包括继承的字段。 这个方法对于需要获取类的所有字段时很有用,尤其是在进行一些高级的操作时。 2. getFields() 12345678910111213141516171819202122import java.lang.reflect.Field;public class GetFieldsTest1 { class Us...
Java使用ES条件构造器BoolQueryBuilder
Java使用ES条件构造器BoolQueryBuilder 1. 检索前构造 12345678//1.构建SearchRequest请求对象,指定索引库SearchRequest searchRequest = new SearchRequest("data_info");//2.构建SearchSourceBuilder查询对象SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();//2.1 这个条件用于返回所有命中条件的数据数量, 不设置则返回大概数值sourceBuilder.trackTotalHits(true);//3.检索条件构造BoolQueryBuilder bqb = QueryBuilders.boolQuery(); 2. 条件构造 must可用filter代替,查询效率会更高,因为must会对结果进行_score评估 12345678910111213141516171819202122232425262728293031//3.1 完全匹配bqb.must(Q...
MySQL分页查询总结
MySQL分页查询总结 LIMIT语法: LIMIT {[offset,] row_count | row_count OFFSET offset} LIMIT子句可以被用于限制被SELECT语句返回的行数。 1234567使用两个参数时,第一个参数指定返回的偏移量,第二个参数指定返回的行数。初始行的偏移量为0(不是1):mysql> SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15使用一个参数时,指定从开头返回的行数:mysql> SELECT * FROM tbl LIMIT 5; # Retrieve first 5 rows 写法实现: 12345678910-- 分页查询 通用语句SELECT * FROM TABLE LIMIT (pageIndex-1)*pageSize,pageSize-- 第一页 每页100条SELECT * FROM EMP LIMIT 0,100-- 第二页 每页100条SELECT * FROM EMP LIMIT 100,100-- 第801页 每页100条SEL...
Java实现LRU的两种方式
Java实现LRU的两种方式 1. 直接继承LinkedHashMap 12345678910111213141516171819202122class LRUCache extends LinkedHashMap<Integer, Integer>{ private int capacity; public LRUCache(int capacity) { super(capacity, 0.75F, true); this.capacity = capacity; } public int get(int key) { return super.getOrDefault(key, -1); } public void put(int key, int value) { super.put(key, value); } @Override protected boolean rem...
Redis实现分布式锁及Redisson
Redis实现分布式锁及Redisson 分布式锁是控制分布式系统之间同步访问共享资源的一种方式。 在分布式系统中,常常需要协调他们的动作,若不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,这个时候,便需要使用到分布式锁。 例子:商品秒杀超卖 1. 无锁 这是一个订单库存的例子,库存stock为1,这里很容易会发现容易造成多次下单成功的错误。 2. 加同步锁 这里在单机情况下确实能够满足不出现超卖的问题。 缺点:如果作Nginx进行负载均衡+分布式集群部署,依然会出现超卖问题。 原因是同步锁synchronized是JVM级别的,每台服务器在并发情况下,只能锁住一个线程。 所以,如何处理这种分布式的情况呢? 3. Redis or Zookeeper 由于系统已经使用到了Redis,为了系统的轻量避免冗余引入新组件,选择通过Redis来进行实现分布式锁。 Redis实现分布式锁 1. SETNX和SET NX命令 [Windows版Docker安装Redis教程(保姆级),适合开发环境...