2021年本四小厂面试总结

菜鸡小厂工程师,还是徘徊在一万上下,希望今年能拿到20k以上

·······················································································································
2021.9.4更新

五月
汇丰:
1、kotlin 的 apply let 有什么区别 返回的是什么参数或者句子
kotlin作用域函数 run,with,T.run,T.let,T.also,和T.apply
2、kotlin 的 协程用没用过
3、用过哪些布局 约束布局跟相对布局有什么区别
4、constraint barrier的及其属性 ConstraintLayout 中 Barrier Guideline 的使用
5、recyclerview 的认识你懂吗
6.用过哪些第三方库 glide butterknife okhttp retrofit
7.用过dagger 吗 原理呢? Dagger 2 使用及原理
8、说下你用过的架构 mvp mvc mvvm
9、 git fetch 和 git pull? git fetch 和 git pull
10、git merge 和git rebase? cherry-pick? git cherry-pick 教程
11、怎么做测试的??单元测试 Android单元测试 - 如何开始?
12 、算法题 寻找最长不含重复的子字符串 (Find the longest non-repeated substring in a string)

七月
中*达
问题总结
1、AOP技术 怎么用的?
2、你们app一共有多少个模块?
3、你做了哪些高性能的优化,你介绍一下
4、这个优化布局层级,app⻚⾯展示速度快30%。然后这个应用场景实际上数据融合处理,交互处理。这一块的话可以计算吗?
5、对地图这一块有没有了解?地图有用过吗?
6、mvp这个架构是你来搭的吗
7、哪一个公司或者是哪一个项目上面,自己觉得有自豪感?

马**技
1、 能说一下Activity的通信方式有哪些?
2、 Activity的4种启动模式
3、 你来说一下 application和activity的上下文,这两两个上下文有什么区别?
4、 本地广播与全局广播这两者有什么区别?
5、 viewgroup的事件分发机制
6、Application的上下文可不可以弹出dialog?
7、 绘制原理
8、 onLayout onMeasure onDraw起什么作用?
8、了解的第三方的库源码
9、mvc,mvp,mvvm这三种架构的优缺点
10. 使用过数据库 SQLite?
11、多进程通信有哪些?
12、 App应用的优化有哪些方面??

微*
自我介绍
1、你干一年嘛你怎么就想到离职?
2、安卓开发这一块,你觉得有哪些优势?就是你觉得你自己可能比别人厉害的有哪些地方?技术这一块,或者你或者你你可以讲一讲,你觉得你自己技术哪一块比较比较比较深入或者那个都可以讲
3、怎么解释那个注释?注释的工作原理?
4、做一个下拉刷新一样,嵌套那个RecyclerView怎么做,就是或者你有没有什么思路什么的可以讲一下。
5、mvvm mvp mvc 优势劣势?
6、客户端的一些性能优化?
7、handler了解多少?

中**科
1、 Glide 的三级缓存
2、 你在实际当中使用Glide 的三级缓存在你们那个内部OA项目里应用过场景是什么样子的?
3、 自定义View? 画笔使用?测量这个 View的大小?
4、 对handler这了解多少?在子线程怎么更新UI?
5、 a数组,然后我把这个数组复制到了b数组,上b数组现在也是12345,然后我循环把这12345、b数组的12345变成了6789 10,那现在a数组里面的值是多少?
6、 网络框架??Retrofit 要拦截添加一个请求头怎么办?
7、get请求和POST请求有什么区别

医**能
1、目前你在项目的职责
2、 项目的架构师mvvm??谁选型的?为什么选这个??
3、 在之前公司的时候,有让你印象比较深的问题吗 ??怎么解决的?
4、 Recyclerview 缓存原理?
5、有对一个页面对这个性能和内存泄露的进行一个优化,可以介绍一下?现在优化的哪一些性能是怎么样怎么优化的??
6、写过gradle优化吗?类似gradle的那个打包优化
7、这个 Activity的启动方式,然后还有Activity的生命周期??
8、fragment 和 Activity 的生命周期有什么区别?
9、websocket 有用过吗??即时通讯库有用过吗?
10、广播和eventBus的区别
11、String和 Stringbuffer他有什么区别
12、 Retrofit的原理?
13、 View事件分发? Dialog会不会遵循事件分发流程? viewRootImpl 去驱动的事件分发
14 、handler原理? 为什么需要looper?
15、 介绍一下泛型??
16、介绍下注解怎么工作的 ?

千*
1、 爱口袋APP里面做了一些优化 说一下就是你做的优化是什么东西?三大优化 内存网络性能优化
2、 什么是AOP?
3、 界面卡顿,你有什么方法可以监测界面的卡顿? 线上线下
4、 常用的leakcanary,了解过他是怎么监测内存泄漏吗
5、 从inflate 加载xml布局 ,到最后显示出来它经历了一个什么样的流程?
6.ViewGroup的根节点是 ?? viewrootimpl ,他的作用是?
7 mvvm 为什么用livedata ? viewmodel为什么跟Activity 绑定生命周期?
8、kotlin 有什么特点和 java 的区别 优势? 扩展函数是怎么实现,你你有了解过??看过源码吗?

广*汽车
1、你能简单说一下某某APP有什么功能?就能提供用户哪些价值?
2、AOP切面技术?
3、注释是什么来的?怎么定义一个注解?
4、图片怎么样压缩?
5、Java的一些设计模式 ???优点缺点??
6、eventbus原理?
7、你去保证这个图片下载,就是比如说我退出了退出,这个对就是你去进一步下载这个图片的时候,你可能要进行哪些操作,要要怎么去能够去保证这个资源的有效利用利用起来。
8、自定义view?重写它什么方法?
9、service能弹toast吗?
10、怎么更新一个视图,用什么方法?
11、一个线程有多少个handler?
12、looper是死循环 为什么不会阻塞主线程? handler底层是什么来的
13、线程休眠方法 ?两种 sleep wait 有啥区别?
14、安卓你有了解过怎么去检查一个应用的性能占用是不是是否正常,然后有没有一些了解到怎么用一些工具去做一些性能优化?
15、webview 涉及过吗???会产生什么问题???
16、 两种序列化 Serializable Parcelable 的区别 为什么选用???

广信
1、实现了某个app什么功能???用了什么技术??有没有重点负责哪个模块??
2、 Glide有做什么定制化的一些开发,还有一些什么样的对它的一些做什么改造之类的吗?
3、你对这图片用缓存处理,做缓存这个唯一的key,你是用URL还是用其他什么的来去做它的唯一的值?
假设这个 Url它是会变的那会怎么办?
4、Retrofit 相对于裸okhttp的优点?
5、数据库你们是操作数据库还是通过orm框架? 数据库可以多线程访问吗?多线程写入,可以吗?哪怕这个两个表是独立的,可以多线程写入吗?这两个表它本身没有相关性 ,可以多线程写入吗?
6、Rxjava 订阅 调度模型是怎么样的??他是怎么控制这个在哪个线程里面去做这些任务或者是去订阅的?
7、有个列表,这个列表它很长,但是我们不考虑分页不考虑分页,就是不需要分解,反正就返回一个列表数据给你,这个数据可能有这个上千条甚至几千条数据,然后的话现在一个要求就是说不要用第三方的任何的这个图像加载框架,就只能用按照自己本身自带的那些,就你不能用什么glide的这些去做,你就自己通过image view?通过一个 recyclerview也好,listview也好,把这个数据展现出来,但是用户当前滚动的看到地方要尽可能的优先加载出来。另外一个要做那个两级的缓存,包括内存的缓存跟那个磁盘的缓存,那这个流程你要说一下大概是怎样的一个实现的一个过程?
另一问题:框架的图片那个缓存这一块你大概是怎么设计的?就缓存这一块,主要就是你的那个一个匹配的策略,另外一个就是有一些淘汰策略,所以存在一起。这个如何防止这个oom的这个发生了,除了那个控制这个数量以外??
设计方法?
8、有用过flutter这些混合开发的语言吗?

欢*集团初面
1、Java有4种引用?
2、软引用 弱引用例子
3、大图展示?
4、Glide 缓存算法
5、我想知道就是什么情况下会导致这些没有响应?? 原因是耗时操作
6、质量压缩??通过算法扣掉(同化)了 图片中的一些某个点附近相近的像素,达到降低质量 减少 文件大小的目的。
7、 array和list 数据结构 这两种数据结构 好处坏处?
8、优化布局是?过去怎么优化的??
9、协程 会不会???流程是怎么样的
10、有了有了解过,就是比如说视频推流或者音频推流就是推流拉流这一块,或者音视频产值这一块吗?

欢*集团二面
1、内存优化了什么?
2、相片为什么没做成放cdn存放
3、优化布局层次这个做了哪些东西?
4、让你自己来做的话,你怎么会就假设我们自己的设计handler的话,你会怎么来保证那个消息有序。 怎么去比较不同时间的信息?
5、堆排序 了解过吗?
6、我针对整个item双击的时候,我要出一个双击的动向,然后它的前提就是说仅当我双击的时候出现,这个自定义view怎么实现
7、 class加载模型
8、怎么去加载自己写的string类?双亲委派模型

欢*集团三面 (竟然挂了)
1、最近做什么项目???有什么用??
2、识别引擎??
3、你这里说的针对那个不同安卓SDK版本做权限设备具体是怎么做的?
4、那我就问一下,首先你这里说的权限是不是有针对哪些权限?
5、那你那个下面说的那个 AOP 对页面点击和显示进行数据采集是针对什么?
6、这样统计,你怎么样做是如何做到能够具有通用性。?
7、现在是为什么考虑换工作?

深圳加密行业广州分部
1、马甲包是什么意思??? 不同布局不会影响马甲吗?这种不会被商店刷出吗? 不同马甲因为有不同ui,架构上怎么做的 ?
2、理论上不同包名 跟支付和推送当中是不同的 怎么样配置?
3、 实现不同安卓SDK版本权限? 怎么实现的??就用的是三方的框架。
4、我看你这里是优化的那个 APP相关的时候,可以把新页面展示的速度提升那这个百分之快30%,这应该是怎么得出来的情况。
5、现在大家好像是他这个的话也有用到一些摄像头相关的一些功能,怎么去分辨第几个摄像头呢? 不同版本的摄像api怎么兼容?摄像api不兼容怎么办?
6、学过鸿蒙api吗?
7、怎么防止重打包? 防止反编译? 提示:反编译装到实体机的时候及时会崩溃的方式
8、新的这种aab、Google新的这种分包的模式跟目的之类的??
9、有跟进过海外的应用商店发布包的经验?
10 、proguard? 和 R8??? 的了解吗??

中XX科 初面 (团队人数还是两三个 )
1、详细讲讲自己做的APP某个模块 怎么做的?
2、技术框架是 MVC 还是MVVM?
3、架构是 模块化吗?
4、数据回来之后是在哪里刷新这个 Ui? viewmodel 嘛-> livedata 有直接在xml布局更新吗->问的databinding
本来就不喜欢databinding 爆红 R文件不见
5、协程怎么样处理异步线程?
6、Retrofit 域名注解 ? Retrofit 拦截器 (作用:打印日志 还会有什么?)
7、算法加密这个在工作中有什么用场景吗? 当时回答客户端保留私钥 ,,真蠢
服务器保留私钥,发布加密后的数据;android客户端保留公钥,可以解密服务器传过来的数据(这样,即使别人反编译了你的App,得到了公钥也没有关系)。其实HTTPS也是这个原理(准确的说HTTPS验证身份的时候是非对称加密,正常通讯时用的是对称加密:非对称加密太耗费资源)。

8、https跟HTTP的一个主要区别 ?
9、aop切面技术 ???有aspectx 有生写ASM 方法
10、 kotlin object方法和class方法 跟java方法有什么不同?
11、 kotlin 扩展函数?
12、android:taskAffinity 什么意思?
taskaffinity 可以单独对一个 activity 使用,代表该 activity 所想归属的 task;
也能对application 使用,代表该 application 内声明的所有 activity 都归属于这个task。
如果 activity 组件没有声明 taskAffinity 的话,该 activity 的 taskAffinity 属性也是有默认值的。如果 application 指定了 taskAffinity 值,默认值就是 application 指定的 taskAffinity 值;如果 application 未指定的话,默认值就是 manifest 中声明的包名(package 对应的字符串)。
taskAffinity生效
taskAffinity 单独使用并不会生效。
要想其生效,需要配合其他属性使用,或者配合 Intent.FLAG_ACTIVITY_NEW_TASK,或者配合
allowTaskReparenting 。

13、数据结构 栈、链表、队列啊 了解? 开发中你用到一些什么数据结构吗?
14、线程池的作用
15、定时器 ?1、countdowntimer 2、RXjava定时

欢X第二个面试 初面 团队人数还是一百多
1、写过脚本吗?是放进app运行还是分析你这个APP的用的?
2、删除Git远程仓库项目的误提交的内容,怎么操作?
3、AOP 切面技术具体是怎么实现?
ClassReader读字节码 ,
ClassWriter写入字节码操作,
ClassVisitor访问字节码,
ClassWriter.visit 访问类 ,
ClassWriter.visitMethod 访问类中的方法, //Visits a method of the class.
methodVisitor.visitCode 开始访问方法的字节码, //Starts the visit of the method’s code
methodVisitor.visitVarInsn 访问局部变量指令
methodVisitor.visitFieldInsn 访问字段指令
methodVisitor.visitInsn 访问零操作数指令
methodVisitor.visitMaxs 访问方法的最大堆栈大小和最大局部变量数。
methodVisitor.visitEnd 访问方法的结尾

4、问项目 蹭网检测的UDP数据报 等待时间,监听数据
5、按简历问 怎么去优化页面层次 ,页面渲染快一点?
6、有没有接触新技术? 只说了 协程的原理和抛错误处理机制。
协程就就不能并行吗? 可以的 用async开头协程await挂起当前协程, 异步获取数据.defer
7、开发项目中使用的一些技术或者是方案,你自己有没有总结过?
8、你有没有自己写过网络库啊或者写过数据库库啊存储啊类似一些东西?
9、Activity onSaveInstanceState 是什么来的?它生命周期是存在于哪个吗?是存在于比如说存在于进程级别,呢还是说页面堆栈级别?
10、fragment间传递一万条大量信息?怎么传?1、说共享viewmodel, 2、eventbus

中XX能 初面?
1、listview 和 Recyclerview 区别?
2、fragment 传递数据有几种方法
1、与Activity接口
2、路由进行数据交换
3、eventbus
4.共享viewmodel
3、service的生命周期你能说一下吗
4、内存泄漏
5、消息处理机制
6、 你现在用的是哪哪种网络框架
7、拍一张照片,然后传给SDK嘛对。啊你你拍的那张照片的话要做质量转换吗? 字数多少,TExtView控件也要调整下吧
8、 你呃那个有写对那个音视频和图片处理比较有兴趣,然后你这项目里面有处理过视频吗?上传视频啊或者说直播啊之类的项目没有用到吗

X流 20人小公司 (大小周)
1、 java内存回收机制
2、回收算法
3、引用有几种引用
4、线程工作流程 ? 线程池工作流程?
5、你对APP做的一些性能方向的优化的话,是嗯有哪些方面的优化?

X流二面
1、glide 的优点缺点?
2、内存抖动的情况?为什么会发生?
3、内存优化?
4、首页启动速度优化??
5、jvm 垃圾回收机制

中XX达
1、性能优化? 三大优化 性能优化 内存优化 网络优化
2、那个 ondestroyed 有时候它并不会立刻调用,但是其实我们这个界面其实已经切到后台了,这时候其实就是说我们是没必要去更新这个 view了的,然后也就是其实很多时候这个看到的这些东西是没必要再去做了的,嗯这时候在就是说他可能说这个东西稍微调用不及时,然后有没有什么办法解决这方面的问题?
调用 finish() 之后,肯定是要先 pause() 当前 Activity,没毛病。接着看 startPausingLocked() 方法。
所以 onStop/onDestroy 的调用时间是不确定的,甚至像文章开头的例子中,整整过了 10s 才回调。那么,到底是由谁来驱动 onStop/onDestroy 的执行呢?我们来看看下一个 Activity 的 onResume() 过程。
直接看 ActivityThread.handleResumeActivity() 方法,相信大家对生命周期的调用流程也很熟悉了。
谁让 onStop/onDestroy 延迟了 10s ?
对,不会被回调。可实际情况是这样吗?
并不是,明明是过了 10s 被回调。这就说明了即使主线程迟迟没有机会执行 Idler,系统仍然提供了兜底机制,防止已经不需要的 Activity 长时间无法被回收,从而造成内存泄漏等问题。从实际现象就可以猜测到,这个兜底机制就是 onResume() 之后 10s 主动去进行释放操作。
再回到之前显示待跳转 Activity 的 ActivityStackSuperVisor.resumeFocusedStackTopActivityLocked() 方法。我这里就不带着大家追进去了,直接给出调用链。
ASS.resumeFocusedStackTopActivityLocked()
-> ActivityStack.resumeTopActivityUncheckedLocked()
-> ActivityStack.resumeTopActivityInnerLocked()
-> ActivityRecord.completeResumeLocked()
-> ASS.scheduleIdleTimeoutLocked()

ActivityStackSuperVisor.java

void scheduleIdleTimeoutLocked(ActivityRecord next) {
Message msg = mHandler.obtainMessage(IDLE_TIMEOUT_MSG, next);
mHandler.sendMessageDelayed(msg, IDLE_TIMEOUT);
}
IDLE_TIMEOUT 的值是 10,这里延迟 10s 发送了一个消息。这个消息是在 ActivityStackSupervisorHandler 中处理的。

private final class ActivityStackSupervisorHandler extends Handler {

case IDLE_TIMEOUT_MSG: {
activityIdleInternal((ActivityRecord) msg.obj, true /* processPausingActivities */);
} break;

}

void activityIdleInternal(ActivityRecord r, boolean processPausingActivities) {
synchronized (mService) {
activityIdleInternalLocked(r != null ? r.appToken : null, true /* fromTimeout */,
processPausingActivities, null);
}
}
忘记 activityIdleInternalLocked() 方法的话可以 ctrl+F 向上搜索一下。如果 10s 内主线程执行了 Idler 的话,就会移除这个消息。

到这里,所有的问题就全部理清了。

五、最后
Activity 的 onStop/onDestroy 是依赖 IdleHandler 来回调的,正常情况下当主线程空闲时会调用。但是由于某些特殊场景下的问题,导致主线程迟迟无法空闲,onStop/onDestroy 也会迟迟得不到调用。但这并不意味着 Activity 永远得不到回收,系统提供了一个兜底机制,当 onResume() 回调 10s 之后,如果仍然没有得到调用,会主动触发。

虽然有兜底机制,但无论如何这肯定不是我们想看到的。如果我们项目中的 onStop/onDestroy 延迟了 10s 调用,该如何排查问题呢?可以利用 Looper.getMainLooper().setMessageLogging() 方法,打印出主线程消息队列中的消息。每处理一条消息,都会打印如下内容:

logging.println(">>>>> Dispatching to " + msg.target + " " + msg.callback + “: " + msg.what);
logging.println(”<<<<< Finished to " + msg.target + " " + msg.callback);
另外,由于 onStop/onDestroy 调用时机的不确定性,在做资源释放等操作的时候,一定要考虑好,以避免产生资源没有及时释放的情况。

3、内存泄漏 原因?
4、Java虚拟机这块的内存管理 ?
5、每一个线程是不是他有没有他自己会独享的一些内存方面的东西?
6、常见的几种引用类型 ?

瑞X 初面
1、Activity 线程通信几种方式
2、Activity 和 service 的绑定是如何绑定的?
3、service的生命周期 ?
4、怎么样自定义View? 重写顺序?
5、多线程下载?你是如何保证线程安全的?
6、数据库中进行了大批量数据参数 插入 该怎么样操作?做过数据库迁移这方面的东西吗?
7、那你对APP做过哪些性能优化 ?
8、APP有模块化实现?
9、你在开发中当中有没有遇到过类似的listview有图片错位的问题?
10、动态布局的理解
11、什么情况下会导致内存泄露

映博智能 机器人的公司 (面试官就像出题机器人)
1、解释一下你对面向对象的理解
2、面向对象有几个特性,像封装继承多态对吧?对,所以像多态这个特性在Java里面是怎么体现的?
3、Java里面有哪些基本数据类型?
4、说一下Java里面的集合框架 ?
5、什么是线程安全问题,怎么样去保证线程安全问题?
6、说一下HTTP请求包含哪些部分,HTTP请求的POS方式和get方式有什么区别?
7、安卓里面 Activity 的4种启动方式以及他们的使用场景。
8、说一下什么是广播,什么是广播接收者?说一下他们的使用场景。
9、安卓里面 进程通信有哪些方式?
10、 只能用SQL语句去做数据库查询的时候,去除重复的记录,用什么关键字?distinct
11 、你举例说明一下,你在你的开发过程中常用到的一些设计模式。

映客 你会发现这有点意思 会了解你做的调优的背景方法效益
1、协程原理?
2、如果要实现t1、t2、t3、t4个线程,然后我要按顺序去执行,用Java怎么去实现。
3、有哪些可以实现数据安全?
4、activity的启动,就是隐式启动和显式启动的区别?匹配规则?
5、mvvm mvc mvp 优缺点?各个层交互是怎么样的?
6、三方库的了解?
7、布局层级优化 ?布局层级优化带来的效益是什么?
8、内存优化?
9、leakcanary原理
10、livedata怎么解注册
11、kotlin高阶函数了解过吗? inline crossline noinline ?
12、java 匿名内部类 和 kotlin lambda 函数有什么区别? 字节码呢?
13、泛型擦除
14、搭建一个im库,你会怎么去考量?
15、recyclerview 缓存机制?
16、handler机制? IdleHandler是什么?
17 aop 插桩的方法?
18、垃圾回收机制

映客二面?
1、你在开发中主要负责什么?
2、你这个项目是怎么怎么搭建的这个框架。
3、Glide的优缺点? 对比Picasso Fresco
4、Glide 源码探究?
5、你熟悉那个多线程吗??多线程并行 串行?
6、怎么保证线程安全?
7、 如果想方便地转换图片框架怎么处理?
https://www.jianshu.com/p/09f2689499d0
https://github.com/AweiLoveAndroid/ImageLoaderProcessor

8、自定义 view 几种方式?
9、hashmap 几个就链表变红黑树 几个就红黑树变链表

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Annoke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值