2021 Android面经及求职总结

投递情况

主要投递了国内和国外的互联网公司,同时也投递了一些币圈企业,最终斩获battmd offer和一币圈的百万年薪offer

关于如何准备面试,可以关注我的面试准备系列文章如何准备一场技术面试?

offer斩获情况

大大小小共12家公司offer

考点

算法:

单例的写法(我采用了双检查的写法,写完要能解释清楚为什么写volatile或者双检查)

两个线程轮流打印奇数和偶数(腾讯新闻)

生产者消费者模式,用wait和notify写出来(美团)

二分法查找(很多公司都会考)

合并两个二叉树(头条)

猴子吃桃(一次吃2个或3个桃子,总共有多少种吃法,要求非递归)(头条)

合并有序数组或者链表(很多公司都会考)

数组、字符串处理(动态规划考的比较少,最难的就是一个简单的斐波那契,都是mid和easy的数组查找或者处理)

两数之和

三数之和

搜索旋转排序数组,旋转数组的最小值(瓜子二手车)

组合总和

全排列

合并区间(网易,只说对思路即可)

二叉树的前中后序遍历非递归写法

查询链表是否是循环链表以及链表环的入口点

滑动窗口最大值(美团)

反转字符串(新浪微博)

用两个栈实现队列(知乎等一些公司考到了)

两个链表的第一个交点

剑指 Offer 53 - I. 在排序数组中查找数字 I

二叉树或者多叉树的深度

378. 有序矩阵中第 K 小的元素(visa)

总结:

国内公司考察的算法基本上在剑指offer、hot100都能找到原题(easy和mid),因此,算法面试准备以上两项即可,而且要做到能根据题意,理清自己思路,然后尽快撸码,一般都能取得一个还算不错的面试结果。

外企一般对算法的考察稍深一些,所以要扩大算法备考范围,这里可以补充——LeetCode 精选 TOP 面试题。

总之一句话:算法面试要做到对算法的原理很清楚,并且能根据算法原理作一定能力迁移,并快速给出思路,例如:二分法、字符串处理常用方法的解题能力迁移。

Java基础、原理、GVM原理篇

==和equals的区别是什么?

java都有哪些基本类型?

java注解的种类都有哪些?区别是什么?在项目当中有用过java注解吗?

static关键字的作用是什么?

final关键字的作用是什么?

经过final和static修饰的变量存放在jvm的哪个区域?

volatile的作用是什么?以及他的原理?(可能会结合双检查单例一起来考察)

jvm内存模型、栈里面的区域(讲清楚栈帧结构)

gcroot都有哪些?

为什么选定这些变量作为gcroot?

jvm虚拟机在内存回收时候都有哪些算法?

jvm的堆内存模型?以及在每一块区域中采用的内存回收算法?为什么要采用这样的回收算法?

new String()、String 修饰的变量、字符串的区别?

String、StringBuilder、StringBuffer的区别?

int和Integer的区别(注意Integer的内存溢出问题)

java 异常的实现原理是什么?

Throwable、error、exception是什么关系?分别都是什么时候用?

在一个32位或者64位处理器上运行的java程序,int占多少位?(头条面试题)

Hashmap、Hashtable、Concurrenthashmap的实现原理?

Hashmap在1.7和1.8的实现区别?

Hashmap扩容是怎么实现的?

Hashmap的put过程是如何实现的?

为什么扩容是2的n次方?

为什么要有链表转数组的过程?

红黑树原理?

Hashmap数组的0位是干什么用的?

Concurrenthashmap的实现原理(1.7和1.8区别)

数组、链表的查找和插入的实现复杂度?

java泛型的意义是什么?

java的类加载机制?双亲委派机制?

java在对象创建过程中都经历了哪些过程?

java中如何区分两个类是同一个类?

如何确定两个对象是同一个对象?(equals和hashcode)

java为什么要有内部类或者说内部类解决了什么问题?

AQS原理,在哪里应用

java一共有几种线程同步方式,区别是什么?(Reentrantlock\ReadAndWriteLock\countdownlatch\semaphone\)

java多线程:

java同步都有哪几种方法

使用syntronized修饰的方法,使用static syntronized、代码块持有的锁都分别是什么?

Wait\notify\notifyAll、lock、unlock的区别是什么?能否使用他们写出生产者消费者模式?能否写出两个线程交替打印奇偶数?

volatile的作用是什么?深入到原理层面

创建线程的几种方法?

java一共有几种线程池?

java如何自定义线程池?自定义线程池过程中的几个参数都是什么意思?

如何实现线程池监控?

线程池的核心实现原理?

线程池如何实现取消?

线程池的核心线程和非核心线程是固定不变的吗?(在修改相应参数时候可能会变化)

如何区分线程和进程?

Kotlin基础和高阶应用

kotlin中== 和===的区别?

kotlin中foreach和loop区别?

kotlin泛型中in,out、refield的作用?

inline、outline、crossline的作用?

kotlin的高阶函数如何理解?

kotlin协程的几种实现方式?

协程的原理?(没人问过,作为一个了解)

jetpack了解吗?livedata、lifecycle的原理都是什么?

Kotlin data sealed类的区别?

Object companionObject的区别和应用

Let with also run apply 区别

Android基础

activity启动模式?几个activity的启动模式混合相互启动时候的生命周期都是怎么样的?

activity生命周期?

android进程间通信方式?

binder的实现原理?

Contentprovider实现原理?

service想要实现进程间通信如何实现?

如何创建多进程?

Okhttp原理?(会结合网络请求过程中的缓存比如etag、过期时间等来问。会问到调度器原理,连接池,多准备源码细节)

Eventbus、Butterknife实现原理?

Rxjava实现原理?

fragment的生命周期?fragment切换时候的生命周期?

自定义view如何设计?需要从继承view开始从头设计(onmeasure\onlayout\ondraw)

事件传递机制?

onIntercepttouchevent之后是如何将后续事件都发送到ontouch中的?

view的绘制原理?(描述view.invalidate之后的过程)

做过性能优化吗?(描述滴滴的webview优化过程、掌握常见的性能优化手段)

activity启动过程,一般结合插件化原理解释,要尽量解释详细。

handler实现原理?

handler发生内存泄漏的原理?(一定要弄清楚,很多公司都有问到)

Android中常见的发生内存泄漏的场景?

aidl的使用和原理?

contentprovider的使用及其原理?

socket在android中的使用场景?

进程保活做过吗?都有哪些手段?

性能和优化

线上如何监控卡顿,ANR?

做过性能优化吗?介绍一下具体做法

业务侧有线程池,集成的sdk里也有线程池,如何对这些线程池做管理?

设计模式

常见的设计模式,要能知道每一种设计模式的优缺点。

单例模式,要能快速并且准确的写出。

建造者模式,为什么要使用建造者模式,建造者模式解决了什么问题?有什么优缺点?

工厂模式和抽象工厂模式的区别。

享元模式的应用及解决了什么问题。

谈谈MVC,MVP,MVVM区别

网络

缓存的时候都需要加哪些字段

Tcp\Ip三次握手和四次挥手,为什么要三次握手和四次挥手

网络优化做过吗?讲一下常用的网络优化手段。

结合glide讲一下缓存。

讲一下http和https的区别

项目

push到达率从90%提升到95%?

侧边栏缓存优化都是怎么做的?

拓展

讲一下你的优缺点?

为什么换工作?或者为什么选择在现在这个节点换工作?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值