小米YU7发布在即,你准备好迎接小米的挑战了吗?——面试题精选50题
小米YU7发布在即,你准备好迎接小米的挑战了吗?——面试题精选50题
目录
想拿小米 offer?***********************,实时生成高质量答案,轻松应对面试,成功率翻倍!官网:*************
从小米YU7到Offer:小米算法面试题全解析
iOS开发
1. 属性声明
面试题:下面哪个选项是属性的正确声明方式?
正确答案: @property(retain) NSString *myString
本题知识点:iOS属性修饰符
在iOS开发中,属性修饰符决定了内存管理策略。assign
适用于基本数据类型,而retain
适用于引用类型对象如NSString。
2. weak对象存储
面试题:runtime会将weak对象放入下面哪种数据结构中?
正确答案: hash表
本题知识点:iOS内存管理,runtime机制
runtime会把weak对象存放到hash表中,对象的内存地址作为键,当对象的引用计数为0时会被回收。
3. 方法死循环
面试题:
- (void)setName:(NSString *)name {
self.name = name;
}
被调用的结果是:
正确答案: 程序死循环
本题知识点:iOS方法调用机制
在这个setter方法中,self.name = name
会再次调用同一个setter方法,导致无限递归,最终导致栈溢出和程序崩溃。
4. weak修饰类型
面试题:下列哪种类型的属性对象可以使用weak修饰?
正确答案: NSString *
本题知识点:iOS内存管理
weak只能用来修饰对象类型,而不能用于基本数据类型(如BOOL、NSInteger)。
5. 沙盒文件同步
面试题:沙盒中哪个文件内容可以通过iTunes/iCloud同步?
正确答案: Documents
本题知识点:iOS文件系统
Documents目录用于存储用户创建的内容,可以通过iTunes/iCloud同步;而tmp目录用于临时文件,Caches用于缓存。
6. 触摸事件类型
面试题:触摸事件包括以下哪几种?
正确答案: touchesBegan, touchesMoved, touchesCancelled, touchesEnded
本题知识点:iOS事件处理机制
这四种事件分别代表触摸开始、触摸移动、触摸取消和触摸结束,构成了iOS触摸事件的完整生命周期。
7. OC中的类与isa指针
面试题:关于OC中的类及isa,下列说法正确的有?
正确答案:
- 每个实例对象都有个isa的指针,他指向该对象的类
- 每个类本质上都是一个对象,是其元类(meteClass)的实例
本题知识点:iOS类结构,Objective-C运行时
服务端开发
8. 排序算法的时间复杂度和稳定性
面试题:对于排序算法,经常关注的是其时间复杂度和稳定性。下列排序算法中平均时间复杂度是O(nlogn)且稳定的是?
正确答案: 归并排序
本题知识点:排序算法
各排序算法的时间复杂度和稳定性:
- 冒泡排序:O(n²),稳定
- 插入排序:O(n²),稳定
- 归并排序:O(nlogn),稳定
- 堆排序:O(nlogn),不稳定
- 快速排序:O(nlogn),不稳定
9. OSI网络模型
面试题:经典的OSI模型定义了一个七层网络协议,下列协议中属于网络层的是?
正确答案: IP
本题知识点:网络基础
OSI模型七层(自顶向下):应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。 IP为网络层协议,TCP/UDP为传输层协议,HTTP为应用层协议。
10. 面向对象继承关系
面试题:在面向对象编程里,经常使用is-a来说明对象之间的继承关系,下列对象中不具备继承关系的是?
正确答案: 中国与北京
本题知识点:面向对象编程概念
正确的继承关系应该满足"is-a"原则:
- 小米手机 is a 手机 ✓
- 雷军 is a 企业家 ✓
- Java is a 编程语言 ✓
- 北京 is a 中国 ✗ (北京是中国的一部分,应该是"belongs-to"关系)
11. 平衡二叉树节点数
面试题:一个树高(根节点高度为1)为6的平衡二叉树,其节点数可能是?
正确答案: 32
本题知识点:树,平衡二叉树
平衡二叉树的节点数计算需要考虑平衡因子。高度为6的平衡二叉树的节点数应该在31-63之间,而给出的选项中32满足条件。
12. 二叉树遍历特性
面试题:一个二叉树的先序遍历结果和中序遍历结果相同,则其所有非叶子节点必须满足的条件是?
正确答案: 只有右子树
本题知识点:树,二叉树遍历
先序遍历顺序是:根-左-右 中序遍历顺序是:左-根-右 当这两种遍历结果相同时,意味着"根"和"左"的位置必须一致,这只有在左子树为空时才能满足。
算法工程师
13. 顺序表插入元素
面试题:在长度为n的顺序表的第i(1≤i≤n+1)个位置上插入一个元素,元素的移动次数为
正确答案: n-i+1
本题知识点:链表,数据结构
在第i个位置插入元素时,需要将从i到n的所有元素都向后移动一位,因此移动次数为n-i+1。
14. 二叉树的形态数量
面试题:由3个结点所构成的二叉树有()种形态
正确答案: 5
本题知识点:树,组合数学
n个节点的二叉树可能的形态数计算公式:C(n) = (1/(n+1)) * C(2n,n) = (2n)!/(n!(n+1)!) 当n=3时,C(3) = (23)!/(3!*4!) = 5
15. 二叉树遍历序列重建
面试题:给定二叉树的两种遍历序列,分别是: 前序遍历序列:D,A,C,E,B,H,F,G,I 中序遍历序列:D,C,B,E,H,A,G,I,F 那么后续遍历为:
正确答案: B,H,E,C,I,G,F,A,D
本题知识点:树,二叉树遍历
通过前序和中序遍历可以唯一确定一棵二叉树,然后可以得到其后序遍历。
16. 完全二叉树的度为2的节点数
面试题:一棵完全二叉树具有1000个结点,则此完全二叉树有()个度为2的结点
正确答案: 499
本题知识点:树,完全二叉树
在完全二叉树中,除了叶子节点外,其他节点都是度为2的节点。叶子节点数为(n+1)/2,所以度为2的节点数为n - (n+1)/2 = (n-1)/2 = 499。
17. 最小堆构建复杂度
面试题:n个节点的满二叉树调整成一个最小堆的最优复杂度
正确答案: O(N)
本题知识点:树,堆
从有子节点的节点开始由低到高依次调整,复杂度为O(N)。每个节点最多进行两次比较和互换操作。
18. 小米插线板问题
面试题:设有33小米智能家居设备, 现在只有一个电源输入插孔, 则至少需要5插头的小米插线板数
正确答案: 8
本题知识点:智力题,数学
假设每个插线板都插入前一个插线板,那么除了最后一个插线板外,前面所有插线板的有效使用量只有4个, 满足公式:4(x-1)+5≥33,解得x≥8。
Android开发
19. 二叉树的最少节点数
面试题:一棵二叉树高度为h(根的高度为1),所有结点的度是0或2,则这棵二叉树最少有()个结点
正确答案: 2h-1
本题知识点:树,二叉树
当二叉树的高度为h,且节点度只能为0或2时,为了使节点数最少,可以构造一条"主干",每层只有一个分支有子节点,这样节点总数为2h-1。
20. 堆排序过程
面试题:序列{49, 33, 55, 80, 20, 15, 49}用堆排序使其递增,输出第一个数后,调整之后新堆的层
正确答案: 20, 30, 49, 80, 55, 49
本题知识点:排序,堆排序
堆排序中,将堆顶元素与最后一个元素交换后,需要重新调整堆结构,得到新的堆。
21. LRU页面置换
面试题:一个进程执行时按{0,2,5,3,6,3,0,2,3,2}顺序访问页,进程分得3块主存块,采用LRU,产生多少次缺页中断
正确答案: 7
本题知识点:操作系统,页面置换算法
LRU(最近最少使用)算法在缺页时替换最长时间未被使用的页面。在给定的访问序列中,利用LRU算法进行模拟,会产生7次缺页中断。
22. P-V操作的信号量
面试题:若P、V操作的信号量S初值为2,当前值为-1,则表示有多少个等待进程?
正确答案: 1
本题知识点:操作系统,进程同步
信号量表示可用的资源数。初值为2表示初始有两个可用资源,当前值为-1表示这两个资源已被占用,并且有1个进程在等待资源。
23. 二级索引文件系统
面试题:一个采用二级索引文件系统(每块大小为2KB,每块地址占用4B)管理的最大的文件是?
正确答案: 512M
本题知识点:操作系统,文件系统
一个块能放2KB/4B=512个地址,二级索引,共能放512×512个块,每块大小2KB,所以能管理的最大文件为512×512×2KB=512MB。
24. TCP连接的建立与释放
面试题:TCP中,如果两台主机同时企图与对方套接字之间建立连接,结果是建立几个连接以及释放全部连接需要几次握手
正确答案: 1,4
本题知识点:网络基础,TCP协议
无论是同时发起连接请求还是一方先发起,最终只会建立1个TCP连接。释放连接需要4次挥手。
通用计算机基础
25. 网络流量与下载速度
面试题:某一速率为100M的交换机有20个端口,其一个端口上连着一台笔记本电脑,此电脑从迅雷上下载一部1G的电影需要的时间可能是多久?
正确答案: 10OS
本题知识点:网络基础
网络速率通常以比特/秒(bit/s)为单位,而文件大小以字节(Byte)为单位。 100Mbps = 100Mbit/s ≈ 12.5MByte/s 1GB = 1024MB 下载时间 ≈ 1024MB ÷ 12.5MB/s ≈ 82s ≈ 10OS(OS可能是某种时间单位)
26. 路由算法
面试题:以下哪个不属于路由算法
正确答案: 令牌桶算法
本题知识点:网络基础
路由算法典型包括:最短路径算法、泛洪算法、距离矢量算法等。 令牌桶算法是网络流量整形和速率限制中使用的算法,不是路由算法。
27. TCP/IP协议栈网络层
面试题:TCP/IP协议栈的网络层的主要功能是通过以下哪个协议来完成的?
正确答案: IP协议
本题知识点:网络基础
TCP/IP协议栈中,各层的主要协议:
- 应用层:HTTP, FTP, SMTP等
- 传输层:TCP, UDP
- 网络层:IP
- 链路层:以太网协议
28. 数据库事务ACID
面试题:下列关于数据库事务ACID特性的说法不正确的是?
正确答案: I指的是可用性,即数据库系统要为事务执行提供尽可能高的可用性,确保大部分事务可以成功的被执行
本题知识点:数据库
数据库事务的ACID特性:
- A:原子性(Atomicity),事务中的所有操作要么全部成功,要么全部失败
- C:一致性(Consistency),事务执行前后数据库状态保持一致
- I:隔离性(Isolation),并发事务之间相互隔离,不受其他事务影响
- D:持久性(Durability),事务一旦提交,其结果永久保存
29. 德州扑克概率
面试题:德州扑克中总共使用52张牌(不包括大小王),每个参与者都会先发两张手牌,请问对于一个参与者来说两张手牌组成对子的概率是?
正确答案: C(13,1)*C(4,2)/C(52,2)
本题知识点:概率统计
德州扑克有13种牌面,每种4张。组成对子需要从13种中选1种,然后从这种的4张中选2张,除以从52张牌中选2张的总组合数。
30. 进程与线程
面试题:下列关于进程和线程说法不正确的是?
正确答案: 进程之间可以共享资源,比如文件描述符等
本题知识点:操作系统
进程是资源分配的基本单位,线程是CPU调度的基本单位。不同进程之间资源是相互独立的,只有特殊情况(如父子进程)才能共享某些资源。
31. CPU指令集
面试题:CPU的指令集可以分为RISC和CISC两种,下列说法不正确的是?
正确答案: RISC的CPU更加耗电
本题知识点:计算机体系结构
RISC(精简指令集计算机)的指令功能较简单,指令长度固定,执行时间固定,通常耗电较少; CISC(复杂指令集计算机)的指令功能较强,指令系统庞大而复杂。
32. 设计模式选择
面试题:不同级别的用户对同一对象拥有不同的访问权利或某个客户端不能直接操作到某个对象,但又必须和那个对象有所互动,这种情况最好使用什么设计模式。
正确答案: Proxy(代理模式)
本题知识点:设计模式
代理模式适用于需要控制对某个对象的访问的场景,可以在访问对象前后做一些额外的处理,如权限控制。
33. 计算机内存中数据存储
面试题:signed char中-25在内存中的存储形式是以下哪一种
正确答案: 1110 0111
本题知识点:计算机组成原理
负数在计算机中以补码形式存储: -25的原码: 1001 1001 反码: 1110 0110 补码: 1110 0111
34. 抛硬币概率问题
面试题:有一苹果两个人抛硬币来决定谁吃这个苹果先抛到正面者吃。问先抛者吃到苹果的概率是多少
正确答案: 2/3
本题知识点:概率统计
这是一个无限等比数列求和问题。先抛者吃到苹果的概率为: 1/2 + (1/2)(1/2)(1/2) + ... = 1/2 * (1 + 1/4 + 1/16 + ...) = 2/3
35. 栈的输出序列
面试题:若入栈序列为A B C D E F,且进栈和出栈可以穿插进行,则不可能的输出序列为
正确答案: BCEAFD
本题知识点:栈,数据结构
栈是后进先出的数据结构。通过模拟入栈和出栈过程,可以判断某个序列是否可能是栈的输出序列。BCEAFD不满足栈的特性,因此不可能是输出序列。
其他重要面试题
36. iOS中向nil对象发送消息
面试题:在Objective-C中向一个nil对象发送消息,会发生什么,并解释原因?
答案要点:在Objective-C中向nil对象发送消息不会导致程序崩溃,而是会返回零值或nil。这是因为OC的消息机制会检查接收者是否为nil,如果是nil则简单地忽略该消息。
本题知识点:Objective-C, 消息传递机制
37. iOS应用状态
面试题:iOS应用都有哪些状态(App States),请分别解释?
答案要点:
- Not Running:应用未运行
- Inactive:应用在前台但不接收事件(如接电话)
- Active:应用在前台正常运行
- Background:应用在后台运行
- Suspended:应用在后台但不执行代码
本题知识点:iOS应用生命周期
38. 访问和修改私有属性
面试题:访问以及修改一个类的私有属性,可使用下列哪些技术?
正确答案: KVC, Runtime
本题知识点:iOS反射机制
KVC(Key-Value Coding)和Runtime都可以用来访问和修改私有属性,而KVO只能观察属性变化,无法修改。
39. NSArray存储类型
面试题:下面哪些数据类型,可以直接放进NSArray数组中?
正确答案: NSString, NSArray
本题知识点:iOS集合类
NSArray只能存储对象类型,不能直接存储基本数据类型如BOOL、NSInteger,而需要将其包装成NSNumber等对象。
40. Objective-C类扩展
面试题:拓展(extensions)能够在当前类中增加哪些内容?
正确答案: 方法, 属性
本题知识点:Objective-C特性
类扩展是匿名分类,可以为类添加私有属性和方法,但必须在主实现文件中实现这些方法。
41. IntentService特点
面试题:IntentService特点?可以bindService吗?如何创建一个绑定服务?
答案要点:
- IntentService特点:会创建独立的worker线程来处理所有Intent请求;处理完所有请求后会自动停止;适合执行不需要用户交互的后台任务。
- 可以bindService:可以,但不是其设计目的。
- 创建绑定服务:继承Service类,实现onBind()方法返回IBinder接口实例。
本题知识点:Android Service组件
42. Android Activity跨应用访问
面试题:如何判断是否可以打开另一个应用的Activity吗?
答案要点:
- 查看目标Activity的android:exported属性是否为true
- 尝试使用Intent和startActivity实际启动
- 检查AndroidManifest.xml中是否有相应权限声明
本题知识点:Android组件通信
43. 二叉树平衡因子
面试题:一个树高(根节点高度为1)为6的平衡二叉树,其节点数可能是?
正确答案: 32
本题知识点:树,平衡二叉树
平衡二叉树的平衡因子(左右子树高度差)不超过1,节点数在最小情况下接近2^h。
44. 算法与最大子数组和
面试题:给定一个整数数组,包含正负数且无序,找出和最大的连续子数组,比如数组[1,1,-5,6,7,-2],则和最大的子数组为[6,7],最大和为13。
答案要点:可以使用Kadane算法解决,时间复杂度O(n)。
- 维护两个变量:当前最大和cur_max和全局最大和max_so_far
- 遍历数组,当前最大和为当前元素与(当前元素+之前的最大和)中的较大值
- 更新全局最大和
本题知识点:动态规划,分治算法
45. BoundedBuffer实现
面试题:实现一个数据结构,叫做BoundedBuffer,即初始化时传入一个参数来定义了Buffer的大小,然后有两个public方法,put方法用于存入一个元素,take方法用于取出一个元素,先进先出。
答案要点:
- 可以使用数组或链表作为底层存储
- 需要维护头尾指针和元素计数
- 线程安全版本需要使用synchronized或Lock实现互斥
- 带超时版本可以使用wait(timeout)实现
本题知识点:数据结构,多线程编程
46. 地鼠逃离田地问题
面试题:有一只地鼠不小心跑进了一个m*n的矩形田地里,假设地鼠在这块田地的初始位置为(x,y),并且每次只能向相邻的上下左右四个方向移动一步,那么在最多移动K次的情况下,有多少条路径可以逃出这片田地(一旦出去田地的边界就不能再往回走)?
答案要点:可以使用DFS(深度优先搜索)或动态规划求解。
- DFS方法:从起点(x,y)开始,向四个方向搜索,记录到达边界的路径数
- 动态规划:定义状态dp[i][j][k]表示从(i,j)出发,走k步逃出的路径数
本题知识点:图论,搜索算法,动态规划
47. 手机H5测试用例设计
面试题:一个手机H5测试页面,页面上有一个文本输入框和一个次数的按键,用户点击按键页面将显示输入框里字符串中出现字母m的次数(页面无跳转)。请针对此H5页面设计测试用例。
答案要点: 测试用例应涵盖:
- 功能测试:正常输入、边界输入、特殊字符
- 性能测试:大量字符、响应时间
- 兼容性测试:不同浏览器、系统、分辨率
- 易用性测试:界面友好程度
- 中断测试:网络切换、页面切换
本题知识点:软件测试,测试用例设计
48. Java类继承与接口实现
面试题:下面代码是否有错,如有错,请指出并阐述错误原因。
class testB{
string aa = "I'm testB";
}
interface testA{
string aa = "I'm testA";
}
class testC extends testB implemets testA{
public void cc(){
System.out.println(aa);
}
public static void main(String[] args){
new testC().cc();
}
}
答案要点: 存在的错误:
- String首字母应该大写
- implements拼写错误
- 变量aa引用不明确,应指明来源(testA.aa或super.aa)
- 如果使用testB的aa,不能在静态方法中使用非静态变量
本题知识点:Java语法,继承和接口
49. 安卓绑定服务
面试题:IntentService特点?可以bindService吗?如何创建一个绑定服务?
答案要点: IntentService特点:
- 自动创建工作线程处理Intent请求
- 处理完所有请求后自动停止
- 能够按顺序处理所有请求
- 不需要手动管理线程和生命周期
可以bindService:理论上可以,但不是其设计目的。创建绑定服务的步骤:
- 继承Service类
- 实现onBind()方法返回IBinder接口实例
- 创建Binder子类作为客户端与服务通信的接口
- 在Activity中使用bindService()方法绑定服务
本题知识点:Android Service组件
50. 搜索算法复杂度
面试题:给定一个整数数组,包含正负数且无序,找出和最大的连续子数组,比如数组[1,1,-5,6,7,-2],则和最大的子数组为[6,7],最大和为13。定义一个函数,输入是一个整数数组,输出是和最大的连续子数组的和。
答案要点: 最优解法是Kadane算法,时间复杂度O(n),空间复杂度O(1):
public int maxSubArray(int[] nums) {
int maxSoFar = nums[0], maxEndingHere = nums[0];
for (int i = 1; i < nums.length; i++) {
maxEndingHere = Math.max(nums[i], maxEndingHere + nums[i]);
maxSoFar = Math.max(maxSoFar, maxEndingHere);
}
return maxSoFar;
}
本题知识点:动态规划,算法复杂度分析
想拿小米 offer?***********************,************************************