Android初中级面筋,跟着这几步去准备,大厂也不远了
本文将分享一些面试经验和技巧希望能对有1-3年Android开发经验的工程师们有所帮助。当然这些经验也可以适用于校招但对于3年以上经验的开发者面试要求可能会更高一些。简历首先让我们来谈谈简历。简历不需要过于花哨选择一个简洁明了的模板突出你所掌握的技能和项目经验即可。简历建议控制在两页以内过短或过长的简历都不利于你的求职。在描述你的技能时建议使用“掌握”和“熟练掌握”而不是“了解”和“精通”。这样可以更好地突出你的实际技能水平。面试准备接下来是面试准备。在面试前你需要对公司的背景、产品、技术栈等进行了解以便更好地理解公司的需求和文化。同时你也可以通过准备一些常见的面试问题来提高自己的自信心。面试中在面试过程中你需要保持积极、自信的态度回答问题要清晰明了。当面试官提问时你可以先稍作思考然后再有条理地回答。如果你遇到不确定的问题可以先给出自己的理解然后询问面试官的意见。复盘总结最后是面试后的总结。面试结束后及时总结自己的表现和不足之处以便在今后的求职中加以改进。同时你也可以通过与面试官的交流获取一些宝贵的反馈意见以帮助你在今后的职业发展中更好地成长。面经基础自定义View的流程requestLayout和invalidate的区别– ViewRoot的performTraversal切入measure、layout、draw(讲完基础可提一提Surface的显示原理)Handler原理Handler/Looper/MessageQueue关系– 消息循环需要创建一个Looper并利用ThreadLocal绑定到当前线程内部创建了MessageQueue(是个单链表结构)当前Handler通过Looper取消息可向不同的Handler发送消息达到线程间通信的目的(意识流的谈到了消息屏障和Choreographer)子线程可以运行looper吗多次looper. prepare会不会有问题怎么进入循环的looper.loop的关键点消息延迟怎么实现延时的依据是什么为什么– 可参考HandlerThread以及基于HandlerThread实现的IntentService(可以往ThreadLocal切入也可以往底层运行机制)注意延时是根据开机后的时间但可能因为消息堆积造成不精确事件分发机制– 从Activity的dispatchTouchEvent切入ViewGroup和View的onInterceptTouchEventonTouch优先于onClick绘制为什么要二级缓冲一级二级三级演变的原因– 和消息循环的消息堆积类似会滚雪球(双缓冲技术是游戏开发中的一个重要的技术也是SurfaceView和View的一个主要区别解决解决反复局部刷屏带来的闪烁)Aspectj是运行时织入还是编译时织入– 我的理解是都有的jvm编译优化是什么意思– 运行和编译时都有优化以循环、反射、锁的优化举例(可以引申到方法内联、栈上分配、标量替换再多总结总结jvm相关知识形成一个闭环是个很大的亮点)责任链在framework里的应用– 事件分发、View绘制更偏组合模式启动优化异步了为什么还要优化– 启动器注意任务的依赖关系参考work-steaking机制可作为后期优化方向 结合业务 SP的不足 Provider 锁检查等业务不复杂其实收益不明显但是知道好过不知道很多黑科技得慎用插件化原理换肤原理热修复原理插件化怎么实现把apk渲染成界面的– 这几个都是热门话题其实现实中负责相关开发的应该不多但是可以提现技术追求答出要点即可细坑背也没用的你没做过啊mmkv一般不是做缓存的吗为什么和启动优化有关系– 启动期间用到了SPMMKV是可以无缝替代SP的顺便可以提提mmap原理引申到binder谈谈为什么mmap可靠mmap其实也不是银弹说下udp、tcp和socket说下http以及http是基于tcp还是udp为什么tcp的可靠性怎么保证的– 三次握手、奇偶校验(Checksum)、超时重传、滑动窗口(是根据tcp头信息的seq实现的分成多部分数据)数组和链表的区别– 可从实现扩容增删改查角度切入app点击到启动第一个activity的流程– 可能毕竟3年framework深点的问来问去就这一个感觉白看这么久了虽然确实很难apply到实际工作上但这个启动流程知道其实能解决很多问题而且可以牵带问向其他问题插件化、渲染、组件通信、优化等项目是MVVM还是MVP怎么实现的有没有引入LiveData讲一下优化相关的– 启动优化、内存优化、埋点优化(业务向)这几个印象深如果不打断结合底层知识半小时都不够讲我一直怀疑我面试的时候说的太多会不会太啰嗦了…有没有做过Socket和串口通信有用过蓝牙吗– 这个真没有只有大学期末作业写过蓝牙聊天室有没有用过kotlin协程有了解吗– kotlin是入门水平但是其实如果很看重这个说明项目深度接入kt各种扩展方法应该都是封装的很好的快速上手肯定没问题用过Flutter– Flutter学过好几遍了但是一直没有商业项目来apply真的想尝试但是精力有限我还是先挖深度吧分层架构怎么理解– 这个需要结合组件化、模块化来讲也是个演进过程先拆再聚合为一层拆的过程也是煎熬的尤其是原先项目很耦合的情况根本没法多人协作进行merge全是冲突举棋不定的需要temp层可以结合OSI七层网络架构Binder分层等经典实现升华反射的原理和应用– 反射是Java的一大特性无处不在ide代码提示就是而且需要做些高级功能就需要结合反射比如动态代理升华一下可以讲反射为什么慢的原因jvm对其的优化等屏幕适配使用哪个方案有了解过AutoSize吗– sw限定符没出问题没考虑其他方案头条的适配方案肯定了解过onCreate和onPostCreate的区别(onResume和onPostResume的区别)– 这是个很细节的点我确实不知道但是其实无伤大雅生命周期相关AspectJ切一下一目了然深拷贝和浅拷贝的区别序列化是深拷贝还是浅拷贝– 序列化就是简单实现深拷贝的一种方式贝塞尔曲线怎么实现– UI绘制是我弱项但写了一次发现其实真的是数学相关其注意点和优化点IDE都有提示…Activity、Window、View的联系– 从Activity开始显示View切入辅以一些拓展感觉很清晰View的绘制流程测量模式Android的两个特别重要的服务是什么时候启动的– 以为是问的android系统启动的概览其实问的是WMS和AMS启动这个我就没懂想要知道什么要点了回答了是分批分阶段启动目的是为了解决相互依赖的问题和提升启动速度滑动窗口如何实现– 滑动窗口的实现主要是把发送内容分成几部分然后边确认边发送发送窗口就逐渐往前滑动了接收方同理start和run的区别sleep和wait的区别– 这种低级问题其实我都不想回答…Thread的join方法– 使用wait来等待结果可以设置超时和FutureTask比较使用Unsafe和CAS实现(和CountDownLatch等待事件、利用ReetrantLock实现内部是AQS再内部是CASUnSafe、CyclicBarrier等待线程底层实现和CountDownLatch相同比较)new Integer(123)和123的区别(Integer.valueOf(123))– 基本数据类型有缓存池进行优化private static 方法子类能重写吗– private是该类可见static是类属性没有重写概念的这个细讲要从class的加载切入了最后由于面经的篇幅过长需要完整面经的可以扫描下方二维码免费领取目录第一章 Java方面Java基础部分Java集合Java多线程Java虚拟机第二章 Android方面Android四大组件相关Android异步任务和消息机制Android UI绘制相关Android性能调优相关Android中的IPCAndroid系统SDK相关第三方框架分析综合技术数据结构方面设计模式计算机网络方面Kotlin方面第三章 音视频开发高频面试题为什么巨大的原始视频可以编码成很小的视频呢?这其中的技术是什么呢?怎么做到直播秒开优化直方图在图像处理里面最重要的作用是什么数字图像滤波有哪些方法图像可以提取的特征有哪些衡量图像重建好坏的标准有哪些怎样计算第四章 Flutter高频面试题Dart部分Flutter部分第五章 算法高频面试题如何高效寻找素数如何运用二分查找算法如何高效解决雨水问题如何去除有序数组的重复元素如何高效进行模幂运算如何寻找最长回文子串第六章 Andrio Framework方面系统启动流程面试题解析Binder面试题解析Handler面试题解析AMS面试题解析
