Android/Java面试题收集\面试经验

  对技术的考量绝大多数都是以深度优先、广度次之为标准的.

怎样花两年时间去面试一个人- http://mindhacks.cn/2011/11/04/how-to-interview-a-person-for-two-years/

> 高级Android工程师技术点
安卓工程师跳槽面试全指南- http://www.360doc.com/content/17/0926/07/38809403_690212478.shtml#
项目中的难点/亮点,程序员的技能水平/学习能力/团队合作/工作心态

高级Android工程师面试回忆录- http://blog.csdn.net/u011240877/article/details/51612274

Android 高级面试题及答案- https://www.cnblogs.com/deman/p/5860976.html

------------------------------------

[干货,阅后进BAT不是梦]面试心得与总结---BAT、网易、蘑菇街- http://geek.csdn.net/news/detail/236930

> Android:

Java面试题集- http://blog.csdn.net/dd864140130/article/details/55833087
Android面试题集- http://blog.csdn.net/dd864140130/article/details/57408502

2017年4月美团Android面试总结- http://mp.weixin.qq.com/s/Yru4F6YhhcRNpnFT-gf8Qg

2017 年初、阿里、腾讯、百度、华为、京东、搜狗和滴滴面试题汇集(更新篇)- http://blog.csdn.net/xiaole0313/article/details/62056612

面试求职- http://blog.csdn.net/wwj_748/article/category/1399759

android阿里面试题锦集- http://www.jianshu.com/p/cf5092fa2694#

Android面试题总结加强版(一)http://blog.csdn.net/itachi85/article/details/7426451

Android面试题总结加强版(二) http://blog.csdn.net/itachi85/article/details/7426457
Android面试题总结加强版(三)http://blog.csdn.net/itachi85/article/details/7426474

Android面试题总结加强版(四)http://blog.csdn.net/itachi85/article/details/8037989

Andorid-15k+的面试题-- http://blog.csdn.net/IT1039871366/article/details/50747567

Andorid面试题答案整理- http://www.cnblogs.com/sandyclaire1990/p/4969721.html

Android面试基础知识总结(一)- http://blog.csdn.net/wy819/article/details/51427918

Android 名企面试题及涉及知识点整理- http://www.jianshu.com/p/735be5ece9e8?ref=myread#

> Java:

Java方向如何准备BAT技术面试答案(java基础及提高)- http://geek.csdn.net/news/detail/203161

Android/Java面试题-- http://blog.csdn.net/mad1989/article/details/45223029
Android面试题集五(java基础)-- http://www.cnblogs.com/freeliver54/archive/2013/03/11/2953383.html
2016 JAVA与Android面试题整理-- http://blog.csdn.net/it1039871366/article/details/50667188
2016校招Android开发,一个非重本应届生的坎坷求职路-- http://www.nowcoder.com/discuss/3244

Android面试题集五(java基础)-- http://blog.csdn.net/jackhenry/article/details/7341872

java基础知识汇总- http://mp.weixin.qq.com/s/9v1KsrUtOVr_6pHTzg-1Ww?ref=myread

2017年初JAVA面试题汇集- http://www.itdongshi.com/show/93.html?ref=myread

> JavaWeb

面试心得与总结(BAT、网易、蘑菇街)- https://yq.aliyun.com/articles/104308?spm=5176.8246799.0.0.9Qowhe#

Java Web架构知识整理,记一次阿里面试经历- https://my.oschina.net/u/3518116/blog/994015

2017的金秋阿里、京东、美团、滴滴带回来的面试题及答案(javaWeb)- http://blog.csdn.net/bntX2jSQfEHy7/article/details/78279969

----------------------------
android性能优化系列 http://www.trinea.cn/android/performance/
2016JAVA与Android面试题整理 http://www.nowcoder.com/discuss/3244
百度的android面试总结分析 http://blog.csdn.net/lpjishu/article/details/46425281
android面试题总结从初级到进阶 http://blog.csdn.net/vfush/article/details/51508098
android最全面试题71道详解 http://blog.csdn.net/superjunjin/article/details/7772030
四大组件跟Handler相关的知识 http://www.iwfu.me/2016/07/17/   安卓面试题:1-关于activity/
Java线程面试题Top50 http://www.jcodecraeer.com/a/chengxusheji/java/2015/0206/2421.html
国内一线互联网公司内部面试题库 http://blog.csdn.net/wdong_love_cl/article/details/51989028
囊括了所有你能想到的面试题目 https://github.com/GeniusVJR/LearningNotes/blob/master/README.md
40个Java集合面试问题和答案 http://www.jcodecraeer.com/a/chengxusheji/java/2015/0520/2896.html
Java开发中的23种设计模式详解 http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html
面试和算法心得 https://github.com/julycoding/The-Art-Of-Programming-By-July/blob/master/ebook/zh/Readme.md
----------------------------

1.HashMap,Hashset,ArrayList以及LinkedList集合的区别,以及各自的用法
2.Activity的启动模式有哪几种
3.介绍Handler机制
4.线程考核,解析sleep,wait,join,yield方法,以及notify 和notifyAll是如何控制线程同步的
5.android 存储方式以及各至用法
6.ListView 中BaseAdapter的使用和优化;在ListView中的item放置一个按钮,如何使用按钮对不能的item响应不同的事件
7.编程题:
题意:生成一个1-100的随机数组,但数组中的数字不能重复,即位置是随机的,但数组元素不能重复

监听数据库变化的一个接口--> ContentObserver
1.以前做过项目的,画个简单的架构图,介绍之前的项目;
2.项目中遇到的问题,以及怎么解决的.麦洛就举了之前写的上拉下拉这个控件的例子
3.Android Activity生命周期
4.Adapter中View重用的问题

1.介绍Http协议
2.Http协议实现多线程下载并支持断点续传,以及服务端是怎么支持的?
3.面向对象的理解,面向对象的原则–开发封闭原则的理解
4.android wap与net的两种连接方式
5.项目中的一些问题

---------------------------------------------

> 说说内存泄露的情况有哪些  android
  导致内存泄漏最主要的原因就是某些长存对象持有了一些其它应该被回收的对象的引用,导致垃圾回收器无法去回收掉这些对象,那也就出现内存泄漏了。
1. 查询数据库而没有关闭Cursor
2. 调用registerReceiver后未调用unregisterReceiver().
3. 未关闭InputStream/OutputStream
4. Bitmap使用后未调用recycle()
5. Context泄露

1、静态集合类
  声明为静态(static)的HashMap、Vector 等集合类的使用最容易引起内存泄漏,因为这些静态变量的生命周期与应用程序一致,如果该HashMap是静态的,那么它将一直存在,而其中所有的Object对象也不能被释放,因为它们也将一直被该HashMap引用着。
2、 监听器(观察者模式) 
  在java 编程中,我们都需要和监听器打交道,通常一个应用当中会用到很多监听器,比如观察者模式,我们会调用一个控件的诸如addClickListener()等方法来增加监听器,但往往在释放对象的时候却没有记住去remove这些监听器,从而增加了内存泄漏的机会。
3、物理链接,数据库操作
  一些物理连接,比如数据库连接和网络连接,除非其显式的关闭了连接,否则是不会自动被GC 回收的。例如Java 数据库连接一般用DataSource.getConnection()来创建,当不再使用时必须用Close()方法来释放,因为这些连接是独立于JVM的。其中对于Resultset和Statement对象可以不进行显式回收,但Connection一定要显式回收,因为Connection在任何时候都无法自动回收,而Connection一旦回收,Resultset和Statement对象就会立即为NULL。但是如果使用连接池,情况就不一样了,除了要显式地关闭连接,还必须显式地关闭Resultset和Statement对象(关闭其中一个,另外一个也会关闭),否则就会造成大量的Statement 对象无法释放,从而引起内存泄漏。
4、内部类和外部模块等的引用 
  内部类的引用是比较容易遗忘的一种,而且一旦没释放可能导致一系列的后继类对象没有释放。对于程序员而言,自己的程序很清楚,如果发现内存泄漏,自己对这些对象的引用可以很快定位并解决,但是现在的实际开发过程中往往并非一个人实现,模块化的思想在现代软件中非常明显,所以程序员要小心外部模块不经意的引用.

-----------------------------------------------------

> Java (JavaWeb) 研发方向

 超实用的——BAT面试技巧--http://blog.csdn.net/tzs_1041218129/article/details/52280918
 最大的优点是什么,缺点是什么,职业规划 -- http://www.360doc.com/content/16/0224/14/19550587_537024265.shtml
 如何准备BAT技术面试答案(上)——Java研发方向-- http://blog.csdn.net/tzs_1041218129/article/details/52355867
 如何准备BAT技术面试答案(中)——Java研发方向-- http://blog.csdn.net/tzs_1041218129/article/details/52404456

 如何准备BAT技术面试答案(下)——Java研发方向-- http://blog.csdn.net/tzs_1041218129/article/details/52415971

拿百度offer的三面经历- http://blog.csdn.net/huaieli1/article/details/78585801

--------------------------------------------------

> 问题及解决方案-面试及经验增长
> Android 多个Fragment嵌套导致的三大BUG- http://blog.csdn.net/megatronkings/article/details/51417510
> 浅谈Android Fragment嵌套使用存在的一些BUG以及解决方法- http://blog.csdn.net/primer_programer/article/details/27184877
> fragment中嵌套viewpager,vierpager中有多个fragment,不显示 -http://blog.csdn.net/shaoyizhe2006/article/details/27352349
        用getChildFragmentManager() 替换。
> Activity动态添加Fragment-- http://blog.csdn.net/qq_16953755/article/details/51372380
> 【Android面试】(一):Android中activity保存状态和数据到底该在哪个方法中进行- http://blog.csdn.net/cyp331203/article/details/44985087
> Activity生命周期:
  启动Activity:onCreate->onStart->onResume
  锁屏或被其它Activity覆盖:onPause->onStop
  解锁或由被覆盖状态再回到前台:onRestart->onStart->onResume
  跳转到其它Activity或按Home进入后台:onPause->onStop
  退回到此Activity:onRestart->onStart->onResume
  退出此Activity:onPause->onStop->onDestory
  对话框弹出不会执行任何生命周期(注:对话框如果是Activity(Theme为Dialog),还是会执行生命周期的)
  从A跳转到B:A-onPause->B-(onCreate->onStart->onResume)-A-onStop
  从B返回到A:B-onPause->A-(onRestart->onStart->onResume)-B-(onStop->onDestroy)
  默认情况下,切换屏幕方向时Activity会销毁、重建 onPause->onStop->onDestroy->onCreate->onStart->onResume


> Activity启动模式
  standard 标准模式(activity默认的): 每次调用startActivity, 都会把activity给创建.
  singleTop 单一顶部模式: 每次调用startActivity, 需要判断当前的activity是否已经被创建过并且查看任务栈的顶部是否是当前的 activity, 如果是, 调用onNewIntent方法, 如果不是, 就创建一个新的activity实例.
应用场景: 非法程序员, 写的流氓程序, 一直在弹出某个页面.
  singleTask 单一任务栈模式: 如果任务栈中已经存在当前activity, 再去调用startActivity, 会调用当前任务栈的onNewIntent方法. 同时 , 会把所有以上的activity都给清除出栈.
应用场景: 如果一个界面显示的资源非常大, 只需要初始化一次实例.
  singleInstance 单一实例模式: activity会在一个新的任务栈中实例化, 并且其他的activity不会创建在新的任务栈中. 始终在整个系统中 会被初始化一次.
应用场景: 在整个系统中, 只需要初始化一次的页面.
  onNewIntent()
  如果IntentActivity处于任务栈的顶端,也就是说之前打开过的Activity,现在处于onPause、onStop状态的话,其他应用再发送Intent的话,执行顺序为:
onNewIntent,onRestart,onStart,onResume。

> Fragment生命周期
  onAttach->onCreate->onCreateView->onActivityCreated->onStart->onResume->onPause->onStop->onDestroyView->onDestroy->onDetach
> Serializable和Parcelable的区别
  都能实现序列化且可用于Intent间的数据传递
  Serializable是Java中的序列化接口,使用简单但开销大,序列化和反序列化过程需要大量I/O操作。
  Parcelable更适合Android平台,使用麻烦但效率高,主要用在内存序列化上。


> 文件和数据库哪个效率高
数据量大时使用数据库效率高
数据量小时使用文件效率高

---------------------------------------------------

面试:
1) Coding Skill. 大概就是让你在纸上写code,比如写一个链表反转,看看怎么样。至于拿什么语言写随意;
2) Data Structure & Algorithm. 问一些算法数据结构的题目,看你的答案;
3) OOP & Design Pattern. 问一些常见的OO和设计模式之类的问题;

  一个具有如下特征的Android程序员是我们所需要的: 
1. 具有本科及以上学历(名校更好) 
2. 具有2年及以上的工作经验(名企更好) 
3. 技术扎实,有技术追求和工作激情 
4. 良好的沟通和协作

 中级岗位(百度T4)需要掌握的知识点是:基本知识点、深入知识点;
 高级岗位(百度T5)需要掌握的知识点是:基本知识点、深入知识点、基本知识点的细节和系统核心机制。 
  1. 基本知识点 
比如四大组件如何使用、如何创建Service、如何进行布局等。这类知识是需要熟练掌握的,并且也没什么难度。 
  2. 稍微深入的知识点 
比如AIDL、Binder、多进程、View的绘制流程、事件分发、消息队列等。这类知识对于高级开发者来说也是必须掌握的,然而相信很多候选者在面试之前并不能对这些问题了如指掌。这些问题基本都是面试过程中很常见的问题,也是高级岗位所必须掌握的问题,不搞定这些问题无法达到百度的高级工程师的标准,因此也不可能通过面试。 
  3. 基本知识点的细节 
比如Activity的启动模式和标记位、Service同时处于start和bind状态时的停止问题、AsyncTask的同步异步问题以及使用时的限制等,这种问题还有很多。这类知识点,大家在开发过程中可以并不会去注意,这会导致一个问题,那就是开发应用没问题,但是在面试时面试官只要稍微问下细节或者特殊情况,就hold不住了。 这类问题也是高级开发者所需要掌握的,有些面试官喜欢问一些看似刁钻的问题,但是候选者如果回答不了也是不好的。 
  4. 系统核心机制 
比如主线程的消息循环、主线程如何和AMS如何跨进程交互、SystemServer进程中的各种Service的工作方式、AsyncTask的工作原理等。这类知识对于高级开发者也是建议掌握的,因为它们可以让开发者理解Android的运行体系。 这类问题并不是所有的Android面试都会涉及到,但是技术含量高的大公司有可能涉及此类问题。 
  5. 琐碎的知识点 
此类知识点我把它们定义为一些重要但是没有什么技术难度的问题,比如如何打开一个网页、如何打电话、如何发短信、如何定位、多点触控等,这类问题往往不好记忆,但是需要的时候去查一下就能立马搞定。这类问题基本上不会出现在面试过程中。

你可能感兴趣的:(技术人生(职业与面试))