前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Android工程师】:字节跳动面试很难吗,我们应该如何应对?

【Android工程师】:字节跳动面试很难吗,我们应该如何应对?

原创
作者头像
Android技术干货分享
修改于 2020-12-01 09:02:53
修改于 2020-12-01 09:02:53
1.2K0
举报
文章被收录于专栏:Android技术分享Android技术分享

一、背景

先说背景,本人某985数学系本科。因为以后不太想做科研,考研又感觉毅力不达标,听说字节跳动今年机会多,我就打算去挑战一下。

我这个人挺懒的,面经看得有点少,LeetCode做了十题就放弃了,但是因为从小就喜欢计算机,所以不经意间还是积累了一些东西。

另外看样子字节跳动可能还有机会,看他们也挺急的,由于担心视频面试出岔子,特意赶回北京参加现场面,三轮一天完成,中午蹭了一顿饭。

二、笔试

本来写代码就慢+不爱刷题的我只AC了2道半,居然一次通过,神奇

字节跳动的笔试体验还是不错的,不像某些厂喜欢出大量的智商题+初中方程题来恶心人,我是真的不会做。

三、字节一面

  • Android四大组件是什么?你最熟悉哪个?
  • Activity的生命周期?
  • 旋转屏幕的时候会发生什么?
  • Java的常量池?不同String赋值方法,引用是否相等?
  • HashMap的实现?树化阈值?负载因子?增长系数?
  • 手写代码:O(1)的单链表元素删除(×:倒霉孩子没见过这套路…经过提示也没想出来,可见做题的重要性)
  • 手写代码:获得单链表的最后N个元素

四、字节二面

  • 写过C++是吧?
  • 知道STL容器的allocator吗?
  • 手写代码:实现无锁同步(×:我写成了CAS操作,被打断,说特定的ARM处理器没有这个同步原语,不能依赖相关指令。包括信号量等也不行。)
  • 手写代码:自定场景,实现一个满足需求的内存池(×:晕乎乎写出了几个bug,面试官眼尖…而且自我感觉回收算法不够好,感谢放过)
  • 手写代码:从长序列中找出前K大的数字,堆排序
  • JVM的垃圾回收算法了解吗?
  • 对象可达性分析,哪些是GC root?
  • TCPUDP的根本区别?
  • 什么场景下使用UDP?为什么?
  • 提问简历,关于FFmpeg

我的提问:

  • 面试官是哪个组的?
  • 字节跳动今年是否真的缺人?招聘策略是什么?(答:是。项目和实习经验吃亏没关系,今年招聘重视基础,换去年我肯定不给你过。)

五、字节三面

  • 介绍项目,高三暑假做的App
  • 画某个功能的模块图,写出相关接口
  • 这样设计有什么问题?如何改进?
  • QQ视频聊天使用什么协议?
  • 视频聊天为何会卡顿?
  • TCP流量控制算法的细节?(×:包速率增长的函数关系说不清楚,感谢面试官放过)
  • 假设有节点自带p的丢包率,如何判断丢包是因为带宽不够还是随机丢包导致?
  • 如果视频聊天出现卡顿,如何在应用层面缓解?
  • 手写代码:大整数加法,要求代码可读性(×:又写出搞笑bug系列,被二面搞傻了)
  • Android应用中的卡顿是什么导致的?
  • Service和Thread有什么区别?Service的代码是在哪个线程运行的?
  • AsyncTask?Executor?
  • AsyncTask有哪些缺点?
  • 用过IntentService吗?(×:没用过,感觉就是个适合处理单次计算任务的方便设施)

我的提问:

  • 面试官是做什么的?
  • 面试官对非科班学生有什么看法?
  • 面试官认为我存在哪些不足?

大厂到底还是大厂……一言不合就写代码,而且相当重视基础。说是面经,其实就是帮助各位查漏补缺,完善技术栈。毕竟面经只是面试官拿来采样你的水平的测试用例,我遇到过各种奇怪的问题……

六、一、大体知识储备(方向)

1.数据结构+算法(非常重要!) 2.数据库 3.操作系统 4.计算机网络 5.java基础 6.linux语法 7.项目介绍

七、如何通过头条笔试?

1.平时刷题一定要总结归纳,最好分类。

比如关于树的题型,链表的,数组等等,观察它们的解题思路,总结出解题套路。

2.积累工具类算法。

什么叫工具类算法?就是你解一道算法题需要用到另一种算法,这个被调用的算法就是解决这道算法题的工具。比如常见的「深度优先遍历」、「广度优先遍历」、「01背包」、「KMP算法」以及常见的选择和排序算法都是经常使用的工具类算法。

3.学会抽象题目。

笔试算法题不同于面试算法,不会直白跟你说要使用哪种算法去解答,更多的要自己学会抽象,抛开题目本身,要明白内部讲的是什么,别被题目的糖衣炮弹迷惑了。只有把题目抽象成最原始的算法你才能更好地使用工具类算法进行解答。

八、如何准备头条面试?

头条面试和其他大厂可能大同小异,但就是这个小异才是关键地方,能异于其他人的地方。可以从如下几个方面去做准备:

1.特意准备几个面试题源码。

像我在回答一些中规中矩面试题的时候,都会从源码角度出发。比如常见的HashMap等集合类,多线程的各种锁以及大数据框架的部分源码。

2.特意准备项目难点。

面一些大厂的时候避免不了被问到项目难点,不可能用普通Bug含糊过去啊。这边可以从项目用到的技术栈出发,去寻找技术栈在项目中会存在的难点,然后套进自己的项目,找个自己能懂,最好能全懂的。

3.针对性去了解公司的技术栈使用情况。

比如头条使用Go,众人皆知,那为什么我不突击学习一下呢?比如从业内人士得知头条最早使用的是Kylin框架,后面慢慢转为ClickHouse,那我必须了解一下两者的不同啊,而且可以结合头条的业务场景。

九、一个关于如何进大厂的小建议

我一直崇尚「曲线救国」的做法,也一直在向别人传播这种做法。现在能力背景不足没关系,只要规划好自己的学习路线,一步步阶梯式往上爬,总可以实现目标。因为我自己二本出身,但我意识的早,大二就开始实习,用项目和实习经历弥补我背景不足,然后一步步走到「offer自由」。很多时候并不是只有巨人才可以成功,你只需要做到行动上的普通人,就可以超过很多思想上的巨人,行动上的矮子。

面试复习准备

自己的知识准备得怎么样,这直接决定了你能否顺利通过一面和二面,所以在面试前来一个知识梳理,看需不需要提升自己的知识储备是很有必要的。

关于知识梳理,这里再分享一下我面试这段时间的复习路线:(以下体系的复习资料是我从各路大佬收集整理好的)

  • 架构师筑基必备技能:深入Java泛型+注解深入浅出+并发编程+数据传输与序列化+Java虚拟机原理+反射与类加载+动态代理+高效IO
  • Android高级UI与FrameWork源码:高级UI晋升+Framework内核解析+Android组件内核+数据持久化
  • 360°全方面性能调优:设计思想与代码质量优化+程序性能优化+开发效率优化
  • 解读开源框架设计思想:热修复设计+插件化框架解读+组件化框架设计+图片加载框架+网络访问框架设计+RXJava响应式编程框架设计+IOC架构设计+Android架构组件Jetpack
  • NDK模块开发:NDK基础知识体系+底层图片处理+音视频开发
  • 微信小程序小程序介绍+UI开发+API操作+微信对接
  • Hybrid 开发与FlutterHtml5项目实战+Flutter进阶

知识梳理完之后,就需要进行查漏补缺,所以针对这些知识点,我手头上也准备了不少的电子书和笔记,这些笔记将各个知识点进行了完美的总结。

最后我在这里分享一下这段时间从朋友,大佬那里收集到的一些2019-2020BAT 面试真题解析,里面内容很多也很系统,包含了很多内容:Android 基础、Java 基础、Android 源码相关分析、常见的一些原理性问题等等,可以很好地帮助我们深刻理解Android相关知识点的原理以及面试相关知识

这份资料把大厂面试中常被问到的技术点整理成了 PDF ,包知识脉络 + 诸多细节;还有 高级架构技术进阶脑图 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

以上内容均放在了开源项目:github 中已收录,里面包含不同方向的自学Android路线、面试题集合/面经、及系列技术文章等,资源持续更新中...

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
Mac上的软件包管理工具
Linux系统有个让人蛋疼的通病,软件包依赖,好在当前主流的两大发行版本都自带了解决方案,Red hat/CentOS有yum,Ubuntu有apt-get
码客说
2019/10/22
3.1K0
MAMP PRO for Mac(专业Web开发环境)
MAMP PRO for Mac是一款专业Web开发环境,可以打开本地邮件服务器,以便通过PHP脚本调度邮件。
Mac软件分享
2022/08/09
1.6K0
MAMP PRO for Mac(专业Web开发环境)
MAMP Pro for Mac(PHP/MySQL开发环境)
MAMP Pro for Mac是一款基于macOS平台的本地服务器软件,可以让用户在本地计算机上搭建Web服务器环境,方便用户进行网站开发和测试。它包括了Apache服务器、MySQL数据库和PHP脚本语言,用户可以使用它来搭建和管理本地的网站、应用和数据库等,同时还支持多个PHP版本和虚拟主机等高级功能。
快乐的小丸子
2023/04/24
2.2K0
转:全新安装Mac OSX 开发者环境 同时使用homebrew搭建 (LNMP开发环境)
Brew 是 Mac 下面的包管理工具,通过 Github 托管适合 Mac 的编译配置以及 Patch,可以方便的安装开发工具。 Mac 自带ruby 所以安装起来很方便,同时它也会自动把git也给你装上。官方网站:http://brew.sh 。
全栈程序员站长
2021/05/19
1.4K0
MAMP Pro for mac/win(PHP/MySQL开发环境)
MAMP PRO一款专业的本地Web服务器开发环境软件。MAMP这几个首字母代表的是Macintosh、Apache、MySQL和PHP。MAMP内含Apache 服务器、PHP安装套件以及MySQL安装套件。只要轻松点选就能安装架站/讨论区/论坛必备的元件。透过Web界面稍作设定,在本地电脑上架设自己专属的网站,都是Apache+Mysql+PHP的集成环境。
捧着风的少女
2022/11/11
1.5K0
MAMP Pro for mac/win(PHP/MySQL开发环境)
Fedora 11 的安装以及 LAMP环境的搭建(二)
        Windows下的同事,很多都使用winrar来压缩和传输文件,所以这个也是不可或缺的,提供对于rar压缩格式的支持
大江小浪
2018/07/25
3730
mamp环境下禁止页面缓存
2018-06-0312:52:23 发表评论 1℃热度 MAMP Pro是一款适用于Mac操作系统的软件。MAMP PRO是专业级版本的经典本地服务器环境的os x软件。MAMP这几个首字母代表苹果的OSX系统上的Macintosh、Apache、MySQL和PHP,顾名思义,你应该知道MAMP的强大功能 啦!MAMP 内含 Apache 服务器、PHP 安装套件以及MySQL安装套件。只要轻松点选就能安装架站/讨论区/论坛必备的元件。透过Web界面稍作设定,在苹果电脑上架设自己专属的网站,就是这 么简
timhbw
2018/06/06
2.3K0
Mac OS X安装php工作环境
1.安装Apche Sudo apachectl start 2.开启php支持 sudo vi /etc/apache2/httpd.conf 找到LoadModule php5_module libexec/apache2/libphp5.so 去掉前面的# 3.编辑PHP.ini sudo cp /etc/php.ini.default /etc/php.ini 4.重启Aache测试环境 sudo apachectl restart 编写文件 sudo vi /Library/WebServer/D
苦咖啡
2018/05/07
1K0
mac php开发集成环境,MAC OS X下php集成开发环境mamp
之前苦于mac上搭建本地服务器之艰辛,找寻好久都没找到一款类似windows上集成的本地服务器环境,诸如phpstudy,xampp,appserv,虽说xampp也有mac版,但不知为何不是Apache启动不了,这里小编为大家分享了MAC OS X 下php集成开发环境mamp教程,下面大家跟着学习啦小编一起来了解一下吧。
全栈程序员站长
2022/09/13
3.7K0
mac php开发集成环境,MAC OS X下php集成开发环境mamp
PHP开发环境搭建工具有哪些?
因为要做php开发,搭建一个能够运行php网站的服务器环境是第一步,传统的php环境软件非常复杂,好在很多公司开发了一键搭建php安装环境,一键进行php环境配置,大大节省了搭建php mysql环境的时间!对老手来说安装配置php环境也不再是一件繁琐的事。
大脸猫
2020/06/27
5.2K1
PHP开发环境搭建工具有哪些?
Mac搭建PHP环境[通俗易懂]
原因:因为Mac下默认php.ini配置的default_socket在/var/mysql/mysql.socket,而后安装的mysql的socket文件大多在/tmp/mysql.socket。
全栈程序员站长
2022/11/08
2.4K0
Mac搭建PHP环境[通俗易懂]
探索7个MAMP本地开发环境的高效替代软件
本地开发环境是Web开发环境中的一种类型,它是指开发者自己的计算机上配置的一套用于开发和测试网站或应用程序的软件集合。这套环境使得开发者可以在本地计算机上构建和测试网站,而无需实时部署到服务器。
侧风
2024/04/08
8480
探索7个MAMP本地开发环境的高效替代软件
Mamp pro 5.1破解版
Mamp 是Mac系统上强大的PHP集成开发环境 mamp代表Macintosh、Apache、MySQL和PHP,即包含Macintosh、Apache、MySQL和PHP四大开发环境。 截图
Inkedus
2020/04/16
1.2K0
Mamp pro 5.1破解版
环境变量详解
 在终端输入的命令行对应着应用程序,如果不是系统自带的命令,那么系统需要环境变量来定位应用程序所在的文件路径。
Fisherman渔夫
2020/02/18
1.3K0
三步将Mac系统默认PHP版本切换为MAMP等扩展环境中的PHP版本
平时做开发的时候大多都是在Mac系统下,开发环境用的是MAMP集成的,但是Mac系统原本就带有Apache的。这种情况下回默认使用系统自带的PHP版本,最近由于项目需要用到PHP7.1的版本,在不升级系统版本的情况下实现切换到MAMP环境的PHP版本!免去系统版本升级麻烦 1.先查出MAMP下面集成的PHP版本 cd /Applications/MAMP/bin/php ls -ls 2.编辑修改 .bash_profile 文件(没有.bash_profile 文件的情况下回自动创建) sudo vim
企鹅号小编
2018/02/06
3.9K0
三步将Mac系统默认PHP版本切换为MAMP等扩展环境中的PHP版本
mac 初次配置apache,及mac下安装mysql
先打开apache,在浏览器上输入    localhost     回车后会如果屏幕上显示:It works!  如下图:
lin_zone
2018/08/15
2K0
mac 初次配置apache,及mac下安装mysql
iPhone手机越狱-逆向砸壳-代码注入
目前13以上系统还没有完美越狱的方案,可以临时使用checkra1n方案对手机进行越狱:
周希
2020/10/19
2.1K0
iPhone手机越狱-逆向砸壳-代码注入
mac搭建lamp开发环境
前段时间,由于一个在公司使用一个开源项目,发现该开源项目不支持PHP集成开发环境,但是使用mac自带的php版本又太低,于是想能不能安装两个版本进行切换,百度了很多方法发现不行。通过百度的多篇文章总结出来的,希望对大家有所帮助。
兔云小新LM
2019/07/22
3K0
如何使用 MAMP 快速搭建 php 环境
有时候网站、项目需要在本地搭建 php 环境,如果还像以前手工配置一个个环境就太复杂了,而且也不是每个人都能掌握这个技能的。后来就出现了很多本地 php 环境包,可以一键搭建本地 php 环境。前面魏
魏艾斯博客www.vpsss.net
2018/06/01
1.9K0
MAC上PHP集成开发环境搭建
用惯了在Windows上配置php开发环境,要在MAC上捣腾一个PHP开发环境还不大习惯,那mac上php开发环境怎么搭建配置呢?有哪些集成软件呢? 本文为你推荐几款常用的mac php环境软件,并介绍这些软件的安装与配置教程,下面一起动手搭建一个macbook php开发环境吧!
骤雨重山
2022/01/17
3.7K0
相关推荐
Mac上的软件包管理工具
更多 >
目录
  • 一、背景
  • 二、笔试
  • 三、字节一面
  • 四、字节二面
  • 五、字节三面
  • 六、一、大体知识储备(方向)
  • 七、如何通过头条笔试?
  • 八、如何准备头条面试?
  • 九、一个关于如何进大厂的小建议
  • 面试复习准备
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档