Vue面试题-1

一、单选题(共30题,每题1分)
得分:1.0分
1.在Vue中,如果转义输出?( )
A  v-bind
B  {{@ }}
C  v-html
D  <%= %>
正确答案: C 
2.在插值语法中不支持的下列哪项操作?( )
A  a + b
B  if(a) b
C  a && b
D  a ? b :  c
正确答案: B
解析:
语句不可用
3.针对计算属性computed描述正确的是?( )
A  计算属性并不常用
B  计算属性也是数据属性,定义在data下
C  计算属性可以完全被监听属性watch替代
D  计算属性中可以处理复杂逻辑运算
正确答案: D
4.实现双向绑定,需要下列哪个指令?(  )
A  v-text
B  v-show
C  v-model
D  v-on
正确答案: C
5.在Vue中,实现循环的指令是?
A  @
B  :
C  for
D  v-for
正确答案: D
6.插值语法还可以使用下列哪个指令替代?
A  v-html
B  v-bind:text=
C  v-text
D  :value=
正确答案: C
7.实现事件注册的指令是哪项?
A  v-on
B  v-bind
C  v-for
D  v-model
正确答案: A
8.下列哪项不是事件修饰符
A  .once
B  .trim
C  .prevent
D  .stop
正确答案: B
9.下列哪个选项是v-model指令的修饰符?( )
A  .capture
B  .self
C  .right
D  .number
正确答案: D
解析:
限定双向绑定必须输入可转变的数字型
10.active-class是哪个组件的属性?
A  router-view
B  router-link
C  Route
D  Switch
正确答案: B
解析:
active-class 是router-link 切换类名属性
11.定义vue-router的动态路由,正确的是?
A  path='/user/list?Id=1';
B  path='/user/list'
C  path='/user/:id'
D  path='/user/parms'
正确答案: C
解析:
动态路由需要 path 以及参数 比如 '/user/:id'
12.获取动态路由中参数name的值,下列正确的是?
A  $router.params.name
B  $route.params.name
C  this.$router.name
D  this.router.params.name
正确答案: B
解析:
获取路由参数通过 $route 而不是 $router
13.使用Vuex时,如何更改状态name?( )
A  直接修改:this.$store.state.name = ’ingjing‘
B  定义修改name的Action,然后提交该Action
C  通过setState方法进行修改:this.setState({name: ’ingjing‘})
D  定义修改name的Mutation,然后提交该Mutation
正确答案: D
解析:
修改vuex state 中的值 只能通过Mutation方法实现
14.13、如何使css在当前组件内起作用?
A  在单文件组件中的style上添加scoped
B  定义单独的css文件,在组件内引入即可
C  在单文件组件中的style下写样式
D  没办法实现
正确答案: A
解析:
该题考试 局部样式的使用 通过scoped
15.vue 包含一组观察数组的变异方法,所以它们也将会触发视图更新,以下选项中,哪个方法不会触发视图更新?
A  push
B  unshift
C  sort
D  slice
正确答案: D
16.安装vue脚手架的命令是
A  npm install -g vue
B  npm install -g vue-cli
C  npm add -g vue
D  npm add -g vue-cli
正确答案: B
解析:
用于脚手架Vue.js项目的简单CLI
17.vue事件绑定中要阻止事件的默认行为,以下哪种写法是正确的
A  .  
B   
C   
D   
正确答案: A
解析:
vue推出了事件修饰符.prevent可以阻止默认的事件
18.对于计算属性下面说法有误的是?
A  计算属性是基于它们的依赖进行缓存的。
B  计算属性只有在它的相关依赖发生改变时才会重新求值
C  计算属性只能获取值, 不能设置值
正确答案: C
解析:
任何复杂的业务逻辑,我们都应当使用计算属性
19.以下哪种方法不是axios对象的方法
A  get
B  post
C  then
D  put
正确答案: C
解析:
为方便起见,为所有支持的请求方法提供了别名
axios.request(config)
axios.get(url[, config])
axios.delete(url[, config])
axios.head(url[, config])
axios.post(url[, data[, config]])
axios.put(url[, data[, config]])
axios.patch(url[, data[, config]])
20.Vue的  元素,我们需要对哪个  属性进行动态绑定,就可以在同一个挂载点动态切换多个组件。
A  is
B  which
C  name
D  以上都不对
正确答案: A
解析:
vue动态组件可以依据is属性进行切换
21.对于vue  数据驱动的原理 ,以下说法有误的是
A  使用 Object.defineProperty 把属性全部转为 getter/setter。
B  每个组件实例都有相应的 watcher 实例对象,它会在组件渲染的过程中把属性记录为依赖,之后当依赖项的 getter 被调用时,会通知 watcher 重新计算
C  Vue 是异步执行 DOM 更新
正确答案: B
解析:
Vue的双向绑定是通过数据劫持结合发布-订阅者模式实现的,即通过Object.defineProperty监听各个属性的setter,然后通知订阅者属性发生变化,触发相应的回调。
整个过程分为以下几步:
1、Observer通过Object.defineProperty实现对属性的变化监听,在变化时通知订阅者。
2、Compile,对每个元素节点的指令进行扫描和解析,根据指令模板替换数据,以及绑定相应的更新函数
3、Watcher是订阅者,是Observer和Compile的中间纽带,负责将变化的数据更新到视图,
22.对于脚手架安装的第三方模块 ,以下说法有误的是
A  ESLint :代码检测工具,使用它可以避免低级错误和统一代码的风格,安装之后无法关闭,所以我们可以选择不安装
B  Karma + Mocha :单元测试,保证代码质量
C  Nightwatch:端到端测试(功能测试),站在用户视角,功能测试,而非代码细节
D  以上说法不全正确
正确答案: A
解析:
安装的第三方模块都是可配置的
23.关于v-model 使用,有误的是
A  
B C 正确答案: A 解析:v-model一般和表单元素混合使用 24.v-model 支持修饰符, 以下哪个不是v-model 的修饰符 A lazy B number C trim D once 正确答案: D 解析: .lazy在默认情况下,v-model 在每次 input 事件触发后将输入框的值与数据进行同步 (除了上述输入法组合文字时)。你可以添加 lazy 修饰符,从而转变为使用 change事件进行同步 .number如果想自动将用户的输入值转为数值类型,可以给 v-model 添加 number 修饰符 .trim如果要自动过滤用户输入的首尾空白字符,可以给 v-model 添加 trim 修饰符: 25.下面哪项不是属于Vue 的属性() A props B methods C component D filters 正确答案: C 解析: components是属于实例选项,component属性API 26.下面哪项不是正确的vue安装方式() A 直接script 标签引入 B 使用CDN C 使用NPM下载,然后进行模块化开发引入 D 使用@angular/cli 正确答案: D 27.关于vue 声明周期钩子函数,你认为错误的理解是() A Vue实例从创建到初始化过程都运行一些叫做生命周期钩子的函数。 B Vue生命周期钩子函数给用户在不同的阶段提供了添加自己代码的机会。 C Vue 实例的生命周期钩子函数可以随意定义的 D Vue生命周期钩子函数伴随着数据监听,编译模板,数据更新而更新DOM。 正确答案: C 解析: 内定的 28.Vue的模板语法你认为错误的是() A Vue 模板语法是 双大括号语法 {{}},也称Mustache ,或者叫做插值表达式 B Vue的 模板语法是基于HTML的,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据 C Vue的模板语法采用 <% %>来实现 D Vue 的模板语法不能输出真正的html标签,可以用v-html代替 正确答案: C 解析: php语法 29.关于 v-for理解不正确的是 () A v-for 用来遍历数据的 B v-for 通常使用 key 属性给每项元素添加识别码 C V-for 不可以遍历对象 D V-for可以通过添加 index 给每项元素添加index索引 正确答案: C 解析: 可以变量对象,value,key,index 30.关于vue过滤器,你理解不正确的是( ) A Vue.filter来注册全局的过滤器, B Vue 实例中的 filters的属性 可以用来注册 局部的过滤器 C 过滤器常用于 一些常见的文本格式化,写在 双花括号插值和 v-bind 表达式 D Vue过滤器 可以不用设置返回值 正确答案: D 二、多选题(不定项选择) 1.事件绑定的方式有哪些?( A @ B v-bind C v-on D v-click 正确答案: A,C 解析: 事件绑定的方式 v-on 以及简写 @ 2.vue-router中,核心组件是哪些? A router-view B router-link C Router D Link 正确答案: A,B 3.下列哪些可以发送http请求? A fetch B axios C jquery D XMLHTTPRequest 正确答案: A,B,C,D 解析: 考查常用的 前后端数据请求方式 4.单文件组件一般由几部分组成? A template B script C style D body 正确答案: A,B,C 解析: 单文件 由 模板 js逻辑 和 样式组成 5.第一次组件加载会触发哪几个钩子 A beforeCreate B created C beforeMount D mount 正确答案: A,B,C 解析: 可以看到在vue一整个的生命周期中会有很多钩子函数提供给我们在vue生命周期不同的时刻进行操作, 那么先列出所有的钩子函数 beforeCreate created beforeMount mounted beforeUpdate updated beforeDestroy destroyed 第一次组件加载会触发以下钩子函数 beforeCreate created beforeMount mounted 6.下列哪些表达式在Vue中使用是正确的 A {{ flag ? “OK” : “NG” }} B {{ if(x == 1) {return “OK”} }} C {{ x + y }} D {{ message.split('').reverse().join('') }} 正确答案: A,C,D 解析: 可以进行表达式的运算,三目运算符,但是不可以写if类型的条件判断 7.vue自定义指令的 钩子函数包括 A bind B inserted C update D unbind 正确答案: A,B,C,D 解析: 一个指令定义对象可以提供如下几个钩子函数 (均为可选): bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。 inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。 update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)。 componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用。 unbind:只调用一次,指令与元素解绑时调用。 8.vue路由,下面说法正确的是 A route-view 是路由容器, 用来动态渲染不同的组件 B router-link 可以通过to 属性 , 进行声明式导航跳转页面 C router.push 可以进行编程式导航跳转 D vue框架已经包含路由,不需要单独安装 正确答案: A,B,C 解析: vue-router是属于vue生态系统的模块,需要单独安装才可以使用 9.对与webpack 描述正确的是 A Webpack可以看做是模块打包机 B 在配置文件写入 devtool: 'source-map' ,是为了生成map 文件, 方便调试 C webpack中babel-loader 可以将ES6 转成ES5 供浏览器使用 D webpack支持commonJS模块化规范 正确答案: A,B,C,D 解析: 是一个前端自动化构建工具的打包利器 10.下面哪些属于书写正确的生命周期钩子函数 () A created B beforeUpdate C mounted D destroyed 正确答案: A,B,C,D 11.下面哪些可以正确使用到vue的模板语法中 () A {{1+1}} B {{var a = ‘1234’}} C {{ok? ‘yes’ : ‘ ok’ }} D {{if(ok) {return message}}} 正确答案: A,C 12.下面关于实现前后端分离优点是 () A 可以实现前端和后端各种高效的开发工程 B 前后端分离就是后端提供接口,前端根据接口文档请求数据 C 前后端分离就是服务端和客户端代码写在一起 D 前后端分离经常使用后端模板,比如ejs来渲染模板 正确答案: A,B 解析: 前后端分离已成为互联网项目开发的业界标准使用方式 后端追求的是:三高(高并发,高可用,高性能),安全,存储,业务等等 前端追求的是:页面表现,速度流畅,兼容性,用户体验等等。 13.对于vue 的 ref 你认为正确的是() A Ref可以用于vue的dom元素和vue组件 B Ref 一般默认以key-value的获取ref标记的对象 C 通过ref 可以得到某个组件内部的data属性和方法 D Ref一般通过 this.$refs.xxxx来获取这个对象 正确答案: A,B,C,D 解析: ref 被用来给元素或子组件注册引用信息。引用信息将会注册在父组件的 $refs对象上。如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素;如果用在子组件上,引用就指向组件实例: 14.Vue 创建组件的方式正确的是() A Vue.component(‘name’,{options....}) 全局创建 B Vue.extend({}) C Vue.component(‘name’,”

hello vue

”) D Vue({components:{name:{} }}) 局部创建 正确答案: A,D 解析: vue中注册组件的方式分为两种,一种是全局注册组件,一种是局部注册组件 全局注册组件 Vue.component('my-component-name', { // ... 选项 ... }) 局部注册组件 new Vue({ el: '#app', components: { 'component-a': ComponentA, 'component-b': ComponentB } }) 15.下面哪些子组件访问父组件的方式是正确的() A 通过新建 Vue()实例对象来设置事件总线 B 通过vue 的自定义事件来访问父组件 C 通过 this.$parent 来访问父组件 D 通过 props 来实现子组件 访问 父组件 正确答案: A,B,C,D 解析: 通过中央事件总线可以实现非父子组件的传值 通过自定义事件可以实现子组件访问父组件的属性和方法 子组件可以通过this.$parent直接访问父组件的属性和方法 子组件可以通过props属性得到父组件的值 三、填空题(共5题) 1.v-router包含两个核心组件:router-link以及 route-view 正确答案: (1) router-view 解析: 跳转与展示区 2.在vue路由开发中, 如果是以模块的方式使用路由,除了引入路由外,还需要通过 components 注册 方法明确地安装路由功能: 正确答案: (1) Vue.use 解析:如果使用模块化机制编程,导入Vue和VueRouter,要调用 Vue.use(VueRouter) 3.Vue的 元素,并对其 is 属性进行动态绑定,就可以在同一个挂载点动态切换多个组件。 正确答案: (1) is 解析: 动态组件和is绑定使用 4.如果把切换出去的组件保留在内存中,可以保留它的状态或避免重新渲染。为此可以添加一个 v-show 组件 正确答案: (1) keep-alive 解析: keep-alive把切换出去的组件保留在内存中,可以保留它的状态或避免重新渲染 5.vue中,双大括号会将数据解释为普通文本,而非 HTML 代码。如果数据中包含html标签,为了输出真正的 HTML,你需要使用 v-html 正确答案: (1) v-html 解析: 双大括号会将数据解释为普通文本,而非 HTML 代码。为了输出真正的 HTML,你需要使用 v-html 指令 四、简答题 1.Vue-cli中如何引入vue-resource,并说明使用? npm i vue-resource 使用: 1、在main.js中引入 import Vue from 'vue' import VueResource from 'vue-resource' Vue.use(VueResource) 2. Vue-cli中如何对过滤器进行设置?随便写一个过滤器 import Vue from 'vue' Vue.filter('resetImg', str => { if (str && str.startsWith('http')) { return str } return ‘http://localhost:3009’ + str }) 五、编程题 1.写出你知道的VUE内部指令,越多越好,并解释说明 1、v-bind 说明:可以动态的绑定一个数据,可以简写为 : 2、v-on 说明:表示绑定一个事件,可以简写为@ 3、v-for 说明:表示循环,循环的时候需要为每一项添加一个key,key的作用是优化标签查找性能 4、v-model: 说明:可以实现表单元素和data数据的绑定 5、v-show 说明:用来控制标签的显示和隐藏,通过设置display属性实现 6、v-if 说明:通过删除或者添加标签的形式控制标签显示和隐藏 一、单选题(共30题,每题1分) 1.以下哪个表达式将返回假 A !(3<1) B (4>=4)&&(5<=2) C (‘a’==‘a’)&&(‘c’!=‘d’) D (2<3)||(3<2) 正确答案: B 解析: && 表示 且 语句 必须2个条件都满足 否则为false 2.分析以下js代码: var a=15.49 console.log(Math.round(a)) 输出的结果为 A 15 B 16 C 15.5 D 15.4 正确答案: A 解析: round 表示 四舍五入 3.以下操作属于I/0操作的是 A 文件读取 B for循环的执行 C 声明变量并赋值 D 输出一个字符变量 正确答案: A 解析: 其余的属于 javascript 语句 没有操作文件系统 4.以下描述正确的是 A 在promise的链式调用中可以在then函数里做错误处理 B 可以通过return 的方式终止其余then函数的执行 C 通过在一个promise的链式调用中,每一个then函数都对应一个catch的错误处理函数 D 可以通过 throw new Error()的方式抛出报错 正确答案: D 解析: throw err 可以抛出异常 5.以下对npm 描述不正确的是 A 可以通过npm 来管理node的版本 B 可以通过安装cnpm或者切换镜像提高下载速度 C 可以用来管理第三方插件包 D 需要package.json 文件 正确答案: A 解析: npm 无法安装 node 6.nodejs中如何导出模块 A export B require C module.exports D import 正确答案: C 7.同步读文件的用下面那个语句 A fs.readFile B fs.readFileSync C fs.createReadStream D fs.read 正确答案: B 8.express中用哪个模块读取post 提交的数据 A body B body-parser C post D cookie-parser 正确答案: B 9.express框架中如何执行下一个中间件 A continue B go C break D next 正确答案: D 10.下载一个项目的之后,用哪个命令获取所有的依赖 A copy B yarn C npm D cnpm 正确答案: C 11.express操作session能否保存在mysql中( ) A 是 B 否 C collection D Document 正确答案: A 解析:可以保存在数据库 文件 内存中 12.前后端分离的登录功能中移动端通常使用验证方式为() A token B string C Storage D cookie 正确答案: A 解析:token技术不依赖于cookie, session, 不怕csrf, 适用于cdn,解耦 13.express中如何给下载的方法是: A link B download C href D source 正确答案: B 解析:res.download 14.express如果要使用路由需要依赖的方法是 A Router B express.Router() C app.Router D use.Router 正确答案: B 解析: var express = require('express'); var router = express.Router(); router.get('/', function(req, res, next) { ...... }); 15.mongoose是用来处理哪个功能() A Mongodb B mysql C redis D cookie 正确答案: A 解析:操作mongodb 16.在mongodb模块中 分页如何完成() A db.collection.find().limit() B db.collection.find().pogation() C db.collection..find().skip() D db.collection.find().skip().limit() 正确答案: D 解析: skip是跳过几个, limit是限制几个 17.在express能够使用nodejs中的核心模块() A 能 B 不能 C 只能使用一些 D 使用的时候必须通过中间件包裹 正确答案: A 解析: node模块可以使用 18.Https协议的默认端口: A 80 B 8080 C 443 D 27017 正确答案: C 解析:http 80 https 443 19.下面哪个语法在浏览器环境下找不到: A document B process C window D arguments 正确答案: B 解析: process 是nodejs 环境下的 20.下面哪个不是node.js中的内置模块: A cheerio B path C url D fs 正确答案: A 21.下面对Mongodb描述不正确的是: A Mongodb是一个基于分布式文件存储的数据库。 B 高性能、易部署、易使用,存储数据非常方便。 C 属于非关系型数据库,文档不需要设置相同的字段。 D NodeJS中只能采用Mongodb作为数据库使用。 正确答案: D 22.对express中间件描述不正确的: A 必须使用use生效。 B 修改请求和响应对象。 C 终结请求-响应循环。 D 调用堆栈中的下一个中间件。 正确答案: A 23.express中的中间件类型不包括: A 内置中间件 B 测试中间件 C 应用级中间件 D 第三方中间件 正确答案: B 24.express中app中间件拥有的方法: A create B use C get D set 答案:c 25.下列选项哪个工具可以在命令行里重新启动一个NodeJS进程? A supervisor B npm C node D bower 正确答案: A 解析: supervisor是一个可以实时监听文件变化,进程会实时重启,类似的还有nodemon 26.原生模块不包含下列哪一项 A http B https C md5 D fs 正确答案: C 解析: md5是一种加密算法,并不属于原生模块 答案是C 27.监听一个web服务端开口的api是 A subscrib B addEventListener C listen 正确答案: C 解析: listen用于监听端口,正确答案C 28.与nodejs相关的有 A angular B typescript C net 正确答案: C 解析:angular和typescript都和nodejs无关. 答案是C 29.与nodejs类似的有 A angular B typescript C net 正确答案: C 解析:angular是框架。ts为脚本,net是网络服务,nodejs可以搭建服务器 30.文件操作通过 A fs 模块 B process模块 C url模块 正确答案: A 二、多选题(不定项选择)(共15题,每题2分) 1.在express 中以下获取数据的方法可以直接使用的是 A req.query B req.body C req.file D req.files 正确答案: A,B 解析: req.query 表示search 参数 req.body 表示 post 请求提交的数据体 2.下列说法正确的是 A module.exports 符合 commonJs规范 B export default 符合 commonJs 规范 C exports 符合 commonJs规范 D export 符合commonJs规范 正确答案: A,C 3.fs模块中如何哪些方法能够创建文件( )。 A appendFile B rename C writeFile D copy 正确答案: A,B,D 4.NodeJs特点是( )。 A 事件驱动 B 非阻塞IO C 工厂模式 D 单线程 正确答案: A,B,D 5.以下属于url模块提供的方法是? A parse B escape C resolve D format 正确答案: A,C,D 解析: url一共提供了三个方法,分别是url.parse();url.format();url.resolve(); 正确答案ACD 6.以下属于express response常用方法的是? A res.write() B res.end() C res.send() D res.redirect() 正确答案: B,C,D 解析: 没有res.write方法,正确答案BCD 7.http模块可处理前端的请求方式有 A get B post C use 正确答案: A,B 解析:use不是请求的方法,正确答案是AB 8.哪些不是后端框架: A bootstrap B express C koa D jquery 正确答案: A,D 9.保存页面登录态的方式: A cookie加密 B sessionID C storage D token 正确答案: A,B,D 10.下面对全栈开发描述正确的有: A EJS为后端模板,只能在后端使用。 B 前后端分离模式,一般采用ajax进行通信 C Node.js适合处理高并发的项目。 D Node.js 本身只是一个Java 运行环境 正确答案: B,C 解析: EJS是一个模板引擎,前后端均可使用,A错误 前后端分离采用局部刷新,ajax进行通信,B正确 Node.js的特点异步单线程非阻塞,所以适合处理高并发项目, C正确 Node.js的底层是C++, 不是Java, D错误 得分:0.0分 11.属于数据库的有 A mysql B sqlserver C mongoDB 正确答案: A,B,C 12.url模块可处理的有 A URI字符 B 对象 C url解析成的对象 正确答案: A,C 解析: 11 13.npm描述正确的是: A npm是一个包管理工具。 B npm的所有包都可以在前后端使用。 C nvm是npm的管理工具 D cnpm是npm的一个镜像工具 正确答案: A,C,D 解析: npm是Node Package Manager包管理工具,nrm是Node Registry Manager,用于管理npm的镜像,cnpm是npm的一个镜像工具,registry指向taobao镜像。 所以ACD正确 npm的包包括了服务端和前端的各种包,有些包只能在前端使用,有些包只能在服务端使用,所以B错误 14.以下方法在mongoose中可用的是 A model.find().toArray((data)=>{}) B model.findOne() C model.insertMany({name:’name’,age:16},(err,data)=>{}) D model.save() 正确答案: B,D 解析: A:find({},{}).toArray((err,data)=>{}) C:insertMany([{}])1 15.以下属于href组成部分的是 A hostname B hash C protocol D search 正确答案: A,B,C,D 解析:以上都是 三、填空题(共5题,每题2分) 1.NODE 中的两大特点是 和( ) 正确答案: (1) 事件驱动;非阻塞I/O (2) 事件驱动;非阻塞I/O 解析: 2. 把查询字符串(?后是a=1&b=2)转为对象的方法是qs. 正确答案: (1) parse(“a=1&b=2”) 解析: 3. promise的三种状态分别为 、 、 。 正确答案: (1) pending (2) fulfilled (3) rejected 4.nodejs版本号中 X.O.U-CC,X代表 ,O代表 ,U代表 正确答案: (1) 主版本 (2) 子版本 (3) 修正版本 解析: ,X代表{{主版本}},O代表{{子版本}},U代表{{修正版本}} 5.mysql 创建一个库,语句是 正确答案: (1) CREATE DATABASE `库名` DEFAULT CHARACTER SET armscii8 COLLATE armscii8_general_ci 解析: mysql 创建一个库,语句是{{CREATE DATABASE `库名` DEFAULT CHARACTER SET armscii8 COLLATE armscii8_general_ci}} 四、简答题(共2题,每题10分) 1.什么是error-first callback? 2.nodejs如何实现数据代理 五、编程题(共1题,每题10分) 1.代码实现一个登陆注册的子服务 正确答案: insert() find() 解析: insert() find()

你可能感兴趣的:(笔记)