Android开发五年,面试阿里才发现这些知识点没完全掌握;你知道吗

返回的json数据的key数据的体积,尤其是针对返回数据格式变化不大的情况,支付宝聊天返回的

数据用到了)。

4、根据用户的当前的网络质量来判断下载什么质量的图片(电商用的比较多)。

5、使用HttpDNS优化DNS:DNS存在解析慢和DNS劫持等问题,DNS 不仅支持 UDP,它还支持

TCP,但是大部分标准的 DNS 都是基于 UDP 与 DNS 服务器的 53 端口进行交互。HTTPDNS 则不

同,顾名思义它是利用 HTTP 协议与 DNS 服务器的 80 端口进行交互。不走传统的 DNS 解析,从

而绕过运营商的 LocalDNS 服务器,有效的防止了域名劫持,提高域名解析的效率。

image

内存抖动(代码注意事项):

内存抖动是由于短时间内有大量对象进出新生区导致的,它伴随着频繁的GC,gc会大量占用ui线程和

cpu资源,会导致app整体卡顿。

避免发生内存抖动的几点建议:

  • 尽量避免在循环体内创建对象,应该把对象创建移到循环体外。
  • 注意自定义View的onDraw()方法会被频繁调用,所以在这里面不应该频繁的创建对象。
  • 当需要大量使用Bitmap的时候,试着把它们缓存在数组或容器中实现复用。
  • 对于能够复用的对象,同理可以使用对象池将它们缓存起来。

为什么WebView加载会慢呢?

这是因为在客户端中,加载H5页面之前,需要先初始化WebView,在WebView完全初始化完成之前,

后续的界面加载过程都是被阻塞的。优化手段围绕着以下两个点进行:

  • 预加载WebView。
  • 加载WebView的同时,请求H5页面数据。

因此常见的方法是:

  • 全局WebView。
  • 客户端代理页面请求。WebView初始化完成后向客户端请求数据。
  • asset存放离线包。

除此之外还有一些其他的优化

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

开源分享完整内容戳这里

手段:

  • 脚本执行慢,可以让脚本最后运行,不阻塞页面解析。
  • 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 (可重复读):可避免脏读、不可重复读的发生。
    ,那么对数据库中的数据的改变就是永久性的。

数据库的隔离级别:

  • Serializable(串行化):可避免脏读、不可重复读、幻读的发生。
  • Repeatable read (可重复读):可避免脏读、不可重复读的发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值