Android 开发五年,面试阿里才发现这些知识点没完全掌握;你知道吗
因此常见的方法是:
全局 WebVi
ew。
客户端代理页面请求。WebView 初始化完成后向客户端请求数据。
asset 存放离线包。
除此之外还有一些其他的优化手段:
脚本执行慢,可以让脚本最后运行,不阻塞页面解析。
DNS 链接慢,可以让客户端复用使用的域名与链接。
React 框架代码执行慢,可以将这部分代码拆分出来,提前进行解析。
FC(Force Close)什么时候会出现?
Error、OOM,StackOverFlowError、Runtime,比如说空指针异常
解决的办法:
注意内存的使用和管理
使用 Thread.UncaughtExceptionHandler 接口
如何解决 View 的事件冲突?
常见开发中事件冲突的有 ScrollView 与 RecyclerView 的滑动冲突、RecyclerView 内嵌同时滑动同一方
向。
滑动冲突的处理规则:
对于由于外部滑动和内部滑动方向不一致导致的滑动冲突,可以根据滑动的方向判断谁来拦截事件。
对于由于外部滑动方向和内部滑动方向一致导致的滑动冲突,可以根据业务需求,规定何时让外部 View 拦截事件,何时由内部 View 拦截事件。
对于上面两种情况的嵌套,相对复杂,可同样根据需求在业务上找到突破点。
滑动冲突的实现方法:
外部拦截法:指点击事件都先经过父容器的拦截处理,如果父容器需要此事件就拦截,否则就不拦截。具体方法:需要重写父容器的 onInterceptTouchEvent 方法,在内部做出相应的拦截。
内部拦截法:指父容器不拦截任何事件,而将所有的事件都传递给子容器,如果子容器需要此事件就直接消耗,否则就交由父容器进行处理。需要配合 requestDisallowInterceptTouchEvent 方法
Draw 的基本流程
绘制基本上可以分为六个步骤:
首先绘制 View 的背景;
如果需要的话,保持 canvas 的图层,为 fading 做准备;
然后,绘制 View 的内容;
接着,绘制 View 的子 View;
如果需要的话,绘制 View 的 fading 边缘并恢复图层;
最后,绘制 View 的装饰(例如滚动条等等)。
setWillNotDraw 的作用
如果一个 View 不需要绘制任何内容,那么设置这个标记位为 true 以后,系统会进行相应的优化。
默认情况下,View 没有启用这个优化标记位,但是 ViewGroup 会默认启用这个优化标记位。
当我们的自定义控件继承于 ViewGroup 并且本身不具备绘制功能时,就可以开启这个标记位从而便于系统进行后续的优化。
当明确知道一个 ViewGroup 需要通过 onDraw 来绘制内容时,我们要显示地关闭 WILL_NOT_DRAW 这个标记位。
invalidate() 和 postInvalidate()的区别 ?
invalidate()与 postInvalidate()都用于刷新 View,主要区别是 invalidate()在主线程中调用,若在子线程
中使用需要配合 handler;而 postInvalidate()可在子线程中直接调用
数据库的四大特征,数据库的隔离级别?
数据库的四大特征:
原子性(Atomicity):原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。
一致性(Consistency):一个事务执行之前和执行之后都必须处于一致性状态。
隔离性(Isolation):隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
持久性(Durability):持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的。
数据库的隔离级别:
Serializable(串行化):可避免脏读、不可重复读、幻读的发生。
Repeatable read (可重复读):可避免脏读、不可重复读的发生。
Read committed (读已提交):可避免脏读的发生。
Read uncommitted (读未提交):最低级别,任何情况都无法保证。
文末
好了,由于内容太多文章篇幅有限,今天的分享就到这里了,有需要完整资料的朋友可以私信我【资料】免费获取或者点这里
还有 高级架构技术进阶脑图、Android 开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
【Android 核心高级技术 PDF 文档,BAT 大厂面试真题解析】
【Android 必备核心知识点】
评论