TME Android一面 9/ 7 45min

10分钟后状态变为复试。

开局聊实习,聊了大概5分钟。

操作系统:
1、进程线程区别(基本上都讲了)
1)定义上看:进程是系统资源分配与调度的基本单位,线程是CPU运行调度的基本单位
2)进程拥有资源,线程只拥有自身运行时必须资源,如PC寄存器、线程ID等等
3)进程创建、销毁、切换开销大(需要分配系统资源),线程创建、销毁、切换开销小(无需分配系统资源)
2、进程通信方式(7种都讲了以及原理)
1)管道通信:基于有亲缘关系的进程间的通信,其原因是文件描述符有继承关系才能继承,才能通信,本质上是利用在内存中开辟一个文件来进行通信,文件的一端用来写、一端用来读。缺点是需要双方同时在线才能够进行通信。
2)命名管道:通过给定一个文件描述符来实现无亲缘关系的管道间通信。其余与管道一致
3)消息队列:消息队列是保存在内核中的消息链表,本质是通过操作系统的消息发送指令,将数据按照一定格式进行发送,先发送到PCB中缓存,在发送到内存中进行缓存,最后对方就可以在读取消息。打破了管道需要在双方同时在线的情况下才能读取的弊端。同时也支持多进程同时发送。
4)共享内存:是一种效率最高的IPC方式,通过在一个进程中开辟一个共享空间,双方通过这个共享区域来进行消息通信。(进程间的数据是隔离的)
5)信号量:通过一个计数器,双方进程来通过这个计数器来实现同步。也是一种IPC方式
6):操作系统指令,主要用于异常情况下进程间通信,如进程死亡、阻塞。是通信机制中唯一的异步通信机制。
7)Socket:可以用来实现跨主机间的进程通信,也就是网络通信。

计算机网络:
1、访问域名全过程(老八股了)
太多了,不说了
2、访问域名建立连接过程(实际上就是TCP建立阶段,把发送报文的所有seq值啥的都讲了)
TCP三次握手:
第1:客户端发送SYN报文,包括2个字段:SYN = 1 ,seq = n
第2:服务器发送SYN报文,包括4个字段:SYN = 1 ,seq = y,ack = n + 1 ,ACK = 1
第3:客户端发送ACK报文,包括3个字段:ACK = 1, seq = n + 1, ack = k + 1
3、TCP拥塞控制阶段发生在什么时候?快重传呢?
1)拥塞控制发生在滑动窗口值达到窗口阈值后,将窗口增长速度由2n讲到n + 1
2)快重传发生在连续收到三个相同的ack信号后,将窗口值降为窗口阈值(快恢复)
4、TCP、UDP有什么区别
1)连接的角度看:TCP建立了解、UDP无连接
2)可靠性的角度看:TCP提供可靠的服务,UDP提供不可靠的服务
3)传输的单位上看:TCP使用字节传输,UDP以报文为单位传输
4、头部长度看:TCP长度较长,UDP长度较短
Android:
1、讲一下Binder机制
Binder机制是Android特有的一种IPC方式,其实现类似共享内存。
Binder机制主要有两个特点:
1)效率高:是一种类似共享内存的方式,在空间中,双方在此区域建立数据映射,然后再此空间中进行通信。总共只需要进行两次复制。
2)安全:双方在通信时,进入该区域需要检验ID,ID生成是由内核生成,外部难以破解。
Binder机制缺点:
主动权掌握在发送方,接收方无法确认发送过来的数据是多大,应该用多大的空间来存储。
2、讲一讲Handler(知道的全讲了)
Handler是Android的一种异步信息通信机制。其有几个角***r />
1)Message:传递数据的载体
2)MessageQueue:消息队列,用来存放消息,其数据结构是一个按照时间排序的链表
3)Looper:事件分发器,内部不断循环来获取Message并发送给对应的Handler
4)Handler:事件的发送者和处理者,将Message发送给Message,将Looper发送过来的Message进行处理。
此外还有几点:
1)Message按照时间排序,其中若插入一个掩饰任务,则会按照事件顺序放到MessageQueue中
2):消息屏障本质上也是一个消息,只不过是用来屏蔽消息屏障后面的所有同步消息不执行,以确保异步消息能够先执行。
3)数量关系:1个Handler只能绑定1个Looper、1个MessageQueue,1个Looper对应一个Message。

3、讲一下View的时间分发过程
大体流程:
Activity -> window -> phoneWindow -> ViewGroup -> View。
详细流程:
Activity.dispatchEvent() -> PhoneView.dispatchEvent() -> DecorVide.disPatchEvent() -> ViewGroup.disPatchEvent() -> ViewGroup.OnInterceptorEvent()判断是否拦截若拦截,执行 -> onTouchEvent() ,若不拦截执行:- > View.dispatchEvent() -> view.onTouchEvent();
若此过程事件都没有被消费,则一路返回到Activity的dispatchEvent()执行,结束。

若此时有一个DOWN事件被拦截,其他的事件都会直接到该onTouchEvent()。
若此时只有DOWN事件被拦截且不消费,该事件会返回父级处理。
若此时DOWN事件被拦截且消费,事件不再传递,后续全部消费掉。

Java:
1、讲一讲HashMap的数据结构
2、HashMap怎么处理数据冲突问题
3、还有什么处理冲突的方法

算法:
1、如何用2个栈实现队列
2、如何用2个队列实现栈(这里卡了大概几分钟,原来就是队列出列出到剩下最后一个,然后当成栈顶出去)
3、快排讲一下

代码:
写一下用栈实现队列

到这里大概30min。
反问环节 :
Q: 表现怎么样?
A: 在我这边算是还好,基础扎实,对自己实习做的事也有条理,就是参与项目开发比较少,比较可惜。
整体觉得你的学习能力比较强。要不我们聊聊项目把。(然后聊了5分钟项目)
Q:什么时候出结果?
A:校招我不太清楚,社招的话大概7天内出结果。还是比较快的。

结束。

#Android面试##面经##腾讯音乐娱乐#
全部评论
居然没过吗 唉
点赞 回复 分享
发布于 2022-04-08 15:43

相关推荐

无敌虾孝子:喜欢爸爸还是喜欢妈妈
点赞 评论 收藏
分享
死在JAVA的王小美:哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈,我也是,让我免了一轮,但是硬气拒绝了
点赞 评论 收藏
分享
评论
13
33
分享
牛客网
牛客企业服务