android面试准备

Android知识体系

语言

java基础

  • 数据类型

    • 基础数据类型

      • 基础数据类型相关运算
      • byte/8,char/16,short/16,int/32,float/32,double/64,long/64,boolean
    • 缓存池

      • 区别新建对象和使用缓存池中的对象

        • Integer.valueOf(123) == Integer.valueOf(123) 引用缓存池中的同一个对象
        • new Integer(123) != new Integer(123)这是两个对象
      • Integer -128-127

      • Short -128-127

      • Boolean true false

    • 包装数据类型

      • 自动装箱会调用valueOf()
  • String相关

    • 特性

      • final修饰 不可被继承

        • 不可变好处

          • 线程安全
          • 字符串常量池数据共享,节省资源
      • java 8内部使用char[]存储数据

      • java 9 内部使用byte[]存储数据

    • 字符串常量池

      • new String("aa") != new String("aa")

      • intern(). 从常量池中获取字符串, 如果没有该字符串将创建一个

      • String a = "11"; String b = "11"; a ==b 在编译时期就会将11放入字符串常量池中

      • String a = new String ("abc")创建两个对象(常量池中不存在abc的情况下)

        • "abc"字符串字面量
        • new会创建字符串对象
      • String s2="a"+"b",String s3="a",String s4="b",s5=s3+s4 a2 != s5
        编译器会被s2优化为ab, 直接放入常量池中, 而s5相当于new String("ab") 是在堆中

    • String,StringBuffer,StringBuilder

      • String,StringBuffer不可变,线程安全

      • StringBuilder线程不安全

        • StringBuffer中很多方法是使用Synchronized修饰的,保证线程安全
      • StringBuilder的性能比StringBuffer更高

    • ==与equals

      • 基本数据类型 == 用于比较值是否相同
      • 引用数据类型 == 比较地址
        euqals() 比较引用的对象值是否相同
      • Java 规范,使用 equal() 方法来判断两个相等的对象,必须具有相同的 hashcode。
  • 反射

    • java.lang.reflect

      • Field get(), set()

        • getFiled()
        • getDeclaredFiled()
      • Method invoke()

        • getDeclaredMethods()
        • getMethods()
        • getMethod(String name, Class... parameterTypes) 获得指定参数方法
      • Constructor 创建新的对象

        • c.newInstance()
        • constructor.newInstance()创建指定构造器的实例
    • 获得Class对象

      • Class.forName(对象)
      • 对象.class
      • 对象.getClass()
  • 集合Collection

- List(元素有序, 且可以重复)

    - vector
    - Arraylist

        - 线程不安全, 效率高

- Map(元素无序, 且key不能重复)

    - HashMap

        - 1.7数组+链表
        - 1.8数组+红黑树
        - 允许null值作为key或value

    - HashTable

        - 线程安全, java1.1以前

- set(不许有重复的元素,和list一样单列元素的集合)

    - hashset 重写了equals与hashcode方法, 从保证加入到hashSet中的对象没有重复的
    - treeset
    - 只能通过iterator遍历器获取数据元素,不存在索引
  • 线程

    • 线程池

      • Android中四种常见的线程池

        • FixedThreadPool 核心线程数和最大线程数相同, 核心线程不会被回收, 除非关闭线程池
        • CacheThreadPool 无核心线程, 最大线程数为int的最大值,
        • ScheduledThreadPool 核心线程数量固定, 非核心线程无限制, 非核心线程闲置时间10s
        • SingleThreadExecutor 只有一个核心线程,保证所有任务都在同一个线程中按顺序执行
      • ThreadPoolExecutor

        • int corePoolSize, //核心线程数
        • int maximumPoolSize,//最大线程数
        • ong keepAliveTime,//线程在空闲时间多久会终止
        • TimeUnit unit, //空闲时间的单位
        • BlockingQueue workQueue // 阻塞队列,用来存储等待缓存的线程)
    • 线程安全

      • volatile: 特殊修饰符, 只有成员变量才能使用. 保证下一个读操作会在前一个写操作之后发生
    • 基础概念

      • 线程是进程的子集,1个进程可以有多个线程
      • start()和run()方法区别: start会真正启动一个线程, 内部会调用run方法, 而run只是启动当前线程 不会创建新的线程
      • 继承Thread或者实现Runnable接口来实现线程, 使用runnable接口灵活性更高, 源于java的单继承多实现
      • Callable接口的call可以有返回值和处理异常, 而run方法没有, 涉及到计算时可以使用callable接口
      • wait()和sleep()的区别, wait会释放锁, sleep不会释放锁
  • IO

  • java虚拟机

    • 垃圾回收机制

      • 引用类型

        • 强引用

          • 不会被垃圾回收机回收, 最终会报outofMemofyError
        • 软引用

          • jvm在空间不足时会将软引用回收

            • 可以和hashmap联合使用, 用作图片缓存, 避免oom
        • 弱引用

          • jvm一旦发现有弱引用,无论空间是否充足都会被收回
        • 虚引用

          • 相当于没有引用, 在任何时候都会被垃圾回收机收回
      • 算法

        • 标记-清除

          • 将无引用的数据进行标记清除
        • 标记-整理

          • 将有效数据向前挪进, 清除剩余数据
        • 标记-复制

          • 需要分出一半的内存用于垃圾回收, 也可根据新生代的比例回收
      • 机制----- 分代回收

        • 新生代, 老年代, 永久代 ---根据三者的存活比例进行算法选择, 内存的分配是发生在新生代中, 根据新生代的比例分配内存, 从而选择回收的算法
      • 判断对象是否存活

        • 可达性算法GC Roots 从这些点开始向下搜做 若一个对象没有任何引用链可以到达gcroot, 及该对象是不可达的, 失效对象

          • 虚拟机栈中引用的对象
          • 方法区中类静态属性引用的对象
          • 方法区中常量引用的对象
          • 本地方法栈中引用的对象
        • 引用计数器

          • 存在两个失效对象相互引用问题
      • System.gc() 通知GC开始工作, 但是真正开始的时间不确定

    • 特性: 平台无关性

    • 运行时数据区域

        • 所有类型的对象和数组
        • jvm只有一个堆, 被所有线程共享
        • 不存放基本类型和对象的引用
        • 每个线程包含一个栈区, 栈和栈之间是私有的,不可以相互访问
        • 局部变量, 操作数和异常数据
      • 方法区

        • 被所有线程共享
        • 所有的class和static变量,该类型的常量池(类名,成员变量名等,以及方法引用,成员变量引用)
    • 类加载机制

      • 虚拟机把描述类的数据从Class文件加载到内存, 并对数据进行校验,转换解析和初始化, 最终形成可以被虚拟机直接使用的java类型

      • 双亲委派模型

        • 一个类加载器收到一个类的加载请求, 会将这个请求委派给父类加载器,每个层级都如此, 最后所有的请求都会传送给顶层的启动类加载器,这有顶层的启动类加载器无法完成加载请求时,子类才会尝试加载
      • 流程(实质可以理解为 初始化分配class及类变量)

        • 加载

          • 通过类的全限定名获取二进制字节流, 将字节流所代表的静态存储结构转化为方法区的运行时数据结构,在java堆中生成一个代表此类的class对象
        • 校验

          • 确保class字节流不危害虚拟机自身的安全
        • 准备

          • 为类变量(被static修饰的)在方法区中分配内存
          • 被final修饰的不管, 在编译期间就会分配好
          • 实例变量会被分配到堆内存
        • 解析

          • 将常量池中的符号引用替换为直接引用
        • 初始化

          • 初始化类变量和其他资源
        • 使用

        • 卸载

kotlin

基础知识体系

四大组件

  • Activity

      - 生命周期
      - 启动模式
      - 组件间通信
    
  • Broadcast

  • Service

  • ContentProvider

常用组件

  • Fragment

  • LinearLayout&RelativeLayout&FrameLayout&ConstraintLayout

  • RecycleView

  • Webview

  • Window

    • Toast, Dialog,PopuWindow

View

  • 绘制
  • 事件分发
  • 自定义view

动画

  • 帧动画
  • 属性动画
  • view动画

数据存储

  • SharePrefance
  • SQLite
  • File
  • 网络存储

通信机制

  • handler通信机制

适配

系统版本

  • min SDK
  • target SDK

屏幕尺寸

  • layout

屏幕分辨率

  • Drawable
  • dimens

实战技术工具

Git

  • 工具
  • 操作命令
  • git管理机制

Android Studio使用

  • logcat

  • adb

  • 常用插件

    • GsonFormat
    • ButterKnife Zelezny
    • Android Drawable Importer

网络相关

http

  • Http方法
  • 状态码
  • Https

常见问题解决

OOM

  • 使用软引用和弱引用: 用一个HashMap来保存图片的路径和相应图片对象关联的软引用之间的映射关系, 当内存不足的时候,jvm会自动回收缓存图片对象占用的空间
  • 使用hashmap增强软引用功能, 避免对象的多次重复创建, 提高系统的性能

内存优化

布局优化

大图片加载

内存泄漏

前沿技术

组件化

  • 路由Arouter

模块化

热修复

  • Tinker

增量更新

RN

设计模式

开发框架设计模式

  • MVC

  • MVP

  • MVVM

    • Databinding
    • LiveData

常见设计模式

  • 单例模式
  • 工厂模式
  • 适配器模式
  • 观察者模式
  • 代理模式
  • ....

算法,数据结构

排序

  • 选择排序
  • 冒泡排序
  • 插入排序
  • 希尔排序
  • 归并排序
  • 快速排序
  • 堆排序
  • 基数排序

栈和队列

  • 队列
  • 链表

  • 二叉查找树
  • 红黑树
  • 2-3查找树
  • 散列表

接入第三方库

推送

  • 极光
  • 华为,小米

地图

  • 高德地图

支付

  • 微信
  • 支付宝

统计

  • 友盟

异常记录

  • bugly

常用三方库

网络请求

  • Retrofit
  • okhttp
  • volley

异步框架

  • RXjava2

图片加载

  • Glide
  • Picasso
  • Fresco

事件

  • EventBus

路由

  • Arouter

依赖注入

  • Butterknife
  • Dagger2

数据库

  • GreenDao

Json转化

  • Gson
  • Fastjson

XMind: ZEN - Trial Version

你可能感兴趣的:(android面试准备)