JAVA高频面试题总结

JAVA高频面试题总结

1.String str = “abc” 和String str = new String(“abc”)有什么区别?
String s = new String(“abc”)创建了两个对象,实际上是”abc”本身就是常量池中的一个对象,在运行 new String()时,把常量池即pool中的字符串”abc”复制到堆中,并把这个对象的应用交给s,所以创建了两个String对象,一个在pool中,一个在堆中。

  public class Demo03 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String s1 = new String("abc") ;
        String s2 = new String("abc") ;
        if( s1 == s2 ){ //不会执行的语句}
       System.out.println("在堆中创建了一个对象");

    }
        else{
        System.out.println("在堆中创建了两个对象");    
        }
        }
}

可知在堆中创建了两个对象,但是在文字池中有一个对象,所以共创建了三个对象

2.什么是类,什么是对象?
1)对象:对象是人们要进行研究的任何事物,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。对象具有状态,一个对象用数据值来描述它的状态。对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中。

2)类:具有相同特性(数据元素)和行为(功能)的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型。类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。

3.static是什么?
<1>. 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法

声明为static的方法有以下几条限制:

  1. 它们仅能调用其他的static 方法。

  2· 它们只能访问static数据。 · 它们不能以任何方式引用this 或super。

  调用一个静态方法就是“类名.方法名”,静态方法的使用很简单如上所示。一般来说,静态方法常常为应用程序中的其它类提供一些实用工具所用,在Java的类库中大量的静态方法正是出于此目的而定义的。此类方法,不需要创建对象。

<2>. 静态变量

  声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。静态变量与静态方法类似。所有此类实例共享此静态变量,也就是说在类装载时,只分配一块存储空间,所有此类的对象都可以操控此块存储空间,当然对于final则另当别论了

<3>.静态类

通常一个普通类不允许声明为静态的,只有一个内部类才可以。这时这个声明为静态的内部类可以直接作为一个普通类来使用,而不需实例一个外部类。

<4>.static和final一块用表示什么

static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!
对于变量,表示一旦给值就不可修改,并且通过类名可以访问。
对于方法,表示不可覆盖,并且可以通过类名直接访问。

4.数组结构,链表结构,哈希表结构,消息队列结构,栈结构分别是什么?

数组结构:查找快,增删慢
链表结构:查找慢,增删快
哈希表结构:使用自定义方法时,hashcode和equals需要重写
栈结构:先进后出
消息队列结构:消息队列是一个存放在内核中的消息链表,每个消息队列由消息队列标识符标 识。与管道不同的是消息队列存放在内核中,只有在内核重启(即操作系统重启)或者显式地删除一个消息队列时,该消息队列才会被真正删除。

5.ArratList和LinkedList底层分别是什么结构,有什么区别?
ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
6.泛型类,泛型方法,泛型接口,泛型限定分别是什么?
7.throw和throws的区别
throw是语句抛出一个异常,一般是在代码块的内部,当程序出现某种逻辑错误时由程序员主动抛出某种特定类型的异常
throws是方法可能抛出异常的声明。(用在声明方法时,表示该方法可能要抛出异常)
8.什么是多线程,什么是多进程
多进程:同一个时间里,同一个计算机系统中允许两个或两个以上的进程处于并行状态。
多线程:一个进程中可以有多条执行路径同时执行,一个线程就是进程中的一条执行路径。
9.线程之间的通信问题
同步,轮询,等待,管道
10.同步代码块,同步方法,静态同步方法他们的锁分别是什么?
所有的非静态同步方法用的都是同一把锁——实例对象本身
而所有的静态同步方法用的也是同一把锁——类对象本身
对于同步块,由于其锁是可以选择的,所以只有使用同一把锁的同步块之间才有着竞态条件,这就得具体情况具体分析了,但这里有个需要注意的地方,同步块的锁是可以选择的,但是不是可以任意选择的!!!!当选择一个对象锁时,我们要根据实际对象而不是其引用来考虑!
11.线程的生命周期
线程的生命周期:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)5种状态。
这里写图片描述
12.线程的等待唤醒机制
ynchronized等待唤醒机制主要指的是notify/notifyAll和wait方法,在使用这3个方法时,必须处于synchronized代码块或者synchronized方法中,否则就会抛出IllegalMonitorStateException异常。
与sleep方法不同的是wait方法调用完成后,线程将被阻塞,wait方法将会释放当前持有的监视器锁(monitor),直到有线程调用notify/notifyAll方法后方能继续执行,而sleep方法只让线程休眠并不释放锁。notify/notifyAll方法只是解除了等待线程的阻塞,并不会马上释放监视器锁,而是在相应的synchronized(){}/synchronized方法执行结束后才自动释放锁。
13.装饰者设计模式
星巴克模式
14.单例设计模式
https://blog.csdn.net/learningcoding/article/details/80471475
15.socket编程
一切皆Socket!
16.servlet和Content对象,request对象,response对象分别是什么?
17.cookiehe session是什么
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。
Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
18.session跨域访问
19.过滤器和监听器
20.反射和动态代理
21.spring框架,Ioc和aop概述和声明式事务管理
22.mybatis框架架构,动态sql语句
23.springmvc框架架构,请求与响应,返回json数据,上传图片,拦截器
24.redis或者mangodb
25.actionMQ和kafuka
26.dubbo或者resful风格的接口管理
27.常用的第三方接口

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值