[论文分享] When deep learning met code search

news2024/11/25 14:45:30

When deep learning met code search [ESEC/FSE 2019]

José Cambronero MIT CSAIL U.S.A.
Hongyu Li Facebook, Inc. U.S.A.
SeohyunKim Facebook,Inc. U.S.A.
KoushikSen EECSDepartment,UCBerkeley U.S.A.
SatishChandra Facebook,Inc. U.S.A.

最近有多个关于使用深度神经网络进行自然语言代码搜索的建议。这些建议的共同点是将代码和自然语言查询嵌入到真实的向量中,然后使用向量距离来近似代码和查询之间的语义相关性。有多种方法可用于学习这些嵌入,包括仅依赖于代码示例语料库的无监督技术,以及使用成对代码和自然语言描述的对齐语料库的有监督技术。这种监督的目标是生成与查询和相应所需代码片段更相似的嵌入。
显然,在是否使用监督技术、使用何种方法、使用何种网络和培训来进行监督方面都有选择。本文将首先系统地评估这些选择。为此,我们将最先进技术的实现汇编在一个通用平台上,训练和贬值语料库。为了探索网络复杂性中的设计空间,我们还引入了一个新的设计点,将现有的无监督技术扩展为最小监督技术。
我们的评估表明:1. 在现有的无监督技术上添加监督可以提高性能,但不一定很大; 2. 简单的监督网络比复杂的基于序列的代码搜索网络更有效; 3.虽然使用文档字符串进行监督很常见,但文档字符串的有效性与更适合查询的监督语料库之间存在相当大的差距。

一句话:系统评估监督学习,方法,网络对代码搜索任务的影响;提出新的设计点,将现有的无监督技术扩展为最小监督技术。

导论

Overview

图2提供了神经代码搜索的总体概述,并概述了不同的技术,我们将在本文中详细介绍这些技术。神经代码搜索系统的核心抽象是嵌入的概念,它是共享向量空间中输入的向量表示。通过计算向量相似度度量,如余弦相似度,在这些嵌入上,搜索可以检索与用户查询在语义上相关的代码片段。例如,在图2中,查询“我如何遍历hashmap?”'通过一种可能的技术(NCS)映射到向量。候选代码片段也使用相同的技术映射到向量。
在这里插入图片描述
候选代码片段可以使用向量相似性进行排序。神经代码搜索的一个关键挑战是如何以向量相似性与语义相关性相一致的方式学习这些嵌入。如图2所示,用于学习这些表示的模型可以大致分为无监督和有监督两类。在我们探索神经技术优势的过程中,我们从NCS开始,这是我们之前构建的一种有效的、无监督的神经代码搜索技术[29]。由于NCS显示出有希望的结果,我们想通过额外的设计增强来试验改进这一基线的可能性。特别是,最近的工作[15,20]提出了有前途的监督神经代码搜索技术,分别标记为CODEnn和SCS,它们成功地使用源代码和文档字符串的语料库学习代码和自然语言嵌入。
这种监督的目标是学习为用户查询生成更多相似向量的映射和相应的所需代码。在图2中,实线箭头描述了这个目标,当使用监督模型进行映射时,实线箭头将查询和正确代码片段的嵌入移动得更近。

有如此多的技术可供选择,试图设计和部署代码搜索解决方案的人如何做出明智的选择? 例如,监管听起来是个好主意,但相对于获取监管数据的开销,它能带来多少好处呢?与我们在本文中介绍的一个更简单的网络(图2中的UNIF,下面将进一步描述)相比,更复杂的网络(具有更多参数)能带来多少价值(如果有的话)?当模型应用于真实用户查询时,使用文档字符串进行的模型监督是否可能限制性能? 在这项工作中,我们试图定量地理解这些权衡。为此,我们在上述代码搜索技术的背景下制定实验。

NCS: Facebook开发的一种神经代码搜索的无监督技术[29],它只使用来自代码语料库的词嵌入。
CODEnn: 最近一篇关于使用深度神经网络进行代码搜索的论文中的一种监督技术[15],它使用多个基于序列到序列的网络,并且被证明优于其他最先进的代码搜索技术。我们使用作者提供的实现[16]。
SCS: 一个使用多个序列到序列网络的监督神经代码搜索系统。我们使用作者在博客文章[20,21]中提供的实现。
UNIF: 我们自己创造的基础NCS技术的监督扩展。UNIF使用基于词袋的网络,与基于词序列的网络相比,其复杂性显著降低。这个简单的模型是本文的一个新贡献。

在这里插入图片描述

Contributions

(1) 我们相信这是第一篇比较最近在同一平台上运行的神经代码搜索系统和使用相同语料库进行评估的论文。
(2) 我们提出了神经代码搜索系统谱中的一个新的设计点:UNIF,它是NCS的一个扩展,最小程度地增加了监督,没有其他任何东西。
(3) 我们的发现是,UNIF优于一些更复杂的网络设计(CODEnn和SCS)以及NCS(无监督技术)。此外,在监督中使用的对齐语料库的选择是非常相关的:一个理想化的训练语料库表明,监督技术可以提供令人印象深刻的性能,并突出了在典型代码和文档字符串对齐语料库上进行训练可能不会立即明显的性能差异。

方法

NCS

在NCS[29]中,一种以神经代码搜索的一般概念命名的特定技术,嵌入函数 E c E_c Ec E q E_q Eq 是使用fastText[7] (类似于word2vec[27]) 和传统信息检索技术 (如TF-IDF) 的令牌级嵌入的组合来实现的。因此,该技术不使用传统的深度神经网络,也不使用监督训练。NCS计算一个嵌入矩阵 t ∈ R ∣ V c ∣ × d t ∈ R^{|V_c| × d} tRVc×d,其中 ∣ V c ∣ |V_c| Vc 为编码标记词汇表的大小, d d d 为标记嵌入的选择维数, T T T k k k 行为第 k k k 个单词 V c V_c Vc 的嵌入。
NCS将相同的嵌入矩阵应用于代码片段和查询,如下所示。令 c = { c 1 , … , c n } c = \{c_1, …, c_n\} c={c1,,cn} q = { q 1 , … , q m } q = \{q_1, …, q_m\} q={q1,,qm} 分别将代码片段和查询表示为令牌的多集(即顺序不敏感)。NCS生成一袋嵌入向量 { T [ c 1 ] , … , T [ c n ] } \{T[c_1], …, T[c_n]\} {T[c1],,T[cn]} 为代码片段, { T [ q 1 ] , … , T [ q m ] } \{T[q_1], …, T[q_m]\} {T[q1],,T[qm]} 表示查询, T [ w ] T[w] T[w] 是token w w w 在矩阵T中的嵌入向量。
为了将代码标记嵌入包组合成单个代码向量 e c e_c ec, NCS对由其相应的TF-IDF权重加权的唯一标记集的嵌入求和。TF-IDF权重旨在增加在代码片段中频繁出现的令牌的权重,并减少在所有代码语料库中全局频繁出现的令牌的权重。

在这里插入图片描述

UNIF: A Supervised Extension of NCS

接下来我们将介绍UNIF,因为它是NCS技术的监督最小扩展。在该模型中,我们使用监督学习来修改初始标记嵌入矩阵 t t t,并分别为代码和查询标记生成两个嵌入矩阵 T c T_c Tc t q t_q tq。我们还用学习到的基于注意力的加权方案取代了代码标记嵌入的TF-IDF加权。我们将这种扩展的方法称为嵌入统一(UNIF)。
我们假设一个对齐的代码片段语料库及其自然语言描述可用于训练。我们将这个语料库表示为 ( c , q ) (c, q) (c,q) 的集合,其中 c c c 是令牌包 c 1 , … , c n c_1, …, c_n c1,,cn 来自一个代码片段,而 q q q 是来自其相应的自然语言描述的一组令牌。
函数 E c E_c Ec E q E_q Eq 的构造如下: 设 T q ∈ R ∣ V q ∣ × d T_q ∈ R^{| V_q | × d} TqRVq×d T c ∈ R ∣ V c ∣ × d T_c ∈ R^{|V_c| × d} TcRVc×d 为两个嵌入矩阵,分别将自然语言描述(特别是文档字符串和查询)和代码标记中的每个单词映射到长度为 d d d 的向量。这两个矩阵使用相同的初始权值 T T T 进行初始化,并在训练期间分别进行修改。
对于每个代码片段获得一个嵌入向量集合 { T c [ c 1 ] , . . . , T c [ c n ] } \{T_c[c_1],...,T_c[c_n]\} {Tc[c1],...,Tc[cn]}, 同样,对于每个描述 q q q,我们计算一个简单的平均值,将查询令牌嵌入组合成一个向量。简单平均也存在于NCS中,我们发现它在实验中优于基于注意力的权重。
为了将每一集合代码 token 向量组合成捕获相应实体语义的单个代码向量,我们使用注意力机制来计算加权平均值。注意权值 a c ∈ R d a_c ∈ R^d acRd 是一个 d d d 维向量,是在训练过程中习得的。 a c a_c ac在NCS中充当TF-IDF权重的学习对等物。

在这里插入图片描述

在这里插入图片描述

CODEnn

与UNIF类似,CODEnn[15]也使用神经网络对 E c E_c Ec E q E_q Eq 进行建模,并采用监督学习; 然而,使用的网络更加复杂和深入。我们坚持原作者的命名,将这个模型称为CODEnn,即代码描述嵌入神经网络的缩写。CODEnn没有将代码段视为一袋令牌,而是从包含代码段的方法的名称、代码段中的API调用序列和代码段中的一袋令牌中提取单词序列。从方法名中提取单词序列是通过将方法名拆分为骆驼大小写和蛇形大小写来实现的。
方法名序列和API序列作为两个独立的双向长短期记忆(bi-LSTM)网络的输入。在对方法名和API序列应用两个独立的 LSTM 之后,CODEnn获得两个隐藏状态序列。CODEnn总结每个这样的隐藏状态序列以获得单个向量。总结一下,CODEnn使用最大池函数。
代码标记包中的每个标记单独作为前馈密集神经网络的输入,输出向量被最大池化。最后的代码嵌入是通过将这三个向量(两个来自 LSTM,一个来自前馈网络)连接起来,并将它们提供给一个密集的神经网络,该神经网络产生一个汇总向量等。
CODEnn使用双向 LSTM 实现函数 E q E_q Eq,它将在doc字符串中找到的代码片段的描述作为输入序列,以产生 E q E_q Eq。图5提供了该体系结构的概述。

SCS

我们引入了另一种基于监督序列的深度神经网络,用于代码搜索,由GitHub的数据科学团队描述和实现[20]。我们将这个模型称为SCS,即语义代码搜索(Semantic Code Search)的缩写。LSTM网络[26]为训练语料库中的文档字符串学习语言模型[32]。该模型可用于嵌入自然语言并计算给定自然语言输入的概率。
最后一个模块学习一个转换(以前馈层的形式)来预测给定代码令牌序列的查询嵌入。为了学习这种转换,模块采用代码到文档字符串模型的编码器部分,冻结其层,并在代码序列输入和使用语言模型生成的相应查询嵌入上训练网络。最后的训练阶段通过将编码器层解冻几个epoch来微调整个网络。SCS使用代码到文档字符串模型的这个微调编码器部分作为 E c E_c Ec,使用语言模型作为 E q E_q Eq。图6提供了该体系结构的概述。

在这里插入图片描述

表1提供了在学习 E c E_c Ec E q E_q Eq 时使用监督的模型的网络细节概述:UNIF, CODEnn和SCS。

在这里插入图片描述

实验

我们的评估使用不同的数据集和基准。为了清晰起见,我们使用以下术语:
在这里插入图片描述

Training Corpora

coden - java - train是[15]作者公开发布的数据集。这个语料库由大约1600万个预处理的Java方法及其相应的文档字符串组成,用于训练。该数据集包括四种类型的输入:方法名称序列、API序列、一组方法体令牌和文档字符串序列。另外,我们通过将方法名称序列连接到API序列并将此连接的序列视为一袋令牌来派生另一个输入。这种派生的输入用于训练联合部队和SCS。
GitHub-Android- train是一个Android专用的语料库,我们通过收集大约26,109个GitHub存储库中的Android标签来构建。我们选取了所有带有文档字符串的方法(总共大约787,000个),并将这些方法用作训练数据。
StackOverflow-Android-Train是一个android专用的训练语料库,我们通过收集StackOverflow问题标题和代码片段答案来构建。我们通过从Stack Exchange公开发布的数据转储中提取所有带有Android标签的Stack Overflow帖子来准备这个数据集[31]。

Search Corpora

CODEnn-Java- search:由CODEnn的作者发布的400万个惟一的Java方法。
GitHub-Android- search:从GitHub收集的550万个独特的Android方法。这个语料库来源于用于构建GitHub-Android-Train的相同26,109个存储库,但也包括没有可用文档字符串的方法。

Benchmark Queries

Java-50 是一组50个查询,用于评估原始论文中的CODEnn。这些查询对应于Stack Overflow票选的前50个Java编程问题。作者包括在Java中有“具体答案”的问题,包括在带有代码的线程中可接受的答案的问题,并且不是重复的问题。当在这个基准上进行评估时,模型是在coden - java - train上训练的。
Android-287 是一组287个android特定查询,用于评估原始论文中的NCS。这些问题由脚本根据以下标准选择:(1)问题标题包含“Android”和“Java”标签;(2)存在一个赞码(upvoted)答案;(3)在GitHub Android仓库的语料库中至少有一个匹配的真实代码片段。在此基准上进行评估时,除非另有说明,否则模型将在GitHub-Android-Train上进行训练。

RQ1

基于成对代码和自然语言的语料库的监督,扩展有效的无监督代码搜索技术是否会提高性能?
如3.2节所述,UNIF是NCS的扩展,它在训练过程中增加了监督来修改嵌入,并取代了用于将代码标记嵌入与学习到的注意组合在一起的TF-IDF权重。表3显示了UNIF在Java-50中回答了更多的问题。UNIF提高了Android-287中排名前10的答案的数量,但对于排名前1的答案的表现略差。我们得出的结论是,扩展NCS(一种无监督技术),通过监督可以提高代码搜索的性能,但在我们的数据集上并不一致。

在这里插入图片描述

RQ2

更复杂的网络是否能提高监督神经代码搜索的性能?
当选择可能的监督技术时,神经代码研究系统设计者可能会选择合并更复杂的架构,如CODEnn或SCS,或者倾向于一个简单的架构,如在UNIF中使用的架构。为了解决这个问题,我们考虑了不同技术回答的查询的数量,以及它们的计算成本。
我们首先根据正确回答的查询数量比较模型的性能。表4显示了使用简单词袋方法的UNIF在两个基准查询集上的性能都优于CODEnn和SCS。在这两种情况下,CODEnn的表现都优于SCS。

在这里插入图片描述

表5显示了每列中推理时间相对于UNIF的比率,因此高于1.0的值表示该列的推理较慢。基于序列的网络,如CODEnn和SCS,需要更长的时间来嵌入代码和自然语言输入。请注意,所有系统都可以离线嵌入代码片段,并且实时嵌入查询所需的时间相对较少。然而,从简单的UNIF到更复杂的网络(CODEnn和SCS),嵌入代码和查询所需时间的相对增加突出了这些网络执行的计算量的增加。

在这里插入图片描述

RQ3

基于文档字符串作为训练语料库的自然语言组成部分的监督效果如何?
到目前为止,所介绍的监督技术在训练期间使用了相同的自然语言:文档字符串。文档字符串被用作用户查询的代理,并允许神经代码搜索从业者收集相当大的对齐数据集用于训练。然而,当在GitHub-Android-Train上训练时,搜索性能并不总是提高,与预期相反。
表6显示,当我们在StackOverflow-Android-Train上进行训练时,所有有监督的技术都得到了显着改善(只有一个例外,使用SCS回答的查询在前1中)。这突出了有监督技术可以提供的令人印象深刻的搜索性能,如果允许访问具有更好地匹配用户查询的自然语言组件的理想训练语料库。

在这里插入图片描述

总结

References

[7] Piotr Bojanowski, Edouard Grave, Armand Joulin, and Tomas Mikolov. Enriching word vectors with subword information. Transactions of the Association for Computational Linguistics, 5:135–146, 2017.
[15] Xiaodong Gu, Hongyu Zhang, and Sunghun Kim. Deep code search. In Proceedings of the 40th International Conference on Software Engineering, pages 933–944. ACM, 2018.
[16] Xiaodong Gu, Hongyu Zhang, and Sunghun Kim. Deep code search github repository, 2018. URL: https://github.com/guxd/deep-codesearch/#54130b6be41fc5d73c4ebb8422942a7b53ad4024
[20] Hamel Husain and Ho-Hsiang Wu. How to create natural language semantic search for arbitrary objects with deep learning, 2018. URL:https://towardsdatascience.com/semantic-code-search-3cd6d244a39c.
[21] Hamel Husain and Ho-Hsiang Wu. Towards natural language semantic code search, 2018. URL: https://githubengineering.com/towards-natural-languagesemantic-code-search/.
[26] Stephen Merity, Nitish Shirish Keskar, and Richard Socher. Regularizing and Optimizing LSTM Language Models. arXiv preprint arXiv:1708.02182, 2017.
[27] Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg S Corrado, and Jeff Dean. Distributed representations of words and phrases and their compositionality. In Advances in neural information processing systems, pages 3111–3119, 2013.
[29] Saksham Sachdev, Hongyu Li, Sifei Luan, Seohyun Kim, Koushik Sen, and Satish Chandra. Retrieval on source code: a neural code search. In Proceedings of the 2nd ACM SIGPLAN International Workshop on Machine Learning and Programming Languages, pages 31–41. ACM, 2018.
[31] Inc. Stack Exchange. datastack exchange data dump, 2018. URL: https://archive.org/details/stackexchange.
[32] Ilya Sutskever, Oriol Vinyals, and Quoc V Le. Sequence to sequence learning with neural networks. In Advances in neural information processing systems, pages 3104–3112, 2014.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/574453.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ASP.NET 未能找到类型或命名空间名称“HttpRequestMessage”

引入System.Net.Http后,运行页面还是报错 using System.Net.Http;chatGPT解释需要安装Microsoft.AspNet.WebApi.Client包,IIS安装的包文件存储在bin目录下,安装包后bin目录多出了一些列文件 运行页面后还是报错 需要在web.config配置文件…

【ISO14229_UDS刷写】-6-$34,$35,$36,$37诊断服务用于downloading下载/uploading上载数据的消息流示例

总目录:(单击下方链接皆可跳转至专栏总目录) 《UDS/OBD诊断需求编辑工具》总目录https://blog.csdn.net/qfmzhu/article/details/123697014【ISO14229_UDS刷写】-1-$34诊断服务RequestDownload理论部分https://blog.csdn.net/qfmzhu/article…

VM600 CPUR2 机架控制器和通信接口卡

VM600 CPUR2和IOCR2机架控制器和通信接口卡对是一个中央处理器(CPU)卡对,作为Meggitt振动计产品线中VM600机架机械保护系统(MPS)和/或状态监控系统(CMS)的系统控制器和数据通信网关。 注:不同版本的CPUx/IOCx框架控制器和通信接口卡对可用,如下所示: C…

初探 Compose for Wear OS:实现一个简易选择APP

前言 俗话说,人生有三大难题:早上吃啥、中午吃啥、晚上吃啥。 这个问题一度困扰着无数的人,直到一款帮你选择吃什么的神器《今天吃啥》出现,人们再也不用为了每天吃啥而犯愁了。 哈哈,以上纯属抖机灵。 最近访问谷歌…

Spring MVC数据绑定和响应

数据绑定 在程序运行时,Spring MVC接收到客户端的请求后,会根据客户端请求的参数和请求头等数据信息,将参数以特定的方式转换并绑定到处理器的形参中。Spring MVC中将请求消息数据与处理器的形参建立连接的过程就是Spring MVC的数据绑定。 …

电力监控系统在中原科技城智慧能源配电工程中的应用

摘 要:随着社会经济的快速发展,我国变电站正朝着现代化的方向不断发展,自动化设备以及继电保护装置凭借自身优异性能而获得广泛应用。本文介绍的AM5SE系列的微机保护装置,可以针对中原科技城智慧能源配电工程中不同保护对象提供对…

真无线蓝牙耳机什么牌子好?盘点五款质量好的蓝牙耳机

相信很多人都有过这样的经历,早 晚高峰像沙丁鱼般被挤在公交或地铁上,嘈杂的环境、工作的劳累让你只想听听音乐追追剧,给自己一些放松的时光。可拿出有线耳机却常常被挤掉,更有被扯到耳朵的时候。想换一款蓝牙耳机,但面…

Kubernetes 证书详解

K8S 证书介绍 在 Kube-apiserver 中提供了很多认证方式,其中最常用的就是 TLS 认证,当然也有 BootstrapToken,BasicAuth 认证等,只要有一个认证通过,那么 Kube-apiserver 即认为认证通过。下面就主要讲解 TLS 认证。 …

chatgpt赋能python:Python动作捕捉:何为动作捕捉及其应用

Python动作捕捉:何为动作捕捉及其应用 介绍 动作捕捉是一种技术,可将人或物体的运动转换为数字形式。在过去的几十年里,动作捕捉已被广泛应用于电影制作、游戏开发、医学研究等领域。 Python是一种功能强大的编程语言,已成为许…

AI 工具分享第 4 期:13 款国外免费AI视频生成工具

0. 未来百科 未来百科,是一个知名的AI产品导航网站 —— 为发现全球优质AI工具而生 。目前已 聚集全球3000优质AI工具产品 ,旨在帮助用户发现全球最好的AI工具,同时为研发AI垂直应用的创业公司提供展示窗口,迎接未来的AI时代。未来…

Revit建模|Revit风管怎么绘制?

​绘制风管是机电工程重要的一环,对于不少刚接触Revit的小伙伴来说似乎还无从下手,今天就让小编来告诉大家在Revit中绘制风管的方法。 一、在Revit绘制风管 第一步:首先我们先在revit的界面中项目文件找到风管。 第二步:打开后我…

医疗IT系统安科瑞隔离电源装置在医院的应用

【摘要】介绍该三级综合医院采用安科瑞隔离电源系统5件套,使用落地式配电柜安装方式,从而实现将TN系统转化为IT系统,以及系统绝缘情况监测。 【关键词】医用隔离电源系统;IT系统;绝缘情况监测;三级综合医院…

tektronix泰克TDS3054数字荧光示波器

tektronix TDS3054是泰克TDS3000系列示波器,它是一种新的图形界面操作模式,称为QuickMenu。这种快速访问的用户界面使得主要的示波器控制访问一个单一的按键。每一个示波器都包含一个在示波器中运行的在线巡览盘。此磁盘提供了产品的操作和功能的概述。 …

Qt与Excel:从底层原理到上层应用的全面探索

Qt与Excel:从底层原理到上层应用的全面探索 一、Qt与Excel文件的交互基础(Basics of Qt and Excel Interaction)1.1 Qt与Excel文件的基本概念(Basic Concepts of Qt and Excel Files)1.2 Qt读取Excel文件的基本方法&am…

nignx虚拟主机头配置方法

目录 一、不同ip地址访问 二、不同端口访问 三、不同域名访问 一、不同ip地址访问 步骤一:配置虚拟主机头文件 cd /etc/nginx/conf.d/ 新建一个default2.conf touch default2.conf 配置default.cof 配置如下: Listen 192.168.59.137:80; access_log …

自动清理 ES 历史数据

一、 背景 随着业务的增长和时间的变化,ES 数据库的存储空间越来越大,存储数据多数为系统监控日志,保存的数据不需要长期保留,多数情况只需要保留几个月ES数据即可,既可以减轻ES服务器的负载和资源使用率,还…

Mysql进阶之索引优化

Mysql进阶之索引优化 一. 索引介绍 1.1 什么是Mysql索引 MySQL官方对于索引的定义:索引是帮助MySQL高效获取数据的数据结构。MySQL在存储数据之外,数据库系统中还维护着满足特定查找算法的数据结构,这些数据结构以某种引用(指向)表中的数据…

考研C语言第四章

4.1 关系表达式与逻辑表达式 ps&#xff1a; 算术运算符&#xff1a;加减乘除等 关系运算符&#xff1a;比大小的 逻辑与逻辑或 非&#xff01;的运算级别&#xff08;应该&#xff09;最高 4.2 if-else #include <stdio.h> //上课这个写while的原因是方便一次一次…

怎么导入别人的android项目

到期末了好多同学都问我怎么把别人的安卓项目导进自己电脑里面&#xff0c;今天我来统一解答一下&#xff0c;希望有所帮助。 1.删除项目中原有的自动构建的文件 去到要导入项目的目录下把 .idea .gradle与build 三个文件夹&#xff0c;*.iml&#xff0c;local.properties删除…

JavaScript数组和函数

1. 数组 1.1 init <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice…