安卓面试题准备

  • leakcanary原理:
    weakReference与referenceQueue的引用;
  • 共享指针和独享指针的区别:
  • 指针常量、常量指针的区别:

指针常量:指针只能被赋值一次,可以通过指针修改所指对象的值。int * const p;
常量指针:指向常量的指针,不能通过指针修改所指对象的值, int const* p; const int* p;

  • 红黑树特点结构;

自平衡、节点旋转、排序树

  • c结构体可以定义方法吗:不能
  • java有几种锁:

乐观锁 悲观锁;
共享锁 独占锁;
公平锁 非公平锁;
可重入锁 不可重入锁;
可中断锁 不可中断锁;
自旋锁 非自旋锁;

  • 锁状态:

无锁状态、偏向锁、轻量级锁、重量级锁

  • compile(implementation,api)

implementation:该依赖方式所依赖的库不会传递,只会在当前module中生效。
api:该依赖方式会传递所依赖的库,当其他module依赖了该module时,可以使用该module下使用api依赖的库。
compile:该依赖方式会传递所依赖的库

  • jni集成

cmake与ndkBuilder
1,声明native方法
2,javah -jni生成.h头文件
3,写cpp文件,
4,写cmake或者android.mk文件
5,gradle中配置make文件路径
6,java中System.loadLibrary

  • MessageQueue屏障消息

handler默认发送同步消息,屏障消息可以阻止执行同步消息,不阻止异步消息执行。

  • Handler.postdelay

messagequeue里对消息排序,取消息时,若未到时间则nativePollOnce(msg.updatetime-now)

nativePollOnce不会导致UI线程anr
MessageQueue的next方法,而next方法阻塞在nativePollOnce方法。nativePollOnce方法通过JNI调用进入到native层中去,最终nativePollOnce方法阻塞在epoll_wait方法中,epoll_wait方法会让当前线程释放CPU资源进入休眠状态;
若阻塞在nativePollOnce,说明线程空闲;就没有UI线程繁忙anr的情况。

  • okhttp

addInterceptor有无网络都会被调用到。
拦截器只会被调用一次,调用chain.proceed()得到的是重定向之后最终的响应信息,
不会通过chain.connection() 获得中间过程的响应信息。
允许短路,并且允许不去调用chain.proceed()请求服务器数据,可通过缓存来返回数据
addNetworkInterceptor
无网络时不会被调用。
可以显示更多的信息,比如OkHttp为了减少数据的传输时间以及传输流量而自动添加的
请求头Accept-Encoding: gzip,从而希望服务器能返回经过压缩过的响应数据。
chain.connection()返回不为空的Connection对象,可以查询到客户端所连接的服务器的IP地址以及TLS配置信息。

  • http断点下载:

RandomAccessFile文件分段写
httpHeader:Range bytes(from-end)

  • mvp与mvc

Presenter是Model和View之间的桥梁
BasePresenter、BaseView、LauncherContract

  • jvm内存模型

堆、栈、方法区、程序计数器、本地方法栈

  • hashmap原理

数组+链表+红黑树

  • hashmap、hashTable、hashset;treemap、treeset;
  • 哈希冲突解决:开放地址法、再哈希法、链地址法、建立公共溢出区
  • volatile防止指令重排
  • 动态代理静态代理

静态代理:实现类和代理类都要实现接口方法,方法多时代码规模庞大。
动态代理:代理类动态生成,最大的好处是接口中声明的所有方法都被转移一个集中的方法中处理(InvocationHandler.invoke)。这样,在接口方法数量比较多的时候,我们可以进行灵活处理。可以集中添加权限控制,日志记录,拦截器等

  • 设计模式

简单工厂 工程方法 观察者模式 适配器模式 迭代器

  • 线程池原理

workblockQueue,线程阻塞式取任务

  • instanceOf和super
  • 热修复原理

dexelements数组,pathClassLoad类加载机制

  • jvm回收算法
  • 常用算法

    简单排序
    冒泡排序
    二分排序
    快速排序

  • 崩溃优化:

anr检测(FileObserver 监听 /data/anr/traces.txt ;
native崩溃日志捕获:Breakpad

  • 内存优化:

VSS RSS PSS USS
获取系统配置:/system/build.prop;
自身内存占用监控(Runtime.getRuntime().totalMemory());
adb dumpsys meminfo整体内存分配
Debug类GC监控

  • 卡顿优化:

Traceview、systrace
基于消息队列实现,通过替换 Looper 的 Printer实现
插桩(Inline Hook 在方法前后加日志)
Choreographer 来监控应用的帧率
生命周期监控(生命周期的耗时和调用次数)
线程监控(线程数量多少)

  • 启动优化:

I/O 优化
数据重排(Dex类重排,Dex资源文件重排)
黑科技(保活,插件化和热修复)
代码优化:
包体积(资源优化):
ProGuard、Dex 分包、Library依赖监控、AndResGuard(资源混淆、极限压缩)

  • UI优化:merge技术、include layout、ViewStub延迟加载
  • 其他黑科技

apt,aspectJ、asm、redex
java文件生成;字节码方法修改;完全的字节码修改;
1,代码生成
2,代码监控
3,代码修改
4,代码分析

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值