面试基础知识加强

一、Java基础

BigDecial使用

  • 比较用compareTo而不是equals因为它会忽略精度
  • 使用入参为String的构造方法
  • 除的时候需要指定精度,否则除不尽的时候会抛异常
  • 四舍五入:RUND_HALF_UP

多态

含义:父类引用指向子类对象
特点:

  • 前提是有继承或实现
  • 只有在运行过程中才能知道具体调用的是哪个类的哪个方法
  • 如果子类重新了父类的方法则运行的时候调用的是子类的方法,否则调用父类方法

作用
提高程序的的拓展性

接口和抽象类区别

共同点

  • 都不能实例化
  • 都可以包含抽象方法
  • 都可以有默认实现方法(JAVA8之后接口可以有default默认实现)

不同点

  • 接口定义的是一种规范,抽象类在我实际项目中我觉得主要的作用就是代码的复用,把一些公共处理逻辑放到抽象类中
  • 类只能单继承,接口能多实现

关于hashCode和equals

hashCode()的作用

产生hash码,也称为散列码,这个哈希码的可以确定对象在哈希表中(数组)的索引位置。
对象进行eqals比较的时候,它会判断对象的hashCode值是否相等,hashCode不相等对象肯定不相等,只有hashCode相等的时候才会再去比较equals的,这个时候也相等表明是相同对象,因为hash存储的是key-vlue形式的键值对,所以查找速度很快。

为什么重写equals必须重写hashCode

因为两个对象如果要相等hashCode值必须相等。举个例子hashSet添加元素的时候。

NIO、BIO、AIO区别

他们是java支持的三种网络编程模型。
AIO不太了解主要讲BIO和NIO。
先从客户端发起连接请求服务端的大致处理方式来讲

  • BIO是同步阻塞IO,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,简单示意图如下。
    在这里插入图片描述
  • Java NIO:同步非阻塞IO,服务器实现模式为一个线程处理多个请求连接,客户端发的连接请求都会注册到多路复用器上,多路复用器轮训到连接有I/O请求就处理。
    在这里插入图片描述
    适用场景来说
    BIO适用于连接数目较少且固定的架构。NIO适用于连接数据较多且连接较短的架构,比如如聊天系统,弹幕系统。AIO 适用连接数目多且长的架构。
    ArrayList为什么线程不安全

集合相关

ArrayList为什么线程不安全
添加元素的时候size++写操作不是原子性的,分两步先读取,后++

    public boolean add(E e) {
   
        ensureCapacityInternal(size + 1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值