to meet you 常用类库与技巧
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方法的逻辑
- 判断Node[]数组是否初始化,没有则进行初始化操作
- 通过hash定位数组的索引坐标,是否有Node节点,如果没有则使用CAS进行添加(链表的头结点),添加失败则进入下次循环
- 检查到内部正在扩容,就帮助它一块扩容
- 如果f!=null,则使用synchronized锁住f元素(链表/红黑二叉树的头元素)
- 如果是Node(链表结构)则执行链表ode添加操作
- 如果是TreeNode(树形结构)则执行树添加操作
- 判断链表长度已经达到临界值,当然这个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 常用类库与技巧的更多相关文章
- Java 常用类库与技巧【笔记】
Java 常用类库与技巧[笔记] Java异常体系 Java异常相关知识 Java在其创立的时候就设置了比较有效的处理机制,其异常处理机制主要回答了三个问题:what,where,why what表示 ...
- Java常用类库与技巧
Java异常 异常处理机制主要回答了三个问题 What:异常类型回答了什么被抛出 Where:异常堆栈跟踪回答了在哪抛出 Why:异常信息回答了为什么被抛出 Java的异常体系
- Google和Baidu常用的搜索技巧--转
原文链接:http://mp.weixin.qq.com/s?__biz=MjM5NTY0MTY1OQ==&mid=2654509772&idx=1&sn=754454e374 ...
- Google的Java常用类库 Guava资料
java的人应该都知道Apache commons的java常用类库吧,这个Guava和commons一样,封装出一套比jdk本身提供的常用类库强大.既然有了这个这么强大的类库,我们就没必要重复造轮子 ...
- python爬虫:一些常用的爬虫技巧
python爬虫:一些常用的爬虫技巧 1.基本抓取网页 get方法: post方法: 2.使用代理IP 在开发爬虫过程中经常会遇到IP被封掉的情况,这时就需要用到代理IP; 在urllib2包中有Pr ...
- DBA必备:MySQL数据库常用操作和技巧
DBA必备:MySQL数据库常用操作和技巧 2011-02-25 15:31 kaduo it168 字号:T | T MySQL数据库可以说是DBA们最常见和常用的数据库之一,为了方便大家使用,老M ...
- git log 常用命令及技巧
git log常用命令以及技巧 1.git log 如果不带任何参数,它会列出所有历史记录,最近的排在最上方,显示提交对象的哈希值,作者.提交日期.和提交说明.如果记录过多,则按Page Up.Pag ...
- DIV+CSS常用网页布局技巧!
以下是我整理的DIV+CSS常用网页布局技巧,仅供学习与参考! 第一种布局:左边固定宽度,右边自适应宽度 HTML Markup <div id="left">Left ...
- Python+Selenium进行UI自动化测试项目中,常用的小技巧1:读取excel表,转化成字典(dict)输出
从今天开始我将会把在项目中遇到的问题,以及常用的一些技巧来分享出来,以此来促进自己的学习和提升自己:更加方便我以后的查阅. 现在要说的是:用Python来读取excel表的数据,返回字典(dict), ...
随机推荐
- Spring import配置文件使用占位符
import使用占位符 连接池切换导入配置的代码: <import resource="classpath:META-INF/spring/spring-${db.connection ...
- 深浅拷贝, for循环小知识点 str操作 list的删除问题,类型转换
深浅拷⻉ : lst1 = ["⾦⽑狮王", "紫衫⻰王", "⽩眉鹰王", "⻘翼蝠王"] lst2 = lst1 ...
- 1005 -- I Think I Need a Houseboat
I Think I Need a Houseboat Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 105186 Acc ...
- js异步处理
一.什么是异步? 我们一般喜欢把异步和同步.并行拿出来比较,我以前的理解总是很模糊,总是生硬地记着“同步就是排队执行,异步就是一起执行”,现在一看,当初简直就是傻,所以我们第一步先把这三个概念搞清楚, ...
- 关于Oracle中Sort Merge Join的改写
业务场景的问题,我们有一个刷CUBE的SQL,是Oracle环境,平时跑70多分钟, 但是最近突然不动了,这个SQL需要算累计值,比如年累计客户数量. 累计值是什么意思呢?我们使用下面的数据来说明问题 ...
- Codeforces 343E 最小割树
题意及思路:https://www.cnblogs.com/Yuzao/p/8494024.html 最小割树的实现参考了这篇博客:https://www.cnblogs.com/coder-Uran ...
- mysql查找字段空、不为空的方法总结
1.不为空 Select * From table_name Where id<>'' Select * From table_name Where id!='' 2.为空 Select ...
- 获取min-max之间的随机数
private static String getRandom(int min, int max){ Integer random =(int)(min+Math.random()*(max-min+ ...
- 网关协议:CGI和WSGI
通常服务器程序分为web服务器和应用程序服务器.web服务器是用于处理HTML文件,让客户可以通过浏览器进行访问,主流的web服务器有Apache.IIS.Nginx.lighthttpd等.应用服务 ...
- web服务nginx和php的相互关系
nginx和php有什么关系?很多新手可能有这个疑问,我之前学php也没注意这些问题,只管着按文档配置操作,完成php项目就不管了,最近特意总结了一下. php是一门编程语言,讲究说学逗唱...呃,不 ...