记一次android面试题

记录android又一次找工作的面试题

2020真的是个不顺的一年 ,年前遭遇拖欠薪资,因为疫情找了几个月的工作,在转正后没两个月就又经历了一次裁员,幸好这个渣渣技术的我没有多久就又一次开始上班了。记录一下这次面试中问到的问题,也提供给初级的安卓开发一点点参考。
1.全局变量跟局部变量区别
1.作用域不一样,全局变量作用域在整个工程中 局部变量作用域在整个函数中
2.内存分配不一样,全局变量存放在全局静态存储区中,局部变量存放在栈中只有在函数被调用是才会分配存储单元
3.生存期不一样 全局变量跟随进程局部变量跟随的是函数函数调用后就回收
2.ViewGroup和View的onDraw方法区别
1.viewgroup中的ondraw方法正常是不会调用的 如需调用需要设置setwillnotdraw方法才会调用或者给viewgroup设置背景色
2.View的ondraw方法只需要绘制view本身而viewgroup的ondraw方法则需要绘制本身外还需要绘制子View
3.handler原理
Handler由四部分组成 message messagequeue handler looper

首先message在messagequeue队列中排队 然后由looper中的looper()方法轮询messagequeue中的message 等到条件和message吻合后通过handler传递出去

Handler将message发送到looper的消息队列中,等待looper的循环读取message,处理message,然后调用message的target,即附属的handler的dispatchmessage()方法,将该消息回调到handlermessage方法中,然后完成更新UI操作
4.如何保证接口间通信安全
1.使用token或者cookie校验
2.使用https
3.对敏感数据进行加密例如采用MD5加密
4.对部分敏感数据进行过滤 防止sql注入
5.对同一IP同一时间段内的多次请求进行限制
5.描述下OOM和相应的解决方法
OOM就是内存不够用了 只需要的内存空间大于系统分配的空间,导致内存不够用从而应用崩溃。内存泄露内存溢出。如加载大图片导致内存溢出或者大量的内存泄露导致内存
解决办法
1.即时释放不需要的内存
2,在允许的情况下多使用软引用或者弱引用 因为这些会在内存不够的情况下优先回收
3,图片使用一次不再使用之后可以调用bitmap的recycle方法,或者加载大图的时候先压缩或者分片加载
4,注册系统的服务,使用完毕需要注销掉,等
6.retrofit原理
涉及到的模式有:观察者模式,适配器模式,策略模式,构建者模式,外观模式,工厂模式,代理模式,是一个网络请求框架,底层的网络请求使用得还是okhttp.
Android使用retrofit实际上是使用retrofit接口层封装请求参数之后又okhttp进行网络请求

首先,通过Builder创建Retrofit对象,在create方法中,通过JDK动态代理的方式,生成实现类,在调用接口方法时,会触发InvocationHandler的invoke方法,将接口的空方法转换成ServiceMethid, 然后生成okhttp请求,通过callAdapterFactory找到对应的执行器,比如RxJava2CallAdapterFactory,最后通过ConverterFactory将返回数据解析成JavaBean,使用者只需要关心请求参数,内部实现由retrofit封装完成,底层请求还是基于okhttp实现的。
ServiceMethod
核心处理类,解析接口中定义的请求方法参数和注解,通过toCall方法将其转换成okhttp的call对象,有了Call对象,就可以发送请求了。
callFactory
字面意思就是生产Call的工厂,这里的Call是okhttp包下面的Call,CallFactory默
就是OkHttpClient
HttpUrl
就是将创建retrofit对象时传入的baseUrl转换成对象,进行格式校验等。
converterFactories
数据解析器Converter,将response通过converterFactory转换成对应的JavaBean数据形式,常见解析器有,GsonConverterFactory,FastJsonConverterFactory,当然也有xml的。
callAdapterFactories

通过calladapter将原始Call进行封装,找到对应的执行器。如rxjavaCallFactory对
的Observable,转换形式Call --> Observable
callbackExecutor
主线程执行器,返回结果在UI线程执行
validateEagerly
是否立即校验所以接口方法,也就是将接口类中的方法全部转换成ServiceMethod,默认
False
7.Android EventBus的原理
Android EventBus是一个Android平台轻量级的事件总线框架.EventBus类似观察者模式,
eventBus的使用步骤分为定义事件、订阅事件、发送事件、处理事件、取消订阅五步
首先需要在oncreate方法中注册然后pushlisher post一个事件,最后subscribe事件订阅者接收特定的事件信息,根据事件特定的信息指定操作更新UI。他可以向不同的线程发布事件。在ondestroy中需要取消订阅
8.okhttp的拦截器
拦截器可以用来转换,重试,重写请求的机制
可以自定义拦截器 只需要集成intercept类
拦截器分为两类 应用拦截器和网络拦截器
应用拦截器:有两种注册方法 第一个在okhttpclient.Build中直接添加(new okhttpclien.Build().addintercept(intercept)),还有一种是在okhttpclient中直接通过add的方式添加 ( new okhttpclient.interceptors.add(intercept)).主要用于查看请求信息及返回信息,如链接地址,请求参数,头信息等
网路拦截器:也有两种注册方法一种是在new okhttpclient.build().addNetWorkInterccept(intercept),还有一种是在okhttpclient中直接通过add的方法注册 (okhttpclient.networkinterceptors.add(intercept))
可以添加,删除,替换请求头信息还可以改变请求携带的实体
应用拦截器
不需要担心中间过程的响应,如重定向和重试.
总是只调用一次,即使HTTP响应是从缓存中获取.
观察应用程序的初衷. 不关心OkHttp注入的头信息如: If-None-Match.
允许短路而不调用 Chain.proceed(),即中止调用.
允许重试,使 Chain.proceed()调用多次.
网络拦截器
能够操作中间过程的响应,如重定向和重试.
当网络短路而返回缓存响应时不被调用.
只观察在网络上传输的数据.
携带请求来访问连接.
9…android 性能优化
1.启动页白屏 因为启动的时候还未加载出来 ,可以在mainfest中设置启动activity的背景 在style中设置
2.减少布局的嵌套,层级
3.图片的处理 使用三级缓存 内存—sd卡–网络存储。大图压缩处理在放到内存中,使用bitmapfactory类。
4.大量数据采用分页加载和缓存的方式
5.网络优化 同一个页面中尽量减少网络请求的次数,尽量使用一个接口解决
6.Oncreate尽量减少一些不必要的操作
7.应用中使用svg格式的图或者webp格式的图缩减apk包的体积
10.屏幕适配
1.布局使用特有的dp单位
2.多套同样的布局来适配不同的分辨率 使用布局限定符
3.代码适配,在java代码中获取屏幕的宽高分辨率来动态设置控件
4.布局组件上 尽量使用一套布局来解决,无非必要 不适用绝对布局多使用线性布局和相对布局
5.借助第三方提供的适配框架 例如头条的方案

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值