集合面试点

java异常

  • what 什么被抛出
  • where 堆栈跟踪
  • why 为什么被抛出

String Buffer

Error Exception区别

  • Error 程序无法处理的系统错误 编译器不做检查
  • Exception 程序可以处理的异常,捕获后可以恢复
  • 总结 前者是程序无法处理,后者可以处理

RuntimeException 不可预知,程序应当自行避免

非RuntimeException 可以预知的,程序可以避免 编译器校验 Ioexp

error jvm责任

runtimeexception 程序的责任

checked exception 可检查异常java编译器负责的责任

常见Error Exception

  • 空指针
  • 类型强制转换
  • 传递非法参数
  • 下表越界
  • 数字格式异常

非RuntimeException

  • 找不到class
  • io异常

Error

  • 找不到class
  • 深度递归暴栈

java异常处理机制

  • 抛出异常 创建异常对象,交给运行时系统处理
  • 捕获异常 寻找合适异常处理器处理,否则异常中止

高校主流异常处理框架

  • 设计一个通用的继承自RuntimeException异常处理
  • 其他异常统一翻译为这一异常Application
  • catch后,抛出上述异常子类,提供重组足以定位的信息
  • 前端接收Application 统一处理

try catch

  • 影响jvm优化
  • 异常对象实例需要保存栈的快照信息,开销大

Java集合框架

Collection

  • list
    • 有序
    • 重复
    • 索引操作
    • 分类
      • 数组 查询快 增删慢 ArrayList
      • 链表 查询慢 增删快 LinkedLIst
  • set
    • 无顺序
    • 不重复
    • 分类
      • 低层哈系表 HashSet
        • 元素唯一性 hashCode() equal
      • 低层二叉树
        • TreeSet
        • 元素排序 自然排序 对象类实现comparable接口 无参构造
        • 比较接口comparator 带参构造

Map kv结构

HashMap HashTable ConccurentHashMap

HashMap java8以前 数组加链表 数组默认16 性能会恶化

HashMap 数组链表 红黑树

HashMap put方法逻辑

  • HashMap 未被初始化,初始化
  • key球Hash值,再计算下标
  • 没有碰撞,直接放桶
  • 碰撞 拉链
  • 链表过长,红黑树
  • 链表短 链表
  • 节点存在 替换
  • 桶满了 resize

减少碰撞

  • 扰动函数 元素位置均匀
  • final对象 采用合适equals() hashCode()

HashMap扩容

  • 多线程环境下 条件竞争 死锁
  • rehashing 耗时

加锁 效率低下

ConccurentHashMap

  • 锁的粒度细化
  • 分段锁 segment 16 数组分为16个子数组 不是一个子数组就可以并行
  • java8 cas + synchronized 红黑树

ConccrentHashMap put方法逻辑

  • HashMap 未被初始化,初始化
  • hash定位索引,是否有node节点,没有则cas添加,添加失败,下次循环
  • 检查到内部正在扩容,
  • f!=null synchronized锁住f
    • 链表就链表添加
    • 树就树添加
  • 判断长度是否到达临界需要调整

concurrenthashMap 比起segment锁拆分更细

  • 无锁操作cas插入头节点
  • 头节点存在,获取同步锁

hashMap 线程不安全

Hashtable 线程安全 锁住整个对象

con 线程安全 cas 同步锁

hashmap key value 都可以null其他的不行

Juc 并发编程方案

cas aqs

分类

  • 线程执行器
  • 原子变量类
  • 并发工具
  • 并发集合

并发工具类

  • 闭锁
  • 珊栏
  • 信号量
  • 交换器

事件 主线程等待一组时间后继续执行

cyclicBarrier阻塞当前线程,等待其他线程

exchanger 线程到达同步点 交换数据

阻塞队列

java io机制

BIO NIO AIO

BIO input output reader writer

  • 系统调用
  • 等待
  • 数据从内核复制到用户空间
  • 程序可以使用数据

NIO 复用 同步非阻塞的io

线程没有阻塞 自旋 轮训

Channel

Buffer

Selector

Channel buffer

select 最大连接数 FD_SETSIZE 32*64 性能一般

poll 与select区别不大但是没有最大连接数限制

epoll

消息传递

  • select 内核赋值,需要拷贝
  • poll 一样
  • epoll 共享内存 性能高

aio异步模型

  • 基于回调
  • 返回Future

BIO 阻塞同步 1 1 简单 吞吐量低

NIO 非阻塞 同步 1 N 复杂 高

AIO 非阻塞异步 0 N 复杂 高

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值