极客公园对话 Zilliz 星爵:大模型时代,需要新的「存储基建」-程序员宅基地

技术标签: llama  人工智能  AIGC  

在这里插入图片描述

大模型在以「日更」进展的同时,不知不觉也带来一股焦虑情绪:估值 130 亿美元的 AI 写作工具 Grammarly 在 ChatGPT 发布后网站用户直线下降;AI 聊天机器人独角兽公司 Character.AI 的自建大模型在 ChatGPT 进步之下,被质疑能否形成足够的竞争壁垒 …

ChatGPT Plugins 插件发布之后,更多创业者开始担忧大模型的技术进步会把自己卷入「打击射程」,瞬时抹掉自己所在领域的技术积累和优势。

我们好像陷入了大模型所带来的「WTF 综合症」——在过山车般的技术加速度中,人们会在「what the fuck」的惊讶和「what’s the future」的思索之间,反复横跳。

冷静下来思考,在底层大模型的国产化浪潮以及应用层的红红火火之外,大模型领域还有什么是值得被关注的?

向量数据库(Vector database)在我们与行业人士的各种交流中屡被提及。它被看做 AI Infra 中的关键一环,这种专门用于存储、索引和查询嵌入向量的数据库系统,可以让大模型更高效率的存储和读取知识库,并且以更低的成本进行 finetune(模型微调),还将进一步在 AI Native 应用的演进中扮演重要作用。

  • 向量数据库之于大模型的价值和意义究竟是什么?它会不会被大模型本身的进步吞掉?

  • 围绕着大模型的软件开发范式将会被如何构建?向量数据库能发挥的作用是什么?

带着这些问题,极客公园找到了 Zilliz 创始人 & CEO 星爵进行交流。Zilliz 成立于中国上海,总部在美国硅谷,于 2019 年开源了全球首个向量数据库产品 Milvus,它在 GitHub 上获得了超过 1.8 万颗 Star,在全球拥有超过 1000 家企业用户,成为目前全球最流行的开源向量数据库。而早在 2022 年,Zilliz 就完成了累计超过 1.03 亿美金的 B 轮融资,估值达到惊人的 6 亿美金。


图|Zilliz 在 SIGMOD’21 发表的论文,Milvus 是全球真正意义的第一款向量数据库产品

在大模型热潮之前,整个向量数据库市场一年只有几亿美元。直到去年 ChatGPT 推出,如 killer app(杀手级应用)一般拉高了市场天花板,也让大模型和向量数据库开始真正出圈。

在今年 3 月的 NVIDIA GTC 大会,黄仁勋首次提及向量数据库,并强调对于构建专有大型语言模型的组织而言,向量数据库至关重要,而 Zilliz 也被官宣是 NVIDIA 的向量存储的官方合作伙伴。紧接着,OpenAI ChatGPT plugins 发布的官方文章中,Milvus 和 Zilliz Cloud 同时作为首批插件合作伙伴被提及,成为唯一一家开源项目与商业化云产品同时入选的向量数据库公司。而在近一个月之内,向量数据库迎来了融资潮,Qdrant 、Chroma 和 Weaviate 纷纷获得融资;而 Pinecone 也正式官宣了新的 1 亿美金 B 轮融资,估值达到了 7.5 亿美元 …

从 3 月 到 5 月,我们与星爵一起见证了向量数据库从默默无闻到成为行业大热的完整过程,并和他陆续探讨了大模型的演化、向量数据库的价值和意义,以及 AI Native 应用演进等一系列问题。

以下是对话精选,由极客公园整理:

01 大模型和小模型的混合时代

极客公园:在你看来大模型是什么?

星爵:大模型是一个智能处理器,是一个大脑。传统处理器是人工去编排电路,而大模型是用神经网络去编排电路。

大模型未来发展会更加强大,一方面会有中央处理的大模型,像 ChatGPT 的云端大脑,后面有数万块 GPU,它会奔着更大规模、更强能力的方向发展,但它的缺点也很明显,能耗和成本也比较高;另外一个维度,它会往更高的效率、更低的能耗比方向走,会有小模型出来,像 Dolly 模型(注:Databricks 发布的拥有 120 亿参数,类 ChatGPT 开源模型),每个人手提一个「大脑」。

极客公园:这个结论是怎么得出来的?

星爵:我是站在人类的科技发展史去看的,而不是大模型本身。

大模型本质是开启了人类智能计算的一个时代,但是计算能力一定会分化的,不可能说只有一个。

人类的计算最终都是从大分化成小的,「大」不见得是一个适合所有产品的需求。计算机最开始是主机时代,是在大机房里面的大型机,而现在 ChatGPT 本质也是如此。对于这种计算方式来说,缺点明显,响应很慢,吞吐率也不高。

出现小型化的趋势是因为功能的需求在分化,如果你要办公,你买一个上网的笔记本电脑就可以了,不需要一个超级计算机。

极客公园:会像主机到微机的时代演变,有清晰的阶段划分吗?还是说会是一个大模型和小模型混合的时代?

星爵:从大模型到小模型的大量涌现,这个演进其实就花了 6 个月,人类文明的进化已经变得更快了。现在如果你想跑一个微软出的 Deep Speed Chat 这种小模型,在笔记本上就行。

你可以认为小模型就相当于现在的 PC,大模型是现在的超级计算机。

我觉得大模型和小模型两者会并存下去。需求分化的本质背后,并不是一个技术问题,而是资源如何最优化配置的问题。如果说集中式的管理是最优的话,那么一定会做集中式的。

极客公园:大模型和向量数据库是什么关系?大多数向量数据库公司其实在大模型热潮出现前就有了,比较好奇大模型给向量数据库带来了什么?

星爵:在我看来,大模型是新一代的 AI 处理器,提供的是数据处理能力;那么向量数据库提供就是 memory,是它的存储。

向量数据库之前应用比较分散,ChatGPT 的出现,让向量数据库迎来了 killer app 时刻,一下子把行业的天花板拉高了几个数量级,把向量数据库面向的开发者从几万提升到全球几千万。就像过去做移动开发和应用开发,可能大家都会人手一个 MongoDB 数据库,以后也会人手一个向量数据库。

极客公园:目前大模型发展非常迅猛,会不会把向量数据库提供的价值直接被吞到大模型的体系里?

星爵:不管是大模型还是小模型,它本质上是对全世界的知识和运行规则的一个编码,是对我们人类所有数据的一个压缩。

但很难真的把所有数据放到大模型里面。比如有一种观点,ChatGPT 是一个相当高效的压缩编码方式,但它并不是无损压缩,并不能拥有所有知识,这个过程必然带来熵减和信息损失。如果把所有信息都编码到神经网络里面去,那么神经网络就会变得特别臃肿,参数规模会巨大无比,从而导致运行缓慢。所以不能全放进去,这意味着它可能需要外部的存储。

在计算机结构中也有类似的情况:CPU 里会有一个片上存储 SRAM,一般会做得比较小,因为片上存储的价格比内存 DRAM 要贵 100 倍,比磁盘要贵 1 万倍。神经网络就是大模型的片上存储,更大规模的模型拥有更多的片上存储。但是用神经网络来存储数据是相当昂贵的,会导致网络规模的急剧增大,所以大模型也需要一种更高效的数据存储方式,这就是神经网络外的片外存储,向量数据库就是它的片外存储。如果运行时发现有信息不知道,就到向量数据库里面来取。而向量数据库的存储成本比存到神经网络的成本要低 2 到 4 个数量级。

极客公园:你拿硬件做了类比,但是我们也可以看到有芯片公司是在做存算一体的架构,存储和计算放在一起。

星爵:本质上每一种计算都需要存储,计算和存储是两个最基本的抽象,但它们是可以相互转化的,可以用存储换计算,也可以用计算换存储。在达到一个更好地投入产出比的过程中,需要有一个平衡。

人类的第一个计算机就是存算一体的,后来为什么要分开?因为效率和成本。为什么说大模型不能够完全取代向量数据库,这是因为向量数据库的存储成本比大模型要低一个 1 千倍到 1 万倍,就看你要不要这么做而已。历史上,存储永远比计算便宜,计算也在降价,但你发现存储一直更便宜。

极客公园:但这个逻辑其实是硬件的逻辑,软件也会如此吗?

星爵:软件和硬件是相辅相成,互为支撑的。软件里为什么要把中间计算过程保存下来,不重算一次?为什么要做缓存,要保存中间结果?因为保存是为了少算,少算的原因是用空间换时间,用存储换计算资源,这在软件里面是最经典的一种设计模式。之所以软件这么设计,也是硬件特性所决定的:存储比计算要更便宜。

02 重新理解向量数据库的价值

极客公园:最近有个玩笑说,上一波投 AIGC 的 VC 公司基本上都后悔了,意思是在大模型之下很多应用层公司的壁垒都被抹掉了。私域数据会不会是构成竞争力的核心,向量数据库是不是可以在这个方向起作用?

星爵:帮助用户管理私域数据,确实是目前向量数据库提供的核心应用场景。很多公司和个人不愿意让大模型拿到自己的数据。

那么我们怎么样利用向量数据库和 OpenAI 这种大模型厂商交换数据呢?首先说一点,大模型本身是可以将互联网上的公域数据都爬到,对于私域数据可以用向量数据库先做好编排,转成向量数据库里的向量。现在要从私域数据的知识库里要找到问题的回答,可以利用向量数据库的相似查找能力,精确定位到库里的相关数据,然后把这几个信息编成一个 prompt。

尽管 prompt 的容量理论上可以无限,但这样效率太低,并且也难以实现。通过以上这样的方式就可以很容易控制是 2000 个 tokens,或者 8000 个 tokens,把它传给大模型给出一个答案。所以说,通过向量数据库可以用私域数据和大模型做一个增强和互补。

极客公园:大模型不会把私有数据都拿走?

星爵:国外这一波 AI 起来之后还有一个特别好的点,就是把隐私数据保护都搞清楚了。

为什么有那么多开发者敢用,那么多百亿美金的公司愿把自己的服务接到 OpenAI 里面去,就是 OpenAI 已经保证 prompt 只能作为 input(输入),不能存、不能训练、不能学习。要不然我把数据都给你了,你学完以后把我踢掉怎么办。国外已经在公有数据和私有数据之间划出了一个很大边界。我相信中国最后也会立法,走到这一步的。

极客公园:向量数据库在大模型中还有什么应用?

星爵:短期还有一种应用方式,用向量数据库给大模型更新数据。

其实这也是个成本的考虑,模型的 finetune(微调)更新的成本,是远大于使用向量数据库数据做存储。

不管是大模型还是小模型的 finetune 都比较慢。除非你做一个超级无敌计算机,实时获取新数据,也实时更新模型,但没必要。像 ChatGPT 训练所用的数据是截止到 2021 年 9 月,后面的事情它就不知道了,会给出错误答案。所以通过用向量数据库给大模型更新数据,也是可以一定程度上解决大模型「胡言乱语」的问题。

极客公园:Zilliz 还推出了 GPTCache,要给 ChatGPT 做缓存层。这个怎么理解?

星爵:缓存也是个很好的应用场景。我们认为全球的 CDN 和缓存会有重做一次的机会。未来 AI 的公共场景中信息交换的方式会发生变化,会向更智能,更偏向语义这个方向转变,并且消化的是更加非结构化的数据。以前的 CDN 是基于精确条件的查询,现在可以基于一些近似条件的查询。未来需要一个更智能的一个 CDN,更智能的一个缓存。

极客公园:最近很火的 AutoGPT 和向量数据库也有关联,向量数据库在其中扮演了什么角色?

星爵:向量数据库是 AutoGPT 中最为核心的组件之一。我们的产品 Milvus 已经接入到了 AutoGPT 中,这给我们带来了很大的流量。你可以这样理解,AutoGPT 等于 ChatGPT 加上向量数据库。通过向量数据库让 AutoGPT 具备了长期记忆能力,它知道之前搜的是什么,把历史全部记进去了,不然每次查询是没有上下文的。

极客公园:斯坦福大学和谷歌联手发布的论文《Generative Agents: Interactive Simulacra of Human Behavior》也引起了行业强烈关注,实验构建了一个虚拟小镇,小镇有 25 个有「记忆」的虚拟人,他们可以结合自己的「人设」,在社交活动中产生不同的决策和行为,这让我们看到了现实版的《西部世界》构建的可能性。这个实验里面非常重要的是虚拟人的记忆机制,向量数据库能做吗?


图|虚拟小镇

星爵:能。AutoGPT 加一个人物的头像,就可以打造一个最简单的智能 Avatar。以后各种智能体都要有个记忆,而记忆是向量数据库来提供,这个想象空间蛮大的。那它可能是个什么机会呢?还真不好去定义,人类历史上首次出现拥有独立记忆体的虚拟人,这是一个历史性的机会,对向量数据库的需求会有几万倍的增长。

这本质上还是使用向量数据库作为大模型的 memory,应用在了虚拟智能体这个场景。我觉得慢慢地大家在达成共识,只要做大模型的应用,就会用向量数据库来做记忆体。

极客公园:大模型要想处理复杂任务,首先要有记忆能力,然后基于记忆(上下文)做推理,而向量数据便是记忆体。那是只有向量数据库就够了,还是需要再加一些其他的?

星爵:基本就够了。因为所有大模型和 AI 里面的数据交换都是用向量。这个本质上是说片外跟片内的存储数据的交换格式是统一的。这也就是说为什么不能拿 Oracle 去做智能体的记忆;ChatGPT 也没有选 MongoDB,也没有选 Oracle,因为它们都是不适合大模型的。

极客公园:是不是可以这样理解,把大模型看成是一个基于自然语言编程的新型计算机,向量数据是它最原生的数据,向量数据库是它最原生的数据库,这其实是一个完整的体系?

星爵:是的。神经网络的确是向量,因为它所有的信息传输都是向量,每一层的参数也都是向量。所以能看成是个以向量(embedding)为基础架构的一套新的计算体系结构。

这个体系结构简单说来就是「CVP Stack」。其中「C」是 ChatGPT 这类大模型,负责向量的计算;「V」是向量数据库(vector database),负责向量的存储;「P」是 Prompt Engineering,负责向量的交互。

03 AI Native 时代的应用演进

极客公园:对于 AI Native 时代的应用开发来说,什么变得更重要了?什么不重要了?

星爵:在大模型开发时代,我率先提出了前面提到的「CVP Stack」概念,现在也逐渐被广泛接受了。

这里要特别指出的是,我对于「P」的定义和理解会更加开放一些,不限于 prompt engineering。它本质上是个创造的过程,而不是说简单的写 prompt。「P」的核心是提问能力,或者说是找到需求、找到市场的一个能力,比如说你如何设计你的用户流程,如何找到一个好的商业化落地的场景,这都是包含在「P」中。

对于现在的开发者来说,不管你是产品经理还是前端工程师,用 ChatGPT 加上向量数据库,写好 prompt,再用 LangChain 把项目串起来,基本用上一周就可以写个应用出来,这极大地降低了大模型应用的开发成本。

极客公园:面向大模型时代,你对 Zilliz 这家公司更准确的定义是什么?

星爵:我们是一家 DB for AI 的公司,大概 3 年前,我们发了这个领域第一篇 SIGMOD 论文的时候,提出了这个概念,但它是一个学术界的讲法。如果按照更好理解的方式,我们其实的是一个 AI Native 的数据库公司。

过去 10 年最大的机会是做 Cloud Native(云原生)的 Data Infra,产生了 Snowflake 这样的巨头;未来 10 年最大的机会是做 AI Native(AI 原生)的 Data Infra,像 Zilliz 这样的向量数据库公司将会迎来历史性机遇。

极客公园:这一波大模型创业,应用层创业者被问得最多的是,怎么去建立自己的竞争壁垒,而不被大模型本身的进步「淹死」?你怎么看壁垒这个问题?

星爵:应用层其实是有壁垒,技术壁垒变低了,那么其他的壁垒就变高了,我觉得创意和运营变得更重要了。

极客公园:与中国关注应用层和大模型层不同,美国在 AI Infra 上迎来了开源的繁荣,AI Infra 的竞争格局会是怎么样?中国接下来在 AI Infra 上有什么值得期待的吗?

星爵:Infra 是一个赢者通吃的市场,像 Snowflake 在云原生数据库领域就是一马当先。

我觉得中国在这一块还没开始,中国大模型比国外大概落后了半年。Infra 的话,我觉得中国可能还会落后半年到 1 年。我觉得 AI Infra 在接下来的半年里会有一个史无前例的快速发展。

04 爆火背后的坚持和运气

极客公园:3 月的 NVIDIA GTC 大会上,黄仁勋强调向量数据库对于大模型至关重要,还宣布了你们是 NVIDIA 的向量数据库的合作伙伴。这中间发生了什么故事?


图|NVIDIA GTC 大会,黄仁勋首次提及向量数据库,并强调对于构建专有大型语言模型的组织而言,向量数据库至关重要

星爵:我们在创业之初就坚定地认为 AI 时代的计算一定是异构的,也一直在坚持包括 GPU 加速在内的异构计算的技术路线。

NVIDIA 是在去年下半年看到整个 AI 的发展趋势中,向量数据的处理会越来越重要,非常希望更多的企业能够把 GPU 加速用起来。他们在全球范围内调研和接触向量数据库领域的公司和团队,但也发现真正能够在异构计算上面有布局、有实力的只有我们一家。

NVIDIA 在深入地了解我们之后,也成为了我们 Milvus 开源社区里一个很重要的贡献者。除了共同发布 GPU 加速向量数据库,NVIDIA 还派了几名的工程师专门给 Milvus 贡献代码。

此外,NVIDIA 还有一个用 GPU 加速的开源推荐系统框架 Merlin,它把 Milvus 也做成 Merlin 中的一个关键部件,帮推荐系统去管理下面的数据。现在 NVIDIA 不仅仅是我们的合作伙伴,同时也成为我们的一个大用户。

极客公园:OpenAI 又是什么样的故事?我看到在公布 ChatGPT plugins 发布的官方文章中,Milvus 和 Zilliz 是首批的合作伙伴,贡献了向量数据库插件。


图|OpenAI 发布 ChatGPT plugins 的官方文章中,Zilliz 的产品被提及了两次

星爵:OpenAI 的话就更加简单了,一年前就已经有一些合作了。他们和我们说要做一个平台,就是 ChatGPT plugins,看到我们的向量数据库是全球最流行和最具开发者社区影响力的,因此希望加入。最开始我们的心态很平和,觉得是基础的开源兼容合作。但 plugins 发布后,我们获得了来自大模型领域开发者和 GPT 用户群体的空前关注,这个是我始料未及的。

极客公园:既然向量数据库这么重要,会不会担心国内别人再做一个向量数据库?

星爵:说实话我们很欢迎,因为向量数据库还处于发展的早期阶段,还需要更多的市场教育。

极客公园:对于「为什么是你们」这个问题,你是怎么思考的?

星爵:我也想不到今年会有机会和大家都去谈向量数据库。之前我每年都跟别人讲,向量数据库是接下来特别牛逼的事情,但大部分人听完之后说,有趣,你有这个想法和愿景,就好好干。

现在回头看,没有坚定的愿景和长期主义的坚持,我们不可能走到现在。

当然,一个成功的企业也需要有些好的运气。比如说,我们历史上每次融资都能够遇到一些拥有相同愿景、坚持长期主义的投资人。我们今年开始准备做商业化,刚好遇到大模型的「iPhone 时刻」,一下子把我们推到了聚光灯下。之前有人会怀疑我们的商业化潜力,但现在有人和我说 Zilliz 想不挣钱都很难。

很多时候,你坚持在做一些难的事情,但是很多时间点你没有赶上,你可能会死。因为其实很多优秀的企业也是这么死掉的,尽管它的产品和技术很好,但它跟市场经济发展的趋势不吻合,跟用户需求爆发的时间点不吻合。

对于可以掌控的,那我们就拼命去做成功的必要条件;而有些是无法控制的,对我们来说的话,很感恩这种运气。

极客公园:所以你是怎么看自己的?是长期主义的胜利者?

星爵:幸存者更恰当一些。

极客公园:大模型给向量数据库带来的是什么程度的加速?

星爵:是指数级的增长,过去 6 个月开发者的增长量大概能顶得上我们过去三年的。

这是一个向量数据库开始疯狂增长的时代,也是 AI-native 数据库未来十年高速增长的开端。

本文为转载文章,原文于 2023 年 5 月 10 日 刊发于「极客公园」,作者为王式。


  • 如果在使用 Milvus 或Zilliz 产品有任何问题,可添加小助手微信 “zilliz-tech” 加入交流群

  • 欢迎关注微信公众号“Zilliz”,了解最新资讯。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44839084/article/details/130628468

智能推荐

while循环&CPU占用率高问题深入分析与解决方案_main函数使用while(1)循环cpu占用99-程序员宅基地

文章浏览阅读3.8k次,点赞9次,收藏28次。直接上一个工作中碰到的问题,另外一个系统开启多线程调用我这边的接口,然后我这边会开启多线程批量查询第三方接口并且返回给调用方。使用的是两三年前别人遗留下来的方法,放到线上后发现确实是可以正常取到结果,但是一旦调用,CPU占用就直接100%(部署环境是win server服务器)。因此查看了下相关的老代码并使用JProfiler查看发现是在某个while循环的时候有问题。具体项目代码就不贴了,类似于下面这段代码。​​​​​​while(flag) {//your code;}这里的flag._main函数使用while(1)循环cpu占用99

【无标题】jetbrains idea shift f6不生效_idea shift +f6快捷键不生效-程序员宅基地

文章浏览阅读347次。idea shift f6 快捷键无效_idea shift +f6快捷键不生效

node.js学习笔记之Node中的核心模块_node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是-程序员宅基地

文章浏览阅读135次。Ecmacript 中没有DOM 和 BOM核心模块Node为JavaScript提供了很多服务器级别,这些API绝大多数都被包装到了一个具名和核心模块中了,例如文件操作的 fs 核心模块 ,http服务构建的http 模块 path 路径操作模块 os 操作系统信息模块// 用来获取机器信息的var os = require('os')// 用来操作路径的var path = require('path')// 获取当前机器的 CPU 信息console.log(os.cpus._node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是

数学建模【SPSS 下载-安装、方差分析与回归分析的SPSS实现(软件概述、方差分析、回归分析)】_化工数学模型数据回归软件-程序员宅基地

文章浏览阅读10w+次,点赞435次,收藏3.4k次。SPSS 22 下载安装过程7.6 方差分析与回归分析的SPSS实现7.6.1 SPSS软件概述1 SPSS版本与安装2 SPSS界面3 SPSS特点4 SPSS数据7.6.2 SPSS与方差分析1 单因素方差分析2 双因素方差分析7.6.3 SPSS与回归分析SPSS回归分析过程牙膏价格问题的回归分析_化工数学模型数据回归软件

利用hutool实现邮件发送功能_hutool发送邮件-程序员宅基地

文章浏览阅读7.5k次。如何利用hutool工具包实现邮件发送功能呢?1、首先引入hutool依赖<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.19</version></dependency>2、编写邮件发送工具类package com.pc.c..._hutool发送邮件

docker安装elasticsearch,elasticsearch-head,kibana,ik分词器_docker安装kibana连接elasticsearch并且elasticsearch有密码-程序员宅基地

文章浏览阅读867次,点赞2次,收藏2次。docker安装elasticsearch,elasticsearch-head,kibana,ik分词器安装方式基本有两种,一种是pull的方式,一种是Dockerfile的方式,由于pull的方式pull下来后还需配置许多东西且不便于复用,个人比较喜欢使用Dockerfile的方式所有docker支持的镜像基本都在https://hub.docker.com/docker的官网上能找到合..._docker安装kibana连接elasticsearch并且elasticsearch有密码

随便推点

Python 攻克移动开发失败!_beeware-程序员宅基地

文章浏览阅读1.3w次,点赞57次,收藏92次。整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)近年来,随着机器学习的兴起,有一门编程语言逐渐变得火热——Python。得益于其针对机器学习提供了大量开源框架和第三方模块,内置..._beeware

Swift4.0_Timer 的基本使用_swift timer 暂停-程序员宅基地

文章浏览阅读7.9k次。//// ViewController.swift// Day_10_Timer//// Created by dongqiangfei on 2018/10/15.// Copyright 2018年 飞飞. All rights reserved.//import UIKitclass ViewController: UIViewController { ..._swift timer 暂停

元素三大等待-程序员宅基地

文章浏览阅读986次,点赞2次,收藏2次。1.硬性等待让当前线程暂停执行,应用场景:代码执行速度太快了,但是UI元素没有立马加载出来,造成两者不同步,这时候就可以让代码等待一下,再去执行找元素的动作线程休眠,强制等待 Thread.sleep(long mills)package com.example.demo;import org.junit.jupiter.api.Test;import org.openqa.selenium.By;import org.openqa.selenium.firefox.Firefox.._元素三大等待

Java软件工程师职位分析_java岗位分析-程序员宅基地

文章浏览阅读3k次,点赞4次,收藏14次。Java软件工程师职位分析_java岗位分析

Java:Unreachable code的解决方法_java unreachable code-程序员宅基地

文章浏览阅读2k次。Java:Unreachable code的解决方法_java unreachable code

标签data-*自定义属性值和根据data属性值查找对应标签_如何根据data-*属性获取对应的标签对象-程序员宅基地

文章浏览阅读1w次。1、html中设置标签data-*的值 标题 11111 222222、点击获取当前标签的data-url的值$('dd').on('click', function() { var urlVal = $(this).data('ur_如何根据data-*属性获取对应的标签对象

推荐文章

热门文章

相关标签