百度Android 123面面经 9/12(已OC+意向)

百度Android 1面  48分钟:

开局自我介绍。
聊项目。

Android:

1、项目用到了MVP模式,讲一讲给你带来了什么,有什么好处。

1)结构分层,数据、视图解耦
2)代码更加清晰,逻辑更加鲜明
3)更加利于扩展,便于维护

2、MVP 中P层过大的情况如何解决?

为什么p层会过大,主要是由于view层接口行为过多时会导致定义很多方法,导致p层代码量过大。
关于如何解决我这里引出了MVVM模式。

3、MVVM讲一下,有什么好处?解决了MVP的什么问题?

MVVM模式相当于把P层换成了ViewModel,ViewModel主要做数据持久化的功能。在ViewModel中只要做数据相关的事。
至于View相关的问题,采用了LiveData和DataBinding来做数据视图双向绑定。
也就能够解决P层接口方法过多的问题,将视图行为接口采用数据视图双向绑定来做,减少代码量。

4、Android有什么进程间通信机制?(主要讲了Binder)

Binder机制:
在内核空间中开辟一块缓存区,将要发送的数据复制到该区域,接收方再将该数据从该空间中去除到自己的内存空间中,以此完成数据传递。
Binder本质上是一种虚拟的物理设备驱动。也就是Binder驱动、
主要有以下特点:
1)要经过两次复制,效率有限。
2)大小在发送时只有发送方知道,接收方不能够确定需要多少空间进行接受。
3)安全,用内核生成的ID来做身份鉴别。


5、讲一下Activity的生命周期。    (基本知识)


6、讲一下A跳转到B的生命周期。 (基本知识)


7、为什么在生命周期中要这样子定义?

个人思考:
每个生命周期活动的执行都标记着一个Activity的状态变化,我们要针对这些状态变化来做出相应的处理,因此设计了生命周期方法的存在。

8、为什么在跳转活动的生命周期中要先到pause()状态再进行切换,或者说为什么要有这么多方法?

个人思考:
在进行活动切换时,主要的目的就是要跳转的另一活动,且让另一活动变得可见可交互,因此需要将活动A的状态设置为不可点击,才能够确保用户点击事件触发的是在栈顶元素,防止出现出用户意料的情况。
要有这么多方法的愿意实质上就是对开发者针对Acitivity的多个状态变化要有针对性的做出反应,能够更高的掌握Activity变化,以其给用户带来更好的体验。


9、Activity的这么多方法,用一个接口来实现会不会更好,不选择继承activity类。

个人觉得不合适,因为Activity内部含有很多数据,只有简单的接口不能够实现Activity的功能......

10、若Activity采用一个类似代理的过程暴露出方法接口,你觉得会有什么问题?

(这个问题不知道怎么回答......)


11、讲一下Handler机制。 (以前的面经有)


12、讲一下RecycleView跟ListView。

在项目中处于练手的目的两个都用到了,主要有以下区别:
1、效率不同,ListView采用二级缓存(界面内、界面外),RecyceView采用4级缓存:页面内、页面外、用户自定义、ViewPool。
2、RecycleView的LinearManager功能更多,如横向滑动
3、RecycleView规范了ViewHolder、Adapter的使用。

Java:

1、讲一下多态。

多态是一种定义的行为在运行时才会暴露出来,且可以有多种行为表现的情况。
多态主要有三个要求:父子类继承关系、重写、向上转型。
多态的优点是:程序更加灵活,增加程序扩展性,减低程序的耦合性。

2、抽象类跟接口简单介绍一下。

这里简单讲了一下抽象类跟接口的区别:
1)抽象类可以包含普通变量、普通方法、final方法,接口变量只能是staic final,方法只能是public static。
2)实现抽象类的资源占有大于实现接口。
3)抽象类只能单基层,接口可以多继承。

3、为什么有了抽象类还要有接口,二者的应用场景?

个人理解:
1、抽象类是一个类,可以有一些基础属性,同时加上一个抽象方法,这部分让继承的类自己去扩展,体现了一种多态的思想。
2、接口本质上就是一种行为规范或者抽象约束,继承接口的类标志这具有这个接口的所有方法功能,约束了这个类的范围。


4、你认为Java出于什么方面考虑会设计接口?

出于对类的行为约束和定义。

5、你是怎么看待面向对象的?

个人理解:
万物皆对象,将外部世界的物质属性进行抽象,形成对象,在程序中运行时,每一个对象就是一个实例,执行这个实例的方法。是一种更好的行为叙述模型。可以实现程序的高内聚。

6、final关键词有什么作用?

1)作用于变量,定义时必须赋值,赋值后不能修改。
2)作用与类,类不可以被继承。
3)作用于方法,方法不可重写。

7、了解什么设计模式?(讲了项目中用到单例和建造者模式)


8、单例对象在多进程中另外的进程可访问到吗?

不可以,进程间空间隔离,不能够访问到定义在另一个进程空间的实例。

9、如何解决多进程问题单例对象的问题?

这个问题不知道怎么回答。。。。。。

操作系统:

1、讲一下进程跟线程以及他们之间的区别。


2、讲一下进程间通信方式。


代码部分:
到这里面试官说时间不多了,你写一下快排吧,简单用伪代码写一下也行。
然后讲思路,快速写完,写完之后发现有点问题,问面试官还有时间吗。
面试官说没有,准备下一轮面试吧。
一面结束。

总的来说百度的面试体验是我面过最好的了,问题也非常有水平,回答后他也会跟你进行交流,体验非常非常好!
然后开始噩梦二面......
--------------------------------------------------------------------------------------------------


百度Android 2面  40分钟:


开局简单自我介绍。面试官评价不错,经历很丰富。


操作系统:

1、介绍一下进程和线程。

2、站在CPU、外存、显示器的角度讲一下进程和线程的区别?(WTF!?这个问题把我搞傻了)

9/13复盘,不知道怎么回答,望高人指点。

3、讲一下内核态线程和用户态线程的区别以及优缺点、使用场景?(WTF,破防了,直接按照自己的理解瞎答一通.......

二者区别:

(1)内核支持线程是OS内核可感知的,而用户级线程是OS内核不可感知的。

(2)用户级线程的创建、撤消和调度不需要OS内核的支持,是在语言(如Java)这一级处理的;而内核支持线程的创建、撤消和调度都需OS内核提供支持,而且与进程的创建、撤消和调度大体是相同的。

(3)用户级线程执行系统调用指令时将导致其所属进程被中断,而内核支持线程执行系统调用指令时,只导致该线程被中断。

(4)在只有用户级线程的系统内,CPU调度还是以进程为单位,处于运行状态的进程中的多个线程,由用户程序控制线程的轮换运行;在有内核支持线程的系统内,CPU调度则以线程为单位,由OS的线程调度程序负责线程的调度。

(5)用户级线程的程序实体是运行在用户态下的程序,而内核支持线程的程序实体则是可以运行在任何状态下的程序。 (用户线程和内核线程的区别 - 猪猪至曳 - 博客园 (cnblogs.com))


用户态线程优缺点
优点:切换在用户态中进行,不用进行内核态切换,效率较高,且由用户进行调度,更加灵活。
缺点:不能够进行CPU间调度,因为CPU间调度需要进行内核态调动。
内核态线程优缺点:
优点:可以适应多CPU环境,windows就是用的内核态线程。
缺点:在进行线程切换时每次都要进行内核态切换,效率较低。
适用场景:
频繁涉及CPU调度时,使用内核态线程。CPU调度不频繁且有自定义线程调度需求时,建议使用用户态线程。(个人瞎说)

4、讲一下操作系统的内存分布情况?(这个问题也没明白面试官问啥)

9/13复盘不知道如何回答。

5、讲一下JVM的内存分布?以及什么是线程共享,什么是线程私有。(这里我已经神志不清了,以为问的是线程模型,然后被面试官纠正)

1、程序计数器,用来记录线程此次执行的指令,当需要执行跳转、循环等操作时,将该值设置为下一个指令。 (线程私有)
2、虚拟机栈:用来存储方法运行时的一些局部变量、操作数、方法出口等。 (线程私有)
3、本地方法栈:用于JNI方法的栈,作用与2点相同。 (线程私有)
4、堆区:存放所有对象的区域。 (线程共有)
5、方法区:存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据 (线程共有)

6、使用堆区和栈区的时候有什么注意事项?(二度破防)

关于堆区的使用只想到了是不是要注意OOM问题?
关于使用方法区的注意事项想不到。

Android:

1、讲一下Handler机制。


2、讲一下MQ在放任务的时候是按照什么顺序来的,如何进行的。(按照时间,链表插入)


3、有多少种类型的任务会放到MQ当中?(没听说过,这里是噩梦的开始)

启动Activity、点击、绘制、测量等等事件都是由Handler来进行传递。

4、给你点提示,例如很多点击事件、数据处理事件都会放到MQ当中去处理,那么问题来了,为什么Android要这样子设计?(三度破防)

1、对于很多事件,一般会在控件中去执行,但是遍历所有的控件是不现实的。
2、将事件放在MessageQueue中,再由对应的应用来将其取走,实现了事件由控件间传输转为在应用间传输。
3、将事件的处理由控件级上升到应用级。

5、你认为这样子设计有什么问题?你会如何改进?

这个问题不知道怎么回答。

6、你认为为什么Looper会设置死循环?(这里我说是为了更好的、更快的处理任务,面试官说不对)

1、为了更好的、更快的处理任务。
2、保持Looper线程始终忙碌,不会出现空闲后被回收的情况。(这个应该才是面试官想要的答案)

聊到这里心态基本崩了,后面问了啥也忘记了,大概就这么多。

反问环节问我有什么想问的吗,回答约没有了,此时脑子已经糊了。

最后,面试官说待会通知你,我这里的面试就结束了。

这里心里觉得不可能过了,瘫坐在凳子上,这次面试的问题真的是把我搞傻了。
结果过了五分钟,提示上线三面......

--------------------------------------------------------------------------------------------------

百度Android 3面  45分钟:

第一次遇到女的技术面试官。

1、自我介绍。


2、聊实习。


3、讲项目,讲了项目中遇到的最大问题、做的最好的是什么,都是基本问题了。


4、你是二本是吧?我怀疑你能力不大行,你讲一下有什么能够让我觉得你可以的吧。(?)


5、你在学校成绩排名怎么样?(一般般)


6、讲一下你博客写的比较好的部分或者文章是什么。(然后就挑着博客问)


7、分组交换跟报文交换有什么区别?


8、DNS域名访问全过程?


9、智力题,9个物体有一个重量不同,如何用三次天平秤出来哪个有问题?(最少就想到4次,百度也没找到3次的)


10、你在腾讯实习中有遇到跟同事之间不愉快的事吗?


11、在学校中有加入什么团体吗?


12、在团体中你觉得什么做的比较好


13、在团体中遇到最大的问题是什么?如何解决的?


14、未来有什么职业规划?


15、平时有什么生活习惯?


16、考虑在哪个城市工作?


17、考虑iOS吗?(不考虑)


代码:
二叉树的前序遍历,递归秒了,但是说用迭代能不能做,简单讲了思路。

反问环节:
Q:有什么可以改进的吗?
A:整体还好,感觉你的综合素质挺高的。
Q:二面面试官问的很有意思,他对我的面评是怎么样的?
A:挺好的
Q:结果多久出来?
A:通过的话会有HR联系你,应该挺快的。

总的来说,问了等于没问。
结束。

-----------------------------------------------------------------------------------------------------------------------------------------------------------
小结:
1、百度整体面试水平感觉非常高,问的问题在八股文的基础上进行延展,很有意思,面试官也会跟你说答案大概是什么,往什么思路去考虑,整体体验非常好。
2、二面的那些问题真的令我心态崩了,问的非常难回答,也可能是我水平太次了。
3、进入百度大池子了,我这二本本科学历估计够呛,但是还是希望能够收到百度OC吧,在此许个愿。

#面经笔经##面经##百度#
全部评论
也可以试试《去哪儿网》哈! 校招内推,这两天在发放笔试了 推荐链接:https://www.nowcoder.com/discuss/732239
点赞 回复 分享
发布于 2021-09-12 19:25
lz收到通知了吗?
点赞 回复 分享
发布于 2021-09-17 13:42
大佬最后签哪里了
点赞 回复 分享
发布于 2022-02-27 12:42
厉害啊,
点赞 回复 分享
发布于 2022-05-11 09:39

相关推荐

牛客鼠:校友你这简历基本无敌了,春招刷刷题去冲大厂
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
2
17
分享

创作者周榜

更多
牛客网
牛客企业服务