百度知道面试题

百度知道面试题

百度知道面试题

一面

1.属性关键字,在 ARC、MRC下分别用什么关键字,copy 修饰 NSString,可变字符串用什么修饰?block 用什么修饰?能不能用 strong 修饰?assign 能修饰对象吗?unsafe_unretain 有什么作用?

2.block,有几种 block,__weak __block__block 修改局部变量的值原理,只把局部变量变成结构体就可以了吗?

3.多线程都用过哪些?NSOperation 了解吗?GCD 怎么开一个线程

4.什么是死锁,举例说明为什么会死锁

5.内存都有哪些区域?哪些是在栈上,哪些是在堆上?局部变量存在哪里?

6.+load 父类、子类调用顺序?分类的 +load 会调用吗?项目里有用到 +load 吗?initialize

7.Category 实现了本类的同名方法,有没有办法来调用本类的方法?

8.单链表是否有环

9.两个链表是否相交(怎么判断是否相交?怎么找交点)

10.两个字符串的最长相同子串的长度

二面

1.较难定位的 Crash 怎么定位?怎么判断是 OOM 导致的 Crash 还是其他导致的 Crach?

2.Jenkins+Fastlane 实现 CI,自动化的流程除了打包还能做什么?

3.Flutter 和原生开发你觉得有什么差异

4.HTTPDNS,使用和不使用有什么区别?有什么好处?

5.通知是同步的还是异步的,异步的通知什么时候会发出去,通知的原理,通知如何存储,多次添加通知,多次移除通知会有问题吗?

6.屏幕显示的流程,CPU/GPU,离屏渲染是什么?光栅化的过程

7.安装包大小优化做了哪些?段迁移了解吗?

8.App 启动系统做了哪些事情,怎么优化启动速度

9.tableView 滑动流畅性优化

10.从点击屏幕到响应事件的流程

11.UIView 和 CALayer 的关系,为什么要这么设计

12.autoreleasePool 的原理,设计成双向链表有什么好处

13.最有成就感的项目,组件化的好处

14.如果 Code Review,你会关注哪些东西?

15.相对其他团队成员的优势

16.分享会怎么做,如果听众有 PM/测试,会怎么分享

17.团队里有成员不是特别优秀,怎么把控进度

18.了解百度的技术职级吗?你觉得自己是T几?

三面

经理 项目中遇到的有挑战的问题

四面

HR

五面

1.通过什么途径学的包括 Vue 的其他知识?为什么会有前端的需求?

2.IM 的气泡,点九图有没有使用类库,有没有兼容性问题,项目适配的最低系统版本是多少?

3.IM 文本高度计算,图文混排怎么计算高度,高度计算有没有遇到什么问题

4.整个 IM 页面的布局,最复杂的 cell 布局

5.收到新消息的处理,怎么处理能够不滚动到页面底部

6.大量图片列表滑动到指定位置,怎么避免出现内存导致的问题,为什么没有落地

7.组件化,什么能拆成组件,你认为组件化做的足够好吗?更好的组件化怎么去做?

8.你认为 iOS 和其他端有什么不一样,有什么经验可以共用?

9.未来规划

参考答案

一面

1.属性关键字,在 ARC、MRC下分别用什么关键字,copy 修饰 NSString,可变字符串用什么修饰?block 用什么修饰?能不能用 strong 修饰?assign 能修饰对象吗?unsafe_unretain 有什么作用?

2.block,有几种 block,__weak __block__block 修改局部变量的值原理,只把局部变量变成结构体就可以了吗?

3.多线程都用过哪些?NSOperation 了解吗?GCD 怎么开一个线程

4.什么是死锁,举例说明为什么会死锁

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

四个必要条件

  • 互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。

  • 请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。

  • 不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。

  • 环路等待条件:指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。

举例:

1
2
3
4
5
6
- (void)viewDidLoad {
[super viewDidLoad];
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"1");
});
}

dispatch_sync 同步,阻塞当前线程,即阻塞主线程。block 又在等主线程里的 viewDidLoad 执行完,从而形成了主线程等待主线程,造成死锁。

参考链接:百度百科-死锁

5.内存都有哪些区域?哪些是在栈上,哪些是在堆上?局部变量存在哪里?

  • 代码段
  • 数据段
  • 内核区

栈区:局部变量和实参

堆区:OC 中使用 new 方法创建的对象

6.+load 父类、子类调用顺序?分类的 +load 会调用吗?项目里有用到 +load 吗?initialize

先调用父类,后调用子类,再调用分类。

+load 调用顺序

1.先调用类的 +load

  • 按照编译先后顺序调用(先编译,先调用)
  • 调用子类的 +load 之前会先调用父类的 +load

2.再调用分类的 +load

  • 按照编译先后顺序调用(先编译,先调用)

+initialize方法会在类第一次接收到消息时调用。+initialize 调用顺序:

  • 先调用父类的+initialize,再调用子类的+initialize
  • (先初始化父类,再初始化子类,每个类只会初始化1次)

7.Category 实现了本类的同名方法,有没有办法来调用本类的方法?

Category 实现了本类的同名方法,会调用 Category 的同名方法。

8.单链表是否有环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function hasCycle( head ) {
if (head == null) {
return false;
}
let slow = head;
let fast = head;
while (fast.next && fast.next.next) {
slow = slow.next;
fast = fast.next.next;
if (slow == fast) {
return true;
}
}
return false;
}

9.两个链表是否相交(怎么判断是否相交?怎么找交点)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function FindFirstCommonNode(pHead1, pHead2)
{
let mySet = new Set();
let p1 = pHead1;
while (p1) {
mySet.add(p1);
p1 = p1.next;
}
let p2 = pHead2;
while (p2) {
if (mySet.has(p2)) {
return p2;
}
p2 = p2.next;
}
return null;
}

10.两个字符串的最长相同子串的长度

题目链接:NC127 最长公共子串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function LCS( str1 ,  str2 ) {
if (str1.length > str2.length) {
[str1, str2] = [str2, str1];
}
let res = "";
let len = 0;
for (let i = 0; i < str1.length; i++) {
let temp = str1.slice(i-len,i+1);
if (str2.indexOf(temp) !== -1) {
res = temp;
len++;
}
}
return res;
}

二面

1.较难定位的 Crash 怎么定位?怎么判断是 OOM 导致的 Crash 还是其他导致的 Crach?

2.Jenkins+Fastlane 实现 CI,自动化的流程除了打包还能做什么?

3.Flutter 和原生开发你觉得有什么差异

4.HTTPDNS,使用和不使用有什么区别?有什么好处?

5.通知是同步的还是异步的,异步的通知什么时候会发出去,通知的原理,通知如何存储,多次添加通知,多次移除通知会有问题吗?

参考链接:iOS-通知中心原理

6.屏幕显示的流程,CPU/GPU,离屏渲染是什么?光栅化的过程

7.安装包大小优化做了哪些?段迁移了解吗?

8.App 启动系统做了哪些事情,怎么优化启动速度

9.tableView 滑动流畅性优化

10.从点击屏幕到响应事件的流程

11.UIView 和 CALayer 的关系,为什么要这么设计

12.autoreleasePool 的原理,设计成双向链表有什么好处

13.最有成就感的项目,组件化的好处

14.如果 Code Review,你会关注哪些东西?

15.相对其他团队成员的优势

16.分享会怎么做,如果听众有 PM/测试,会怎么分享

17.团队里有成员不是特别优秀,怎么把控进度

18.了解百度的技术职级吗?你觉得自己是T几?

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×