Java开发岗面试互联网大厂冲刺,每日10题Day2

Posted Java架构师-大仙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java开发岗面试互联网大厂冲刺,每日10题Day2相关的知识,希望对你有一定的参考价值。

大家好,我是大仙。马上就到了金九银十跳槽季了。大仙在这里每日分享一些面试题及其答案帮助需要跳槽和刚入门这一行的粉丝们,也是希望铁粉们能找到一份好的工作,为以后的坎坷铺平一段道路,文末大仙也整理了一下其它资料,有需求的读者可以戳链接领取!

一.抽象类必须要有抽象方法吗?

抽象类可以没有抽象方法,但是如果你的一个类已经声明成了抽象类,即使这个类中没有抽象方法,它也不能再实例化,即不能直接构造一个该类的对象。

如果一个类中有了一个抽象方法,那么这个类必须声明为抽象类,否则编译通不过。

抽象类的知识:

  • 抽象类必须有关键字abstract来修饰。
  • 抽象类可以不含有抽象方法。
  • 如果一个类包含抽象方法,则该类必须是抽象类。

二.普通类和抽象类有哪些区别?

普通类可以实例化,抽象类不能实例化;

普通类和抽象类都能被继承,但是抽象类被继承以后一般需要子类重写抽象类中继承下来的方法。

三.抽象类能使用 final 修饰吗?

final修饰的类不能被继承,没有子类。如果类中有抽象的方法也是没有意义的。abstract类为抽象类。即该类只关心子类具有的功能,而不是功能的具体实现。如果 用final修饰方法,那么该方法则不能再被重写。final 是不能修饰abstract所修饰的方法的。

知识拓展

inal关键字可以用来修饰类、方法、变量。各有不同。

A、修饰类(class)。

  • 该类不能被继承。
  • 类中的方法不会被覆盖,因此默认都是final的。
  • 用途:设计类时,如果该类不需要有子类,不必要被扩展,类的实现细节不允许被改变,那么就设计成final类

B、修饰方法(method)

  • 该方法可以被继承,但是不能被覆盖。
  • 用途:一个类不允许子类覆盖该方法,则用final来修饰
  • 好处:可以防止继承它的子类修改该方法的意义和实现;更为高效,编译器在遇到调用final方法转入内嵌机制,提高了执行效率。
  • 注意:父类中的private成员方法不能被子类覆盖,因此,private方法默认是final型的(可以查看编译后的class文件)

C、修饰变量(variable)

  • 用final修饰后变为常量。包括静态变量、实例变量和局部变量这三种。
  • 特点:可以先声明,不给初值,这种叫做final空白。但是使用前必须被初始化。一旦被赋值,将不能再被改变。

D、修饰参数(arguments)

  • 用final修饰参数时,可以读取该参数,但是不能对其作出修改。

四.接口和抽象类有什么区别?


抽象类和接口的区别有:

  • 抽象类要被子类继承,接口要被类实现。
  • 接口只能做方法声明,抽象类中可以作方法声明,也可以做方法实现。
  • 接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
  • 接口是设计的结果,抽象类是重构的结果。
  • 抽象类和接口都是用来抽象具体对象的,但是接口的抽象级别最高。
  • 抽象类可以有具体的方法和属性,接口只能有抽象方法和不可变常量。
  • 抽象类主要用来抽象类别,接口主要用来抽象功能。

五.java 中 IO 流分为几种?

  • 读取划分为输入输出流
  • 模块划分就是字节流和字符流
  • 权限划分就是节点流和处理流

六.BIO、NIO、AIO 有什么区别?


1.BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。

2.NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。

3.AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。

七.Files的常用方法都有哪些?

  • Files.exists() 检测文件路径是否存在
  • Files.createFile()创建文件
  • Files.createDirectory()创建文件夹
  • Files.delete() 删除文件或者目录
  • Files.copy() 复制文件
  • Files.move() 移动文件
  • Files.size()查看文件个数
  • Files.read() 读取文件
  • Files.write()写入文件

八.java 容器都有哪些?

JAVA的容器包括如下:

List,Map,Set ,Collection ,List ,LinkedList ,ArrayList ,Vector ,Stack ,Set
Map ,Hashtable ,HashMap ,WeakHashMap

数据容器主要分为了两类:

  • Collection: 存放独立元素的序列。
  • Map:存放key-value型的元素对。(这对于需要利用key查找value的程序十分的重要!)
  • 从类体系图中可以看出,Collection定义了Collection类型数据的最基本、最共性的功能接口,而List对该接口进行了拓展。

其中各个类的适用场景有很大的差别,在使用时,应该根据需要灵活的进行选择。此处介绍最为常用的四个容器:

  • LinkedList :其数据结构采用的是链表,此种结构的优势是删除和添加的效率很高,但随机访问元素时效率较ArrayList类低。
  • ArrayList:其数据结构采用的是线性表,此种结构的优势是访问和查询十分方便,但添加和删除的时候效率很低。
  • HashSet: Set类不允许其中存在重复的元素(集),无法添加一个重复的元素(Set中已经存在)。HashSet利用Hash函数进行了查询效率上的优化,其contain()方法经常被使用,以用于判断相关元素是否已经被添加过。
  • HashMap: 提供了key-value的键值对数据存储机制,可以十分方便的通过键值查找相应的元素,而且通过Hash散列机制,查找十分的方便。

九.Collection 和 Collections 有什么区别?

Collection与Collections的根本区别是:

1、Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。


2、Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。

Collections 是一个包装类,Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许,一些 collection 是有序的,而另一些则是无序的。


扩展资料:

  • 所有通用的 Collection 实现类(通常通过它的一个子接口间接实现 Collection)应该提供两个“标准”构造方法:一个是 void(无参数)构造方法,用于创建空 collection;
  • 另一个是带有 Collection 类型单参数的构造方法,用于创建一个具有与其参数相同元素新的 collection。
  • 实际上,后者允许用户复制任何 collection,以生成所需实现类型的一个等效 collection。尽管无法强制执行此约定(因为接口不能包含构造方法),但是 Java 平台库中所有通用的 Collection 实现都遵从它。
  • 此接口中包含的“破坏性”方法,是指可修改其所操作的 collection 的那些方法,如果此 collection 不支持该操作,则指定这些方法抛出 UnsupportedOperationException。
  • 如果是这样,那么在调用对该 collection 无效时,这些方法可能,
  • 但并不一定抛出 UnsupportedOperationException。例如,如果要添加的 collection 为空且不可修改,则对该 collection 调用 addAll(Collection) 方法时,可能但并不一定抛出异常。

十.List、Set、Map 之间的区别是什么?

以java为例,list set map区别如下:

1、list和set是实现了collection接口的。

2、list可以允许重复的对象。可以插入多个null元素。是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。Set不允许重复对象,无序容器,你无法保证每个元素的存储顺序,TreeSet通过 Comparator 或者 Comparable 维护了一个排序顺序。只允许一个 null 元素。

3、Map不是collection的子接口或者实现类。Map是一个接口。Map 的 每个 Entry 都持有两个对象,也就是一个键一个值,Map 可能会持有相同的值对象但键对象必须是唯一的。TreeMap 也通过 Comparator 或者 Comparable 维护了一个排序顺序。Map 里你可以拥有随意个 null 值但最多只能有一个 null 键。

Java是由Sun公司于1995年5月推出的面向对象的程序设计语言。Java继承了C++语言面向对象技术的核心,又舍弃了C++语言中的指针、运算符重载以及多重继承的特性,同时引入了泛型编程、类型安全的枚举等特性,使Java成为简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。随着互联网的迅猛发展,Java已经成为重要的网络编程语言,被广泛应用于企业级Web应用开发和移动应用开发。

最新2021整理收集的一些高频面试题(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud、jvm、源码、算法等详细讲解,也有详细的学习规划图,面试题整理等,需要获取这些内容的朋友请加Q君羊:673927155

以上是关于Java开发岗面试互联网大厂冲刺,每日10题Day2的主要内容,如果未能解决你的问题,请参考以下文章

Java开发岗面试互联网大厂冲刺,每日10题Day1

Java岗大厂面试百日冲刺Day43— Shrio1 (日积月累,每日三题)

Java岗大厂面试百日冲刺 - 日积月累,每日三题Day22—— 并发编程2

Java岗大厂面试百日冲刺 - 日积月累,每日三题Day21—— Linux命令

Java岗大厂面试百日冲刺 - 日积月累,每日三题Day51—— tomcat

Java岗大厂面试百日冲刺 - 日积月累,每日三题Day23—— 算法1