一个完整的项目是如何开展的:对项目生涯的总结

news2024/10/6 4:03:08

我正在参加「掘金·启航计划」

变量的类型指的是变量的特性或特征,比如表示数字类型、文本类型、集合类型等,表示的是一类数据。

Dart提供以下的内置类型:

  • 数字:int, double (整型(表示整数),浮点型(表示小数))
  • 布尔:bool (true/false)
  • 字符串:String
  • 列表:List (也被称为 arrays 数组)
  • 集合:Set
  • 映射:Map
  • Null:null

Dart 中最基础类型只有 boolnum ,表示真假数字。其他类型为聚合类型。null属于特殊类型,表示空,它唯一一个不属于Object的类型。

此外,数据类型还有Runes与Symbols。

数字类型

整型与浮点型

int count = 49; // 整型
double pi = 3.14; // 浮点型 

intdouble 都是 num 的子类。因此也可以用num表示数字,但是变量的类型会在编译执行后,自动转换为特定的int类型或double类型。

runtimeType属性可以查看一个变量的运行时类型。

查看num运行时类型:

num a = 57; // 整型
num b = 3.28; // 浮点型
print("a:${a.runtimeType}");
print("b:${b.runtimeType}");

/* 输出 */
a:int
b:double 

num是一个抽象类。抽象类没有实现,不能实例化,任何抽象类,在运行时都是具体的实现类型。

数字的方法

  • num常用的方法
num b = 3.28;
b.abs(); 		// 绝对值 : 3.28
b.ceil(); 		// 向上取整: 4
b.floor(); 		// 向下取整: 3
b.round(); 		// 四舍五入取整: 3
b.truncate();		// 去除小数部位取整: 3
String str = b.toString(); // 转换为字符串: 3.28
String v = b.toStringAsFixed(1); // 四舍五入,保留几位小数,返回字符串: 3.3 
  • 解析为数字

doubleintparse方法用于解析数据获取数字;tryParse方法用于解析获取数字,如果无法转换为对应数字,将会返回null。

double result1 = double.parse('3.3');
int result2 = int.parse('10');

double? result3 = double.tryParse('a3');
int? result4 = int.tryParse('10.2'); 
  • 进制转换

int类型提供了进制转换方法toRadixString,可以把整型转化为指定的进制,以字符串形式输出。

如下将变量转换为2进制、16进制字符串:

int a = 2022;
print(a.toRadixString(2)); // 11111100110
print(a.toRadixString(16));// 7e6 

parse/tryParse方法将其他进制的字符串转换为int类型。

int? int1 = int.tryParse('7e6',radix: 16);
print(int1); // 2022

int? int2 = int.tryParse('11111100110',radix: 2);
print(int2); // 2022 

布尔bool

布尔类型表示真假。只有两个取值:

bool a=true;
bool b=false; 

字符串

字符串类型是使用最广泛的类型,表示文本形式的数据,任何数据或信息都可以通过文本表示出来。

字符串表示若干个字符组成的对象。Dart字符串使用的是UTF-16编码的字符序列。

字符串定义

Dart中字符串支持单引号双引号三单引号三双引号形式的字面量。

String a = 'hello, 单引号';
String b = "hello, 双引号";
String c = '''hello, 三单引号''';
String d = """hello, 三双引号"""; 

单引号和双引号没有任何区别,根据习惯使用即可(偏推荐单引号)。唯一的一个区别是对字符串内引号的转义。

String a = 'hello, \'单引号中转义单引号\'';
String b = "hello, '双引号中直接使用单引号'";

String c = 'hello, "单引号中直接使用双引号"';
String d = "hello, \"双引号中转义双引号\""; 

三引号 可以表示多行字符串。

String e = '''
你好,我是‘
三个单引号
"组成的"多行
字符‘串
'''; 

r前缀表示原始字符串

字符串前加上 r 前缀创建原始(raw)字符串(即不会被做任何处理(比如转义)的字符串)。

var s = r'在 raw 字符串中,转义字符串 \n 会直接输出 “\n” 而不是转义为换行。'; 

主要是保证输入的内容保持不变,原样输出。

模板字符串(字符串插值)

通常可以通过+号实现字符串的拼接。

比如多个字符串变量:

String str1 = '我们';
String str2 = '工作';
String str3 = '更好的人';
int n=0;

String result = str1 + '努力' + str2 + ',成为' + str3 + '。只有我失败了...' + (n+2).toString();

print(result); // 我们努力工作,成为更好的人。只有我失败了...2 

当变量很多时,+号就非常不简洁、麻烦。

Dart提供了字符串插值的方式,在字符串中通过 ${变量} 插入变量,方便拼接。{}中还可以进行简单的计算。如果 {} 中只有变量名称,可以省略 {}

比如下面,{n+3+3}内执行运算时不可省略。

String result2 = '${str1}努力$str2,成为$str3。只有我失败了...${n+3+3}';

print(result2); // 我们努力工作,成为更好的人。只有我失败了...6 

string interpolation 字符串插值。 这种字符串也会叫做模板字符串。组成字符串的形式叫字符串模板。

字符串方法

  • 索引获取字符

字符串是一组字符组成的聚合对象,可以通过[]访问第几个字符,字符位置也叫索引,索引下标从0开始。

比如str[5]表示索引6的字符,顺序为第5个。

  • length属性可以获取字符长度。
String str = '我是一个中文字符串';

print(str[5]);// 文
print(str[str.length-1]); // 串 
  • substring截取字符串

substring方法用于截取字符串。需要传入两个参数:分别表示 起始索引结束索引,返回的子字符串包含起始字符,不包含结束字符。第二个参数结束索引可省略,表示一直截取到字符结尾。

String str = '我是一个中文字符串';

print(str.substring(4));// 中文字符串
print(str.substring(4,7));// 中文字 
  • trim去除头尾空白符号;trimLeft只去除开头的空白符;trimRight只去除末尾的空白符:
String str = '我是一个中文字符串 ';

print(str.trim());
print(str.trimLeft());print(str.trimRight()); 
  • toUpperCase将字符全部转为大写字母;toLowerCase将字符全部转为小写字母。* startsWith是否以指定字符串开头;endsWith是否以指定字符串结尾;contains是否包含指定字符串。返回bool类型(true/false)。* indexOf返回首次出现指定字符串的索引,不存在则返回-1。* replaceAll替换字符串;* split将字符串拆分为列表List;* padLeft字符串左补齐指定宽度的指定字符,默认补充空格;padRight字符串右补齐。> 多数String相关的方法都支持正则表达式,因此可以实现更多、更灵活的字符串处理。

List列表

List对象表示多个元素组成的序列,列表用 [] 进行定义,其内通过 逗号, 来分隔元素。在其他语言中通常叫做组数(Array),是最常见的集合类型。

如下,使用 列表字面量(list literals)创建一个繁体0~9的列表:

List<String> cnBigNumUnits = ['零','壹','贰','叁','肆','伍','陆', '柒','捌','玖',
]; 

通过索引就可以访问某个元素。【索引从0开始】

print(cnBigNumUnits[3]); 

一些常用属性:

  • length 长度* reversed 翻转List* isEmpty 是否为空* isNotEmpty 是否不为空> const关键字创建一个编译时常量
var constantList = const [1, 2, 3];
// constantList[1] = 1; // This line will cause an error. 

扩展操作符(…)和 空感知扩展操作符(…?)

Dart 2.3 引入。

spread operator扩展操作符 ...null-aware spread operator空感知扩展操作符 ...? 可以简介的将多个值插入到集合。

var list = [1, 2, 3];
var list2 = [0, ...list];
assert(list2.length == 4); 

如果扩展操作符右边可能为null,使用空感知扩展操作符(…?)可以避免产生异常

var list=null;
// ...
var list2 = [0, ...?list];
assert(list2.length == 1); 

创建List时使用if或for

如下,使用collection if创建List,可能包含3个或4个元素。

var nav = ['主页', '发现', '阅读', if (promoActive) '个人中心']; 

使用collection for操作列表中的元素之后添加到List中:

var ints = [1, 2, 3];
var strings = ['#0', for (var i in ints) '#$i'];

assert(strings[1] == '#1');
print(strings); // [#0, #1, #2, #3] 

关于List泛型列表的具体类型【不推荐使用List】

可以看到上面定义cnBigNumUnits时,类表类型为List<String>,它是List的泛型表示,也就是实际类型是List<String>

<>内是一个类型参数,通常传递类型,表示该List是泛型的一个具体类型的List。

使用类型推断,以及runtimeType属性查看创建数组的具体类型:

var myList=[1,'2',3,'四'];

print(cn); // [1, 2, 3, 四]
print(cn.runtimeType); // JSArray<Object> 
List myList2=[1,'2',3,'四'];
print(myList2);
print(myList2.runtimeType);// JSArray<dynamic>

print('---------------');

List myList3=[1,2,3];
print(myList3);
print(myList3.runtimeType);// JSArray<dynamic>

print('---------------');

var myList4=[1,2,3];
print(myList4);
print(myList4.runtimeType); // JSArray<int>

print('---------------');

var myList5=['一','二','三'];
print(myList5);
print(myList5.runtimeType); // JSArray<String> 

可以看到,直接使用List的类型为JSArray<dynamic>,动态类型总是不推荐的。因此实际中,最好使用具体的泛型,如List<String>List<int>等,使用类型推断var,后面的列表也要尽量类型一致。

类表常见方法

修改元素值

[idx]通过索引访问元素,使用=赋值就可以修改元素

cnBigNumUnits[6] = '六';
print(cnBigNumUnits);

cnBigNumUnits[6] = '陆';
print(cnBigNumUnits); 

添加元素

  • addaddAll 方法用于在列表末尾添加元素;insertinsertAll 方法在指定索引处添加元素。

addAllinsertAll的作用更像是拼接数组。

List<String> cnBigNumUnits = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
cnBigNumUnits.add('拾');
cnBigNumUnits.add('佰');
cnBigNumUnits.addAll(['仟', '萬', '亿']);
cnBigNumUnits.insert(2, '点');
cnBigNumUnits.insertAll(2, ['横', '撇']);

print(cnBigNumUnits); 

删除元素

  • removeAt(idx):删除 指定索引 的元素
  • remove(item):删除 某个元素值
  • removeLast():移除并返回最后一个元素
  • removeRange(int start, int end):移除范围内的元素
cnBigNumUnits.removeAt(2);
cnBigNumUnits.removeAt(2);
cnBigNumUnits.remove('点');
print(cnBigNumUnits); 

join() List转换成字符串

List<String> cnBigNumUnits = ['零','壹','贰','叁','肆','伍','陆', '柒','捌','玖',
];print(cnBigNumUnits.join());// 零壹贰叁肆伍陆柒捌玖
print(cnBigNumUnits.join(',')); // 零,壹,贰,叁,肆,伍,陆,柒,捌,玖 

Set 集合

集合的使用和增删

通过大括号{}定义一个集合,集合中元素用,分割。

Set和数学中集合的概念一样,可容纳若干个元素,无序且不包含相同元素。Set中没有索引的概念。

Set<String> cnBigNumUnits = {'零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'}; 

Set<String> cnBigNumUnits = {}var cnBigNumUnits = <String>{} 都可以创建空的集合。

add添加元素到集合中,重复重复将不被添加进去。

remove移除指定的元素。

addAllremoveAll 用来添加和移除多个元素。

cnBigNumUnits.addAll({'零', '元','角','分'});
cnBigNumUnits.addAll(['拾', '佰', '仟', '萬', '亿']);
cnBigNumUnits.removeAll({'元','角','分'}); 

集合运算

集合间的运算关系主要有交集(intersection)、并集(union) 、补集 (difference)。

Set<String> cnBigNumUnits = {'零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'};
Set<String> part = {'零', '壹', '贰', '元', '角', '分'};

cnBigNumUnits.intersection(part); // 交集
// {零, 壹, 贰}

cnBigNumUnits.union(part); // 并集
// {零, 壹, 贰, 叁, 肆, 伍, 陆, 柒, 捌, 玖, 元, 角, 分}

cnBigNumUnits.difference(part); // 补集
// {叁, 肆, 伍, 陆, 柒, 捌, 玖} 

Map 映射

Map是用来关联key和value的对象,其中的键和值可以是任何类型的对象。每个 键 只能出现一次但是 值 可以重复出现多次。

在其他编程语言中,Map映射也被称为字典类型(Dictionary),或哈希类型(hash)。

映射通过 {} 进行定义,其中包含若干个 key : vlaue 的键值对。下面使用 Map 字面量创建映射:

Map<String,String> dict = {'about': '关于','boot': '启动','card': '卡片',
}; 

还可以使用Map构造器创建Map:

var gifts = Map<String, String>();
gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves';
gifts['fifth'] = 'golden rings';

var nobleGases = Map<int, String>();
nobleGases[2] = 'helium';
nobleGases[10] = 'neon';
nobleGases[18] = 'argon'; 

Map通过[key]来访问,如果key不存在,将会返回null;通过赋值=可以修改某个key的value,如果key不存在则会添加。

remove(key)用于移除元素。

// 访问
print(dict['card']); // 卡片

// 修改
dict['boot'] = '启动,靴子';

// 增加
dict['dog'] = '狗';
dict['cat'] = '猫';

//通过 key 删除元素
dict.remove('cat'); 

.length返回Map键值对的数量。

Map 可以像 List 一样支持使用扩展操作符(… 和 …?),以及集合的 if 和 for 操作。

List、Set、Map之间的关系和相互转换

  • List 和 Set 可以相互转化

Set中的元素是不重复的,如果 List 中有重复的元素,通过 toSet 方法转化为 Set 可以去除重复元素,再把 Set 通过 toList 转化为 List ,可以实现 去重 的需求。

List<String> cnNumUnits = ['零', '壹', '贰', '叁','贰', '贰'];
Set<String> cnNumSet = cnNumUnits.toSet();
print(cnNumSet); // {零, 壹, 贰, 叁}

List<String> cnNumUnique= cnNumSet.toList();
print(cnNumUnique); // [零, 壹, 贰, 叁] 
  • List 通过 asMap 方法可以返回一个 Map 对象。其中键是索引,值是元素值
List<String> cnNumUnits = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
Map<int,String> cnNumMap = cnNumUnits.asMap();

print(cnNumMap);
// {0: 零, 1: 壹, 2: 贰, 3: 叁, 4: 肆, 5: 伍, 6: 陆, 7: 柒, 8: 捌, 9: 玖} 
  • 通过 Map.fromIterables 方法,可以根据两个可迭代对象创建映射对象,前者是 key ,后者是 value 。(ListSet 都是可迭代对象)
List<String> cnNumUnits = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖','拾','佰','仟','萬'];
Set<int> numUnitsSet = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,100,1000,10000};
Map<int,String> map = Map.fromIterables(numUnitsSet,cnNumUnits);

print(map);
// {0: 零, 1: 壹, 2: 贰, 3: 叁, 4: 肆, 5: 伍, 6: 陆, 7: 柒, 8: 捌, 9: 玖, 10: 拾, 100: 佰, 1000: 仟, 10000: 萬} 
  • Map 对象可以通过 keysvalues 获取可迭代对象,再通过 toListtoSet 获得 ListSet 对象。
Map<String,String> dict = {'about': '关于', 'boot': '启动', 'card': '卡片'};
dict.keys.toList();
dict.values.toList();

dict.keys.toSet();
dict.values.toSet(); 

最后

整理了75个JS高频面试题,并给出了答案和解析,基本上可以保证你能应付面试官关于JS的提问。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

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

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

相关文章

程序员如何平衡主业和副业?

什么是副业&#xff1f; 对于副业的定义&#xff0c;每个人都有自己的见解。不过对大部分人来说&#xff0c;副业相对于主业而言&#xff0c;就是工作日朝九晚五的工作称为主业&#xff0c;其他时间做的赚钱的项目或者工作可以称之为副 副业可以是写文章、拍视频、打代码&…

干扰管理学习日志8-------多用户联合_资源卸载_功率分配_计算资源分配

目录一、文章概述二、系统模型环境三、理论模型1.系统目标2.约束条件3.公式推导四、算法设计1.上行链路功率分配策略(1)任务目标(2)伪代码2.中央服务器算力分配策略3.任务卸载策略(1)任务目标(2)卸载集缩小条件(3)卸载集扩充条件(4)策略(5)伪代码五、性能表征本文是对论文《Mul…

[Linux]----初始网络

文章目录前言一、计算机网络的背景重新看待计算机结构网络发展认识"协议"二、网络协议初始软件分层协议分层OSI七层模型TCP/IP五层(四层)模型三、网络传输的基本流程网络和操作系统之间的关系局域网通信的原理四、数据包的封装和分用五、网络中的地址管理认识IP地址认…

2004-2020年全国30省工业污染治理完成投资数据

2004-2020年全国30省工业污染治理完成投资数据 1、时间&#xff1a;2004-2020年 2、范围&#xff1a;包括全国30个省&#xff0c;不含西藏 3、来源&#xff1a;国家统计J 4、缺失情况说明&#xff1a;无缺失 5、指标说明&#xff1a; 目前虽然采取了一系列环境规制相关政…

[附源码]Python计算机毕业设计SSM基于Web学术会议投稿管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

二元灰狼优化(BGWO)应用于特征选择任务(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 特征选择是当前信息领域,尤其是模式识别领域的研究热点。该代码演示了BGWO如何使用基准数据集Main解决特征选择问题。 &#…

python国际化课程capstone(ML预测ACM队员获奖概率)

目录 前言 原始数据集 爬虫部分 爬取每个队员在buct做题数量 爬取每个队员codeforces的最高分&#xff0c;注册时间&#xff0c;解题数量 爬取每个队员有效做题时间 数据处理部分 模型部分 Linear Regression XGBregressiongridsearchCV调参 Random Forset 前言 刚…

Redis框架(九):大众点评项目 缓存工具封装

大众点评项目 缓存工具封装需求&#xff1a;缓存工具封装业务实现代码总览总结SpringCloud章节复习已经过去&#xff0c;新的章节Redis开始了&#xff0c;这个章节中将会回顾Redis实战项目 大众点评 主要依照以下几个原则 基础实战的Demo和Coding上传到我的代码仓库在原有基础…

视频直播技术干货:一文读懂主流视频直播系统的推拉流架构、传输协议等

1、引言 随着移动网络网速的提升与资费的降低&#xff0c;视频直播作为一个新的娱乐方式已经被越来越多的用户逐渐接受。特别是最近这几年&#xff0c;视频直播已经不仅仅被运用在传统的秀场、游戏类板块&#xff0c;更是作为电商的一种新模式得到迅速成长。 本文将通过介绍实时…

爆火Chatgpt注册完全指南

1 chatgpt 简介 ChatGPT是一种语言模型&#xff0c;它被训练来对对话进行建模。它能够通过学习和理解人类语言来进行对话&#xff0c;并能够生成适当的响应。ChatGPT使用了一种叫做Transformer的神经网络架构&#xff0c;这是一种用于处理序列数据的模型&#xff0c;能够在输入…

第33篇 网络(三)FTP(一)

导语 上一节我们讲述了HTTP的编程&#xff0c;这一节讲述与其及其相似的FTP的编程。FTP即FileTransfer Protocol&#xff0c;也就是文件传输协议。FTP的主要作用&#xff0c;就是让用户连接上一个远程计算机&#xff0c;查看远程计算机有哪些文件&#xff0c;然后把文件从远程…

STM32F4 | STM32CubeMX 图形配置工具

文章目录一、STM32CubeMX 简介二、STM32CubeMX 运行环境搭建1.Java环境安装2.STM32CubeMX 图形化工具安装三、使用 STM32CubeMX 工具配置工程模板1.工程初步建立和保存2.RCC 设置3.时钟系统&#xff08;时钟树&#xff09;配置4.GPIO 功能引脚配置5.生成工程源码6.编写用户程序…

汽车行业:充分借力数据价值,推动数字化营销链路闭环

当下&#xff0c;汽车行业已慢慢由曾经的增量市场逐步转变为存量市场。更年轻的消费群体偏好、更精准智能的营销投放策略和强势入局的新能源汽车等因素都在推动着汽车行业的不断发展。对于汽车厂商和垂域媒体来说&#xff0c;进行丰富的人群洞察与用户分层&#xff0c;能挖掘更…

陪诊服务系统源码,可以在线预约陪诊师的软件平台

随着生活方式受互联网的影响&#xff0c;我们的各方面都变得更加便利&#xff0c;也伴随着我国人口老龄化&#xff0c;大部分年轻人都选择了外出打工&#xff0c;背井离乡&#xff0c;从而没有办法待在父母身边照顾&#xff0c;陪诊师就是在这个大背景下诞生了&#xff0c;陪诊…

班级校园网页设计作业 静态HTML我的班级网页 DW班级网站模板下载 大学生简单班级网页作品代码 我的大学网页制作 学生班级网页设计作业

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

LeetCode刷题复盘笔记—一文搞懂动态规划之121. 买卖股票的最佳时机问题(动态规划系列第二十篇)

今日主要总结一下动态规划的一道题目&#xff0c;121. 买卖股票的最佳时机 题目&#xff1a;121. 买卖股票的最佳时机 Leetcode题目地址 题目描述&#xff1a; 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一…

QML入门教程:QML和QtQuick简介以及QML实例

从 Qt 4.7 开始&#xff0c;Qt 引入了一种声明式脚本语言&#xff0c;称为 QML&#xff08;Qt Meta Language 或者 Qt Modeling Language&#xff09;&#xff0c;作为 C 语言的一种替代。而 Qt Quick 就是使用 QML 构建的一套类库。 QML 是一种基于 JavaScript 的声明式语言。…

激光焊接3系铝合金的工艺分析

随着汽车行业的不断壮大&#xff0c;纯电动汽车和燃料电池汽车将共同主导中国新能源汽车市场的未来发展。电动车轻量化和燃料电池的大量使用&#xff0c;必然涉及到越来越多的铝合金焊接工艺。铝合金具有良好的物理、化学和机械性能&#xff0c;是工业生产中一种重要的轻金属材…

搜索引擎搜索特定网站的方法 :site

前言 从13开始的贴吧时代&#xff0c;还记得当时在贴吧里要搜索某些特定的帖子或者关键字的时候&#xff0c;用的都是“吧内搜索”&#xff0c;但用过的人都知道&#xff0c;这个所谓的吧内搜索其实很难用&#xff0c;大家都是用关键字空格贴吧之类的办法去搜索相关的内容。我…

2025年350万辆市场空间!舱驾一体「抢」行泊/舱泊风头

过去三年是汽车智能化「细分作战」阶段&#xff0c;无论是智能驾驶还是智能座舱&#xff0c;由于品牌、车型定位不同&#xff0c;导致在不同价位区间、不同品牌、不同车型&#xff0c;舱内舱外智能化功能组合并不一致。 而随着跨域融合、中央计算平台带动汽车行业进入新的增长…