0
点赞
收藏
分享

微信扫一扫

“我是培训 + 外包出来的,事件分发机制面试题

梯梯笔记 2022-02-02 阅读 25

border++;

}

}

for(int j=0;j<a.length;j++){

System.out.println(a[j]);

}

}

//方法2

public void setParted1(int[] a,int left,int right){

if(left>=right||lefta.length||right0){

for(int i=0;i<a.length;i++){

System.out.println(a[i]);

}

return ;

}

while(a[left]<0){

left++;

}

while(a[right]>=0){

right–;

}

if(left>=right||lefta.length||right0){

for(int i=0;i<a.length;i++){

System.out.println(a[i]);

}

return;

}

swap(a,left,right);

left++;

right–;

setParted1(a,left,right);

}

private void swap(int a[],int left,int right){

int temp=0;

temp=a[left];

a[left]=a[right];

a[right]=temp;

}

public static void main(String[] args) {

int a[]={1,2,-1,-5,-6,7,-7,-10};

new PartTest().setParted1(a,0,a.length-1);

}

显然,第二种实现的难点比较高,不过只要此种满足条件。

第二面

1,bundle的数据结构,如何存储,既然有了Intent.putExtra,为啥还要用bundle。

2,android的IPC通信方式,是否使用过

3,Android的多点触控如何传递 核心类

4,asynctask的原理 AsyncTask是对Thread和Handler的组合包装。

5,android 图片加载框架有哪些,对比下区别

6,图片框架的一些原理知识

7,其他的一些Android的模块化开发,热更新,组件化等知识。

三面;主流框架

1. EventBus

EventBus是一个Android发布/订阅事件总线,简化了组件间的通信,让代码更加简介,但是如果滥用EventBus,也会让代码变得更加辅助。

面试EventBus的时候一般会谈到如下几点

(1)EventBus是通过注解+反射来进行方法的获取的

(2)使用ConcurrentHashMap来保存映射关系 调用实体的构建:调用实体中对于Object,也就是实际执行方法的对象不应该使用强引用而是应该使用弱引用,因为Map的static的,生命周期有可能长于被调用的对象,如果使用强引用就会出现内存泄漏的问题。

(3)方法的执行 使用Dispatcher进行方法的分派,异步则使用线程池来处理,同步就直接执行,而UI线程则使用MainLooper创建一个Handler,投递到主线程中去执行。

2.Retrofit

要明确EventBus中最核心的,就是动态代理技术。

Java中的动态代理:

Retrofit中的动态代理

Retrofit作用

3.OkHttp

请求任务队列

复用连接池

4. RxJava

从15年开始,前端掀起了一股异步编程的热潮,在移动Android编程过程中,经常会听到观察者与被观察者等概念。

观察者与被观察者通信

Observable的通过create函数创建一个观察者对象。

public final static Observable create(OnSubscribe f) {

return new Observable(hook.onCreate(f));

}

Observable的构造函数如下:

protected Observable(OnSubscribe f) {

this.onSubscribe = f;

}

创建了一个Observable我们记为Observable1,保存了传入的OnSubscribe对象为onSubscribe,这个很重要,后面会说到。

onSubscribe方法

public final Subscription subscribe(Subscriber<? super T> subscriber) {

return Observable.subscribe(subscriber, this);

}

private static Subscription subscribe(Subscriber<? super T> subscriber, Observable observable) {

subscriber.onStart();

onSubscribe.call(subscriber);

return hook.onSubscribeReturn(subscriber);

}

线程切换过程(Scheduler)

RxJava最好用的特点就是提供了方便的线程切换,但它的原理归根结底还是lift,使用subscribeOn()的原理就是创建一个新的Observable,把它的call过程开始的执行投递到需要的线程中;而 observeOn() 则是把线程切换的逻辑放在自己创建的Subscriber中来执行。把对于最终的Subscriber1的执行过程投递到需要的线程中来进行。

Android进阶之路

对我们开发者来说,一定要打好基础,随时准备战斗。不论寒冬是否到来,都要把自己的技术做精做深。虽然目前移动端的招聘量确实变少了,但中高端的职位还是很多的,这说明行业只是变得成熟规范起来了。竞争越激烈,产品质量与留存就变得更加重要,我们进入了技术赋能业务的时代。

**技术之路就是漫长的打怪升级,不断学习前人的踩坑经验才能提升自己,切忌闭门造车!**所谓独乐乐不如众乐乐,在我当时确立好Android方向时,就已经开始梳理自己的成长路线了,包括技术要怎么系统地去学习,都列得非常详细,免费分享给大家。

架构师筑基语言基础

目前Android APP开发主流语言就是Java语言,Java语言最大的特性就是提高了软件的交互可能性,可以说安卓手机几乎所有应用程序都是利用Java语言来进行编写的。

设计思想解读开源框架

最后

赠送大家一套完整的Android学习资料吧。

以前一直是自己在网上东平西凑的找,找到的东西也是零零散散,很多时候都是看着看着就没了,时间浪费了,问题却还没得到解决,很让人抓狂。

后面我就自己整理了一套资料,还别说,真香!

资料有条理,有系统,还很全面,我不方便直接放出来,大家可以先看看有没有用得到的地方吧。

附上白嫖地址:《Android架构视频+BATJ面试专题PDF+学习笔记》

系列教程图片

2020Android复习资料汇总.png

flutter

NDK

设计思想开源框架

%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)**

[外链图片转存中…(img-TjjC6FXa-1643795293010)]

[外链图片转存中…(img-59CsBtTk-1643795293010)]

[外链图片转存中…(img-IOlrOmnu-1643795293011)]

[外链图片转存中…(img-ldkpKFQu-1643795293011)]

[外链图片转存中…(img-8lf4YjJO-1643795293011)]

微信小程序

举报

相关推荐

0 条评论