热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

往年Android面经复盘,你知道面试官最喜欢问什么?

进日逛知乎时,发现这样一个话题:“你遇到过哪些高质量的Android面试?”

进日逛知乎时,发现这样一个话题:“你遇到过哪些高质量的Android面试?”

往年Android 面经复盘,你知道面试官最喜欢问什么?

从上图可以看出关注和浏览人数还是挺高的,但是看到提问时间是在3年前,为什么3年后的今天还能掀起热浪呢?

想着这个问题,我就把问答完整的阅读了一遍。想了提问时间,又想到了我收到的推送时间。才明白原来快到了“年后春招在即”,大部分的程序员都在跃跃欲试,所以三年前的问答就再度掀起热浪。

想想我在互联网行业已经吃了三年的青春饭,这几年面试过的大厂不少于十家。拿到了offer也有3家,其中包含了小米、网易、还有一个新浪,现在在字节跳动划水摸鱼,有机会一起哈!我拿到手的offer的平均水平都在24K——27K 左右(工作1—2年),借着问答的机会作一波面试复盘。

一、小米(2019.4.17)

1、介绍项目

我之前是做了新闻App,相当于低仿的今日头条吧!

基本功能:

  • 欢迎页面加载(3s,点击可跳过)——Activity相关

  • 用户注册/登录 ——SQLite运用

  • 横向滑动列表显示新闻类别——TabLayout、ViewPager、FragmentPagerAdapter的应用

  • 底部菜单栏 切换——Fragment运用

  • 主页(显示新闻列表)——ListView

  • 设置(退出应用、退出登录、清空缓存)——Activity管理、SharePreference

  • 我的(账号安全、新闻收藏夹)——SQLite

  • 新闻列表下拉、上滑实现刷新——自定义ListView

  • 逐条收藏新闻、删除新闻——SharePreference

  • 仿UI界面——各类控件运用

  • 点击查看新闻详情 —— WebView

  • 用户界面更换头像功能——Android运行时权限、多媒体、Content Provide

2、简单说一下Activity生命周期?

下图是Activity状态转换图(注意图中,方框内执行的是状态转换的过程,并不是状态,状态如前述,只有三种:RUNNING / PAUSED / STOPPED。)

往年Android 面经复盘,你知道面试官最喜欢问什么?

3、简述一下RecyclerView缓存机制?

RecyclerView在Android的应用上可以说已经取代了listview,其灵活,组装式设置,多缓存机制可以适应多列表在Android开发中各种各样的需求。

对于RecyclerView的缓存机制一直都想稍微的屡下思路,简单点说RecyclerView对比listview缓存机制中就是多了两层缓存的支持,listview是两级缓存,RecyclerView为四级缓存(当然在大部分情况下是三级缓存)。

4、在一个listview里每个item中都有一个动画(gif)播放的view,当我点击item中的button时动画(gif)播放。当有动画播放时滑动listview,偶尔会发生item错位的事件。原因是什么?

这是item复用的问题,由于异步加载导致图片错位

5、当Activity有多个Handler的时候,Message消息是否会混乱?怎么样区分当前消息由哪个Handler处理?

不会混乱,哪个Handler发送的消息,到时候也是这个handler处理。在发送消息的时候,会绑定target,这个target就是Handler本身,当需要handler调用dispatchMessage(msg)处理消息的时候,这个Handler就是发送消息时绑定的handler。

无论用哪一种方法发送消息,最终都会调用enqueueMessage(MessageQueue queue, Message msg, long uptimeMillis)来发送消息

private boolean enqueueMessage(MessageQueue queue, Message msg, long uptimeMillis) { msg.target = this; if (mAsynchronous) { msg.setAsynchronous(true); } return queue.enqueueMessage(msg, uptimeMillis); }

这里的this,就是当前的handler。在来看需要Handler处理消息的时候,取的是哪一个handler,下面贴出主要源码。​

public static void loop() { ...... for (;;) { Message msg = queue.next(); // might block if (msg == null) { // No message indicates that the message queue is quitting. return; } // This must be in a local variable, in case a UI event sets the logger ...... if (traceTag != 0 && Trace.isTagEnabled(traceTag)) { Trace.traceBegin(traceTag, msg.target.getTraceName(msg)); } final long dispatchStart = needStartTime ? SystemClock.uptimeMillis() : 0; final long dispatchEnd; try { msg.target.dispatchMessage(msg); dispatchEnd = needEndTime ? SystemClock.uptimeMillis() : 0; } finally { if (traceTag != 0) { Trace.traceEnd(traceTag); } } ...... msg.recycleUnchecked(); } }

这是循环消息时的部分代码,处理消息代码是msg.target.dispatchMessage(msg);,这里的target就是当时发送消息的handler。

二、网易(2020.5.2面试)

1、介绍项目

刚刚说了,不多介绍

2、说一下你对Java中强引用、弱引用、软引用的理解

强引用:这种引用就是我们在平常频繁使用的引用类型,JVM默认的就是这种引用类型的,例如,A a = new A(),这种就是强引用;

在这种类型下,当内存空间不足的时候,JVM宁可会OOM,使得程序异常中止退出,也不会随意的对其进行回收,只有当此对象没有引用的时候,JVM才会回收他。

软引用:这种引用我们可以这样使用它,SoftReference sr = new SoftReference(new A());可以利用sr.get()获取到这个对象,这种引用类型的对象,如果JVM内存足够的话就不会回收他;如果JVM内存不足了,才会回收这些对象。这种引用类型适合用作缓存来使用。

弱引用:这种引用可以这用使用他,WeakReference wr = new WeakReference(new A());然后利用wr.get()获取到这个对象;这种引用类型的对象,比软引用的对象,拥有更加短暂的生命周期,在垃圾收集器扫描JVM的内存区域的时候,遇到此种引用类型的对象的时候,不管当前内存是否够用,都会回收这些对象。

3、死锁是什么?必要条件是什么?怎么避免?

  • 死锁是指多个进程循环等待它方占有的资源而无限期僵持下去的局面。当两个或两个以上的进程同时对多个互斥资源提出使用要求时,有可能导致死锁。

  • 互斥条件:即一次只有一个进程可以使用资源,其它进程不能访问已经分配给其它进程的资源

  • 占有且等待:一个进程等待其它进程释放资源的时候,它已知占有这个资源

  • 不可抢占:其它进程不能强行占用已经分配给进程的资源

  • 循环等待:存在一个闭合链,链中的进程至少占据链中下一个进程的所需的一个资源

死锁避免:

  • 预防互斥:不可能禁止

  • 预防占有且等待:让进程一次性申请完所有的资源。

  • 预防不可抢占:(1)当占有资源的进程进一步申请资源的时候,拒绝,然后强制释放当前占用的资源。必要时可再申请。(2)当一个进程请求被另外一个进程所占据的资源的时候,操作系统可以抢占这个占据资源的进程。要求释放资源。第二种方案只有在任意两个进程优先级不同的情况下.

  • 预防循环等待:定义资源访问线性序列

4、TCP与UDP的区别

  1. 基于连接与无连接。

  2. TCP要求系统资源较多,UDP较少。

  3. UDP程序结构较简单。

  4. 流模式(TCP)与数据报模式(UDP)。

  5. TCP保证数据正确性,UDP可能丢包。

5、算法题:给定一个非空字符串 s 和一个包含非空单词列表的字典wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。

答案解析:给定一个非空字符串 s 和一个包含非空单词列表的字典wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词答案解析

Android

1、自定义View需要重写那些方法?

(结合实际需求,需要滑动则重写onTouchEvent,需要控制自身布局则重写onMeasure,onLayout)

2、如何进行布局优化呢?

答案解析:布局优化_qq_39477770的博客-CSDN博客

3、Handler消息机制

答案解析:Android Handler消息机制原理最全解读(持续补充中)

4、说说你对UI优化的理解

答案解析:UI优化wfeii的博客-CSDN博客ui优化

三、新浪(2020.12.21)

1、介绍项目

刚刚说了,不多介绍

2、有没有了解过插件化?插件化和组件化什么区别?

答案解析:模块化、组件化和插件化的区别

3、什么时候用Application的Context,什么时候用Activity的Context

答案解析:什么时候用Application的Context,什么时候用Activity的Context_lulinhua1010

4、一定要在主线程中更新UI吗?能不能在子线程更新?

答案解析:一定要在主线程中更新UI吗?能不能在子线程更新?

5、kotlin是如何兼容Java的?

答案解析:kotlin是如何兼容Java的?答案解析

复盘了这么多,其实细心的朋友可以发现,大厂面试对Java基础、Android基础还是比较看重的,所以在面试前,进行一波知识的梳理是很有必要的。

1、Java基础面试考察点

  • JVM 工作流程

  • 运行时数据区(Runtime Data Area)

  • 类加载器

  • 垃圾回收 GC

  • String、StringBuffer、StringBuilder

  • 接口

  • HashMap

  • 单例模式

  • 线程的属性、状态、状态控制

  • synchronized

  • volatile

往年Android 面经复盘,你知道面试官最喜欢问什么?

2、Android基础面试考察点

  • Activity:生命周期、启动模式、启动过程

  • Fragment:特点、生命周期、与 Activity 通信

  • Service:启动过程、绑定过程、生命周期、启用前台服务(注册过程)、BroadcastReceiver、ContentProvider、数据存储

  • View:MeasureSpec、MotionEvent、VelocityTracker、GestureDetector、View的滑动、Scroller、事件分发、自定义View、Draw的基本流程

  • 进程:进程的生命周期、多进程、OOM_ADJ

  • Parcelable接口:Parcelable与Serializable对比

  • IPC:IPC方式、Binder、AIDL通信、Messenger

  • Bitmap:常用操作裁剪、缩放、旋转、移动、Bitmap与Drawabl、转换、保存与释放、图片压缩、BitmapFactory、Bitmap创建流程、Option类

  • 屏幕适配:(头条、抖音)适配方案、刘海屏适配

  • 消息机制:Handler机制、工作原理(ThreadLocal、MessageQueue、Looper、Handler)

  • 线程异步:AsyncTask、HandlerThread、IntentService、线程池、RecyclerView优化

  • Webview:WebView、WebSetings、WebViewClient、WebChromeClient、Webview加载优化、内存泄漏

往年Android 面经复盘,你知道面试官最喜欢问什么?

3、Android延伸知识考查点

  • ART:AOT编译、垃圾优先回收、开发调试调优、GC

  • Apk包体优化:Apk结构组成、整体优化、资源优化、代码优化、.arsc文件优化、lib目录优化

  • Proguard:公共模板、自定义混淆原则

  • 架构模式:MVC、MVP、MVVM

  • Jetpack:架构模式

  • NDK开发:JNI基础(数据类型、String字符串函数操作、访问Java的通常方法)、基础开发原则、Cmake构建NDK项目、常用的Android NDK原生API

往年Android 面经复盘,你知道面试官最喜欢问什么?

4、计算机网络面试考察点

  • Http相关:请求报文与响应、报文缓存机制、HttpsHttp 2.0

  • TCP/IP:三次握手四次挥手、TCP与UDP的区别

  • Socket:使用示例

  • 类加载器:双亲委托模式、DexPathList

往年Android 面经复盘,你知道面试官最喜欢问什么?

因文档有1200页,内容过于繁多。还有一些设计模式、源码、算法面试题,就不一一介绍了。

往年Android 面经复盘,你知道面试官最喜欢问什么?

近期,年后想要跳槽的朋友,需要这份Android面试考察点汇总PDF可以去我【GitHub】上查看:https://github.com/733gh/Android-T3

往年Android 面经复盘,你知道面试官最喜欢问什么?
往年Android 面经复盘,你知道面试官最喜欢问什么?

推荐阅读
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • C# WPF自定义按钮的方法
    本文介绍了在C# WPF中实现自定义按钮的方法,包括使用图片作为按钮背景、自定义鼠标进入效果、自定义按压效果和自定义禁用效果。通过创建CustomButton.cs类和ButtonStyles.xaml资源文件,设计按钮的Style并添加所需的依赖属性,可以实现自定义按钮的效果。示例代码在ButtonStyles.xaml中给出。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
author-avatar
love灬贪恋猫
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有