Android进阶之路

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

2021-02-26  本文已影响0人  冬日毛毛雨

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

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

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

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

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

一、小米(2019.4.17)

1、介绍项目

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

基本功能:

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

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

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。

二、网易(2019.5.2面试)

1、介绍项目

刚刚说了,不多介绍

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

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

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

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

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

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

死锁避免:

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优化

三、新浪(2019.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基础面试考察点

2、Android基础面试考察点

3、Android延伸知识考查点

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

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

近期,金三银四想要跳槽面试的朋友可以查考学习这份Android面试知识点汇总版的PDF,我已将其上至GitHub中;另外还有大厂面试题汇总+高级Android进阶思维图+Android源码笔记+进阶学习视频也可去我 GitHub项目地址:https://github.com/733gh/Android-T3 中查阅。

上一篇 下一篇

猜你喜欢

热点阅读