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 >() 方法的过程。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

android国内一线互联网公司内部面试题库

以下面试题来自于百度、小米、乐视、美团、58、猎豹、360、新浪、搜狐内部题库 熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。 一、java基础 1.接口的意义(百度) 规范、扩展...

android国内一线互联网公司内部面试题库

转自: https://gold.xitu.io/entry/578d938079bc44005ff26aec/promote?utm_source=baidu&utm_medium=keyword...

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

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

2017下半年,一二线互联网公司Android面试题汇总

转眼就到了2017年10月,离2018就剩下几个月了,很多人估计正在跳槽的路上,整理一份Android高级开发工程师面试集锦,对照这些问题进行复习,将会事半功倍。废话不多说,直接上干货,由于是整理于网...
  • Ch97CKd
  • Ch97CKd
  • 2017年10月11日 00:00
  • 186

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

2017最新Android面试题,面试技巧

Android面试题整理

转载地址:http://www.jianshu.com/p/a22450882af2 Android面试题整理 字数1819 阅读5393 评论16 喜欢171 ...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

2017Android面试题(临时版一)

JAVA 相关 1.静态内部类、内部类、匿名内部类,为什么内部类会持有外部类的引用?持有的引用是this?还是其它? 静态内部类:使用static修饰的内部类 内部类:就是在某个类的...

android面试题总结加强再加强版(三)

转载地址:http://blog.csdn.net/superjunjin/article/details/7860025 26.如果后台的Activity由于某原因被系统回收了,如...

面试复习——Android工程师之Android面试大纲

文章会不定期更新,欢迎关注我的博客 Activity面试题 Fragment面试题 Service面试题 Broadcast Receiver面试题 WebView面试题 Binder面试题 Hand...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:2017各大知名互联网公司Android面试题
举报原因:
原因补充:

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