JAVA常考面试题(备战实习篇)

第一章Java基础

1、简述java程序的运行机制

2、简述java语言的跨平台原理

3、如何配置java的环境变量

4、谈谈你对IDE的认识

5、java中有哪些数据类型、其中基本数据类型有哪些、以及它们表示的范围是多少?

6、谈谈你对java中的标识符的认识,它和关键字(保留字)有何区别?

7、什么是原码、反码、补码?

第二章、面向对象

1、谈谈你对面向过程的编程和面向对象的编程的理解

2、面向对象的特征是什么、谈谈你对它们的理解

3、简述java中类的组成部分。

4、简述java内存区域以及作用

5、java中方法的参数传递有哪几类、各有何特点?

6、什么是方法的重载、什么是方法的重写?

7、java中的访问控制符有哪些、访问规则各是什么?

8、谈谈你对构造方法的理解

9、简要叙述关键字this、super、package、import、static、final的作用。

10、简述抽象类和接口的区别(考点)

  第三章 数组和字符串

1、谈谈数组和ArrayList的区别

2、简述对象数组的内存模型和二维数组的内存模型

3、什么是运行时常量池?

4、讨论以下两种创建字符串对象方式的异同:

5、比较String、StringBuffer和StringBuilder三个类的特点和用法

第四章 集合框架

1、简述ArrayList和LinkedList的区别

2、简述ArrayList和Vector的异同

3、简述Set的特点和去重原理

4、简述HashMap的底层结构(内存分配)

5、集合中的元素,有哪几种常见的遍历方式?

6、何为泛型?谈谈泛型的好处

7、简述HashMap和Hashtable的区别

8、什么是Iterator?

9、Collection 和 Collections的区别

第五章 异常

1、简述你对异常的理解

2、什么是UncheckedException?什么是CheckedException?各是由哪些原因导致的?

3、请列举五种常见的RuntimeException

4、Exception 和Error 有和区别?

5、常见的异常处理方式有哪几种、各有何特点?

6、Java中final,finalize,finally关键字的区别

第六章 MySQL数据库

1、简述常见的几种关系型数据库以及它们的特点。

2、什么是JDBC、有何特点?

3、谈谈你对DB、DBMS、DBS三者的理解。

4、关系型数据库完整性性约束有哪些?

5、什么是SQL?

6、用JDBC链接MySQL数据库的步骤?

7、什么是NoSQL?

8、什么是分布式数据库?

第八章 多线程

1、Java中多线程同步是什么?

2、解释实现多线程的几种方法?

3、Thread.start()与Thread.run()有什么区别?

4、Sleep()、suspend()和wait()之间有什么区别?

5、在静态方法上使用同步时会发生什么事?

6、什么是死锁?

7、如何实现线程间的通信?

8、线程的基本状态和各个状态间的转化?

第九章 反射与注解

1、一个类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括哪几个环节?

2、一个类在加载阶段,需要完成哪些事情?

3、什么是类加载器?

4、什么是java中的反射机制?


 

 

第一章Java基础

1、简述java程序的运行机制

2、简述java语言的跨平台原理

3、如何配置java的环境变量

4、谈谈你对IDE的认识

5、java中有哪些数据类型、其中基本数据类型有哪些、以及它们表示的范围是多少?

6、谈谈你对java中的标识符的认识,它和关键字(保留字)有何区别?

7、什么是原码、反码、补码?

第二章、面向对象

1、谈谈你对面向过程的编程和面向对象的编程的理解

2、面向对象的特征是什么、谈谈你对它们的理解

3、简述java中类的组成部分。

4、简述java内存区域以及作用

5、java中方法的参数传递有哪几类、各有何特点?

6、什么是方法的重载、什么是方法的重写?

7、java中的访问控制符有哪些、访问规则各是什么?

8、谈谈你对构造方法的理解

设计模式(单例模式——23种设计模式之一:只能创建一个对象)

9、简要叙述关键字this、super、package、import、static、final的作用。

      this: 类的当前对象

     作用:当局部变量和成员变量同名的时候,可以用this调用成员变量

     可以用this调用重载的构造方法

     static: 修饰变量和方法及类;修饰变量称为类变量,类方法;static修饰的 在类的字节码文件 第一次加载内存的时候,分配地址。

     类方法不能调用实例方法;实例方法既能访问类变量,也能访问实例变量。

     super: 一般用于子类调用父类中与子类相同的成员变量与成员方法

     package关键字声明在类的最上部(通常在第一行),用来定义类的位置     

     为了更好地组织类,Java提供了包机制。包是类的容器,用于分隔类名空间。如果没有指定包名,

     所有的示例都属于一个默认的无名包。Java中的包一般均包含相关的类,

     import关键字用来引用其他目录结构下的包

     final修饰的变量不能修改(常量)

     final修饰的方法不能重写

     final修饰的类不能被继承

10、简述抽象类和接口的区别(考点)

     1.抽象类可以有抽象方法,也可以有非抽象方法;接口中全都是公共的抽象方法

     2.接口中只有公共的静态常量,而抽象类中还可以有变量

     3.一个类只能继承一个抽象类,但可以实现多个接口

  第三章 数组和字符串

1、谈谈数组和ArrayList的区别

Array可以包含基本类型和对象类型,ArrayList只能包含对象类型。

Array大小是固定的,ArrayList的大小是动态变化的。

ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()

2、简述对象数组的内存模型和二维数组的内存模型

二维数组的实质:仍然是一维数组,只不过一维数组里面装了其他数组的引用(地址)

3、什么是运行时常量池?

运行时常量池(Runtime Constant Pool),它是方法区的一部分。Class文件中除了有类的版本、字段、方法、接口等描述等信息外,还有一项信息是常量池(Constant Pool Table),用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后存放到常量池中。

4、讨论以下两种创建字符串对象方式的异同:

1)、String str1=”abc”;

2)、String str2=new String(“abc”);

第一种方式直接将内容存在了字符串常量池里面,创建一个对象;

第二种方式,先在字符串常量池里创建一个对象,再在堆内存里创建一个对象;如果检测到常量池里已有元素,只会在堆内存里创建一个对象;

5、比较String、StringBuffer和StringBuilder三个类的特点和用法

String缓冲区对象(即先在底层创建一个临时缓冲区,在临时缓冲区里进行各种操作,再转为String类型)

《1》效率:(StringBuilder>StringBuffer>String)

《2》安全(StringBuffer  )线程安全(线程同步)的,常用在多线程的环境下;String、 StringBuilder(线程异步)常用在单线程的环境下

第四章 集合框架

1、简述ArrayList和LinkedList的区别

       1. ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。

       2. 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 

       3. 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据 

2、简述ArrayList和Vector的异同

         1.Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。

         2.当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。

3、简述Set的特点和去重原理

         Set接口

         特点:元素不重复、无序(没有索引)

         HashSet类

         Set的实现类之一

*当我们使用Set存储自定义类的对象时,需要在自定义类中重写equals和hashCode方法,主要原因是集合内不允许有重复的数据元素,在集合校验元素的有效性时(数据元素不可重复),需要调用equals和hashCode验证。

         *HashSet在判断数据元素是否重复时,需要同时满足hashCode值相同和equals方法返回true

4、简述HashMap的底层结构(内存分配)

HashSet的底层用HashMap实现

         HashMap底层就是一个数组结构(Entry<K,V>[] table),数组中的每一项又是一个链表

5、集合中的元素,有哪几种常见的遍历方式?

         常用Map的遍历方法:

方法一:

Set<Integer> set=map.keySet();

                   Iterator<Integer> it=set.iterator();

         while(it.hasNext()){

                   int key=it.next();

                   System.out.println(key+"   "+map.get(key));//遍历键位加键位所对应的信息

                   }

方法二:考题

                   Set<Entry<Integer,String>> set1=map.entrySet();

                   Iterator<Entry<Integer,String>> ite=set1.iterator();

                   while(it.hasNext()){

                            Entry<Integer,String> entry=ite.next();

                            System.out.println(entry.getKey()+"   "+entry.getValue());

                            }

方法三:利用增强for循环来遍历(由方法二演变而来)

for(Entry<String,Integer> entry:stuMap.entrySet()){

System.out.println(entry.getKey()+"   "+entry.getvalue());

}

6、何为泛型?谈谈泛型的好处

类型的参数化,就是可以把类型像方法的参数那样传递

泛型简单易用

类型安全 泛型的主要目标是实现Java的类型安全。 泛型可以使编译器知道一个对象的限定类型是什么,这样编译器就可以在一个高的程度上验证这个类型

消除了强制类型转换 使得代码可读性好,减少了很多出错的机会

Java语言引入泛型的好处是安全简单。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

7、简述HashMap和Hashtable的区别

一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现

二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的

三.值:只有HashMap可以让你将空值作为一个表的条目的key或value

8、什么是Iterator?

Iterator迭代器

Java中的Iterator功能比较简单,并且只能单向移动:

(1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。

(2) 使用next()获得序列中的下一个元素。

(3) 使用hasNext()检查序列中是否还有元素。

(4) 使用remove()将迭代器新返回的元素删除。

9、Collection 和 Collections的区别

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

 Collection  

├List  

│├LinkedList  

│├ArrayList  

│└Vector  

│ └Stack  

└Set

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

第五章 异常

1、简述你对异常的理解

         运行时(Runtime)发生的错误称为异常。处理这些异常就称为异常处理。

          一旦引发异常,程序将突然中止,且控制权将返回操作系统。

2、什么是UncheckedException?什么是CheckedException?各是由哪些原因导致的?

         <1>Unchecked Exception——运行时异常(非受检测异常)

         特点:

         编译器不会提示错误;只有在运行的时候才会产生(是潜在的危险;)

         产生的原因:一般是人为的代码写的不规范造成的;可以尽力避免

         <1>Checked Exception——受检测异常

         特点:编译器会明确提示,要求必须处理,否则编译不通过

         产生的原因:

         为了防止外界因素(资源)可能造成程序的错误而提早告诉用户需要处理,是不可以避免的

3、请列举五种常见的RuntimeException

         1.NullPointerException(空指针异常)

eg:

                   String str=null;

                   System.out.println(str.length());

         2.ArrayIndexOutOfBoundsException(数组索引位越界异常)

                   int [] ar=new int [10];

                   ar[10]=33;

         3.ArithmeticException(算数异常)

                   int a=19;

                   int b=0;

                   System.out.println(a/b);

         4.NumberFormatException

                   String str="uhn";

                   Integer.parseInt(str);

4、Exception 和Error 有和区别?

         Error类对象由Java虚拟机生成并抛出;

         Exception类对象由应用程序处理或抛出。

5、常见的异常处理方式有哪几种、各有何特点?

         Java异常处理机制包含两种:

    (1)处理异常:在可能发生异常的代码段将异常捕获,并对捕获到的异常进行处理。

    (2)抛出异常:在可能发生异常的代码段将异常捕获,但是不做处理,直接抛出给调用者。

6、Java中final,finalize,finally关键字的区别

 final

当这个关键字修饰一个类时,意味着他不能派生出新的子类,也就是说不能被继承,因此一个类不能被同时声明为abstract和final。当final修饰变量或者方法时,可以保证他们在使用中不会被改变。被声明为final的变量必须在初始化时给定初值,以后在使用时只能被引用而不能被修改。同样,当final修饰一个方法时,这个方法不能被重载。

finally

异常处理时提供finally来执行任何清楚操作。如果抛出一个异常,那么相匹配的catch子句就会被执行,然后控制就会转入finally块。

finalize

方法名。finalize方法在垃圾回收器执行内存对象清理时会调用finalize()方法进行前期的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

第六章 MySQL数据库

1、简述常见的几种关系型数据库以及它们的特点。

         1.Oracle

         Oracle是1983年推出的世界上第一个开放式商品化关系型数据库管理系统。它采用标准的SQL结构化查询语言,支持多种数据类型,提供面向对象存储的数据支持,具有第四代语言开发工具,支持Unix、Windows NT、0S/2、Novell等多种平台。

         2.SQL Server

         SQL即结构化查询语言(Structured Query Language,简称为SQL)。是支持客户机/服务器结构的数据库管理系统,它可以帮助各种规模的企业管理数据。

         3.Sybase

         1987年推出的大型关系型数据库管理系统Sybase,能运行于0S/2、Unix、Windows NT等多种平台,它支持标准的关系型数据库语言SQL,使用客户机/服务器模式,采用开放体系结构,能实现网络环境下各节点上服务器的数据库互访操作。技术先进、性能优良,是开发大中型数据库的工具。

2、什么是JDBC、有何特点?

         .JDBC(Java Database Connectivity)是java应用程序以面向对象的方法连接数据库的技术。

         是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口

其特点是:效率高,安全性高

3、谈谈你对DB、DBMS、DBS三者的理解。

         DB是长期存储在计算机内、有组织的、可共享的相关数据的集合。 

         DBMS是位于用户与0S之间的一层数据管理软件,它为用户或应用程序提供访问DB的方法。 

         DBS是实现有组织地、动态地存储大量关联数据、方便多用户访问的计算机硬件、软件 和数据资源组成的系统,即采用数据库技术的计算机系统。

4、关系型数据库完整性性约束有哪些?

        主键约束

         主键,又称主码,是表中一列或多列的组合,能够唯一地标识表中的一条记录。主键约束(Primary Key Constraint)要求主键列的数据唯一,且不允许为空。

         唯一性约束(Unique Constraint)要求表里某个字段的值在每条记录里都是唯一的,这一点与主键类似。声明为 UNIQUE 的字段允许为空,但只能出现一个空值。

         外键约束

         外键(Foreign Key):首先它是表中的一个字段,它可以不是本表的主键,但必须对应另外一个表的主键。外键可以为空值,若不为空值,则每一个外键值必须等于另一个表中主键的某个值。

         非空约束

         非空约束(Not Null Constraint)指字段的值不能为空。对于使用了 NOT NULL 约束的字段,如果用户在添加数据时没有指定值,数据库系统会报错。

5、什么是SQL?

         SQL是Structured Quevy Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。

6、用JDBC链接MySQL数据库的步骤?

         1.加载驱动(引入驱动包、执行驱动加载代码)

    2.获取连接(Connection对象,需要提供数据库连接的url、用户名及密码)

    3.获取Statement对象 (用于执行静态 SQL语句,并返回它所生成结果的对象)

    4.如果执行了查询语句,那么获得ResultSet结果集对象

    5.遍历结果集(通过游标遍历),必要的时候可以在遍历的过程中对结果集进行更新

    6.关闭对象,释放资源(非常重要)

7、什么是NoSQL?

NoSQL,泛指非关系型的数据库。

8、什么是分布式数据库?

分布式数据库系统通常使用较小的计算机系统,每台计算机可单独放在一个地方,每台计算机中都可能有DBMS的一份完整拷贝副本,或者部分拷贝副本,并具有自己局部的数据库,位于不同地点的许多计算机通过网络互相连接,共同组成一个完整的、全局的逻辑上集中、物理上分布的大型数据库。

第八章 多线程

1、Java中多线程同步是什么?

同一时刻只能有一个线程操作资源

2、解释实现多线程的几种方法?

有三种:

         (1)继承Thread类,重写run函数

         (2)实现Runnable接口,重写run函数//

         (3)实现Callable接口,重写call函数

3、Thread.start()与Thread.run()有什么区别?

         start是native方法,由jvm(基于c++或其他的编程语言)实现多线程,并调用run方法(方法体)。直接调用run方法是无法实现多线程的。

4、Sleep()、suspend()和wait()之间有什么区别?

         sleep ()使当前线程在指定的时间处于“非运行”(Not Runnable)状态。线程一直持有对象的监视器。比如一个线程当前在一个同步块或同步方法中,其它线程不能进入该块或方法中。如果另一线程调用了 interrupt ()方法,它将唤醒那个“睡眠的”线程。

         suspend ()是过时的方法,使用 suspend ()导致线程进入停滞状态,该线程会一直持有对象的监视器,suspend ()容易引起死锁问题。

         wait ()使当前线程出于“不可运行”状态,和 sleep ()不同的是wait 是 object 的方法而不是 thread。调用 object.wait ()时,线程先要获取这个对象的对象锁,当前线程必须在锁对象保持同步,把当前线程添加到等待队列中,随后另一线程可以同步同一个对象锁来调用 object.notify (),这样将唤醒原来等待中的线程,然后释放该锁。

5、在静态方法上使用同步时会发生什么事?

         线程监视器会获取该静态方法所在类的锁,导致其他线程不能使用该类的任何静态方法。

6、什么是死锁?

         所谓死锁: 是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

7、如何实现线程间的通信?

         三种方式:同步,轮询,wait/notify机制

8、线程的基本状态和各个状态间的转化?

         线程在它的生命周期中会处于各种不同的状态:

新建、等待、就绪、运行、阻塞、死亡。

1 新建

用new语句创建的线程对象处于新建状态,此时它和其他java对象一样,仅被分配了内存。

2等待

当线程在new之后,并且在调用start方法前,线程处于等待状态。   --2012-12-21

3 就绪

当一个线程对象创建后,其他线程调用它的start()方法,该线程就进入就绪状态。处于这个状态的线程位于Java虚拟机的可运行池中,等待cpu的使用权。

4 运行状态

处于这个状态的线程占用CPU,执行程序代码。在并发运行环境中,如果计算机只有一个CPU,那么任何时刻只会有一个线程处于这个状态。

  只有处于就绪状态的线程才有机会转到运行状态。

5 阻塞状态

阻塞状态是指线程因为某些原因放弃CPU,暂时停止运行。当线程处于阻塞状态时,Java虚拟机不会给线程分配CPU,直到线程重新进入就绪状态,它才会有机会获得运行状态。

6 死亡状态

当线程执行完run()方法中的代码,或者遇到了未捕获的异常,就会退出run()方法,此时就进入死亡状态,该线程结束生命周期。

资源共享 条件竞争 阻塞队列

第九章 反射与注解

1、一个类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括哪几个环节?

它的整个生命周期包括:加载、验证、准备、解析、初始化、使用、卸载7个阶段。其中,验证、准备、解析3个部分统称为连接。

2、一个类在加载阶段,需要完成哪些事情?

         1.通过“类全名”来获取定义此类的二进制字节流

         2.将字节流所代表的静态存储结构转换为方法区的运行时数据结构

         3.在java堆中生成一个代表这个类的java.lang.Class对象,作为方法区这些数据的访问入口

3、什么是类加载器?

类的加载器是将.class文件,加载到内存(JVM)中,并生成Java.lang.class对象。

4、什么是java中的反射机制?

反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

猜你喜欢

转载自blog.csdn.net/paranior/article/details/114416442