自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

_ostreamBaba

他日一席必有我。

  • 博客(244)
  • 收藏
  • 关注

原创 Java常量池 关于int类型数值的一些疑问的探究

前言这里是我在学习整体常量池相关知识在Java编译器编译Java文件时,会把字面量和符号引用加入到常量池中。如图:我们是针对int类型的值和long、double、float等类型的值进行比较。上面我们可以看到基本数据类型的值会加入到常量池中,那我们就来看一下是否如此:public class ConstPoolCase { int a = 1; float b = ...

2019-02-17 23:17:00 3886 3

原创 关于Java方法区的一些问题

前言以下关于JVM方法区的一些相关问题。我们来看一下方法区的概念:与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态信息、即时编译期编译后的代码。那么在JDK1.6中,永久代和方法区的关系。对于习惯在HotSpot VM上开发、部署程序的开发者来说,很多人都更愿意把方法区称为“永久代”,本质上两者是不等价的,方法区和永久代有着本质的区别,前者...

2019-02-26 17:26:18 389

原创 Netty4系列 LengthFieldBasedFrameDecoder的用法

文章目录前言前言对Netty总有一种莫名地执着,虽然还是一知半解,当做一种慢慢积累的过程。

2019-02-01 14:46:56 2485

原创 JDK源码系列 ArrayBlockingQueue源码浅析

文章目录前言ArrayBlockingQueue源码分析一、继承结构图二、ArrayBlockingQueue2.1. 参数介绍2.2. 构造函数2.3. 核心API实现前言在之前分析线程池ThreadExecutorPool的时候,我们就有接触到阻塞队列这一个概念。所谓阻塞队列,就是一个在传统队列基础上,支持两个附加操作的队列。而这两个附加的操作支持阻塞的插入和移除方法。支持阻塞的插入方...

2019-01-31 00:39:58 399

原创 JDK源码分析 FutureTask源码分析

文章目录前言一、Callable接口二、Future接口三、FutureTask源码分析3.1 Future继承结构图3.2 参数介绍3.3 构造函数3.4. FutureTask的API源码分析3.4.1. run():3.4.2 get()3.4.3. cancel前言一般我们创建线程的方式主要有两种,一种是直接继承Thread类,一种是实现Runnable接口。但是这两种方法是有缺陷的,...

2019-01-29 22:55:45 299

原创 JDK源码系列 Semaphore源码分析

文章目录前言Semaphore源码分析(基于JDK1.8)一、Semaphore整体结构二、内部类Sync2.1 NofairSync2.2 FairSync2.3 公平锁和非公平锁的差异三、Semaphore主要方法3.1 构造方法3.2 acquire3.3 tryAcquire3.4 release3.4 其余方法3.5 应用场景前言Semaphore(信号量),是用来控制同时访问特定资...

2019-01-27 16:27:42 319

原创 JDK源码系列 CyclicBarrier源码分析

文章目录前言CyclicBarrier源码分析(基于JDK1.8)CyclicBarrier整体结构一、参数二、构造函数三、CyclicBarrier的核心API3.1 await3.2. 其他API四、应用五、和CountDownLatch的区别前言CyclicBarrier的字面意思是可循环使用(Cycli)的屏障(Barrier)。它的作用就是,让一组线程到达一个屏障(同步点)时被阻塞,...

2019-01-26 23:53:59 249

原创 JDK源码系列 AQS续篇共享锁源码实现分析

文章目录CountDownLatch源码分析CountDownLatch整体结构Sync内部类CountDownLatch核心API1.1 await()CountDownLatch源码分析之前分析了ReetrantLock源码,可重入锁是基于AQS的独占锁实现。现在我们来分析一下AQS的共享锁模式的实现,由于CountDownLatch便是AQS共享锁模式实现的,我们就从CountDownL...

2019-01-23 20:29:33 456

原创 JDK源码系列 AbstractQueuedSynchronizer源码剖析

AbstractQueuedSynchronizer源码分析AbstractQueuedSynchronizer,简称AQS,我们着重关注AQS的两个函数:acquirerelease1.acquire()1.1 addWaiter函数private AbstractQueuedSynchronizer.Node addWaiter(AbstractQueuedSynchroni...

2019-01-20 23:39:50 494 1

原创 JDK源码分析系列 AQS续篇Condition源码浅析

文章目录前言Condition以及其具体实现类源码分析一、Condition的继承关系类图二、Condition三、ConditionObject实现3.1 参数3.2 ConditionObject的核心API前言我们在Synchronized中了解到,如果我们调用await()方法的话,会将当前线程阻塞并且放置到等待队列中,唤醒的方法有notify(),notifyAll(),这些是jav...

2019-01-17 02:52:33 367

原创 JDK源码系列 ThreadPoolExecutor源码分析

文章目录ThreadPoolExecutor源码分析1. ThreadPoolExecutor架构1.1 Executor1.2. ExecutorService1.3. ThreadPoolExecutor1.3.1. 构造方法1.3.2. 参数分析1.3.3. ThreadPoolExecutor核心API分析1.3.4. Worker内部类1.3.5. shutdown和shutdownNo...

2019-01-15 23:33:16 322

原创 JDK源码系列 ConcurrentHashMap源码分析

文章目录ConcurrentHashMap源码分析ConcurrentHashMap源码分析1. Segment类1.1 Segment参数分析:1.2 Segment构造器1.3 Segment的核心API2.ConcurrentHashMap相关API2.1 ConcurrentHashMap参数2.2. ConcurrentHashMap构造器ConcurrentHashMap源码分析之...

2019-01-14 01:42:52 240

原创 JDK源码系列 ReentrantLock 公平锁和非公平锁的实现原理

ReetrantLock公平锁和非公平锁的实现顾名思义,ReetrantLock就是可重入锁的意思,Java关键字Synchronized也是实现的可重入锁。首先我们来看一下它们两之间的异同点。ReetrantLock和Synchronized的异同点:特性SynchronizedReetrantLock是否相同可重入是是√响应中断否是×超时...

2019-01-11 01:02:07 1145 1

原创 JDK源码系列 ThreadLocalMap源码剖析

ThreadLocalMap源码实现ThreadLocalMap是Thread内部存储ThreadLocal的数据结构,本质上就是一个Map,不过它又和我们熟悉的java.util.map并不太相同,我们来了解一下ThreadLocalMap的具体实现。1.内部存储结构ThreadLocalMap的内部存储结构是一个Entry数组,但是它和hashMap不太一样,它没有next指针,说明它...

2019-01-09 21:09:10 277

原创 146. LRU缓存机制 HashMap+双向链表实现O(1)复杂度

运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最少使用的数...

2018-11-25 22:53:45 737

原创 关于HashMap中tableSizeFor的见解

今天学了一下关于HashMap的底层实现原理。我们看到这一段代码:static final int tableSizeFor(int var0) { int var1 = var0 - 1; var1 |= var1 >>> 1; var1 |= var1 &gt

2018-09-27 20:23:29 644 5

原创 浅谈java的四种引用

java的引用有四种,分别为强引用(StrongReference),软引用(SoftReference),弱引用(WeakReference),虚引用(PhantomReference),这四种引用的强度以此减弱。强引用(Strong Reference)强引用是指在程序代码中普遍存在的,例如Object obj=new Object()这类引用,若一个对象拥有强引用,且强引用还存在...

2018-09-25 22:54:30 263

原创 redis-简单实践-实现延时任务

java配合redis完成延时任务采用的是redis的锁空间机制(Keysquare Notifications)Key过期事件的Redis配置redis.conf:notify-keyspace-events Ex ,然后重启redis服务即可。public class RedisTest { private static final String REDIS_ADDRESS=...

2018-09-21 22:44:49 400

原创 leetcode 684. 冗余连接 并查集

在本问题中, 树指的是一个连通且无环的无向图。输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。结果图是一个以边组成的二维数组。每一个边的元素是一对[u, v] ,满足 u < v,表示连接顶点u 和v的无向图的边。返回一条可以删去的边,使得结果图是一个有着N个节点的...

2018-09-20 02:47:46 478

原创 leetcode 685. 冗余连接 II dfs+链式前向星 或者 并查集

在本问题中,有根树指满足以下条件的有向图。该树只有一个根节点,所有其他节点都是该根节点的后继。每一个节点只有一个父节点,除了根节点没有父节点。输入一个有向图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。结果图是一个以边组成的二维数组。 每一个边 的元素是一对 [u, v],用以表示...

2018-09-20 02:22:40 378

原创 记录一下一些关于Jackson工具类的使用

Json工具类import com.fasterxml.jackson.annotation.JsonInclude;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.*;import java.io.IOException;import java...

2018-09-18 00:25:15 451

原创 POJ 3225 区间 线段树

LogLoader是一家专门提供日志分析产品的公司。Ikki在做毕业设计的同时,还忙于在LogLoader做实习。在他的工作里,有一项是要写一个模块来处理时间区间。这个事情一直让他感到很迷糊,所以现在他很需要你帮忙。 在离散数学里面,你已经学习了几种基本的集合运算,具体地说就是并、交、相对补和对称差。它们自然地也适用于区间这种特殊的集合。作为你的快速参考,它们可以总结成下表: 运...

2018-09-16 21:51:05 266

原创 POJ2528 Mayor's posters 线段树+离散化

The citizens of Bytetown, AB, could not stand that the candidates in the mayoral election campaign have been placing their electoral posters at all places at their whim. The city council has finall...

2018-09-16 00:46:38 267

原创 POJ3468 A Simple Problem with Integers 线段树

Description You have N integers, A1, A2, … , AN. You need to deal with two kinds of operations. One type of operation is to add some given number to each number in a given interval. The other is...

2018-09-15 19:20:09 216

原创 Java8 新特性Lambda表达式

sort和Comparatorclass test{ public static void main(String[] args) { List<Integer> list=new ArrayList<>(Arrays.asList(1,2,3,4,5)); list.sort((t1,t2)-&a

2018-09-15 15:43:56 238

原创 leetcode 173. 二叉搜索树迭代器

实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。 调用 next() 将返回二叉搜索树中的下一个最小的数。 注意: next() 和hasNext() 操作的时间复杂度是O(1),并使用 O(h) 内存,其中 h 是树的高度。中序遍历一下存下每个点即可。/** * Definition for binary tree * public clas...

2018-09-15 14:51:26 389

原创 leetcode 669. 修剪二叉搜索树 数据结构

给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L) 。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。//递归:class Solution { public TreeNode trimBST(TreeNode root, int L, int R) { r...

2018-09-15 02:10:40 174

原创 leetcode 145. 二叉树的后序遍历 迭代和递归

给定一个二叉树,返回它的 后序 遍历。这种题算经典题了,递归很好写,那么迭代呢,其实也很好写。public class _145 { //递归版本 左右根顺序 public List<Integer> postorderTraversal(TreeNode root) { List<Integer> ans=new ...

2018-09-15 00:47:47 263

原创 leetcode218. 天际线问题 线段树+离散化

城市的天际线是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓。现在,假设您获得了城市风光照片(图A)上显示的所有建筑物的位置和高度,请编写一个程序以输出由这些建筑物形成的天际线(图B)。 每个建筑物的几何信息用三元组 [Li,Ri,Hi] 表示,其中 Li 和 Ri 分别是第 i 座建筑物左右边缘的 x 坐标,Hi 是其高度。可以保证 0 ≤ Li, Ri ≤ INT_MAX...

2018-09-13 20:23:29 1362

原创 POJ 1151 Atlantis 线段树+离散化+扫描线 (java实现)

Description There are several ancient Greek texts that contain descriptions of the fabled island Atlantis. Some of these texts even include maps of parts of the island. But unfortunately, these ...

2018-09-13 17:32:03 565

原创 leetcode 307. 区域和检索 - 数组可修改 树状数组

给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。 update(i, val) 函数可以通过将下标为 i 的数值更新为 val,从而对数列进行修改。 示例: Given nums = [1, 3, 5] sumRange(0, 2) -> 9 update(1, 2) sumRan...

2018-09-12 01:49:06 729

原创 关于离散化 java实现

离散化 public class Discretization { public static int lower_bound(int[] arr,int target){ //找到第一个大于等于x的数的位置 int l=0; int r=arr.length; while (l<r){ int mid...

2018-09-11 19:21:00 1222

原创 实现list容器的lower_bound和upper_bound

实现list容器的upper_boundpublic class Collections{ public static <T> int lower_bound(List<? extends Comparable<? super T&am

2018-09-11 17:10:18 1198

原创 leetcode 315. 计算右侧小于当前元素的个数 离散化+线段树

给定一个整数数组 nums,按要求返回一个新数组 counts。数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i] 的元素的数量。 示例: 输入: [5,2,6,1] 输出: [2,1,1,0] 解释: 5 的右侧有 2 个更小的元素 (2 和 1). 2 的右侧仅有 1 个更小的元素 (1). ...

2018-09-11 00:44:58 487

原创 leetcode 210. 课程表 II 拓扑排序+链式前向星

现在你总共有 n 门课需要选,记为 0 到 n-1。 在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1] 给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。 可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。 示例 1: 输入:...

2018-09-10 21:57:51 395

原创 leetcode 207. 课程表 链式前向星+拓扑排序

现在你总共有 n 门课需要选,记为 0 到 n-1。 在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1] 给定课程总量以及它们的先决条件,判断是否可能完成所有课程的学习? 示例 1: 输入: 2, [[1,0]] 输出: true 解释: 总共有 2 门课程。学习课程 1 之前,...

2018-09-10 21:23:10 376

原创 leetcode 692. 前K个高频单词

给一非空的单词列表,返回前 k 个出现次数最多的单词。 返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。 示例 1: 输入: [“i”, “love”, “leetcode”, “i”, “love”, “coding”], k = 2 输出: [“i”, “love”] 解析: “i” 和 “love” 为出现次数最多的...

2018-09-10 19:28:49 356

原创 leetcode 211. 添加与搜索单词 - 数据结构设计 字典树+dfs

设计一个支持以下两种操作的数据结构: void addWord(word) bool search(word) search(word) 可以搜索文字或正则表达式字符串,字符串只包含字母 . 或 a-z 。 . 可以表示任何一个字母。 示例: addWord(“bad”) addWord(“dad”) addWord(“mad”) search...

2018-09-10 16:53:01 319

原创 leetcode 208. 实现 Trie (前缀树) Trie

实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。 emmmm….基本操作,用一个flag记录当前位置是否是一个完整串或者直接判断String是否为null.class Trie { Trie[] next; String word=null; /** Initialize ...

2018-09-10 15:42:22 252

原创 leetcode 720. 词典中最长的单词 Trie

给出一个字符串数组words组成的一本英语词典。从中找出最长的一个单词,该单词是由words词典中其他单词逐步添加一个字母组成。若其中有多个可行的答案,则返回答案中字典序最小的单词。 若无答案,则返回空字符串。 示例 1: 输入: words = [“w”,”wo”,”wor”,”worl”, “world”] 输出: “world” 解释: 单...

2018-09-10 15:14:58 617

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除