Skip to content

Latest commit

 

History

History
566 lines (319 loc) · 12.7 KB

你不知道的Dart.md

File metadata and controls

566 lines (319 loc) · 12.7 KB

你不知道的 Dart


1. 下面关于Dart语言说法正确的是?

  • A、Dart是少数同时支持JIT和AOT的语言之一。

  • B、Dart中的Isolate共享内容,属于多线程模型。

  • C、Dart中在创建对象的时候,需要先查找可用内存。

  • D、Dart语言跟JavaScript一样,是一门解释型的语言。

2. 下面关于变量定义的说法正确的是?

  • A、Dart中可以使用var来声明一个变量,表示该变量类型可以随意更改。

  • B、Dart中可以使用dynamic来声明一个变量,表示该变量类型交给编译器去推断决定,确定后无法更改类型。

  • C、Dart中使用静态类型声明变量后,该变量的类型无法再次更改。

  • D、Dart中使用Object声明一个变量,表示该变量类型是Object类型,后期无法更改其类型。

3. 下面关于常量定义说法错误的是?

  • A、const表示变量在编译期间就确定的值。

  • B、final定义的变量是在运行时确定值。

  • C、const list = [1,2,3];list[0]=10; 该行代码会报错。

  • D、final list = [1,2,3];list[0]=10;改行代码会报错。

4. 关于变量的默认值说法正确的是?

  • A、在Dart语言中,基础类型的默认值是undefined,复杂类型的默认值是null。

  • B、在Dart语言中,所有未初始化的变量默认值都是null。

  • C、在Dart语言中,数字类型变量,未初始化的默认值是0。

  • D、在Dart语言中,String类型变量,未初始化的默认值为''。

5. 关于数字类型说法正确的是?

  • A、字符串'123'不能转换成int类型123

  • B、字符串类型'123.123'不能转换成double类型123.123

  • C、int类型和double类型都是num的子类型。

  • D、123.123.ceil() 返回值是一个int类型的123

6. 下面关于字符串类型说法错误的是?

  • A、可以使用单引号、双引号创建字符串。

  • B、字符串拼接可以使用+操作符。

  • C、两个字符串拼接,中间的操作符不可以省略。

  • D、可以使用${expression}将表达式的结果解析到字符串中。

7.创建多行字符串的方法正确的是?

  • A、var s1 = ''' 我可以 创建 多行字符串。 ''';

  • B、var s2 = """ 我可以 创建 多行字符串。 """;

  • C、以上两项都正确

  • D、以上两项都不正确

8. 关于布尔类型说法正确的是?

  • A、布尔类型字面量有true和false。

  • B、在Dart中使用bool显式声明一个布尔类型,其默认值为false。

  • C、可以将一个null隐式转换成一个布尔类型。

  • D、可以将undefined音声转换成布尔类型。

9. 下面选项中正确的是?

  • A、bool isTure; if(isTure){ print('是真的!'); }

  • B、var isTure; if(isTure){ print('是真的!'); }

  • C、bool isTure = false; if(isTure){ print('是真的!'); }

  • D、var str = '是真的!' print( str ? str : '是假的!');

10. 下面关于Dart语言中list的操作错误的是? List list = [1, 2, 3, 4, 5];

  • A、print(list.first); // 1

  • B、print(list.last); // 5

  • C、print(list.slice(2,3)); // [3]

  • D、print(list.join('|')); // 1|2|3|4|5

11. 关于Dart语言中map类型的描述错误的是?

  • A、map类型是一个关联键和值的对象。

  • B、map类型中每个键只能出现一次。

  • C、map类型可以通过构造函数来创建。

  • D、map类型的键只能为String类型。

12. 关于Dart语言中函数的使用错误的是?

  • A、函数是一等公民。

  • B、箭头函数没有返回值。

  • C、函数的参数分为普通参数和可选参数。

  • D、函数的可选参数分为可选位置参数和可选命名参数。

13. 关于Dart语言中,函数的参数描述正确的是?

  • A、函数可以作为返回值使用。

  • B、函数可以赋值给一个变量。

  • C、函数可以当作另一个函数的参数使用。

  • D、以上都正确。

14. 关于Dart语言中,函数可选参数描述错误的是?

  • A、可选位置参数使用[]来标记。

  • B、可选命名参数使用{}来标记。

  • C、可选参数可以同时是可选位置参数和可选命名参数。

  • D、可选参数可以使用=来设置默认值

15. 关于Dart语言中,main函数的描述错误的是?

  • A、每个Dart程序必须要有一个main函数作为程序的入口点

  • B、在启动程序的时候,可以对main函数进行传参。

  • C、两项都正确。

  • D、两项都不正确。

16. 下边表达式结果正确的是?

  • A、var a = 1; print(a++); // 2

  • B、var a; print( a ?? 10); // 10

  • C、var a; print(a?.length); // 0

  • D、var a; print( a ? a: 0); // 0

17. 下边运行结果正确的是?

  • A、bool isRaining; if(isRaining){ print('带伞'); }else { print('阳光明媚'); } // 阳光明媚

  • B、String isRaining = 'true'; if(isRaining){ print('带伞'); }else { print('阳光明媚'); } // 带伞

  • C、两项都正确。

  • D、两项都不正确。

18. 下面关于运行结果正确的是? var list = []; for(var i = 0; i< 2; i++) { list.add(()=print(i)); } list.forEach((c)=>c());

  • A、0 1

  • B、0 0

  • C、1 1

  • D、2 2

19. 关于Dart语言中异常处理描述错误的是?

  • A、异常的抛出使用throw关键字。

  • B、异常捕获会阻止异常传播。

  • C、异常抛出只能是异常对象或者错误对象。

  • D、处理抛出多种异常类型代码,可以指定多个catch子句。

20. 下面关于类的描述,正确的是?

  • A、定义一个普通类,该类型没有父类。

  • B、获取对象类型可以是用type属性。

  • C、所有的实例变量都会生成隐式getter和setter。

  • D、类的构造函数名何以是类名构造函数和命名构造函数。


多选题:


21. 下面关于类的描述错误的有?

  • A、使用构造函数创建对象的时候,必须使用new关键字。

  • B、如果没有声明构造函数,则该类没有构造函数。

  • C、子类的构造函数可以从父类继承。

  • D、根据Dart代码风格,只有在命名冲突的时候才会使用this。

22. 下面关于抽象类的描述正确的有?

  • A、抽象类使用abstract关键字定义。

  • B、抽象类可以进行实例化。

  • C、抽象方法只能定义在抽象类中。

  • D、可以直接调用继承自抽象类中的抽象方法。

23. 下面关于Dart语言中隐式接口的说法正确的是?

  • A、定义接口应该使用interface关键字。

  • B、实现一个接口使用implements关键字。

  • C、一个类可以实现多个接口。

  • D、类A实现B接口,可以直接使用B接口中的方法。

24. 下面关于静态成员描述正确的有?

  • A、静态成员使用static关键字修饰。

  • B、可以通过实例对象来访问类的静态成员。

  • C、类内部可以直接访问静态成员。

  • D、静态方法不对实例对象进行操作,所以无法访问该实例对象。

25. 下面关于泛型描述正确的有?

  • A、适当指定泛型可以生成更好的代码。

  • B、使用泛型可以减少代码重复

  • C、在实现泛型类型时,可以使用extends限制其参数类型。

  • D、泛型参数可以在函数的返回类型、参数类型、局部变量类型中使用。

26. 下面关于库的描述,正确的有?

  • A、使用import来导入库

  • B、import只能导入整个库。

  • C、Dart支持延迟加载库。

  • D、import可以导入库的一部分。

27. Dart语言中,关于类型定义typedef的描述正确的有?

  • A、typedef目前只能用于函数。

  • B、当函数类型赋值给变量时,typedef会保留类型信息。

  • C、typedef是类型的别名,不能用于函数类型检查。

  • D、typedef只能保留函数返回值类型,不能保留函数参数类型。

28. 下面关于元数据注解描述正确的是?

  • A、元数据注解以@开头。

  • B、元数据注解@后边跟编译时常量的引用和常量构造函数的调用。

  • C、Dart里边只定义了deprecated和override两个元数据常量。

  • D、我们可自定义元数据,使用的时候调用其普通构造函数实例化即可。

29. 关于Dart语言的注释,描述正确的有?

  • A、单行注释以// 开头。

  • B、多行注释以/开头,/结尾。

  • C、Dart编译器会忽略所有注释文本。

  • D、文档注释中[]会在词法范围内解析。

30. 下面关于枚举类型描述正确的有?

  • A、枚举类型是一种特殊的类型,定义后可以动态为其添加成员。

  • B、枚举类型的长度是可变的。

  • C、在switch语句中使用enum,如果没有处理enum所有值,将会得到一个警告。

  • D、枚举类型表示固定数量的常量值。


判断题:


31. 使用dynamic声明的变量,可以将其他类型的值赋值给该变量。

  • A、正确
  • B、错误

32. Dart语言中,一切皆Object,所以一个变量使用Object声明后,可以赋值任意类型的值。

  • A、正确
  • B、错误

33. var声明的变量,一旦赋值后,其类型就不能再次更改。

  • A、正确
  • B、错误

34. 在类中,定义的实例变量,都会隐式的添加getter和setter方法。

  • A、正确
  • B、错误

35. 类的工厂构造函数中,可以访问当前实例this。

  • A、正确
  • B、错误

36. Dart语言中,所有的类都隐式定义了一个接口。

  • A、正确
  • B、错误

37. 想让类A支持类B的API,而不继承B的实现,那么需要实现B接口中所有的属性和方法。

  • A、正确
  • B、错误

38. 子类中可以覆盖父类的实例方法、getter和setter,使用@override注解来重写某个成员。

  • A、正确

  • B、错误

39. 在类中,还可以重写某一些操作符,使用operator关键字修饰操作符。

  • A、正确

  • B、错误

40. mixin是在多个类层次结构中重用类代码的一种方式。

答案选项

  • A、正确

  • B、错误


填空题:


41. 计算下面表达式的结果:

5 ~/ 2 = () //2

42. 在switch语句中,每个非空的case子句都以()结束。

break

43. 将下面表达式的转换成int类型的值() var str = '10010';

int.parse(str);

44. 在使用类成员时,为了避免左侧操作数为空时异常,可以使用()代替(.)。

?.

45. 定义一个可调用类,只需要实现该类的()方法即可。

call

46. 要使用mixin,需要在()关键字后边加上一个或多个mixin名称。

with

47. 如果导入两个具有冲突标识符的库,可以为一个或者两个库指定一个前缀。指定库前缀使用()关键字。

as

48. Dart属于()线程模型,通过()实现高并发。

1:单
2:事件循环/EventLoop/Event Loop

49. Dart事件循环包含两个队列,分别是()、()。

1:事件队列/EventQueue/Event Queue
2:微任务队列/MicrotaskQueue/Microtask Queue

50. 如果要确保在抛出异常时运行某些业务代码,可以使用()子句。

finally

大题:


51. 采用同步生成器的方式,生成0-50的序列。

Iterable<int> syncGenerator([int n = 50]) sync* { 
  int i = 0; 
  while(i <= n) yield i++; 
}

main(List<String> args) {
  print(syncGenerator());   //同步生成器
}

52. 采用异步生成器的方式生成100以内的偶数序列。

Stream <int> asyncGenerator([int n = 100]) async* {
  int i = 0;
  while(i < n) yield i += 2; 
}

main(List<String> args) {
  asyncGenerator().listen(print);  //异步生成器
}

53. 采用 同步/异步 生成器生成12项斐波那契额数列。

//同步生成器
Iterable<int> syncGenerator([int n = 12]) sync* { 
  int i = 1; 
  while(i <= n) yield Feb(i++); 
}

//异步生成器
Stream <int> asyncGenerator([int n = 12]) async* {
  int i = 1;
  while(i <= n) yield Feb(i++); 
}
 
int Feb(int n) {
  if (n < 2) return n; 
  return Feb(n - 1) + Feb(n - 2); 
} 

main(List<String> args) {
  print(syncGenerator());          //同步生成器
  asyncGenerator().listen(print);  //异步生成器
}