前言

光阴似箭,日月如梭,时间真的过得飞快。 加上实习,从事 Android 开发,差不多有 5 年了。在上家公司职务、薪酬感觉已经到达了天花板,没有上升的余地。而且在这家公司过于安逸了,想换个有挑战性的岗位。

通过朋友内推参加了腾讯面试。具体部门这边就不说了。面试涉及到的范围很广,设计模式、优化、源码等等,还是具有一定挑战性的,在面试前花了大概三个月的时间准备,在上班的空闲时间刷题,也不枉我准备了这么久啊。

下面分享一下面经:

一面

1.mmap + native 日志优化?

2.广播和 EventBus 的区别?

3.常用设计模式你了解哪些?

4.跨进程通信有哪些?

5.简单讲讲 binder 驱动吧?

6.跨进程传递大内存数据如何做?

7.说说 ConcurrentHashMap 的实现原理说下,初始化大小是多少?

8.启动优化怎么优化?

9.你写的 rxpay 和 rxlogin 具体怎么实现的?

10.kotlin + fullter 方面的

二面

1.单例设计模式都写写,静态内部类是怎么保证线程安全的?

2.synchronized 底层实现原理,ReentrantLock 公平锁与非公平锁。

3.主线程等待所有线程执行完毕,再执行某个特定任务怎么实现?原理和源码看过没?

4.自定义 view 的一般流程,要注意些什么如何优化,点击事件和长按时间分别是怎么实现的?

5.四种启动模式,在源码分析中的原理是怎样的?

6.讲讲 bindService 的过程,你当初是怎么优化后台服务进程的?

7.开发中你都用到了哪些设计模式?说说当时具体的场景。为什么你要用方法工厂,另外两种呢?

三面

1.讲讲 handler 的底层实现原理?

2.说说你做的日志记录优化?

3.你看过 binder 驱动的源码,说说他的内存映射过程,说说客户端等待服务端处理返回的流程,如果要跨进程传递大内存数据你具体会怎么做?简单写一写吧。

4.在公司做过哪些优化?

5.过程中遇到的一些最难解决的问题?

6.提到了动态修复替换加载 so ,那你知道怎么修复 class 吗?怎么修复资源呢?

7.还有什么要问的?

三面之后就是HR面了,没有什么特别好说的东西,这里就省略了。

下面分享一份帮我内推的朋友给我的《Android面试指南》,包含了各个互联网大厂的面试重点。

一、Android基础+进阶

1.Activity启动模式

2.Activity的启动过程

3.进程通讯

4.Android Binder之应用层总结与分析

5.进程保活方法

6.从源码了解handler looper ,messageQueue思路

7.handler如何实现延时发消息postdelay()

8.Android中为什么主线程不会因为Looper.loop()里的死循环卡死?

9.RxJava原理及如何封装使用

10.okhttp源码分析

11.retrofit源码分析

......

12.LeakCanary核心原理源码浅析

13.LruCache 使用及原理

14.ARouter原理

15.注解框架实现原理

16.Android 如何编写基于编译时注解的项目

17.RxJava2+Retrofit2+OkHttp3的基础、封装和项目中的使用

18.Rxjava2.0+Retrofit+Okhttp(封装使用)+MVP框架搭建

19.Android 插件化和热修复知识梳理

20.Android开发中比较常见的内存泄漏问题及解决办法

21.如何检测和定位Android内存泄漏

22.图片占据的内存算法

23.为什么图片需要用软引用,MVP模式中的view接口用弱引用

24.基于DataBinding与LiveData的MVVM实践

25.App稳定性优化

26.App启动速度优化

27.App内存优化

28.App绘制优化

29.App瘦身

30.网络优化

31.App电量优化

32.安卓的安全优化

33.为什么WebView加载会慢呢?

34.如何优化自定义View

二、Java基础+进阶

1.HashMap

2.ArrayList

3.LinkedList

4.Hashset源码分析

5.内存模型

6.垃圾回收算法(JVM)

7.垃圾回收机制和调用 System.gc()的区别?

8.类加载过程

9.反射

10.多线程和线程池

11.创建多线程方式、线程池工作原理

12.设计模式(六大基本原则、项目中常用的设计模式、手写单例等)

13.断点续传

14.Java 四大引用

15.Java 的泛型

16.接口、抽象类的区别

17.从 java 容器类的设计讨论抽象类和接口的应用

三、数据结构与算法面试题

1.常用的数据结构有哪些?

2.数组

(1).如何在一个1到100的整数数组中找到丢失的数字

(2).如何在给定的整数数组中找到重复的数字? (小米)

(3).如何在未排序整数数组中找到最大值和最小值?(字节跳动)

(4).在Java中如何从给定数组中删除多重复制?

(5).大数相加(今日头条)

3.链表

(1).那查询第一个跟倒数第二个呢?(这就不一样了,第一个直接给了头结点,倒数第二个需要从倒数第一个开始查询,走两步) (腾讯)

(2).arrayList底层原理 (滴滴)

(3).如何在一次遍历中找到单个链表的中值?(中国平安)

(4).如何证明给定的链表是否包含循环?如何找到循环的头节点?(优酷)

(5).两个有交叉的单链表,求交叉点 (华为)

(6).如何得到单链表的长度?(360)

(7).如何在不使用递归的情况下逆转单链表?(小米/美团)

(8).怎么判断链表有环? (滴滴)

4.队列&堆栈

(1).如何使用栈实现队列的功能(广州荔枝FM)

(2).两个栈实现一个队列(蘑菇街)

(3).两个队列实现一个栈 (腾讯)

(4).对比一下队列和栈,以及它们底部实现 (腾讯)

5.二叉树

(1).如何在给定的二叉树中执行先序遍历?(百度)

(2).如何实现后序遍历算法?(百度)

(3).如何在给定数组中执行二分法搜索?(苏宁)

(4).已知前序遍历为{1,2,4,7,3,5,6,8},中序遍历为{4,7,2,1,5,3,8,6},它的二叉树是怎么样的?

(5).输入两棵二叉树 A 和 B,判断 B 是不是 A 的子结构。 (爱奇艺)

(6).请实现两个函数,分别用来序列化二叉树和反序列化二叉树(YY)

(7).平衡二叉树和红黑树的区别?(字节跳动)

(8).什么是平衡二叉树,它有什么特征 (美团)

(9).B 树,B+树

6.HashMap

(1).HashMap的底层原理是什么?线程安全么? (百度)

(2).HashMap中put是如何实现的? (滴滴)

(3).谈一下hashMap中什么时候需要进行扩容,扩容resize()又是如何实现的?

(4).什么是哈希碰撞?怎么解决? (滴滴)

(5).HashMap和HashTable的区别 (小米)

(6).HashMap中什么时候需要进行扩容,扩容resize()是如何实现的? (滴滴)

(7).hashmap concurrenthashmap原理 (美团)

(8).arraylist和hashmap的区别,为什么取数快?(字节跳动)

7.图

(1).旋转输出矩阵

(2).给定一个矩阵 int matrixA[m][n],每行每列都是增序的,实现一个算法去寻找矩阵中的某个元素 element. 搜狗

8.排序算法有哪些?

9.查找算法

10.串

四、计算机网络部分

1.HTTP协议

2.TCP/IP协议

3.TCP的三次握手与四次挥手理解及面试题

4.网页中输入url,到渲染整个界面的整个过程,以及中间用了什么协议?

5.TCP和UDP的区别?

6.HTTP的几种请求方法具体介绍

7.HTTP请求和响应报文的格式,以及常用状态码

8.一个 TCP 连接上面能发多少个 HTTP 请求

......

由于篇幅限制,展示了部分内容截图,需要这些文档资料的,可以点赞支持一下我,然后【点击这里】免费阅读下载。

面试准备建议

1.基本信息

  • 简历不要太花哨, 你是应聘的技术, 不是设计师
  • 简历把一些基本信息要说清楚(无关的不要写, 比如头像之类的)
  • 有个人博客, 跟 GitHub 的写上, 若没有内容那就算了,因为你写了,面试官势必会满怀期待地点进去看,如果这个时候呈现给他的却是空白页或者寥寥几行内容的话,这种一落千丈的感受会给面试官留下非常不好的印象
  • 应届毕业生需写上相关证书之类, 有经验的可不写
  • 简历控制在两页 A4 纸

2.项目经验

  • 一般写 2, 3个代表性的项目就好,优先写本职工作相关的
  • 时间为倒序
  • 说明你在项目当中的职责作用
  • 项目模块需要了解大概逻辑与思路,以及一些关键的技术点,以防面试官问到
  • 没有项目经验的也要模仿一两个小 Demo

3.须知

  • 自己亲自做的东西一定要明白, 如果不是自己亲自做的, 请慎重骗面试官
  • 问的时候会问一些知识点相关的话题,比如你的数据是需要 api 交互的,那可能会问 http 相关, json 数据解析相关,缓存相关,图片加载相关等
  • 对用到的知识点虽用不着一定要看源码的地步,但是最好要懂原理,比如图片加载一定要知道二级缓存,一些常见的缓存算法

4.注意事项

  • 去面试前一定要花点时间了解下你面试的这家公司(本身有自己产品的下载体验一下,以防面试过程中问到,或者可以给产品提点意见)
  • 面试的时候态度要谦虚点
  • 学习能力很重要(一定要让面试官感受到你是一个好学的人)
  • 个人兴趣(不要提什么打游戏, 唱歌之类的, 可以说一下业余时间提下自己经常上一些技术社区,看一些技术博客之类的)
  • 除了基本的知识点, 面试官通常都会问一些比较深的领域(可能你没有接触过,但不要气馁, 面试官在考察下你的技术的深度, 这些领域一般包括设计模式, 虚拟机, 插件化, React Native之类的)

5.面试前一定要多刷刷面试题

面试前多刷面试题,是对面试最起码的尊重。

虽然我在这里不提倡大家临时抱佛脚,但是适当地抱一抱佛脚也比那些什么都不准备,就直接裸面的人要好很多,至少你的态度是端正的。

你来面试也是需要花费面试官时间的,简单准备一下不香嘛?万一你运气好,恰好这家公司职位扩充,降低面试要求了呢?你这么随便,岂不是把白花花的机会全都给浪费掉了嘛!

最后

如果你想去一家不错的公司,但是目前的硬实力又不到,我觉得还是有必要去努力一下的,技术能力的高低能决定你走多远,平台的高低,能决定你的高度。

如果你通过努力成功进入到了心仪的公司,一定不要懈怠放松,职场成长和新技术学习一样,不进则退。

30K入职腾讯,全靠这份606页的Android面试指南的更多相关文章

  1. “入职一年,那个被高薪挖来的Android开发被劝退了。”

    其实,在很多小伙伴的想法中,是希望通过跳槽实现薪酬涨幅,可是跳槽不是冲动后决定,应该谨慎啊~ 01 我的学弟,最近向我吐槽,2020 年上半年入职一家公司,当时是高薪挖走的他,所谓钱到位,工作也是充满 ...

  2. 我,35岁Android开发,高龄入职鹅厂,试用期未过被劝退......今年实惨

    今天,笔者盘点.综合分享一位腾讯员工的"心声".这份心声中干货还是不少的,主要关于腾讯的一些职场生活--希望这些"干货"能对你有所帮助. 什么部门?给补偿吗? ...

  3. 初入职场的建议--摘自GameRes

    又开始一年一度的校招了,最近跑了几个学校演讲,发现很多话用短短的一堂职业规划课讲还远远不够,因为那堂课仅仅可能帮大家多思考怎样找到一份合适的工作,并没有提醒大家怎样在工作中发展自己的职业. 见过这么多 ...

  4. 快的打车 技术部 在 杭州 招聘 #年前面试 年后入职#架构师 - 内推网(neitui.me)

    快的打车 技术部 在 杭州 招聘 #年前面试 年后入职#架构师 - 内推网(neitui.me) 陈丹 (cd**@kuaidadi.com) 01-18 发布了内推 #年前面试 年后入职#架构师 • ...

  5. 成功入职ByteDance,分享我的八面面经心得!

    今天正式入职了字节跳动.办公环境也很好,这边一栋楼都是办公区域.公司内部配备各种小零食.饮料,还有免费的咖啡.15楼还有健身房.而且公司包三餐来着.下午三点半左右还会有阿姨推着小车给大家送下午茶.听说 ...

  6. 入职一个月后 对.net的感想

    我本来应该找Java工程师的岗位的,因种种原因进入了.net开发工程师.然后,我进入了一扇新世界的大门. 1.语法不同,思想相同. 刚入职那几天,每天都好蒙,.net代码语法啥的都和Java不一样,a ...

  7. 新人入职100天,聊聊自己的经验&教训

    这篇文章讲了什么? 如题,本屌入职100天之后的经验和教训,具体包含: 对开发的一点感悟. 对如何提问的一点见解. 对Google开发流程的吐槽. 如果你 打算去国外工作. 对Google的开发流程感 ...

  8. Oracle DBA从小白到入职实战应用

    现如今Oracle依然是RDBMS的王者,在技术上和战略上,Oracle仍然一路高歌猛进,并且全面引领行业迈入了云时代,伴随着12cR2即将在2016年正式发布,学习Oracle之路依旧任重道远,目前 ...

  9. ERP员工入职登记(五)

    在数据库中添加链接的地址:

随机推荐

  1. 基于 Electron 实现 uTools 的超级面板

    前言 为了进一步提高开发工作效率,最近我们基于 electron 开发了一款媲美 uTools 的开源工具箱 rubick.该工具箱不仅仅开源,最重要的是可以使用 uTools 生态内所有开源插件!这 ...

  2. 5.1 万 Star!不用 root 就能连接控制安卓的开源工具

    [导语]:一款在 PC 端控制安卓设备的小工具.可在 PC 和安卓设备间互通剪贴板.用电脑键盘打字.传输文件.安装程序.截图.录屏等等功能. 简介 scrcpy 可以显示并控制通过 USB (或 TC ...

  3. linux密码策略

    1.密码过期策略 # vim /etc/login.defs PASS_MAX_DAYS 99999 # 一个密码最长可以使用的天数: PASS_MIN_DAYS 0 # 更换密码的最小天数: PAS ...

  4. 8、oracle密码过期设置

    8.1.登录到oracle实例: [oracle@slave-node2 ~]$ echo $ORACLE_SID orcl [oracle@slave-node2 ~]$ sqlplus sys/1 ...

  5. POJ 3761:Bubble Sort——组合数学

    题目大意:众所周知冒泡排序算法多数情况下不能只扫描一遍就结束排序,而是要扫描好几遍.现在你的任务是求1~N的排列中,需要扫描K遍才能排好序的数列的个数模20100713.注意,不同于真正的冒泡排序算法 ...

  6. AcWing 1290. 越狱

    监狱有连续编号为1~n的n个房间,每个房间关押一个犯人.有 M种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人信仰的宗教相同,就可能发生越狱.求有多少种状态可能发生越狱. #include< ...

  7. SpringMVC(9)实现注解式权限验证

    对大部分系统来说都需要权限管理来决定不同用户可以看到哪些内容,那么如何在Spring MVC中实现权限验证呢?当然我们可以继续使用servlet中的过滤器Filter来实现.但借助于Spring MV ...

  8. javascript 可多选的下拉框 multiselect 动态删除option值,动态添加option值,动态生成表格

    首先引用一个写的很好的博客http://www.cnblogs.com/landeanfen/p/5013452.html 我使用的是bootstrap-multiselect,实现功能是 选择下拉框 ...

  9. 今日英语 词组——come together

    come together 1. 解释含义 词面意思 一起过来 实际意义:重归于好,汇集 英英释义:if two or more different people or things come tog ...

  10. Spring Boot入门学习必知道企业常用的Starter

    SpringBoot企业常用的 starter SpringBoot简介 SpringBoot运行 SpringBoot目录结构 整合JdbcTemplate @RestController 整合JS ...