| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发测试 -> 2020大厂高频面试题收录,成功定级腾讯T3-2 -> 正文阅读 |
|
[开发测试]2020大厂高频面试题收录,成功定级腾讯T3-2 |
###前言 投递简历的话,建议大家优先选用内推的方式,节省时间而且效率很高。当然在BOSS直聘、脉脉、拉钩一些平台商看看当然也不错。做过什么项目和工作一定要详细点写,即使是小项目也一定要对原理相当熟悉,不是你负责的部分也要去仔细查阅别人的实现过程。做过什么,会什么是广度问题,取决于项目内容。做过什么,达到什么样的境界,是深度问题,也和个人学习能力和面对问题的态度有一定关联。具体的情况要根据岗位匹配度做一定的调整。 ###然后再是面试的技巧 面试技巧其实也是需要学习的,你可以去多找几家同类型公司面试,去感受一下面试的氛围。然后面试完仔细总结自己做得不好的一些点,总结经验,以便从容地应对字节跳动的面试。因为临时发挥确实也是一门技术活,话到嘴边却不会说也是一件很尴尬的事情。 面试过程要有礼貌,这是一个印象分,哪怕面试官有千万个你想吐槽的点,谈吐举止也要合乎礼仪合乎规范,因为面试的每个细节都是面试官考察你的部分。而且今后就是你和面试官一起工作了,抬头不见低头见,关系还是要搞好的。 还有,在讲述问题的时候一定要慢一些,不要一下子讲太多,慢一点的话会显得比较沉稳、自信,而且还可以给接下来的对话留下应答的时间。现在的开发过多得依赖ide,所以会有个很严重的问题就是,在面试的时候讲解到一半不知道这个地方应该怎样读,如果想避免这种事情发生,在平时就一定要读准常见的关键类名、方法名、关键字。正确的发音和详细的描述以及好听的嗓音决绝对是妥妥的加分项。 最后一点,心态很重要。因为面试时间还是比较短暂的,相当有限的时间里面试官想要知道你有几斤几两不太现实,所以面对突发状况也要记得沉着面对,正确调整心态。 ###一、掌握基础知识 官方文档就是教科书,源码一定要抽时间多看,网上的分析和讲解太多太乱,不要一味地跟着写,这里简单列了几个面试时喜欢反复讲的知识点。
Java垃圾回收机制 需要理解JVM,内存划分——方法区、内存堆、虚拟机栈(线程私有)、本地方法栈(线程私有)、程序计数器(线程私有), 理解回收算法——标记清除算法、可达性分析算法、标记-整理算法、复制算法、分代算法,优缺点都理解下。
(二)Android 一、android启动模式 需要了解下Activity栈和taskAffinity 1.Standard:系统默认,启动一个就多一个Activity实例 2.SingleTop:栈顶复用,如果处于栈顶,则生命周期不走onCreate()和onStart(),会调用onNewIntent(),适合推送消息详情页,比如新闻推送详情Activity; 3.SingleTask:栈内复用,如果存在栈内,则在其上所有Activity全部出栈,使得其位于栈顶,生命周期和SingleTop一样,app首页基本是用这个 4.SingleInstance:这个是SingleTask加强本,系统会为要启动的Activity单独开一个栈,这个栈里只有它,适用新开Activity和app能独立开的,如系统闹钟,微信的视频聊天界面不知道是不是,知道的同学告诉我下,在此谢过! 另外,SingleTask和SingleInstance会对onActivityResult的回调有影响,网上有很多的
二、View的绘制流程 ViewRoot ->performTraversal() ->performMeasure() ->performLayout() ->perfromDraw() ->View/ViewGroup measure() ->View/ViewGroup onMeasure() ->View/ViewGroup layout() ->View/ViewGroup onLayout() ->View/ViewGroup draw() ->View/ViewGroup onDraw() 看下invalidate方法,有带4个参数的,和不带参数有什么区别;requestLayout触发measure和layout,如何实现局部重新测量,避免全局重新测量问题。 三、事件分发机制 ->dispatchTouchEvent() ->onInterceptTouchEvent() ->onTouchEvent() requestDisallowInterceptTouchEvent(boolean) 还有onTouchEvent()、onTouchListener、onClickListener的先后顺序 四、消息分发机制 这个考得非常常见。一定要看源码,代码不多。带着几个问题去看: 1.为什么一个线程只有一个Looper、只有一个MessageQueue? 2.如何获取当前线程的Looper?是怎么实现的?(理解ThreadLocal) 3.是不是任何线程都可以实例化Handler?有没有什么约束条件? 4.Looper.loop是一个死循环,拿不到需要处理的Message就会阻塞,那在UI线程中为什么不会导致ANR? 5.Handler.sendMessageDelayed()怎么实现延迟的?结合Looper.loop()循环中,Message=messageQueue.next()和MessageQueue.enqueueMessage()分析。 五、AsyncTask源码分析 优劣性分析,这个网上一大堆,不重述。 六、如何保证Service不被杀死?如何保证进程不被杀死? 这两个问题我面试过程有3家公司问到。 七、Binder机制,进程通信 Android用到的进程通信底层基本都是Binder,AIDL、Messager、广播、ContentProvider。不是很深入理解的,至少ADIL怎么用,Messager怎么用,可以写写看,另外序列化(Parcelable和Serilizable)需要做对比,这方面可以看看任玉刚大神的android艺术开发探索一书。 八、动态权限适配问题、换肤实现原理 九、SharedPreference原理,能否跨进程?如何实现? (三)性能优化问题一、UI优化 a.合理选择RelativeLayout、LinearLayout、FrameLayout,RelativeLayout会让子View调用2次onMeasure,而且布局相对复杂时,onMeasure相对比较复杂,效率比较低,LinearLayout在weight>0时也会让子View调用2次onMeasure。LinearLayout weight测量分配原则。 b.使用标签 c.减少布局层级,可以通过手机开发者选项>GPU过渡绘制查看,一般层级控制在4层以内,超过5层时需要考虑是否重新排版布局。 d.自定义View时,重写onDraw()方法,不要在该方法中新建对象,否则容易触发GC,导致性能下降 e.使用ListView时需要复用contentView,并使用Holder减少findViewById加载View。 f.去除不必要背景,getWindow().setBackgroundDrawable(null) g.使用TextView的leftDrawabel/rightDrawable代替ImageView+TextView布局 二、内存优化 a.Bitmap.recycle(),Cursor.close,inputStream.close() b.大量加载Bitmap时,根据View大小加载Bitmap,合理选择inSampleSize,RGB_565编码方式;使用LruCache缓存 c.使用 静态内部类+WeakReference 代替内部类,如Handler、线程、AsyncTask d.使用线程池管理线程,避免线程的新建 e.使用单例持有Context,需要记得释放,或者使用全局上下文 f.静态集合对象注意释放 g.属性动画造成内存泄露 h.使用webView,在Activity.onDestory需要移除和销毁,webView.removeAllViews()和webView.destory() 备:使用LeakCanary检测内存泄露 三、响应速度优化 Activity如果5秒之内无法响应屏幕触碰事件和键盘输入事件,就会出现ANR,而BroadcastReceiver如果10秒之内还未执行操作也会出现ANR,Serve20秒会出现ANR 为了避免ANR,可以开启子线程执行耗时操作,但是子线程不能更新UI,因此需要Handler消息机制、AsyncTask、IntentService进行线程通信。 备:出现ANR时,adb pull data/anr/tarces.txt 结合log分析 如何做好面试突击,规划学习方向?面试题集可以帮助你查漏补缺,有方向有针对性的学习,为之后进大厂做准备。但是如果你仅仅是看一遍,而不去学习和深究。那么这份面试题对你的帮助会很有限。最终还是要靠资深技术水平说话。 网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。建议先制定学习计划,根据学习计划把知识点关联起来,形成一个系统化的知识体系。 学习方向很容易规划,但是如果只通过碎片化的学习,对自己的提升是很慢的。 同时我还搜集整理2020年字节跳动,以及腾讯,阿里,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。 在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多。 CodeChina开源项目地址:https://codechina.csdn.net/m0_60958482/android_p7 网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。 目地址:https://codechina.csdn.net/m0_60958482/android_p7](https://codechina.csdn.net/m0_60958482/android_p7)** 网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。 |
|
开发测试 最新文章 |
pytest系列——allure之生成测试报告(Wind |
某大厂软件测试岗一面笔试题+二面问答题面试 |
iperf 学习笔记 |
关于Python中使用selenium八大定位方法 |
【软件测试】为什么提升不了?8年测试总结再 |
软件测试复习 |
PHP笔记-Smarty模板引擎的使用 |
C++Test使用入门 |
【Java】单元测试 |
Net core 3.x 获取客户端地址 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/17 22:31:15- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |