Android面试知识点复习手册(收藏)

简介: Android面试知识点复习手册(收藏)

1 概述

对于一位开发者来说,基础知识决定了能走走多远,能做多好,甚至是决定了能挣多少,尤其一些大厂非常注重基础,基础是一切的根本,很多面试时候都是问基础知识,只不过问得比较深入,而不只是了解,如果没有事先准备,很容易被淘汰。整理了一部分知识点,方便大家复习及巩固知识。

2 Java 知识点

2.1 Java 基础

  • Java 语言有什么特点?
  • 面向对象三大特征
  • Java 和 C++ 的区别?
  • import java 和 javax 有什么区别?
  • JVM、JDK、JRE 区别?
  • Java 语言是编译与解释并存?
  • Java 注释
  • Java 标识符和关键字
  • Oracle JDK 和 OpenJDK 的区别?
  • 访问修饰符 public、private、protected、以及不写(默认)时的区别?
  • String 是最基本的数据类型吗?
  • String s = new String("xyz");创建了几个字符串对象?
  • 是否可以继承 String 类?
  • float f=3.4;是否正确?
  • short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
  • int 和 Interger 区别?
  • new Integer(120) 与 Integer.valueOf(120) 有何区别?
  • &和&&的区别?
  • Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?
  • switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在String上?
  • 用最有效率的方法计算2乘以8
  • 数组有没有 length() 方法?String 有没有 length() 方法?
  • 在 Java中,如何跳出当前的多重嵌套循?
  • 构造器(constructor)是否可被重写(override)?
  • 两个对象值相同 x.equals(y) == true,但却可有不同的 hashcode,对不对?
  • 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?(Java 没有引用传递,只有值传递)
  • String 和 StringBuilder、StringBuffer的区别?
  • 重载(Overload)和重写(Override)的区别,重载的方法能否根据返回类型进行区分?
  • 抽象类(abstract class)和接口(interface)有什么异同?
  • char 型变量中能不能存贮一个中文汉字,为什么?
  • 静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同?
  • 抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(native),是否可同时被 synchronized 修饰?
  • 一个类中静态(static)方法是否可以调用非静态(non-static)方法?
  • 如何实现对象克隆?
  • 断点续传?
  • Java 中的 final 关键字有哪些用法?
  • try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,什么时候被执行,在return前还是后?
  • 阐述 final、finally、finalize 的区别?
  • Collection和Collections的区别?
  • 字符型常量和字符串常量的区别?
  • Java 基本类型占用内存大小?
  • continue、break、和 return 的区别?
  • == 和 equals 区别?
  • hashCode() 与 equals()
  • 在 Java 中定义一个不做事且没有参数的构造方法的作用?
  • 对象的相等与指向他们的引用相等,两者有什么不同?
  • 在一个静态方法内调用一个非静态成员为什么是非法的?
  • Object 类常见的方法?
  • Java 序列化中如果有些字段不想进行序列化,如何做?
  • 重载和重写的区别?
  • 成员变量与局部变量区别?
  • 类的构造方法的作用是什么? 若一个类没有声明构造方法,该程序能正确执行吗? 为什么?
  • 为什么不能通过返回值类型区分重载?
  • BIO、NIO、AIO 区别?
  • 装箱和拆箱的原理?
  • 反射
  • Java 泛型
  • 泛型类型擦除?
  • 获取 Class 对象的方法?
  • 反射中创建对象的两种方法?
  • 为什么重写 equals 时必须重写 hashCode 方法?
  • 解决Hash碰撞冲突方法?
  • 深拷贝和浅拷贝?
  • 说说 Java 异常体系?
  • Java I/O 分为几种?
  • 那些状态下 finally 不会被执行?

2.2 Java 容器

  • ArrayList、LinkedList、Vector 区别?
  • list、set、map 区别?
  • HashSet、LinkedHashSet、TreeSet 区别、源码?
  • HashMap、LinkedHashMap、Hashtable、TreeMap 区别、源码?
  • List、Set、Map 区别?
  • ArrayList 和 Vector 区别?
  • 说说 ConcurrentHashMap?
  • ArrayList 扩容机制?
  • 说说 ArrayList 源码中 ensureCapacity() 作用吧?
  • HashMap 的长度为什么是 2 的幂次方?
  • comparable 和 Comparator 的区别?

2.3 Java 并发

  • sleep() 和 wait() 区别?
  • sleep() 方法和 yield() 区别?
  • 实现多线程程序有几种实现方式?
  • 线程的生命周期?
  • 为什么线程启动要调用 start(),而不是直接调用 run()?
  • interrupt()、interrupted()、isInterrupted() 区别?
  • start()、run() 区别?
  • 说说乐观锁、悲观锁、自旋锁、共享锁、独占锁、重量级锁、轻量级锁?
  • 说说 synchronized?
  • 说说 ReentrantLock ?
  • 说说线程的死锁吧?
  • 如何避免死锁?
  • 程序计数器为什么设计成私有?
  • 虚拟机栈和本地方法栈为什么设计成私有?
  • 公平锁、非公平锁、可重入锁?
  • Semaphore 信号量
  • JDK 1.6 synchronized 作了那些优化?
  • 说说 ThreadPoolExecutor 构造方法的参数?
  • 说说 Java 阻塞队列?
  • CyclicBarrier、CountDownLatch、Semaphore 的用法?
  • 说说 volatile?
  • 上下文切换?
  • 说说 ThreadLocal ?
  • 进程调度算法?
  • 线程有哪些基本状态?
  • 并发和并行区别?
  • 线程和进程区别?
  • 了解 CAS 吗?
  • 说说 ABA 问题?
  • AQS 了解吗?

2.4 JVM

  • 说说 JVM 运行时数据区?
  • 说说 JVM 内存区域?
  • Java 对象如何创建的,对象创建过程?
  • MinorGC、MajorGC、FullGC 区别?
  • 可作为 GC Roots 的对象?
  • 垃圾回收算法?
  • 类加载机制?
  • 类加载器?
  • 双亲委派机制?
  • 内存分配策略?
  • 对象的访问定位有哪几种?
  • 虚拟机如何解决内存分配并发问题?
  • 可作为 GC Roots 的对象包括几种?
  • String s1 = new String("abc");这句话创建了几个字符串对象?
  • String.intern() 作用?

2.5 设计模式

  • 创建者模式
  • 单例模式
  • 工厂模式
  • 原型模式
  • 建造者模式
  • 结构型模式
  • 适配器模式
  • 代理模式
  • 装饰者模式
  • 桥接模式
  • 外观模式
  • 享元模式
  • 组合模式
  • 桥接模式
  • 行为型模式
  • 模板模式
  • 策略模式
  • 命令模式
  • 职责链模式
  • 状态模式
  • 观察者模式
  • 中介者模式
  • 迭代器模式
  • 访问者模式
  • 备忘录模式
  • 解释器模式

3 Android 知识点

  • Activity 生命周期
  • 横竖屏切换时候 Activity 的生命周期
  • ActivityA 跳转 ActivityB 然后 B 按 back 返回 A,各自的生命周期顺序,A 与 B 均不透明?如果B是透明主题的又或是个DialogActivity 呢?
  • Android中进程的优先级?
  • onSaveInstanceState()方法的作用 ? 何时会被调用?
  • Activity的四种启动模式、应用场景 ?
  • Activity 常用的标记位 Flags?
  • Activity 跟 window,view 之间的关系?
  • 如何启动其他应用的 Activity?
  • 什么是 ANR?如何避免?
  • 说说 Android 中的动画?
  • ACTION_CANCEL 事件触发?
  • 动画的原理?
  • 属性动画和 View 动画区别?
  • Android 各版本新版本
  • Serialzable 和 Parcelable 的区别?
  • Android 为每个应用程序分配的内存大小是多少?
  • Activity 的 startActivity 和 context 的 startActivity区别?、
  • 怎么在Service中创建Dialog对话框?
  • 程序A能否接收到程序B的广播?
  • 数据加载更多涉及到分页,你是怎么实现的?
  • 编译期注解跟运行时注解有何不同?
  • 如何解析 xml,以及三种方式的区别?
  • 更新 UI 方式?
  • jar 和 aar 的区别?
  • 程序自启动?
  • BroadcastReceiver,LocalBroadcastReceiver 区别?
  • SharedPrefrences 的 apply 和 commit 有什么区别?
  • 计算一个view的嵌套层级?
  • asset 目录与 res 目录的区别?
  • 硬件加速
  • 显式 Intent 和隐式 Intent
  • 广播传输的数据是否有限制,是多少,为什么要限制?
  • 安卓签名机制?
  • merge、ViewStub、include 的作用?
  • ContentProvider 使用
  • Android 怎么加速启动 Activity?
  • Json 解析方式的两种区别?
  • Fragment懒加载
  • Bitmap 使用时候注意什么?
  • 多进程场景遇见过么?
  • Bitmap 的 recycler()
  • 一张Bitmap所占内存以及内存占用的计算
  • 数据库升级增加表和删除表都不涉及数据迁移,但是修改表涉及到对原有数据进行迁移,如何实现?
  • Canvas.save() 跟 Canvas.restore()的区别
  • 为什么bindService可以跟Activity生命周期联动?
  • 自定义 view 效率高于xml定义吗?说明理由。
  • Gradle 配置多渠道打包
  • Service 的生命周期
  • 加速启动Activity?
  • 断点续传和下载
  • Fragment 在 ViewPager 里面的生命周期,滑动 ViewPager 的页面时 Fragment 的生命周期的变化。
  • Android中跨进程通讯的几种方式?
  • HandlerThread
  • IntentService
  • 说一说支付流程?
  • 如何导入外部数据库
  • 如何保证Service不被杀死?
  • 简单说说 LinearLayout、FrameLayout、RelativeLayout 性能?
  • 说说 scheme 跳转协议?
  • 说说 Android 中集合框架?
  • Service 和 Activity 在同一个线程吗?
  • Service 里面可以弹吐司么?
  • 说说 Activity、Intent、Service 是什么关系?
  • 简单说一下 IntentService
  • Context 是 什 么 ?一 个 应用有多少个 Context?
  • Context、 Activity、Application 有什么区别?
  • 实现竖向的 TextView?TextView 文字描边效果?
  • 广播的两种注册方式 ?
  • Activity 怎么和 Service 绑定,怎么在Activity 中启动自己对应的 Service?
  • 如何将一个 Activity 设置成窗口的样式
  • 简单说一下 Activity
  • Service 是否在 main thread 中执行, service 里面是否能执行耗时的操作?
  • 说说ContentProvider、ContentResolver、ContentObserver 之间的关系?
  • ddms 和 traceView 的区别?
  • Handler、Thread和HandlerThread的差别
  • Android 适配方案
  • Android 中 HashMap 的优化
  • AsyncTask 的缺陷和问题,说说他的原理?
  • 说说 AndroidManifest.xml?
  • Activty 和 Fragmengt 之间怎么通信,Fragmengt 和 Fragmengt怎么通信?
  • Android系统架构,你能说说每一层的作用吗?
  • 反编译了解吗?
  • 为什么 bindService 可以跟Activity生命周期联动?
  • oom 是否可以try catch ?
  • 如何绕过 9.0 限制
  • 你是如何做单元测试的
  • 非UI线程可以更新UI吗?
  • 怎么控制另外一个进程的View显示?
  • Android 程序运行时权限与文件系统权限
  • SurfaceView、TextureView、SurfaceTexture、GLSurfaceView?
  • Scroller 原理?
  • RecyclerView 的性能优化
  • ListView 与 RecyclerView 简单对比?
  • Android类加载器
  • onStart()与onResume()有什么区别?
  • 说说 IdleHandler
  • 同步屏障机制(sync barrier)
  • getWidth() 和 getMeasureWidth() 区别
  • requestLayout,invalidate,postInvalidate 之间的区别?
  • apk安装流程
  • app 瘦身
  • 64k
  • 遇到 Fragment 哪些问题?
  • View 绘制
  • 如何解决View的事件冲突?
  • SharePreference性能优化
  • 内存缓存和磁盘缓存是怎么实现的?
  • PathClassLoader与DexClassLoader有什么区别?
  • SQLite升级
  • WebView优化
  • 什么是MeasureSpec?
  • Fragment的懒加载实现
  • DataBinding了解吗,你能说说它具体实现原理吗,有那些缺点?
  • MVC、MVP、MVVM 之间有何区别?
  • 如何实现一个圆形头像?
  • Apk 加密?
  • Apk 打包流程?
  • Android 匿名共享内存
  • MMKV 用过吗、原理?
  • 界面刷新机制?
  • 打包的时候 v1、v2、v3 签名有何区别?
  • Activity启动过程
  • ContentProvider启动过程
  • Service启动过程
  • 广播启动过程
  • Binder机制
  • 插件化
  • 组件化
  • 热修复
  • 换肤方案
  • 事件分发
  • 绘制流程
  • 源码分析
  • ARouter
  • ButterKnife
  • Dagger2
  • EventBus
  • Glide
  • GreenDao
  • Leakcanary
  • Okhttp
  • Retrofit
  • RxJava
  • 性能优化
  • 内存优化
  • 绘制优化
  • 启动优化
  • 数据存储优化
  • 网络优化
  • 电量优化
  • 包体积优化
  • Kotlin
  • 谈谈协程?
  • List 与 MutableList 的区别?
  • let、with、run、apply、also 之间的区别应用场景?
  • 注解 @JvmOverloads 的作用?
  • 实现单例的几种常见方式?
  • data class 理解?
  • 集合遍历有哪几种方式?
  • 什么是委托属性?请简要说说其使用场景和原理?
  • Kotlin中 Unit 类型的作用以及与Java中 Void 的区别?
  • Kotlin 中 infix 关键字的原理和使用场景?
  • "==" 和 "===" 区别?
  • 介绍一下伴生对象和静态成员?
  • kotlin 中 var、val、const val 区别?
  • @JvmField 和 @JvmStatic 的使用
  • @JvmOverloads 的作用?
  • List 与 MutableList 区别?
  • Kotlin 中的数据类型有隐式转换吗?
  • Kotlin中的可见性修饰符有哪些?相比于 Java 有什么区别?
  • 在 Kotlin 中,什么是内联函数?有什么作用?
  • 谈谈 Kotlin 中的 Sequence,为什么它处理集合操作更加高效?
  • 请谈谈 Kotlin 中的 Coroutines,它与线程有什么区别?有哪些优点?
  • Kotlin 中可见型修饰符有哪些?相比于Java有什么区别?
  • 谈谈 Kotlin 中的Unit?它和 Java 中的 void 有什么区别?
  • 如何安全地处理可空类型?
  • 说说 Kotlin中 的 Any 与 Java 中的 Object 有何异同?
  • Kotlin中 Unit 类型的作用以及与Java中 Void 的区别?
  • 分别通过对象表达式 object 和 lambda 表达式实现的函数式接口内部有何不同?

4 计算机基础知识点

  • tcp/ip 流量控制和滑动窗口如何实现的,能具体说说嘛?
  • DNS 解析过程?
  • 三次握手和四次挥手?
  • 谈谈 TCP/IP 协议?
  • TCP 协议如何保证可靠传输?
  • 拥塞控制的算法?
  • 在浏览器中输入 url 地址发生了什么?
  • URI 和 URL 的区别是什么?
  • HTTP1.0、HTTP2.0、HTTP3.0 区别?
  • HTTP 和 HTTPS 区别?
  • 进程和线程区别?
  • 进程有那几种的状态?
  • 进程间有哪几种通信方式?
  • 线程间的同步方式?(互斥量、信号量、事件)
  • 进程间的调度算法?
  • 页面置换算法?

5 算法

算法无论在面试还是日常开发中都非常重要,可以很好的培养我们编程思维,刷题网站这里推荐 LeetCode,如果有时间起码要刷 300 道,而且要反复刷,刷题可以参考极客算法训练营,五毒神掌。

  • 第一遍
  • 5分钟:读题 + 思考
  • 如果没有思路,直接看解法,比较优劣
  • 背诵、默写好的解法
  • 第二遍
  • 写代码测试 -> 最优
  • 第三遍
  • 过一天,重复做题
  • 第四遍
  • 过一周,重复做题
  • 第五遍
  • 过一个星期,恢复性训练
  • 剑指Offer
  • 数组中重复的数字
  • 二维数组中的查找
  • 替换空格
  • 从尾到头打印链表 重建二叉树
  • 用两个栈实现队列
  • 斐波那契数列
  • 青蛙跳台阶问题
  • 旋转数组的最小数字
  • 矩阵中的路径
  • 机器人的运动范围
  • 剪绳子
  • 剪绳子 II
  • 二进制中1的个数
  • 数值的整数次方
  • 打印从1到最大的n位数
  • 删除链表的节点
  • 正则表达式匹配
  • 表示数值的字符串
  • 调整数组顺序使奇数位于偶数前面
  • 链表中倒数第k个节点
  • 反转链表
  • 合并两个排序的链表
  • 树的子结构
  • 二叉树的镜像
  • 对称的二叉树
  • 顺时针打印矩阵
  • 栈的压入、弹出序列
  • 从上到下打印二叉树
  • 从上到下打印二叉树 II
  • 从上到下打印二叉树 III
  • 二叉搜索树的后序遍历序列
  • 复杂链表的复制
  • 二叉搜索树与双向链表
  • 序列化二叉树
  • 字符串的排列
  • 数组中出现次数超过一半的数字
  • 最小的k个数
  • 数据流中的中位数
  • 连续子数组的最大和
  • 1~n 整数中 1 出现的次数
  • 数字序列中某一位的数字
  • 把数组排成最小的数
  • 把数字翻译成字符串
  • 礼物的最大价值
  • 最长不含重复字符的子字符串
  • 丑数
  • 第一个只出现一次的字符
  • 数组中的逆序对
  • 两个链表的第一个公共节点
  • 在排序数组中查找数字 I
  • 0~n-1中缺失的数字
  • 二叉搜索树的第k大节点
  • 二叉树的深度
  • 平衡二叉树
  • 数组中数字出现的次数
  • 数组中数字出现的次数 II
  • 和为s的两个数字
  • 和为s的连续正数序列
  • 翻转单词顺序
  • 左旋转字符串
  • 滑动窗口的最大值
  • 队列的最大值
  • n个骰子的点数
  • 扑克牌中的顺子
  • 圆圈中最后剩下的数字
  • 股票的最大利润
  • 求1+2+…+n
  • 不用加减乘除做加法
  • 构建乘积数组
  • 把字符串转换成整数
  • 二叉搜索树的最近公共祖先
  • 二叉树的最近公共祖先
  • HOT 100
  • 1 两数之和
  • 2 两数相加
  • 3 无重复字符的最长子串
  • 4 寻找两个正序数组的中位数
  • 5 最长回文子串
  • 10 正则表达式匹配
  • 11 盛最多水的容器
  • 15 三数之和
  • 17 电话号码的字母组合
  • 19 删除链表的倒数第 N 个结点
  • 20 有效的括号
  • 21 合并两个有序链表
  • 22 括号生成
  • 23 合并K个升序链表
  • 31 下一个排列
  • 32 最长有效括号
  • 33 搜索旋转排序数组
  • 34 在排序数组中查找元素的第一个和最后一个位置
  • 39 组合总和
  • 42 接雨水
  • 46 全排列
  • 48 旋转图像
  • 49 字母异位词分组
  • 53 最大子序和
  • 55 跳跃游戏
  • 56 合并区间
  • 62 不同路径
  • 64 最小路径和
  • 70 爬楼梯
  • 72 编辑距离
  • 75 颜色分类
  • 76 最小覆盖子串
  • 78 子集
  • 79 单词搜索
  • 84 柱状图中最大的矩形
  • 85 最大矩形
  • 94 二叉树的中序遍历
  • 96 不同的二叉搜索树
  • 98 验证二叉搜索树
  • 101 对称二叉树
  • 102 二叉树的层序遍历
  • 104 二叉树的最大深度
  • 105 从前序与中序遍历序列构造二叉树
  • 114 二叉树展开为链表
  • 121 买卖股票的最佳时机
  • 124 二叉树中的最大路径和
  • 128 最长连续序列
  • 136 只出现一次的数字
  • 139 单词拆分
  • 141 环形链表
  • 142 环形链表 II
  • 146 LRU 缓存机制
  • 148 排序链表
  • 152 乘积最大子数组
  • 155 最小栈
  • 160 相交链表
  • 169 多数元素
  • 198 打家劫舍
  • 200 岛屿数量
  • 206 反转链表
  • 207 课程表
  • 208 实现 Trie (前缀树)
  • 215 数组中的第K个最大元素
  • 221 最大正方形
  • 226 翻转二叉树
  • 234 回文链表
  • 236 二叉树的最近公共祖先
  • 238 除自身以外数组的乘积
  • 239 滑动窗口最大值
  • 240 搜索二维矩阵 II
  • 253 会议室 II
  • 279 完全平方数
  • 283 移动零
  • 287 寻找重复数
  • 297 二叉树的序列化与反序列化
  • 300 最长递增子序列
  • 301 删除无效的括号
  • 309 最佳买卖股票时机含冷冻期
  • 312 戳气球
  • 322 零钱兑换
  • 337 打家劫舍 III
  • 338 比特位计数
  • 347 前 K 个高频元素
  • 394 字符串解码
  • 399 除法求值
  • 406 根据身高重建队列
  • 416 分割等和子集
  • 437 路径总和 III
  • 438 找到字符串中所有字母异位词
  • 448 找到所有数组中消失的数字
  • 461 汉明距离
  • 494 目标和
  • 538 把二叉搜索树转换为累加树
  • 543 二叉树的直径
  • 560 和为K的子数组
  • 581 最短无序连续子数组
  • 617 合并二叉树
  • 621 任务调度器
  • 647 回文子串
  • 739 每日温度
  • 排序算法
  • 冒泡排序
  • 选择排序
  • 插入排序
  • 希尔排序
  • 归并排序
  • 快速排序
  • 堆排序
  • 计数排序
  • 桶排序
  • 基数排序
相关文章
|
14小时前
|
XML Android开发 数据格式
ConstraintLayout 2,Android高级开发面试
ConstraintLayout 2,Android高级开发面试
|
14小时前
|
测试技术 Android开发
Android开发规范,性能优化,Android面试2024
Android开发规范,性能优化,Android面试2024
|
1天前
|
存储 API Android开发
Android 11 中的存储机制更新,面试心得体会
Android 11 中的存储机制更新,面试心得体会
|
1天前
|
设计模式 缓存 前端开发
真的强!借助阿里技术博主分享的Android面试笔记,我拿到了字节跳动的offer
真的强!借助阿里技术博主分享的Android面试笔记,我拿到了字节跳动的offer
|
1天前
|
算法 架构师 网络协议
对标腾讯T9架构师的 Android 面试题新鲜出炉,算法真的太重要了
对标腾讯T9架构师的 Android 面试题新鲜出炉,算法真的太重要了
|
1天前
|
Web App开发 JavaScript Android开发
webRTC(十五),2024最新Android中级面试题目汇总解答
webRTC(十五),2024最新Android中级面试题目汇总解答
|
1天前
|
消息中间件 JSON Java
十五,java高级程序员面试宝典
十五,java高级程序员面试宝典
|
1天前
|
NoSQL 算法 Java
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
|
1天前
|
安全 前端开发 Java
Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day15
Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day15
|
1天前
|
Java
阅读《代码整洁之道》总结(1),java多线程面试
阅读《代码整洁之道》总结(1),java多线程面试