小白勿进!谈一谈Binder的原理和实现一次拷贝的流程

# 阿里巴巴 面试问题还记得一些,一部分已经忘记了,为了防止再忘记,所以写出来。 1:你是如何理解Android操作系统的。 2:是否熟悉framework层,如果熟悉,那就对framework做个简介。 3:是否熟悉多线程,如果熟悉,介绍下线程。 4:对象锁和类锁是否会互相影响,会举例子让你判断锁的使用是否恰当,并说出原因。 5:是否熟悉Lopper架构,如果熟悉说下其原理,如果你自己实现,你会怎么实现。这里主要考察阻塞消息队列原理,和其变形。 6:自定义控件原理,及消息分发流程。 7:binder工作原理。 8:ActivityThread,Ams,Wms的工作原理。 9:如果工作中需要修改framework,你如何寻找切入点。 电话面试就这么多内容,自我感觉给回答打了75分,然后就是等通知;又隔了两天,阿里的HR打电话让我去指定地点面试,心里有点紧张,因为想给马云打工的人太多,竞争激烈程度可想而知 # 小米 **一面、二面** 1.介绍一下binder和原理 2.measure layout draw流程,滑动冲突 3.常用的多线程工具类。blockingqueue ,concurrenthashmap,信号量,countdownlatch,cyclicbarrier,exchanger等,stringbuffer 4.stringbuilder 和stringbuffer区别 5.lock和syncrognized原理区别,适合什么场景。 6.实现生产者,消费者 7.handler原理,是如何实现延时的。 8.一个activity启动另外一个activity的生命周期。 **算法题:** 1反转链表 2.归并排序 3.快速排序 4.feiboqiena数列 5.二分查找 6.两个队列实现栈 7.两个栈实现队列 8.判断链表是否成环,找到成环的交点。 # 字节跳动面试 **一面** 1:插件化。启动activity的hook方式。taskAffity。 2:okhttp支持HTTP2?http2的功能有哪些?tcp方面拥塞控制?tsl的握手和具体的非对称加密算法。非对称名称 3:handler的post(Runnable)如何实现的。callback,runnable,msg的执行优先级。 4:阻塞是怎么实现的?为什么不会阻塞主线程? 5:求二叉树中两个节点之间的最大距离。 6:206含义,未修改资源是哪个,302含义,301含义 7:多进程通信问题。binder优势。aidl生成的java类细节。多进程遇到哪些问题? 8:动态代理传入的参数都有哪些?非接口的类能实现动态代理吗?ASM的原理 9:Application和Activity在Context的继承树上有何区别?二者使用上有何不同? 10:任意一颗二叉树,求最大节点距离 **二面** 1:设计一个日志系统。 2:内存泄露的分类。怎么查看内存泄露的问题 3:touch事件源码问题。 4:组件化的问题。module和app之间的区别。moduler通信是如何实现的。 5:native奔溃的日志采集,怎么处理? 6:注解实现一个提示功能:如果int的值大于了3需要提示。 **三面** 1:介绍下flutter的启动流程 2:介绍下flutter与weex的区别 3:组件化介绍一下 4:webview中与js通信的手段有哪些? 5:介绍下flutter_boost的原理 **四面** 1:适配器和装饰模式各自特点和使用场景 2:视频编解码是怎么做的 3:三色球排序 **一面**为什么工作一年就想换工作?onTouchEvent/onTouchListenr.onTcouchEvent/onClickListenrhashmap的原理?java的hashcode和equals的区别java的gc了解多少?kt的伴生对象是饿汉模式还是懒汉模式?handler.postDelayed的原理ANR怎么产生?怎么捕捉?智力题:桌子上有101块饼***拿先手,他拿后手,你需要怎么赢tcp 三次握手/四次挥手, 为什么要三次握手,四次挥手?内存泄漏是什么?怎么找?算法题:斐波拉契数列,递归的方式怎么优化? **二面**手淘这种大型app是怎么迭代起来的?你对小程序的原理了解么?v8binding怎么做?你项目的价值是什么?图片缓存怎么做?你要设计一个图片缓存框架怎么搞?lrucache怎么实现?为什么是o(1)的时间复杂度?voliate 关键字解释下?voliate 关键字不能实现什么?https解释下常见的对称加密算法和非对称加密算法有哪些?让你设计一个打点系统怎么做?如果进程被杀死或者切换后台,数据如何保存丢失?你怎么设计埋点系统一个线程模型?快速排序?快速排序是稳定的么?如何实现一个快速排序的稳定性?minstack怎么设计?kotlin和java混用有哪些问题?设计一个数据结构,微博里面有人发了文章怎么实现?关注怎么实现?微博里面有人发了文章,关注的人如何获取最新的10条?如何获取关注的人的文章的最新1000条?设计一个高效的算法 **三面**你为什么选择换工作?你组里面的人都怎么样?你怎么解决项目中的难点?你有工作中遇到过哪些比较麻烦的地方?你平时怎么学习的啊?你除去学习之外都看什么书? ### 总结 **写到这里也结束了,在文章最后放上一个小小的福利,以下为小编自己在学习过程中整理出的一个关于Flutter的学习思路及方向,从事互联网开发,最主要的是要学好技术,而学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯,更加需要准确的学习方向达到有效的学习效果。 由于内容较多就只放上一个大概的大纲,需要更及详细的学习思维导图的?[点击我的GitHub](https://github.com/a120464/Android-P7/blob/master/Android%E5%BC%80%E5%8F%91%E4%B8%8D%E4%BC%9A%E8%BF%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)免费获取。 还有免费的高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术资料,并且还有技术大牛一起讨论交流解决问题。** ![跨平台开发:Flutter.png](http://www.icode9.com/i/li/?n=2&i=images/20210712/1626047392117425.jpg)
上一篇:Android binder学习笔记0 - 概述


下一篇:Android基础入门教程!Android自定义View详解