工作了这么久,在一家有问题的公司(公司名字不提)工作了这么久,终于到了下决心离职的时刻,心情低落的同时也有些期待!
但是当真正面对面试的时候,内心是崩溃的(本人从毕业到现在有10年了,以前的工作基本都是朋友介绍的,很少自己出去面试)
下面是碰到的问题:
- 因为上一份工作是外包公司,任务比较多,也比较紧,所以平时碰到问题都是直奔主题的解决问题,也很少做记录(下次碰到,大概知道怎么查就可以),技术面试各种理论知识,需要很确定的说出来(我平时工作的时候都是理解个大概意思,用的时候网上找资料确认下即可)
- 项目做了很多(大概有20个左右),最多的时候手里8个项目同时在做,还有部分项目是从其他同事手中接过来的,面试的时候演示项目有时候会记错一些问题(电商类项目本人做过十多款,项目特色真的记不那么清楚)
- 面试的不理想的没有通知也就罢了,面试的好好的特别符合(有一家是做外包的,主打也是电商项目,演示项目的时候,我的项目比面试官做的要精细的多的多好么?)的也没过
- 明明是低薪资的工作,问的问题刨根问底,让我分不清楚,你要招的到底是哪个层次的程序员?
下面是经常问到的问题,做一个记录,哪个有问题发现的大佬帮忙指正:
一、Handler机制:
- 由于Android主线程做耗时操作超过5秒没有响应会产生ANR,所以 Android发布了一套更新UI的机制,我们通常称之为Handler机制
- Handler机制中分为,Thread、Handler、Message、Message Queue和Looper
- Handler机制的流程为Thread处理耗时逻辑,把处理结果通过message传递给Handler,Handler在构造方法中通过Looper.myLooper()获取到对应的Looper,然后通过Looper来确定把Message放置在哪个Message Queue中,然后通过Looper循环把Message取出更新到对应的线程中。
- Message Queue遵循先进先出原则
- 我们自己创建的线程,默认是没有消息队列(Message Queue)和消息循环(Looper)的,想要让一个线程具有消息处理机制,我们需要在线程中先调用Looper.perapre()来创建一个Looper对象,然后调用Looper.loope()进入消息循环。
- 当我们创建了Handler对象时,指定Handler与哪个具有Looper的线程关联,这个线程就成了目标线程
二、Android 性能优化:
- Android性能优化分为:App启动优化、响应优化、布局优化、内存优化、省电优化、网络优化
- App启动优化:Android程序启动分为:热启动、温启动和冷启动。启动优化针对的就是冷启动,其中冷启动涉及的一个是Application的OnCreate()方法,另外一个就是首屏Activity的渲染
- 响应优化:Android 产生ANR的情况为:Activity超过5秒无响应、BroadcastReceiver超过10秒无响应、Service超过20秒无响应
- 布局优化:布局中尽量减少嵌套关系,这里有一个工具H-Viewer可以看到布局的嵌套关系
- 内存优化:内存优化有分为三个问题:
问题一:GC优化,这里要注意的就是使用过的资源要及时进行回收,这里就要灵活运用强引用、软引用和弱引用
问题二:图片优化,由于Android虚拟机一般内存只有16-32M的内存,而高清图片一张就要占4-5M,如果不对图片进行处理,那么很容易就会产生OOM,在使用图片的时候要对图片进行必要的压缩
问题三:在自定义控件的时候,要尽量避免重复绘制,在onDraw()方法中尽量避免创建变量(推荐测试工具为手机开发者选项中的 调试GPU过度绘制)- 省电优化:Android中耗电最多的三个功能为:手机屏幕、手机网络、GPS。这里我们要考虑的主要是手机网络和GPS。在写项目的时候,要尽量少的进行网络请求,在GPS功能使用结束后,最好把GPS功能关闭。(推荐工具:wakelock)
- 网络优化: Android网络优化推荐工具为Android Studio内置的Monitor,其中主要包括两个优化方向:
问题一:当处理图片的时候,最好和后台协商好几种尺寸的图片,在进行网络请求的时候,把对应的尺寸当作参数传递
问题二:在Wifi网络下,要进行一定的缓存策略,这样在4G网络和无网络的时候客户体验会更好些。
三、Android onLayout和Layout的区别:
- onLayout是ViewGroup中子View的布局方法,用于放置子View的位置。
- layout是View的放置方法,参数是相对于父控件而言
后续有问题会继续更新
二维码.jpg推荐下本人的微信公众号,本博客及其他方面的消息会定期同步到公众号上面!
网友评论