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

news2025/5/12 5:59:45

作者:小谢

“你遇到过哪些高质量的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年),借着问答的机会作一波面试复盘。

一、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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/860979.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自动脱扣型绝缘靴(手套)耐压支架操作步骤

一、概述 KDJS-8Q自动脱扣型绝缘靴(手套)耐压支架是根据《DLT 976-2017 带电作业工具、装置和设备预防性试验规程》、《DLT 1476-2015电力安全工器具预防性试验规程》、《GBT 17622-2008带电作业用绝缘手套》、《CB21148 2020足部防护 安全鞋》等…

【java】java项目在idea中Build Project或Rebuild Project一直进行不完

问题场景 我项目进行重新构建的时候,项目构建到某一个位置就一直不动了 解决方法 1.清理idea缓存 2.加大idea的内存 File -> Setting

在 Delphi 的 TRichEdit 中插入图片并保存为html文件

当在 Delphi 中使用 TRichEdit 组件时,有时需要将图片插入到文本中。下面详细介绍了如何在 TRichEdit 中插入图片。 引言: TRichEdit 组件是 Delphi 中常用的文本编辑控件,它不仅可以显示文本内容,还可以插入图片,丰富…

springboot汽车租赁后台java出租客户管理jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 springboot汽车租赁后台 系统有1权限:管理…

SCI论文中字体和图片字体大小的要求

SCI论文中字体和图片字体大小的要求 文章目录 1. American Chemical Society(ACS)要求2. Nature要求 1. American Chemical Society(ACS)要求 https://www.zhihu.com/question/380612293?utm_id0 2. Nature要求

章节1:HTTP协议回顾

章节1:HTTP协议回顾 HTTP请求方式 get请求:我们通常用其发起查询。 post请求:我们用其来向服务器提交数据。 HTTP请求格式 第一行为请求行。 HTTP响应格式 HTTP特点 请求应答模式灵活可扩展可靠传输无状态 stateless

网神 SecGate 3600 防火墙任意文件上传漏洞复现(HW0day)

0x01 产品简介 网神SecGate3600下一代极速防火墙(NSG系列)是基于完全自主研发、经受市场检验的成熟稳定网神第三代SecOS操作系统 并且在专业防火墙、VPN、IPS的多年产品经验积累基础上精心研发的高性能下一代防火墙 专门为运营商、政府、军队、教育、大型…

推出 Elasticsearch 查询语言 (ES|QL)

作者:Costin Leau 我很高兴地宣布,经过大约一年的开发,Elasticsearch 查询语言 (ES|QL) 已准备好与世界共享,并已登陆 Elasticsearch 存储库。 ES|QL 是 Elasticsearch 原生的强大声明性语言,专为可组合性、表现力和速…

网络加速与文件传输软件:如何通过优化网络提升文件传输速度

在信息化社会,文件传输是人们生活和工作中必不可少的一个环节。但是,由于网络环境的多样性和传输过程中可能出现的各种问题,文件传输速度经常受到影响。因此,如何优化网络以提高文件传输速度成为了一个重要的课题。本文将探讨网络…

Mybatis-plus 异常:Not Found TableInfoCache

标题:Mybatis-plus 异常:Not Found TableInfoCache Mybatis-plus 是一个流行的基于 Mybatis 的增强工具包,可以极大地简化数据库操作。然而,在使用 Mybatis-plus 过程中,可能会遇到一些异常情况,其中之一就…

mysql基础之触发器的简单使用

1.建立学生信息表 -- 触发器 -- 建立学生信息表 create table s1(id int unsigned auto_increment,name varchar(30),score tinyint unsigned,dept varchar(50),primary key(id) );2.建立学生补考信息表 -- 建立学生补考信息表 create table s2 like s1;3.建立触发器&#xf…

【excel技巧】excel公式如何隐藏?

Excel文件中最重要的除了数据还有就是一些公式了,但是只要点击单元格,公式就能显示出来,如果不想别人看到公式应该如何设置呢?今天分享隐藏excel单元格数据的方法。 选中单元格,点击右键打开【设置单元格格式】&#x…

【Linux】云服务器自动化部署VuePress博客(Jenkins)

前言 博主此前是将博客部署在 Github Pages(基于 Github Action)和 Vercel 上的,但是这两种部署方式对于国内用户很不友好,访问速度堪忧。因此将博客迁移到自己的云服务器上,并且基于 Jenkins(一款开源持续…

最强自动化测试框架Playwright-(2)实用操作

元素定位 定位器是playwright自动等待和重试功能的核心部分。简而言之,定位器表示一种随时在页面上查找元素的方法。 Locators | Playwright Python 如下这些是推荐的 page.get_by_role() 按显式和隐式辅助功能属性进行定位。 page.get…

Dockerfile 语法梳理及介绍

1. FROM FROM参数:从什么基础镜像构建新的镜像。 举例 : FROM centos, FROM ubuntu, FROM hello-world 使用 centos 镜像作为基础镜像。 注意:尽量使用官方的镜像作为基础镜像, 为了安全起见。 2. LABEL LABEL参数:从上…

交流汽车充电桩也有大功率的,为什么市场还是想做直流的?

新能源汽车交流充电桩和直流充电桩的区别是什么? 交流汽车充电桩也有大功率的,为什么市场还是想做直流的? 交流充电桩和直流充电桩最本质的区别是充电时车载设备的参与程度。 交流充电桩就好比是一双筷子,它把食物送到嘴里&#…

Windows 编译CEF源码详细记录

背景 默认的CEF不支持音视频功能&#xff0c;需要下载源码将ffmpeg开关打开&#xff0c;再进行编译。 Linux编译参考&#xff1a; 《Linux CEF源码下载编译详细记录》 创建目录结构 code/automate/automate-git.py <-- CEF build scriptchromium_git/cef/ …

Vue数组变更方法和替换方法

一、可以引起UI界面变化 Vue 将被侦听的数组的变更方法进行了包裹&#xff0c;所以它们也将会触发视图更新。这些被包裹过的方法包括&#xff1a; push()pop()shift()unshift()splice()sort()reverse() 以上七个数组都会改变原数组&#xff0c;下面来分别讲解它们的区别&…

《C和指针》(6)指针

1、内存和地址 计算机的内存是由数以亿万计的位&#xff08;bit&#xff09;组成&#xff0c;每一个位可以容纳值0、1值。由于一个位所能表示的值的范围太有限&#xff0c;所以单独的位用处不大。通常许多为合成一组作为一个单位&#xff0c;这样就可以存储范围较大的值。下图…

【AI】Python调用讯飞星火大模型接口,轻松实现文本生成

随着chatGPT的出现&#xff0c;通用大模型已经成为了研究的热点&#xff0c;由于众所周知的原因&#xff0c;亚太地区调用经常会被禁&#xff0c;在国内&#xff0c;讯飞星火大模型是一个非常优秀的中文预训练模型。本文将介绍如何使用Python调用讯飞星火大模型接口&#xff0c…