Java 经典简单题

这篇博客整理了Java面试中常见的经典问题,涵盖了基础概念、面向对象特性、JDK、内存管理、异常处理、多线程、集合框架、设计模式等方面的知识,帮助读者深入理解和复习Java核心技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.String是最基本的数据类型吗,Java基本类型有哪些? 

String不是基本数据类型,基本类型有 byte char int short long float double boolean

 

2.面向对象的特点?

抽象,封装,继承,多态

 

3.JDK是什么?

Java Development Kit(JDK) Java语言软件开发工具包JDK 是整个Java的核心,包括了Java运行环境、Java工具和Java基础类库。

 

4.作用域public,private,protected,以及不写时的区别?

访问权限不同

private 只能被类本身访问

不写作用域(default默认只能被(本身,本包)

protected 能被(本身,子类,本包)

public 能被所有类访问

 

5.Java是编译型语言还是解释型的语言?

Java首先由编译器编译成.class(字节码)文件,然后在通过JVM.class文件中读一行解释执行一行,所以它是解释型的语言。也正是由于java对于多种不同的操作系统有不同的JVM,所以实现了真正意义上的跨平台。

 

6.final,finally,finalize的区别

final修饰类不能被继承;修饰的方法不能被重载,修饰的变量为常量,之不能改变

finally 是配合try{}catch{}使用的代码块,用于执行不论是否出现异常都需要执行的代码

finalize Object对象的方法,在垃圾回收器删除对象之前调用该方法。

 

7.heap和stack的区别

1Heap(堆)是 Stack(栈)的一个子集

2Stack (栈)是JVM的内存指令区,Heap (堆)是JVM的内存数据区。Java 基本数据类型,Java 指令代码,常量都保存在Stack(栈)中,Heap专门用来保存对象的实例。

3Stack存取速度仅次于寄存器,Stack里面的数据可共享,但是其中数据的大小和生存期必须在运行前确定。Heap是运行时可动态分配的数据区,从速度看比Stack慢,Heap里面的数据不共享,大小和生存期都可以在运行时再确定。

 

8. XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?区别是什么?

XML定义方式有两种:dtd以及schema schema本身是xml的,可以被XML解析器解析

XML解析方式有两种:DOM,SAX

DOM不适合处理大型文件,这是DOM的树形结构造成的,这种结构占用内存较多,它在解析XML文件之前需要一次性加载文件,适合随机解析

SAX是事件驱动型的XML解析,它顺序读取XML,遇到文件开头,结尾或者标签开头结尾都会触发一个事件,用户可以在其回调事件中处理XML的解析工作,比较适合于顺序XML解析工作。

 

9.GC是什么?为什么要有GC?

JavaGC是垃圾回收机制。因为Java语言没有提供能显示的释放内存的功能,垃圾回收工作的是JVM自动调用的, GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的。

 

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

数组没有,字符串有

 

11.Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 

Overload是重载,是Java中同类中的多态表现形式,重载要求方法名必须相同,参数个数或者类型必须不同,是否构成重载与返回值类型无关,也就是说重载方法可以改变返回值类型。

Override是重写,是Java中反应基类与子类之间多态的表现方式。要求具有相同的方法名,相同的参数,相同的返回值类型。

 

12.error和exception 的区别

errorexception都是Throwable的子类,error是用来标记系统的严重错误,这些错误本是不应该出现的,是程序设计者无法捕获处理的。exception是由于涉及瑕疵造成运行异常,是程序设计者可以捕获修复的异常。

 

13.abstract class和interface有什么区别?(抽象类与接口的区别) 

1)接口中所有的方法都是抽象的,抽象类中允许存在非抽象方法。

2)接口可以多重继承,抽象类不可以

3)接口中的成员变量是static final的,而抽类象中不是

 

14.简述逻辑操作(&,|)与条件操作(&&,||)的区别? 

a.条件操作只能操作布尔型的,而逻辑操作不仅可以操作布尔型,而且可以操作数值型 
b.
逻辑操作不会产生短路

c.逻辑运算符可以进行位运算

 

15.给我五以上种你最常见到的runtime exception?

NullPointerException - 空指针引用异常
ClassCastException -
类型强制转换异常。

IndexOutOfBoundsException - 下标越界异常

NumberFormatException - 数字格式异常

UnsupportedOperationException - 不支持的操作异常

 

 16.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行。

会执行,只有代码中有system.exit() 这一种情况 才不会执行finally

 

17.Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 

Math类中提供了三个与取整有关的方法:ceil,floor,round,这些方法的作用于它们的英文名称的含义相对应,例如:ceil的英文意义是天花板,该方法就表示向上取整,Math.ceil11.3)的结果为12Math.ceil(-11.6)的结果为-11floor的英文是地板,该方法就表示向下取整,Math.floor(11.6)的结果是11Math.floor(-11.4)的结果-12;最难掌握的是round方法,他表示四舍五入算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结果是12Math.round(-11.5)的结果为-11.

 

18.Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(

实现)interface(接口) 

 

19.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上。

switch(表达式),表达式的内容为整数表达式或枚举常量,整数表达式即为intinteger型,因为byteshortchar都可以转换成整型,而Stringlong不可以,所以switch能作用在byte上而不能作用在longString上。

 

20.Java的接口可以用什么修饰符来修饰?

public ,abstract,或者不是写修饰符

 

21. J2EE是什么?它包括哪些技术?描述J2EE框架的多层结构,并简要说明各层的作用

EJB包含哪三种Bean?

J2EE是使用Java技术开发企业级应用的工业标准.它包括

Servelet

JSP

EJB

JDBC

多层结构:

1)表示层:界面展示,接收请求

2)服务层:封装业务逻辑,负责事务以及安全服务

3)持久层:封装数据访问逻辑

4)领域层:业务对象模型及其关系

EJB包含:

sessionBean(会话bean) entityBean(实体bean) messageBean(消息Bean)

 

22.什么是web容器?

web容器就是一种服务程序,运行在服务器端,用来处理客户端发送过来的请求。

 

23.存储过程和函数的区别

 

24.JSP有哪些内置对象?作用分别是什么?

1request表示HttpServeletRequest对象,它包含了浏览器发送的请求信息。

2response表示HttpServeletResponse对象,提供了送回浏览器的响应方法。

3out用户向浏览器会送输出结果。

4session对象,存储用户的状态信息。

5application对象,用于查找Servelet引擎与Servelet环境的信息。

 

25.什么是事务?有哪些特性?

事务是访问并可能更新数据库中数据项的一个程序执行单元。

特性:

原子性:一个事务是一个不可分割的整体,要么都执行,要么都不执行。

一致性:事务必须是数据库从一个一致性状态变化到另一个一致性状态。

隔离性:一个事务内部执行不能被另一个事务干扰,即一个事务操作以及使用的数据对于另一个事务来说是隔离。

永久性:一个事物提交后,对于数据库的影响应该是持久的,后续的故障不应该对其有任何影响。

26. Collection和 Collections的区别?

Collection是各种集合的父接口,SetList都集成于这个接口。Collections是集合的工具类,里面定义了一些静态的工具方法,用于集合的排序,搜索,复制操作等。

 

27.HashMap与HashTable区别?ArrayList与Vector,LinkedList区别?HashMap与TreeMap区别?

HashMapHashTable都实现了Map接口,但是HashTable继承与较为古老的Dictionary类。

HashMap是非线程安全的,HashTable是线程安全的,效率上HashMap更好。

HashMap包含contains方法,HashTable没有而是使用ContainsKey,containsValue

HashMap允许null作为keyvalue出现,HashTable则不行.

 

ArrayList是非线程安全,性能好,Vector是线程安全的,性能较差。当需要数据增长的时候,Vector会增长一倍,ArrayList只增长一半。ListedList是双向链表,可以按照序号索引需要向前或者向后遍历,插入速度比较快。

 

HashMap元素存储是无序的,当查找某个元数时候使用hashcode快速定位,而TreeMap是有顺序的。

 

28.谈谈对于SOA的认识

SOA(面向服务的体系结构)是一个组件模型,它将程序的不同单元(服务)通过这些服务之间定义良好的接口和契约联系起来。这些接口采用中立结构定义,它独立于硬件,操作系统,编程语言。是的构建这些服务的异构系统可以以统一的方式进行交互。

 

29.说明反转控制(IOC)和面向方向编程(AOP)在spring中的应用

IOC将程序配置和依赖性规范与具体的业务逻辑分开。被调用者不再由调用者创建,而是由Spring完成创建工作。

AOPSpring为面向切面编程提供声明式事务管理 Spring也支持用户自定义切面

 

30.forward和redirect的区别

forward是服务器内部重定向,是服务器请求资源,服务器直接访问目标地址URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址

redirect是完全的跳转,浏览器将会得到跳转的地址, 并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。

31.Java反射机制的作用?

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性

32.如何理解Java的泛型

JDK1.5之前Java没有引入泛型的概念,程序员只能通过Object来处理参数的任意化,使用时候进行强制转换,在编译过程中很多时候发现不了问题,运行时出现强制转换错误,为代码带来隐患。有了泛型之后,我们就相当于定义了参数化类型,可以在编译阶段就检查参数类型安全,并且可以隐式转换,提高代码重用率。

 

33. String, StringBuffer StringBuilder的区别

String长度是固定的,StringBuffer长度是可变的,如果字符串的内容需要频繁变化那么使用StringBuffer比较合适,StringBuffer是线程安全的。StringBuilder是非线程安全的,速度比StringBuffer快一些。

 

34. 请写出一个单例模式

//懒汉是

public class SingleTon{

         public static SingleTon singleton;

         private SingleTon(){}

         public static synchronized SingleTongetInstance(){

                   if(singleton==null){

                            singleton=new SingleTon();

                   }

                   return singleton;

         }

}

 

//饿汉式

public classSingleTon{

private static SingleTonsingleTon=new SingleTon();

private SingleTon(){}

public static SingleTongetInstance(){

         return singleTon;

         }

}

 

35.计算下列数的结果

25&3 =1

25|3=27

首先十进制转化为二进制

依次除于2,能整除的记录0,不能整除的记录1,最后从上往下就是结果。(如果是负数则先用该规则取出正数的二进制结果,取反后加1


25转化为2进制 11001 3转化为2进制是00011

 

二进制转换十进制

11001=20*1+21*0+22*0+23*1+24*1=25

 

36. 简述synchronized和java.util.concurrent.locks.Lock的异同

Locksynchronized完成的功能大致相同。Lock的功能更加强大,提供多种锁操作。使用Lock代码语义更加清晰。在性能方面,如果线程竞争不是很激烈synchronized的效率更高,如果竞争很激烈,synchronized的效率下降很快,Lock的效率保持不变。此外,synchronized会自动释放锁,而Lock必须由程序员在finaily代码块中显示的调用其释放方法(unlock

 

37.写出JDBC连接数据库

public static void main(String[] args)
  {
    try
    {
      String url="jdbc:mysql://localhost/mydb";
      String user="root";
      String pwd="123456";
                                      
      //加载驱动,这一句也可写为:Class.forName("com.mysql.jdbc.Driver");
     Class.forName("com.mysql.jdbc.Driver").newInstance();
      //建立到MySQL的连接
       Connection conn = DriverManager.getConnection(url,user, pwd);
                                      
      //执行SQL语句
       Statement stmt = conn.createStatement();//创建语句对象,用以执行sql语言
      ResultSet rs = stmt.executeQuery("select * from student");
                                     
       //处理结果集
      while (rs.next())
      {
        String name = rs.getString("name");
        System.out.println(name);
      }
      rs.close();//关闭数据库
      conn.close();
    }
    catch (Exception ex)
    {
      System.out.println("Error : " + ex.toString());
    }
  }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值