JAVA基础习题

  java

  • 什么是JVM? 为什么称Java为跨平台的编程语言?
  • 答案:① 概述:JVM是Java虚拟机的英文简称。全称为Java Virtual Machine

               ② 用途:JVM是用来执行Java字节码的虚拟机,每个Java源文件将被编译成字节码文     件(即.class文件),然后在JVM中执行。

               ③ 作用:Java之所以可以跨平台,关键因为JVM屏蔽了与具体操作系统平台相关的信息,只需要有经过编译的字节码(.class文件)在JVM上运行就可以了。

    其实,JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。

  • “static” 关键字是什么意思?在Java里可以 override private 或 static 的方法吗?
  •      static关键字表示静态的意思,用于修饰成员变量和成员函数。表示可以在没有类的实例的        情况下,用类名.变量名或者类名.函数名,进行访问
  • 都不能

    覆盖,也就是我们常说的重写,是子类继承父类,且子类中的方法和父类中的方法,方法名相同,参数个数和类型相同,返回值相同。

    private修饰的方法,不能被继承,所以也不存在重写(覆盖)

    static修饰的方法,是静态方法,在编译时就和类名就行了绑定。而重写发生在运行时,动态绑定的。何况static方法,跟类的实例都不相关,所以概念上也适用。

  • Java中什么是方法的 Override(覆盖) 和 Overload(重载)?
    • 覆盖(重写):方法覆盖发生在父类与子类之间,如果在子类中定义的一个方法,其名称返回类型参数签名正好与父类中某个方法的名称返回类型参数签名相匹配,那么子类的方法覆盖了父类的方法。
    • 重载:在同一个类中,如果有两个方法的方法名相同,但参数不一致,那么可以说,一个方法是另一个方法的重载方法。
      因此,重载方法必须满足两个条件:
    • 1、方法名相同
    • 2、方法的参数类型、个数、顺序至少有一项不同(这部分属于参数签名
  • 同步方法与同步块的区别 ?
    • 为何要使用同步?

      java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),
      将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用,
      从而保证了该变量的唯一性和准确性。

      同步方法和同步代码块的区别是什么?

       
      • 同步方法默认用this或者当前类class对象作为锁;
      • 同步代码块可以选择以什么来加锁,比同步方法要更细颗粒度,我们可以选择只同步会发生同步问题的部分代码而不是整个方法;
      • 同步方法使用关键字 synchronized修饰方法,而同步代码块主要是修饰需要进行同步的代码,用 synchronized(object){代码内容}进行修饰。
  • java集合

  • 集合和数组的区别?
  • 一、定义

    1.数组:数组的大小是固定的,并且只能存放同一种类型的数据(基本类型数据或引用类型数据);

    2.集合:可以对数据数量不固定的数组进行存储和操作。如果程序中不清楚到底有多少对象,需要在容量不足的时候进行自动扩充,则需要使用集合,而不选择数组。

    3.联系:可以通过相应的toArray和Arrays.asList()方法进行相互转换。

    二、集合的接口区别

    1.List:有序,元素可重复

    ArrayList、LinkedList和Vector是三个主要的实现类。ArrayList是线程不安全的, Vector 是线程安全的,这两个类底层都是由数组实现的LinkedList是线程不安全的,底层是由链表实现的。

    2.Set:元素不可重复

    HashSet和TreeSet是两个主要的实现类。Set 只能通过游标来取值,并且值是不能重复的。

    3.Map: 键值对集合

    其中key列就是一个集合,key不能重复,但是value可以重复。HashMap、TreeMap和Hashtable是Map的三个主要的实现类。HashTable是线程安全的,不能存储 null 值;HashMap不是线程安全的,可以存储 null 值。

    三、List与ArrayList的区别

    1.List是接口,List特性就是有序,会确保以一定的顺序保存元素;

       ArrayList是它的实现类,是一个用数组实现的List。

    2.如果在开发的时候觉得ArrayList,HashMap的性能不能满足你的需要,可以通过实现List,Map(或者Collection)来定制你的自定义类。

  • 使用集合框架的好处?

  •  1,java集合框架,提供了多种集合类型,以及高性能/高质量的数据结构实现
     2,集合之间可以方便的实现相互转换
     3,各种类型的集合接口与具体实现分离
     4,使开发者将时间精力致力于改善程序本身的质量和性能
      (1)减少程序工作量
      (2)提高程序速度和质量
      (3)减少学习和使用新API的工作量
     5,避免了直接操作对象数组带来的同步/异步/性能/效率/异常/接口设计等繁琐问题
     6,java集合框架是典型的面向对象接口编程的体现
     
  • List,Set,Map三者的区别,对集合框架底层数据结构进行展开分析?
  • 一、结构特点
    List、Set是存储单列的数据集合,都继承与Collection接口。
    Map是存储键值对这样的双列数据的集合,是个独立接口。
    List中存储的数据是有序的,可以是重复的。
    Set中存储的数据是无序的,且不允许重复。
    Map中存储的数据是无序的,他的键是不允许重复的,值是可以重复的。

    二、相关的实现类
    List的接口有三个实现类。
       1.1 ArrayList
       优点: 底层数据结构是数组,查询快,增删慢。
       缺点: 线程不安全(一般不考虑到线程的安全因素,用Arraylist效率比较高)
       1.2 LinkedList
       优点: 底层数据结构是链表,增删快,查询慢。
       缺点: 线程不安全。
       1.3 Vector
       优点: 底层数据结构是数组,查询快,增删慢。线程安全。
       缺点: 效率低。
    Set接口有三个实现类
       2.1 HashSet
       为快速查找而设计的Set,依赖hashCode()和equals()方法保证元素的唯一性。如果没有其他限制,这就是我们的默认选择,因为他对速度进行了优化。
       2.2 TreeSet
       保证元素处于排序状态,底层为树结构,元素必须实现Comparable接口。
       2.3 LinkedHashSet
       具有HsahSet的查询速度,内部使用链表维护元素的顺序(插入的次序)在使用迭代器遍历Set时,结果会按元素插入的次序显示。元素也必须定义hashCode()方法。
    Map接口有6个实现类。
       3.1 HashMap
       Map基于散列表的实现(取代了Hashtable)。插入和查询"键值对"的开销是固定的。可以通过构造器设置容量和负载因子,以调整容器性能。
       3.2 LinkedHashMap
       类似于HashMap,但是迭代遍历他时,取得的"键值对"的顺序是其插入次序,或是最近最少使用的(LRU)的次序。只比HashMap慢一点;而在迭代访问时反而更快,因为他使用链表维护内部次序。
       3.3 TreeMap
       是SortedMap现阶段的唯一实现。基于红黑树实现。查看"键"或者"键值对"时,他们会被排序(次序由Comparable或Comparator j决定)。TreeMap的特点在于,所得到的结果是经过排序的。
       3.4 WeakHashMap
       弱键(weak key)映射,允许释放映射所指的对象;这是为解决某类特殊问题而设计的。如果映射之外没有引用指向某个"键",则此"键"可以被垃圾回收器回收。
       3.5 ConcurrentHashMap
       一种线程安全的Map。
       3.6 IdentityHashMap
       使用"=="代替"equals()"对键进行比较的散列映射,专门解决特殊问题而设计出的。

面向对象

  • 简述成员变量和局部变量的区别?
    • 从语法形式上看:成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数;成员变量可以被 public,private,static 等修饰符所修饰,而局部变量不能被访问控制修饰符及 static 所修饰;但是,成员变量和局部变量都能被 final 所修饰。
      从变量在内存中的存储方式来看:如果成员变量是使用 static 修饰的,那么这个成员变量是属于类的,如果没有使用 static 修饰,这个成员变量是属于实例的。而对象存在于堆内存,局部变量则存在于栈内存。
      从变量在内存中的生存时间上看:成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而自动消失。
      成员变量如果没有被赋初值:则会自动以类型的默认值而赋值(一种情况例外:被 final 修饰的成员变量也必须显式地赋值),而局部变量则不会自动赋值。
  • 简述面向对象的三大特性分别是什么,以及主要功能?
    • 1、封装:封装是将过程和数据包围起来,数据只能通过定义的接口访问。面向对象计算从一个基本概念开始,即现实世界可以表示为一系列完全自治的、封装的对象,这些对象通过受保护的接口访问其他对象。

      2、继承:继承是一种层次模型,它连接类,允许并鼓励类的重用,提供了一种明确表达共性的方法。对象的新类可以从现有类派生,这个过程称为类继承。新类继承原类的属性。新类被称为原类的派生类(子类),原类被称为新类的基类(父类)。

      3、多态:多态允许不同类的对象响应相同的消息。例如,同样的加法,两次相加和两个整数相加,一定是完全不同的。多态语言具有灵活性、抽象性、行为共享性和代码共享性等优点,较好地解决了应用程序功能的同名问题。

单选题

函数式编程是()

  • A. 一种编程语言
  • B. 一种程序设计思想
  • C. 面向对象程序设计的一种实现
  • D. Java操作集合的工具框架

可以将Stream结果聚合为List集合的正确声明是()

  • A. collect(new List());
  • B. collect(Collections.toList());
  • C. collect(Collect.arrays());
  • D. collect(Collectors.toList());

判断题

Lambda表达式可以省略函数的参数类型()

  • A. 对
  • B. 错

Lambda表达式的函数参数列表与函数体以 => 等号箭头分隔()

  • A. 对
  • B. 错

Lambda表达式无法描述无参数的函数()

  • A. 对
  • B. 错

集合Stream可通过过滤操作移除源集合中的元素()

  • A. 对
  • B. 错

Stream的collect()方法,支持基于Map的分组聚合()

  • A. 对
  • B. 错

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值