Android面试题Java篇

作者: 迷途小码农h | 来源:发表于2019-04-22 16:20 被阅读17次

    前言

    一年之计在于春 金三银四已经要到来,2019的新的开始,作为一个开发人员,你是否面上了自己理想的公司,薪资达到心中理想的高度?

    面试:如果不准备充分的面试,完全是浪费时间,更是对自己的不负责。
    今天给大家分享下我整理的Java架构面试专题及答案,其中大部分都是大企业面试常问的面试题,可以对照这查漏补缺,当然了,这里所列的肯定不可能覆盖全部方式,不过也希望能对即将找工作的朋友起到一些帮助!

    1.词法分析:将一串文本按规则分割成最小的结构,关键字、标识符、运算符、界符和常量等。一般实现方法是自动机和正则表达式
    2.语法分析:将一系列单词组合成语法树。一般实现方法有自顶向下和自底向上
    3.语义分析:对结构上正确的源程序进行上下文有关性质的审查
    4.目标代码生成
    5.代码优化:优化生成的目标代码
    Java 中内部类为什么可以访问外部类
    因为内部类创建的时候,需要外部类的对象,在内部类对象创建的时候会把外部类的引用传递进去

    java类加载过程:

    1.加载时机:创建实例、访问静态变量或方法、反射、加载子类之前
    2.验证:验证文件格式、元数据、字节码、符号引用的正确性
    3.加载:根据全类名获取文件字节流、将字节流转化为静态储存结构放入方法区、生成class对象
    4.准备:在堆上为静态变量划分内存
    5.解析:将常量池中的符号引用转换为直接引用
    6.初始化:初始化静态变量
    静态方法跟静态代码块有什么区别
    静态方法属于类,用类名.就能直接调用,静态代码块是类加载的时候就会调用的

    关键字final和static是怎么使用的

    final:

    1、final变量即为常量,只能赋值一次。
    2、final方法不能被子类重写。
    3、final类不能被继承。
    static:

    1、static变量 对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存, 在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。
    2、static代码块
    static代码块是类加载时,初始化自动执行的。
    3、static方法
    static方法可以直接通过类名调用,任何的实例也都可以调用,因此static方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。
    String,StringBuffer,StringBuilder区别

    1、三者在执行速度上:StringBuilder > StringBuffer > String (由于String是常量,不可改变,拼接时会重新创建新的对象)。
    2、StringBuffer是线程安全的,StringBuilder是线程不安全的。(由于StringBuffer有缓冲区)
    StringBuffer跟StringBuider的区别
    StringBuider非线程安全,执行速度快,单线程用这个类

    Java中重载和重写的区别:

    1、重载:一个类中可以有多个相同方法名的,但是参数类型和个数都不一样。这是重载。
    2、重写:子类继承父类,则子类可以通过实现父类中的方法,从而新的方法把父类旧的方法覆盖。

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

    答:方法的重写Overriding和重载Overloading是Java多态性的不同表现

    重写Overriding是父类与子类之间多态性的一种表现
    重载Overloading是一个类中多态性的一种表现.

    说说你对Java反射的理解

    JAVA反射机制是在运行状态中, 对于任意一个类, 都能够知道这个类的所有属性和方法; 对于任意一个对象, 都能够调用它的任意一个方法和属性。 从对象出发,通过反射(Class类)可以取得取得类的完整信息(类名 Class类型,所在包、具有的所有方法 Method[]类型、某个方法的完整信息(包括修饰符、返回值类型、异常、参数类型)、所有属性 Field[]、某个属性的完整信息、构造器 Constructors),调用类的属性或方法自己的总结: 在运行过程中获得类、对象、方法的所有信息。

    说说你对Java注解的理解

    元注解的作用就是负责注解其他注解。java5.0的时候,定义了4个标准的meta-annotation类型,它们用来提供对其他注解的类型作说明。
    @Target
    @Retention
    @Documented
    @Inherited

    switch语句能否作用在byte上,能否作用在long上,能否作用在String上?

    switch能作用在byte、char、short和int上,JDK1.7后可以作用在String上。

    ”==”和equals方法究竟有什么区别?

    ==和equals都可以比较地址。==是运算符,equals是方法,方法可以通过重写改变其行为,如String的equals就是比较字符串内容。

    构造方法能否被重写和重载?

    构造方法不能被重写但是能被重载。

    面向对象的特征有哪些?

    封装、继承、多态和抽象。

    抽象类和接口的区别?

    1).抽象类是abstract class修饰,接口是interface修饰。
    2).抽象类可以有任意类型的属性,接口只能有静态常量修饰的属性。
    3).抽象类可以有普通方法和抽象法方法,接口的方法都是抽象方法。
    4).抽象类和接口都不能实例化,但是抽象类有构造方法,接口没有构造方法。
    5).抽象类只能单根继承,接口可以多重实现。
    内部类可以引用它的包含类的成员吗?有没有什么限制?
    可以引用。如果需要指定当前类时要用外部类.this来引用。如果引用局部变量,需要将局部变量指定为final。

    String s = new String(“xyz”);创建了几个String Object? 二者之间有什么区别?

    2个对象。”xyz”创建在字符串常量池中,new String()创建在堆中。

    try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

    会在return前执行。

    Integer与int的区别

    Integer为包装类,int是基本数据类型。包装类拥有方法和属性,基本数据类型不具备。包装类可以通过intValue来转换成基本数据类型,也可以通过new Integer()将基本数据类型转换为包装类。在JDK1.5后,包装类和基本数据类型可以实现自动转换。

    java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?

    java中有三种流,分别是字节流(InputStream、OutputStream)、字符流(Reader、Writer)、对象流(ObjectInputStream、 ObjectOutputStream)。

    谈谈final,finally,finalize的区别?

    final是修饰符,可以修饰类(不能被继承)、属性(常量)、和方法(不能被重写)。
    finally是异常处理块中的代码块,表示无论如何都会执行的代码块。
    finalize是Object类的方法,该方法在对象被垃圾回收之前执行的方法。
    当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
    java中只有值传递,如果传递的对象,实际也是传递该对象的地址。

    用最有效率的方法算出2乘以8等於几

    将2的二进制向左移3位,java中用<<来移位

    是否可以从一个static方法内部发出对非static方法的调用?

    不能,除非先创建非static方法所在类的对象。

    什么是内部类?内部类的作用

    内部类可直接访问外部类的属性
    Java中内部类主要分为成员内部类、局部内部类(嵌套在方法和作用域内)、匿名内部类(没构造方法)、静态内部类(static修饰的类,不能使用任何外围类的非static成员变量和方法,不依赖外围类)
    使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。 因为Java不支持多继承,支持实现多个接口。但有时候会存在一些使用接口很难解决的问题,这个时候我们可以利用内部类提供的、可以继承多个具体的或者抽象的类的能力来解决这些程序设计问题。可以这样说,接口只是解决了部分问题,而内部类使得多重继承的解决方案变得更加完整。

    静态属性和静态方法是否可以被继承?是否可以被重写?以及原因?
    可继承 不可重写 而是被隐藏
    如果子类里面定义了静态方法和属性,那么这时候父类的静态方法或属性称之为"隐藏"。如果你想要调用父类的静态方法和属性,直接通过父类名.方法或变量名完成。

    java的对象锁和类锁的区别

    java的对象锁和类锁在锁的概念上基本上和内置锁是一致的,但是,两个锁实际是有很大的区别的,对象锁是用于对象实例方法,或者一个对象实例上的,类锁是用于类的静态方法或者一个类的class对象上的。我们知道,类的对象实例可以有很多个,但是每个类只有一个class对象,所以不同对象实例的对象锁是互不干扰的,但是每个类只有一个类锁。但是有一点必须注意的是,其实类锁只是一个概念上的东西,并不是真实存在的,它只是用来帮助我们理解锁定实例方法和静态方法的区别的。

    总结

    以上就是这篇文章的内容了,喜欢的可以关注一下哦,也可以加android学习交流群1005956838,谢谢!

    相关文章

      网友评论

        本文标题:Android面试题Java篇

        本文链接:https://www.haomeiwen.com/subject/msqugqtx.html