面试_面试题
文章平均质量分 97
题目总结
-Sloth-
脚踏实地 仰望星空
展开
-
Android面试题
1.说说View/ViewGroup的绘制流程View的绘制流程是从ViewRoot的performTraversals开始的,它经过measure,layout,draw三个过程最终将View绘制出来。performTraversals会依次调用performMeasure,performLayout,performDraw三个方法,他们会依次调用measure,layout,draw方法,然后又调用了onMeasure,onLayout,dispatchDraw。measure:对于自定义的单.转载 2020-12-23 14:57:15 · 274 阅读 · 0 评论 -
Android匿名共享内存(Ashmem)原理
在Android系统中,APP端View视图的数据是如何传递SurfaceFlinger服务的呢?View绘制的数据最终是按照一帧一帧显示到屏幕的,而每一帧都会占用一定的存储空间,在APP端执行draw的时候,数据很明显是要绘制到APP的进程空间,但是视图窗口要经过SurfaceFlinger图层混排才会生成最终的帧,而SurfaceFlinger又运行在另一个独立的服务进程,那么View视图的数据是如何在两个进程间传递的呢,普通的Binder通信肯定不行,因为Binder不太适合这种数据量较大的通信,那么转载 2020-12-31 16:37:56 · 864 阅读 · 0 评论 -
Android面试复盘
简历书写强烈建议,把自己的强项,亮点加粗注明放在简历前面,大家都很忙,也很烦躁,让人一眼就看到优点,对双方都友好。因为我对安卓性能优化方面感兴趣,平时工作也花了很多时间在这里,所以我会在简历上突出说明,我做了内存优化,熟练掌握使用xxx,内存性能提升xxx。(因为这里的内容是可控的,如果面试官对你感兴趣,这里的回答你也是能提早准备好的)项目经历如何写?建议按照是什么,做了啥,有啥数据指标佐证的方式去写。比如,我做了xx项目,负责xx模块,使用了xxx框架,可配合xx做xxx,效率提高xx转载 2020-12-31 15:42:49 · 455 阅读 · 0 评论 -
Android面试题思考与解答
Android面试题思考与解答https://mp.weixin.qq.com/s/rn4w4bqIdQ-mksfiSk9BMA转载 2020-12-31 15:44:27 · 276 阅读 · 0 评论 -
面试题目:i++ 是线程安全的吗?
简介volatile关键字保证了在多线程环境下,被修饰的变量在别修改后会马上同步到主存,这样该线程对这个变量的修改就是对所有其他线程可见的,其他线程能够马上读到这个修改后值.Thread的本地内存 每个Thread都拥有自己的线程存储空间 Thread何时同步本地存储空间的数据到主存是不确定的 例子借用Google JEREMY MANSON 的解释,上图表示两个线程并发执行,而且代码顺序上为Thread1->Thread21、不用 volatile假如re转载 2020-11-23 20:26:48 · 360 阅读 · 0 评论 -
View相关面试题
View 题目层次我们以最常见的两个面试题目(View 的绘制流程 和 View 的事件分发)开始,逐层深入去看一下。先上 View 的绘制流程。View 的绘制流程是 measure -> layout -> draw,这个大家都熟悉。不过由此引申的知识点还是有不少的: 首次 View 的绘制流程是在什么时候触发的? ViewRootImpl 创建的时机? ViewRootImpl 和 DecorView 的关系是什么? DecorVi...转载 2020-11-22 17:43:19 · 259 阅读 · 0 评论 -
Google为何不让用Handler的runWithScissors()
runWithScissors()是 Handler 的一个方法,被标记为 @hide,不允许普通开发者调用。这个方法算是比较冷门,如果面试中被问及,面试者不知道时,通常面试官会换个问法:"如何在子线程通过 Handler 向主线程发送一个任务,并等主线程处理此任务后,再继续执行?"。这个场景,就可以借助runWithScissors()来实现。虽然该方法被标记为 @hide,但是在 Framework 中,也有不少场景使用到它。先撇开runWithScissors()方法,既然这里存在 2 ...转载 2020-11-15 15:14:07 · 108 阅读 · 0 评论 -
Android跨进程传递大内存数据
背景在主进程Activity 中选择或者编辑一张背景图产生一个bitmap 对象,要传递给 B进程,因为要尽量保证清晰度,所以这个bitmap还有可能比较大,所以必然会涉及到跨进程传输大型bitmap 的问题。有哪些方案跨进程传递大图,我们能想到哪些方案呢?文件写入磁盘最容易想到的方案就是先给图片保存到文件,给路径跨进程传过去,对方再从文件给图片decode出来,这个方案可行的,但是不够高效。走系统IPC方式另一种方案就是通过跨进程通信的方式,就是不走文件,直接走内存,这个肯定会转载 2020-11-04 20:27:23 · 3604 阅读 · 0 评论 -
EventBus 原理解析
EventBus是一款在 Android 开发中使用的发布/订阅事件总线框架,基于观察者模式,将事件的接收者和发送者分开,简化了组件之间的通信,使用简单、效率高、体积小!下边是官方的 EventBus 原理图:EventBus 的用法可以参考官网,这里不做过多的说明。本文主要是从 EventBus 使用的方式入手,来分析 EventBus 背后的实现原理,以下内容基于eventbus:3.1.1版本,主要包括如下几个方面的内容:Subscribe注解 注册事件订阅方法 取消注册 发送事件 事转载 2020-11-01 21:55:12 · 388 阅读 · 0 评论 -
线程相关面试题目
1、工作线程是不是越多越好?不是。a、服务器cpu核数有限,所以同时并发或者并行的线程数是有限的,所以1核cpu设置1000个线程是没有意义的。b、线程切换也是有开销的。频繁切换线程会使性能降低。2、调用sleep()函数的时候,县城是否会占用着CPU? 不占用,sleep()函数切换时会把cpu让出来。accept()阻塞和recv()阻塞时也会让出cpu。3、cpu单核,做多线程有用吗? 多线程并发是有用的,但是起的线程数量太多会造成线程频繁上下文切换,开销大,性能...原创 2020-11-01 15:59:32 · 162 阅读 · 0 评论 -
Activity
1.在新的Activity启动之前,栈顶的Activity需要先pause,新的Activity才能启动,完成onCreate,onStart,onResume,之前的Activity再调用onStop。2. onStart()与onStop()是从Activity是否可见的角度来调用的,onResume()和onPause()是从activity是否在前台的角度调用的。3. Activity在异常情况下终止,会调用onSaveInstanceState来保存当前的activity状态,这个方法在.原创 2020-07-26 21:29:49 · 131 阅读 · 0 评论 -
设计模式面试题
1.请列举出在 JDK 中几个常用的设计模式?单例模式(Singleton pattern)用于 Runtime,Calendar 和其他的一些类中。工厂模式(Factory pattern)被用于各种不可变的类如 Boolean,像 Boolean.valueOf。观察者模式(Observer pattern)被用于 Swing 和很多的事件监听中。装饰器设计模式(Decorator design pattern)被用于多个 Java IO 类中。2.什么是设计模式?你是否在你的代码里面使用过转载 2020-09-13 22:53:56 · 306 阅读 · 0 评论 -
HTTP相关问题
1.HTTP 和 HTTPS 的区别HTTP 是一种超文本传输协议(Hypertext Transfer Protocol),HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范HTTP 主要内容分为三部分,超文本(Hypertext)、传输(Transfer)、协议(Protocol)。 超文本就是不单单只是本文,它还可以传输图片、音频、视频,甚至点击文字或图片能够进行超链接的跳转。 上面这些概念可以统称为数据,传输就是数据需要经过一.转载 2020-09-27 21:52:53 · 300 阅读 · 0 评论 -
面试题目总结(一)
1.java有什么特性,继承有什么用处,多态有什么用处?Java的四大特性分别是封装,继承,多态与抽象。封装的概念:把对象的属性和方法结合成一个独立的整体,隐藏实现细节,并提供对外访问的接口。封装的好处:(1) 隐藏实现细节 (2)安全性 (3)增加代码的复用性 (4)模块化继承的概念:从已知的一个类中派生出新的一个类,叫子类。子类实现了父类所有非私有化属性和方法,并能根据自己的实际需求扩展出新的行为。继承的好处:(1):继承是传递的,容易在其基础上构造,建立和扩充出新的类.原创 2020-12-28 16:50:30 · 178 阅读 · 1 评论