金九银十面试即将来临,资深面试官向你揭露Android面试‘潜规则’

前言

从接触 Android 开发到步入社会工作再到现在,经历过多次面试,也面试过其他人,其中有着不错的面试体验;也有令人不爽的面试情况,历经这么多次的面试和被面经验,我总结出来一个道理, 一个好的面试体验的产生必然会有一个专业的面试官

所以接下来就从"面试官"的角度来阐述一下,面试中所不可轻视且可能被遗忘的一些重点,希望这篇文章能够对你的职场生涯提供一些帮助,特别是那些正在面试或者跳槽的程序员们;话不多说,正式开讲

通常来说你要注意下面几点:

自我介绍及知识考察

自我介绍这个环节是必不可少的,时长一般在三分钟以内,我个人通常是一分半不到就介绍完了,自我介绍之后;面试官接下来就是对一些技术基础知识的考察,面试官会根据每位候选人的背景不同,选择性的对其引导询问

项目经历考察

项目经历是面试官最为看重的一点,简历上的项目介绍较为笼统,并不能对候选人有着清晰的了解,所以这时候面试官就对其会刨根问底,试图通过候选人对项目的亲口述说;以达到了解候选人对项目的深入层次;下面这几个关键点,希望大家能够记住,避免在面试中翻车

  • 沟通表达能力。应聘者能不能把一个事情讲清楚。如果这个人聪明的话,他就可以用最简单的语言把一个复杂的事情讲清楚。而且,这是一个好的程序员最基本的能力。而且,你可以在应聘者一边描述其经历的时候,你可以和应聘者有一些的良好的来来回回的交谈,这样就可以知道,他的沟通能力和沟通方式,从而了解他的性格。

  • 角色和位置。也许他参与了一个很大的项目,但只是做了一个很简单的模块。所以,了解其在项目中的担任的角色和位置是非常必要的。当应聘者说到“我们”或者“大家”之类的词汇时,一定要向下细化和明确。
    做出的贡献和解决了什么的问题。这个很重要,通过了解这个,你可以知道面试者是否聪明,是否有能力解决问题,是否有好的技术底子。

  • 演示。如果可能,你可以让应聘者展示一些其写过的代码,做过的设计,或是直接给你看看他写的程序的演示。(从设计上,代码的风格,重用性,维护性上你可以了解很多很多)
    基础知识。了解该项目中应聘者使用的技术的一些基础知识,比如,通过整个过程,你可以问一些网络,语言,面象对象,系统的一些基础知识。基础知识是非常重要的,这直接关系到了他的能力。

  • 流程和工具。了解应聘者所熟悉的项目的流程(银弹,瀑布,敏捷,……),还有流程中的一些工件(如:需求文档,设计文档,测试方档等),以及在开发过程中使用的工具(内存测试,代码检查,BUG报告,版本维护,开发调试……)

有人会说,应聘者的经历可以被他自己编出来的,他可以把一些不是他做的事说成是他做的。是的,的确是有这种可能。不过,不要忘了,一个谎言背后需要用更多的谎言来圆谎的,所以,你不必担心这个问题,只要你在应聘者的描述过程中逐步求精,细化问题,你会知道应聘者是否是在编故事的

针对上述的问题,这里特别提供刚刚整理出来的一份 《2023年大厂 Android 面试题汇总》,希望为你理清 Android 面试的主线思路,通过详解各大互联网公司的常见面试题,从面试的角度去展开介绍某一知识点,以及该知识点在项目中的使用,并在此过程中帮你梳理和建立 Android 开发的知识体系

因此,无论是你短期内想提升 Android 内功实力,突破自己工作中的能力瓶颈,还是准备参加 Android 面试,都会在这份指导手册中有所收获;

在这里插入图片描述

面试题展示

一、Activity的启动方式

standard 不管有没有已存在的实例,都生成新实例
singleTop 如果发现有对应的Activity实例位于栈顶,则重复利用,否则创建实例
singleTask a)栈内复用,复用时具有clearTop机制 b)single taskAffinity in task
singleInstance a)启用一个新的栈结构,将Activity放置于栈结构中,并保证不会有其
它Activity实例进入 b)方便多个应用共享全局唯一的实例

二、Handler防止内存泄露

原因 a).声明Handler为静态类,同时对于Activity的this引用封装成WeakReference
否则会导致匿名类引用了外部Activity,导致Activity不能被回收 b).如果这时对手机硬
件进行横竖屏切换,讲导致Activity被创建,却不能被回收

措施

a).public void onDestroy()
{
mHandler.removeCallbacksAndMessages(null);
}
static class MyHandler extends Handler {
WeakReference<Activity > mActivityReference;
MyHandler(Activity activity) {
mActivityReference= new WeakReference<Activity>(activity);
}
@Override
public void handleMessage(Message msg) {
final Activity activity = mActivityReference.get();
if (activity != null) {
mImageView.setImageBitmap(mBitmap);
}
}
}

三、SoftReference跟WeakRefrence的区别

WeakRefrence => 与强引用对象的生命周期一致,不会增加引用计数
SoftReference => 内存不足时才进行回收

四、如何避免OOM

减少内存对象的占用

  1. ArrayMap/SparseArray代替hashmap
  2. 避免在android里面使用Enum
  3. 减少bitmap的内存占用
  4. 减少资源图片的大小,过大的图片可以考虑分段加载

五、Devik 进程,linux 进程,线程的区别

Dalvik进程。
每一个android app都会独立占用一个dvm虚拟机,运行在linux系统中。
所以dalvik进程和linux进程是可以理解为一个概念。

六、Framework 工作方式及原理,Activity 是如何生成一个 view 的,机制是什么

Framework是android 系统对 linux kernel,lib库等封装,提供WMS,AMS,bind机制,handler-message机制等方式,供app使用。
简单来说framework就是提供app生存的环境。

  1. Activity在attch方法的时候,会创建一个phonewindow(window的子类)
  2. onCreate中的setContentView方法,会创建DecorView
  3. DecorView 的addview方法,会把layout中的布局加载进来。

七、 请说一说HashMap,SparseArrary原理,SparseArrary相比HashMap的优点、ConcurrentHashMap如何实现线程安全?

八、Flutter中的Widget、State、Context 的核心概念?是为了解决什么问题?

九、谈谈 Handler 机制和原理?

十、为什么在子线程中创建Handler会抛异常?

十一、Handler中有Loop死循环,为什么没有阻塞主线程,原理是什么?

十二、HandlerThread是什么?为什么它会存在?

十三、简述下 Handler 机制的总体原理?

十四 Looper 存在哪?如何可以保证线程独有?

十五、请说一说hashmap put()底层原理,发生冲突时,如何去添加(顺着链表去遍历,挨个比较key值是否一致,如果一致,就覆盖替换,不一致遍历结束后,插入该位置) ?


由于文章篇幅有限,不能将完整面试题+答案解析展示出来,有需要完整版的朋友,可以扫描下方二维码免费领取!!!

猜你喜欢

转载自blog.csdn.net/weixin_43440181/article/details/132090756