2017春招实习-Android开发面经-bat,td等公司

远景能源 Android开发

一面

  1. RxAndroid的好处
    • 举一个RxAndroid好处的使用场景
  2. MVP模式与MVC模式
    • MVC模式与MVP模式的区别
    • 项目中是如何划分M、V、P
    • V与P的对应关系是怎么样的
  3. ListView在MVP的使用,如何分配M、V、P层
  4. 项目分工
  5. Git使用
    • 分支的创建
  6. Service
    • 如何创建一个Service?
    • bindService的生命周期
    • 一个已经被bind启动的Service调用startService后生命周期是怎么样的

二面

远景的二面是隔了有20多天之后在我学校面的。
1. 算法题(手写)。找出两个整数集合的交集
给出了两种解法,第一种是先排序,然后从头往后查找;另一种是使用HashMap,扫描其中一个集合,存储在Map中,再扫描另一个数组时判断在Map中存不存在即可。
2. 由于使用了HashMap,讲讲是如何解决哈希冲突的;HashMap是如何计算槽的位置的;key的hash值是如何计算的;期间说到了以String为例,问为什么要引入31这个值;String的底层数组如果长度很大,是不是会把每个char都计算到hash值中。
3. 如果两个整数集合很大,超过内存,准备怎么做
4. Java虚拟机的内存参数有没有调过
5. 假如设置虚拟机的最大内存为2G,Java虚拟机内存是如何分配的,动态分配还是静态分配;内存是否是连续的;物理内存不连续,如何实现Java虚拟机的内存连续?
6. 问了几个问题给面试官

阿里巴巴 Android开发

一面

  1. 数字签名
  2. 对Android系统了解多少
  3. Binder机制
  4. Linux中进程A能否直接访问进行B?为什么不能?
  5. 一个应用为什么要开多个进程?
  6. 一个应用中Activity启动另一个Activity和一个应用中Activity启动另一个应用中Acvtivity的区别
  7. 对动态规划的理解

携程Android开发工程师

内推一面

  1. 项目介绍
  2. Android进程级别
    说了前台进程、可见进程、后台进程、没有四大组件的空进程,还有一种忘记了,尴尬,还有一种是服务进程(Service)
  3. 如何让服务不被杀死?
  4. 算法题。输入“aaabbcda”,输出“3a2b1c1d1a”,统计字符串数目。
  5. 研三可不可以实习?几月份毕业?对工作地点有没有要求?
  6. 问了一下面试官的建议

搜狐快站Android开发工程师

一面

  1. 项目介绍,承担的任务
  2. 长连接是什么?为什么用长连接?心跳时间是如何确定的?
  3. 为什么使用AES加密?
  4. 在应用不启动的情况下,如何保证推送?
  5. OkHttp的缓存机制,图片三层缓存
  6. 图片如何压缩?如果图片要求是方形,获取图片是长方形怎么办?
  7. 如何缓存静态网页和动态网页?
  8. LruCache源码
  9. Java内存分配策略,新建一个对象,内存是如何发生变化的
  10. 垃圾回收
  11. 是否遇到过内存泄露和内存溢出
  12. 如何获取一个View的宽和高
  13. 子线程操作,如何更新UI
  14. Handler机制
  15. 算法题。一串整形数字,找出相同值的下标并记录。比如说数组序列为0,0,1,4,6,2,1,需要返回0(0,1),1(2,6),4(3),6(4),2(5)

YY Bigo Android开发工程师

一面

  1. 自我介绍
  2. OkHttp的请求和获取响应过程
  3. RxAndroid的好处
  4. Java基础。面向对象三大特性,final关键字,static关键字,静态内部类和非静态内部类,equals和==区别
  5. 进程和线程的区别。Java中线程同步的方法
  6. UDP和TCP的区别
  7. HTTP状态码
  8. 讲一下LRU

以LinkedHashMap为例讲解了LRU,讲解了源码
9. 冒泡排序和快速排序
10. 统计一个整形数的二进制表示形式中1的个数

总结:问的很基础,正好帮我回顾了一下,有些知识点感觉都快忘了

二面

第二天下午二点半二面。
1. 介绍项目
2. TCP和UDP区别,OSI五层结构,HTTP报文
3. MVP模式与MVC,观察者模式,装饰者模式
4. HashMap与Hashtable的区别,ArrayList与LinkedList的区别
5. 进程和线程的区别。Android中多进程,修改静态变量的值会怎么样
6. 死锁。如何避免死锁
7. OOM,ANR。如何检测内存泄露
8. 引用的四种类型。
强软弱虚。强引用就是最常见的,软引用和虚引用经常用在缓存中
9. 算法题。
- 如何判断字符串回文
- 如何判断链表有环
- 删除单链表中重复节点

总结:和一面一样,很重视基础。
具体消息下周会发

CVTE Android应用开发工程师

一面

  1. 系统架构,APP架构
  2. OkHttp的缓存
    说了下DiskLruCache,讲了一下LruCache的源码
  3. 进程间通信的方式
    说了Binder、Socket、共享文件
  4. Binder是如何使用的;服务端如何确定客户端调用的是哪个方法
    以AIDL为例,讲解了客户端怎么使用的,服务端怎么使用的;讲了一下每个方法会有一个int类型的映射,然后会传入这个参数
  5. 了解过拷贝没,浅拷贝和深拷贝
    直接说基本没了解,就没问
  6. 如何确定一个对象是垃圾,以及如何回收的
    可达性分析确定对象是垃圾;回收答得不太好
  7. Android中如何使用多线程;分析线程池的调度原理
    简单讲了一下ThreadPoolExecutor的源码
  8. 项目中用到的设计模式,画一个UML图
    说了模板方法模式,简单画了一下UML图
  9. 算法,把一个String表示的整数转成int型
    写了一半后,面试官让我说下思路;如要考虑前面为负号的情况就可以了

一面完,面试官叫找HR,然后二面去了

二面

  1. 自我介绍
  2. 项目中如何确保信息的同步的
    长连接推送+HTTP主动获取
  3. 对于线程安全的理解
  4. 算法题。给了三个字符串,找出这三个字符串都出现的字符,并统计该字符出现的次数
    在牛客的系统上整个都编出来了,意味面试官会中途叫停讲思路。结果最后写完了才让说思路,本来以为写的正确的;后来完了后,发现有点问题。不知道面试官看出来没
  5. 我有什么问题?
    问了下Android主要做什么,聊了聊物联网、智能家居;面试官给我展示了他们所做的关于教育方面的项目

HR面

HR问的蛮多,之前就听师兄说了,如果能熬过CVTE的HR面,那就不会再虚任何公司的HR面了,三个工作日等结果。

三天后出了结果,HR面没过。

招行信用卡中心 软件开发工程师

一面

  1. 面试前,抽一道题,10分钟写出来。题目是1024个数(有正有负),将其分配到16个桶中,使每个桶中数字之和差距尽可能小。
    当时比较蒙,基本没写出来
  2. 自我介绍,重点介绍了项目;在项目中扮演的角色
  3. 遇到的难点;推送是如何实现的;粘包分包是怎么回事?
  4. 如何在下载时显示进度条?如果下载很耗时,并且数据大小不确定,怎么做?
  5. 对Java多线程的理解
  6. 如何实现ImageLoader的
  7. 算法题。给定银行卡前缀(比如前4位和前5位),可以确定该卡属于一个银行。如何查找一个银行卡号属于哪个银行?时间复杂度是多少
  8. 问面试官问题

instal360 Android开发工程师

一面

  1. 自我介绍
  2. ImageLoader是如何实现的? 列表滑动时怎么处理的?为什么图片会乱序?图片划出界面后是怎么处理的?
  3. 长连接如何实现的
  4. MVC、MVP和MVVM模式的区别
  5. 面向对象的三大特性。动态的理解
  6. 以后的发展方向

腾讯 移动端开发工程师

一面 MIG

  1. 自我介绍,项目介绍
  2. 如何本地做文章解析的
  3. ImageLoader的三层缓存是如何实现的。内存缓存是怎么做的,网络缓存是怎么做的
  4. HTTP协议了解多少?Get和POST请求的区别?
  5. Handler消息机制。进程优先级会影响Handler的处理吗
  6. Android常用布局
  7. 长连接是如何实现的以及粘包分包的处理
  8. 学过C++没?以后要是做C++可不可以?上海岗比较少,去深圳愿不愿意?
  9. Android了解过多少。Native层了解过多少

二面 MIG 浏览器 视频面

因为面试官有事没来武汉,所以选择了视频面。
1. 项目介绍,以及其中的难点
2. 长连接时,APP这端如何及早发现后台那边没做队列缓存字节?
3. 进程间通信方式。管道和Socket有什么区别?共享内存和Socket分别会用在什么情况下?
4. 为什么Android会采用Binder这种机制?
5. Java中如何使用一个线程?如何保证线程同步?synchronized的一些问题;任务和线程的区别
6. Android四大组件;Activity生命周期方法;onPause和onStop的区别;锁屏时经历的生命周期方法;Service的启动方式
7. 了解过哪些设计模式?组合模式了解过吗?
8. 惊艳到自己的数据结构;HashMap从链表到红黑树的转换
9. 算法题。一个字节中有四位为1和四位为0的表示合法,源源不断的字节如何判断哪些字节合法,哪些不合法

这道题简直被自己蠢哭了,低级错误一直犯,把2的8次方说成是128,最后在面试官的提示下给出了答案。

因为想换部门的原因,状态从复试变成了初试。sng的面试官加了我QQ,因为在南京,所以说会改天电话面试。

三面 SNG QQ空间 电话面试

  1. 面试官提问项目
  2. 进程保活。面试官介绍了他们的方案,互相探讨了一下
  3. 如何判断两个正方形是否相交?如何判断一个正方形和圆形是否相交?
  4. 内部类
  5. 软引用和弱引用的区别
  6. 给定一个目录,找出该目录下面的所有图片文件。递归与非递归实现

可能由于之前已经面试过了两轮,这一轮面试一共就面了20分钟,主要还是和面试官讨论比如进程保活、判断相交、内部类这些。等待复试

四面 SNG QQ空间 电话面试

  1. C中字符串以什么结尾;一个字节在硬盘中占多大
  2. TCP协议发送3K字节的过程;TCP连接的建立;连接的释放;滑动窗口的概念
  3. HTTP和TCP的区别;HTTPS端口、证书下发过程、涉及到的加密算法
  4. 数据库,范式
  5. UTF-8编码是怎么做的?给你一个文件,能不能判定是何种编码?
  6. 在Android开发这一块,擅长什么
  7. ANR是什么?如何避免?
  8. 弱网环境如何改进APP
  9. 项目中的难点,如何克服的
  10. 项目中的改进点
  11. 信号量的理解;堆和栈的大小
  12. 平衡二叉树的定义;排序中稳定的概念

最终倒在了四面,好伤心。

去哪儿 软件开发工程师

一面

  1. Android消息机制
  2. TCP和HTTP区别
  3. OkHttp中如何实现拦截器链
  4. 在项目中分别做的工作
  5. ThreadLocal
  6. ArrayList和LinkedList区别
  7. 笔试的算法题如何做的。给了树的先序遍历数组和后序遍历数组,输出树的层次遍历结果。

根据先序遍历数组和后序遍历数组建树,然后再层次遍历。

二面

  1. 笔试的算法题。一道广度遍历的变化题
  2. 如何判断链表有环?如何在有环的链表中找到环的入口?
  3. 一串小写字母,其中某个小写字母的出现次数过了一般,如何查找到这个字母?

快排partion的改进,时间复杂度多少?哈希做,空间复杂度O(26),如何减少空间复杂度
4. Activity的生命周期方法;onStart和onResume的区别;一个透明的Activity出现,后面的Activity生命周期是怎样的;后面的Activity被系统杀死,会调用什么方法
5. 如何实现开机自启动?
6. Activity中两个进程如何通信
7. HTTP状态码;302和304区别;500开头的遇到过吗?
8. OkHTTP的ConnectTimeOut和SocketTimeOut代表什么意义?TCP三次握手是如何的?seq和ack之间有什么区别?TCP滑动窗口是干什么的?
9. 数据库,索引是用来做什么的?分组怎么做?查询多个表如何?
10. 如果应用crash了则呢处理的?
11. 为什么使用RxAndroid?RxAndroid的好处是什么?有和EventBus比较过吗?
12. HTTP协议的get和post的区别?get的URL长度限制是多少?
13. 运行时权限的变化

HR面

  1. 介绍项目
  2. 项目的分工;如何确定需求的?
  3. 项目有什么优化的地方
  4. 目前有哪些公司的offer
  5. 实习的话,最想学到什么东西?
    HR说了一下薪资待遇,然后给了口头offer

今日头条 Android开发工程师

一面

  1. 自我介绍
  2. 项目中是如何显示文章详情的;WebView与Native交互了解过没
  3. HashMap;为什么1.8改成了红黑树;拉链法是如何解决hash冲突的
  4. Java 1.8新特性,如何理解流操作的
  5. 集合的迭代器遍历
  6. ConcurrentHashMap和Collections.synchronizedXXX方法的区别
  7. 线程安全的方式;什么时候使用ReentrantLock;一个类两个方法,一个synchronized修饰,一个没有,两个线程分别获取两个方法,会怎么样
  8. volatile特性;是否线程安全
  9. GC机制;那些可以作为GC Roots
  10. 软引用和弱引用的理解,会应用于什么场景
  11. Activity生命周期。Activity A启动Activity B,两个Activity生命周期是如何调用的;onNewIntent了解过没
  12. ListView中有View,如何处理滚动事件和Item的点击事件的;CANCEL事件了解过没;
  13. View的绘制流程;OverDraw是怎样的 ;几个FrameLayout无背景,会引起OverDraw吗?
  14. Activity的界面结构;Window和View的区别
  15. 看过的开源框架中设计比较精巧的地方;
  16. 自己的优势

二面

  1. 自我介绍,项目介绍
  2. 项目中TCP自定义协议怎样保证报文尽可能短
  3. TCP连接过程、释放连接过程
  4. HTTP首部了解多少?断点续传涉及哪几个首部?HTTP状态码知道哪些?
  5. 算法题。实现一个单链表的几个方法:增加、查找、删除、逆序
  6. 如何使用数组实现一个队列?不是循环队列的情况下,如果队列满了怎么办?如果是循环队列又该怎么办?
  7. Android中启动服务有几种方式?区别是什么?IntentService和普通Service有什么区别?
  8. Handler在什么情况下会发生内存泄露问题?如何解决?
  9. Looper有什么作用?在一个非UI线程中使用Looper是怎样的步骤?在Looper.loop()方法的打印语句会执行吗?
  10. Dialog和Toast可以在Service中弹出吗?Dialog和Toast的本质区别是怎样的?
  11. 如何根据URL下载一张图片?如何实现压缩?Bitmap如何计算字节数?Bitmap.ARGB_8888占几个字节?
  12. Java的异常体系
  13. 应该还问了一些问题,不过记不起来了

三面

二面和三面之间等了有两个多小时,所以三面的节奏很快,就面了25分钟,但是难度比较大。

  1. 浏览器输入www.toutiao.com之后发生的一些;DNS是怎样的过程;UDP和TCP的区别;TCP的Qos;TCP的拥塞控制;HTTPS与HTTP的区别;为什么需要证书下发过程
  2. 操作系统怎么管理内存
  3. Java怎么管理堆内存
  4. Java内部类为什么能访问外部类的成员
  5. 手机通讯录搜索,名字、首字母、电话号码、全屏前缀匹配,使用什么算法

三面完之后,HR打电话过来,说三面通过了,已经有秋招终面的绿卡了。但是offer一周内会给出答复,在面完所有人之后才能做决定。

滴滴 研发工程师

一面

  1. 自我介绍
  2. 算法题。地址。

和面试官说了下思路,问了其中的算法思路。就说了贪心,然后就开始编码了,最后过了40%,其他的应该超时了,然后说了一下查找可以使用二分查找改进下。

  1. 熟悉的语言是什么?看过Java的源码没?
  2. 线程池的源码;当达到核心线程数后,新加的任务是怎样操作的?RejectHandler是在哪个线程中处理的?可重入锁的源码实现,可重入锁是如何保证可见性和原子性的;volatile是如何保证可见性的。
  3. Java虚拟机运行时数据区;堆的分代;如何确定一个对象是垃圾;是不是所有对象都在堆上面;老年代上的垃圾收集器有哪些 ;对象的组成部分,对象头在32位机器上和64位机器上分别是多大
  4. 擅长的领域但是没有问到的。答了计算机网络
  5. TCP的连接和断开是怎样的?
  6. NIO了解吗?Netty了解吗?

因为不了解Netty,但是使用过MINA,所以就讲了下项目中是如何使用MINA的。
9. 知道NIO底层使用的什么模型?epoll模型听说过吗?知道哪些RPC技术?知道分布式系统吗?知道负载均衡吗?

这些问题基本都是答得不知道

百度 Android开发工程师

一面

等了5个小时之后才一面,真想吐槽他们的办事了。
1. 编程题。过了30%之后的改进
2. Java的内存结构;堆和栈的区别;GC;Java是否会有内存泄漏现象
3. TCP和UDP的区别;TCP如何确保无差错和有序性
4. 各种排序算法的时间复杂度;有很多数的时候,如何选择一个排序算法
5. 进程和线程的区别;进程间通信方式;操作系统如何使两个进程的物理内存不冲突的
6. 还有不少问题,忘记了。应该不是一个搞Android的
7. 为什么读Java的一些源码
8. 数组和链表的区别;分别适用于什么情况
9. 计算机网络分层机构;HTTP状态码
10. 如何判断一个链表是否有环;以及如何确定环的入口
11. 专业是干嘛的

二面

一面完很快就通知二面了,等的时间稍微短了点。
1. 自我介绍
2. 项目中的收获
3. 二分查找复杂度;实现递归方式
4. 抽象类和接口的异同
5. Android启动模式;生命周期方法,onStart和inResume区别;onPause和onStop区别。如何使屏幕旋转不销毁Activity
6. View的绘制流程;validate和postValiedate的区别
7. Android进程间通信方式
8. WebView如何与APP通信
9. HTTP状态码
10. 了解的设计模式;观察者模式的理解;手写单例模式
11. View事件传递;从哪个View开始传递;最底层的View没有处理触摸事件怎么办
12. Service的启动方式;如何使service在新的进程中启动;如何保活一个进程;

三面

  1. 自我介绍
  2. Activity的生命周期方法;一个电话打进来,会调用什么生命周期;APP会被系统杀掉吗?
  3. 编程题;如何找到给定一个View下面的所有子View;层次遍历写法如何实现
  4. APP请求服务端,服务端按照协议是String类型,然而给的是int类型,APP如何做这样的容错处理
  5. 平时如何学习?关注Google I/O大会吗?如何了解Android的最新技术
  6. 平时加班多吗?如何看待加班?如何提高效率
  7. 进程间通信方式;线程间通信方式
  8. Android特有的集合库;有序和无序的理解;1万个数据插入哪种快,查找哪种快
  9. 两个线程同时往数据库的一张表插入数据,会不会有问题?

你可能感兴趣的:(2017春招实习-Android开发面经-bat,td等公司)