字节面试被刷了三次,还好没放弃,终于等到你(面经+资料)

可能就是因为上面的这些准备,让我自己有些过于自信了,以至于第一次连面试电话都没接到的时候蒙了。不过,我这个人脾气比较倔,当时就跟朋友放下狠话,一次不行就两次,两次不行就三次。

可能就是自己乌鸦嘴吧,居然三次都没过。

老人常说一句话:事不过三。虽然这句话的本意不是说这方面的,但是字节跳动公司已经试了三次了,作为一个成年人,要学会舍弃一些不可能的事情,我也是该好好考虑一下要不要继续下去了。

我回头想了一下,这三次虽然都没过,但是,每次结束后我都有好好做总结。

第一次被刷是直接石沉大海,应该是简历上面学历的原因,末流二本的小渣渣,可能就是这样直接被刷了吧,我当初自己做优化时也只是删了一些多余的东西,其他的没怎么变过,想来是我的资历看起来不够吧。

第二次投,过了两面,第三面挂在了性能优化上,回去后我补了一下这个方面的知识,准备三战字节。

这一次准备的时间比较长,因为看的资料比上次多,复习的范围也更广了些,看了一整套差不多58万字的PDF资料,还有视频和面试真题解析,不过最后还是挂了。

##终获offer

后面有朋友提出帮我内推,于是我在慎重的决定后,又投了一次。这一次并不是赌气,因为之前三次面试经验刷得差不多了,我是对自己有一定把握的,没准备多久就直接去面试了。

意料之中的,这次比较顺利,拿到了研发岗的意向书,没有辜负我前面看的资料和刷的题。

这是我第三次面试的面经分享,希望对大家有帮助。

##面经分享

一面
  1. 自我介绍
  • 注意点:说有亮点的、跳槽原因,从各个点尽力彰显自己优势、技术特长
  1. 手写代码:计算View树上所有view的数量,参数ViewGroup
  • 本质上就是数据结构多叉树递归层序遍历+Android View基本api调用

public int getCount(ViewGroup viewGroup){

int count=viewGroup.getChildCount();

//循环获取子View
for(int i=0;i<count;i++){
View child=viewGroup.getChildAt(i);
if(child instanceof ViewGroup){
//如果子View是ViewGroup,则用递归获取子View数量
int childCount = getCount((ViewGroup)child);
count+=childCount;
}else {
count++;
}
}

return count;
}

  1. Android相关

线程的阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。
主线程Looper从消息队列读取消息,当读完所有消息时,主线程阻塞。子线程往消息队列发送消息,并且往管道文件写数据,主线程即被唤醒,从管道文件读取数据,主线程被唤醒只是为了读取消息,当消息读取完毕,再次睡眠。因此loop的循环并不会对CPU性能有过多的消耗。

  1. 项目相关
  • 用MultiDex解决何事?其根本原因在于?Dex如何优化?主Dex放哪些东西?主Dex和其他
    Dex调用、关联?Odex优化点在于什么?
  • 答案:MultiDex解决方法数65535的限制问题,即方法数不能超过65535个;方法id是short类型4个字节来存储的,所以数目范围应在0-2^32即0-65535;MultiDex工作原理分析和优化方案; 主dex中:应用启动就必须加载的类,有一个keep文件来控制;其他dex文件都是通过主dex加载进来的;odex优化点:预加载;
  • Dalvik和Art虚拟机区别?
  • 多渠道打包如何实现(Flavor、Dimension应用)?从母包生出渠道包实现方法?渠道标识替换原理?
  • Android打包哪些类型文件不能混淆?

a. 四大组件

  1. 架构
二面
  1. Glide缓存特点
  2. 问了擅长哪个方向?回答UI动画,所以就问UI相关的
  • launcher应用抽屉,之前有个毛玻璃效果背景,从系统ROM角度说下怎么做?
  • [实时的睡眠水面倒影效果怎么做?](https://blog.
    csdn.net/qq_20328181/article/details/78721835) 实时更新的UI性能如何保证?
  • UI基础:Measure、Layout、draw大流程、绘制顺序,FlowLayout怎么实现?flowlayout实现
  1. 算法题

public static void main(String[] args){
Counter counter=new Counter();
new Thread(new PrintOdd(counter)).start();
new Thread(new PrintEven(counter)).start();
}

static class PrintOdd implements Runnable {
public Counter counter;

public PrintOdd(Counter counter) {
this.counter = counter;
}

@Override
public void run() {
while (counter.value<=100){
synchronized (counter){
if(counter.odd){
System.out.println(Thread.currentThread().getName()+“:”+counter.value);
counter.value++;
counter.odd=!counter.odd;
counter.notify();
}
try {
counter.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
static class PrintEven implements Runnable {
public Counter counter;

public PrintEven(Counter counter) {
this.counter = counter;
}

@Override
public void run() {
while (counter.value<=100){
synchronized (counter){
if(!counter.odd){
System.out.println(Thread.currentThread().getName()+“:”+counter.value);
counter.value++;
counter.odd = !counter.odd;
counter.notify();
}
try {
counter.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}

static class Counter{
public int value = 1;
public boolean odd = true;
}

  1. 模块化、工程化架构思想

最后

小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

如果你需要这些资料, ⬅ 专栏获取
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

如果你需要这些资料, ⬅ 专栏获取

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值