- 浏览: 46766 次
- 性别:
-
最新评论
文章列表
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array [−2,1,−3,4,−1,2,1,−5,4],
the contiguous subarray [4,−1,2,1] has the largest sum = 6.
这道题目,我没有做出来,想错了,以为求A[i] 的 max和,就是求出A[i-1] ,然后再拿A[i]比较,就是了,但是
这样的话,对 ...
Decode Ways
- 博客分类:
- leetCode-dp
A message containing letters from A-Z is being encoded to numbers using the following mapping:
'A' -> 1
'B' -> 2
...
'Z' -> 26
Given an encoded message containing digits, determine the total number of ways to decode it.
For example,
Given encoded message "12", it could ...
Tomcat整体架构分析
- 博客分类:
- Tomcat
今天 本是怀着无比激动的心情来读源码。可是,tomcat一层套一层的 , 却搞的我晕头转向,不知所云。
还是对Tomcat的整体架构,有一定的了解后在来读吧!
另外,今天发现,tomcat webapp目录下的docs目录,有很多干货啊。
1. 接口 : Server , Service , Engine ,Host ,Context , Wrapper , Connnector,实现LifeCycle管理生命周期
组件的层次关系 : 分析server.xml , 体会这种嵌套关系
面向组件的架构!
、
以下转自 : ...
Unique Paths
- 博客分类:
- leetCode-dp
A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below).
The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (marked 'Finish' in the diagram below).
How many possible unique ...
Climbing Stairs
- 博客分类:
- leetCode-dp
You are climbing a stair case. It takes n steps to reach to the top.
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
题目意思 : n步到达,每次可以走一步或两步 , 有多少种走法!
题目思路 : 当你最后一步走 一步的时候,对应着的 == W(n - 1) , 当你走两步 , == W(n - 2);
W(n) = W(n - 1) + W(n - 2) ...
Tomcat源码阅读计划
- 博客分类:
- Tomcat
刚开始接触JavaEE的时候,就想去阅读Tomcat的源码,无奈,那时候功底不行,火候还不够,看了几天,又落下了。
最近这一段,我迷上上看源代码。遂又想着,要不再把Tomcat的源代码捡起来看看!毕竟,服务器程序,在 ...
word break
- 博客分类:
- leetCode-dp
Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words. For example, given s = "leetcode", dict = ["leet", "code"]. Return true because "leetcode" can be segmented as ...
来源 :【java并发】juc Executor框架详解 Java线程池架构原理和源码解析(ThreadPoolExecutor)
1. Executor整体架构:
Executor 接口定义了最基本的 execute 方法,用于接收用户提交任务。
ExecutorService 定义了线程池终止和创建及提交 futureTask 任务支持的方法。 AbstractExecutorService 是抽象类,主要实现了 ExecutorService 和 futureTask 相关的一些任务创建和提交的方法。 ThreadPoolExecutor ...
原文 : http://blog.hesey.net/2011/09/resolve-aba-by-atomicstampedreference.html
在运用CAS做Lock-Free操作中有一个经典的ABA问题:
线程1准备用CAS将变量的值由A替换为B,在此之前,线程2将变量的值由A替换为C,又由C替换为A,然后线程1执行CAS时发现变量的值仍然为A,所以CAS成功。但实际上这时的现场已经和最初不同了,尽管CAS成功,但可能存在潜藏的问题,例如下面的例子:
现有一个用单向链表实现的堆栈,栈顶为A,这时线程T1已经知道A.next为B,然后希望用CAS将栈顶替换为B:
hea ...
来源: 深入理解Java内存模型(五)——锁 java的CAS同时具有 volatile 读和volatile写的内存语义,
因此Java线程之间的通信现在有了下面四种方式:
线程写volatile变量,随后B线程读这个volatile变量。 线程写volatile变 ...
FutureTask
- 博客分类:
- Java-concurrence
参考 :Runnable、Callable、Executor、Future、FutureTask关系解读
Future和FutureTask
一个很好的例子 ,
/**
* 通过简单的测试程序来试验Runnable、Callable通过Executor来调度的时候与Future的关系
*/
package com.hadoop.thread;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.uti ...
AQS
- 博客分类:
- Java-concurrence
谢谢原作者 : singleAnt,写的非常好【java并发】juc高级锁机制探讨
1. Java中 的高级锁 :
RentrantLock :// 可重入的锁 ,它是一种独占锁 , 只能有一个对象拥有该锁,区别于synchronize,可中断 ,可定时,可公平的获得锁
RentrantReadWriteLock : // 可重入的读写锁,多个线程可以统一同时读,读是共享的,但写是独占的
Semaphore : // 信号量,它是一个共享锁,可以把他想象成一个池,里面放着当前可以使用的资源,多所有线程都是一样的,没有谁独占
CountDownLatc ...
一个 闩 , 一个 屏障 ,都是障碍物!只要达到特定条件时,才能移除,继续同行!
CountDownLatch ?
- 闭锁,管理一个和多个线程,只有满足某个条件才能运行!就像一个闩一样,如果你没有满足我的条件,那么就别想出去!
用给定的计数 (count)初始化 CountDownLatch。由于调用了 countDown() 方法(count--),所以在当前计数到达零之前,await 方法会一直受阻塞。计数无法被重置,计数==0时释放所有等待的线程;
应用场景 : 将一个任务分为n个独立的部分,等这些部分都完成后继续接下来的任务
...
PriorityQueue 优先级队列
- 博客分类:
- Java基础
1. 去哪儿面试的时候,被问到java源代码中有用到堆的地方吗?
我不假思索的回到,没有!因为当初压根就没有用到过Queue相关的类!
PriorityQueue就是通过Heap实现的。Heap通过数组模拟的!
分析下他维护堆的性质,以及删除首元素时,源代码中采用的手段:
因为PriorityQueue模拟的是队列,所以就必须遵循FIFO,所以这里存在两个维护堆的过程,
一个从下到上 == add
一个从上到下 == remove
还有一个地方,要注意的就是父子节点的小标处理,一定得注意数组是从0 ...
循环数组 and ArrayDeque
- 博客分类:
- Java基础
我竟然今天才知道循环数组这个概念!
1. 怎么实现循环?
通过首尾两个下标!如果尾下标的下一个就是头下标,那么队列就满了?但是怎么知道尾下标的下一个了?可一通过下标与数组长度取余!
还有就是如果首尾相等,那么这这个队列为空!
ArrayDeque 就是通过一个循环数组实现的!它判断队列是否满了或者获得前一个元素?通过:
分析源码的过程中,我就在纳闷,ArrayDeque里面的elements数组,通过位操作进行循环数组判断时是怎么做到的!
比如说,如果elements.length - 1 = 4 , ...