Java基础常见面试题

个人学习总结

Java 基础

HashMap

谈一谈什么是hashMap,其工作原理是什么?

  • hashMap是一个散列表,其中存的是键值对的映射,即Key-value的映射。
  • hashMap的实现是不同步的,也就意味着不安全。其中的key-value值也可以为null。其存的序列也是无序的。
  • hashMap继承于abstractMap,实现了Map、cloneable接口
  • 其实例化参数中有两个重要的因子,初始容量大小和加载因子。加载因子默认为0.75,是基于时间和空间折中的取法。如果加载因子太高,内存耗费减少,查询成本也会增加。
  • 有4个构造函数。
  • 1.默认的构造方法
  • 2.带有容量大小的构造函数
  • 3.带有容量大小和加载因子构造函数
  • 4.带有子类Map的构造函数

工作原理:
hashMap中包含一个Entry的内部类,内部类包含了key-value的值作为实例变量。每当往hashMap中存一个key-value对,Entry类都会为其实例化一个Entry对象。对象会存放在Entey数组的table中,具体存放位置由其key的hashcode方法计算出来的hash值来决定。

抽象类 vs 接口

  • 从设计层面来讲:抽象是类的抽象,是一种模板设计。接口是行为抽象,一种行为的规范。
  • 一个类可以实现多个接口,只能实现一个抽象类
  • 接口默认是public的,接口中不能有实现方法,但是抽象类中可以有非抽象方法。

string为什么是final类的(不可变的)

  • 主要是出于安全和性能两方面考虑
  • 由于是不可变的,可以被多个线程共享,是线程安全的
  • 为了实现字符串池,只有是不可变的时候,许多不同的字符串变量指向同一个字符串常量,如果这个变量可变,那么指向他的字符串也会随之改变,所有只要不可变的时候才能实现,节约内存空间。
  • 单线程大量数据 建议:stringBuilder(线程不安全)
  • 多线程大量数据 建议:stringBuffer(线程安全)

==与equals区别

  • ==比较的是对象的地址,即判断两个对象是不是同一个(对于基本数据类型,比较的是值,引用数据类型比较的是内存地址)
  • equals如果没有被覆盖则等价于==比较 如果覆盖了则按照覆盖方法的equals来比较

##动态代理相关

  • 与传统的new一个对象不同,动态代理在运行期间为目标对象生成一个代理对象,将横切逻辑织入到代理对象中。系统使用的是这个织入横切逻辑的代理对象。

mysql4种隔离级别

  • 读取未提交内容
  • 读取提交内容
  • 可重读
  • 可串行化

Java虚拟机

  • 直接内存
    jdk1.4引入的NIO(New Input/Output)类,引入了一种基于通道和
    缓冲区的I/O方式,使用Native函数库直接分配堆外内存,然后再通过
    Java堆里的DirectByteBuffer对象作为这个内存的引用进行操作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值