码迷,mamicode.com
首页 > 编程语言 > 详细

常见面试题(javase)

时间:2019-04-10 10:37:09      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:体系   例子   java开发工具   含义   java语言   catch   net   style   sync   


原文:https://blog.csdn.net/qq_39498603/article/details/83536639 

1.请说出ArrayList、Vector、LinkedList的存储性能和特性。
ArrayList底层 数组结构,线程不安全 线程异步 效率高 查找快 增加删除慢

Vector、底层数组结构  线程同步 线程安全 效率低 存储的是键值对

LinkedList :底层双向链表结构  查找慢 增加删除快  线程异步,不安全,效率高 

 

2.数组有没有length()这个方法?String有没有length()这个方法?

数组没有length()这个方法 但是 有length属性

String 有length()方法

集合的长度 size()

 

3.List、Set、Map是否继承自Collection接口?

List set 集合继承了collection接口

Map 不继承  Map本身就是一个顶层接口

 

4.HashMap和HashTable的区别。

都是map接口的实现类

Hashmap:可以存放null值,是线程不安全的类 线程异步  基于hash表

Hashtable:不可以存放null值 是线程安全的类 线程同步

5.List<T>与List的区别?

一个是泛型,一个是Object,后者还可能要类型转换,容易出错。

Java中的泛型是个假泛型,仅仅只是在编译器那边做了语法检查而已,和C#里的泛型不一

样的。

基本上,不管你在List<>里面写什么类型,编译通过了以后运行时全部都是Object。

Java泛型是通过类型擦除实现的,编译器的语法检查是次要的。

重要的是泛型系统可以为做更多的类型检查,借助编译器在编译期的类型检查可以减少运行

时出现类型错误的几率。

 

6.列出一些你常见的运行时异常。

{1.nullpoionterexception   (空指针异常)

2.numberformatexception  (数字格式化异常) 

3. indexoutofboundsexception(数组下标越界)

7.String和StringBuffer的区别

String 是长度不可变,一旦内容创建好,不可以更改

Stringbuffer 是长度可变的,内容可变 线程安全  实际采用的字符数组的形式存储的,当长度变了的时候,实际是将它原有的内容复制到一个新的字符数组中,再加上增加的

8.请说明Java为什么能够跨平台

{因为jvm,jre包含jvm,jdk包含jre,java语言是跨平台的而jvm不是跨平台的}

9.请简述Java的垃圾回收机制

垃圾回收由java虚拟机自动执行,不能人为的干预,System在空闲的时候会自动执行垃圾回收机制,可以通过gc方法建议执行垃圾回收,但不能确定什么时候会执行回收}

10.请分别说明public、private、static、final修饰符的含义。

{public可以修饰类、方法以及属性;private可以修饰属性、方法; Static可以修饰方法、属性,被static修饰的属性或方法随着类的加载而加载; Final可以修饰类,属性、方法,被final修饰的类不可被继承,方法不可被重写,属性 只能被赋值一次,为常量

11.请列举Java中继承了List接口的类,并说明它们的不同。

继承了list接口的类:有ArrayList:数组结构,线程不安全,增加删除慢,查询快

Linkedlist: 双向链表结构,线程不安全,增加删除快,查询慢

Vector:数组结构  线程安全 增加删除慢,查询快

 

12.请说明异常处理中try/catch/finally语句块的作用。并且,请阐述通过ErrorCode返回错误和抛出异常的区别。

try中放可能出现异常的代码块,catch用来异常捕获,finally一般用于一些资源关闭 和释放工作。 返回错误其异常代码下边的代码还可继续执行,而抛出异常后其后的代码不会被执行 }

 

13.请解释何为继承,并通过一小段代码说明继承的意义。

Public class Pet {

public String name;

public  Int  age;

public String toString() {  

return "Pet [name=" + name + ", age=" + age + "]"; }}

Public class

 Dog  extends Pet {}

Public class Test {  

Public static void  main(String[] args) {

  Dog dog = new  Dog();

dog.age = 10;   dog.name = "狗蛋儿";  

 System.out.println(dog.toString());}}

 

14.请简述接口和抽象类的区别,并说明接口在实际开发项目中的意义。

接口中只能有抽象方法,抽象类中可以有普通方法
 2.接口中只能有静态常量,抽象类中可以有变量和常量

3. 类与类:单继承   类与接口:多实现  接口与接口:多继承

4.接口“like  a” 抽象类“is  a”

15. 请简述对面向过程、面向对象、面向函数的理解。

{面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,

 使用的时候一个一个依次调用就可以了。  

 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成,一个步

 骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。}

 

16.请说明synchronized关键字的作用,在什么情况下使用它?

{线程同步的时候使用,可以解决安全问题 修饰同步代码块或同步方法,保证安全性}

 

17.类的加载过程?

{1、首先加载要创建对象的类及其直接与间接父类。  

 2、在类被加载的同时会将静态成员进行加载,主要包括静态成员变量的初始化,静态

 语句块的执行,在加载时按代码的先后顺序进行。

 3、需要的类加载完成后,开始创建对象,首先会加载非静态的成员,主要包括非静态

 成员变量的初始化,非静态语句块的执行,在加载时按代码的先后顺序进行。  

 4、最后执行构造器,构造器执行完毕,对象生成。}

 

18.简单介绍你所了解的Java,它的特点和优势是什么,分几个体系?

{开源、面向对象、分布式处理、可移植性、安全性、高性能、健壮性、跨平台性

 1.javase                      2.javaee                    3.javame}

 

 

19.你所知道的集合类有哪些,主要方法是什么?

{最常用的集合类是 List 和 Map。 List 的具体实现包括 ArrayList 、 Vector、

 Linkedlist,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素

 列表。ArrayList 、 Vector适用于按数值索引访问元素的情形,LinkedList适用于增

 删元素。 ArrayList、LinkedList线程异步,不安全,效率高,Vector线程同步,安全,

 效率低。

 Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对(称作”

 键”和”值”),其中每个键映射到一个值。}

20.sleep()和wait()有什么区别?

{sleep() 方法是线程类(Thread)的静态方法,让调用线程进入睡眠状态,让出执行

 机会给其他线程,等到休眠时间结束后,线程进入就绪状态和其他线程一起竞争cpu

 的执行时间。  

 因为sleep() 是static静态的方法,他不能改变对象的机锁,当一个synchronized块

 中调用了sleep() 方法,线程虽然进入休眠,但是对象的机锁没有被释放,其他线程依

 然无法访问这个对象。

wait()是Object类的方法,当一个线程执行到wait方法时,它就进入到一个和该对象

 相关的等待池,同时释放对象的机锁,使得其他线程能够访问,可以通过notify,

 notifyAll方法来唤醒等待的线程

 

21.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?

java虚拟机是执行字节码文件(.class)的虚拟机进程。 因为不同的平台装有不同的JVM,它们能够将相同的.class文件,解释成不同平台所需要的机器码。正是因为有JVM的存在,java被称为平台无关的编程语言。

 

22.JDK和JRE的区别是什么?

jdK 是Java工具包

Jre 是Java 运行环境

JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。 JDK顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jconsole,jvisualvm等工具软件,还包含了java程序编写所需的文档和demo例子程序。 如果你需要运行java程序,只需安装JRE就可以了。如果你需要编写java程序,需要安装JDK。 JRE根据不同操作系统(如:windows,linux等)和不同JRE提供商(IBM,ORACLE等)有很多版本,最常用的是Oracle公司收购SUN公司的JRE版本。如果你想查看更官方的解释,可以前往Oracle官网。

 

 

 

23.String、StringBuffer、StringBuilder之间区别。

String 是长度不可变的 内容一旦创建 不可以更改

Stringbuilder是长度可变的 内容可变的 线程不安全的  

Stringbuffe是长度可变的 内容可变的 线程安全的 实际是以字符数组的形式存储的,更改的时候 是创建一个新的数组 将原来的内容复制到新的数组中

 简要的说,String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后,JVM 的 GC 就会开始工作,那速度是一定会相当慢的。

常见面试题(javase)

标签:体系   例子   java开发工具   含义   java语言   catch   net   style   sync   

原文地址:https://www.cnblogs.com/luojie1216/p/10681639.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!