《小米嵌入式软件工程师面试题集.docx》由会员分享,可在线阅读,更多相关《小米嵌入式软件工程师面试题集.docx(14页珍藏版)》请在课桌文档上搜索。
1、小米嵌入式软件工程师面试题集选择题1、已经获得除CPU以外的所有所需资源的进程处于。状态:A就绪状态B阻塞状态C运行状态D活动状态A进程的五状态模型:运行态:该进程正在执行。就绪态:进程已经做好了准备,只要有机会就开始执行。阻塞态(等待态):进程在某些事情发生前不能执行,等待阻塞进程的事件完成。新建态:刚刚创建的进程,操作系统还没有把它加入到可执行进程组中,通常是进程控制块已经创建但是还没有加载到内存中的进程。退出态:操作系统从可执行进程组中释放出的进程,或由于自身或某种原因停止运行。2、某二叉树的中序遍历序列为32145,后序遍历序列为32145,则前序遍历序列为:A54123B32154C
2、32541D54321A二叉树的中序遍历序列为32145,后序遍历序列为32145,可知该树只有左子树结点,没有右子树结点,5为根结点。中序遍历序列与后序遍历序列相同,说明该树只有左子树没有右子树,因此该树有5层,从顶向下依次为54123O3、若已知一个栈的入栈顺序是l,2,3.,n,其输出序列为Pl,P2,P3,.Pn,若Pl是n,则Pi=()?AiBn-i+1C不确定Dn-iB栈的排列遵循先进后(即后进先出)出的原则因为Pl是n,是出栈的第一个数字,说明在n之前进栈的数字都没有出栈。所以这个顺序是确定的。还可以知道,最后出栈的一定是数字L也就是Pn。代入这个式子,是正确的。4、(多选题)下
3、面协议中属于应用层协议的是:AlCMP、ARPBFTP、TELNETCHTTPSNMPDSMTPPOP3BCD1、物理层:以太网、调制解调器、电力线通信(PLC)、SONET/SDH、G.709、光导纤维、同轴电缆、双绞线等。2、数据链路层:Wi-Fi(IEEE802.11)、WiMAX(IEEE802.16)、ATM、DTM令牌环、以太网、FDDIs帧中继、GPRS、EVDOsHSPA、HDLC、PPP、L2TP、PPTP、ISDNSTPCSMA/CD等。3、网络层协议:IPIPv4、IPV6、ICMP、ICMPV6IGMP、IS-IS、IPsec、ARP、RARP、RlP等。4、传输层协议
4、:TCP、UDP、TLS、DCCPSCTP、RSVP、OSPF等。5、应用层协议:DHCP、DNS、FTPGopher、HTTP、IMAP4、IRC、NNTP、XMPP、POP3、SIP、SMTP、SNMP、SSHTELNET、RPC、RTCP、RTP、RTSP、SDP、SOAP、GTP、STUN、NTP、SSDP、BGP等。5、下列程序段的时间复杂度是:returnn*fact(n-l);AO(log2n)BO(nlog2n)CO(n)DO(n*n)C当n=l时执行return1这一个语句,每次返回上一层都执行n*fact(n-l)这一个语句,共执行nT次。因此共执行基本语句n次,时间复杂度
5、为0(n)6、下列排序算法中最好情况和最坏情况的时间复杂度相同的是?A堆排序B快速排序C冒泡排序D归并排序AD堆排序在最好和最坏情况下的时间复杂度均为0(nlogn)快速排序最好和最坏情况下的时间复杂度分别为0(nlogn)和O(rf2)冒泡排序排序在最好和最坏情况下的时间复杂度均为O(n)O(r2)归并排序在最好和最坏情况下的时间复杂度均为O(rlogn)7、将两个各有n个元素的有序表归并成一个有序表,最少的比较次数是?AnB2nCn-ID2n-1归并排序是将两个或两个以上的有序子表合并成一个新的有序表。在归并排序中,核心步骤是将相邻的两个有序序列归并为一个有序序列。题目中告诉我们,有两个各
6、有n个元素的有序序列,要将这两个序列归并成一个有序序列,其方法是依次从小到大取每个序列中的元素进行比较,将较小的放进一个新的序列中,直到取完一个有序序列中的所有元素。再把另一个序列中剩下的元素放进新序列的后面即可。最好的情况是一个有序序列中的最小元素大于另一个有序序列中的所有元素,这样只需要比较n次。8、将递归算法转换为非递归算法通常需要使用:A栈B队列C队列D广义表D9、在MySqI中,productnameregexpl-3XiaOmi的含义是:Aproductname匹配xiaomi重复1次或5次的字符串Bproductname匹配xiaomi字符串前一个字符为1或3的字符串Cprodu
7、ctname匹配xiaomi重复1到3次的字符串Dproductname匹配xiaomi字符串前一个字符为1到3的字符串D10、同个进程的不同线程以下不能被共享的是:A全局变量B堆C文件句柄D栈D线程共享的进程环境包括:进程代码段、进程的公有资源(如全局变量,利用这些共享的数据,线程很容易的实现相互之间的通信)、进程打开的文件描述符、消息队列、信号的处理器、进程的当前目录、进程用户ID、进程组ID线程独占资源:线程ID、寄存器组的值、用户栈、内核栈(在一个进程的线程共享堆区(heap)、错误返回码、线程的信号屏蔽码、线程的优先级专项选择题1、下列JaVa函数的执行结果是什么?booleanfo
8、o(charc)SyStem.OUt.returntrue;IPUbliCStatiCVOidmain(strinjinti=0;for(foo(B);foo(A)&(i2);foo(,C,)i+;foo(D);ABADCBDCBBBACDBACDcBadcadcaD运行时抛出异常C1.其实foo(B);就是初始化条件,只会执行一次,所以第一个打印的肯定是Bo2 .因为i=0;循环条件是i2(由此可知,循环i等于2的时候就会停止循环),所以02满足条件,接着会输出A。然后执行i+;i就变成1了,在输出D,在最后输出Co一次循环后的结果是:BADCo3 .第二次循环的开始是foo(B);是初始条
9、件,所以不会执行。直接从foo(A)开始,输出A,然后i为1,且小于2,此时循环体内再次执行i+;i的值为2了,再次输出D,最后输出C。第二次循环输出:ADCo4.然后循环再次执行for(foo(,B,);foo(,A,)&(i2);foo(,C,),直接输出A。i的值在第二轮循环后的值变成了2,22不成立,终止循环,输出A。故输出结果是:Badcadca02、下列有关软链接表述正确的是:A不可以对不存在的文件创建软链接B不能对目录创建软链接C和普通件没有什么不同,inode都指向同一个文件在硬量中的区块D保存了其代表的文件的绝对路径是另一种文件。在硬盘上有独立的区块,访问时替代自身路径CA:
10、错。后半句说的是硬链接。硬链接是共同拥有同一个inode,不过是每个链接名不同,暂时理解成不同的文件名却指向同一文件。一个文件每加一个硬链接linkcount加I0B:错。可以对目录创建软链接。如下图所示。root0server#mkdir-p-tmptestmydirroot0server-#IS-atmp八est.Hydirrootroottnptest三ydirdrwxr-xr-x3rootroot4096Feb2111:52tnp(root0server-#D:错。可以对不存在的文件创建软链接,如下图所示。TsofrlinkejnyfileIrwxrwxrwx1rootroot21Fe
11、b2112:22Irwxrwxrwx1rootroot2Feb2111:53rwxr-xr-x3rootroot4096Feb2111:52root0server -# In -s -tmptestmyfile root0server -# Il total 4root0server -# Il tmp八est total 4drwxr-xr-x 2 root root 496 Feb 21 11:52sotrlinke myfile - roottptestyfile Softlinkeydir - roottptestydir tPIiydir(root0server # echo ,kh
12、khtmptest/myfile rootserver -# IlIrwxrwxrwx1rootroot21Feb2112:22Irwxrwxrwx1rootroot2Feb2111:53drwxr-r-3rootroot496Feb2111:52total 4sofrlinke yfile - roottmptest/myfile SOftlinkjiydir - roottptestydir tP3、选项中哪一行代码可以替换addcodehere而不产生编译错误?IPUbIiCabstructClaSSMyCIaSsPUbliCinttestlnt=5;PUbliCVOidmethod()
13、ApublicabstractvoidanotherMethod()Btestlnt=testlnt*5Cpublicintmethod();DpublicabstractvoidanotherMethod(inta)DA:该项方法有abstract修饰,所以是抽象方法,由于抽象方法不能有方法体,所以A项错误B:类体中只能定义变量和方法,不能有其他语句,所以B项错误C:选项中的方法和类中的方法重复,所以会发生编译异常,所以C项错误4、有关JaVa静态初始化块说法不正确的是:A用户可以控制何时执行静态初始化块B无法直接词用静态初始化块C在创建第一个实例前,将自动调用静态初始化块来初始化D静态初始
14、化块没有访问修饰符和参数JAVA的初始化顺序:父类的静态成员初始化父类的静态代码块子类的静态成员初始化子类的静态代码块父类的代码块父类的构造方法子类的代码块子类的构造方法5、(多选题)以下分别对变量a给出定义,正确的有:A一个有10个指针的数组,该指针指向同一个整型数:int*a10;B一个指向10个整型数组的指针:int(*a)10;C一个指向函数的指针,该函数有一个整型数并返回一个整型数:int*a(int);D一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数:int(*a10)(int);ABDC改为:int(*a)(int)指针数组:首先是一个数组,数组
15、里面的元素都是指针;(存储指针的数组)数组指针:首先是一个指针,指针指向一个一维数组;(指向数组的指针)函数指针:一定要理解,回调中经常使用函数指针;指针函数:就是一个普通函数,只是返回值是指针形式;6、(多选题)下列叙述正确的是:A指针可以为空,引用不能为空。B不存在指向空值的引用,但是存在指向空值的指针C引用必须被初始化,但是指针不必D指针初化后不能被改变,引用可以改变所指对象ABCD:引用初始化以后不能被改变,指针可以改变所指的对象7、下列关于C+容器描述错误的是:Alist类型支持双向顺序访问,在list中任何位置插入删除都很快Bdeque类型支持快速顺序访间,在头尾插入/删除速度很快
16、CC+标准库map的底层实现为红黑树Dvector类型在每次调用PUShbaCk时都在栈上开辟新内存Bdeque:双端队列。支持快速随机访问。在头尾位置插入/删除速度很快。8、(多选题)C+中,下列数据类型的转换,哪个可能会发生信息丢失?Aint-doubleBint-longClong-floatDint-charCD精度丢失只会发生在从大范围到小范围的转换32位编译器:charshortintlongfloatdouble指针124448464位编译器charshortintlongfloatdouble指针12484889、在JaVa中,要使某个类能被同一个包中的其他类访问,但不能被这个
17、包以外的类访问,可以:A使用private关键字B让该类不使用任何关键字C使用public关键字D使用protected关键字Bdefault和protected的区别是:前者只要是外部包,就不允许访问。后者只要是子类就允许访问,即使子类位于外部包。总结:default拒绝一切包外访问;PrOteCted接受包外的子类访问10、(多选题)list和vector的区别有哪些?AVeCtOr拥有一段连续的内存空间,因此支持随机存取,如果需要高效的随即存取,而不在乎插入和删除的效率,使用vector.BIiSt拥有一段不连续的内存空间,因此支持随机存取,如果需要大量的插入和删除,而不关心随即存取,则
18、应使用IiStC已知需要存储的元素时,使用IiSt较好D如果需要任意位置插入元素,使用VeCtOr较好ABC:已知需要存储的元素时,vector要好D:如果需要任意位置插入元素,IiSt要好编程题L字符串筛选给定一个字符串,需要去除所有之前曾经出现过的字符,只保留第一次出现的字符。样例输入:hellozwelcometoxiaomi样例输出:helo,Wcmtxia思路:首先需要定义两个数组,分别为“输入的字符串数组。1仇以及输出的字符串数组new;取old数组中的第一个字符去和new数组中的每一个字符串相比较是否相同,若出现相同,则取。Id数组的下一个字符再次与new中每一个字符相比较,若都
19、不相同则存入new的数组中;最后输出数组new:代码:fficludeIVoidkillsame(Char*。,Char*n)Iabel=1;for(j=0;ji;j+)Iabel=0;if(:LabeDputs(n);printf(Pleaseinputastringyouwant:n);charnkillsame(old,new);,编程题2:字符串有效判断给定一个只包括y,%tx,的字符串,判断字符串是否有效。有效字符串需满足:左括号必须使用相同类型的右括号闭合左括号必须以正确的顺序闭合注意:空字符串可被认为是有效字符串。输入描述:待判断的字符串,多个字符串需换行输入输出描述:每个字符串
20、的判断结果,多个结果需换行输出样例输入:O()样例输出:truefalsetrue思路:栈先入后出特点恰好与本题括号排序特点一致,所以用栈来实现。当左括号出现的时候入栈,当右括号出现的出栈,如果匹配就继续,不匹配就错误。当字符串遍历完成之后,栈内仍有字符串就错误。用一个数组进行和一个记录栈顶值的int进行了栈的模拟,代码很简单,很好理解。代码:MftincludeMintIen=for(i=。;if(sM=()11(SStaCk+top=si;elsdif(top=0)returntrue:intmain(void)Printf(PleaseenterabunchOfbrackets:n);Printf(isValid(brackets);return0;