YCBlogs 面试问题大汇总:Java 与 Android 全栈面试题清单及备考指南
工试云启 考证服务中心整理

教程技术博客文档【免费下载链接】YCBlogs技术博客笔记大汇总包括Java基础线程并发数据结构Android技术博客等等常用设计模式常见的算法网络协议知识点部分flutter笔记还包括平时开发中遇到的bug汇总当然也在工作之余收集了大量的面试题长期更新维护并且修正持续完善……开源的文件是markdown格式的转载请注明出处谢谢项目地址https://gitcode.com/gh_mirrors/yc/YCBlogs点击查看免费下载导读本文基于开源仓库 YCBlogs 中 question/00.面试问题大汇总.md 梳理出的完整面试题库。它覆盖 Java 基础、并发、JVM、数据结构、网络协议以及 Android 四大组件、View、事件、Handler、IPC、性能优化、架构设计等全部核心考点既是求职者系统自测的题单也是面试官出题的参考框架。读完本文你将获得一份可逐项打勾的知识清单并能顺着仓库中对应的专题笔记快速定位到深度解析。1. 题库总览与使用方式YCBlogs 的面试题库以目录 → 章节 → 考点条目三层结构组织将海量面试题按技术领域归类每一条都是一道真实面试中可能被追问的问题。整体框架如下层级主题覆盖内容1Java 基础面试问题String、基本类型、泛型、面向对象、数据结构、IO、多线程、网络、类加载、反射、算法、异常、JVM2Android 基础面试问题四大组件、View、事件体系、消息机制、多线程、性能优化、动画、WebView、网络、Kotlin3Android 高级面试问题多进程、IPC/Binder、JNI/NDK、注解、插件化、流行库源码、热修复4Android 架构面试问题MVC/MVP/MVVM 架构、设计模式、组件化5非技术问题职业规划、项目经历、开源库选型、反问环节建议用法面试前按章节逐条自测能流畅讲出是什么 为什么 底层原理的条目划掉讲不清楚的条目跳转到本文第 7 节给出的仓库对应笔记精读。该汇总文件本身只有问题、没有答案答案全部散落在仓库各专题目录中——这正是本仓库笔记 题库配套设计的特点。2. Java 基础从语言特性到 JVM2.1 String、基本类型与泛型String 类是 Java 面试的第一高频考点题库主要从三个角度切入可变性与继承String 与 StringBuffer/StringBuilder 的区别String 类能否被继承、为什么。内存模型String s1 new String(abc)在内存创建了几个对象字符串池String Pool机制String 为什么设计成不可变的。实践细节回文判断HashMap 中为什么总用 String 做 key如何构建不可变类。仓库 java/01.基础部分/05.String深入理解.md 给出了完整解读String 是典型的 Immutable 类被声明为final class所有属性也都是final的直接量赋值创建的字符串进常量池new String()则直接在堆上创建对象且默认不放入池中String.intern()是一个 Native 方法用于将字符串缓存起来以备重复使用。不可变带来的好处包括可以缓存 hash 值所以适合做 HashMap 的 key、支持 String Pool、保证参数安全、天然线程安全。基本类型考点集中在int/char/long各占多少字节double强转int的精度损失原因int与Integer的装箱拆箱机制与Integer缓存池默认-128~127int强转byte溢出后的现象char能否存储中文。仓库 java/01.基础部分/03.基本数据详解介绍.md 与 question/java/01.Java基础问题.md 中有配套解释。关于装箱拆箱可结合源码理解装箱通过包装器的valueOf()实现拆箱通过xxxValue()实现new Integer(123)每次新建对象而Integer.valueOf(123)会命中缓存池返回同一对象引用。仓库中还记录了IntegerCache源码静态块默认构造-128~127的缓存数组并允许通过java.lang.Integer.IntegerCache.high属性调整上限。泛型考点泛型的应用场景、通配符上界? extends T与下界? super T均包含自身、泛型擦除及其影响、如何通过反射获取泛型真实参数类型、List?与ListObject的区别。仓库 question/java/01.Java基础问题.md 给出了泛型擦除的验证代码ArrayListInteger与ArrayListString的getClass()相等、字节码一致均为java.util.ArrayList同时给出通过反射向泛型集合注入其他类型数据的思路。2.2 面向对象多态、继承、内部类与 final多态实现多态的三个必要条件继承、重写、向上转型多态的实现原理——动态绑定通过方法表method table实现方法表记录类定义方法的指针子类重写父类方法后表项指向新的实现。重载与重写重载是编译期静态绑定类内多态重写是运行期动态绑定类间多态父类静态方法不能被重写只能被隐藏。内部类成员内部类、静态内部类、局部内部类、匿名内部类的区别与设计意图静态内部类为什么能保证单例类加载时机由 JVM 保证为什么内部类调用的外部变量必须是final。final / finally / finalize三者的区别finally不执行的四种特殊情况finally 中发生异常、System.exit()退出、线程死亡、关闭 CPU。值传递与引用传递基本类型传值、引用类型传引用传对象地址String、Integer 等不可变类型可理解为传值。仓库 java/02.类和对象/03.继承思想详细分析.md、java/02.类和对象/10.静态动态绑定机制.md 以及 question/java/02.Java面向对象问题.md 均有深入展开。其中关于内部类为什么要求外部变量是 final的标准答案是局部变量的生命周期很短方法结束后即被销毁而内部类对象可能仍在存活final保证该变量始终指向同一个对象Java 会把这份变量复制一份作为成员变量内置于内部类中从而解决生命周期不一致问题。2.3 数据结构List、Set、Map 与数组List 部分fail-fast 快速失败机制及触发场景ArrayList 与 Vector/LinkedList 的底层结构与扩容机制、加载因子Array 与 ArrayList 的选择。Set 部分HashSet 如何保证元素不可重复依赖hashCode()equals()HashSet 与 TreeSet 的区别TreeSet/TreeMap 排序时如何比较元素。Map 部分是数据结构考点的重心HashMap 的底层数据结构、put 方法流程、扩容实现、哈希冲突解决方式链地址法、table容量与loadFactor的关系为什么不直接使用hashCode()作为数组下标需要二次扰动降低冲突为什么 String、Integer 适合做 key不可变 hash 可缓存ConcurrentHashMap 与 Hashtable 的区别、分段锁/高效线程安全实现TreeMap、HashMap、LinkedHashMap 的区别为什么重写equals必须重写hashCode。仓库 java/04.数据结构/07.HashMap源码深度分析.md、java/04.数据结构/17.ConcurrentHashMap1.md、java/04.数据结构/18.ConcurrentHashMap2.md 提供了完整源码级分析。数组部分数组声明时的内存分配方式数组逆置、奇数在前偶数在后的调整、种花问题、旋转数组最小数字等手写算法题无序数组与有序数组的权衡。仓库 leetcode/01.数组 目录收录了这批算法题的题解。2.4 IO 流、多线程与线程池IO 流考点File 创建目录/判断文件是否存在的方法提高读写性能的高效流Buffered 系列文本操作、基本类型与 String 读写应选用的流直接缓冲区与非直接缓冲区深拷贝与浅拷贝java/03.IO流知识/10.Java深浅拷贝.md流关闭的正确位置finally 块与多流嵌套关闭方式。多线程考点start()与run()的区别、wait/sleep/join/yield的区别手写死锁程序与解决方案如何保证 T2 在 T1 后执行、T3 在 T2 后执行volatile 的可见性与有序性synchronized 类锁/方法锁/重入锁读写锁读时不能写、写时不能读如何防止反射和序列化攻击单例限流场景每秒钟最多 10 个线程调用第三方接口如何实现。仓库 java/06.线程知识 与 java/07.Java并发 两大目录完整覆盖这些主题例如 java/06.线程知识/11.生产者与消费者模型.md、java/07.Java并发/06.ReentrantLock锁.md、java/07.Java并发/11.volatile原理深度分析.md。线程池考点submit()与execute()的区别核心线程数如何确定线程池关闭的几种方式常见线程池newCached、newFixed 等及适用场景无界队列与有界队列coreSize、maxSize等构造参数含义。仓库 java/06.线程知识/14.线程池的基础介绍.md、java/06.线程知识/16.线程池深入思考.md 提供了系统讲解。2.5 网络编程HTTP/HTTPS 与 TCP/UDPHTTP 与 HTTPS两者区别、HTTPS 工作原理、证书合法性验证HTTP 无状态问题及解决方案Cookie/Session/TokenGET 与 POST 的区别、登录场景选型请求头常用字段HTTPS 中对称加密与非对称加密的配合RSA 等HTTPS 请求慢的优化思路。TCP/UDPTCP 三次握手与四次挥手流程、为什么不能两次握手TCP 可靠传输、拥塞控制、流量控制Socket 概念、TCP_NODELAY选项。仓库 net/01.请求网络过程梳理.md、net/06.TCP详细基础介绍.md、net/11.Https详细流程分析.md 与 net/26.Cookie,Session,Token.md 均提供了详细梳理。2.6 类加载、反射、异常与 JVM类加载考点类加载器的种类与父子关系、双亲委派机制的含义与好处、如何自定义类加载器、类初始化时机。仓库 java/08.类的加载/05.双亲委派机制详读.md 给出了ClassLoader.loadClass()源码解读先检查类是否已加载未加载则优先委托父加载器父加载器加载失败后才调用findClass()自行加载这样保证java.lang.Object等核心类始终由启动类加载器加载避免用户伪造同名类造成混乱。反射考点反射机制的功能与优缺点、反射性能损耗的成因与优化、如何通过反射创建对象、获取/设置私有字段、反射获取内部类与匿名内部类。仓库 java/09.反射知识 目录系统覆盖。异常考点Error 与 Exception 的区别、受检查异常与运行时异常、try中return时finally的执行时机、handle or declare原则、创建自定义异常类的注意点。仓库 java/05.Java异常 目录有专题解析。JVM考点内存区域栈、堆、方法区、本地方法区与堆内存参数内存分配机制与对象存活转移垃圾收集算法引用计数、可达性分析、标记-清除、复制、标记-整理与收集器选型内存碎片问题四大引用与 GC 回收策略乐观锁与 ABA 问题活锁与死锁的区别。仓库 java/08.类的加载 与 question/java/06.Java虚拟机问题.md 提供了完整素材。算法考点集中在 leetcode 目录冒泡/快排/堆排序、有序数组去重、TopK、二叉树遍历、KMP、背包问题等均配有实现代码。3. Android 基础四大组件与核心机制3.1 基础组件Activity、Service、BroadcastReceiver、ContentProvider、FragmentActivity考点生命周期与onStart/onResume/onPause/onStop的区别异常生命周期与onSaveInstanceState()启动模式standard/singleTop/singleTask/singleInstance及进出栈行为onNewIntent()调用时机从非 Activity 启动 Activity 为何要添加 FLAGActivityThread 的作用。仓库 android/01.基础组件 与 android/01.基础组件/03.Activity启动流程.md、android/01.基础组件/01.ActivityThread分析.md 提供了源码级支撑。Service考点Activity 与 Service 通信方式、Service 生命周期与启动方式区别、先 start 再 bind 如何关闭、前台服务与保活方案、bindService 是否为异步过程。仓库 android/01.基础组件/06.Service基础介绍.md、android/01.基础组件/07.Service启动流程.md 可参考。BroadcastReceiver考点注册方式及区别、发送与接收原理Binder 如何运作、广播数据传输限制及原因、BroadcastReceiver 与 LocalBroadcastReceiver 的区别、广播中做网络请求的 ANR 时间限制。仓库 android/01.基础组件/08.BroadCastReceiver.md 有详解。ContentProvider考点为什么设计 ContentProvider、如何实现数据共享、进程共享与线程安全问题、权限管理读写分离、精确到表级、URL 控制。可参考 android/01.基础组件/10.ContentProvider分析.md。Fragment考点getActivity()为 null 的原因、Fragment 视图重叠的产生与解决、懒加载实现setUserVisibleHint()调用时机、replace 与 add 的区别、三种 FragmentManager 的区别。仓库 android/01.基础组件/11.Fragment基础使用.md 与 android/08.复杂控件/03.ViewPager懒加载.md 可配合阅读。3.2 View 工作原理与自定义 View绘制流程View 的绘制三步骤 measure → layout → drawrequestLayout()、invalidate()、postInvalidate()的区别与联系getWidth()与getMeasuredWidth()的区别MeasureSpec 的作用。ViewRoot 与 DecorViewView 如何绘制到屏幕上DecorView 本质是 FrameLayout包含标题栏与内容栏id 为 contentViewRootImpl 通过setView()与 DecorView 建立关联三大流程均由 ViewRoot 驱动。卡顿原因布局过深无法在 16ms 内完成渲染、动画过多、过度绘制、UI 线程耗时操作、频繁 GC优化策略是减少 onDraw 中的内存分配、减少 invalidate 调用次数、保持 View 层级扁平化。仓库 android/04.View原理/08.View工作原理.md 完整讲解了测量、布局、绘制三阶段以及 16ms VSYNC 与 60fps 渲染机制android/04.View原理/10.获取View宽高属性.md 解释了在 onCreate 中获取宽高为 0 的原因与解决方式onWindowFocusChanged、view.post、手动measure(0,0)等。3.3 事件体系事件传递流程与dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent的作用onTouch与onTouchEvent的区别及执行顺序点击事件被拦截后如何传到下层 View双指缩放拖动大图的实现思路RecyclerView 滑动卡顿分析与 TraceView 使用。仓库 android/05.事件分发 目录提供了从基础到源码分析的全套内容如 android/05.事件分发/03.View事件机制源码分析.md。3.4 Handler 消息机制与 ThreadLocalHandler 消息机制的四要素Message、MessageQueue、Handler、Looper以及消息发送 → 入队 → 轮询 → 分发的完整流程为什么一个线程只有一个 Looper 和 MessageQueue却可以有多个 Handler子线程能否直接 new Handler、为什么子线程默认没有 Looper需先Looper.prepare()Looper.loop()为什么不会阻塞主线程IdleHandler 闲时机制Handler 内存泄漏的原因与解决延时消息移除 静态内部类 弱引用ThreadLocal 原理与实现。仓库 android/06.消息机制 目录覆盖全部考点其中 android/06.消息机制/06.Looper深度解析.md 展示了ActivityThread.main()中Looper.prepareMainLooper()与Looper.loop()的调用——主线程正是靠消息循环死循环保证永不退出真正的卡顿来自回调方法执行过久而非 loop 本身子线程使用 Handler 的标准写法是Looper.prepare()→ new Handler →Looper.loop()→ 适当时候quit()防止内存泄漏。3.5 多线程、异步机制与线程池Android 中为何要使用多线程、线程有哪几种AsyncTask 机制、如何取消、线程池类型、屏幕旋转时的表现与内存泄漏静态同步锁与普通同步锁的区别线程池在 Android 中的使用与为什么开启大量线程会损耗性能。仓库 android/09.多线程 目录有 AsyncTask、HandlerThread、IntentService、线程池 Executors 的完整笔记。3.6 性能优化、动画与 WebView性能优化考点SharedPreferences 性能优化与进程同步Bitmap 使用注意、recycle()是否立即回收、如何计算 Bitmap 内存占用、如何加载高清大图避免 OOM布局性能排序与 ConstraintLayout 好处常见内存泄漏场景与解决方案启动页白屏/黑屏的原因与解决图片加载框架的三级缓存与 LRUCache 原理OOM 场景与能否 try-catch应用保活原理。仓库 android/15.经典总结/19.Android编码规范.md、android/13.数据处理/03.LruCache源码分析.md、android/13.数据处理/02.DiskLruCache实践.md 可配合查阅。动画考点帧动画、补间动画、属性动画的使用场景与实现原理setX与setTranslationX的区别差值器与估值器的作用属性动画为何能改变 View 属性。仓库 android/16.动画实践 目录完整覆盖。WebView考点WebView 加载速度优化、Java 与 JS 互调及优化、WebView 内存泄漏、内核演进4.4 后使用 Chrome。仓库 android/17.WebView 目录提供了大量专题笔记。3.7 网络、Kotlin 与其他数据缓存与网络请求统一管理、OkHttp 缓存处理数据存储SharedPreferences 是否线程安全、高清大图加载、内存缓存与磁盘缓存实现Intent 传递数据大小限制与解决、Intent 与 Bundle 区别APK 打包流程与安装流程、如何减小体积消息推送原理与心跳连接手写 DCL 单例并解释设计原因SurfaceView 与 View 的本质区别四种引用强/软/弱/虚的区别与使用场景。仓库 android/12.网络请求、android/13.数据处理、kotlin 目录提供了相应素材。4. Android 高级多进程、IPC、Binder 与插件化4.1 多进程模式与 IPC常见的跨进程通信方式、AIDL 的实现原理多进程带来的影响静态变量与单例失效、线程同步机制失效、SharedPreferences 可靠性下降、Application 多次创建。4.2 Binder 机制题库对 Binder 的追问非常细致包括什么是 Binder类 / IPC 方式 / Framework 桥梁 / 应用层媒介四个视角为什么不用传统 IPC性能一次拷贝 vs 两次拷贝安全UID/PID 身份校验、私有通道Binder 线程管理一个进程 Binder 线程默认最大 16 个工作流程Client 获取代理对象 → 调用代理 → Binder 驱动 → Server 处理 → 返回结果四大角色Client、Server、ServiceManager、Binder 驱动ServiceManager 何时注册、为何句柄为 0AIDL 关键类IInterface、Stub、Proxy、asInterface()、asBinder()、onTransact()、transact()多业务模块共用 AIDL 时的 Binder 连接池方案。仓库 android/02.IPC机制/15.Binder通信机制分析.md、android/02.IPC机制/02.Aidl进程间通信详细介绍.md、question/android/02.Android之IPC机制问题.md 给出了完整回答包括 ServiceManager 作为守护进程的binder_open()、binder_become_context_manager()、binder_loop()等关键流程以及句柄为 0 的 BpBinder 即 ServiceManager 远程接口的实现细节。4.3 JNI、NDK 与注解如何加载 NDK 库、如何在 JNI 中注册 native 函数静态注册/动态注册JNI 如何调用 Java 层代码、Java 如何调用 C/C注解如何获取、反射为何耗性能、Retrofit 如何利用动态代理与动态注解ButterKnife 在 bind() 时如何用注解实现 findViewById。仓库 android/15.注解详解 目录从注解基础到 APT、注解处理器、点击事件案例、问题解决方案全链路覆盖。4.4 插件化与热修复热修复原理、插件化如何加载插件插件化与代码混淆的冲突、第三方加固对热修复的影响流行库源码分析Retrofit 动态代理、Glide 三级缓存、OkHttp 的优势、RxJava 原理、RecyclerView 复用机制、Gson 的 JavaBean 规则。仓库 android/11.流行框架、android/12.网络请求 目录提供了 Retrofit、Glide、EventBus、OkHttp、Rx 等框架的源码分析笔记。5. Android 架构MVC、MVP、MVVM 与组件化题库将架构问题定位为大神分水岭级别的考察点MVC、MVP、MVVM 的原理与区别并要求绘制架构图设计模式单例模式手写DCL、适配器/装饰者/外观模式的异同与使用场景组件化开发作用、好处、如何重构代码。仓库 android/14.Jetpack/04.ViewModel学习.md 详细讨论了 MVVM 的思想来源数据驱动视图及其与 DataBinding 的关系design 目录则系统覆盖了设计模式的讲解其中 design/03.创建型模式/01.3单例模式不友好.md 直接呼应了题库中手写单例 简述使用场景和利弊的追问。6. 非技术问题与面试策略题库第 5 部分整理了容易被忽视但同样决定面试结果的问题反问环节你还有什么想要了解的——这是必须准备的环节技术信息获取渠道与自我提升方式研究深入的领域、最擅长的技术点、代码量自评项目中开源库的使用与安全稳定性把控项目中遇到的棘手问题技术、交际、沟通其他公司应聘情况与 offer 状况面试官对自身知识短板的建议职业生涯中最有成就感的一两件事及启示。结合 question/android/00.精品技术问题.md 末尾的面试须知可形成一套实用的备考节奏Java 基础 3~5 题、Android 基础 8~10 题、进阶问题 2~5 题总时长 20~30 分钟——这意味着回答要先说结论、再讲原理、辅以案例避免在一个问题上过度展开。7. 按图索骥题库与仓库笔记的映射汇总文件本身只列问题不给答案答案深度取决于仓库中的专题笔记。将高频考点与笔记路径对齐后备考效率会大幅提升考点仓库笔记String / 基本类型 / 泛型java/01.基础部分、question/java/01.Java基础问题.md面向对象 / 多态 / 内部类java/02.类和对象、question/java/02.Java面向对象问题.mdHashMap / ConcurrentHashMapjava/04.数据结构/07.HashMap源码深度分析.md、java/04.数据结构/17.ConcurrentHashMap1.md线程 / 并发 / 线程池java/06.线程知识、java/07.Java并发类加载 / JVMjava/08.类的加载、question/java/06.Java虚拟机问题.mdHTTP / HTTPS / TCPnet 目录四大组件android/01.基础组件View 原理android/04.View原理、question/android/03.Android之View原理问题.md事件分发android/05.事件分发Handler / Looper / ThreadLocalandroid/06.消息机制、question/android/06.Android之消息机制问题.md多线程 / AsyncTaskandroid/09.多线程性能优化 / OOMandroid/13.数据处理、android/15.经典总结动画android/16.动画实践WebViewandroid/17.WebViewIPC / Binder / AIDLandroid/02.IPC机制、question/android/02.Android之IPC机制问题.md注解 / APTandroid/15.注解详解流行框架源码android/11.流行框架、android/12.网络请求架构 / 设计模式android/14.Jetpack、design8. 总结把题库变成知识地图YCBlogs 的这份面试大汇总的价值在于广度 结构化五大板块、数十个章节、数百道真题几乎覆盖了 Java 与 Android 面试的全部高频领域。备考时建议把它当作知识地图而非背诵清单——每一道题背后都对应仓库中一篇或多篇深度笔记只有把问题与笔记对照阅读才能真正从背答案升级为讲原理。对于面试官而言这份题库同样是一份高质量的出题参考框架按基础 → 原理 → 架构三层递进的设计与 question/android/00.精品技术问题.md 中大神分水岭问题的分层思路一脉相承。赞分享教程技术博客文档【免费下载链接】YCBlogs技术博客笔记大汇总包括Java基础线程并发数据结构Android技术博客等等常用设计模式常见的算法网络协议知识点部分flutter笔记还包括平时开发中遇到的bug汇总当然也在工作之余收集了大量的面试题长期更新维护并且修正持续完善……开源的文件是markdown格式的转载请注明出处谢谢项目地址https://gitcode.com/gh_mirrors/yc/YCBlogs点击查看免费下载相关推荐YCBlogs Java 问题大汇总实战解析100 高频面试题知识点清单与仓库源码笔记对照YCBlogs Java 问题大汇总实战解析100 高频面试题知识点清单与仓库源码笔记对照 本篇技术指南以 YCBlogs 仓库中的 blog/12.Jav教程技术博客文档终极指南两款强大工具助你高效管理reMarkable文件系统终极指南两款强大工具助你高效管理reMarkable文件系统 reMarkable平板电脑以其出色的书写体验和纸质般的显示效果赢得了众多用户的喜爱。然而对于文档开发工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考