java
肚子饿没人理
这个作者很懒,什么都没留下…
展开
-
java高级特性【jvm-总】
在运行期间涉及到的数据区域有:程序计数器、虚拟机栈、本地方法栈、堆、方法区,如下图:线程私有、随线程结束而结束的部分1、程序计数器:占的内存很小,几乎可以忽略不计,每个线程都有一个程序计数器,随线程的结束而消亡。计数器里存的是下一条被执行指令的地址,这里的地址可以是一个本地指针,也可以是在方法区中相对应于该方法起始指令的偏移量。因为java文件在编译以后,java语言被编译成字节码,顺序并不是ja...原创 2018-03-30 14:50:34 · 163 阅读 · 0 评论 -
Trie树----如何通过前缀查找字符串
什么是“Trie 树”?Trie 树,也叫“字典树”。顾名思义,它是一个树形结构。它是一种专门处理字符串匹配的数据结构,用来解决在一组字符串集合中快速查找某个字符串的问题。就像我们用搜索引擎搜索内容时,输入部分信息,搜索框会提示关键词,这就是Trie树的应用。我举个简单的例子来说明一下。我们有 6 个字符串,它们分别是:how,hi,her,hello,wei,wa我们希望在里面多...原创 2019-06-26 15:27:50 · 1181 阅读 · 0 评论 -
散列表及散列冲突解决方案
1、散列表看过HashMap源码的同学应该知道,HashMap是基于哈希表(散列表)的 Map 接口的非同步实现。在我们put了一条key-value数据后,如下图,程序会先将key通过hash(key)这个函数转化成整形,这个整形做为数组的下标,插入数据或查找数据。我们发现,散列表用的是数组支持按照下标随机访问数据的特性(时间复杂度O(1)),所以散列表其实就是数组的一种扩展...原创 2019-06-21 12:42:06 · 9742 阅读 · 2 评论 -
【JAVA学习笔记】synchronized的实现,以及锁的升级、降级
首先,我们要知道一个知识点,就是synchronized的实现是通过monitorenter/monitorexit 指令实现的。每个对象都有Monitor(监视器锁),当monitor被占用的时候,对象进入锁定状态。monitorenter:线程通过monitorenter指令尝试获取monitor所有权,情况如下:1、如果monitor的进入数为0,则该线程进入,进入数设置为1,线...原创 2019-02-19 11:58:57 · 2630 阅读 · 0 评论 -
【JAVA学习笔记】CountDownLatch、CyclicBarrier、Semaphore
这三个都是concurrent并发包下面的并发工具类,那么他们有什么区别呢,下面一个个通过比喻梳理1、Semaphore。semaphore的应用场景想象成:停车场如下代码 Semaphore semaphore = new Semaphore(2);也就是说停车场里有2个空位,for循环5次比作有5辆车来停车,开始时 ,最前面的2辆车通过semaphore.acquire();方法...原创 2018-12-29 10:32:46 · 138 阅读 · 0 评论 -
【JAVA学习笔记】对比ReentrantLock的lock和lockInterruptibly
lock 优先考虑获取锁(不获取到锁不罢休的那种),待获取锁成功后,才响应中断。lockInterruptibly 优先考虑响应中断,而不是响应锁的普通获取或重入获取。 public class ReentrantLockDemo { public static void main(String[] args)throws Exception { Reentr...原创 2018-12-14 16:39:12 · 178 阅读 · 0 评论 -
Hashtable、HashMap、TreeMap
三者均实现了Map接口,存储的内容是基于key-value的键值对映射,一个映射不能有重复的键,一个键最多只能映射一个值。(1) 元素特性HashTable中的key、value都不能为null;HashMap中的key、value可以为null,很显然只能有一个key为null的键值对,但是允许有多个值为null的键值对;TreeMap中当未实现 Comparator 接口时,key 不...原创 2018-11-22 15:07:48 · 163 阅读 · 0 评论 -
io与Nio知识梳理
##io体系架构回顾一、io的输入流和输出流是两种,不能同时是输入流和输出流。二、流的分类:1、节点流:从特定的地方读写的流类,和目标或目的地直接接触交互的,例如:磁盘或一块内存区域2、过滤流:使用节点流作为输出或输出,在节点流基础上的包装。过滤流是使用一个已经存在的输入或输出流连接创建的I/O流的连接input:文件-》从文件中取输入字节(FileInputStream)-》...原创 2018-08-24 16:48:42 · 222 阅读 · 0 评论 -
零拷贝深入剖析及用户空间与内核空间切换方式
传统I/O操作整个过程,用户空间缓冲区只是临时存放数据的载体,不对数据操作。追求高性能、低延迟的瓶颈比较大。改进1:操作系统意义上的0拷贝相比上一个,减少了用户空间和内核空间间的数据拷贝改进2:真正意义上的0拷贝:实例:需求:实现文件读取发送,有C、S,C向S发送文件,S读取,用两种(传统io和零拷贝)方式,取中位数比较性能。https://gi...原创 2018-08-28 13:30:57 · 1751 阅读 · 1 评论 -
Java 重写(Override)与重载(Overload)
方法重写规则:重写方法名和参数(个数、类型)必须和被重写的方法相同重写方法的返回类型必须和被重写方法相同方法的申明权限不能比被重写方法低,如父类是public,就不能是protectedfinal的方法不能被重写,static的方法不能被重写,但能被再次申明父类和子类在同一个包,子类能重写父类所有方法,除了final和private方法父类和子类不在同一个包,子类只能重写父类public和prot...原创 2018-06-22 10:37:02 · 184 阅读 · 0 评论 -
散列表设计思路,(可对照HashMap的源码)
https://blog.csdn.net/u010530712/article/details/93166430 这篇文章里初步介绍了散列表,及解决散列冲突的几种方案。目前来说,链表法是比较常用的方法,像我们熟悉的hashmap就是用的这个。查找时通过hash(key)找到某个bucket,然后遍历链表,使得整体的查找时间复杂度为O(k),k是链表的节点数。散列表碰撞攻击h...原创 2019-06-24 13:29:49 · 472 阅读 · 0 评论