写点什么

Android 开发三年半 5 月份离职,面试 10 家公司后,这些面试官常问的面试题一定要了解

用户头像
Android架构
关注
发布于: 8 小时前

这部分面试官多数不会问很深,要么就给你一个效果让你讲原理。


  • 设计模式(单例,工厂,观察者。作用,使用场景)


一般说自己会的就 ok,不要只记得名字就一轮嘴说出来,不然有你好受。



延伸:Double Check 的写法被要求写出来。


  • String,Stringbuffer,Stringbuilder 区别

  • 开源框架,为什么使用,与别的有什么区别


这个问题基本必问。在自己简历上写什么框架,他就会问什么。


如:Volley,面试官会问我 Volley 的实现原理,与 okhttp 和 retrofit 的区别。


开源框架很多,我就选几个多数公司都会用的出来(框架都是针对业务和性能,所以不一定出名的框架就有人用)


网络请求:Volley,okhttp,retrofit


异步:RxJava,AsyncTask


图片处理:Picasso,Glide


消息传递:EventBus


以上框架请自行查找,太多了就不贴出来了。


  • RecyclerView


这个挺搞笑的。有另外一个同事也在找工作,面试官嫌他没用过 RecyclerView 直接 pass 掉。


  • 网页中输入 url,到渲染整个界面的整个过程,以及中间用了什么协议?

  • 具体介绍下 TCP/IP

  • TCP 的三次握手和四次挥手,为什么不是两次握手?为什么挥手多一次呢?

  • TCP 和 UDP 的区别?

  • HTTP 的几种请求方法具体介绍

  • HTTP 请求和响应报文的格式,以及常用状态码

  • 介绍对称加密和非对称加密

  • 数字签名的原理

  • Base64 算法是什么,是加密算法吗?

  • 为什么多线程同时访问(读写)同个变量,会有并发问题?

  • 说说原子性,可见性,有序性分别是什么意思?

  • 实际项目过程中,有用到多线程并发问题的例子吗?

  • 介绍几种启动模式。

  • 屏幕旋转时 Activity 的生命周期,如何防止 Activity 重建。

  • 线程的三种启动方式

  • 线程 run 和 start 的区别

  • 线程的几种状态,相互之间是如何转化的

  • String 是 java 中的基本数据类型吗?是可变的吗?是线程安全的吗?

  • 为什么要设计成不可变的呢?如果 String 是不可变的,那我们平时赋值是改的什么呢?

  • 浅谈一下 String, StringBuffer,StringBuilder 的区别?String 的两种创建方式,在 JVM 的存储方式相同吗?

  • 线程池是干嘛的,优点有哪些?

  • 线程池的构造方法每个参数是什么意思,执行任务的流程

  • Android 线程池主要分为哪几类,分别代表了什么?


主要有四类:FixedThreadPool、CachedThreadPool、SingleThreadExecutor、ScheduledTheadPool


  • 索引是什么,优缺点

  • 事务四大特性

  • 讲讲几个范式

  • Recycleview 和 listview 区别

  • Recyclevi


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


ew 有几级缓存,缓存过程?


  • 说说 RecyclerView 性能优化。

  • 说说双重校验锁,以及 volatile 的作用

  • synchronized 和 volatile 的区别

  • synchronized 修饰 static 方法和修饰普通方法有什么区别

  • 内存泄漏是什么,为什么会发生?

  • 内存泄漏发生的情况有哪些?


集合类泄漏


单例/静态变量造成的内存泄漏


匿名内部类/非静态内部类


资源未关闭造成的内存泄漏


  • 该怎么发现和解决内存泄漏?

  • 什么是类加载机制?


v 类加载器种类。


  • 什么是双亲委派机制,为什么这么设计?

  • webView 与 js 通信

  • 如何避免 WebView 内存泄露

  • webView 还有哪些可以优化的地方

  • Activity、View、Window 之间的关系。

  • 说说 Android 的事件分发机制完整流程,也就是从点击屏幕开始,事件会怎么传递。

  • 解决滑动冲突的办法。

  • Fragment 生命周期,当 hide,show,replace 时候生命周期变化

  • Activity 与 Fragment,Fragment 与 Fragment 之间怎么交互通信?

  • Fragment 遇到 viewpager 遇到过什么问题吗?

  • ARouter 的原理

  • ARouter 怎么实现页面拦截

  • 怎么应用到组件化中

  • 说说你对协程的理解

  • 说下协程具体的使用

  • 协程怎么取消

  • 具体有哪些启动优化方法?

  • 分析启动耗时的方法

  • Activity、View、Window 三者如何关联?

  • onCreate,onResume,onStart 里面,什么地方可以获得宽高

  • 为什么 view.post 可以获得宽高,有看过 view.post 的源码吗?

  • SharedPreferences 是如何保证线程安全的,其内部的实现用到了哪些锁

  • 是进程安全的吗?如果是不安全的话我们作为开发人员该怎么办?

  • SharedPreferences 操作有文件备份吗?是怎么完成备份的?

  • 为什么需要插件化

  • 插件化的原理

  • 市面上的一些插件化方案以及你的想法


OK,点到即止。

如何进阶?

1、确定好方向,梳理成长路线图


不用多说,相信大家都有一个共识:无论什么行业,最牛逼的人肯定是站在金字塔端的人。所以,想做一个牛逼的程序员,那么就要让自己站的更高,成为技术大牛并不是一朝一夕的事情,需要时间的沉淀和技术的积累。


关于这一点,在我当时确立好 Android 方向时,就已经开始梳理自己的成长路线了,包括技术要怎么系统地去学习,都列得非常详细。

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Android开发三年半5月份离职,面试10家公司后,这些面试官常问的面试题一定要了解