准备了一周就去字节跳动面试,结果一面就被虐哭了------面试官做个人吧

116 篇文章 0 订阅
91 篇文章 0 订阅

人们都说,这个世界上有两种人注定单身,一种是太优秀的,另一种是太平凡的。

我一听呀?那我这岂不是就不优秀了吗,于是毅然决然和女朋友分了手。

人们都说,互联网寒冬来了,这个时候还在大面积招人的公司,必然是牛逼的公司。而这个时候勇敢跳槽的人,必然是牛逼的人。

于是我开始了字节跳动的社招面试。

为了这天,我准备了整整一个星期。面试前一天排老长的队理了个利落的发型,胡子刮得一干二净。穿上崭新的新百伦999,连袜子都是崭新的NB,墨绿色工装裤配酒红色卫衣,外面再搭一件精致的黑色羽绒小坎肩,准时准点出现在电脑屏幕前,准备开始视频面试。

“去面试今日头条,你最好有点心理准备。”

我面试过头条的好兄弟给了我一句忠告。不过邮件对考查内容写的一清二楚,所以一面,我并没有做太强的心理建设,没想到被面试官虐哭了…

下面是面试题:

1.自我介绍

2.熟悉的语言,怎么学习java(核心技术卷一和卷二的区别)jvm虚拟机

3.接口和抽象类区别,如果一个类不需要被继承应该怎么做,final,那在什么情况下我们会使用final修饰类呢…

4.invokeVirtual,invokeInteface,为什么你会觉得抽象类的效率高(我说了查找字节码指令上)如果是单继承和实现一个接口的情况呢,你应该要有自己的理解…

5.HashMap的equals和hashCode()作用,如果不覆写hashcode会怎样

6.Exception和Error的区别是什么,Exception一定要我们自己解决吗

7.泛型了解吗? 那泛型擦除是在编译阶段还是在加载阶段?怎么理解类型擦除的概念(这里我讲了自动装箱,错了应该)

8.泛型里面的extends和super的区别

9.线程,网络请求为什么要新开一个线程

10.ANR有几种情况

11.线程里面可以操作UI吗

12.HandlerThread听过吗,知道他是干嘛的吗

13.Handler原理

14.异步发送的都会到同一个消息队列里面吗

15.线程和handler,Looper,MessageQueue的对应关系

16.怎么处理这个延迟消息,我答了messageQueue里面有一个链表的结构,通过时间排序,到了时间就取出,没到时间就阻塞

17.说说动态代理

18.注解

19.你是怎么理解子网掩码的概念的?

20.Http报文结构,分为那几层,具体到哪一层有什么,发一个报文请求,给你一些东西问你这些东西在报文的哪一个段里面

21.请求方法有什么,Head,Delete。具体问了Post和Get请求,为什么Post会发两次报文?那如果数据段没有数据呢

22.问了一下glide源码相关,还有什么图片请求框架?

23.有看过一些源码库吗

24…Application和Activity在Context的继承树上有何区别?二者使用上有何不同?

数据结构与算法:

1.求二叉树中两个节点之间的最大距离。

2.任意一颗二叉树,求最大节点距离

3.自己实现一个ArrayList,先写十分钟实现一下核心的功能,之后我们再看一下

总结

复盘的时候简直不忍直视,但是又感觉不难,都是一些常规的问题,然后就是一个点一直深究,问到你不会为止,啊头秃…整体情况答得不好,自己知识点也没掌握透彻,一面凉

这是我在某论坛看到的故事,我知道我们很多程序员都有一个大厂梦,但如何针对大厂进行面试准备,很多程序员就显得手足无措了。

我自己做Android开发已经是第6个年头了,毕业后两年,有幸加入到字节跳动这个大家庭。在字节的4年,见证了太多人的来来去去,印象很深一个同事,跳槽阿里薪资直接double,但也看到很多人镀着“大厂”的金四处碰壁,终究还是倒在了技术上!

我自己或许也算是个成功的例子,在4年的时间里从1-1做到了2-2,当然,这背后的“辛酸泪”就留到日后再说。下面我就根据自己一些见解谈谈如何针对大厂进行面试准备。

想达到大厂标准先要搭建知识框架

我们在学技术的时候,如果没有注重搭建知识框架的话,学到后期的话你就会遇到一个问题,就是会感觉到自己之前学习的知识很乱,不成系统,再加上行业技术更新很快,越往后自己学习的知识会越来越多,而之前的学习又是零散的自己没有整理的,你就会感觉自己所掌握的这些知识是散乱的。

就好像很多点,线可能已经连接成了,但是就是组不成一个面。当我们做一个大一点的项目,需要熟练用到很多相关技术面,甚至会用到组件化技术。如果你长期只使用一些常用的技术点,那么你可能还有很长一段时间要待在小公司搬运代码了。

怎样搭建知识框架呢?

这里分享的搭建知识框架两种方式,都是很多技术大佬总结出来的非常好的方式,看你们个人喜好!

第一种:看视频教程来搭建知识框架

这是个通用的方式,可能更加适合那些技术处于初级到中级阶段的朋友,当然,这里我说一点,我发现在很多看视频学习的朋友经常会犯这样的一个错误,就是对视频教程的欲望很强导致的松鼠病,什么意思呢?就是很多朋友到处找视频教程,然后各种囤积,顶多是这个看看,那个看看,感觉这个也好那个也好,于是这个也想看,那个也想看,导致的最终结果就是,视频教程倒是收集了不少,可是没有一个真正的看完过,你说,你是不是就是这样的?(此段话太过属实!)

其实这就是学习技术的一大禁忌,它会严重的欺骗你,让你觉得自己学的很多,实则不仅学的很少,而且还拖慢了你的提升的进度!我告诉你啊,关于视频教程,找一套差不多的就行,就这市面上流传的一些培训班的视频教程,其实都大差不差,只要不是年久失修的那种都行,要知道这就是培训班的啊,所以用来搭建知识框架很合适,找一套就行了,多了没任何好处,现在听我的,看看你收藏的资料里面是不是有好几套同类型的视频教程,听我的,留一套,其他的都删除吧!

记住,只留一套用来搭建知识框架,只留一套,一套,就一套。

第二种:搜索相关知识或路径,自我组织知识框架

这个方式其实要求就比较高了,这要求你要有一定的搜索能力和组织能力,这个方式的核心就是自己去搜索所需要学习的知识点,然后整理组合,然后组织成一个知识框架。

这样说你可能不理解,我举一个例子吧,比如说我们学习Android,如果是按照看视频的方式搭建知识框架,那我们只需要找一套视频教程,然后从前往后看,根据所讲建立相应的文件夹就可以形成我们的知识框架。

但是第二种方式不是这样的,因为没有了视频教程作为参考,我们就需要自己去搜索,比如去搜索“学习Android应该掌握哪些知识点?”,“Android需要学习什么”,“Android的学习路径是什么”,然后你就会得到很多的答案,就会有很多人告诉你先学什么,再学什么等,然后多找几个答案,你就会得出一个学习路线,然后按照这个路线建立相应的文件夹,之后再按照文件夹的顺序去逐个学习,可以找单独的视频教程看,也可以上网搜系列博客来学习,这个就自由的多了。

如果你觉得网上搜索很费劲的话,我可以分享你一套字节跳动内部传送的Android进阶指南)

《高级UI》

UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。

不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!

《Framework精编内核解析》

主要内容包含:

  • 深入解析Binder
  • 深入解析Handler
  • Dalvik VM 进程系统
  • 深入解析 WMS
  • PackagerManagerService

《360°全方面性能调优》

内容主要包含一下几点:

1、设计思想与代码质量优化

2、程序性能优化

  • 启动速度与执行效率优化
  • 布局检测与优化
  • 内存优化
  • 耗电优化
  • 网络传输与数据储存优化
  • APK大小优化

3、开发效率优化

  • 分布式版本控制系统Git
  • 自动化构建系统Gradle

4、项目实战

  • 启动速度
  • 流畅度
  • 抖音在APK包大小资源优化的实践
  • 优酷响应式布局技术全解析
  • 网络优化
  • 手机淘宝双十一性能优化项目揭秘
  • 高德APP全链路源码依赖分析
  • 彻底干掉OOM的实战经验分享
  • 微信Android终端内存优化实践

《Android第三方框架》

本篇内容要点(1042页)

  • 热修复设计
  • 插件化
  • 组件化框架设计
  • 图片加载框架
  • 网络请求框架
  • RXJava 响应式编程框架设计
  • IOC 架构设计
  • Android架构组件Jetpack

《NDK模块开发》

NDK是原生开发工具包,这套工具允许Android使用C/C++代码,并提供了众多的平台库。

主要内容包含:

  • NDK 模块开发
  • JNI 模块
  • Native 开发工具
  • Linux 编程
  • 底层图片处理
  • 音视频开发
  • 机器学习

《Jetpack架构组件从入门到精通》
  • Android Jetpack - Navigation
  • Android Jetpack - Data Binding
  • Android Jetpack - ViewModel & LiveData
  • Android Jetpack - Room
  • Android Jetpack - Paging
  • Android Jetpack - WorkManger
  • Android Jetpack架构组件之Lifecycle
  • Android Jetpack Compose 最全上手指南

《Flutter技术进阶》
  • Flutter跨平台开发概述
  • Windows中Flutter开发环境搭建
  • 编写你的第一个Flutter APP
  • Flutter Dart语言系统入门

《2020大厂面试高频知识点》

一、图片
二、网络和安全机制
三、数据库
四、插件化、模块化、组件化、热修复、增量更新、Gradle
五、架构设计和设计模式
六、性能优化
七、Android Framework
八、Android优秀三方库源码


由于篇幅限制,这里只能展示部分内容,朋友们如果需要这份完整版的PDF资料合集,微信扫描下方CSDN官方二维码【免费获取】。

然后我必须强调几点:

  1. 这个搭建知识框架可不是说你整理好要学习的知识顺序,然后建立相应的文件夹就行了,这所包含的知识你是要真的去学的!

  2. 学习的时候你一定要记笔记,一定要记笔记,这个很重要

  3. 最终你的知识框架应该是一个完善的层级文件夹,每个文件夹下有相应知识的学习笔记

这样你的知识框架才算真正的搭建完成!至此,你向Android架构师迈出了最关键的一步。

有了自己的知识框架一定可以在面试中游刃有余了,最后祝大家面试顺利,都能顺利拿到满意的offer!

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
从clickhouse到bytehouse - 揭秘字节跳动万台节点 字节跳动在数据分析和大数据处理方面一直是行业的领先者。为了应对快速增长的数据需求以及提高数据分析的效率,字节跳动开发了一种高性能的数据存储和查询引擎,名为ClickHouse。ClickHouse是一个开源的列式数据库管理系统,通过利用现代硬件的计算和存储能力,能够高效地处理海量数据。 然而,随着字节跳动用户数量的不断增加,ClickHouse在处理大规模数据时也面临一些挑战。为了进一步提升数据分析的速度和效率,字节跳动决定开发一种名为ByteHouse的新型数据存储和查询引擎。 ByteHouse是在ClickHouse的基础上进行了优化和改进的新一代数据处理引擎。它采用了自主设计的分布式架构,将数据存储和查询任务分发到多台节点上进行并行处理。字节跳动部署了数万台节点,每个节点都具备计算和存储能力,以应对海量数据处理的需求。 ByteHouse引擎的主要特点之一是其高度可扩展性。可以根据数据的增长情况随时扩展节点数量,从而保持系统的稳定性和性能。此外,ByteHouse还采用了多级缓存和数据压缩等技术,以进一步提高数据查询的速度和效率。 字节跳动通过使用ByteHouse引擎,实现了对海量数据的高速查询和实时分析。无论是在搜索、内容推荐还是广告投放等方面,ByteHouse都起到了关键作用。该引擎的高性能和可扩展性,使得字节跳动能够处理复杂的数据分析任务,并提供即时的洞察和决策支持。 总的来说,从ClickHouse到ByteHouse的升级,揭示了字节跳动在大数据处理方面的技术实力和创新能力。通过高性能的数据存储和查询引擎,字节跳动能够处理海量数据,并在多个业务场景中发挥关键作用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值