基本情况

本人系非985非211普通本科生一枚,有实习有项目经历但成绩普通,在面试前刷了很多面经、面试题,这里也把自己的分享下,做个回报好了,顺便攒攒人品,一到这种时候人就迷信起来了。

面试是以视频面试的形式进行的,在牛客网里进行,界面我就不贴了,没截图。

首先是面试的基本流程,刚开始是自我介绍。随后面试官会问你一些基本问题。接下来就是根据你的简历啊、前面说的内容啊来问一些针对性的问题,然后会问很多基本知识,像是计算机网络、操作系统、编译原理这些。

一面

面我的面试官是做 iOS 的,就没问我 Android 的。

1、ipv6 答不上来
2、http 状态码
3、http 请求
4、https 请求过程
5、传送大图到服务器,进度功能实现: 这里扯了很多,一开始我理解成断点续传了,后面就是给的方案是 http 每次传一部分,根据状态码是否成功来处理,后面面试官觉得这个答案不行,让我从 TCP UDP Socket 这些角度去想,我说这些实现起来就更简单了,比如TCP就双向通信之类的。。
6、gc
7、数据库索引,b tree b+ tree
8、设计模式
9、进程间通信,我说了几个,面试官说可以说 Android 的,好得!
10、算法: 字符串匹配,返回对应 index, 我用的 HashMap 实现。

大多数都是问的网络,网络不是我擅长的领域,有些别的想不起了。。。

不止是题目,面试官会深入进去怼的,别问我怼啥,被怼的忘光了都!

面试官人很好,还强调了他低头是写面试评价。

二面

面试官依旧很 OK,可惜网络状态不佳。

面试官:我看上一面问了你网络层面比较多的问题,那我接着问了
我:。。。好。
先自我介绍

1、Http1.1 和 Http 1.0 区别
2、keepalive 作用
3、keepalive 底层实现,这块我是不清楚的,我就猜测了下给了他一个答案。
4、操作系统怎么在堆上和栈上分配内存,我不太清楚,就说了 Java 虚拟机是咋分配的,结果问了我 Java 虚拟机是咋在操作系统上分配的,对不起我不知道!(后面强调了 c 的 api,我还是母鸡啊!)
5、操作系统进程和线程
6、虚拟内存
7、虚拟内存的缓存,我不清楚,依旧给了个猜测
8、手写单例,写了双重检索的,后面问我有别的吗,我说了静态内部类实现的,问我为啥静态内部类安全。
9、Android Framework,我问是 AMS 那些的吗,面试官说那太复杂了,你说下 handler , loop吧,然后问了一些相关的问题。(感动啊)
10、广播和本地广播的区别,实现原理
11、你用 map 写个 lru 吧,我说能用 LinkedHashMap 吗,不能, 后面我说了个思路,面试官觉得不行,然后说了 LruCache 怎么实现的, LinkedHashMap 怎么实现的,我说 LinkedHashMap 是用了 HashMap,在里面维护了一个双向链表,每次访问数据的时候修改链表。后面我就打算仿写一个 LinkedHashMap 来实现,多亏面试官即使打断,这个太费时间了,就不用写了。
12、手写生产者消费者,这里面试官一边看代码一边提问题,我跟着问题修改代码,其实就是把一个比较low 的生产者消费者优化成了面试官想要的样子(面试官在这里终于笑了)。
13、问问题环节
Q:我想了解下相关的业务
A:这个职位是最后统一定的,我不能告诉你
Q: 问评价
A: 还是不能告诉你。
over

同样大致问题是这些,其他的也想不起来了,这块网络操作系统混合双打。

面试官人很棒,会诱导你慢慢回答,而且考虑很周到。

补充

好像还有个 rxjava 的问题,这里补充下

一面问我 rxjava,我说我之前封装过一个 rxbus,来实现消息总线,后面我是说了下消息总线对代码的影响还是比较大的,我到后面是尽量避免这样的操作。

二面问我,一面评价说你觉得 rxjava 并不好,我赶紧说不是不行,rxbus 只是 rxjava 功能的一小部分,而是消息总线这样的方案有利有弊。

后面说rxbus 具体封装 ,太久远了想不起来了,然后说了 rxjava 其他的用法和优点这一类的。

后来问我不用消息总线怎么实现通信,我说了可以用原生的方式 startActivityForResult 之类的。

跨Activity怎么办?

所以我说消息总线这些有利有弊,应该在设计上尽量避免这样的操作。

三面

  1. 自我介绍,介绍了自己实习写的刷新加载的组件
  2. 问我自己组件里怎么解决的嵌套滑动冲突,三个方面实现完美分发事件
  3. 说 retrofit 动态***这块
  4. retrofit 动态***里面如果传的不是 interface 怎么办,这块我不清楚,我就直接说不太清楚,然后说了 retrofit 关于注解的处理
  5. 注解生命周期,编译时注解解析
  6. 你用过 weex,说下weex实现原理,我说我没有看过 weex 源码,但是我实现过一个动态页面渲染框架,说了下我的渲染过程和实现方案。
  7. 最近想学的技术,说了音视频,但是因为准备春招放下了
  8. 为什么想学,说了自己之前做一个 APP,里面播放器无法使用没认证的 Https 请求,打算自定义一个播放器,在底层处理证书这块,然后在说了下不知道这样的方案可不可行。
  9. 使用 https 请求这个不难的, 我说因为我这个是自己签的,就没法认证。
  10. 那你 okhttp 里面怎么认证的, 说了拦截器
  11. 还有个 ConcurrentHashMap 同步方案, 然后问了 CAS
  12. 环状链表
  13. TCP握手挥手

问问题环节

跟二面一样的问题,顺便问了下今年的怎么招聘的,凉面太多看的我很慌张。

一二三面问题可能搞混,顺序有些打乱,有些问题可能记不清了,三面面试官依然棒,虽然问题节奏很快,但是问题都很棒。

健忘症想起来可能还问了这些(记不起来第几面的了,大部分在第二面吧)

  1. 锁, synchronized 和 ReenTrantLock
  2. 抢占式锁和非抢占式锁,ReenTrantLock 怎么实现非抢占式
  3. notify 和 sleep 区别
  4. onTouch 和 onClick (这个我隐约中好像被问过
  5. 注解处理器,这个我二面三面都有扯到,因为自己实现过动态路由的简单功能
  6. cookie 和 session 记得没答好这个

两星期后收到了offer,终于赶在毕业前上岸了

经验总结

总的来说,自己如果有想要去的大公司,一定要提升好自己,让自己的能力和素质与公司匹配的上,我也一直相信,机会永远是留给有准备的人。

在字节面试前我也准备了很久,刷了很多大厂面试题,知识点整理出来分享给大家:

Java基础

  • Java Object类方法

  • HashMap原理,Hash冲突,并发集合,线程安全集合及实现原理

  • HashMap 和 HashTable 区别

  • HashCode 作用,如何重载hashCode方法

  • ArrayList与LinkList区别与联系

  • GC机制

  • Java反射机制,Java代理模式

  • Java泛型

  • Synchronized原理

  • Volatile实现原理

  • 方法锁、对象锁、类锁的意义和区别

  • 线程同步的方法:Synchronized、lock、reentrantLock分析

  • Java锁的种类: 公平锁、乐观锁、互斥锁、分段锁、偏向锁、自旋锁等

  • ThreadLocal的原理和用法

  • ThreadPool的用法和示例

  • wait()和sleep()的区别

Java高阶

  • Java虚拟机,Java运行,Java GC机制(可达性分析法,引用计数法)

  • Java对象的完整生命周期

  • JVM内存模型

  • 进程间通信,线程间通信

  • JVM类加载机制

  • Java引用类型

  • 设计模式:除常用设计模式之外,特别的,反射机制,代理模式

  • HTTP协议和HTTPS协议

  • Socket协议,Socket实现长连接

  • TCP和UDP协议

  • HTTP协议中GET和POST的具体实现

  • 序列化和反序列化

  • 线程池的实现原理

  • 数据库基础知识:多表查询、索引、数据库事务

数据结构及算法

数据结构

  • 栈和队列

  • 数组和链表,自定义一个动态数组

  • Hash表,及Hash冲突的解决

  • 二叉树

  • B+ B-树

  • 基础排序算法:重点 快排、归并排序、堆排序(大根堆、小根堆)

  • 快排的优化

  • 二分查找与变种二分查找

  • 哈夫曼树、红黑树

  • 字符串操作,字符串查找,KMP算法

  • 图的BFS、DFS、prim、Dijkstra算法(高阶技能)

  • 经典问题:海量数据的处理 (10亿个数中找出最大的10000个数 TOP K问题)

算法

  • 分治算法

  • 动态规划

  • 贪心算法

  • 分支限界法

Android基础

  • Application生命周期

  • Android Activity生命周期

  • Android Service、IntentService,Service和组件间通信

  • Activity的onNewIntent

  • Fragment的懒加载实现,参数传递与保存

  • ContentProvider实例详解

  • BroadcastReceiver使用总结

  • Android消息机制

  • Binder机制,共享内存实现原理

  • Android 事件分发机制

  • Android 多线程的实现:Thread、HandlerThread、AsyncTask、IntentService、RxJava

  • ActivityThread工作原理

  • 嵌套滑动实现原理

  • RecyclerView与ListView(缓存原理,区别联系,优缺点)

  • View的绘制原理,自定义View,自定义ViewGroup

  • View、SurfaceView 与 TextureView

  • 主线程Looper.loop为什么不会造成死循环

  • ViewPager的缓存实现

  • requestLayout,invalidate,postInvalidate区别与联系

  • AndroidP新特性

  • Android两种虚拟机

  • ADB常用命令

  • Asset目录与res目录的区别

  • Android SQLite的使用入门

Android开发高级

各种原理,经典第三方库源码系列

  • 自定义LayoutManager,RecyclerView中如何自定义LayoutManager

  • VLayout实现原理,即如何自定义LayoutManager

  • Glide加载原理,缓存方案,LRU算法

  • Retrofit的实现与原理

  • OKHttp3的使用,网络请求中的Intercept

  • EventBus实现原理

  • ButterKnife实现原理

  • RxJava实现原理

  • Dagger依赖注入

  • 热修复实现原理,解决方案

  • 组件化原理和解决方案

Android系统

Android Studio编译过程

其中使用到的编译工具:

aapt、aidl、Java Compiler、dex、 zipalign

主要步骤描述:

1. 通过aapt打包res资源文件,生成R.java、resources.arsc和res文件(二进制 & 非二进制如res/raw和pic保持原样)

2. 处理.aidl文件,生成对应的Java接口文件

3. 通过Java Compiler编译R.java、Java接口文件、Java源文件,生成.class文件

4. 通过dex命令,将.class文件和第三方库中的.class文件处理生成classes.dex

5. 通过apkbuilder工具,将aapt生成的resources.arsc和res文件、assets文件和classes.dex一起打包生成apk

6. 通过Jarsigner工具,对上面的apk进行debug或release签名

7. 通过zipalign工具,将签名后的apk进行对齐处理。

移动开发外围

服务器开发相关

SpringBoot技术

Restful API开发

网络协议理解:TCP/IP、HTTP/HTTPS、OSI七层协议

授权认证协议: OAuth2.0 等

基本的数据库技术

数据缓存技术:Memcached、Redis,Web缓存原理

消息队列技术

监控、日志分析技术

前端开发相关

前端开发知识很多,框架层出不穷,本质的东西却只有以下这些。

核心必备:HTML、CSS、JavaScript

入门提高:浏览器兼容性、自定义UI和动效

中级技能:框架层出不穷,当前以vue.js、react.js 为核心

协作开发技能:包管理、模块化,工具采用 npm、webpack等

高级技能:框架原理源码研究

开发调试各种工具

性能分析工具:Memory Monitor

性能追踪及方法执行分析: TraceView

视图分析:Hierarchy Viewer

ApkTool- 用于反向工程Android Apk文件的工具

Lint- Android lint工具是一个静态代码分析工具

Dex2Jar- 使用android .dex和java .class文件的工具

代码改变世界,要早日成为技术大牛,程序员肩上的担子可是很重啊。趁现在开始,还不晚!

最后祝愿你也能顺利拿下大厂offer,共勉!

双非本科字节跳动Android面试题分享(已拿offer)的更多相关文章

  1. 双非本科字节跳动Android面试经验和心得体会分享(已拿offer)

    新人报道,没有什么可分享的,就记录一些自己求职的体会和心得. 我是在校招补录的时候参加了今日头条的招聘,岗位是Android开发,最后成功拿到了入场券.但是这也丝毫不值得骄傲,大家都知道:技术日新月异 ...

  2. 朋友的一年工作经验跳槽字节跳动社招经历分享(已拿offer)

    虽然已经临近年末,但是还是萌生要看新机会的想法,主要的原因是觉得在目前的岗位上技术增长遇到的瓶颈,因此想去做一些更有挑战的工作.因为仍然准备继续在深圳工作,因此选定了三家公司,腾讯.字节跳动和 sho ...

  3. 字节跳动实习面经分享(已拿offer附攻略)

    大家好,我是bigsai,今天给大家分享自己字节跳动面试经验分享. enum我面得岗位是后台实习开发,具体部门是懂车帝,总体感觉就是字节的流程真的好快,只要安排面试,那流程接着很快. 大概是上上周投递 ...

  4. 一份热乎的字节跳动客户端面经,已拿Offer

    字节面试过程: 4月4号进行内推,7天的简历评估,11号接到电话面试,尽管猝不及防回答仓促,但好在前期准备充分,通过.14号现场面试,次日收到通知,通过,二面.三面都很顺利.20号进行HR面,26号收 ...

  5. 双非本科Android开发,如何逆袭拿到大厂 Offer?

    从2020年3月18日投出第一份暑期实习简历至今,已经过去400多天.我也尘埃落定,即将去CVTE做Android开发. 休息了很长时间,如今已经能够很平静地回首这段历程,写下这篇文,致敬曾经走过的漫 ...

  6. 谁说双非本科就一定无缘阿里?H哥粉丝6面通过,喜提Offer!

    本文来自作者投稿(原作者:小胖儿),原作者是一位2021届本科毕业生,就读于一所双非(非985.非211)院校,在今年2月份的时候,我曾经帮他指导过简历,并且根据他的简历内容帮他提了一些可能会问到的问 ...

  7. 字节跳动Android实习面试难吗,应该如何应对?

    字节跳动的面试难不难其实很难去非常准确的定义,但是能肯定的一点是,字节跳动的面试题都很有水平,真正考察了该岗位在以后工作中需要的能力. 大学学的Java后面又自学Android方向,跟着老师在实验室做 ...

  8. 一周内被程序员疯转3.2W次,最终被大厂封杀的《字节跳动Android面试手册》!

    一眨眼又到金三银四了,不知道各位有没有做好跳槽涨薪的准备了呢? 今天的话大家分享一份最新的<字节跳动Android面试手册>,内容包含Android基础+进阶,Java基础+进阶,数据结构 ...

  9. 非科班双非本科投的337家Java后台(励志)

    考试结束,班级平均分只拿到了年级第二,班主任于是问道:大家都知道世界第一高峰珠穆朗玛峰,有人知道世界第二高峰是什么吗?正当班主任要继续发话,只听到角落默默想起来一个声音:”乔戈里峰” 前言 文章出自h ...

随机推荐

  1. 17、lnmp_php编译安装

    17.1.FastCGI介绍: 1.什么是CGI: CGI的全称为"通用网关接口",为http服务器与其他机器上的程序服务通信交流的一种工具,CGI程序 必须运行在网络服务器上:传 ...

  2. 3、搭建 rsync备份服务器

    yum install rsync -y rsync(873):数据同步,把一台服务器上的数据以何种权限同步到另一台服务器上,是linux 系统下的数据镜像备份工具.使用快速增量备份工具Remote ...

  3. vue elementui table 内按钮跳转页面

    vue : <el-table-column label="操作" v-if="isColumOperate"> <template slot ...

  4. POJ 1696 Space Ant 点积计算夹角

    题意: 一只特别的蚂蚁,只能直走或者左转.在一个平面上,有很多株植物,这只蚂蚁每天需要进食一株,这只蚂蚁从起点为(0,miny)的点开始出发.求最多能活多少天 分析: 肯定是可以吃到所有植物的,以当前 ...

  5. JS中的单例模式及单例模式原型类的实现

    单例模式 单例模式的定义: 保证一个类只有一个实例,并提供一个访问它的全局访问点 通过一个简单的例子来了解单例模式的作用: class Div { constructor() { return doc ...

  6. CentOS-Docker安装PostgreSQL(单点)

    下载镜像 $ docker pull postgres 创建目录 $ mkdir -p /usr/postgres/data $ chmod -R 755 /usr/postgres/data 运行镜 ...

  7. 【IllegalArgumentException】: object is not an instance of declaring class

    java.lang.IllegalArgumentException: object is not an instance of declaring class 日前在调试动态代理的例子中,出现以上报 ...

  8. 打通“任督二脉”:Android 应用安装优化实战

    疑问: (1)了解APK安装流程有什么好处 (2)了解APK安装流程可以解决什么问题 一.可以在安装流程里做什么 安装就分为下面三个阶段,每个阶段可以做些什么工作,可以帮助我们优化安装流程,解决安装后 ...

  9. 2shell中处理字符串,字符串的截取、替换

    0.字符串的小知识点 1.字符串的截取 1.1从指定位置开始截取 1.2 从指定字符(子字符串)开始截取 1.3字符串截取的总结 1.4 按指定要求截取 2.字符串的拼接 3.字符串的替换 0.字符串 ...

  10. 【重学Java】多线程进阶(线程池、原子性、并发工具类)

    线程池 线程状态介绍 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态.线程对象在不同的时期有不同的状态.那么Java中的线程存在哪几种状态呢?Java中的线程 状态被定 ...