Java面试:基础模块

Java平台的理解:

两个关键词,一个是write once run anywhere,另一个是GC

JRE Java运行环境(包括JVM和类库), JDK JRE的超集还包括更多的工具

Excepeion和Error的区别:

他们两个都是继承Throwable类,听名字就知道throw able,他是可以throw的其他不行,所以继承Throwable的他俩也可以throw或者catch。

Exception 名字就叫预料到的问题,一般来说不严重不影响程序,我们可以捕获到做相应的处理,常见的就是我们空指针异常,或者我们自己定义的业务异常

Error就要严重得多,直接影响程序的正常运行。内存溢出outofmemory程序就是会挂掉,要修复重启。

在这里插入图片描述

final finally finalize区别:

final 修饰符 ,修饰的常量,方法,类不能修改。

finally 一种机制,try-finally,就是那种一定要执行的,不如说关比jdbc连接的方法。

finalize Object的方法,目的是来主动回收,但是现在已经不推荐使用了,JDK9已经对这个方法进行标记了。

强引用 软引用 弱引用 幻想引用:

强引用我们最常见的,一般垃圾回收不会处理这个,一般一个对象没有引用关系,或者引用关系太长查出范围了,会被回收

SoftReference软引用,可以规避一些垃圾回收,但是内存不足的时候就会拿软引用开刀,保证一些必要的缓存。

WeakReference弱引用,不能规避垃圾回收,适合做缓存的基础。

幻想引用甚至访问不到对象,就是对象被finalize还提供对象还在工作,一般来监控对象的创建和销毁。

String StringBuffer StringBuilder:
String 字符类,final class,里面很多属性也都是final的,由于它的不可变性,字符的操作裁剪拼接都会有性能问题。

StingBuffer 就是为了解决String操作性能的问题,新出的一个线程安全的字符操作类。

StringBuilder是一个更激进的,为了效率连线程安全都不管了的一个字符操作类。

Java反射机制,动态代理基于什么原理:

反射机制是Java的一种基础功能,通过反射我们可以直接操作类或者对象,获取定义变量,甚至运行时改变类的定义。

动态代理是一种机制,一种动态处理代理,动态处理,想AOP,RPC很多都是基于这个
(动态代理,静态代理 都涉及到一个代理模式,他俩的区别,静态代理的代码是写好的代理关系,动态代理要靠反射才可以)

int Integer的区别:

其实基本类型和包装类的问题
int是基本类型
Integer是int的包装类,除了存储一个int的值以外,还包括了很多方法关于int的操作,而且JDK涉及到装箱拆箱的问题

Vector ArrayList LinkedList区别:

vector是做早的线程安全数组没性能太差,现在不推荐用了。
ArrayList 线程不安全的动态数组,扩容是一半一半的扩
LinkedList双向链表,线程也不安全。

HashMap HashTable TreeMap的区别:

HashTable是同步的,哈希表的一个实现,不支持null键和值,因为是同步的反而是线程安全的。

HashMap是使用的更广泛的一个哈希表的实现,支持null的键和值,但是异步性能高,线程不安全。

TreeMap是红黑树实现的一个Map,他和Map不一样他是有顺序的,但是他的时间复杂度logn不如hashmap的1.

如何保证容器线程安全,concurrentHashMap如何实现的线程安全且是高效的?

除了传统的容器提供的包装类方法,粗粒度的保护线程安全,
现在又推出concurrent线程安全容器包来使用保证容器线程安全。

concurrentHashMap主要是分离锁来实现,就是将里面的元素,散列到队列的各个桶上,每个桶都锁起来,来支持并发,还有就是通过volite关键字来看可见性,以及底层JVM的优化。

Java提供了那些IO,NIO怎么实现的多路复用:

BIO 同步阻塞 NIO同步非阻塞 NIO2(AIO)
NIO提供了selector channel buffer来支持多路复用

多个channel注册在selector上,selector看那些channel是就绪状态,下一个就给他,在高性能容器buffer上进行IO操作。

Java有几种拷贝方式,那种方式跟高效:

最早的input output流的方式
还有nio的transferto和transerfrom
还有File的各种copy

高效肯定是NIO的因为减少了上线问的切换和不必要的拷贝。

接口和抽象类的对比:

Java目的区别实例化内部的区别
接口Java的基础机制API定义和实现的区别接口不能实例化没有非静态方法,要不是抽象要不就是静态方法
抽象类Java的基础机制代码重用也不能实例化可以有一个或者多个抽象方法,也可以没有抽象方法

相同都是Java的基础机制,都不能实例化
目的不同,一个是定义和实现分离,一个是继承复用代码,还有就是内部成员的限制,接口要严一些,抽象类和普通的类差不多。

常见的设计模式,写两个简单的:

创建型 工厂模式,单例模式 ,构造器模式,原型模式
结构型 桥接,适配器,装饰者
行为型 观察者,迭代器

懒汉模式的单例模式

public class Singleton(){
    private  static  Singleton instance;
    public Singleton getInstance(){
         if(insatnce == null){
               retuen new Singleton();
         }else{
              return instance;
         }
   }
}

工厂模式(实际上用接口改写也可以)

public classs Factory(){

  public void make(){
     sout(  "it is factory");
   }
}


public class PhoneFactory extends Factory(){
    public void make(){
    sout(" it is PhoneFactory ")
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值