暂无个人介绍
原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 聊聊并发(四)深入分析ConcurrentHashMap 术语定义 术 语 英文 解释 哈希算法 hash algorithm 是一种将任意内容的输入转换成相同长度输出的加密方式,其输出被称为哈希值 哈希表 hash table 根据设定的哈希函数H(key)
为什么研究类加载全过程? 有助于连接JVM运行过程 更深入了解java动态性(解热部署,动态加载),提高程序的灵活性 类加载机制 JVM把class文件加载到内存,并对数据进行校验、解析和初始化,最终形成JVM可以直接使用的java类型的全过程。 加载 将class文件字节码内容加载到内存中;并将这些静态数据转换成方法区中的运行
增量计算模型 (一) 背景 Galaxy是阿里数据平台事业部,实时计算组自研的增量计算框架。今年双十一,阿里直播大屏就是Galaxy支持和保障的重要业务之一,相信大家可能看过双十一之后网上一些介绍性的文章了,比如 阿里研发实时计算平台 每秒运算量将超千万 ,不过这篇文章面向非技术人员,最后的比喻也是有点醉。还这篇比较新的 阿里巴巴实时数据公共层助力双11媒体直播 。
【本文转载自双11媒体大屏背后的数据技术与产品】 作者:罗金鹏(藏六),阿里巴巴数据技术与产品部的高级技术专家。 本次为大家分享《双11媒体大屏背后的数据技术与产品》。阿里巴巴从2009年开始双11产品大促,从最初5千万的产品成交额,到2016年的1207亿的产品成交额,可能逍遥子自己也想不到,居然一不小心把事情搞这么大。 在2014年,也就是IPO元年的时候,我们数
【本文转自深入研究Java类加载机制】 类加载是Java程序运行的第一步,研究类的加载有助于了解JVM执行过程,并指导开发者采取更有效的措施配合程序执行。 研究类加载机制的第二个目的是让程序能动态的控制类加载,比如热部署等,提高程序的灵活性和适应性。 一、简单过程 Java程序运行的场所是内存,当在命令行下执行: java HelloWorld 命令的时候,JV
【本文转载自java RMI原理详解】 定义 RMI(Remote Method Invocation)为远程方法调用,是允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法。 这两个虚拟机可以是运行在相同计算机上的不同进程中,也可以是运行在网络上的不同计算机中。 Java RMI:Java远程方法调用,即Java RMI(Java Remote M
【本文转载自ReentrantLock的lock-unlock流程详解】 最近一段时间在研究jdk里的concurrent包,分为了线程管理,锁操作以及原子操作三个部分。线程管理平时用得还算多,但是锁操作和原子操作基本就没用过,只是以前在大学的时候跑了几个例子玩玩。当看到ReentrantLock的时候,发现用法倒是和synchronized有点类似也很简单,但是内部原理比较复杂。网上查
【本文转载自Java 理论与实践: 非阻塞算法简介】Java™ 5.0 第一次让使用 Java 语言开发非阻塞算法成为可能,java.util.concurrent 包充分地利用了这个功能。非阻塞算法属于并发算法,它们可以安全地派生它们的线程,不通过锁定派生,而是通过低级的原子性的硬件原生形式 —— 例如比较和交换。非阻塞算法的设计与实现极为困难,但是它们能够提供更好的吞吐
本文转自Jason's Blog, 原文链接 http://www.jasongj.com/2015/03/10/KafkaColumn1 摘要 Kafka是由LinkedIn开发并开源的分布式消息系统,因其分布式及高吞吐率而被广泛使用,现已与Cloudera Hadoop,Apache Storm,Apache Spark集成。本文介绍了Kafka的创建背景,
【本文转自于Java异常处理终结篇——如何进行Java异常处理设计】 有一句这样话:一个衡量Java设计师水平和开发团队纪律性的好方法就是读读他们应用程序里的异常处理代码。 本文主要讨论开发Java程序时,如何设计异常处理的代码,如何时抛异常,捕获到了怎么处理,而不是讲异常处理的机制和原理。 在我自己研究Java异常处理之前,我查过很多资料,翻过很多书藉,试过很多搜索
散列计算就是计算元素应该放在数组的哪个元素里。准确的说是放到哪个链表里面。按照Java的规则,如果你要想将一个对象放入HashMap中,你的对象的类必须提供hashcode方法,返回一个整数值。比如String类就有如下方法: [java] view plaincopyprint? public int hashCode() {
【本文转载于MySQL索引原理及慢查询优化】 MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如“精通MySQL”、“SQL语句优化”、“了解数据库原理”等要求。我们知道一般的应用系统,读写比例在10:1左右,而且插入
【本文转载于Nginx的负载均衡 - 一致性哈希 (Consistent Hash)】 Nginx版本:1.9.1 我的博客:http://blog.csdn.net/zhangskd 算法介绍 当后端是缓存服务器时,经常使用一致性哈希算法来进行负载均衡。 使用一致性哈希的好处在于,增减集群的缓存服务器时,只有少量的缓存会失效,回源量较
【本文转载于HashMap多线程并发问题分析】 并发问题的症状 多线程put后可能导致get死循环 从前我们的Java代码因为一些原因使用了HashMap这个东西,但是当时的程序是单线程的,一切都没有问题。后来,我们的程序性能有问题,所以需要变成多线程的,于是,变成多线程后到了线上,发现程序经常占了100%的CPU,查看堆栈,你会发现程序都Hang在了HashMap
Maven 中央仓库地址: 1. http://www.sonatype.org/nexus/2. http://mvnrepository.com/ (本人推荐仓库) 3. http://repo1.maven.org/maven2
【本文转载于Dubbo架构设计详解】 Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。
【本文转载于缓存淘汰算法--LRU算法】 1. LRU 1.1. 原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。 1.2. 实现 最常见的实现是使用一个链表保存缓存数据,详细算法实现如下: 1. 新数据插入到链表头
【本文转载自快的打车架构实践】 快的打车从2013年年底到2014年下半年,系统访问量迅速膨胀,很多复杂的问题要在短时间内解决,且不能影响线上业务,这是比较大的挑战,本文将会阐述快的打车架构演变过程遇到的一些有代表性的问题和解决方案。 LBS的瓶颈和方案 先看看基本的系统模型,如图1所示。 图1 系统模型示意图 司机每隔几秒钟上报一次经纬度,存储在Mon
[转载声明] 转载时必须标注:本文来源于铁木箱子的博客http://www.mzone.cc[本文地址] 本文永久地址是:http://www.mzone.cc/article/321.html 这几天因为自己开发的一个网站在768M内存的机器上撑不起100多个用户的运行,因为每个用户启用功能后,系统将为每个用户分配8个左右的独立线程,我的这篇文章http://
本文整理自 ArchSummit微信大讲堂,点击上方关注微课堂分享动态,获取更多干货! 原文:秒杀业务架构优化之路 分享正文 一、秒杀业务为什么难做 im系统,例如qq或者微博,每个人都读自己的数据(好友列表、群列表、个人信息);微博系统,每个人读你关注的人的数据,一个人读多个人的数据;秒杀系统,库存只有一份,所有人会在集中的时间读和写这些数据,多
【本文转载自新浪微博千万级规模高性能、高并发的网络架构经验分享】 架构以及我理解中架构的本质 在开始谈我对架构本质的理解之前,先谈谈对今天技术沙龙主题的个人见解,千万级规模的网站感觉数量级是非常大的,对这个数量级我们战略上要重视它,战术上又要藐视它。 先举个例子感受一下千万级到底是什么数量级?现在很流行的优步(Uber),从媒体公布的信息看,它每天接单量平均在百万左右
使用c3p0连接池,设置如下: #是否检测连接的有效性 testConnectionOnCheckin=true #检测连接有效性的时间间隔(86400s=24h) idleConnectionTestPeriod=86400
【spring】关于location路径的设置 1、相对路径 可以通过classpath和classpath*设置、如: <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref
貌似是一个简单的问题(也许也真是简单的),但是却把曾经自认为弄清楚的我搞得莫名其妙。 char在Java中应该是16位即两个字节 byte在Java中应该是8位 char x = '编'; //这样应该占两个字节 但是 String str = "编"; byte[] bytes = str.getBytes(); //此时为什么要占用3个byte呢?(此时系统默认的encod
我们天天在说java堆java栈,究竟什么是java栈? 首先需要明确一个概念,那就是通常我们说的堆、栈与java堆、java栈并不是一个东西。java堆和java栈可能都是在我们通常所说的堆中划分出内存的。在java层面上,将这划分出的内存按其用途称为java堆、java栈。 《The Java Virtual Machine Specification Java SE 7
【本文转载于再谈select, iocp, epoll,kqueue及各种I/O复用机制】 首先,介绍几种常见的I/O模型及其区别,如下: blocking I/O nonblocking I/O I/O multiplexing (select and poll) signal driven I/O (SIGIO) asynchronou
【本文转载于性能分析工具之-- Eclipse Memory Analyzer tool(MAT)(一)】 前言 在平时工作过程中,有时会遇到OutOfMemoryError,我们知道遇到Error一般表明程序存在着严重问题,可能是灾难性的。所以找出是什么原因造成OutOfMemoryError非常重要。现在向大家引荐Eclipse Memory Analyzer
【本文转载于MAT Memory Analyzer Tool 插件安装(图解)】 前段时间做了一个项目,Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 出现这个错误,所以需要查找原因,所以就用到这个工具,安装比较麻烦,贴出来和大家共享一下: 第一步:下载Eclipse MAT
【本文转载于使用VisualVM查看Java Heap Dump】 浏览Heap Dump 可以使用VisualVM浏览heap dump文件的内容,从而快速查看在堆中分配的对象。Heap dumps在主窗口的heap dump子标签页中显示。你可以打开保存在本地的heap dump文件(.hprof)或者使用VisualVM捕获正在运行的程序的heap dumps。
【本文转载于Java服务器热部署的实现原理】 今天发现早年在大象笔记中写的一篇笔记,之前放在ijavaboy上的,现在它已经访问不了了。前几天又有同事在讨论这个问题。这里拿来分享一下。 在web应用开发或者游戏服务器开发的过程中,我们时时刻刻都在使用热部署。热部署的目的很简单,就是为了节省应用开发和发布的时间。比如,我们在使用Tomcat或者Jboss等应用
【本文转载于深入JVM锁机制2-Lock】 前文(深入JVM锁机制-synchronized)分析了JVM中的synchronized实现,本文继续分析JVM中的另一种锁Lock的实现。与synchronized不同的是,Lock完全用Java写成,在java这个层面是无关JVM实现的。 在java.util.concurrent.locks包中有很多Lock的实现类,常用
【本文转载于深入JVM锁机制1-synchronized】 目前在Java中存在两种锁机制:synchronized和Lock,Lock接口及其实现类是JDK5增加的内容,其作者是大名鼎鼎的并发专家Doug Lea。本文并不比较synchronized与Lock孰优孰劣,只是介绍二者的实现原理。 数据同步需要依赖锁,那锁的同步又依赖谁?synchronized给出的答
【原文地址】 The Java memory model specifies how the Java virtual machine works with the computer's memory (RAM). The Java virtual machine is a model of a whole computer so this model naturally include
【本文转载自JVM调优总结】 调优总结 年轻代大小选择 响应时间优先的应用:尽可能设大,直到接近系统的最低相应时间限制(根据实际情况选择)。在此种情况下,年轻代收集发生的频率也是最小的。同时,减少到达年老代的对象。 吞吐量优先的应用:尽可能的设置大,可能到达Gbit的程度。因为对响应时间没有要求,垃圾收集可以并行进行,一般适合8CPU以上应用。 年老代大小选择
【本文转自聊聊并发(十)生产者消费者模式】 在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。 为什么要使用生产者和消费者模式 在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处
应用Spring典型场景:接口+实现,初始化时自动注入。 应用transaction注解方法的典型场景:接口+实现,在实现整个类上加注解或一个特定方法上加注解。 运行时出现这样的错误: Caused by: java.lang.IllegalArgumentException: Can not set xxxxxx field yyyyyy to com.sun.pr
apache kafka中国社区QQ群:162272557 1.topic注册信息 /brokers/topics/[topic] : 存储某个topic的partitions所有分配信息 Schema: { "version": "版本编号目前固定为数字1", "partitions": {
【本文转载自kafka入门:简介、使用场景、设计原理、主要配置及集群搭建】 问题导读: 1.zookeeper在kafka的作用是什么? 2.kafka中几乎不允许对消息进行“随机读写”的原因是什么? 3.kafka集群consumer和producer状态信息是如何保存的? 4.partitions设计的目的的根本原因是什么?
首先是要加入下面两个包 hibernate-validator-4.1.0.Final.jar validation-api-1.0.0.GA.jar 如果在验证不通过的时候进行了添加、更新或删除操作的时候,则会抛出javax.validation.ConstraintViolationException异常 下面是测试用的类 Model
【本文转载于Spring-MVC开发之全局异常捕获全面解读】 异常,异常 我们一定要捕获一切该死的异常,宁可错杀一千也不能放过一个! 产品上线后的异常更要命,一定要屏蔽错误内容,以免暴露敏感信息! 在用Spring MVC开发WEB应用时捕获全局异常的方法基本有两种, WEB.XML,就是指定error-code和page到指定地址,这也是最
[java] view plaincopy //List-->数组 List<String> list = new ArrayList<String>(); list.add("tom"); list.add("Jerval"); list.add("Wei
【本文转载于Zookeeper Api(java)入门与应用】 如何使用 Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储数据的,它的作用主要是用来维护和监控你存储的数据的状态变化。通过监控这些数据状态的变化,从而可以达到基于数
用maven 工程搭建项目,在搭建好之后,运行时却抛出了这样的错误: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener java.lang.ClassNotFoundException: org.springframework.web
1、开启eclipse,右键new——》other,如下图找到maven project 2、选择maven project,显示创建maven项目的窗口,此次不勾选Create a simple project,直接next,如图所示: 3、在Filter中搜索webapp,选择如图所示,并next: 4、输入maven项
【本文转载于Eclipse+Maven创建webapp项目<一>】 1、开启eclipse,右键new——》other,如下图找到maven project 2、选择maven project,显示创建maven项目的窗口,勾选如图所示,Create a simple project 3、输入maven项目的基本信息,如下图所示:
在程序中每一次使用new ClassPathXmlApplicationContext时都会重新装载配置文件并实例化上下文bean。此时如果某些线程类也配置在该文件中,那么会造成做相同工作的线程被启动多次(包括web容器初始化时启动的以及new ClasspathXmlApplicationContext时启动的线程)。为了避免这种情况就需要用到ApplicationContextAw
【本文转载于 线程之从线程返回信息 习惯了传统单线程过程式模型的程序员在转向多线程环境时,最难掌握的一点就是如何从线程返回信息。我们再拿前一blog中的例子为例,不再简单地显示SHA-256摘要,摘要线程需要把摘要返回给执行主线程。大多数人的第一个反应就是把结果存储在一个字段中,再提供一个获取方法: ? 1 2 3 4 5
在进行多线程编程中,比较重要也是比较困难的一个操作就是如何获取线程中的信息。大多数人会采取比较常见的一种方法就是将线程中要返回的结果存储在一个字段中,然后再提供一个获取方法将这个字段的内容返回给该方法的调用者。如以下的ReturnThreadInfo类:package threadtest1; public class ReturnThreadInfo extends Thread {
【本文转载于 Spring 实现数据库读写分离】 现在大型的电子商务系统,在数据库层面大都采用读写分离技术,就是一个Master数据库,多个Slave数据库。Master库负责数据更新和实时数据查询,Slave库当然负责非实时数据查询。因为在实际的应用中,数据库都是读多写少(读取数据的频率高,更新数据的频率相对较少),而读取数据通常耗时比较长,占用数据库服务器的CPU较多,从而影
读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。 为什么要分库、分表、读写分? 单表的数据量限制,当单表数据量到一定条数之后数据库性能会显著下降。数据多了之后,对数据库的读、写就会很多。分库减少单