zoukankan      html  css  js  c++  java
  • 2020Android 高级面试题总结(附答案解析)

    前言

    回顾一下自己这段时间的经历,三月份的时候,疫情原因公司通知了裁员,我匆匆忙忙地出去面了几家,但最终都没有拿到offer,我感觉今年的寒冬有点冷。到五月份,公司开始第二波裁员,我决定主动拿赔偿走人。后续的面试过程我做了一些准备,基本都能走到hr面,后面我也顺利地拿到了offer,我给大家分享下我的求职体会,希望能给大家一些参考。

    一般Android面试分为两部分:Java部分和Android部分,下面说一下自己面试过程遇到的一些具体题目和一些相关知识点。

    一 Java相关

    1.重载函数的签名(区别是否是重载函数)
    答:方法名+参数类型+参数顺序(返回值不是)
    2.finalize的工作原理
    答:一旦垃圾收集器准备好释放对象占用的存储空间,它首先调用finalize(),而且只有在下一次垃圾收集过程中,才会真正回收对象的内存.所以如果使用finalize(),就可以在垃圾收集期间进行一些重要的清除或清扫工作。此外系统进行垃圾回收时并不保证一定会调用它,所以可以说它和对象被回收没有必然关系。
    3.一个对象的创建过程
    答:例如有一个Dog类:
    1.即使没有static,构造器其实也是静态方法,所以当首次创建Dog时或者Dog的静态域或者静态方法被访问的时候,Dog的class对象会被加载。
    2.在加载Dog的class的时候可能会发现其有基类,此时先暂停Dog的加载,转而去加载其基类。所以基类的static域比子类先初始化。
    3.载入class文件之后,会创建一个该该类的class对象,所有关于静态初始化的动作会被执行,所以静态初始化只在Class对象首次加载时进行一次。
    4.当使用new的时候,首先为Dog对象在堆上分配足够内存空间。这块内存控件会被清零,所有实例都被初始化成了默认值,包括基类。
    5.执行所有字段定义处的初始化,从基类开始。
    6.执行构造器。(在第一行会执行基类的构造器)
    4.对象的销毁是按照创建的逆序来进行的。
    5.final的方法和类都不允许覆盖和继承。private默认实现了final。
    6.简述内部类的特点
    7.形式参数可被视为local variable,也就是说形式参数相当于在方法中定义了一个局部变量a,当传入c时,只是将c指向的对象给a
    8.finally 语句块是在 try 或者 catch 中的 return 语句之前执行的
    9.简述jvm中默认的classLoader与功能
    10.switch语句后的控制表达式只能是short、char、int、long整数类型和枚举类型,不能是float,double和boolean类型。String类型是java7开始支持
    11.重写的特性
    12.!=和==,当用于基本类型时候,是比较值是否相同;当用于引用类型的时候,是比较对象是否相同,比较内存地址
    13.null可以被强制类型转换成任意类型的对象,于是通过它来执行静态方法
    14.如何终止一个线程
    15.静态属性和静态方法是否可以被继承
    16.列出各种List,Set,Map,Queue并说出他们的同与不同。
    17.列出几种线程池
    18.解释一下java内存模型
    19.解释一下java代码的原子性
    20.解释一下volatile字段
    21.解释一下synchronized字段
    22.Lock的使用
    23.wait()和sleep()区别
    24.死锁产生的条件

    篇幅原因,参考答案均整理到下面这份PDF文档里,点击下载:https://shimo.im/docs/gTtkXVggxQrwjQ9K

    二 Android相关

    Android部分我就不分几大块了。直接列举,但是列举到的每一项都是面试经常会问到并且会延伸问的,所以需要深入的去研究。
    1.Android事件分发机制,请详细说下整个流程
    2.Android view绘制机制和加载过程,请详细说下整个流程
    3.Activty的加载过程 请详细介绍下
    4.Activity的启动模式:
    5.Activity缓存方法:
    6.Service的生命周期,两种启动方法,有什么区别:
    7.怎么保证service不被杀死
    8.广播的两种注册方法,有什么区别。
    9.Intent可以传递哪些数据类型
    10.Json有什么优劣势
    11.动画有哪几类,各有什么特点:
    12.Handler、Loop消息队列模型,各部分的作用。
    13. 怎样退出终止App:自己设置一个Activity的栈,然后一个个finish()。
    14. Android IPC:Binder原理
    15.android的优化
    16.一个singleton如何实现线程的同步问题
    17.android重要术语解释
    18.理解Window和WindowManager
    19.Bitmap的处理:
    20.综合技术:
    21.如何实现一个网络框架(参考Volley)
    22.ClassLoader的基础知识:
    23.插件化框架描述:dynamicLoadApk为例子
    24.热修复:Andfix为例子

    答案均整理到了PDF里,需要的朋友,点击下载:https://shimo.im/docs/gTtkXVggxQrwjQ9K
    Android相关

    三 Android相关总结

    上面的列的相关内容,看似很短一句话,但是每一项都需要你深入的去研究,要了解原理,最好去看一下源码实现。当然还有一些是我没写到的,可能是我写的时候没有想起来,并不代表他们不重要,你也需要重视,再来一波推荐:
    《Android开发艺术探索》强烈推荐,建议细细的读,如果粗心大意建议读两到三遍,针对性的读。
    《Android进阶之光》
    《高级Android开发强化实战》
    《Android组件化架构》
    《Android热修复技术原理》
    《Android插件化开发指南》

    五 面试心得

    1.准备要充分,知识面要尽量的广,同时深度也要够。
    2.面试安排上,如果不着急,尽量给自己留多时间,两天一家,及时做总结和补充。
    3.心态要放平,当做一次技术交流,面试要看一部分的运气,也要看一些眼缘,有的面试官一张嘴你就能感觉到你这次面试完了。想去的公司没有面试好,不要气馁,继续加油准备。
    4.简历投递方面,拉勾上投了很多经常不匹配,可能是我学历问题(自考本),有一些打击自信心,如果有同样感受的,不妨换BOSS或者其他平台。避免打击自信心。
    5.写简历一定要体现自己的优势,最好能体现类似于,用到了什么技术,解决了什么问题。简历上写到的一定要胸有成竹。
    6.类似于你的优势是什么,你觉得你项目中做的比较好的地方有哪些,你能给公司带来什么,这种问题心里要先想一些,免得临场发挥容易紧张说不好。
    7.我所经历的面试,一般技术面最少是两轮。如果一轮后让你走了,而你还自我感觉良好,那我觉得你有必要回顾一下面试内容,并一条一条找找该问题的相关内容,大部分问题就在于你没有答到点子上,可能是深度不够,也可能是扩展不够。继续加油。
    简历模板

    六 闲聊

    现在外面面试问的的确比较多,要求也挺高的,行情不好,薪资也不好要,所以心态一定要放好,找好自己的定位,心态一定要好。

    面试之后要尽量做到总结,从我最开始没什么准备就出去面试,被打击一通之后,总结了七八家面试题,会发新面试问到的都是那些知识点,可能角度不一样,但是你只要深度够,他怎么问,你基于原理来回答,基本上都没差,从签了赔偿协议以后出来面试,连续四家公司都走到了HR面,可以说面试的感觉上来了。前面的总结积累终究没有白费。

    在写这篇文章之前,我专门看了下我之前收藏的别的公号上发的面试题,很全,我都有点不想写这篇文章了。但是想了下我这几个月听到要裁员开始面试,到第一批没被裁,第二批裁员迟迟不来。到第二批来的时候主动申请被裁。中间面试被打击,失落,看到新闻那那都在裁员,到现在面试整体感觉还不错。还是想分享一下自己的心里路程,想告诉大家,裁员别慌,做自己该做的,其他自己决定不了的,先放一放,心里列一个123,一条一条来。

    可以看到我在上面推荐了很多书籍,而且JAVA部分时分块来了。是因为当我看到很多面试题,针对题来的时候,题会很多,而且有时候你会觉得你的题都会了,但是面试的时候还是面不好,说明你的知识并不扎实。或者你知识会了这个题,并没有融会贯通,所以在JAVA部分我分大块来描述,而且针对每一块,我都有推荐一本相关的书,你可能不需要都看,可以针对性的看。而Android部分时详细的知识点,这些知识点我希望的是,能够深入研究。而推荐的书籍,书中的部分都有一些相关的知识点,大家也可以选择性的看,当然论坛,博客都是知识的来源,大家做好知识点深度和广度的基类就行了。

    最后,虽然裁员的很多,都在说Android要没落,但是,不要慌,做自己的计划,学自己的习,竞争无处不在,每个行业都是如此。

    分享读者

    作者2013年java转到Android开发,在小厂待过,也去过华为,OPPO等大厂待过,18年四月份进了阿里一直到现在。

    被人面试过,也面试过很多人。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长,而且极易碰到天花板技术停滞不前!

    我们整理了一份阿里P7级别的Android架构师全套学习资料,特别适合有3-5年以上经验的小伙伴深入学习提升。

    主要包括阿里,以及字节跳动,腾讯,华为,小米,等一线互联网公司主流架构技术。如果你有需要,尽管拿走好了。

    如果你觉得自己学习效率低,缺乏正确的指导,可以加入资源丰富,学习氛围浓厚的技术圈一起学习交流吧

    群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。

    35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。

  • 相关阅读:
    【转】Yii的url美化管理
    【转】通过文件锁实现,程序开始运行时,先判断文件是否存在,若存在则表明该程序已经在运行了,如果不存在就用open函数创建该文件,程序退出时关闭文件并删除文件
    【转】关于C execlp函数的理解
    【转】shell循环,判断介绍,以及实例
    【转】Yii framework config 可以被配置的项目
    高级着色语言HLSL入门(7)
    c++中的string用法
    关于链表的创建 代码
    c++笔试题汇总
    TCP Socket编程 C/C++实现 (Windows Platform SDK)
  • 原文地址:https://www.cnblogs.com/Android-Alvin/p/13453472.html
Copyright © 2011-2022 走看看