2018重要的Android面试记录

作者: 森林雪峰 | 来源:发表于2018-12-25 01:46 被阅读75次

    废话不多说,直接上干货


    百度

    一面:

    1:算法匹配IP地址
    2:用过哪些集合,区别是什么
    3:类锁和对象锁的区别
    4:volitile的作用,synchronized保证原子性
    5: 序列化资源的大小
    6:内存优化做过哪些,怎么优化的
    7:事件分发(父控件拦截让子控件处理)
    8:绘制流程
    9:RelativeLayout和LinearLayout性能比较
    10:一个activity启动另一个activity的生命周期,特殊情况呢?
    11:比较难忘的开发经历
    12:listview和RecyclerView的比较
    13:RecyclerView的局部刷新,多种类型是怎么缓冲的
    14:两种序列化方式区别
    15:hashmap和hashtable的比较
    16:多态的内存模型怎么调用的,相关栈信息
    17:A,B两个页面不断切换,要求,很早的页面销毁

    二面:

    1:开源框架看过那些相关的源码
    2:设计一个类似迅雷的功能,需要设计那些模块儿,
    3:handler的机制,享原设计模式
    4:手写算法两个有序列表合成一个
    5:线程池有哪几种,区别是什么,核心线程和非核心线程的区别
    6:递归遍历的优化
    7:单例观察者模式的广播
    8:进程间通信aidl,为什么用binder
    9:车机APP,电视APP的了解
    10:微信图片是怎么存储的,多个聊天组做适配
    11:多线程下载,怎么存数据,怎么分段下载
    12:广播的底层原理
    13:AMS的原理怎么管理四大组件的
    14:一个APP中有大量的线程会出现什么情况
    15:自己做Launcher获取所有的apk信息
    16:Android 当App内存不足或在后台运行时回收部分activity的流程分析。

    三面:

    1:几份职业离职的原因
    2:职业规划
    3:职业稳定性
    4:职业晋升和别人竞争怎么办
    5:做过哪些底层的东西,开源过哪些东西
    6:EXO,ijplayer原理了解么
    7:有什么要问的问题
    8:问有没有offer
    9:关于重复业务开发的思考
    10:以往是怎么学习的


    高德

    电话面试:

    1:activity的生命周期是如何执行的,注意不是生命周期的执行顺序
    2:主线程中既然是loop死循环为什么不会阻塞UI
    3:handler的内存泄漏为什么,什么会持有handler对象,内存泄漏的本质是什么
    4:多线程的问题
    5:OKHTTP的优点线程池原理,怎么提高OKHTTP中一个请求的优先执行
    6:handlerThread是什么
    7:intentService的原理,
    8:ActivityThread是什么,是一个线程么
    9:service是在主线程么?会影响activity么
    10:activity的启动过程
    11:匿名内部类为什么外部类变量为final

    1面:

    1:listview中item中的button的点击和move的事件分发
    2:startService和bindService的区别
    3:如何实现一个圆角的图片
    4:如实实现一个扇形
    5:a,b,c,d,e,f……等任务,c,在ab后执行,d,在f后执行,最多开启6个线程,怎么设计


    小米

    1面:

    a:手写快排
    b:git在某次提交上修改代码,git rebase 的使用
    c:常用布局组件的注意事项
    d:一些Linux的脚本
    e:fragment的生命周期
    f:多线程,线程等待另一个任务的完成才能执行,线程的打断

    2面:

    1:设计模式,观察者模式
    2:fragment和activity的数据传值,fragment与fragment
    3:全局crash的拦截
    4:webview加载js代码
    5:mk,framework是否做过
    6:进程间通信,线程间通信
    7:okhttp的源码
    8: okhttp链接池的大小
    9:内存溢出和内存泄漏,内存抖动
    10:启动模式以及任务栈
    11:事件分发
    12:listview,两个item一致的问题
    13:fragment中的replace和add的区别
    14:bundle可以传递的数据类型:基本数据类型+实现可序列化的数据类型(String 实现了Serializable)
    15:为什么aidl的写法是拷贝(按文件编写的方式查找)
    16:Java四种引用---强、软、弱、虚的知识点总结
    17:热修复,热更新的区别原理


    知乎

    1:两种序列化的区别,为什么Android提供的不能序列化到本地
    2:可以将实现了Parcelable接口的类序列化后保存在本地吗?
    3:泛型,泛型擦除原理
    4:类型擦除引起的问题及解决方法
    5:Java ArrayList、LinkedList、Vector的区别
    6:手写列表反转
    7:hashmap的原理如何扩容和hashset的区别
    8:hashmap的时间复杂度
    9:hashmap和hashset的区别以及arrayList、linkedList、hashSet
    10:什么是HashSet
    11:Java ArrayList的自动扩容机制
    12:进程间通信(Android重要的binder)
    13:application和activity上下文的区别
    14:gc,gcroot是什么
    15:https和http的区别
    16:RSA,MD5,DES,Base64算法原理大全,应用场景
    17:列表环的判断
    18:堆栈溢出,oom的场景,内存中堆和栈的区别,
    19:学习的途径
    17:一个类设置hashcode的值的原理
    19:进程和线程的区别
    20:一个app中线程crash会出现什么情况,子进程crash会导致什么
    21:同步锁相关
    22:接口和抽象类的区别
    23:屏幕切换生命周期的变化,EditTextView中的数据恢复是怎么做到的?
    24:接口可以被继承么?
    25:git删除某个节点
    26:5&6和5|6分别是多少?
    27:bitmap和drawable的区别
    28:队列和栈的区别
    29:什么是DNS
    30:每次都需要三次握手吗?


    玩吧

    1面:

    1:handler机制
    2:ok的连接池,怎么复用
    3:hashmap原理
    4:message享元模式源码
    5:linkedhashmap原理
    6:三次握手四次挥手原理
    7:绘画数据上传的压缩办法
    8:弱引用和需引用的区别
    9:多线程的问题
    10:im相关知识
    11:类锁对象锁
    12:sleep和wait的区别
    13:view的绘制过程
    14:launcher启动一个app的过程
    15:如何确定viewgroup的大小
    16:泛型擦除,原理,,,自动类型转换

    2面:

    1:以往的学习方法
    2:新技术要考虑哪些方面
    3:如何评价你的同事

    3面

    1:薪资
    2:方向


    陌陌

    笔试:

    1:内部类知识
    2:启动模式
    3:适配方案
    4:断点续传实现代码
    5:网络框架异常捕获
    6:内存不够杀死,数据保存
    7:设计遍历文件夹

    1面:

    1:sp结构,优缺点,同步异步,异步数据怎么存储的
    2:数据库插入10000条数据的优化
    3:快排伪代码
    4:看过哪些源码,(okhttp,还说了一个eventbus)
    5:tcp相关知识
    6:Android 内部的SparseArray和ArrayMap代替HashMap

    2面:

    1:hashMap原理
    2:观察者模式设计
    3:binder机制
    4:内存泄露
    5:anr的检测(track)
    6:listView滑动过程中出现卡顿的定位
    7:object有哪些方法
    8:AsyncTask的注意事项
    9:handleThread内部是否有Looper等
    10:用过哪些锁,锁有哪些
    11:volatile的特性
    12:http请求头有哪些字段
    14:三次握手过程,为什么要三次握手
    15:项目中的难点,你最擅长的是什么
    17:代理设计模式

    3面:

    1:网路的阻塞,解决方案
    2:陌陌开源

    4面:

    1:HR聊价值观
    2:压薪资


    爱奇艺

    一面

    1:用过哪些设计模式,手写观察者
    2:关于稳定性
    3:handler原理,handlerThead的区别
    4:两种service的区别,生命周期的方法
    5:exo和media player的比较
    6:进程间

    二面

    1:手写一个线程等待另一个线程执行完才去执行任务哪个是被观察者哪个是观察者?
    2:工作经历的亮点
    3:对象回收一个对象两种引用,强引用一定不会被回收么
    4:用过哪些设计模式
    5:进程间通信有哪些
    6:Android中内存模型,加载的so是放在哪里
    7:handler的机制
    8:开源框架blockcanary的原理
    9:分析native异常
    10:设计一个app要考虑哪些,实际例子,泛型可扩展
    11:内存不足保存数据的原理
    12:掉帧,为什么16毫秒,卡顿的原因
    13:Android系统每隔16ms会发出VSYNC信号重绘我们的界面
    14:双缓冲机制

    三面

    1:大公司能带给我们的是什么(很牛的开发人员,氛围,规范)
    2:单利模式,最优的单利,枚举单利
    3:以往经历中认为重要的东西
    4:内存泄露的解决,实际开发怎么解决的
    5:自己的优势在哪儿
    6:离开几家公司的原因
    7:手写一个单利
    8:几家公司的位置
    9:用什么监测内存卡顿和泄露


    美菜网

    笔试

    1:图片放错文件夹引起显示大小不同的原因与屏幕适配原理
    2:androidVM虚拟机中运行文件的后缀名
    3:asset目录下的网页,加载方式file:///android_asset/html/hello.html
    4:webView处理超链接
    5:

    public static void test(){
        String a = "123";
        changStr(a);
        LogUtils.i(a);//123
    }
    private static void changStr(String string){
        string = "456";
        LogUtils.i(string);//123
    }
    

    6:

    public class Example {
        String string = new String("good");
            char[] ch = {'a', 'b', 'c'};
            public static void test() {
            Example example = new Example();
            example.change(example.string, example.ch);
            LogUtils.i(example.string + " and " + example.ch);
        }
        private void change(String string, char[] ch) {
           string = "test ok";
           ch[0] = 'g';
           }
    }
    

    7:快乐树的算法

    class Solution {
        public boolean isHappy(int n) {
            if(n == 1) return true;
            if(n == 4) return false;
        
            int newNum = 0;
            for(char c : Integer.toString(n).toCharArray()){
                int numChar = Character.getNumericValue(c);
                newNum += numChar * numChar;
            }
            return isHappy(newNum);
             }
    }
    

    1面

    1:布局的优化
    2:dp和sp的区别(sp会根据系统字体的变化而变化)
    3:ok
    4:retrofit
    5:多线程
    6:工作后自己的收获
    7:内存泄露,溢出,抖动解决方案
    8:屏幕适配
    9:线程池有哪几种,核心线程和非核心线程的区别
    核心线程 最大线程 非核心线程闲置60秒回收 任务队列
    10:eventbus的原理,有什么问题
    11:glide原理,三级缓冲,bitmap的压缩等
    12:算法
    13:http和https的区别,socket用过么?
    14:messager和AIDL的区别
    15:薪资范围
    16:mvc和mvp,MVVM的区别, 如何解决MVP中类臃肿的问题
    17:电视app适配
    18:事件分发,几个重要的函数,作用
    19:对象锁和类锁的区别:
    20:一个页面启动另一个页面的生命:onPause(A)-->onCreate(B)-onStart(B)-->onResume(B)-->onStop(A)
    21:动态启动模式的几种标记

    2面

    1:reteofit
    2:广播有哪些
    3:Java的集合类,有什么区别
    a:ArrayList的原理:数组实现
    b:LinkedList的原理:双向列表
    c:HashMap的原理:
    d:红黑树
    4:AIDL
    5:服务有哪些种类(前台)
    6:final修饰方法,类
    7:list遍历删除的bug:遍历删除list(java.util.ConcurrentModificationException
    8:fragment的生命周期,加上activity后呢?

    3面

    HR,薪资福利


    完美世界

    1面

    1:Android特有的集合
    2:synchronized修饰方法和静态方法的区别,synchronized(.Class)是对象么
    3:长按事件的实现(handler.postdelay())
    4::Android中移动多少是滑动,小于多少是点击//frameworks/base/core/res/res/values/config.xml::8dp
    5::线程间的通信方式
    6:看过哪些书(effictive java):高效的单例
    7:实现异步任务有哪些方式
    8:handler中message中的缓冲
    9:说说开发中遇到最复杂经历
    10:原子操作的类

    2面

    1:重写可以改变的是什么(override是设么含义)
    2:打包的流程
    3:AIDL和messager的区别
    4:git的开发流程
    5:v4和v7的区别,有没有听说过v13
    6:fragment的生命周期
    8:什么是设计模式?为什么要使用设计模式?有什么好处?
    9:Linux如何创建文件,文件夹,常用的一些命令
    10:ANR的解决方案,为什么无响应是5,10,20秒呢
    11:Java基础不扎实,什么都做过,业务能力强

    3面:HR

    实习经历
    校招经历
    第一份工作经历
    第二份工作经历


    最后总结

    今天是2018.12.25,圣诞节,即将进入2019年,入职现在公司之前,就想把自己的面试经历分享给更多的Android童鞋,一直比较忙,这里说一声抱歉啊,不管怎么样,算是实现了自己给大家的承若,熬夜写完了本文。
    楼主2018年大大小小的面试差不读30多家吧,本文是摘录了一些比较重要的面试经历,而且大部分是拿到了意向offer,从技术上讲,一直认为自己很菜,但是有一颗努力的心,我觉的从事Android开发的童鞋,若是能回答我上面记录的百分之80,我想知名的互联网企业的offer是很好拿的,希望本文能帮到各位,祝好~

    相关文章

      网友评论

        本文标题:2018重要的Android面试记录

        本文链接:https://www.haomeiwen.com/subject/fixxlqtx.html