2017各大知名互联网公司Android面试题

原创 2017年07月23日 17:37:30

整理了今年几家面试过的知名互联网公司的题目(腾讯、百度、大疆、优酷等),基础的重要性是一如既往地重要。本文将以系列的形式来进行,整理在面试过程中比较与代表性的内容,以下是java基础知识部分。

Java基础

1、阐述下对象的自动装箱和拆箱

 自动装箱:
        Integer i = 1;
 其实编译器为你自动实现了:
        Integer i = Integer.valueOf(1);
 自动拆箱:
        Integer i = 1;
        int a = i;
 实际上执行了:
        int a = i.intValue();        

2、switch支持的数据类型:

    包括byte、short、char、int 和 enum ,及包装类型Character、Byte、Short和Integer,
    java7后又加入了对String的支持。
    阐述下支持String的原理:
    使用字符串的hash值作为表达式的值,而由于相同哈希值的情况下仍存在冲突的可能,
    所有在case语句块时仍需要通过equals方法来判断相等。

3、equals、==、hashCode:

  == : 比较引用地址的相等或基本数据类型/枚举类型的相等
  Equal:对象看情况的相等
  hashCode:返回对象的存储地址
  关系:
     两对象比较:euqals返回true时,hashCode叶也相等。
              hashCode相等时,equals返回不一定相等。

     instanceof: 判断对象类型5是否相等,当父、子类判断时存在单向情况。                     
     对象判断equals方法:
             1、 == 判断引用地址  2、instanceof 判断类型  3、属性匹配
             4、自反性、对称性、传递性、一致性  5、重写hashcode

4、创建对象

主要有以下四种对象创建方式:
1、new  2、反射  (这俩要调用构造函数)  3、clone  4、 反序列化
其中:
克隆:通过实现Cloneable、Serializable(序列化、反序列化实现)来实现对象的克隆

反射:
   该方式的表现主要有:
   1、运行时取得字段与方法和修改(包括常量) 
   2、创建对象
   原理:jvm通过字节码文件生成相应的对象或获取其信息
   优缺点:增加了程序设计的灵活性;性能消耗较大

5、简述下多态:

 重载:同一类中,同名函数不同的参数形式,基于对象实际的类型来选择所调用的方法,达到动态绑定的目的。
 重写:父类、子类中,同名同参方法,重新定义方法实现。
 区别: 前者编译时多态性、后者运行时多态性
 (静态方法除外,多态是针对实例方法) 

6、简述下抽象和接口的区别:

 抽象类:区别与普通的类,不能直接被实例化,可以有构造函数,并且子类可不实现其抽象方法。
 接口:修饰符为public、变量为final,没有实际的方法,可实现多继承。

7、强引用、软引用、弱引用、虚引用:

强引用:java对象拥有最强的引用,虚拟机在一般情况下不会轻易该引用的对象;
软引用:当内存不足时,如果一个java对象仅含有软引用时,则该对象会被虚拟机回收;
弱引用:当虚拟机发现java对象仅含有弱引用时,就会将其进行回收;
虚引用:同引用队列一起用,跟踪回收活动;

8、简述public、protected、private的区别:

public作用范围:当前类、同一个包、子类、其他包;
protected作用范围:当前类、同一个包、子类;
default作用范围:当前类、同一个包;
private作用范围:当前类;    

9、简述下创建线程的方式:

 1、直接通过new thread 的方式;
 2、实现runnable接口;
 3、通过接口callable  (callable能拿到返回值和抛出异常);
 4、通过线程池来生成线程;          

10、sleep、wait、yield、notify、notifyall

   sleep和yield区别:
           sleep 给予线程的运行机会 不考虑优先级,then 阻塞  
           yield:给优先级高的线程执行,然后进入就绪状态
   wait和sleep区别:
           wait:释放对象锁 object的方法   —> notify
          sleep:不释放锁  thread的方法
      两者都可通过interrupted 打断暂   
   notify和notifyall区别:
         notify:唤醒的某一线程去得到锁
         notifyall:唤醒所有等待线程去竞争锁
   wait/notify/notifyall : 它们都需在同步块中调用 ,均可释放对象锁;
     wait:立即释放控制权 然阻塞(需notify)     notify:执行完再释放

11、synchronized 、Lock区别:

synchronized:关键字   
Lock:对象   可控制获取锁的时间与获取锁的信息
手动释放锁、让线程响应中断、可知获得锁与否 
多线程竞争较激烈时,Lock较优

上下文切换:cpu控制权由一个正在运行的线程切换到另一个就绪状态的线程

12、异常处理:

Error、Exception:
父类:Throwable :含异常出现时的log
Error:系统级错误,如OOM
Exception:
          需程序捕捉和处理的程序设计性错误
          被检查异常(throw、try catch)、运行时异常

Throw:方法中抛出异常
Throws:申明异常
try catch finally:
    try中有return 会记录返回值 待finally执行完  返回值不变
    如finally中有return 则值会变
    finally:释放外部资源 

13、简述下JVM内存模型

JVM的内存模型主要可以分为线程共享区和线程私有区,
线程共享区:java堆(放对象和数组、GC)、方法区(类信息、常量、静态变量等,永久代);
线程私有区:程序计数器(指示代码执行、无oom)、Java虚拟机栈(java方法调用)、native方法栈;
而每个线程都有自己的栈内存, 堆是共享的,线程会缓存对象到栈中使用,而volatile则可要求线程从内存中读取

14、简述下GC机制:

判断对象内存是否该被回收:JVM根据可达性分析(引用计数会出现互相引用的情况)
java内存回收算法大概可分为:
        分年代回收:年轻代(创建)、老年代(呆的久)、永久代
    标记-复制算法:区域分两块 一块使用另一块回收 交替使用
                     空闲区满时  就被复制到老年代区
    标记-清除、标记-整理算法

15、简述下java类的加载过程

类生命周期大致包括:加载、验证、准备、解析、初始化、使用和卸载这7个阶段,而前5个阶段为类的加载过程。
加载:获取类的为进制字节流,并转换为运行时的 数据结构,在java堆中生成Class对象;
验证:验证class文件的字节流信息是否符合当前虚拟机的要求;
准备:为类的静态变量分配内存并将其初始化为默认值;
解析:常量池的符号替换为直接引用的过程;
初始化:执行 < clinit >() 方法的过程。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Pro_Vinny/article/details/75201941

大疆提前批Android端 终面后加面

时间:2017.06.30 29号约了时间,说30号上午面一下。感觉终面都完了,还有面试,挺奇怪的。。。面试内容 自我介绍 项目-应用拉活实现机制 采取一个新的方案,是如何判断新的方案有效的呢? A...
  • u013647453
  • u013647453
  • 2017-10-08 14:11:48
  • 422

二面大疆提前批Android端

本以为没有后话了,没想到大疆今天又来了电话。 一面的情况请点击http://www.jianshu.com/p/eb75479901412017.6.18上午,大疆面试官打过来电话没有接到。下午三点...
  • u013647453
  • u013647453
  • 2017-07-11 22:46:48
  • 999

Android2017-2018最新面试题(3-5年经验个人面试经历)

2017-2018最新Android面试题 版权声明:本文为博主原创文章,未经博主允许不得转载。 原文链接:http://blog.csdn.net/huangqili1314/article/d...
  • huangqili1314
  • huangqili1314
  • 2017-05-28 13:07:49
  • 90591

2017某公司Android实习生笔试题总结

总体来说:笔试题还是相当简单的,不论前面单选、多选,还是后面的编程题,难度还是挺小的,都是基础知识。因此,想去这个公司工作的同学可以好好准备一下!废话不多说,直接上干货! 第一部分:单选、多选,考的...
  • program_developer
  • program_developer
  • 2017-03-24 22:34:09
  • 1589

Android面试题整理2017(1)

1.activity的生命周期。 方法 描述 可被杀死 下一个 onCreate() ...
  • snmkc_csdn
  • snmkc_csdn
  • 2017-05-09 19:33:28
  • 3191

2017年校招Android开发岗笔试面经总结

我觉得这段时间以来让我成长最快的不是学习的时候,而是每次面试然后被拒绝的时候。从大四开始每个人就投身于寻找工作的大军里面,对于应届生来说,优惠还是很多的,但是一旦错过了这段时间,从校招变成社招,之后找...
  • yishichangan1
  • yishichangan1
  • 2016-11-12 12:13:08
  • 2107

2017安卓面试题大全

JAVA 相关   1.静态内部类、内部类、匿名内部类,为什么内部类会持有外部类的引用?持有的引用是this?还是其它?   静态内部类:使用static修饰的内部类   内部类:就是在某...
  • IT_51888_liang
  • IT_51888_liang
  • 2017-09-13 09:56:59
  • 1566

[干货]2017已来,最全面试总结——这些Android面试题你一定需要

全网最全的Android面试题总结,2017年跳槽的你必备
  • xhmj12
  • xhmj12
  • 2017-01-25 20:29:45
  • 52782

善知堂整理2017年最新android笔试题,面试题 高清完整.pdf版下载

  • 2017年02月10日 16:24
  • 1.23MB
  • 下载

2017Android面试题

三金四银,又到了一年一度的跳槽季。也许有不少Android程序员开始摩拳擦掌蠢蠢欲动了。结合以往自己的经历,今天给大家总结下Android面试题,希望有帮助。 1:Activity生命周期? ...
  • wds1181977
  • wds1181977
  • 2017-02-17 09:22:35
  • 1151
收藏助手
不良信息举报
您举报文章:2017各大知名互联网公司Android面试题
举报原因:
原因补充:

(最多只允许输入30个字)