java
yesIcando-bupt
stay hungry stay foolish
展开
-
数据库大并发操作要考虑死锁和锁的性能问题
1 前言数据库大并发操作要考虑死锁和锁的性能问题。看到网上大多语焉不详(尤其更新锁),所以这里做个简明解释,为下面描述方便,这里用T1代表一个数据库执行请求,T2代表另一个请求,也可以理解为T1为一个线程,T2 为另一个线程。T3,T4以此类推。下面以SQL Server(2005)为例。2 锁的种类共享锁(Shared lock)。例1:原创 2017-08-03 14:36:20 · 634 阅读 · 0 评论 -
java实现生产者消费者问题
引言 生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,如下图所示,生产者向空间里存放数据,而消费者取用数据,如果不加以协调可能会出现以下情况:生产者消费者图 存储空间已满,而生产者占用着它,消费者等着生产者让出空间从而去除产品,生产者等着消费者消费产品,从而向空间中添加产品。互相等待,从而发生死锁。JAVA解决线程模型的三种方式原创 2017-03-13 16:59:24 · 188 阅读 · 0 评论 -
Java阻塞队列的实现
阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞。试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列插入新的元素。同样,试图往已满的阻塞队列中添加新元素的线程同样也会被阻塞,直到其他的线程使队列重新变得空闲起来,如从队列中移除一个或者多个元素,或者完全清空队列,下图展示了如何通过阻塞队列来合作:原创 2017-03-13 16:18:39 · 283 阅读 · 0 评论 -
synchronized 与 Lock
最近在做一个监控系统,该系统主要包括对数据实时分析和存储两个部分,由于并发量比较高,所以不可避免的使用到了一些并发的知识。为了实现这些要求,后台使用一个队列作为缓存,对于请求只管往缓存里写数据。同时启动一个线程监听该队列,检测到数据,立即请求调度线程,对数据进行处理。 具体的使用方案就是使用同步保证数据的正常,使用线程池提高效率。Lock与synchronized的区别1)Lo原创 2017-03-13 16:00:13 · 216 阅读 · 0 评论 -
死锁例子
内容:一个简单的死锁例子,大概的思路:两个线程A和B,两把锁X和Y,现在A先拿到锁X,然后sleep()一段时间,我们知道sleep()是不会释放锁资源的。然后如果这段时间线程B拿到锁Y,也sleep()一段时间的话,那么等到两个线程都醒过来的话,那么将互相等待对方释放锁资源而僵持下去,陷入死锁。flag的作用就是让A和B获得不同的锁。public class TestDeadLock {原创 2017-03-13 11:43:40 · 252 阅读 · 0 评论 -
非阻塞同步算法与CAS(Compare and Swap)无锁算法
锁(lock)的代价锁是用来做并发最简单的方式,当然其代价也是最高的。内核态的锁的时候需要操作系统进行一次上下文切换,加锁、释放锁会导致比较多的上下文切换和调度延时,等待锁的线程会被挂起直至锁释放。在上下文切换的时候,cpu之前缓存的指令和数据都将失效,对性能有很大的损失。用户态的锁虽然避免了这些问题,但是其实它们只是在没有真实的竞争时才有效。Java在JDK1.5之前都是靠syn原创 2017-03-29 14:39:35 · 280 阅读 · 0 评论 -
JAVA多线程和并发基础面试问答
原文链接 译文连接 作者:Pankaj 译者:郑旭东 校对:方腾飞多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一。在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰到的问题。(校对注:非常赞同这个观点)Java多线程面试问题1. 进程和线程之间有什么不同?一个进程是一个独立(self contai转载 2017-03-13 11:16:35 · 142 阅读 · 0 评论 -
堆:新生代、老年代 以及minor GC 、full GC
Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收。堆的内存模原创 2017-03-29 10:06:34 · 2106 阅读 · 0 评论 -
JDK中使用到的23个经典设计模式
A. 创建模式Singleton(单态):只允许一个实例[java] view plain copyRuntime.getRuntime(); java.awt.Toolkit.getDefaultToolkit(); java.awt.GraphicsEnvironment.getLocalGraphicsEnvironme原创 2017-03-29 09:47:39 · 68 阅读 · 0 评论 -
JDK中设计模式
本文主要是归纳了JDK中所包含的设计模式,包括作用和其设计类图。首先来个总结,具体的某个模式可以一个一个慢慢写,希望能对研究JDK和设计模式有所帮助。一、设计模式是什么(1)反复出现问题的解决方案(2)增强软件的灵活性(3)适应软件不断变化二、学习JDK中设计模式的好处(1)借鉴优秀代码的设计,有助于提高代码设计能力(2)JDK的设计中体现了大多数设计模式,原创 2017-03-29 08:59:51 · 195 阅读 · 0 评论 -
HashMap源码
HashMap的存储结构,如下图所示:紫色部分即代表哈希表,也称为哈希数组,数组的每个元素都是一个单链表的头节点,链表是用来解决冲突的,如果不同的key映射到了数组的同一位置处,就将其放入单链表中。1、首先看链表中节点的数据结构:[java] view plain copy // Entry是单向链表。 (1.7以前)原创 2017-03-28 11:05:20 · 200 阅读 · 0 评论 -
深入理解Java中的重写和重载
重载(Overloading)和重写(Overriding)是Java中两个比较重要的概念。但是对于新手来说也比较容易混淆。本文通过两个简单的例子说明了他们之间的区别。定义重载简单说,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。重写重写指的是在Java的子类与父类中有两个名称、参数列表都相原创 2017-03-08 14:45:16 · 256 阅读 · 0 评论 -
各种集合类型底层实现原理
Set和Map的关系Set代表无序,不能重复的集合;Map代表Key-Value组成的集合,是一种关联数组。Map的Key要求是不能重复,没有顺序。把Map的所有Key组合起来就是Set。Set keySet();HashMap和HashSet原理HashMap底层是用数组链表存储的,元素是Entry。向HashMap添加时,由key的hashcode决定Entry存储位置,当原创 2017-03-27 14:53:01 · 1572 阅读 · 2 评论 -
java中线程池的几种实现方式
1、线程池简介: 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。 假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。 如果:T1 + T3 远大于 T2,则可以采用线程池,以提高服务器性能。 一个线程原创 2017-04-06 09:55:09 · 302 阅读 · 0 评论 -
方法锁、对象锁、类锁
java synchronized同步方法调用另一个同步方法,锁机制问题public synchronized void methodA(int a, int b);public synchronized void methodB(int a){methodA(a, 0);}要明白两个问题,1.锁的对象是谁,2.谁持有了锁。假设方法A和B原创 2017-03-29 09:37:43 · 534 阅读 · 0 评论 -
java stack的详细实现分析
简介 我们最常用的数据结构之一大概就是stack了。在实际的程序执行,方法调用的过程中都离不开stack。那么,在一个成熟的类库里面,它的实现是怎么样的呢?也许平时我们实践的时候也会尝试着去写一个stack的实现玩玩。这里,我们就仔细的分析一下jdk里的详细实现。Stack 如果我们去查jdk的文档,我们会发现stack是在Java.util这个包里。它对应原创 2017-05-09 19:02:17 · 353 阅读 · 0 评论 -
Java内存分配
学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:254078193 我们一起学Java!栈、堆、常量池虽同属Java内存分配时操作的区域,但其适用范围和功用却大不相同。本文将深入Java核心,详细讲解Java内存分配方面的知识。Java内存分配与管理是Java的核心技术之一,今天我们再次深入Ja原创 2017-04-26 19:50:10 · 80 阅读 · 0 评论 -
事务管理实现原理
本文是《轻量级 Java Web 框架架构设计》的系列博文。这篇博文已经“难产”好几天了,压力还是有些大的,因为 Transaction(事务管理)的问题,争论一直就没有停止过。由于个人能力真的非常有限,花了好多功夫去学习,总算基本上解决了问题,所以这才第一时间就拿出来与网友们共享,也听听大家的想法。提示:对 Transaction 不太理解的朋友们,可阅读这篇博文《Transaction转载 2017-04-25 09:51:11 · 686 阅读 · 0 评论 -
二叉查找树--查找、删除、插入(Java实现)
文章,未经博主允许不得转载。目录(?) 下篇:平衡二叉树 http://blog.csdn.net/kiritor/article/details/8892648 二叉查找树 二叉查找树(Binary Search Tree),或者是一颗空树,或者是具有下原创 2017-04-26 10:39:23 · 489 阅读 · 1 评论 -
Spring事务管理机制的实现原理-动态代理
之前在做项目中遇到spring无法进行事务代理问题,最后发现是因为没有写接口,原因当时明白了,看到这篇文章写的清楚些,转过来 我们先来分析一下Spring事务管理机制的实现原理。由于Spring内置AOP默认使用动态代理模式实现,我们就先来分析一下动态代理模式的实现方 法。动态代理模式的核心就在于代码中不出现与具体应用层相关联的接口或者类引用,如上所说,这个代理类适用于任何接口的实现。下面原创 2017-04-25 09:34:44 · 478 阅读 · 0 评论 -
浅析spring中的AOP(面向切面编程)
* 它用来生成代理对象 * 它需要所有的参数 * * 目标对象 * * 增强 * @author cxf *//** * 1. 创建代理工厂 * 2. 给工厂设置三样东西: * * 目标对象:setTargetObject(xxx); * * 前置增强:setBeforeAdvice(该接口的实现) * * 后置增强:setAfterAdvi原创 2017-04-24 21:25:31 · 359 阅读 · 0 评论 -
ajax处理跨域有几种方式?实现原理是什么?
一、什么是跨域我们先回顾一下域名地址的组成:http:// www . google : 8080 / script/jquery.js http:// (协议号) www (子域名) google (主域名) 8080 (端口号)script/jquery.js (请求的地址)原创 2017-04-23 15:43:56 · 1074 阅读 · 1 评论 -
ConcurrentHashMap详解以及get方法保持同步的解释
ConcurrentHashMap是Java5中新增加的一个线程安全的Map集合,可以用来替代HashTable。对于ConcurrentHashMap是如何提高其效率的,可能大多人只是知道它使用了多个锁代替HashTable中的单个锁,也就是锁分离技术(Lock Stripping)。实际上,ConcurrentHashMap对提高并发方面的优化,还有一些其它的技巧在里面(比如你是否知道在get原创 2017-05-12 21:45:32 · 673 阅读 · 0 评论 -
Java中synchronized的实现原理与应用
Java中的每一个对象都可以作为锁,而在Synchronized实现同步的几种方式中分别为:普通同步方法:锁是当前实例对象静态同步方法:锁是当前类的Class对象同步方法块:锁是Synchronized括号里配置的对象任何一个对象都一个Monitor与之关联,当且一个Monitor被持有后,它将处于锁定状态。Synchronized在JVM里的实现都是基于进入和退出Mo原创 2017-04-20 23:11:27 · 355 阅读 · 0 评论 -
synchronized和lock的实现原理
目录(?)[+]本文转载自http://wenku.baidu.com/view/41480552f01dc281e53af090.html?re=view目前在Java中存在两种锁机制:synchronized和Lock,Lock接口及其实现类是JDK5增加的内容,其作者是大名鼎鼎的并发专家Doug Lea。本文并不比较synchronized与Lock孰优孰劣,只是转载 2017-04-19 11:18:39 · 247 阅读 · 0 评论 -
Java并发编程:Synchronized及其实现原理
Java并发编程系列:Java 并发编程:核心理论 Java并发编程:Synchronized及其实现原理Java并发编程:Synchronized底层优化(轻量级锁、偏向锁)Java 并发编程:线程间的协作(wait/notify/sleep/yield/join) Java 并发编程:volatile的使用及其原理一、Synchroniz转载 2017-04-19 11:11:47 · 251 阅读 · 0 评论 -
从TCP三次握手说起——浅析TCP协议中的疑难杂症
PeterWang_bupt贡献值:2等級:L10发布0评论1顶发布链接发布图文 全部主题我关注的主题GEEKNEWSRustSwift全栈工程师/homePrestoDB人工智能前端Spark云计算潜水猿Container物联网(IoT)SDN安全技术翻译VR/ARAndroid开发者iO转载 2017-03-04 21:00:07 · 3752 阅读 · 0 评论 -
http session 基础知识
因为Http的无接连,无状态,所以造就了Cookie,Session的诞生。可以看我的上篇WebApp之Cookie原理。 Session也是类似Cookie一样的功能,用于记录客户端浏览器与服务器端交互的会话状态。它与Cookie的重要区别是: 1.Cookie是记录在客户端浏览器本地;(它是不可靠的,客户端浏览器可以不允许服务器记录,还可以删除。) 2.S转载 2017-02-25 15:03:18 · 372 阅读 · 0 评论 -
Map集合分类区别: hashmap linkedhashmap hashtable treemap
Java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap. Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。 Hashmap 是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度原创 2017-02-28 09:09:00 · 280 阅读 · 0 评论 -
map集合
Map子类HashMapHashMap类概述键是哈希表结构,可以保证键的唯一性LinkedHashMap- 概述 - Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。 - 由哈希表保证键的唯一性,不可重复 - 由链表保证键盘的有序(存储和取出的顺序一致)TreeMap概述键是红黑树结构,可以保证键的排序和唯一性原创 2017-02-28 09:00:54 · 220 阅读 · 0 评论 -
deque
队列(queue)是一种常用的数据结构,可以将队列看做是一种特殊的线性表,该结构遵循的先进先出原则。Java中,LinkedList实现了Queue接口,因为LinkedList进行插入、删除操作效率较高 相关常用方法: boolean offer(E e):将元素追加到队列末尾,若添加成功则返回true。 E poll():从队首删除并返回该元素。 E peek():返回队首元素,但是不删除 示原创 2017-01-11 09:57:37 · 271 阅读 · 0 评论 -
ApplicationContext
ApplicationContext 实用的Bean工厂ApplicationContextApplicationContext的中文意思是“应用前后关系”,它继承自BeanFactory接口,除了包含BeanFactory的所有功能之外,在国际化支持、资源访问(如URL和文件)、事件传播等方面进行了良好的支持,被推荐为Java EE应用之首选,可应用在Java APP与J原创 2016-12-29 21:28:11 · 164 阅读 · 0 评论 -
Simplify Path
题目:Given an absolute path for a file (Unix-style), simplify it.For example,path = "/home/", => "/home"path = "/a/./b/../../c/", => "/c"click to show corner cases.Corner Cases转载 2016-12-17 22:03:08 · 181 阅读 · 0 评论 -
map遍历与统计
遍历Map方法一(通过HashMap类实现统计单词出现次数)要求:通过命令行输入多个单词,单词之间用逗号分开,统计每个单词出现的次数,并把单词和其出现的次数分别打印出来,使用HashMap类实现。输入单词如下图:package michael.wlq;import java.util.HashMap;import java.原创 2016-12-22 17:09:04 · 676 阅读 · 0 评论 -
深入理解HashMap
Java 集合深入理解(6):HashMap 标签: javahashmap读完本文你将了解到:点击查看 Java 集合框架深入理解 系列 - - 乾杯什么是 HashMapHashMap 的特点HashMap 的 13 个成员变量HashMap 的初始容量和加载因子HashMap 的关键方法HashMap 的 4 个转载 2016-12-03 23:29:32 · 453 阅读 · 1 评论 -
深入理解Stack 栈
Java 集合深入理解(5):Stack 栈标签: java数据结构集合框架数据结构中的 栈数据结构中,栈是一种线性数据结构,遵从 LIFO(后进先出)的操作顺序,所有操作都是在顶部进行有点像羽毛球筒:栈通常有三种操作:push 入栈pop 栈顶元素出栈,并返回peek 获取栈顶元素,并不删除我们自定义一个原创 2016-12-03 23:25:49 · 717 阅读 · 0 评论 -
深入理解Vector
Java 集合深入理解(4):Vector标签: Java集合框架都说 Vector 是线程安全的 ArrayList,今天来根据源码看看是不是这么相似。什么是 VectorVector 和 ArrayList 一样,都是继承自 AbstractList。它是 Stack 的父类。英文的意思是 “矢量”。Vector 成员转载 2016-12-03 23:23:53 · 321 阅读 · 0 评论 -
深入理解ArrayList
Java 集合深入理解(1):ArrayList标签: java集合框架什么是 ArrayList ArrayList 是 Java 集合框架中 List接口 的一个实现类。可以说 ArrayList 是我们使用最多的 List 集合,它有以下特点:容量不固定,想放多少放多少(当然有最大阈值,但一般达不到)有序的(元素输出顺序与输入顺转载 2016-12-03 23:13:51 · 203 阅读 · 0 评论 -
集合深入理解LinkedList
Java 集合深入理解(3):LinkedList标签: java集合框架目录(?)[+]日常开发中,保存一组数据使用的最多的就是 ArrayList, 其次就是 LinkedList 了。我们知道 ArrayList 是以数组实现的,遍历时很快,但是插入、删除时都需要移动后面的元素,效率略差些。而Link转载 2016-12-03 23:19:37 · 240 阅读 · 0 评论 -
Java中Collections.sort()排序详解
第一种:Comparable:Comparable 是排序接口。若一个类实现了Comparable接口,就意味着“该类支持排序”。 即然实现Comparable接口的类支持排序,假设“有一个List列表(或数组),里面的元素是实现了Comparable接口的类”,则该List列表(或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序。此外原创 2017-02-28 09:18:46 · 660 阅读 · 0 评论