开篇:缘由
首先介绍一下个人家庭情况,父母都是农村人,靠着微薄的收入支撑着这个家,还要供我读书,着实不容易。好在我高考成绩也还算争气,考了个还算不错的大学,东部地区某211。今年的金三银四本是想好好拼一把,奈何受到疫情影响,只能将自己的计划搁置了一下,后面我第一家选择去面试的字节跳动,奈何三面下来自己被虐得“体无完肤”,好在我并未气馁,复习18天后去面试了百度,最终四面拿下了offer。
本文内容主要是分享面经和个人的一些学习建议,内容涉及到很多PDF文档(面试题库、学习笔记、实战文档、脑图等),由于篇幅有限,需要这些文档的,直接点击石墨文档(https://shimo.im/docs/VHyXRjkk3xPcH6vJ)免费领取
字节跳动三面面经
字节跳动一面面试题:
1、自我介绍
(事先做好准备)
2、项目介绍
(时间大概是15分种,面试官会根据你的简历上提到的项目来提问,比如:这个项目中你负责了什么,使用到了哪些技术;描述最好体现自己的综合素质,比如:你如何协调项目组成员协同开发,在遇到某一个棘手的问题的时候你是如何解决的,以及你在这个项目用了什么技术实现了什么功能等。切记提前做好准备,别坑自己)
3、技术面试
- 分布式锁是锁住一部分还是整个系统,既然是锁住整个,为什么不用消息队列?
- 详细讲下怎么用 mq 实现的最终一致性,还有怎么利用的消息事务?
- tcp 于 http 的关系,如何基于 tcp 实现 http
- Java 打开一个 http 流不关闭的后果
- io 流是基于抽象类还是接口实现的
- 数据库的乐观锁和悲观锁是什么
- 乐观锁实现原理,讲到一半,来写一个乐观锁吧
- java 的类中有什么方法
- 线程安全是什么?
- volatile 和 synchorized 的区别
- 假如有一个类 A 和一个 类 B,这两个类都有一个变量和一个自增操作,A 类的变量用 volatile 修饰,B 类没有用,B 类的自增操作用 synchorized 修饰,他们都是线程安全的吗,如果都是,那为什么要用 synchorized ,volatile 不是更轻量吗,synchorized 有什么作用。
- 智力题:岛上有群人,各自戴着红帽子或者白帽子,但都不知道自己帽子颜色,只有知道自己帽子颜色,第二天才能出岛,这时候有个人进来说了句“你们之中至少有一个人戴了顶红帽子”,问岛上的人最后的离开情况
- 算法:矩阵中的最长上升序列
字节跳动二面面试题:
1、自我介绍
2、项目介绍
3、技术面试
- java集合框架全部介绍,从list set queue到map
- hashmap底层扩容线程安全问题
- 如果一个对象 要作为hashmap的key需要做什么?
- Threadlocal类以及内存泄漏
- 线程同步方式,具体每一个怎么做的
- jvm类加载双亲委派模式,有没有能破坏这个模式的方法?类加载整个过程解释
- 垃圾回收算法,垃圾回收器有什么?
- synchronized用在静态和非静态方法的区别
- 你做项目的思路是什么,看过什么源码,什么开源网站经常访间,看是什么学的的书不?
字节跳动三面面试题:
- 问项目相关的技术栈(我回答的是MongoDB)
- 怼问:为什么要用MongoDB?为什么不用MySQL?MongoDB有哪些特性,能说一下吗?
- 文档型数据库有哪些?ES与MongoDB有什么区别?为什么ES搜索更快?
- 数据库都有哪些类型,关系型数据库和NoSQL有什么区别?
- NoSQL有哪些?他们的使用场景都说一下
- 问JVM,类加载到卸载的过程都说一下
- UML都有哪些图?如何从这些UML的图中来实现你的需求设计?
- 设计模式说一下,Spring源码看过吧?那说一下设计模式是如何在Spring中体现的?
- .MVC和MVVM,MVP说一下你的理解
- 微服务了解过吧(了解过一点),微服务都有什么好处?
- 微服务都有哪些框架或中间件?
- 如果让你提高一个系统,你该怎么做?如果让你设计一个系统,你要考虑哪些方面?
- 对什么技术比较熟悉,JDK提供了什么来实现线程安全啊?
- 超线程是什么?知道吗?(顿时懵了,啥啊,没听过)
- 对未来的技术有什么规划?你为什么要学这些技术?
字节跳动面试题答案+解析:
吃一堑,长一智,虽然没有面上,但是,资料我还是通过各个途径整理好了,希望能帮到想去字节的朋友们。
百度四面面经
一般来说,前面几面的面试技术含量比较高,前面几面过了后面相对会轻松很多。
百度一面面试题:
1、自我介绍(这个环节必不可少)
2、介绍项目(我说了用了分布式锁,然后就开始针对分布式进行提问了)
3、技术面试
手撕依赖关系树扫描算法(期间提了不重复扫描、优化时间复杂度等要求)
- 简述如何实现未知长度的数组翻转?
- 简述内存泄漏,你处理过哪些内存泄漏?
- 以100ms/张的间隔时间播放100张图片,且每张图片需要400ms进行加载,如何设计?
- 如何在无序数组中快速找到最小值(手撕二分查找算法)
- 简述Android中的ANR,以及为什么会出现ANR?
- 简述Handler消息机制(深挖内部实现原理)
- 问我看了啥书(设计模式,图解HTTP,Modern PHP…被打断然后开始问设计模式)
百度二面面试题:
1.自我介绍
2.技术面试
- 手撕一个有序数组的二分查找算法
- 列举一个你在实际项目中所进行的性能优化(深挖具体细节)。
- 简述单例模式的实现方式,且单例模式有什么优缺点?
- 简述Java的异常处理机制
- 多线程间如何进行信息通信?
- 多线程如何保证线程安全?
- 简述线程池
- 简述HashMap实现机制,如何解决HashMap的线程安全问题?
- TCP和UDP的区别,分别有哪些应用场景?
- 简述七层网络模型
- 简述Android点击事件的分发机制
- 画一个BLE APP的功能架构图
百度三面面试题:
1、自我介绍
2、聊聊项目
3、技术面试
- 算法:给你一个字符串,判断是不是标准的ip地址。(我写完一个之后,说让我把所有的测试用例写出来,发现有几个遗漏掉了,面试官说,让我根据这些测试用例重新再写一下,考察代码扩展优化能力。)
- 举了个数据库联合查询的例子,写个简单的SQL语句。(join)
- TCP的三次握手说一下?为什么是三次握手?为什么是四次挥手?
- TCP的滑动窗口原理知道吗?(我说原理不清楚,但是我知道他解决的是什么问题。)
- hashMap是线程安全吗?如何实现线程安全?
- Android的持久化存储方式说一下?
- Android的启动模式和场景说一下?
- Android的ANR知道吗?怎么避免?
- 内存溢出和内存泄露说一下(中间有提了下Handler)
百度四面HR面:
- 自我介绍,抓住介绍的点让你详细说说?
- 为什么实习经历只有一个月?
- 为什么不去找其他的实习?
- 其他的面试流程?
- 考虑去哪里工作,北京是唯一选择吗?
- 为什么来百度?你对百度技术团队的了解有多少?
百度及其他大厂面试题完整答案+解析:
被字节惨虐后,我是如何拿下百度offer?
(1)第一步是关键:调整心态
由于第一家字节跳动的面试没有通过,所以多少受到了一些影响,感觉有些挫败吧,所以接下来最关键的一步就是要调整自己的心态,以防被自己的消极心态所影响。自我心理暗示很重要,因为一旦从心底否定了自己,面试过程中就容易出现语言不流畅、说话没逻辑、条理不清晰、回答不全面,这都是面试中很多面试者容易出现的“致命伤”,所以调整心态,沉着冷静地面对是非常重要的。
(2)第二步要梳理:Android核心知识点(19天时间,读完这本pdf)
关于第二步要梳理,实际上就是面试过程中,发现自己的知识储量是比较杂乱的,不知道面试官下一个会问什么,所以对于Android的知识点有一个清晰的梳理是很有必要的。关于Android核心知识点,手上也有一本整理好的pdf文档,需要这份文档的可以直接我私信获得~
这份文档涵盖了很多知识技术点,包括Java部分(基础,并发,多线程,JVM等)、数据结构与算法、开源框架(Spring,Mybatis,MVC,Netty,Tomcat)、分布式(Redis,Zookeeper,kafka,RabbitMQ,负载均衡等)、小程序等。
(3)第三步要飞跃:恶补+刷题
关于第三步,就是要做到让自己有一个质的飞跃。对于恶补和刷题这两个方面,我自己也整理了我个人的一些资料,也是我自己的一些做法,希望具有参考性:
- 实战系列:
- 大厂面试题题库:
- 其他相关电子书:
结束语
代码改变世界,程序员肩上的担子可是很重啊。要早日成为明日大牛,从现在开始,还不晚!
最后祝愿你也能顺利拿下大厂offer,共勉!
以上文章内容中所谈及的面试资料、学习资料等,均可免费分享,需要这些PDF的小伙伴,直接点击石墨文档(https://shimo.im/docs/VHyXRjkk3xPcH6vJ)免费领取哦~
更多Android咨询内容获取,关注专栏我的专栏。