本站消息

  出租广告位,需要合作请联系站长

  今日名言-想象你自己对困难作出的反应,不是逃避或绕开它们,而是面对它们,同它们打交道,以一种进取的和明智的方式同它们奋斗 。——马克斯威尔·马尔兹

  今日名言-用谅解、宽恕的目光和心理看人、待人。人就会觉得葱笼的世界里,春意盎然,到处充满温暖。——蔡文甫


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

紫光正式批/蔚来提前批笔试记录

发布于2021-07-25 07:36     阅读(553)     评论(0)     点赞(19)     收藏(1)


1、紫光展锐笔试——2021.7.20

1.1 代码类——python语言
(A):remove():删除数组中第一次出现的目标值

def remove_i(l,n):
	for i in l:
		if(i==n):
			l.remove(i); # 删除数组中第一次出现的目标值i
			return l;
if __name__ == '__main__':
	l=[1,2,3,3,3]
	n=3
	remove_i(l,n)
	print(l)
结果:[1,2]

(B):两数组相加

a=[1,2,3]
b=[2,2,4]
print(a+b)
结果:[1,2,3,2,2,4]

(C):and 需要判断所有的条件 都为true 才会返回;or 的话判断到 有一个true 就返回。所以and在数字判断时返回最后一个,or返回第一个
优先级:not > and > or
0:false
非0:true

print(5 and 2 or 1)
结果:2

print(1 or 5 and 2)
结果:1

print(0 and -5)
结果:0

print('0' and '-sf5')
结果:-sf5

print(0.010 and '-sf5')
结果:-sf5

print(0.00 and '-sf5')
结果:0.00

(D):赋值=、浅拷贝copy.copy()、深拷贝copy.deepcopy()——copy库
python数据类型可分为基本数据类型(包括整型、字符串、布尔及None等),和由基本数据类型作为最基本的元素所组成的像列表、元组、字典等
例1:在Python中 基本数据类型的赋值、深浅拷贝没有任何意义,都是指向同一块内存地址,也不存在层次问题。

import copy
n1 = 'abc'
n2 = n1
n3 = copy.copy(n1)
n4 = copy.deepcopy(n1)
print(id(n1))    #输出140350336680040
print(id(n2))    #输出140350336680040
print(id(n3))    #输出140350336680040
print(id(n4))    #输出140350336680040

例2:在python中 列表、元组、字典等非基本数据类型对象的赋值、深浅拷贝的区别
赋值:将变量的内存赋给另一个变量,让另一个变量指向那个内存地址。
浅拷贝:在内存中将第一层额外开辟空间进行存放。

n1 = {"k1": "abc", "k2": 123, "k3": ["abc", 123]}   
print(id(n1))    #140350328984328
n3 = copy.copy(n1)
print(id(n3))    #140350328986504可以看n3的内存地址已经和n1不同了

print(id(n1['k3']))    #140350328603976
print(id(n3['k3']))    #140350328603976 字典里的列表还是指向同一个列表

深拷贝:在内存中将数据重新创建一份,不仅仅是第一层,第二层、第三层…都会重新创建。

n1 = {"k1": "abc", "k2": 123, "k3": ["abc", 123]}
print(id(n1))    #140350328984328
n3 = copy.deepcopy(n1)

print(id(n1['k3']))    #140350328603976
print(id(n3['k3']))    #140350328604296 #可以看到第二层的列表也拷贝了一份,内存地址已经完全不一样

#注意,这仅局限于非基本数据类型,基本数据类型还是同一个内存地址
import copy
a=[1,2,3,4,['a','b']] 
c=copy.copy(a) 
a.append(5) 
a[4].append('c') 
print(a,", ",c)
结果:[1,2,3,4,['a','b','c'],5], [1,2,3,4,['a','b','c']]

参考:
https://www.cnblogs.com/caoj/p/7868844.html
https://blog.csdn.net/xl502689459/article/details/102582007

1.2 代码类——c语言
(A):地址问题

unsigned char *p1; 
unsigned long *p2; 
p1=(unsigned char *)0x801000; 
p2=(unsigned long *)0x810000;
printf("%x",p2+5);	// 以16进制输出;%o:以8进制输出

求 p1+5,p2+5?
结果(32位中):
1代表的是一个单位量   
p1 + 5 = p1 + 5 * sizeof(unsigned char) = p1 + 5 * 1 = 0x801000 + 0x5 = 0x801005   
p2 + 5 = p2 + 5 * sizeof(unsigned long) = p1 + 5 * 4 = 0x810000 + 20 = 0x810000 + 0x14=0x810014
解析:
p1指向字符型,一次移动一个字符型,1个字节;p1+5后移5个字节,16进制表示为5;
p2指向长整型,一次移动一个长整型,4个字节,p2+5后移20字节,16进制表示为14。
默认32位中:{ char每次移动1个字节;short移动2个字节 ;int , long ,float移动4个字节 ;double移动8个字节 }

补充:
一、整数而言:
1、10进制转化为十六进制(0x):整数除以16取余,直到商为0为止,然后从最后一个余数读到第一个
在这里插入图片描述)
2、十六进制转为10进制:按权展开、相加即得。
在这里插入图片描述
十进制与二进制、八进制转换类似(将16变为2、8)。

二、小数而言:
1、小数的十进制转换成十六进制的方法:
十进制小数转十六进制小数,方法为乘十六取整,每次乘以相应之后基数后取结果的整数部分即可。需注意的是并非所有的十进制小数都能完全转化为十六进制小数,这时就需要取近似值
例: 0.9032D 转化成 16进制小数
0.9032 * 16=14.4512 取整数14 即E
0.4512 * 16=7.2192 取整数7
0.2192 * 16=3.5072 取整数3
0.5072 * 16=8.1152 取整数8
0.1152 * 16=1.8432 取整数1
所以这个数转换成16进制就是0.E7381H

通用:十进制小数转换为其他进制小数:
十进制小数转换为其他进制的方法与转换为十六进制的方法相同。
十进制小数 转 R进制小数,方法为乘R取整,每次乘以相应之后基数后取结果的整数部分即可。需注意的是并非所有的十进制小数都能完全转化为R进制小数,这时就需要取近似值。

2、十六进制带小数转换成十进制
十六进制数和十进制数类似,以小数点为界,整数部分从低位到高位依次是0次方位、1次方位、...、n次方位;小数部分从高位到低位依次是-1次方位、-2次方位、...、-m次方位,都可用加权求和的方式表示。
十六进制数转换成十进制数时,先用加权求和的方式表示出来,再将十六进制数中的基数“10H”替换成对应的十进制数值“16”,同时也将十六进制数中的A、B、C、D、E、F替换成对应的十进制数值10、11、12、13、14、15。然后完全用十进制的规则计算出来,所得就是与该十六进制数相等十进制数。
例:1A6.3B8H
=1 * 10^2 + A * 10^1 + 6 * 10^0 + 3 * 10^(-1)+ B * 10^(-2)+ 8 * 10^(-3)
=1 * 16^2 + 10 * 16^1 + 6 * 16^0 + 3 * 16^(-1)+ 11 * 16^(-2)+ 8 * 16^(-3)
=419.232422

(B):for(; ; ) 循环
for(; ; ) :无限循环。因for(;;)中没有循环条件,所以就是无条件循环,就是只能通过循环体中的内容来跳出循环

(C):执行次数

int x=0,i=0; 
while(!x && i<3) 
{
	x++;
	i++;
} 
循环一共执行几次:1次
解析:
第一次:!x为真,i<3为真。执行循环:x++; x为1,i++; i为1。
第二次:!x为假。while括号里为假,不执行循环。
所以循环只执行1次。循环过后x=1,i=1

2.1 数据结构
1、1,11,21,1211,111221,第六个数是多少?
答案:312211
解析:
11— 表示前一个数“1”是 1 个 1;
21— 表示前一个数“11”是 由 2 个 1 组成;
1211— 表示前一个数“21”是 由 1 个 2、1 个 1 组成;
111221— 即 11 12 21 ,表示前一个数“1211”是依次由 1 个 1,1 个 2,2 个 1组成;
所以,下一个数应填312211—即 31 22 11,表示前一个数“111221”是依次由3 个 1,2 个 2,1 个 1 组成;
同理,再下一个数根据312211填 13112221—即13 11 22 21, 表示前一个数“312211”是依次由 1 个 3,1 个 1,2 个 2,2 个 1 组成。
…依次类推

2、线性表的链式存储结构优于顺序存储结构。(X)
解析:以偏盖全。
顺序存储需要开辟一个定长的空间读写速度快,缺点不可扩充容量(如果要扩充需要开辟一个新的足够大的空间把原来的数据重写进去)
链式存储无需担心容量问题读写速度相对慢些,由于要存储下一个数据的地址所以需要的存储空间比顺序存储大
综上所述,如果元素个数已知,且插入删除较少的可以使用顺序结构,而对于频繁有插入删除操作,元素个数未知的,最好使用链式结构,编程时可结合要处理的数据的特点设计数据结构的。

3、下列说法错误的是 (B D)
A.利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,这种形式的栈也称为顺序栈
B.top=0 时为空栈,元素进栈时指针 top 不断地减 1
C.当top等于数组的最大下标值时则栈满
D.栈不能对输入序列部分或全局起求逆作用
解析:
A正确,虽然链栈也可以实现地址连续,但无法做到依次存放数据元素,因为除了元素域还需要存放指针域。因此满足条件的只有顺序栈
B错误,top= -1时为空栈top=0只能说明栈中只有一个元素,并且元素进栈时top应该自增
C正确,top所指向的对象永远是栈顶元素
D错误,栈的特性(先进后出)就决定了可以作为求逆元素的辅助空间。所谓求逆运算就是ABC依次入栈,输入CBA。

4、利用归并排序方法对数字序列:5,19,17,21,11,8,1进行排序,共需要进行( B)次比较
A.10
B.11
C.12
D.14
解析:
(1)首先(5,19)一次 ,(17,21)一次,(11,8)一次
(2)归并(5,19)(17,21):
5首先与17进行比较得到 5,17;(17,21)组中已经没有比17更小的了,但(5,19)组中不一定,所以17与19进行比较得到5,17,19;此时(5,19)组中没有比19更小的数了,但是(17,21)组中却不一定,所以19与21进行比较,得到5,17,19,21 一共三次比较
(3)归并(8,11) (1) :
8首先与1比较 得到 1,8 然后不再比较,因为剩下的数比8大,那么一定比1大(哎呀)。这次比较了 1次
然后对(5,17,19,21)和(1,8,11)排序 首先5与1进行,得到 1,5 。(5,17,19,21)组中没有比5小的,但(1,8,11)组中不一定,所以5与8进行比较得到1,5,8.同样(1,8,11)组中往后没有比8小的数,但是(5,17,19,21)组中不一定,所以8和17比较得到1,5,8,17;(5,17,19,21)组中往后没有比17更小的数,所以17与11比较得到 1,5,8,11,17;剩下的都比17大,不再比较得到(1,5,8,11,17,19,21)比较四次
所以一共比较了1+1+1+4+4=11次。

5、在这里插入图片描述
6、二叉树的三个部分:根结点、左子树、右子树组成。

3.1 软件测试
1、软件验收测试包括哪些?(ACD)
A、正式验收测试
B、白盒测试
C、alpha测试
D、beta测试
解析:
软件验收测试分为三类:
正式验收测试;
非正式验收测试其中包括α测试(由用户、测试人员、开发人员共同参与的内部测试。)和β测试(内测后的公测,即完全交给最终用户测试。)

2、软件生命周期中,需求阶段的软件缺陷修复费用最低

3、测试设计员的职责有:(B C )
A、制定测试计划
B、设计测试用例
C、设计测试过程、脚本
D、评估测试活动
解析:
测试人员的职责是:
1.编写测试用例
2.执行测试,发现软件测试缺陷并提交缺陷报告
3.验证所发现的缺陷是否得到修改
4.编写测试总结报告
5.设计测试过程和脚本
制定测试计划应是测试经理来做的,评估测试活动测试经理组织召集开发和测试的相关人员来做

4.1 计算机网络
1、相同码元速率下,那种传输方式信息传输速率最高 ? (B)
A、QPSK
B、16QAM
C、BPSK
D、GMSK
解析:
QPSK,它每符号为 2bit 的信息;
16QAM,它每符号为 4bit 的信息;
BPSK,它每符号为 1bit 的信息;
MSK,它每符号 2bit 的信息;

2、LTE系统多址方式包括(C D)
A.TDMA
B.CDMA
C.OFDMA
D.SC-FDMA

3、5G技术的应用场景有
在这里插入图片描述
4、网络层
在这里插入图片描述

2、蔚来笔试——2021.7.18

一、单选
1、有数据库表payslip,表结构为id INTEGER PRIMARY KEY, name TEXT salary INTEGER, date datetime。需要查询所有名字开头为"Nick"的人的所有salary的总和( A )
A、SELECT SUM(salary) FROM payslip WHERE name LIKE “Nick%”
B、SELECT COUNT(salary) FROM payslip WHERE name LIKE “Nick%”
C、SELECT SUM(salary) FROM payslip WHERE name LIKE “Nick*”
D、SELECT COUNT(salary) FROM payslip WHERE name LIKE “Nick%”

2、店里面丢失了一个黄金首饰,怀疑对象有4人, 被间问,4人的供达如下:
A:我们4人都没偷
B:小偷在我们4人中问
C: B和D至少有一 个人不是小偷
D:我不是小偷
如果4人中已知有2人说的是真话,2人说的是假话,则下面哪个断定成立( A )
A、说真话的是B和C
B、说真话的是A和c
C、说真话的是B和D
D、说真话的是A和D

3、Linux的定时任务配置crontab的设置方法哪个是正确的( D )
A、min hour day_of_week day_of_month day_of_ year command
B、command min hour day_of_week day_of_month day_of_year
C、comand min hour day_of_month month day_of_week
D、min hour day_of_month month day_of_week command

4、链表不具有的特点是:(D)
A、所需空间与线性长度成正比。
B、插入、删除不需要移动元素。
C、插入、 是除不需要移动元素。
D、可随机访问任一元素。

5、

d1=[3,6,4]
d2=d1
d2[2]=8
sum=d1+d2
sum=?
结果:[3,6,8,3,6,8]

6、关于HTTP返回码,如下描述正确的是(A)
A、5xx这种5开头的错误, 都是服务器错误
B、ajax请求,返回数据正确时,返回码是201而不是200(应该是200?)
C、301和307表示服务器要求重定向——(表示资源重定向)
D、403表示服务器接受了请求,但却拒绝处理——(服务器拒绝提供服务)

7、

class Father(object):
	x=1
	
class Son(Father):
	pass

class Daughter(Father):
	pass

print(Father.x,Son.x,Daughter.x)

Son.x=2
print(Father.x,Son.x,Daughter.x)

Father.x=3
print(Father.x,Son.x,Daughter.x)

结果:
(1, 1, 1)
(1, 2, 1)
(3, 2, 3)

解释:在Python 中,类变量在内部是作为字典处理的。如果一个变量的名字没有在当前类的字典中发现,将搜索祖先类(比如父类)直到被引用的变量名被找到(如果这个被引用的变量名既没有在自己所在的类又没有在祖先类中找到,会引发一个AttributeError 异常)。
因此,在父类中设置x = 1 会使得类变量 x 在引用该类和其任何子类中的值为 1 。这就是因为第一个 print 语句的输出是 1 1 1。
随后,如果任何它的子类重写了该值(例如,我们执行语句 Child1.x = 2 ),然后,该值仅仅在子类中被改变。这就是为什么第二个 print语句的输出是 1 2 1 。
最后,如果该值在父类中被改变(例如,我们执行语句Parent.x = 3 ),这个改变会影响到任何未重写该值的子类当中的值(在这个示例中被影响的子类是 Child2 )。这就是为什么第三个 print 输出是 3 2 3 。

class Father(object):
	x=1
	
class Son(Father):
	pass

class Daughter(Son):
	pass

print(Father.x,Son.x,Daughter.x)

Son.x=2
print(Father.x,Son.x,Daughter.x)

Father.x=3
print(Father.x,Son.x,Daughter.x)

结果:
(1, 1, 1)
(1, 2, 2)
(3, 2, 2)

8、设有一个递归算法如下:

int fact(int n)
{ /*大于等于0 */
if(n<=θ) return 1;
else return n*fact (n-1) ;
}
解释:阶乘

则计算fact(n)需要调用该函数的次数为( A )
A、n+1
B、n+2
C、n-1
D、n

9、ping www.nio.com没有涉及到的网络协议是(B)
A、DNS
B、TCP
C、ICMP
D、ARP

在公司局域网上ping www.qq.com一定不涉及的网络协议是( A )。
A. UDP
B. DNS
C. ICMP
D. RAAP

10、以下对CAN总线描述不正确的是( B )
A、可连接节点多
B、可与计算机直接相连
C、抗干扰能力强
D、传输距离远

11、下列关于进程和线程说法不正确的是(D)
A、进程有独立的地址空间,线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间
B、进程间通信包括共享存储器系统、 管道通信等
C、任何进程都可以同其他进程一起并发执行
D、进程是任务调度执行的基本单位——应该是:线程是任务调度执行的基本单位

12、快要期末考试了,一个班级的学生进行数学考试,几位老师谈论整个班学生的数学考试成绩:
王老师说:这次期末考试准备时间太短,这个班没有人的数学成绩会是90分以上”
马老师说:“不会吧, 有几个人数学一直很好,他们的数学成绩会是90分以上的"
李老师说:我看班长和数字课代表能考出90分以上的数学成绩
结果发现三位老师中只有一人说对了,
由此可以推断出一下哪一项肯定为真?(D)
A、班里所有人的数学成绩都是90分以上
B、班长的数学成绩是90分以上
C、数学课代表的数学成绩是90以下
D、全班所有人的数学成绩都没有90分以上

13、没有需文档和产品说明书的情况下,只能用下列哪种测试方法( C )
A、条件覆盖测试
B、语句覆盖测试
C、错误推测法测试
D、路径分析测试

14、下列描述中正确的是(B)
A、在IP分类地址方案中,128.226.181.1是个C类地址
B、IP协议利用TTL(TIME TO LIVE 生存时间)控制数据传输的时延
C、HTTP的长连接可以永久保持
D、相比交换机,路由器可以提供更大的带宽和数据转发功能
解析:
选项A:
A类地址的表四范围为[0.0.0.0,126.255.255.255],规模特别大的网络使用
B类地址的表四范围为[128.0.0.0,191.255.255.255],一般的中型网络使用
C类地址的表四范围为[192.0.0.0,223.255.255.255],小型网络使用
D类地址称为广播地址,供特殊协议向选定的节点发送信息使用
故而,128.226.181.1是个B类地址
选项C:
HTTP的长连接不会永久保持连接,有一个保持时间,可以在不同的服务器(如Apache)中设定这个时间
选项D:
交换机可以提供更大的带宽和数据转发功能。路由器工作在网络层,交换机工作在链路层,路由器具有交换机的全部功能,更复杂
15、Linux系统上,不能用来编辑文件内容的命令是(B)
A、nano
B、more
C、vi
D、vim

16、下列不是消息队列的是(C)
A、Kafka
B、RabbitMQ
C、Redis
D、ZeroMQ

17、给予文件file1的访问权限:用户组为“可读可写”,所有者为“可读可写可执行”,其他用户为“可读”,以下命令正确的是(A)
A、chmod 764 file1
B、chmod 647 file1
C、chmod 467 file1
D、chmod 674 file1
解析:
0:表示没有权限,1:表示可执行权限,2:表示可写权限,4:表示可读权限,然后将其相加。
所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。
u 表示“用户(user)”,即文件或目录的所有者。
g 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。
o 表示“其他(others)用户”。
a 表示“所有(all)用户”。它是系统默认值。

所以:-rwxrw-r--:1+4+2=7,4+2=6,4
在这里插入图片描述
参考https://www.cnblogs.com/xzdblogs/p/6377308.html

18、已知2<=Y<10,若采用黑盒测试方法中的边界值法,请问Y的边界值应该是( A )——开内闭外
A、Y=1,Y=2, Y=9,Y=10
B、Y=1,Y=2,Y=9, Y=10, Y=11
C、Y=1,Y=2,Y=3,Y=9, Y=10, Y=11
D、Y=2, Y=9

19、对软件的要求,首先要满足的是(A)
A、功能要求
B、可扩展性及灵活性
C、健壮性
D、性能要求

20、HTTP使用( B )来保证信息安全的
A、FPSEC
B、SSL
C、SSH
D、SET

二、多选
1、python中__new__ 和__init__ 的区别是( ABCE )
A、只有在__new__返回一个cls的实例时后面的__init__ 才能被调用
B、new__方法会返回一个创建的实例,而__init 什么都不返回
C、当创建一个新实例时调用__new__,初始化一 个实例时用__init__
D、每次实例化一个对象,都会调用__new__ 和__init__
E、new__是一个静态方法,而__init 是一个实例方法
解析:
__new__是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例对象,是个静态方法,是真正的构造函数
__init__是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值,通常用在初始化一个类实例的时候。是一个实例方法
__new__先被调用,__init__后被调用,__new__的返回值(实例)将传递给__init__方法的第一个参数,然后__init__给这个实例设置一些参数。

2、下列属于LIN帧的分类的是(ABCDE)
A、诊断帧
B、用户自定义帧
C、保留帧
D、零星帧
E、普通帧
解析:LIN帧按照帧类型来分类可以分为普通帧、事件触发帧、零星帧、诊断帧、用户自定义帧和保留帧。

3、软件验收测试的合格通过准则是:(BCD)
A、所有测试项有残余一级、二级和三级错误
B、立项审批表、 需求分析文档、设计文档和编码实现一致
C、验收测试工件齐全
D、软件需求分析说明书中定义的所有功能已全部实现,性能指标全部达到要求
解析:
验收准则如下:
1、软件需求分析说明书中定义的所有功能已全部实现,性能指标全部达到要求。
2、所有测试项没有残余的一级二级三级的错误。
3、立项审批表、需求分析文档、设计文档和编码实现一致。
4、验收测试工件齐全(测试计划,测试用例,测试日志,测试通知单,测试分析报告)

4、关于排序其法,以下的哪些叙述是正确的?(BC)
A、冒泡排序的时间复杂度为O(n^2),它是一个不稳定排序
B、归并排序的时间复杂度为O(nlog(n)),它需要O (n)的额外存储空间来完成排序
C、堆排序的最坏时间复杂度为O(nlog(n)),它不需要额外存储空间来完成排序
D、快速排序的最坏时间复杂度为O(nlog(n)),它是一个不稳定排序
解析:
冒泡算法的稳定性:稳定
冒泡算法的排序方式:in-place
冒泡算法的空间复杂度:O(1)
冒泡算法的原始算法的时间复杂度为:O(n^2);
改良算法的最好时间复杂度为O(n),发生在数组已经排好序了;
最坏时间复杂度为O(n^2),发生在数组是降序的;
平均时间复杂度为 O(n^2)

选择算法的稳定性:不稳定
选择算法的排序方式:in-place
选择算法的空间复杂度:O(1)
选择算法的时间复杂度:O(n^2)

插入算法的稳定性:稳定
插入算法的排序方式:in-place
插入算法的空间复杂度:O(1),不使用额外空间的,稳定的算法中最快的算法
插入算法的时间复杂度:O(n^2),但相较于冒泡排序和选择排序仍更快
在这里插入图片描述

5、正则表达式A*B+可以匹配(ABC)
A、ABB
B、B
C、AAB
D、A
解析:
在这里插入图片描述
6、下列说法正确的是(BC)
A、CAN采用破坏总线仲裁技术
B、CAN为多主工作方式, 而且不分主从
C、CAN的直接通信距离可达10Km
D、CAN是目前为止唯一有国际标准的现在总线
解析:
CAN采用非破坏总线仲裁技术
CAN是目前为止唯一有国际标准的现场总线

7、下列哪些是Python中的可送代对象(ABCD)
A、元组
B、字典
C、字符串
D、列表

8、下列哪些命令可用于查看Linux下系统内存使用量(ABD)
A、vmstat
B、free
C、df
D、top
解析:
free 命令
/proc/meminfo 文件
vmstat 命令
ps_mem 命令
smem 命令
top 命令
htop 命令
glances 命令



所属网站分类: 技术文章 > 博客

作者:你爱不爱我

链接:http://www.pythonpdf.com/blog/article/553/454aebd1ba02b8b4a979/

来源:编程知识网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

19 0
收藏该文
已收藏

评论内容:(最多支持255个字符)