zoukankan      html  css  js  c++  java
  • 最近面试Android的一些面试题

    最近一个多月面试过一下公司(均为实习):
    腾讯:内推一面卒。正式校招拿到offer
    阿里:内推二面卒。
    蘑菇街:面完三面技术面,等待HR面
    网易:拿到offer。
    可以看到,大部分问题不难,但是能回答对和回答的好不好又是两个两个不同的情况了。任何问题都尽量回答的越详细,越清晰,越全面,面试官就会越认为你掌握的越好。
    比如问一下内存泄露,那么试着多列举一些情况:

    首先解释内存泄露是什么。
    最常见的handler引用Activity,static+WeakReference解决
    耗时线程
    bitmap调用recycle,3.0前和后,3.0后偷换native内存
    想持久化Drawable,定义成static,老版本他持有view,view持有activity,可能间接造成activity泄露,4.0已修复。
    广播记得取消注册
    除此之外,如能提到jdk1.6中String的substring方法,那效果更好。

    再比如问到性能优化:

    从布局优化ViewStub,merge,include
    overdraw,GPU选项观察overdraw情况
    view的ondraw,尽量别new对象,不能耗时,60fps,16ms,GPU加速
    必要情况下使用SurfaceView
    避免内存泄露(又回到上一个问题了)
    ListView的优化:holder,分页加载,滑动停止后再下载图片等
    Bitmap的优化,加载单个bitmap,多个bitmap时的内存硬盘缓存
    利用android中的一些数据结构比如ArrayMap和SparseArray
    少用枚举,多用static访问快

    以下是面试中问到的问题,可能不全,因为隔得时间有些长可能忘记了。

    jvm:

    内存模型,特点,类信息在哪个区
    栈和堆的区别
    GC怎么知道一个对象要被回收,
    GC Root
    强引用,软引用,弱引用,虚引用
    类加载过程
    在项目中哪里使用过JVM的知识

    java:

    java基本数据类型
    多态是什么,怎么实现的
    ==和equals
    hashcode
    HashMap和HashTable区别
    HashMap,LinkedHashMap底层实现
    HashMap的整过过程,怎么设计一个hash函数散列均匀
    并发容器包,ConcurrentHashMap原理
    ArrayList和LinkedList区别
    虚函数实现
    反射,项目中啥时候用过。
    wait和sleep的区别
    并发同步,synchronized为什么是重量级的方式
    votile关键字的特点
    线程和线程池,线程池的实现的原理
    两个线程依次打印一串数字
    NIO,原理,裸写NIO的难点在哪
    unix的I/O模型

    数据结构算法

    堆得实现,数组保存二叉树
    堆排序
    快速排序
    数组找重复数字,位置
    讲一下常见排序算法的思想和复杂度

    android:

    activity生命周期,每个函数调用发生在什么情况下
    Fragment生命周期,开发中需要注意什么问题
    android中几种上下文的区别
    bitmap优化,复用,偷换native内存,BitmapFrctory.option几个参数
    缓存策略,LruCache和DiskLruCache原理,加上软引用,缓存框架的构架大概是什么样子。
    网络请求缓存
    handler机制
    handler一般用来干什么?还有在哪些地方看到使用handler
    HandlerThread
    Service和IntentService
    启动服务的方式,有没有使用过bindService
    view绘制过程
    事件分发过程
    使用过Canvas没
    ListView优化
    做过什么自定义控件,需要注意什么问题
    View的onDraw方法扯到SurfaceView
    ANR怎么避免
    OOM怎么避免
    Binder底层实现,框架
    ViewRoot源码,这个类的主要功能
    内存泄露
    怎么检测内存泄露
    性能优化
    动态加载了解不
    activity启动过程
    /data/app/的文件夹和文件的权限(很犀利的面试官问的,项目中用到最重要的一点,不愧10年工作经验)
    Android是怎么学的

    强行装逼时刻:想办法扯到Binder的源码,动态加载,插件框架:360的DroidPlugin和百度的DynamicLoad原理,activity启动流程,跨进程回调上面来,以及一些开源库,基本上讲完动态加载的框架就是和面试官聊天了。

    设计模式:

    知道哪些设计模式,平时怎么用的?
    口头念出一个单例每行怎么写,多线程问题
    外观模式

    http:

    (每次http的问题我回答不出来我就告诉面试官,http这些我只知道简单的,没有深入研究,android的可以随便问,然后就不问http的问题了)

    304
    缓存

    tcp/ip:

    七层模型
    TIME_WAIT
    流量控制,拥塞控制
    http头里面的host有什么用url里面都有了为什么在头字段要有

    操作系统:

    进程与线程
    操作系统看了那些内容
    进程间通信的方式
    死锁,怎么避免,平时遇到没

    项目:

    每讲一个点的时候都会问我为什么这么设计,你从哪里学到的?在哪里看到这么做的?
    遇到了什么问题,怎么解决的?是怎么发现问题的?log,单步调试
    项目的架构
    有没有为面试做准备,准备了哪些内容。

    大概就是这些,有些可能时间太长我也记不太清了。

  • 相关阅读:
    系统管理命令之tty
    系统管理命令之id
    idea中使用junit测试时使用Scanner类无法正常测试
    002-字段不为null
    java8中接口中的default方法
    java之接口适配器
    java之对象适配器
    java之类适配器
    java之多态(六)
    java之多态(五)
  • 原文地址:https://www.cnblogs.com/qhyuan1992/p/6071978.html
Copyright © 2011-2022 走看看