随笔记
文章平均质量分 91
Andy.World
人无远虑 - 必有近忧
展开
-
Java中Volatile关键字详解
阅读目录一、基本概念二、Volatile原理一、基本概念先补充一下概念:Java 内存模型中的可见性、原子性和有序性。可见性: 可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了确保多个线程之间对内存写入操作的可见性,必须使用同步机转载 2017-09-06 23:56:53 · 209 阅读 · 0 评论 -
秒杀多线程第六篇 经典线程同步 事件Event
版权声明:本文为博主原创文章,未经博主允许不得转载。阅读本篇之前推荐阅读以下姊妹篇:《秒杀多线程第四篇 一个经典的多线程同步问题》《秒杀多线程第五篇 经典线程同步关键段CS》 上一篇中使用关键段来解决经典的多线程同步互斥问题,由于关键段的“线程所有权”特性所以关键段只能用于线程的互斥而不能用于同步。本篇介绍用事件Event来尝试解决这个线程同步问题。首先介绍下如何使转载 2017-04-29 22:15:11 · 221 阅读 · 0 评论 -
秒杀多线程第五篇 经典线程同步 关键段CS
版权声明:本文为博主原创文章,未经博主允许不得转载。上一篇《秒杀多线程第四篇 一个经典的多线程同步问题》提出了一个经典的多线程同步互斥问题,本篇将用关键段CRITICAL_SECTION来尝试解决这个问题。本文首先介绍下如何使用关键段,然后再深层次的分析下关键段的实现机制与原理。关键段CRITICAL_SECTION一共就四个函数,使用很是方便。下面是这四个函数的原型和使用说明转载 2017-04-29 22:13:27 · 228 阅读 · 0 评论 -
秒杀多线程第四篇 一个经典的多线程同步问题
版权声明:本文为博主原创文章,未经博主允许不得转载。上一篇《秒杀多线程第三篇原子操作 Interlocked系列函数》中介绍了原子操作在多进程中的作用,现在来个复杂点的。这个问题涉及到线程的同步和互斥,是一道非常有代表性的多线程同步问题,如果能将这个问题搞清楚,那么对多线程同步也就打下了良好的基础。 程序描述:主线程启动10个子线程并将表示子线程序号的变量地址作为参数传递给转载 2017-04-29 22:10:23 · 234 阅读 · 0 评论 -
秒杀多线程第三篇 原子操作 Interlocked系列函数
版权声明:本文为博主原创文章,未经博主允许不得转载。上一篇《多线程第一次亲密接触 CreateThread与_beginthreadex本质区别》中讲到一个多线程报数功能。为了描述方便和代码简洁起见,我们可以只输出最后的报数结果来观察程序是否运行出错。这也非常类似于统计一个网站每天有多少用户登录,每个用户登录用一个线程模拟,线程运行时会将一个表示计数的变量递增。程序在最后输出计数的值表转载 2017-04-29 22:08:23 · 190 阅读 · 0 评论 -
秒杀多线程第一篇 多线程笔试面试题汇总
版权声明:本文为博主原创文章,未经博主允许不得转载。目录(?)[-]第一篇 多线程笔试面试题汇总一概念性问答题二选择题三综合题 系列前言 本系列是本人参加微软亚洲研究院,腾讯研究院,迅雷面试时整理的,另外也加入一些其它IT公司如百度,阿里巴巴的笔试面试题目,因此具有很强的针对性。系列中不但会详细讲解多线程同步互斥的各转载 2017-04-29 22:00:28 · 636 阅读 · 0 评论 -
信号量与互斥锁
信号量与普通整型变量的区别:①信号量(semaphore)是非负整型变量,除了初始化之外,它只能通过两个标准原子操作:wait(semap) , signal(semap) ; 来进行访问;②操作也被成为PV原语(P来源于Dutch proberen"测试",V来源于Dutch verhogen"增加"),而普通整型变量则可以在任何语句块中被访问; 信号量与互斥锁之间的转载 2017-04-29 21:48:47 · 252 阅读 · 0 评论 -
进线程, 进线程句柄, 进线程ID, 句柄与ID间转换, 伪句柄, 伪句柄转为句柄
线程 与 线程句柄(refer to: http://blog.csdn.net/titan_koa/article/details/2439027)1. 线程和线程句柄(Handle)不是一个东西,线程是在cpu上运行的.....(说不清楚了),线程句柄是一个内核对象。我们可以通过句柄来操作线程,但是线程的生命周期和线程句柄的生命周期不一样的。线程的生命周期就是线程函数从开始执行到r转载 2017-04-29 19:09:39 · 702 阅读 · 0 评论 -
线程ID 与 线程句柄 区别 (转载)
以下几点是一些总结:●CreateThread() API 用于创建线程。 API 返回同时线程句柄和线程标识符 (ID)。 线程句柄有完全访问权创建线程对象。 运行线程时线程 ID 唯一标识线程在系统级别。●ID是在Windows系统范围内唯一标示Thread的。 ●Handle是用来操作Thread的,可以有多个,每个HANDLE可以有不同的操作权限,在不同进程OpenTh转载 2017-04-29 19:07:54 · 392 阅读 · 0 评论 -
Java并发包中Lock的实现原理
Java并发包中Lock的实现原理1. Lock 的简介及使用 Lock是java 1.5中引入的线程同步工具,它主要用于多线程下共享资源的控制。本质上Lock仅仅是一个接口(位于源码包中的java\util\concurrent\locks中),它包含以下方法//尝试获取锁,获取成功则返回,否则阻塞当前线程void lock(); //尝试获取锁,线程在成功获...转载 2017-04-29 18:55:30 · 481 阅读 · 0 评论 -
Minor GC、Major GC和Full GC之间的区别
本文由 ImportNew - 光光头去打酱油 翻译自 javacodegeeks。欢迎加入翻译小组。转载请见文末要求。在 Plumbr 从事 GC 暂停检测相关功能的工作时,我被迫用自己的方式,通过大量文章、书籍和演讲来介绍我所做的工作。在整个过程中,经常对 Minor、Major、和 Full GC 事件的使用感到困惑。这也是我写这篇博客的原因,我希望能清楚地解释这其中的一些疑惑。转载 2017-04-29 18:53:24 · 336 阅读 · 0 评论 -
关于SimpleDateFormat安全的时间格式化线程安全问题
想必大家对SimpleDateFormat并不陌生。SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出,但如果使用不小心会导致非常微妙和难以调试的问题,因为 DateFormat 和 SimpleDateFormat 类不都是线程安全的,在多线程环境下调用 format() 和 parse() 方法应该使用同步代码来避免问题。下面我们通转载 2017-06-29 01:20:56 · 231 阅读 · 0 评论 -
面试总结——Java高级工程师(三)
面试前面也总结了一和二, 这第三篇可能更偏向于是内心的独白篇和面试技巧总结吧.....一、独白 之前也面试别人,现在轮到自己找工作,怎么说呢,每个面试官的看法不一样,面试的方式就不一样,比如我面试别人我喜欢问项目中他用到了那些,然后针对用到的技术去问一些问题,或者说对于某些场景的一些技术实现方案是我特别喜欢问的,比如当你的接口服务数据被人截包了,你如何防止数据恶转载 2017-06-29 01:26:47 · 437 阅读 · 0 评论 -
深入剖析ConcurrentHashMap(2)
经过之前的铺垫,现在可以进入正题了。我们关注的操作有:get,put,remove 这3个操作。对于哈希表,Java中采用链表的方式来解决hash冲突的。一个HashMap的数据结构看起来类似下图:实现了同步的HashTable也是这样的结构,它的同步使用锁来保证的,并且所有同步操作使用的是同一个锁对象。这样若有n个线程同时在get时,这n个线程要串行的等待来获取锁。转载 2017-09-14 02:46:02 · 311 阅读 · 0 评论 -
Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
转载请注明出处:http://blog.csdn.net/anxpp/article/details/51512200,谢谢! 本文会从传统的BIO到NIO再到AIO自浅至深介绍,并附上完整的代码讲解。 下面代码中会使用这样一个例子:客户端发送一段算式的字符串到服务器,服务器计算后返回结果到客户端。 代码的所有说明,都直接作为注释,嵌入到代码中,看代码时就转载 2017-09-14 01:56:34 · 255 阅读 · 0 评论 -
分布式锁原理及实现方式
本文转自:http://www.hollischuang.com/archives/1716 目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance转载 2017-07-24 23:44:58 · 471 阅读 · 0 评论 -
分布式锁的基本原理
基本概念:分布式锁,是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,在这种情况下,便需要使用到分布式锁。举个例子:1.假设有一个进程A,每小时准点给用户发送一条短信"Hello world",为了高可转载 2017-07-24 23:36:55 · 287 阅读 · 0 评论 -
从宜人贷系统架构看互联网高并发对金融系统架构的挑战
原文:http://www.p2pquan.com/article-740-1.html一、简介随着互联网金融的持续火热,越来越多的银行纷纷发布了各自的互联网金融产品。但是互联网产品“高并发、大数据量”的特点却对于银行传统的核心系统架构带来了新的挑战。 1、互联网的核心技术特征 当前互联网的核心技术特征主要可以概括为:分布式,易扩展,大量低端设备,底层开源软件。分布式结转载 2017-07-07 14:56:52 · 354 阅读 · 0 评论 -
JVM(8):JVM知识点总览-高级Java工程师面试必备
在江湖中要练就绝世武功必须内外兼备,精妙的招式和深厚的内功,武功的基础是内功。对于武功低(就像江南七怪)的人,招式更重要,因为他们不能靠内功直接去伤人,只能靠招式,利刃上优势来取胜了,但是练到高手之后,内功就更主要了。一个内功低的人招式在奇妙也打不过一个内功高的人。比如,你剑法再厉害,一剑刺过来,别人一掌打断你的剑,你还怎么使剑法,你一掌打到一个武功高的人身上,那人没什么事,却把你震伤了,你还怎么转载 2017-07-03 18:00:44 · 215 阅读 · 0 评论 -
Java并发编程:volatile关键字解析
原文出处: 海子volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volat转载 2017-07-11 22:05:42 · 158 阅读 · 0 评论 -
JVM内幕:Java虚拟机详解
这篇文章解释了Java 虚拟机(JVM)的内部架构。下图显示了遵守 Java SE 7 规范的典型的 JVM 核心内部组件。 上图显示的组件分两个章节解释。第一章讨论针对每个线程创建的组件,第二章节讨论了线程无关组件。线程JVM 系统线程每个线程相关的程序计数器栈本地栈栈限制栈帧局部变量数组操作数栈动态链接线程共享堆内存管理非堆内存即时编译方转载 2017-07-01 17:54:57 · 234 阅读 · 0 评论 -
Java高效并发之乐观锁悲观锁、(互斥同步、非互斥同步)
乐观锁和悲观锁首先我们理解下两种不同思路的锁,乐观锁和悲观锁。这两种锁机制,是在多用户环境并发控制的两种所机制。下面看百度百科对乐观锁和悲观锁两种锁机制的定义:乐观锁( Optimistic Locking ) 相对悲观锁而言,乐观锁机制采取了更加宽松的加锁机制。悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性。但随之而来的就是数据库性能的大量开销,转载 2017-07-01 15:53:26 · 417 阅读 · 0 评论 -
Java中ConcurrentHashMap学习
ConcurrentHashMap融合了hashtable和hashmap二者的优势。hashtable是做了同步的,hashmap未考虑同步。所以hashmap在单线程情况下效率较高。hashtable在的多线程情况下,同步操作能保证程序执行的正确性。但是hashtable每次同步执行的时候都要锁住整个结构。看下图:图左侧清晰的标注出来,lock每次都要锁住整个结构。Conc转载 2017-06-29 01:37:18 · 231 阅读 · 0 评论 -
三道java高级工程师面试题
1.junit 下测试多线程注意事项。2.高并发 ,处理时间短,选用哪种线程池, 并发低,处理时间长,选用哪种线程池, 高并发,处理时间长,如何处理。3.100亿个数字,如何最快找出其中10000个最大的数。详细查看地址:http://bbs.csdn.net/topics/392086319转载 2017-02-15 17:29:10 · 297 阅读 · 0 评论 -
5亿整数的大文件,怎么排?
本文目录 [-点此收起]问题内部排序3路快排:归并排序:sort命令来跑位图法外部排序1.分2.合问题给你1个文件bigdata,大小4663M,5亿个数,文件中的数据随机,如下一行一个整数:619630235576816121580203934520950061746773793431220163717123转载 2017-02-15 17:13:41 · 229 阅读 · 0 评论 -
Spring 实现数据库读写分离
现在大型的电子商务系统,在数据库层面大都采用读写分离技术,就是一个Master数据库,多个Slave数据库。Master库负责数据更新和实时数据查询,Slave库当然负责非实时数据查询。因为在实际的应用中,数据库都是读多写少(读取数据的频率高,更新数据的频率相对较少),而读取数据通常耗时比较长,占用数据库服务器的CPU较多,从而影响用户体验。我们通常的做法就是把查询从主库中抽取出来,采用多个从库,转载 2017-02-15 16:16:39 · 189 阅读 · 0 评论 -
前端交易型系统设计原则
前端交易型系统设计原则原创 2016-07-18 张开涛 开涛的博客从毕业到现在已经快7年开发经验了,做过基础用户系统、积分商城、偷菜游戏、论坛、博客等等;也一个人全栈开发在线视频网站(http://sishuok.com/),也开发过几万、几十万、几千万、几个亿不同量级的系统,踩过不少坑,也学到许多经验。 设计了一些系统,也有了一些自己的观点,个人认为设计系统转载 2017-02-11 17:02:02 · 372 阅读 · 0 评论 -
构建亿级前端读服务
构建亿级前端读服务2015-11-23 张开涛 开涛的博客从入职京东到现在,做读服务已经一年多的时间了,经历了各种亿级到百亿级的读服务;这段时间也进行了一些新的读服务架构尝试,从架构到代码的编写,各个环节都进行了反复尝试,压测并进行调优,希望得到一个自己满意的读服务架构。一些设计原则无状态数据闭环缓存银弹并转载 2017-02-11 17:01:14 · 216 阅读 · 0 评论 -
聊聊高并发系统之队列术
聊聊高并发系统之队列术原创 2016-08-30 张开涛 开涛的博客队列在数据结构中是一种线性表,从一端插入数据,然后从另一端删除数据。本文目的不是讲解各种队列算法,而是在应用层面讲述使用队列能解决哪些场景问题。 在我开发过的系统中,不是所有的业务都必须实时处理、不是所有的请求都必须实时反馈结果给用户、不是所有的请求/处理都必须100%处理成功、不知道谁转载 2017-02-11 16:57:25 · 232 阅读 · 0 评论 -
商品详情页系统的Servlet3异步化实践
商品详情页系统的Servlet3异步化实践2015-11-25 张开涛 开涛的博客在京东工作的这一年多时间里,我在整个商品详情页系统(后端数据源)及商品详情页统一服务系统(页面中异步加载的很多服务,如库存服务、图书相关服务、延保服务等)中使用了Servlet3请求异步化模型,总结了Servlet3请求异步化的一些经验和想法跟大家分享和交流。我将从如下几点阐述转载 2017-02-11 16:56:16 · 217 阅读 · 0 评论 -
聊聊java高并发系统之异步非阻塞
聊聊java高并发系统之异步非阻塞原创 2016-08-11 孙伟 开涛的博客作者:孙伟,目前负责京东商品详情页统一服务系统,写过java,写过ngx_lua,还写过storm等,喜欢学习研究新事物。在做电商系统时,流量入口如首页、活动页、商品详情页等系统承载了网站的大部分流量,而这些系统的主要职责包括聚合数据拼装模板、热点统计、缓存、下游功能降级开关、转载 2017-02-11 16:54:44 · 698 阅读 · 0 评论 -
应用多级缓存模式支撑海量读服务
应用多级缓存模式支撑海量读服务2016-03-21 张开涛 开涛的博客缓存技术是一个老生常谈的问题,但是它也是解决性能问题的利器,一把瑞士军刀;而且在各种面试过程中或多或少会被问及一些缓存相关的问题,如缓存算法、热点数据与更新缓存、更新缓存与原子性、缓存崩溃与快速恢复等各种与缓存相关的问题。而这些问题中有些问题又是与场景相关,因此如何合理应用缓存来解决问题也是一个选择题。本文所转载 2017-02-11 16:53:56 · 300 阅读 · 0 评论 -
聊聊高并发系统之HTTP缓存
聊聊高并发系统之HTTP缓存原创 2016-08-22 张开涛 开涛的博客简介最近遇到很多人来咨询我关于浏览器缓存的一些问题,而这些问题都是类似的,因此总结本文来解答以后遇到类似问题的朋友。因本文主要以浏览器缓存场景介绍,所以非浏览器场景下的一些用法本文不会介绍,而且本文以chrome为测试浏览器。浏览器缓存是指当我们使用浏览转载 2017-02-11 16:53:03 · 366 阅读 · 0 评论 -
聊聊高并发系统之降级特技
聊聊高并发系统之降级特技2016-06-22 张开涛 开涛的博客在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。之前已经有一些文章介绍过缓存和限流了。本文将详细聊聊降级。当访问量剧增、服务出现问题(如响应时间慢或不响应)或非核心服务影响到核心流程的性能时,仍然需要保证服务还是可用的,即使是有损服务。系统可以根据一些关键数据进行自动降级,也可以配置开关实现人工降级。本转载 2017-02-11 16:52:07 · 1367 阅读 · 0 评论 -
聊聊高并发系统之限流特技-2
聊聊高并发系统之限流特技-22016-06-14 张开涛 开涛的博客上一篇《聊聊高并发系统限流特技-1》讲了限流算法、应用级限流、分布式限流;本篇将介绍接入层限流实现。接入层限流接入层通常指请求流量的入口,该层的主要目的有:负载均衡、非法请求过滤、请求聚合、缓存、降级、限流、A/B测试、服务质量监控等等,可以参考笔者写的《使用Nginx+Lua(Op转载 2017-02-11 16:50:59 · 1057 阅读 · 0 评论 -
聊聊高并发系统之限流特技-1
聊聊高并发系统之限流特技-12016-06-12 张开涛 开涛的博客在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。缓存的目的是提升系统访问速度和增大系统能处理的容量,可谓是抗高并发流量的银弹;而降级是当服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉,待高峰或者问题解决后再打开;而有些场景并不能用缓存和降级来解决,比如稀缺资源(秒杀、抢购)、写服务(如评论、下单转载 2017-02-11 16:49:27 · 356 阅读 · 0 评论 -
构建需求响应式亿级商品详情页
构建需求响应式亿级商品详情页原创 2016-08-19 张开涛 开涛的博客原文于2015-08-14 17:08发表于http://jinnianshilongnian.iteye.com/blog/2235572。商品详情页是什么商品详情页是展示商品详细信息的一个页面,承载在网站的大部分流量和订单的入口。京东商城目前有通用版、全球购、闪购、易车、惠转载 2017-02-11 17:03:21 · 222 阅读 · 0 评论 -
京东商品详情页服务闭环实践
京东商品详情页服务闭环实践2015-11-26 张开涛 开涛的博客京东商品详情页技术方案在之前《构建需求响应式亿级商品详情页》这篇文章已经为大家揭秘了,接下来为大家揭秘下双十一抗下几十亿流量的商品详情页统一服务架构,这次双十一整个商品详情页没有出现不服务的情况,服务非常稳定。统一服务提供了:促销和广告词合并服务、库存状态/配送至服务、延保服务、试用服务、推荐服务、图书相关服务、转载 2017-02-11 17:04:46 · 686 阅读 · 0 评论 -
登录工程:现代 Web 应用的典型身份验证需求
朋友就职于某大型互联网公司。前不久,在闲聊间我问他日常工作的内容,他说他所在部门只负责一件事,即用户与登录。而他的具体工作则是为各个业务子网站提供友好的登录部件(Widget),从而统一整个网站群的登录体验,同时也能令业务开发者不用花费额外的精力去关注用户鉴权。这很有趣。可以看出,在一个现代Web应用中,围绕“登录”这一需求,俨然已经衍生出了一个新的工程。不管是我们面临的需转载 2017-02-15 13:14:50 · 950 阅读 · 0 评论 -
JVM调优总结(十)-调优方法
JVM调优工具Jconsole,jProfile,VisualVMJconsole : jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用。对垃圾回收算法有很详细的跟踪。详细说明参考这里 JProfiler:商业软件,需要付费。功能强大。详细说明参考这里 VisualVM:JDK自带,功能强大,与JProfiler类似。推荐。转载 2017-02-22 17:26:49 · 171 阅读 · 0 评论