字节跳动上千道精选面试题还不刷起来!2019-2020大厂高级面试题集合(Handler,性能优化,自定义View等)

前言

本想今年辞掉工做大干一场,没想到碰到疫情,家里蹲了3个月...,还好字节能给一次机会。前阵子字节跳动的提早批开始了,看宣传是说有海量HC,机会多多,本着涨涨面经的心理,而后就投递了一下杭州那边的部门,首先在这里还要很是感谢内推个人小哥哥,很是热心的帮我跟踪进度,由于中间还出了一些小插曲(我投错部门了。。。),仍是热心的小哥哥帮我联系HR,最后把我转到想要投递的部门了,我投的是Android开发工程师~面试项目大部分问题是围绕个人开源项目 蘑菇博客 展开的,还有就是我以前准备面试的一些 笔记(大佬请轻喷..)
git

面试时间

或者能够查看个人【Github】里能够查看github

  • HR面完后,等了一个礼拜多,觉得凉凉了,没想到收到惊喜,许愿成功~
  • 第一天:第一面 + 第二面
  • 等了两天:第三面 + HR面
  • 过了一周后:等来了意向书

第一面

**面试官看起来很年轻,感受是一个刚毕业不久的小伙汁,声音很青涩哈哈哈哈
开始面试的时候把我给问懵了,当时刚午觉睡醒,还没缓过神**

计算机网络部分:面试

1.http的一套流程是什么?算法

2.https发起链接的流程是什么?数据库

3.http请求的请求头中包含哪些字段?(这里忘了很多字段,只说了三四个,呜呜呜)设计模式

4.一次http请求的结构是什么样的?(这里由于网络的问题,听了三遍,终于弄懂了面试官的意思,呜呜呜)安全

操做系统:性能优化

1.能简单说说线程和进程间的区别吗?网络

2.进程间通信的方式你知道有哪些吗?框架

3.据说过Messenger吗?(知道,可是底层仍是使用的AIDL+Handler的形式,AIDL底层仍是使用的Binder驱动)

数据库:

1.能简单说一下数据库如何修改一张表中的数据吗?

2.给一张表增长一个字段该用什么关键字?

Java:

1.能简单说说Lock,synchronize,CAS之间的关系,以及具体实用的场景吗?

2.能详细说一下CAS是什么吗?AtomicInteger是怎么实现线程安全的?

3.具体的锁升级机制能简单讲讲吗?

4.能简单说说代理模式吗?动态代理和静态代理有什么区别?

Android:

1.能简单说一下事件分发机制吗?

2.MeasureSpec.UNSPECIFIED是什么意思?若是外层的ViewGroup的模式是AT_MOST,内层是match_parent,那么最终传递到内层的模式是什么?(AT_MOST) ps:这个问题没啥意义

(听你说了View中有scrollTo,scrollBy,那么咱们分析一个场景题)

3.场景题:首先有一个FrameLayout,其中嵌套着两层View,咱们在进行重写onTouchEvent的时候,如何让上层View滑动而且暴露出下层的View?(这里有一个坑,面试官说的scrollTo、scrollBy,我就在这俩上面思考怎么暴露出下层的View,最后忽然想到能够经过事件来调整整个View的布局位置)

源码:

1.看过那些优秀的开源框架源码吗?

2.知道那些源码相关的设计模式呢?

3.HashMap简单说一下原理吧

二面:

二面是一个女面试官,年龄可能在40岁左右

设计模式:

1.熟悉那些设计模式呢?

2.动态代理底层是如何实现的?

3.讲讲Retrofit的动态代理吧

Java:

1.能简单说说JVM内存模型的目的以及在内存中区分为哪些区域吗?

2.内存回收机制大体讲讲呗?

3.类加载机制完整细致的描述一下把

4.类加载器的双亲委派原则说一下吧?(这里有一个疑问,我说父子类加载器不是继承关系,而后面试官说不太对,这里我有一点点疑问,还请你们告知一下)

5.能说一下Java .class文件的结构吗?

6.线程池的基本机制有了解吗?非核心线程如何保证延迟结束?

7.为何内部类会默认持有外部类的引用?

Android:

1.Handler消息机制简单说一下吧(延时的消息是如何发送的?以及经过Looper.loop()是如何处理延时消息的?)

2.为何Handler会出现内存泄漏?

3.View中的post和handler的post有什么区别?(我说view中的handler是通过重写的,会处理关于View的相关绘制事件,而后面试官说只回答对了一部分,我有些疑问,还有其余的区别吗?)

4.有用到什么内存泄漏检测的框架吗?知道原理吗?(就是上面所说的JVM内存回收机制)

5.知道关于性能优化相关的吗?能简单讲一下吗?(布局,异步,过渡绘制)

6.能讲一下Activity的启动流程吗?

7.听你讲到了进程间通信,PackageManagerService和ActivityManagerService进行通讯的方式是什么?

8.Binder驱动底层原理了解吗?(mmap的内存地址映射)

9.Serializable和Parcable有什么区别?如何使用?

10.听你说到了sp(SharedPreference),你知道sp能跨进程通信吗?

三面:

1. 聊项目

2. 下面的代码会发生什么?


<font color=`"#ffffff"`>

<font color=`"#bbbbbb"`>

class Foo {

<font color=`"#bbbbbb"`>

public`:`

<font color=`"#bbbbbb"`>

void A() {}

<font color=`"#bbbbbb"`>

<font color=`"#bbbbbb"`>

virtual`<font color="#bbbbbb"> void<font color="#bbbbbb"> B<font color="#bbbbbb">()<font color="#e06c75"> {}<font color="#bbbbbb"`>

<font color=`"#bbbbbb"`>

void C() { std::cout << this << std::endl; }

<font color=`"#bbbbbb"`>

};

<font color=`"#bbbbbb"`>

Foo* temp = nullptr;

<font color=`"#bbbbbb"`>

temp->A();

<font color=`"#bbbbbb"`>

temp->B();

<font color=`"#bbbbbb"`>

temp->C();

<font color=`"#bbbbbb"`>

<font color=`"#ffffff"`>

</font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font>


1)函数A,什么都不会发生;

2)函数B,crash

3)函数C,打印地址0

C++的成员函数,若是使用了this相关的,那么编译器在编译时会给函数入参加入this指针做为入参。A不须要,所以没有this指针做为入参;B和C须要,其中B是虚函数,须要找到虚表,即须要解引用,空指针解引用直接就会崩溃,C不须要解引用,只会打印空指针的地址0。

3. 算法题xml解析 有一点相似leetcode 385/591 能够看看xml解析相关的实现

HR面

花10来分钟作个简单的沟通

1.自我介绍
2.考研的时候为何选择的是这个学校呢?
3.回顾一下,上大学到如今这段时间内,让本身最有挫败感的事情是什么呢?
4.有哪些方面须要在改进的么?
5.对于之后参加的工做,你主要会看重哪些方面呢?
6.同窗这块,你们都有在投递字节这边的岗位么?
7.反问环节:关于面试结果,告知,这边只是作简单的了解,面试结果大约会在一周左右出来,到时候会有邮件或者电话通知。关于面试的结果,须要综合前面的几个面试官进行综合评测,才能决定是否录取。

总结+面试前的准备(供你们参考学习)

给你们个建议,面试官若是愿意和你聊组里业务,必定要把握机会好好聊,最好能提出让面试官眼前一亮的问题,直指业务核心。代码谁都会写,基础知识网上都能查到,可是对产品的理解和新的想法不是谁都有的.

首先

这份资料,一共有1312页,230775个字涵盖了Android全部高级知识,面试题都是各个大厂的面试者提供的。咱们创建了一个【学习交流群】,你们会在一块儿学习交流,解决问题。若是最近有面试的都会把本身最近面试的题目分享出来,还有一些面试遇到的坑,有时候还开开车感受还挺愉快!在这里感谢全部群里提供面试题的伙伴,话很少说来看看大厂都喜欢问哪些高级压轴题目吧!



群文件夹里的知识集合

因为文章篇幅问题复制连接查看详细面试答案解析以及学习笔记连接:https://shimo.im/docs/QVGDhCj...
或者能够查看个人【Github】里能够查看