1、Java的异常体系

2、从概念角度解析Java的异常处理机制

3、从责任角度看Java的异常体系

checked exception 必须try catch 或者继续向上抛出异常,否则编译不能通过

4:常见Error以及Exception

5:Java的异常处理机制

6:Java异常的处理原则

7:try-catch的性能

8:Collection体系

9:集合之List和Set

10:HashMap、HashTable、ConccurentHashMap

  10.1HashMap(Java8以前):数组+链表

          hash(key.hashCode())%len

  

  HashMap(Java8及以后):数组+链表+红黑树

    性能从O(n)提高到O(logn)

  

10.2

10.3

10.4:

10.5:

10.6:

如何优化Hashtable?

  • 通过锁细粒度化,将整锁拆解多个锁进行优化

  早期的ConcurrentHashMap:通过分段锁Segment来实现

  数据+链表

  

ConcurrentHashMap

  当前的ConcurrentHashMap:CAS+synchronized使锁更细化

  数组+链表+红黑树

  

ConcurrentHashMap:put方法的逻辑

  1. 判断Node[]数组是否初始化,没有则进行初始化操作
  2. 通过hash定位数组的索引坐标,是否有Node节点,如果没有则使用CAS进行添加(链表的头结点),添加失败则进入下次循环
  3. 检查到内部正在扩容,就帮助它一块扩容
  4. 如果f!=null,则使用synchronized锁住f元素(链表/红黑二叉树的头元素)
    1. 如果是Node(链表结构)则执行链表ode添加操作
    2. 如果是TreeNode(树形结构)则执行树添加操作
  5. 判断链表长度已经达到临界值,当然这个8是默认值,大家也可以去做调整,当节点数超过这个值就需要把链表转换为树结构

ConcurrentHashMap总结:比起Segment,锁拆的更细

  • 首先使用无锁操作CAS插入头结点,失败则循环重试
  • 若头结点已存在,则尝试获取头结点的同步锁,再进行操作

ConcurrentHashMap:注意

  • size()和mappingCount()的一桶,两者计算是否准确
  • 多线程环境下如何进行扩容

10.7:

三者的区别

  • HashMap线程不安全,数组+链表+红黑树
  • Hashtable线程安全,锁住整个对象,数组+链表
  • ConcurrentHashMap线程安全,CAS+同步锁,数组+链表+红黑树
  • HashMap的key、value均可为null,而其他的两个类不支持

10.8:

arrayList 是通过Array.copy进行扩容的
hashmap 非线程安全的 延迟加载在首次使用才初始化
static final int TREEIFY_THRESHOLD = 8;
static final int UNTREEIFY_THRESHOLD = 6;
两个参数设置红黑树和链表相互转换的阈值
默认负载因子是0.75
扩容:将会创建原来两倍大小的扩容并重新hash
ConcurrentHashMap线程安全,CAS+同步锁,数组+链表+红黑树 锁的是链表/红黑二叉树的头元素

三. J.U.C知识点梳理

NIO初窥

Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API

核心组件:Channel、Buffers和Selector

NIO和IO主要区别

特征 NIO IO
  基于通道(Channel)和缓冲区 基于字节流和字符流
阻塞 非阻塞IO 阻塞IO
选择器 有选择器(监听多个通道的事件) 无选择器
    • Channel与Buffer:基本上所有的IO在NIO都从一个Channel开始。Channel有点像流,数据可以从Channel读到Buffer中,也可以从Buffer 写到Channel中。

    • JAVA NIO中,Channel的主要实现方法有:FileChannel、DatagramChannel、SocketChannel、ServerSocketChannel

    • JAVA NIO中,Buffer的主要实现方法有:ByteBuffer、CharBuffer、DoubleBuffer、FloatBuffer、IntBuffer等

    • Selector :Selector允许单线程处理多个 Channel。例如在一个聊天服务器中,一个应用打开了多个连接(通道),但每个连接的流量都很低,使用Selector就会很方便。如图: 

to meet you 常用类库与技巧的更多相关文章

  1. Java 常用类库与技巧【笔记】

    Java 常用类库与技巧[笔记] Java异常体系 Java异常相关知识 Java在其创立的时候就设置了比较有效的处理机制,其异常处理机制主要回答了三个问题:what,where,why what表示 ...

  2. Java常用类库与技巧

    Java异常 异常处理机制主要回答了三个问题 What:异常类型回答了什么被抛出 Where:异常堆栈跟踪回答了在哪抛出 Why:异常信息回答了为什么被抛出 Java的异常体系

  3. Google和Baidu常用的搜索技巧--转

    原文链接:http://mp.weixin.qq.com/s?__biz=MjM5NTY0MTY1OQ==&mid=2654509772&idx=1&sn=754454e374 ...

  4. Google的Java常用类库 Guava资料

    java的人应该都知道Apache commons的java常用类库吧,这个Guava和commons一样,封装出一套比jdk本身提供的常用类库强大.既然有了这个这么强大的类库,我们就没必要重复造轮子 ...

  5. python爬虫:一些常用的爬虫技巧

    python爬虫:一些常用的爬虫技巧 1.基本抓取网页 get方法: post方法: 2.使用代理IP 在开发爬虫过程中经常会遇到IP被封掉的情况,这时就需要用到代理IP; 在urllib2包中有Pr ...

  6. DBA必备:MySQL数据库常用操作和技巧

    DBA必备:MySQL数据库常用操作和技巧 2011-02-25 15:31 kaduo it168 字号:T | T MySQL数据库可以说是DBA们最常见和常用的数据库之一,为了方便大家使用,老M ...

  7. git log 常用命令及技巧

    git log常用命令以及技巧 1.git log 如果不带任何参数,它会列出所有历史记录,最近的排在最上方,显示提交对象的哈希值,作者.提交日期.和提交说明.如果记录过多,则按Page Up.Pag ...

  8. DIV+CSS常用网页布局技巧!

    以下是我整理的DIV+CSS常用网页布局技巧,仅供学习与参考! 第一种布局:左边固定宽度,右边自适应宽度 HTML Markup <div id="left">Left ...

  9. Python+Selenium进行UI自动化测试项目中,常用的小技巧1:读取excel表,转化成字典(dict)输出

    从今天开始我将会把在项目中遇到的问题,以及常用的一些技巧来分享出来,以此来促进自己的学习和提升自己:更加方便我以后的查阅. 现在要说的是:用Python来读取excel表的数据,返回字典(dict), ...

随机推荐

  1. java swing 中JTable实现指定单元格为下拉框

    利用自定义的CellEditor实现第四列第二行为下拉框,本列其余行为文本框 利用默认的DefaultCellEditor设置第五列整列为下拉框   package mypackage; import ...

  2. 案例-3D旋转木马

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. Red5文件结构简介

    Red5文件结构简介 Red5 是 支持Windows,Linux等多平台的RTMP流媒体服务器,最早属于谷歌下的开源项目,先已移植到Github,地址为https://github.com/Red5 ...

  4. JNI中修改(基本类型)参数并返回到Java层使用

    最近在JNI相关项目中遇到一个问题:在Java层传入多个int类型的参数,在jni层修改参数值或地址之后重新返回到Java层.这应该算是基本知识了,尤其是基本类型的参数往往看似简单,所以在之前学习jn ...

  5. 【Jquery】this和event.target的区别

    1.js中事件是会冒泡的,所以this是可以变化的,但event.target不会变化,它永远是直接接受事件的目标DOM元素: 2.this和event.target都是dom对象,如果要使用jque ...

  6. linux磁盘空间占用分析

    df -h # 查看目前磁盘空间占用 cd / # 切换到根目录 du -sh # 查询每个目录占用的大小 lsof | grep delete # 查看当前系统打开文件 # 删除不使用的文件, 如果 ...

  7. Tomcat启动报:The Server time zone value 'XXXXX' 乱码问题解决

    今天给自己项目打包到服务器发布时,运行时,发现报 java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecogniz ...

  8. AcWing 156. 矩阵 (哈希二维转一维查询)打卡

    给定一个M行N列的01矩阵(只包含数字0或1的矩阵),再执行Q次询问,每次询问给出一个A行B列的01矩阵,求该矩阵是否在原矩阵中出现过. 输入格式 第一行四个整数M,N,A,B. 接下来一个M行N列的 ...

  9. js设计模式——3.观察者模式

    js设计模式——观察者模式 /*js设计模式——.观察者模式*/ // 主题,保存状态,状态变化之后触发所有观察者对象 class Subject { constructor() { this.sta ...

  10. 获取客户端IP地址-----以及--------线上开启redis扩展

    /** * 获取客户端IP地址 * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字 * @return mixed */ function get_cl ...