2020互联网寒冬之下,作为一个Android老码农,是如何进入腾讯的?
由于众所周知的原因,原生Android开发如今已经日渐凋敝,作为一个Android程序员,不仅要会Java,Kotlin,JavaScript,Css,Html,还要会Flutter,C++,FFmpeg,Linux等相关知识。
笔者从7月份开始面试,到8月中旬截止(因为腾讯已经面试通过,自己面试面的也累了,就决定去腾讯了) 接下来就说说各家的面试题,一共面试了快二十家公司,既有外包,也有中小型企业,也有准备D轮甚至上市的C轮企业,更有BAT等知名企业。
接下来就一一说一下各家公司的面试题。 也建议各位面试的时候不要上来就直奔BAT等,大厂面试官的技术广度与深度也不是刚出来面试的你,能搞定的。最好先去一些小公司看看他们问的哪些东西,自己回去在查漏补缺一下,刷书大厂的面试题,最后去大厂。 最后祝各位能进入自己心仪的公司。
按照面试的时间顺序来一一罗列各家公司的面试题。(记忆可能出现纰漏,哈哈,各位看看就好,有些公司的面试可能比较常规,就没有什么特别的印象)
武汉佰钧成(外包OPPO,自家面试官)
因为是周六的专场面试,也不用请假,所以马上就参加了这家公司的面试。 两轮面试
- Activity的启动流程
- Activity的启动模式,应用场景
- 如何减少对第三方框架的耦合
- hashmap的基本原理
博彦科技(外包OPPO,OPPO面试官)
两轮面试
- Handler机制
- Binder机制
- 写一个单例模式,DCL为什么要加V关键字
- 直接在Activity Sleep 5000ms,再post一个runable会不会ANR。
- 如何监听ANR
- View的绘制流程,每个都是干什么的
- 事件传递机制
Insta360 (C轮公司)
三轮面试
- 组件化如何实现组件通信
- HashMap基本原理 如何减少hash冲突 如何增大hash冲突
- 安装包怎么优化的
- 如果有A,B,C,D,E五个步骤,每个步骤都需要操作对应请求,用哪种设计模式。
华为外包
两轮技术面试
- 安装包优化做了哪些工作
- 对加班怎么看的
本来一面完了就让我等着二面的,等了十分钟后跟我说二面面试官暂时不在,等下次再约时间,出门等了10分钟的公交,离家还有20分钟的时候,又给我打电话让我回去参加第二面,然后就没去了,太折腾人。
绿网科技
三轮技术面
hashmap原理
MVP,MVVM,MVC的区别是什么
Java Memory Model的内存模型
如果让你设计一个app,打算怎么设计
JVM垃圾回收有哪几种算法,有哪几种垃圾回收处理器
Serial使用的哪一种回收算法
JVM的内存模型
Android主线程是怎么启动的
dex是如何转为机器码的
llvm编译是如何优化代码的
说一个你自己的缺点。
最终结果是这样的 哈哈,还是不能要太高
![](https://upload-images.jianshu.io/upload_images/24944255-83c1dc8fb71824e2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
同洲电子
四轮技术面
- Activity的启动流程
- 静态类的静态方法能不能被子类重写(不能,走的invoke-static指令,只有走invoke-virtual指令的才可能实现多态)
- Linux的启动流程
- 对Native层有没有兴趣
- 对做智能家居有没有兴趣
- 招一个应届生进来做app也是做,招你也是做,为什么要招你
顺丰科技
一轮技术面 总共三轮面试
- handler机制
- looper的唤醒是在Java还是Native层,怎么做到的
- HashMap,ConcurrentHashMap,HashTable有什么异同
- Binder通信机制
- 跨平台开发熟不熟悉
- 如何提高海外用户的访问速度,假设服务器在深圳。
- 如何学习一个新东西,有哪些执行步骤
百度
- 红包随机算法 是怎么做到的
- 写一个二叉树的深度度优先遍历,递归 非递归
- Android中LocalServerSocket是干什么用的
- binder的Native层代码看过吗
- Linux有哪些RPC机制
- 为什么android使用了Binder机制没采用共享内存
- 如果让你设计一套进程间通信的机制,你会怎么设计
- Linux的模块动态加载机制是怎么实现的
- 一个物理屏划分为三个逻辑屏,是靠谁来分发事件的。
- ConcurrentHashMap是不是绝对的线程安全。(final,绝对线程安全,相对线程安全,线程不安全)
- 线程池是如何管理线程状态的
大宇无限(C轮公司 前身是豌豆荚)
是我第二心仪的一家公司,办公环境,氛围,福利都好的一逼,可惜了 总共七轮面试 五轮技术面
- Kotlin的访问权限
- Koltin为什么比Java更安全
- Koltin比Java好在哪
- JVM的内存模型
- JMM的内存模型
- 为什么操作数栈是Thread-Private
- 计算二叉树的深度
- ArrayList跟LinkeList区别
- ArrayList如何扩容的,如何提高ArrayList的效率
- 动态代理静态代理区别
- 启动优化怎么做的。
- 如果给你个IOS APP,你打算怎么优化。
- http有哪几种版本,版本间有什么区别。https跟http有什么区别。
- apk为什么要签名,v1跟v2签名的区别
- apk从编译打包都安装的流程
- dex到odex为什么不能在编译期优化
- 热修复原理
- 你的优势是什么
平安
三轮面试
- http2.0 1.1 1.0的区别
- http如何保证安全性
- 安装包优化有哪几种方式
- 启动优化有哪几种方式
- View的绘制流程,每个方法干什么的,如果要获取View的宽高,在哪个方法里获取
- 如何应对弱网环境
- android数据存储方式
- 如果一个app无法访问网络,你怎么做数据存储。
- DVM跟JVM的区别
- React Native跟原生开发的优劣
腾讯
三轮面试 一面
- 算法题 通电小球
- Android 沉浸式状态栏 怎么实现的
- 事件处理函数有哪几个,父View 子View 监听同一个事件,重写哪些方法。在哪个View重写?
- ViewRootImpl接受事件吗?
- apk编译打包流程 V1,V2 签名区别
- 利用logging监听方法耗时,会不会让app增大延迟。
- eventbus为什么要用CopyOnWriteList?
- 插件化怎么加载资源的?
- JVM怎么保证gc效率跟线程运行效率的 ?
- 如果android没用对应的view,flutter能运行吗? 手写单例模式,volatile 跟 synchronized区别?
- 接口暴露,但是不让别人调用,有哪些办法?
二面
- 为什么采用flatbuffer? 比Json好在哪里?
- 如何处理Crash,NativeCrash呢?Google是怎么做到的?如果上报过程中再次产生Crash能不能捕捉到?
- uncaughtException是被谁调用的,如果再次崩溃能不能捕获到?
- Linux是怎么知道app崩溃的,如果想要在被kill前 做一些耗时操作,该怎么做?
- 考虑设计一个crash捕捉模块。
- 100万个数字求100个最大值。
- 手写快速排序算法。
三面 (GM面)
- kotlin比Java好在哪里,是函数式编程吗?
- 如何防止DNS劫持?
- 如果让你实现一个调试器,你会怎么设计?静态调试?动态调试呢?
总结:
大厂基本上不太看重具体的技术,无论你是Java还是C++,比较看重思路与抽象的解决方案。
如果你想去一家不错的公司,但是目前的硬实力又不到,我觉得还是有必要去努力一下的,技术能力的高低能决定你走多远,平台的高低,能决定你的高度。
在面试前我也准备了很久,刷了很多大厂面试题,知识点整理出来分享给大家,算是一个感恩回馈吧:
Java相关
1.容器(HashMap、HashSet、LinkedList、ArrayList、数组等)
2.内存模型
3.垃圾回收算法(JVM)
4.垃圾回收机制和调用 System.gc()的区别?
5.类加载过程(需要多看看,重在理解,对于热修复和插件化比较重要)
6.反射
7.多线程和线程池
8.设计模式(六大基本原则、项目中常用的设计模式、手写单例等)
9.Java 四大引用
10.Java 的泛型
11.final、finally、finalize 的区别
12.接口、抽象类的区别
![](https://upload-images.jianshu.io/upload_images/24944255-60482331ddcd3a9c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1200/format/webp)
如有需要全套面试题+解析,直接划到文末免费领取哦~
Android 相关
1.自定义 View
2.事件拦截分发
3.解决过的一些性能问题,在项目中的实际运用
4.性能优化工具
5.性能优化 (讲讲你自己项目中做过的性能优化)
6.Http[s]请求慢的解决办法(DNS、携带数据、直接访问 IP)
7.缓存自己如何实现(LRUCache 原理)
8.图形图像相关:OpenGL ES 管线流程、EGL 的认识、Shader 相关
9.SurfaceView、TextureView、GLSurfaceView 区别及使用场景
10.动画、差值器、估值器(Android中的View动画和属性动画 - 简书、Android 动画 介绍与使用)
11.MVC、MVP、MVVM
12.Handler、ThreadLocal、AsyncTask、IntentService 原理及应用
13.Gradle(Groovy 语法、Gradle 插件开发基础)
14.热修复、插件化
15.组件化架构思路
16.系统打包流程
17.Android 有哪些存储数据的方式。
18.SharedPrefrence 源码和问题点;
20.sqlite 相关
21.如何判断一个 APP 在前台还是后台?
22.AMS 、PMS
23.Activity 启动流程,App 启动流程
24.Binder 机制(IPC、AIDL 的使用)
25.为什么使用 Parcelable,好处是什么?
26.Android 图像显示相关流程,Vsync 信号等
![](https://upload-images.jianshu.io/upload_images/24944255-d6e91144088d743e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1200/format/webp)
如有需要全套面试题+解析,直接划到文末免费领取哦~
源码理解
Glide :加载、缓存、LRU 算法 (如何自己设计一个大图加载框架) (LRUCache 原理)
EventBus
LeakCanary
ARouter
插件化(不同插件化机制原理与流派,优缺点。局限性)
热修复
RXJava (RxJava 的线程切换原理)
Retrofit (Retrofit 在 OkHttp 上做了哪些封装?动态代理和静态代理的区别,是怎么实现的)
OkHttp
![](https://upload-images.jianshu.io/upload_images/24944255-4ffe2dd3e3dc77d5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/720/format/webp)
算法与数据结构
时间复杂度 / 空间复杂度
常用的排序算法有哪些?
字符串反转
链表反转(头插法)
如何查找第一个只出现一次的字符(Hash查找)
如何查找两个子视图的共同父视图?
无序数组中的中位数(快排思想)
如何给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
二叉树前序、中序、后序遍历
最大 K 问题
广度、深度优先搜索算法
String 转 int。核心算法就三行代码,不过临界条件很多,除了判空,还需要注意负数、Integer 的最大最小值边界等;
如何判断一个单链表有环?
100 亿个单词,找出出现频率最高的单词。要求几种方案;
链表每 k 位逆序;
镜像二叉树;
找出一个无序数组中出现超过一半次数的数字;
计算二叉树的最大深度,要求非递归算法。
String 方式计算加法。
网络
1.网络框架对比和源码分析
网络七层协议有哪些?
Http 和 Https 的区别?Https为什么更加安全?
HTTPS的连接建立流程
解释一下 三次握手 和 四次挥手
TCP 和 UDP的区别
Cookie和Session
DNS是什么?
DNS解析过程
10.HTTP报文结构
11.HTTP与HTTPS的区别以及如何实现安全性
12.如何验证证书的合法性?
13.https中哪里用了对称加密,哪里用了非对称加密,对加密算法(如RSA)等是否有了解?
14.client如何确定自己发送的消息被server收到?
15.谈谈你对WebSocket的理解
16.WebSocket与socket的区别
17.谈谈你对安卓签名的理解。
18.请解释安卓为啥要加签名机制?
19.视频加密传输
20.App 是如何沙箱化,为什么要这么做?
21.权限管理系统(底层的权限是如何进行 grant 的)?
![](https://upload-images.jianshu.io/upload_images/19956127-3a049c19c7dbcbad.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1200/format/webp)
如有需要全套面试题+解析,直接划到文末免费领取哦~
Kotlin 相关
1.从原理分析Kotlin的延迟初始化: lateinit var和by lazy
2.使用Kotlin Reified 让泛型更简单安全
3.Kotlin里的Extension Functions实现原理分析
4.Kotlin系列之顶层函数和属性
5.Kotlin 兼容 Java 遇到的最大的 “坑”
6.Kotlin 的协程用力瞥一眼
7.Kotlin 协程「挂起」的本质
8.到底什么是「非阻塞式」挂起?协程真的更轻量级吗?
9.资源混淆是如何影响到Kotlin协程的
10.Kotlin Coroutines(协程) 完全解析
11.破解 Kotlin 协程
![](https://upload-images.jianshu.io/upload_images/19956127-0c8440ede130ba29.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1200/format/webp)
Flutter相关
1.Dart 当中的 「..」表示什么意思?
2.Dart 的作用域
3.Dart 是不是单线程模型?是如何运行的?
4.Dart 是如何实现多任务并行的?
5.说一下Dart异步编程中的 Future关键字?
6.说一下Dart异步编程中的 Stream数据流?
7.Stream 有哪两种订阅模式?分别是怎么调用的?
8.await for 如何使用?
9.说一下 mixin机制?
10.请简单介绍下Flutter框架,以及它的优缺点?
11.介绍下Flutter的理念架构
介绍下FFlutter的FrameWork层和Engine层,以及它们的作用
介绍下Widget、State、Context 概念 - Widget
14.简述Widget的StatelessWidget和StatefulWidget两种状态组件类
15.StatefulWidget 的生命周期
16.简述Widgets、RenderObjects 和 Elements的关系
17.什么是状态管理,你了解哪些状态管理框架?
18.简述Flutter的绘制流程
19.简述Flutter的线程管理模型
20.Flutter 是如何与原生Android、iOS进行通信的?
21.简述Flutter 的热重载
「Android大厂面试真题解析大全」PDF完整高清版+②「Android面试知识体系」学习思维导图压缩包——————可以【点击我】阅读下载,最后觉得有帮助、有需要的朋友可以点个赞。
2020互联网寒冬之下,作为一个Android老码农,是如何进入腾讯的?的更多相关文章
- 老码农教你在 StackOverflow 上谈笑风生
作为一个高大上的码农,你肯定用到过 StackOverflow,必须的.会有人否定这个断言么?那他恐怕不是真正的码农,或者说还没入门.StackOverflow 对于码农的重要性,基本就和诸葛亮对刘备 ...
- 老码农冒死揭开行业黑幕:如何编写无法维护的代码[ZZ]
下面是一篇有意思的"代码大全",可谓 逆软件工程. 老码农冒死揭开行业黑幕:如何编写无法维护的代码 原文如下 让自己稳拿铁饭碗 ;-) – Roedy Green(翻译版略有删节) ...
- 互联网寒冬之泪:Android开发程序员,你够优秀吗?
我想每个开发者在学习成长的过程中,在面临技术难题的时候,都有经历过自我怀疑的过程,但是有时候这并不是你的错,大家都经历过如此的过程.我们作为一个开发者,在成长的过程中,总有一些小的胜利和小的沮丧,学着 ...
- Java老码农心得:卷了这么多年,您真的卷会了吗?
前言 大家好,我是福隆苑居士,今天跟大家聊一下程序员在当下内卷成风的情况下,使用什么方法可以了解行业发展趋势,知道哪些该学,哪些可以略过,今年应该掌握什么,可以放弃什么,让自己时刻紧跟行业的步伐永不掉 ...
- 一个年轻的码农的一个C#项目
话不多少,今天要写一个小项目.我们写项目要做好准备.我们要做项目分析.要知道用户需求,然后在根据需求来规划自己的项目.我们要用自己所学,做最好的程序.尽自己所能完成项目需求.精简代码! 我们今天要写的 ...
- 一个普通 iOS 码农的几个小项目相关知识点总结
题记:在开发的路途上,有的人走的很深很远,而对于停留在初级阶段的我来说,还要学的.经历的还有很多... list sqlite 数据库中,当把表里的数据都清空时,下次插入的数据的 id 主键不会从 0 ...
- Android码农如何一个星期转为iOS码农(不忽悠)
WeTest 导读 作为一个android客户端开发,如果你不懂点ios开发,怎么好意思说自己是客户端开发呢,本文讲解如何让android开发码农在一个星期上手IOS开发 --<记录自己IOS开 ...
- Android开发音视频方向学习路线及资源分享,学完还怕什么互联网寒冬?
接触Android音视频这一块已经有一段时间了,跟普通的应用层开发相比,的确更花费精力.期间为了学习音视频的录制,编码,处理也看过大大小小的几十个项目.总体感觉就是知识比较零散,对刚入门的朋友比较不友 ...
- 寒冬之下,移动开发没人要了? 浅谈 iOS 开发者该 何去何从?
前言: 作者 | 梅梅 文章来源 CSDN 对于移动互联网而言,2018 年像是球场上的一声裁判哨.哨声响起,高潮迭起的上半场结束.本该再创辉煌的下半场,还没开赛却被告之:规则改变.场地收缩.教 ...
随机推荐
- Redis高并发快的3大原因详解
1. Redis的高并发和快速的原因 1.redis是基于内存的,内存的读写速度非常快: 2.redis是单线程的,省去了很多上下文切换线程的时间: 3.redis使用多路复用技术,可以处理并发的连接 ...
- 40、mysql数据库(触发器)
1.触发器说明: 使用触发器可以定制用户对表进行[增.删.改]操作时前后的行为,注意:没有查询. 2.创建触发器语法: (1)插入前: CREATE TRIGGER tri_before_insert ...
- scrapy入门到放弃02:整一张架构图,开发一个程序
前言 Scrapy开门篇写了一些纯理论知识,这第二篇就要直奔主题了.先来讲讲Scrapy的架构,并从零开始开发一个Scrapy爬虫程序. 本篇文章主要阐述Scrapy架构,理清开发流程,掌握基本操作. ...
- Linux:Ubuntu配置jdk环境变量
1.下载jdk 推荐官网:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html 下载tar.gz包即可. ...
- Linux查找占用的端口,并杀死进程
我要使用4040端口,但是被其他的程序占用了 1. 查找占用的程序 netstat -apn | grep 4040 最后一项显示的是pid和对应的名称 2. 杀掉对应的进程,彻底杀死进程 kill ...
- 25 Linux中的信号
Linux中的信号 信号是进程在运行过程中,由自身产生或由进程外部发过来的消息(事件).每个信号用一个整型常量宏表示,以SIG开头,比如SIGCHLD.SIGINT等,它们在系统头文件中定义,也可以通 ...
- Jmeter之代理元件&代理配置
一 jmeter代理服务器添加及网页代理配置 1.1 打开jmeter,添加代理HTTP代理服务器,再添加一个线程组,放在代理服务器的下面. 1.2 代理服务器设置 端口默认8888,目标控制器选择t ...
- CSS 奇思妙想 | 巧妙的实现带圆角的三角形
之前在这篇文章中 -- <老生常谈之 CSS 实现三角形>,介绍了 6 种使用 CSS 实现三角形的方式. 但是其中漏掉了一个非常重要的场景,如何使用纯 CSS 实现带圆角的三角形呢?,像 ...
- C语言:条件编译
假如现在要开发一个C语言程序,让它输出红色的文字,并且要求跨平台,在 Windows 和 Linux 下都能运行,怎么办呢?这个程序的难点在于,不同平台下控制文字颜色的代码不一样,我们必须要能够识别出 ...
- EditPlus运行java时如何从键盘输入数据
在练习Java的Scanner时,EditPlus如何读取从键盘输入的数呢? 例如如下程序,编译通过,运行时却输入不了数据: 1 package myP101; 2 3 import java.uti ...