Android 开发面试中,面试官最喜欢问那些问题?

这篇具有很好参考价值的文章主要介绍了Android 开发面试中,面试官最喜欢问那些问题?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者:小谢

“你遇到过哪些高质量的Android面试?”

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3Pc1xZw5-1691675604271)(//upload-images.jianshu.io/upload_images/24388310-aa3c732481d0749f.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200)]

这是我前几天在知乎上面看到一个热门话题,看到后起了兴趣就试着往下翻了翻,看到下面的回答都是在分享、讲述自己的面试经历、面试感受以及面试后感想和总结。不妨的说很精彩。

但是看到提问时间是在3年前,为什么3年后的今天还能掀起热浪呢?

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

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

Android 开发面试中,面试官最喜欢问那些问题?,Android,移动开发,面试题,android,面试,java,移动开发,软件架构

一、A公司

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。)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vJsbyXJt-1691675604273)(//upload-images.jianshu.io/upload_images/24388310-a2e09c41ef074d05?imageMogr2/auto-orient/strip|imageView2/2/w/795)]

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。

二、B公司

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 是否可以被空格拆分为一个或多个在字典中出现的单词。

Android

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

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

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

3、Handler消息机制

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

三、C公司

1、介绍项目

刚刚说了,不多介绍

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

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

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

5、kotlin是如何兼容Java的?

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

知识梳理完之后,也准备了不少的电子书和面试笔记等学习文档,这些笔记将各个知识点进行了完美的总结(包含了很多内容:Android 基础、Java 基础、Android 源码相关分析、常见的一些原理性问题等等):https://qr18.cn/CgxrRy

Android 开发面试中,面试官最喜欢问那些问题?,Android,移动开发,面试题,android,面试,java,移动开发,软件架构文章来源地址https://www.toymoban.com/news/detail-638958.html

到了这里,关于Android 开发面试中,面试官最喜欢问那些问题?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 移动应用开发环境搭建Android Studio

    记得提前开启电脑虚拟化支持,具体方法可自行百度 查看是否启用虚拟化 JDK安装与卸载 由于Andriod开发使用的语言是javaKotlin,这里使用的是java语言所以需要先安装java的开发环境 所有开发 Android 应用程序需要的工具都是开源的,并且可以从互联网上下载 Android Studio 是谷歌推

    2023年04月08日
    浏览(71)
  • 基于android studio开发的火车票购票系统app,android移动开发课设,毕业设计

    基于android studio开发实现火车票购票系统app 适用于android移动开发学习项目,课程设计,毕业设计等 开发工具:android studio 或者intellij idea专业版 操作系统:windows10 java: JDK11 构建工具Gradle : gradle-7.0.0 模拟器AVD:pixel 3XL API 30 具体AVD配置详情如下 APP功能 该APP包含17个Activity,每

    2024年02月09日
    浏览(55)
  • 移动开发项目 Android Studio 健康助手APP

    健康助手系统是一款便捷软件,旨在通过提供多方面的的健康便捷的管理服务,让用户的生活更健康,更便捷。用户可以在健康助手APP上购买不同的体检套餐,预约医生,使用地图查找药房等的位置,浏览网页了解健康知识,传播健康文化。 (1)为了更好地了解自己的身体

    2024年02月03日
    浏览(80)
  • 如何开发移动应用:iOS和Android的比较

    移动应用开发领域一直以来都备受关注,而iOS和Android作为两大主要的移动操作系统,各自拥有强大的生态系统和开发工具。在本文中,我们将比较iOS和Android移动应用开发的关键方面,以帮助开发者选择合适的平台,或者了解在不同平台上开发应用时需要考虑的因素。 iOS iO

    2024年02月07日
    浏览(52)
  • Android移动应用开发——实验七——小鸭子报数(广播)

        掌握布局与控件的使用方法     掌握有序广播机制,根据广播接收者的优先级顺序接收广播     掌握广播拦截机制 通过合理布局来搭建界面,界面效果如下图所示。采用有序广播方式,将下方小鸭子优先级分别设置1000、800、600。 1、当点击大喇叭后弹出“有序

    2024年02月09日
    浏览(225)
  • Android移动开发基础——实训项目:个人财务软件

    目录 步骤 1.  项目计划 需求分析 程序流程图 2.  实现功能模块 修改APP图标 去除标题栏 制作引导页 登录模块 登录页面 注册页面 忘记密码页面 主页面(使用底部导航栏) 1.  主页面(修改版) 菜单 + 选项卡 2.  统计页面 3.  我的页面 关于页面 修改信息页面 所有用户页面 设

    2024年02月08日
    浏览(87)
  • 从零开始学数据结构和算法:腾讯Android开发面试记录,已开源_android 开发面试算法

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新Android移动开发全套学习资

    2024年04月25日
    浏览(57)
  • Android 开发必备知识点及面试题汇总(Android+Java+算法+性能优化+四大组件……),腾讯安卓开发面试

    5.请介绍下 AsyncTask的内部实现,适用的场景是 AsyncTask 内部也是 Handler 机制来完成的,只不过 Android 提供了执行框架来提供线程池来 执行相应地任务,因为线程池的大小问题,所以 AsyncTask 只应该用来执行耗时时间较短的任务, 比如 HTTP 请求,大规模的下载和数据库的更改不

    2024年04月15日
    浏览(65)
  • 移动应用开发之路 05 Android Studio 简单登录界面制作

    学校开了一门移动应用开发课程,我一开始兴趣盎然,但是看到使用的环境是 Java 8 的时候心就凉了一半,在询问老师的意见之后决定使用现在比较常用的Android Studio完成学习,特此记录自学之路。 这篇是一个总结性质的文章,主要为了熟练运用之前讲过的几个UI控件。小项目

    2024年02月08日
    浏览(66)
  • Android移动开发技术(慕课版)习题集题库及答案

    一 、 填空题 1.在Android开发环境中,SDK组件的作用是用于(   开发    )Android应用。 2.在Android开发环境中,(   Dalvik    )组件的作用是虚拟机管理。 二、判断题 1.电子邮件客户端属于Android平台体系结构的应用程序框架层。(  F  ) 2.Android 中使用AVD Manager工

    2024年02月10日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包