2017---Interview question

实习

360
设计一个贪吃蛇游戏,讲讲设计思路和需要用到的技术点
叙述一下client发起请求到server返回数据,这期间发生了什么?
ListView如何优化
方法

如何实现下拉刷新?
Java能catch的异常有哪些?
抽象类和接口的区别?
OOM?
如何实现页面下拉时,页面顶部的照片随下拉放大
两个链表相交,如何求出交点?
json到model的转换?
volley实现原理?
Android共享数据的方式?
假如有几百万条排序好的数据,用户搜索的时候如何快速检索到需要的数据?
Service是否运行在主进程,为什么在主线程里还能处理耗时操作?
如何长时间保持你的Service在Android系统里不被杀死?
Android进程间通信的机制和Linux进程间通信的方式?
有两个线程A和B,A运行到一半以后需要等待B线程运行完以后的结果才能继续,如何做到?
手写一个带listview的activity?
手写一个读取sd卡某文件的内容用log打出来?
for循环和迭代器的比较,各自最佳使用场景分别是什么?

链家
单链表反转?
C++继承和Java的区别?
面向对象的特性,多态的理解?
listAdapter中convertView的复用,手写?
list.addAll(list1),list1数据改了,list改不改?
viewpager+fragment滑动时,fragment的方法调用状态?
为什么用ViewHolder这种方式?
Activity生命周期?
接口能不能继承接口?
重写,重载,重构?
四大组件介绍?
ContentProvider和sqlite的异同?
项目创新点?
设计模式?

腾讯:
常用的设计模式
Andorid Activity四种启动模式
Intent的作用
项目遇到的深刻的问题,异常类
GC算法
Dalvik和ART
HashMap的hash函数,hashcode相同怎么办?
数组和链表的异同点?
高级语言编译之后, 汇编层面的函数是什么样的, 可以使用自己熟悉的语言举例说明?
一个字符串数组,给定一个字符串,怎么找到它?
Android中的Bitmap源码?
fragment的源码?
那么如果listview中的item上有个加号减号,点击一次会执行什么操作?
数据格式xml,json。
布局优化
Java虚拟机?
TCP/IP
基本算法快排的时间复杂度和选择排序是稳定的吗?
同步锁分类
fragment的生命周期
在activity中如何更新fragment的值
Android的通信机制
Android的新技术
ListView和recycleview的区别
post发送请求的几个数据格式是什么
linkedlist和ArrayList的区别和删除元素的时间复杂度分别是多少?
为什么选择Android而不选iOS。
学Android多长时间了,说一说Android里你学到的知识?
说一下Binder机制的底层实现?
Android中进程之间通信,除了Binder还有什么?说一下底层实现原理?
我看你做了几个项目,给我展示一下。说一下你项目中用到的技术 ?
给你n个数,找出出现次数最多的那个数?时间复杂度是多少?
快排的时间复杂度,最坏情况下的时间复杂度,最好情况下的时间复杂度?
给你n个数,找出一个连续的数列,使数列的和最大?
你学习成绩怎么样?
计算机基础都学了哪些知识。
三次握手,四次挥手,为什么要用四次挥手,三次不行吗,当Client收到Server的ack后,Client还能接收来自Server的数据写入吗?
说一下Android中的事件处理流程,结合源码解释,不要直接说规律结论。
系统调用的方式?系统调用发生的场景?系统调用常用函数?系统调用的具体过程?
Binder的一次拷贝发生在哪里?
AMS的作用?
一个Activity启动另一个Activity时函数调用流程。
Android中Handler机制?
什么是ThreadLocal,一个线程可以获取到另一个线程的Looper吗?怎么获得?
使用了哈希表的数据结构有哪些?哈希表插入一个数的时间复杂度是多少?

百度
final的含义,final作为函数参数?
AsyncTask源码?为什么设计成串行?所有的AsyncTask值共有一个线程池吗?
手写大数相加?
手写判断是否为合法IP?
Volley原理?
Picasso原理?
怎么设计一个网络库,怎么设计一个图片库?
阿里
死锁?
Java GC和内存管理?
HashSet插入,查找时间复杂度?
长连接,短连接?
字符串匹配?
两个数组的公共部分?
其他
网络框架实现,volley原理

(1)总体设计,四层,阐述几个核心类;
(2)基本原理
(3)请求流程;
(4)特点(优缺点),说明原因;
(5)补充Http缓存和设计细节。

线程池原理,java提供了哪些线程池

(1)基本原理
(2)ThreadPoolExecutor的几大参数解释;
ThreadPoolExecutor
Executors.newXXX();

一个app只能有一个进程么【对进程的理解】

可以为Activity和Service指定不同的线程;

activity任务栈,启动模式相关,四种启动模式

四种启动模式:
Standard,SingleTop,SingleTask,SingleInstance;
Intent_Flag:

夜间主题的实现方式

内部资源加载方案:基于Theme的Android动态换肤;所有图片/颜色的资源都在apk里面打包了
动态下载资源下载
[参考资料1](http://blog.csdn.net/marktheone/article/details/48354369)

动态加载原理,classloader理解
listview实现item左滑需要考虑的问题
view的事件分发与渲染流程
LruCache的理解,原理,以及还有哪些方式实现缓存调度

LinkedHashMap原理
FIFO
LFU

GC原理,实现方式,能否手动去控制GC回收

(1)回收什么->回收的主要区域
(2)怎么回收->对象存活算法+垃圾回收算法
(3)回收过程->Minor GC+Full GC
不能:System.gc()调用时机不确定;
GC调优:通过NewRatio控制新生代老年代比例,通过MaxTenuringThreshold控制进入老年前生存次数;

OOM,内存泄漏的问题有没有遇到过,如何处理?

加载图片;
采样率;
Picasso;
内存优化;

mvp与mvc的区别,实现,原理

(1)mvc;
(2)mvc的缺点
(3)mvp,与mvc的区别
(4)mvp的优点


volley原理,发送五个请求(相同以及不同)时,内部所做处理?如何根据 发送请求结束后,剔除相同的等待请求?

Paste_Image.png
Set<Request> mCurrentRequests = new HashSet<Request>()
维护了一个正在进行中,尚未完成的请求集合。
添加一条请求,便会加入到mCurrentRequest;注意是个HashSet,Request不能是相同的对象(没有重写equals和hashcode());
Map<String, Queue<Request>> mWaitingRequests = new HashMap<String, Queue<Request>>();
维护了一个等待处理请求的集合,如果一个请求正在被处理并且可以被缓存,后续的相同 url 的请求,将进入此等待队列。


请求相同:
会把每个请求加入mCurrentRequests;
第一个请求会加入mCacheQueue;
后续的相同 url 的请求,将进入mWaitingRequests;

请求不同:
会把每个请求加入mCurrentRequests;
所有请求会加入mCacheQueue;

void finish(Request<?> request)
(1)从mCurrentRequests移除该请求;
(2)然后查找请求等待集合mWaitingRequests中是否存在与请求url相同的请求,如果存在,则将等待队列移除,
并将等待队列所有的请求添加到缓存请求队列中,让缓存请求处理线程CacheDispatcher自动处理。

图片缓存技术的实现,如何结合volley实现,volley自带缓存管理还是需要自己去实现,缓存的底层实现

(1)Volley只有磁盘缓存
(2)内存缓存,LruCache;
(3)ImageCache对象是一个空的实现
(4)新建一个BitmapCache并实现了ImageCache接口;以LruCache作为实现;

Listview原理,adapter与view是如何绑定的,如何自己设计一个类似Listview的自定义view,子item复用,管理以及getView的实现

(1)Recyclebin:它是AbsListView中的一个内部类,所有继承自AbsListView的子类,也就是ListView和GridView,
都可以使用这个机制;可以把滑出屏幕的子View添加(addScrapView)到它内部的一个数组里面;
(3)两次Layout:
   (1) 第一次Layout,只会加载第一屏数据,而不是把所有Adapter的数据都加载;
      因为RecycleBin里面没有任何子View,所以调用Adapter.getView()的时候,convertView是为空,第一次需要去XML加载布局;
   (2) 第二次Layout,重用RecycleBin的ActiveView;
 
(2)怎么算滑出;
(3)调用Adapter.getView();

Paste_Image.png
Paste_Image.png
Paste_Image.png

android线程模型,handler,looper,messageQueue一套机制
线程实现方式,thread+asynctask+HandlerThread+IntentService+Service,彼此的应用场景以及原理

(1)场景
(2)各自原理
IntentService+Service
Asynctask+HandlerThread+Handler
Thread

HanlderThread参考资料1
HanlderThread参考资料2
Asynctask底层实现原理,为何不能在非主线程中实例化?
手机唯一标识方式
参考资料

DeviceID
Serial Number
ANDROID_ID

手机app耗电量跟什么有关,耗电优化

网络连接
停驻模式
手机状态
(1)手机充电时才执行非常耗电的操作;
(2)WiFi连接下,网络传输的电量消耗要比移动网络少很多,应该尽量减少移动网络下的数据传输,多在WiFi环境下传输数据。
(3)为了减少电量的消耗,在蜂窝移动网络下,最好做到批量执行网络请求,尽量避免频繁的间隔网络请求。(Picasso)
(4)使用JobScheduler:应用需要做的事情就是判断哪些任务是不紧急的,可    以交给Job Scheduler来处理,
   Job Scheduler集中处理收到的任务,选择合适的时间,合适的网络,再一起进行执行。

参考资料1
参考资料2
参考资料3
推送服务原理,心跳机制
心跳机制1
推送机制1
Service使用注意事项以及原理

服务应用唤醒实现,Aidl 的Service更新后如何让旧的客户端兼容

多线程实现,通信原理

进程通信原理,使用订阅者模式时,服务端拿到的Listener对象为何是新的实例,如何获取到真正客户端实例(RemoteCallbackList)

Binder会把客户端传递过来的对象重新转化并生成一个新的对象,
虽然在注册和解注册的过程中使用的是同一个客户端对象,但是经过Binder传到服务端后会生成两个不同的对象;
对象的跨进程传输,本质是序列化和反序列化,序列化和反序列化只能保证
对象的内容是相同的,不能保证对象不变;
RemoteCallBackList:内部使用了一个ArrayMap来保存<IBinder,CallBack>键值对。
因为一个相同的客户端对象经过多次跨进程传输后生成的服务端对象虽然不同,
但是这些对象对于的Binder对象是相同的,所以遍历服务端所有的Listener对象,
根据RemoteCallBackList就能够找到属于同一个Binder对象服务端对象;

Sharedpreference允不允许多线程多进程调用,会不会出问题,commit和apply有什么区别
参考资料

Sharedpreference不支持多进程程写;Sharedpreference底层是通过读写XML文件实现的,并发写会出问题;由于SharedPreferences在内存中会有一份缓存,所以在多进程模式下,不可靠;

1. apply没有返回值;commit返回boolean表明修改是否提交成功 
2. apply是将修改数据原子提交到内存, 而后异步真正提交到硬件磁盘, 而commit是同步的提交到硬件磁盘;
     因此,在多个并发的提交commit的时候,他们会等待正在处理的commit保存到磁盘后再操作,从而降低了效率。
    而apply只是原子的提交到内容,后面又调用apply() 将会直接覆盖前面的内存数据,这样从一定程度上提高了很多效率。 

3. apply方法不会提示任何失败的提示。
使用方法:如不关心是否保存成功,就可以用异步的apply方法,
相反,在乎保存返回值的,则用commit方法.如果出现并发情况,那么肯定是用
异步的apply方法,这是如果用了commit方法的话,就有可能会导致阻塞. 
apply方法是现将数据立马存到内存中,然后会异步的去保存到目录文件去.

什么是ServiceManager?

参见博客

ssl协议,握手交换密钥过程,加密算法,对称非对称加密原理
Https参考资料1
Https参考资料2
Http请求,响应头内容,格式规范
TCP报头,Ip报头,DNS实质
Lrucache原理实现,Linkedhashmap底层,手写代码实现Lrucache,对相关的bitmap进行管理
线程池构造函数传参意义,手写代码实现线程池,继承方式,不能用现成的
异步接口实现,实现跨线程通信,不能用handler,looper那一套机制
socket编程实现http请求,手写代码实现
线程间通信,进程间通信,binder原理
sharepreference原理
事件分发原理
设计模式,延迟加载实现单例模式,内部类来解决,加锁也不稳
mvp与mvc
线程池调度实现,不能用executor
动态加载,dex分包,热修复
缓存原理实现,内存如何分配
如何减小apk体积
性能优化从哪几方面考虑(内存,cpu,fps,ddms灵活dump)
listview与recycleView的区别与优缺点
发出的请求是否可以终止请求,pc网页刷新与停止的原理,跟移动浏览器的区别
加载图片请求的超时时间设置,多少秒合适,原因,大图如何加载。
线程间的通信,并发问题解决方案。
快速排序为什么叫做快排,其算法复杂度,及其实现原理
应用签名是为了什么,签名原理是什么
root之后有什么重大的变化,开发者可以操作什么
给出九游android客户端程序,解释下相应的布局,listView做大面积的嵌套,下拉刷新的实现
渠道提示不合法的问题,为何系统能识别渠道非法
java线程 run与start区别,原理实现
打包混淆原理
jar封装的private方法能否在外部调用
反编译方式工具及其原理
网络请求方面如何处理
jni使用及其原理
对称加密与非对称加密
单例模式为什么要使用同步关键字,原理
数学题:知道正n变形的半径,求周长,算法实现
使用图片缓存但是服务器改了实际的图片,但url一样,如何在客户端区别

美团实习:
Java 三态
实现一个泛型的栈;
handler.postDelay()原理;
在onClick方法里面执行handler.postDelay()回不回内存泄漏;
gradle多渠道打包原理
C语言,Java的变参;
异步
okhttp连接池管理
ArrayMap,SparseArray;
CotentProvider的权限问题;
为什么使用CardView,好在哪里?
网络中Http get和post的区别?
怎么解析Json?
Interface中定义的变量默认的类型是什么(不加任何修饰)?
怎么在非UI线程更改UI?
mainfest文件的合并规则?
RecycleView的优化?

内推

阿里内推

一面
(1)动态加载怎么实现
(2)观察者模式
(3)dex和jar的区别
(4)dex用什么加载
(5)jvm和davik
(6)长连接和短连接
(7)Http 1.0和Http2.0
(8)Volley和Retrofit
(9)怎么提高长连接的存活时间,保证其不被杀死。
(10)MVP和MVC,MVVM
(11)怎么确定换肤的View
(12)react native了解吗

腾讯内推

一面
(1)自我介绍
(2)项目难点
(3)线程同步方式
(4)举例说明线程同步失败导致crash
(5)为什么需要线程同步
(6)队列和栈的区别
(7)线程和进程的区别
(8)进程的内存分配
(9)排序算法了解多少,数据结构了解多少
(10)解决hash冲突怎么解决
(11)快排思想,复杂度。
(12)动态加载时怎么实现的
(13)TCP三次握手
(14)输入www.baidu.com发生了什么
(15)TCP和UDP区别
(16)App上线没有,多少人使用?
(17)C语言了解多少,我是做iOS的。
百度
(1)事件分发机制
(2)锁的等级
(3)Android tools用过哪些
(4)HashMap,HashTable,LinkedHashMap
(4)IM功能怎么实现
(5)微信聊天界面怎么实现
(6)RecyclerView和ListView区别
(7)Activity启动模式
(8)Volley原理
(9)Picasso原理
(10)ButterKnife原理
(11)Volley,Picasso,Rerofit区别,优缺点。
(12)RxJava怎么实现线程切换,原理
(13)Handler源码,怎么实现线程切换。
(14)HandlerThread原理
(15)动态加载
(16)控件点击水波效果怎么实现
(17)生产者消费者模式
(18)为什么提供了notifyAll还要提供notify
(19)object方法。
(20)如何判断手机处于桌面
(21)实现一个栈。

百度地图(dss886)
自定义一个注解
不用Handler+MessageQueue如何实现线程间通信
自定义一个异步任务队列
ViewStub是什么
怎么调试ANR
单个Dex文件方法数不能超过65535是哪里限制的
ListView自定义type有哪些限制?
什么是Surface View

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容