自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(268)
  • 收藏
  • 关注

原创 关于个人博客的所有有关说明

概述  这篇文章主要用给以后的文章的写作内容和规范做一个总体介绍。  首先,这里简单说明一下理由。虽然博客最早的文章比较早但是相当长时间内文章的质量和数量都相当低。但是近来确实觉得博客是一个很好的学习资源,而且对个人来说也是一个很好的总结自己学习知识和经验的机会。通过对今后的文章做一些简单的规划和约定,望有助于提高文章的质量和数量,也更加明确当前的学习任务,希望以此对自己增加一些约束。

2016-07-25 17:53:37 1564

原创 从同步异步、阻塞非阻塞到5种IO模型

同步异步、阻塞非阻塞同步与异步同步与异步在不同的场景下有不同的概念,在IO模型中的同步异步,主要区别在当任务A调用任务B的过程中,进程A是否继续进行。 如果A等待B的结果,则为同步 如果A不等待B的结果,则为异步同步状态下任务A的执行时依赖于任务B的,任务A成功是依赖于成功B的。而异步模式下两者是不相关的。异步的实现方式大概有三种:状态、通知和回调 状态就是任务A去查询任务B的结果如何

2017-08-13 10:45:28 934

原创 渲染web视图

6将模型数据渲染成HTML6.1 理解视图解析在MVC模型中,控制器将数据填充到模型中,然后将模型传递给一个用来渲染的视图。控制器中返回的String类型的值是视图的名称。 逻辑处理和视图渲染是解耦的,控制器方法和视图在模型内容上达成一致,除此之外再无关联。

2017-06-01 16:45:41 2272

原创 hibernate的update及JDBC数据库批量操作

Session.update()和Query.update()的区别最本质的区别是Session.update()更新的实体。而Query.update()更新的是执行SQL语句。 由此会带来一些问题。性能问题首先如果要使用Session去更新数据库需要执行一个获取实体的操作,也就是说需要先获取这个实体。而如果执行Query.update()则是直接执行SQL语句(或者HQL)。 本来以我的理解

2017-03-31 15:19:04 1595

原创 日常小结-java线程状态的转移

JAVA线程的状态Thread.State和虚拟机状态之间异同。首先JAVA的线程状态,其定义可以从Thread.State的定义中看出NEW:初始状态 RUNNABLE:运行状态 BLOCKED:阻塞状态 WAITING/WAIT_WAITING:等待其他线程执行相应操作后运行 TERMINATED:终止状态但是这里还是有一个比较著名的图(图片来源),如下: 我基本上是这样理解的Thre

2017-03-10 16:28:57 825

原创 netty的IM项目小结

关于netty的主要用途的理解,netty的线程模型和IO模型高效的理解。关于自己一个个人小IM项目的介绍和反思。

2017-02-27 22:22:16 14586 5

原创 源码分析-FutureTask

介绍FutureTask的实现原理。

2017-02-26 14:36:22 645

原创 源码分析-Semaphor

semaphorejava中的Semaphore主要用来限制线程的数量。而不是用来限制资源的访问。Semaphore所拥有的集是非常抽象的集合。所以说Semaphore在获取和是否的过程中不会持有特定对象的锁。即使排除java的语义概念,锁和信号量,虽然都是基于等待唤醒机制,但是也是不同的同步组件。虽然锁可以用来做同步器,同步器可以用来做锁,但是信号量并没有所有者的概念。由于没有所有者的概念,信号量

2017-02-24 14:53:52 745

原创 源码分析-Phaser

Phaser使用方法这是一个比CyclicBarrier更加灵活的同步屏障。从灵活性的角度来说Phaser>CyclicBarrier>CountDownLatch。Phaser中有一个概念叫阶段(用phaser)表示,这个只能增长不能减小。每个阶段可以有不同数量的分阶段(party,不知道怎么翻译了。先用这个)。当有足够数量的分阶段到达的时候就进入下一个阶段。获得Phaser

2017-02-23 22:35:34 1721

原创 源码分析-CyclicBarrier

CyclicBarrier从用法上来说,CyclicBarrier可能看出是CountDownLatch的高级版本,增加了重置的功能,对于多个线程的中断提供了通知的功能。具体的用法通过api就有比较详细的介绍。内部类Generation-如何实现重置功能的首先CyclicBarrier内部有一个内部静态类Generation。当然在每个CyclicBarrier实例中也有一个Generation域这

2017-02-16 13:31:01 2992

原创 源码分析-CountDownLatch

CountDownLatch基本用法CountDownLatch会接受一个初始化的int值count,通过调用await方法阻塞当前线程。通过其他线程调用countDown来降低当前状态值,当当前状态将至0 时,所有阻塞在CountDownLatch的线程都会立刻从await返回。CountDownLatch时一次性的,不可以重置,如果需要重置请使用CyclicBarrier。实现实现比较简单。就是

2017-02-15 20:05:58 418

原创 源码分析-ThreadPoolExecutor

接口首先说一下几个Executor相关的接口Executor:这个接口的主要功能的使是的策略与机制的分离,主要就是可以将提交任务的线程和执行任务的线程分开,异步的进行。当然特殊情况下也是同步进行的。只有一个方法就是void execute(Runnable command)ExecutorService:这个接口功能就要复杂一些了,和Excutor的区别主要在两点: 提供了取消和

2017-02-13 14:39:53 545

翻译 Protobuf3语言指南

定义一个消息类型 指定字段类型分配标识号指定字段规则添加更多消息类型添加注释保留标识符(Reserved)从.proto文件生成了什么?标量数值类型默认值枚举使用其他消息类型 导入定义使用proto2消息类型嵌套类型更新一个消息类型AnyOneof 使用OneofOneof 特性向后兼容性问题映射(Maps) 向后兼容性问题包(Packages) 包及

2017-01-25 22:14:47 119509 6

原创 源码分析-ConcurrentHashMap

一个支持并发的提取和修改的散列表。这个类和hashtable准守相同的规范,并且每个版本都对应相同的功能规范。虽然这是一个线程安全的类,但是他并不依赖于一个整体的锁,没有一个锁可以锁住整个元素而静止所有访问。这个类和hashtable可以互操作。提取操作如get。不会阻塞,所以有可能被更新方法锁覆盖,提取反映了最近完全操作的结果。对于聚合操作如果putAll和clea

2017-01-18 15:05:02 736

原创 源码分析-CopyOnWriteArrayList

概述doc文档一个线程安全的ArrayList对于所有的可变操作都使用一个基于数组的新拷贝实现。 通常的情况下这样做的代价非常大,但是当遍历操作远远大于修改操作的时候这样做更有效率,或者当你不希望使用同步的方式遍历操作同时又希望可以排除并发干扰的时候也很有效。快照类型的迭代器使用给指向当迭代器创建的时候当前数组状态的引用。这个数组在整个迭代器的生命周期中都不变,所以同步干扰不会出现,而

2017-01-13 20:46:35 410

原创 源码分析-PriorityBlockingQueue

PriorityBLockingQueue-文档部分doc文档PriorityBlockingQueue是无界的阻塞队列。当然如果资源耗尽的看情况下也是会出现添加失败的情况。PriorityBlockingQueue提供的迭代器并不保证按照某一顺序顺序迭代所有元素(和有限队列一致,可以见另一篇博客源码分析-PriorityQueue)(它会先按数组迭代,然后再迭代漏掉的元素)。当两个元素相

2017-01-12 21:04:08 1303

原创 源码分析-SynchronousQueue

SynchronousQueueSynchronousQueue作为阻塞队列的时候,对于每一个take的线程会阻塞直到有一个put的线程放入元素为止,反之亦然。在SynchronousQueue内部没有任何存放元素的能力。所以类似peek操作或者迭代器操作也是无效的,元素只能通过put类操作或者take类操作才有效。通常队列的第一个元素是当前第一个等待的线程。如果没有线程阻塞在该队列则poll会返回null。从Co

2017-01-05 21:18:42 3671 2

原创 leetcode-124. Binary Tree Maximum Path Sum

leetcode-124. Binary Tree Maximum Path Sum题目:这题显然是需要迭代的,但是每次迭代中却需要进行很多次比较,所以对于结果我使用了域。针对一个节点需要比较这几个,其左子节点对应的最大值,其右子节点对应的最大值,其从左子节点-根节点-右节点之和,其从左子节点-根节点之和,其根节点-右节点之和,以及ret。这几个值之间的最大值。

2017-01-04 17:15:19 396

原创 leetcode-123. Best Time to Buy and Sell Stock III

leetcode-123. Best Time to Buy and Sell Stock III题目:和前2题不同,这里需要计算的是最多两次交易,而且要求不能同时拥有两个股票。这题思路就是分治算法,从0到i天之内。每一天都可以将这段时间分割成为两个时间段,然后去求其最大值之和就好。但是这里并不是简单的分治算法,因为两个问题不是是独立的,我们要求的是和。这里不去思考最大2次交易而是来看最大k次交易。>

2017-01-04 17:10:57 404

原创 leetcode-122. Best Time to Buy and Sell Stock II

leetcode-122. Best Time to Buy and Sell Stock II题目:无限次交易就是计算所有增序列的和

2017-01-04 17:04:41 300

原创 leetcode-121. Best Time to Buy and Sell Stock

leetcode-121. Best Time to Buy and Sell Stock题目:题目是找最大收益的一次,方法也很简单,首先需要一个数组去维护当前坐标之前的最小值,然后用一个变量去记录当前值和当前值之前最小值之差就好。当然用两个变量也可以。

2017-01-04 17:03:30 275

原创 leetcode-120. Triangle

leetcode-120. Triangle题目:思路就是传统的DP,只不过传统的思路都是使用矩阵去做,这里也是类似的,但是需要注意下标是否准确就好。

2017-01-04 17:01:14 341

原创 leetcode-119. Pascal's Triangle II

leetcode-119. Pascal’s Triangle II题目:

2017-01-04 16:58:52 364

原创 leetcode-118. Pascal's Triangle

leetcode-118. Pascal’s Triangle题目:解法有很多种。结构都是类似的,每一行两边都是1,所以首尾不需要迭代,只要运算中间的就好,中间的值相当于上一行相邻位置元素之和,不过需要注意范围。

2017-01-04 16:55:20 366

原创 leetcode-117. Populating Next Right Pointers in Each Node II

leetcode-117. Populating Next Right Pointers in Each Node II题目:和上一题不同。这里结构不是固定的了所以需要使用队列去保存当前的信息。而且有很多需要注意的小细节。首先从思路上来说还是用FIFO的队列,并且每个循环体内都替换一次。直到到最后一行队列为空则终止循环。外层循环每一层循环异常。内层循环针对当前对立的每个节点。

2017-01-04 16:52:25 320

原创 leetcode-116. Populating Next Right Pointers in Each Node

leetcode-116. Populating Next Right Pointers in Each Node题目:这题是非常简单的题目。但是我给想复杂了。我其实是按照第117题做的。后来看到有个非常漂亮的答案。这里一个可以利用的点是踏实全二叉树。所以有固定的结构关系,没必要用队列或者栈去储存信息。所有就有了下面非常漂亮的解法。

2017-01-04 16:49:12 446

原创 leetcode-115. Distinct Subsequences

leetcode-115. Distinct Subsequences题目: Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence of a string is a new string which is formed from the or

2017-01-04 16:46:19 440

原创 leetcode-114. Flatten Binary Tree to Linked List

leetcode-114. Flatten Binary Tree to Linked List题目:我这里为了不分情况讨论。先把右节点入队,然后左节点移动给右节点,然后当前节点等于其右节点(如果右节点为空则出队)。这样就避免了分类讨论不过即使分类讨论结果复杂度也差不多。可能还要快一些

2017-01-04 16:42:20 431

原创 leetcode-113. Path Sum II

leetcode-113. Path Sum II题目:典型的回溯法,和上一题相同,回溯法和DFS的区别就是DFS值找有没有,回溯法还找有多少,所以回溯法需要一个对象维护当前状态,需要另一个变量储存每个结果。

2017-01-04 16:39:53 405

原创 leetcode-112. Path Sum

leetcode-112. Path Sum题目:典型的DFS。迭代的终止条件:当前节点的值等于剩余的值,并且该节点为叶子节点迭代过程:左右子节点结果相或

2017-01-04 16:37:19 622

原创 leetcode-111. Minimum Depth of Binary Tree

leetcode-111. Minimum Depth of Binary Tree题目: Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the shortest path from the root node down to the nearest

2017-01-04 16:33:37 286

原创 leetcode-110. Balanced Binary Tree

leetcode-110. Balanced Binary Tree题目:这个算法,比较简单,但是其实仔细看到话其实重复计算了。不过我没想到有什么算法可以不用重复计算的。讨论里好像也没有。这里先这样吧。

2017-01-04 16:32:40 391

原创 leetcode-109. Convert Sorted List to Binary Search Tree

leetcode-109. Convert Sorted List to Binary Search Tree题目: Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.这题是个很有意思的题。这题一开始其实和上一题差不多,但是这里

2017-01-04 16:29:50 297

原创 leetcode-108. Convert Sorted Array to Binary Search Tree

leetcode-108. Convert Sorted Array to Binary Search Tree题目: Given an array where elements are sorted in ascending order, convert it to a height balanced BST.这题的基本思路就是2分法,由于是排好序的,想要构造一个树,我们只要找到中点就可以了

2017-01-04 16:24:13 201

原创 leetcode-107. Binary Tree Level Order Traversal II

leetcode-107. Binary Tree Level Order Traversal II题目: Given a binary tree, return the bottom-up level order traversal of its nodes’ values. (ie, from left to right, level by level from leaf to root).

2017-01-04 16:21:33 189

原创 leetcode-106. Construct Binary Tree from Inorder and Postorder Traversal

leetcode-106. Construct Binary Tree from Inorder and Postorder Traversal题目: Given inorder and postorder traversal of a tree, construct the binary tree You may assume that duplicates do not exist i

2017-01-04 16:18:13 282

原创 leetcode-105. Construct Binary Tree from Preorder and Inorder Traversal

leetcode-105. Construct Binary Tree from Preorder and Inorder Traversal题目:基本的数据结构知识知道,如果想要恢复一颗数,至少需要这三个遍历中的两个,而且至少有一个为中序遍历,道理很简单就是因为中序遍历其实其跟将树一分为2,所以我们只需要根据前序或者后序遍历终根的位置,在中序遍历终找根的位置就好了。所以这里假设没有重复节点,如果有重复节点的话我还

2017-01-04 16:16:52 321

原创 源码分析-LinkedBlockingQueue

LinkedBlockingQueueLinkedBlockingQueue是基于链表的阻塞FIFO队列,可以指定一个最大的长度限制以防止过度扩展,未指定情况下其大小为Integer.MAX_VALUE;提供比ArrayBlockingQueue更高的吞吐量但是在高并发条件下可预测性降低。

2016-12-27 10:45:13 2712

原创 leetcode-104. Maximum Depth of Binary Tree

leetcode-104. Maximum Depth of Binary Tree题目:找最大深度,这题我用了一个域变量去做,这样就比较简单了。当然也可以不用但是比较麻烦。

2016-12-27 09:50:40 441

原创 leetcode-103. Binary Tree Zigzag Level Order Traversal

leetcode-103. Binary Tree Zigzag Level Order Traversal题目:和上一题层序遍历很类似,不过要求是Z字型遍历,所以这里用栈,而且需要一个bollean变量来表示方向。

2016-12-27 09:48:30 332

空空如也

空空如也

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

TA关注的人

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