写在前面上一篇文章共享资源那么多,如何用一把锁保护多个资源?文章我们谈到了银行转账经典案例,其中有两个问题:单纯的用synchronized方法起不到保护作用(不能保护target)用Account.class锁方案,锁的粒度又过大,导致涉及到账户的所有操作(取款,转账,修改密码等)都会变成串行操作如何解决这两个问题呢?咱们先换好衣服穿越回到过去寻找一下钱庄,一起透过现象看本质,dengdengd
分类:
其他好文 时间:
2020-08-02 10:24:49
阅读次数:
93
写在前面上一篇文章共享资源那么多,如何用一把锁保护多个资源?文章我们谈到了银行转账经典案例,其中有两个问题:单纯的用synchronized方法起不到保护作用(不能保护target)用Account.class锁方案,锁的粒度又过大,导致涉及到账户的所有操作(取款,转账,修改密码等)都会变成串行操作如何解决这两个问题呢?咱们先换好衣服穿越回到过去寻找一下钱庄,一起透过现象看本质,dengdengd
分类:
其他好文 时间:
2020-08-02 10:24:28
阅读次数:
91
写在前面Java后端程序员应该会遇到读取Excel信息到DB等相关需求,脑海中可能突然间想起ApachePOI这个技术解决方案,但是当Excel的数据量非常大的时候,你也许发现,POI是将整个Excel的内容全部读出来放入到内存中,所以内存消耗非常严重,如果同时进行包含大数据量的Excel读操作,很容易造成内存溢出问题但EasyExcel的出现很好的解决了POI相关问题,原本一个3M的Excel用
分类:
其他好文 时间:
2020-08-02 10:24:09
阅读次数:
95
写在前面上一篇文章原子性问题的宏观理解带领大家了解了锁和资源的模型,有了这篇文章的铺垫,相信理解这一篇文章就非常轻松了当我们要保护单个资源并对其进行修改其实很简单,只需按照下图分三步走创建受保护资源R的锁加锁进入临界区解锁走出临界区上图的关键是「R1的锁保护R1」的指向关系是否正确如果都是保护单个资源这样简单,程序猿的世界该有多美好,可惜并不是,通常我们需要保护多个资源保护多个资源保护多个没有关系
分类:
其他好文 时间:
2020-08-02 10:23:49
阅读次数:
97
这是一个人看看到就心慌的现实消息,壮丽70年,奋斗新时代,与祖国同庆之后,我们需要回归正轨了(这句话貌似无比的刺耳),祖国会有无数个70年,我们却只有一个,所以把握当下,提前收拾好心情,调整好状态并发编程是一个漫长的系列,所以在假期的最后一天,将过往的文章罗列在此处,带领大家一起做个回忆,以便大家节后更好的进入并发编程的节奏,文章内容都很好记忆,大家也不用有什么压力,当个故事看就好了:这里整理了手
分类:
其他好文 时间:
2020-08-02 10:23:32
阅读次数:
94
上一篇文章可见性有序性,Happens-before来搞定,解决了并发三大问题中的两个,今天我们就聊聊如何解决原子性问题原子性问题的源头就是线程切换,但在多核CPU的大背景下,不允许线程切换是不可能的,正所谓「魔高一尺,道高一丈」,新规矩来了:互斥:同一时刻只有一个线程执行实际上,上面这句话的意思是:对共享变量的修改是互斥的,也就是说线程A修改共享变量时其他线程不能修改,这就不存在操作被打断的问题
分类:
其他好文 时间:
2020-08-02 10:22:55
阅读次数:
93
写在前面上一篇文章并发Bug之源有三,请睁大眼睛看清它们谈到了可见性/原子性/有序性三个问题,这些问题通常违背我们的直觉和思考模式,也就导致了很多并发Bug为了解决CPU,内存,IO的短板,增加了缓存,但这导致了可见性问题编译器/处理器擅自优化(Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行),导致有序性问题初衷是好
分类:
移动开发 时间:
2020-08-02 10:22:41
阅读次数:
107
写在前面生活中你一定听说过——能者多劳作为Java程序员,你一定听过——这个功能请求慢,能加一层缓存或优化一下SQL吗?看过中国古代神话故事的也一定听过——天上一天,地上一年一切设计来源于生活,上一章学并发编程,透彻理解这三个核心是关键中有讲过,作为"资本家",你要尽可能的榨取CPU,内存与IO的剩余价值,但三者完成任务的速度相差很大,CPU>内存>IO分,CPU是
分类:
其他好文 时间:
2020-08-02 10:22:21
阅读次数:
99
关于JavaString,这是面试的基础,但是还有很多童鞋不能说清楚,所以本文将简单而又透彻的说明一下那个让你迷惑的String在Java中,我们有两种方式创建一个字符串Stringx="abc";Stringy=newString("abc");你常见也常写第一种,很少见第二种,但面试还总问这类问题,双引号和构造器两种形式创建字符串到底有什么差别呢?先来看例子例子例子1Stringa="abcd
分类:
其他好文 时间:
2020-08-02 10:22:04
阅读次数:
84
写在前面上一篇文章这次走进并发的世界,请不要错过给大家带了并发编程的开胃菜,接下来我们逐步上正餐,在吃正餐之前,我还要引用那首诗词:「横看成岭侧成峰,远近高低各不同」,远看看轮廓,近看看细节,不断切换思维或视角来学习远看并发,并发编程可以抽象成三个核心问题:分工、同步/协作、互斥如果你已经工作了,那么你一定听说过或者正在应用敏捷开发模式来交付日常的工作任务,我们就用你熟悉的流程来解释这三个核心问题
分类:
其他好文 时间:
2020-08-02 10:21:47
阅读次数:
101
写在前面Java有进阶,其名为并发,并发知识之大,一口吃不下。那好,请您多吃几口,又没说一顿吃完,细嚼慢咽才有味.所有Java书籍都将并发编程放在其高级/进阶篇章中,其重要性不言而喻,学好并发也是自身走入高级行列的必备素质之一并发/并行,进程/线程这些概念总是显得过于抽象,因为这是与操作系统沟通用到的词汇,就像我们习惯了使用十进制算法,二进制和16进制就需要思维的切换;生活中,我们彼此总是不能互相
分类:
其他好文 时间:
2020-08-02 10:21:32
阅读次数:
98
生产上新入网的服务器都需要安装prometheus的监控客户端软件,主要步骤有:新建监控用户、拷贝客户端软件、拉起客户端进程、开机自启动。本文记录了使用ansible的role方式批量快速的安装该客户端软件。
分类:
其他好文 时间:
2020-08-02 10:21:20
阅读次数:
93
「欲渡黄河冰塞川,将登太行雪满天」,无论生活还是计算机世界难免发生异常,上一篇文章RESTfulAPI返回统一JSON数据格式说明了统一返回的处理,这是请求一切正常的情形;这篇文章将说明如何统一处理异常,以及其背后的实现原理,老套路,先实现,后说明原理,有了上一篇文章的铺底,相信,理解这篇文章就驾轻就熟了实现新建业务异常新建BusinessException.class类表示业务异常,注意这是一个
分类:
其他好文 时间:
2020-08-02 10:21:00
阅读次数:
95
关于Spring的全局处理,我有两方面要说:统一数据返回格式统一异常处理为了将两个问题说明清楚,将分两个章节分别说明,本章主要说第一点有童鞋说,我们项目都做了这种处理,就是在每个API都单独工具类将返回值进行封装,但这种不够优雅;我想写最少的代码完成这件事,也许有童鞋说,加几个注解就解决问题了,说的没错,但这篇文章主要是为了说明为什么加了几个注解就解决问题了,目的是希望大家知其所以然。为了更好的说
分类:
编程语言 时间:
2020-08-02 10:20:38
阅读次数:
133
本篇文章主要是讲讲如何利用搜索引擎能更好的做信息的收集
分类:
Web程序 时间:
2020-08-02 10:20:22
阅读次数:
169
写在前面在一款应用的整个生命周期,我们都会谈及该应用的数据安全问题。用户的合法性与数据的可见性是数据安全中非常重要的一部分。但是,一方面,不同的应用对于数据的合法性和可见性要求的维度与粒度都有所区别;另一方面,以当前微服务、多服务的架构方式,如何共享Session,如何缓存认证和授权数据应对高并发访问都迫切需要我们解决。Shiro的出现让我们可以快速和简单的应对我们应用的数据安全问题Shiro介绍
分类:
编程语言 时间:
2020-08-02 10:20:00
阅读次数:
101