炸裂!一次 Android 实习经历告诉你:老爸不是张一鸣,该用什么技巧进字节
**算法题:**两数之和(leetcode 第一题,https://leetcode-cn.com/problems/two-sum/,要求时间复杂度 O(n))
(太紧张了,没优化到 O(n),竟然给了 2 面)
第 2 面(技术,70min)
项目(10min)
**算法题:**判断一个字符串是否是一个 IPV4
**算法题:**连续子数组的最大和(剑指 Offer 上的题)
自我介绍
项目技术点详解
写过什么自定义 View
OkHttp 代码看过吗,用了什么设计模式
MVC、MVP 区别,项目中的实现。
LiveData 和 EventBus 的相关讨论,真的是讨论,畅所欲言
看过哪些源码
SharedPreference 相关
Android 动画了解吗,用过什么
TCP、UDP 区别,面试时的语音用的是什么,为什么要这么用。
代码题,5 个线程对一个 int 进行累加到 1000.
Java 异常体系(运行时与非运行时异常的区别)
HashCode 与 equals 的区别
JVM 内存区域划分(程序计数器,虚拟机栈,本地方法栈,堆,方法区,运行时常量池)
JVM 内存回收方法(判断对象是否已死<1 面那个问题>,新生代老年代的垃圾回收算法<复制算法,标记-整理>)
哪些对象可以作为 GC Roots
数据库中 delete 和 drop 的区别
数据库事务的使用场景
数据库三大范式
数据库索引的创建原则
数据库索引底层实现(B+树)
线程,进程,程序的区别
死锁的产生条件
模式继承与模式的优劣势
第 3 面(技术,40min)
项目
**算法题:**打印 1-n 之间的素数
**智力题:**25 匹马,5 个赛道,最少多少次可以知道跑的最快的 5 匹马(运气爆棚,和百度一模一样)
**设计题:**设计一个下载器的接口
第 4 面(电话 hr 面,15min)
问了些基本问题
面试总结
总体来说面试感觉比较常规,没想象中的难。重点是我觉得就我的面试感觉来看。客户端开发这一块,我觉得头条着重考察的是你的基础知识是不是过关,然后 coding 的能力如何。最后一轮的面试官也是说,好多开发常用的工具,不在实际的开发环境中,只是自己做些个人项目是很难涉及到的,新人只要基础知识过关,coding 能力过关,进来学就行了。
所以除了基础知识部分外,觉得算法题这块是比较重要的,尽量做到 bug free,时空间复杂度最优,代码整洁规范,然后写完主动给面试官跑一下 test case,会给面试官留下比较好的印象,毕竟客户端开发一版面的算法题都不难。
面试字节跳动的划重点笔记看一下
一、代码能力是研发面试考察的核心!
说句实话,研发面试考察最核心的能力就是... ...代码能力!
**代码能力是计算机专业的基础。**能否在有限时间内写出清晰简洁、逻辑清晰的代码,不仅可以考察出候选人是否有扎实的基本功,也可以让面试官对候选人在未来是否能够胜任相应的岗位工作有一个基础判断。
平时写的代码多不多,面试之前有没有做过准备,有经验的面试官一眼就可以判断出来。这里给大家分享三点建议:
1、加强基本功,增加代码量
多看优秀的源代码,认真从效率、逻辑等方面分析他人如何简洁明晰地实现一个函数,这对提升自己的基本代码能力有很大的帮助。
2、面试前多做题,保持手感很重要
面试之前多做些练习,这不仅可以加快答题速度,也会让自己养成较为规范的答题习惯。
3、复盘笔试答案,思考更优解
最后,不少面试官喜欢在面试的时候复盘笔试题目,与候选人讨论题目的更优解,从而考察考生是否具备主动思考能力。
二、不反对刷题不过更希望大家举一反三
在面试过程中,经常会有同学非常骄傲地坦白道:“我没有刷题。”
面试官们不反对刷题,甚至希望同学们在大量做题之后,能够灵活运用、举一反三。
大量做题不仅可以在短时间内提高同学们的解题速度,也会在一定程度上帮助你拓展自己的答题思路。
当然,**如果发现同学刷题,面试官也会变种问题,从侧面考察同学是否死记硬背答案。**作为春招的面试官、你未来的潜在同事,我们更希望同学们能够灵活贯通。
所以说,该准备准备,该刷题刷题,临时抱佛脚至少体现了你对面试重视是不是?等你题目刷到一定程度,你就会发现自己的能力有了一个量变到质变的提升。
三、项目描述要突出项目重点,表述逻辑要清晰
参与面试的同学们大多都有实习经历。在公司的大环境下,你会在实践中不断夯实代码基础,也会有更多机会接触到最新的技术。
面试官们希望大家对过往的实习经历做更深入的思考,不是简简单单描述你在哪里做了什么。毕竟面试官需要在短时间内看到你的个人能力。发挥主观能动性,多在几种不同方法之间做比较,给出在思考之后得出的最优解,会显得你格外与众不同。
除此之外,**思考的逻辑性和表达能力也是面试时考察的重点。**在面试时切记要简化答案,能表达清楚想法就好,项目描述时只需要简单介绍项目背景,并着重突出项目亮点就可以啦!千万不要过度包装,要知道坦诚清晰可是「字节范儿」中很重要的一点哦~
四、跨专业面试不会受到区别对待,技术实力最重要
面试官们常常会被问到:非计算机专业的同学跨专业面试会不会受到区别对待?
在这里我想强调:完全不会!
不同岗位对具体的专业能力要求不同,拿算法岗位举例,只要你代码基础功底过硬,数理能力够强,又对所面试岗位是发自内心的热爱,就算你是学挖掘机技术的,面试官们也是想给你发 offer 的。
**算法行业的通用能力就是代码硬实力。**如果不具备这种能力,在实际工作中就总会感觉不自信,受人制肘。所以非科班出身的同学们不用受自己的专业所限,但一定要多多锻炼,努力提升自己。
不过这里也想真心地提醒大家几句,千万不要盲从跟风选择自己的职业方向,**每个领域都有自己广阔的发展空间,适合自己的才是最好的。**越热门的岗位对基础的要求越高,面试官在面试的时候是看得到笔试成绩的,所以还希望大家在面试过程中诚实一点,不懂装懂可是会减分的哦!
五、哪些行为一定是减分项?
虽然面试考察最多的是技术基础和代码能力,但是从心理学的角度分析,第一印象也是相当重要的啊喂!
为了这场面试,逗比的我收敛了表情包,穿上了帅气的格子衫,还把头发梳成了面试官的模样,你说你穿着拖鞋、脸都不洗就来面试是不是有点伤我心了。
如果同学们选择的是视频面试,**希望大家在面试前做好充分的准备工作。**面试开始之后,如果遇到候选人迟到、没有调试设备、网络不畅通、麦克风关掉、面试环境嘈杂等情况,面试官会给一定时间调试,但是面试体验会受到一定影响,心理上可能会减分的哦!
**诚实守信是做人第一要务,也是字节跳动用人的底线。**即使是视频面试,面试官也是可以看到考生行为的!答应我,像类似「一边考试一边用 ipad 查答案」这种事情千万不要干好嘛!作为考官的我在摄像头另一边看到了也是很尴尬的......
最后,如果你现在的学习没有方向不系统,学了又总是忘记没有效果,那么你可以参考一下我下面的学习路线,还有配套的学习资料,有需要的可文末自取:
Android 技术学习路线(可参考)
总共分为 6 个部分:
Java 基础(★★)
Java 高级(★★)
Android 基础(★★★)
Android 高级(★★★)
Android 项目(★★★)
项目面试常见问题(★★★)
一、Java 基础(★★)
面向对象思想
多态
异常处理
数据类型
Java 的 IO
集合
Java 多线程
相关的学习资源:(文末可自主领取)
Java 高级(★★)
Java 中的反射
Java 中的动态代理
Java 中的设计模式 &回收机制
Java 的类加载器
相关的学习资源:(文末可自主领取)
Android 基础(★★★)
Android 基本常识
Activity
Service
BroadCastReceiver
ContentProvider&数据库
相关的学习资源:(文末可自主领取)
Android 中的布局
ListView
JNI & NDK
Android 中的网络访问
Intent
Fragment
Android 高级(★★★)
Android 性能优化
Android 屏幕适配
AIDL
自定义控件
Android 中的事件处理
Android 签名
A
ndroid 中的动画
评论