专栏名称: 开发者全社区
分享和推送Java/Android方向的技术和文章,让你成为这方面的大牛,让你每天都成长一点。同时,我们也会邀请BAT的大牛分享原创!
目录
相关文章推荐
鸿洋  ·  鸿蒙中是如何实现UI自动刷新的? ·  昨天  
stormzhang  ·  不让人们存钱了? ·  2 天前  
鸿洋  ·  深入探索 APKTool:Android ... ·  3 天前  
鸿洋  ·  Android自定义Lint的二三事儿 ·  4 天前  
鸿洋  ·  Gradle配置,Android应用签名详解 ·  5 天前  
51好读  ›  专栏  ›  开发者全社区

2017 年最新最全阿里、腾讯、百度、华为、京东、搜狗和滴滴面试题汇集

开发者全社区  · 公众号  · android  · 2017-05-15 18:09

正文

相关阅读:

欢迎加入Java和Android开发者社区(所剩名额不多了)

前言

前一段时间和大牛们交流了一下,据反馈现在Android岗位也没有以前那么多了,没这么好找了,面临2016年寒冬季节,大量公司模仿O2O模式导致死掉企业的很多,在加之培训机构大量的培训人,导致供大于求,当然这不意味着饱和,只是市场更趋于合理一些(只要技术好不用怕的)。最近结合一些面试的同学和大牛们(张旭童)反馈,前几天听童哥去阿里面试顺便整理了下一些面试题目。希望对大家有所帮助,后期会不断更新添加新的面试题。可以帮大家查漏不缺。以下是(2016、2017 、阿里、腾讯、百度、华为、京东、搜狗和滴滴面试题汇集)

就算写出答案也没必要(我写了部分面试答案),因为开发与实际答案会有所不同,再者怕误导大家,所以这些面试题答案还是自己去理解吧!切记:不要背答案,多理解。

最新整理

  • 简述synchronized?Object;Monitor机制;

  • 简述happen-before规则;

  • JUC和Object;Monitor机制区别是什么;简述AQS原理;

  • 简述DCL失效原因,解决方法;

  • 简述nio原理;

  • jvm运行时数据区域有哪几部分组成,各自作用;

  • gc算法有哪些;gc收集器有哪些;

  • 简述class加载各阶段过程;class;loader有哪些模型;

  • 简述常用的JDK命令行工具;

  • 简述字节码文件组成;

  • 讲讲你平常是如何针对具体的SQL做优化;

  • mysql的存储引擎有哪些,区别;

  • gc:内存模型;

  • gc:垃圾回收;

  • 多线程:如何实现一个定时调度和循环调度的工具类。但提交任务处理不过来的时候,拒绝机制应该如何处理;线程池默认有哪几种拒绝机制;

  • 多线程:如何实现一个ThreadLocal;

  • 说说你了解的一个线程安全队列;

  • Atomic包的实现原理是什么;

  • CAS又是怎么保证原子性的;

  • string分析1000次循环subString用了多少内存;

Android基础

  • 什么是ANR 如何避免它?

  • View的绘制流程;自定义View如何考虑机型适配;自定义View的事件分发机制;View和ViewGroup分别有哪些事件分发相关的回调方法;自定义View如何提供获取View属性的接口;

  • Art和Dalvik对比;虚拟机原理,如何自己设计一个虚拟机(内存管理,类加载,双亲委派);JVM内存模型及类加载机制;内存对象的循环引用及避免;

  • ddms 和 traceView的区别;

  • 内存回收机制与GC算法(各种算法的优缺点以及应用场景);GC原理时机以及GC对象;内存泄露场景及解决方法;

  • 四大组件及生命周期;ContentProvider的权限管理(读写分离,权限控制-精确到表级,URL控制);Activity的四种启动模式对比;Activity状态保存于恢复;

  • 什么是AIDL 以及如何使用;

  • 请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关系;

  • Fragment生命周期;Fragment状态保存;

  • startActivityForResult是哪个类的方法,在什么情况下使用,如果在Adapter中使用应该如何解耦;

  • AsyncTask原理及不足;intentService原理;

  • Activity 怎么和Service 绑定,怎么在Activity 中启动自己对应的Service;

  • 请描述一下Service 的生命周期;

  • AstncTask+HttpClient与AsyncHttpClient有什么区别;

  • 如何保证一个后台服务不被杀死;比较省电的方式是什么;

  • 如何通过广播拦截和abort一条短信;广播是否可以请求网络;广播引起anr的时间限制;

  • 进程间通信,AIDL;

  • 事件分发中的onTouch 和onTouchEvent 有什么区别,又该如何使用?

  • 说说ContentProvider、ContentResolver、ContentObserver 之间的关系;

  • 请介绍下ContentProvider 是如何实现数据共享的;

  • Handler机制及底层实现;

  • Binder机制及底层实现;

  • ListView 中图片错位的问题是如何产生的;

  • 在manifest 和代码中如何注册和使用BroadcastReceiver;

  • 说说Activity、Intent、Service 是什么关系;

  • ApplicationContext和ActivityContext的区别;

  • 一张Bitmap所占内存以及内存占用的计算;

  • Serializable 和Parcelable 的区别;

  • 请描述一下BroadcastReceiver;

  • 请描述一下Android 的事件分发机制;

  • 请介绍一下NDK;

  • 什么是NDK库,如何在jni中注册native函数,有几种注册方式;

  • AsyncTask 如何使用;

  • 对于应用更新这块是如何做的?(灰度,强制更新,分区域更新);

  • 混合开发,RN,weex,H5,小程序(做Android的了解一些前端js等还是很有好处的);

  • 什么情况下会导致内存泄露;

  • 如何对Android 应用进行性能分析以及优化;

  • 说一款你认为当前比较火的应用并设计(直播APP);

  • OOM的避免异常及解决方法;

  • 屏幕适配的处理技巧都有哪些;

  • 两个Activity 之间跳转时必然会执行的是哪几个方法?

  • 答:一般情况下比如说有两个activity,分别叫A,B,当在A 里面激活B 组件的时候, A 会调用onPause()方法,然后B 调用onCreate() ,onStart(), onResume()。
    这个时候B 覆盖了窗体, A 会调用onStop()方法. 如果B 是个透明的,或者是对话框的样式, 就不会调用A 的onStop()方法。

Java基础

  • 集合类以及集合框架;HashMap与HashTable实现原理,线程安全性,hash冲突及处理算法;ConcurrentHashMap;

  • 进程和线程的区别;

  • Java的并发、多线程、线程模型;

  • 什么是线程池,如何使用? 答:线程池就是事先将多个线程对象放到一个容器中,当使用的时候就不用new 线程而是直接去池中拿线程即可,节
    省了开辟子线程的时间,提高的代码执行效率。

  • 数据一致性如何保证;Synchronized关键字,类锁,方法锁,重入锁;

  • Java中实现多态的机制是什么;

  • 如何将一个Java对象序列化到文件里;

  • 说说你对Java反射的理解; 答:Java 中的反射首先是能够获取到Java 中要反射类的字节码, 获取字节码有三种方法,
    1.Class.forName(className) 2.类名.class 3.this.getClass()。然后将字节码中的方法,变量,构造函数等映射成相应的Method、Filed、Constructor 等类,这些类提供了丰富的方法可以被我们所使用。

  • 同步的方法;多进程开发以及多进程应用场景;

  • 在Java中wait和seelp方法的不同;答:最大的不同是在等待时wait 会释放锁,而sleep 一直持有锁。wait 通常被用于线程间交互,sleep 通常被用于暂停执行。

  • synchronized 和volatile 关键字的作用;答:1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。2)禁止进行指令重排序。

  • volatile 本质是在告诉jvm 当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取;synchronized 则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。
    1.volatile 仅能使用在变量级别;synchronized 则可以使用在变量、方法、和类级别的
    2.volatile 仅能实现变量的修改可见性,并不能保证原子性;synchronized 则可以保证变量的修改可见性和原子性
    3.volatile 不会造成线程的阻塞;synchronized 可能会造成线程的阻塞。
    4.volatile 标记的变量不会被编译器优化;synchronized 标记的变量可以被编译器优化

  • 服务器只提供数据接收接口,在多线程或多进程条件下,如何保证数据的有序到达;

  • ThreadLocal原理,实现及如何保证Local属性;

  • String StringBuilder StringBuffer对比;

  • Java如何调用c、c++语言;

  • 接口与回调;回调的原理;写一个回调demo;

  • 泛型原理,举例说明;解析与分派;

  • 抽象类与接口的区别;应用场景;抽象类是否可以没有方法和属性;

  • 静态属性和静态方法是否可以被继承?是否可以被重写?以及原因?

  • 修改对象A的equals方法的签名,那么使用HashMap存放这个对象实例的时候,会调用哪个equals方法;

  • 说说你对泛型的了解;

  • Java的异常体系;

  • 如何控制某个方法允许并发访问线程的个数;

  • 动态代理的区别,什么场景使用;

数据结构与算法

其他

非技术问题汇总

HR问题汇总


更多面试和学习资料点击下面的“阅读原文”获取

看完本文有收获?请分享给更多人

Java和Android架构

欢迎关注我们,一起讨论技术,扫描和长按下方的二维码可快速关注我们。搜索微信公众号:JANiubility。

公众号:JANiubility