JAVA ’ 目录归档

基于redis的分布式锁

1 介绍

这篇博文讲介绍如何一步步构建一个基于Redis的分布式锁。会从最原始的版本开始,然后根据问题进行调整,最后完成一个较为合理的分布式锁。

本篇文章会将分布式锁的实现分为两部分,一个是单机环境,另一个是集群环境下的Redis锁实现。在介绍分布式锁的实现之前,先来了解下分布式锁的一些信息。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 基于redis的分布式锁


猫狗队列的再解

也是头一次在其他的这类型网站投稿,不过似乎没有markdown语法…,以下来自我的个人博客近期所写的,对猫狗
队列的解答。

猫狗队列是一个很经典的问题了吧,在书上我也翻看了很久;而网上的答案呢,也是千篇一律的,跟书的代码也是一字不差的,几乎除了照搬似乎都没什么思路可言的,甚至连书上提到注意的点都没有…

一开始我是没什么思路的,翻来覆去研究书上,发现原来挺简单;但用思路写起来还真不是一回事,挺难的。各个问题涉及到的地方很多,就是如何解决的问题很多,特别是题目的第二点要求。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 猫狗队列的再解


如何成为一位「不那么差」的程序员

前言

已经记不清有多少读者问过:

博主,你是怎么学习的?像我这样的情况有啥好的建议嘛?

也不知道啥时候我居然成人生导师了。当然我不排斥这些问题,和大家交流都是学习的过程。

因此也许诺会准备一篇关于学习方面的文章;所以本文其实准备了很久,篇幅较长,大家耐心看完希望能有收获。

以下内容仅代表我从业以来所积累的相关经验,我会从硬技能、软实力这些方面尽量阐述我所认为的 “不那么差的程序员” 应当做到哪些技能。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 如何成为一位「不那么差」的程序员


消息队列二三事

最近在看kafka的代码,就免不了想看看消息队列的一些要点:服务质量(QOS)性能扩展性等等,下面一一探索这些概念,并谈谈在特定的消息队列如kafka或者mosquito中是如何具体实现这些概念的。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 消息队列二三事


Java并发编程之美

一、内容简介

并发编程相比 Java 中其他知识点的学习门槛较高,从而导致很多人望而却步。但无论是职场面试,还是高并发/ 高流量系统的实现,却都离不开并发编程,于是能够真正掌握并发编程的人成为了市场迫切需求的人才。

《Java并发编程之美》通过图文结合、通俗易懂的讲解方式帮助大家完成多线程并发编程从入门到实践的飞跃!《Java并发编程之美》分为三部分,第一部分为Java 并发编程基础篇,主要讲解Java 并发编程的基础知识、线程有关的知识和并发编程中的其他相关概念,这些知识在高级篇都会有所使用,掌握了本篇的内容,就为学习高级篇奠定了基础;第二部分为Java 并发编程高级篇,讲解了Java 并发包中核心组件的实现原理,让读者知其然,也知其所以然,熟练掌握本篇内容,对我们在日常开发高并发、高流量的系统时会大有裨益;第三部分为Java 并发编程实践篇,主要讲解并发组件的使用方法,以及在使用过程中容易遇到的问题和解决方法。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Java并发编程之美


java多线程系列:通过对战游戏学习CyclicBarrier

CyclicBarrier是java.util.concurrent包下面的一个工具类,字面意思是可循环使用(Cyclic)的屏障(Barrier),通过它可以实现让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,所有被屏障拦截的线程才会继续执行。

这篇文章将介绍CyclicBarrier这个同步工具类的以下几点

  1. 通过案例分析
  2. 两种不同构造函数测试
  3. CyclicBarrier和CountDownLatch的区别
  4. await方法及源码分析。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: java多线程系列:通过对战游戏学习CyclicBarrier


《Python3.6官方文档》14 章

原文链接 译者:Carvendy

14 章 交互式输入编辑和历史替换

   一些版本的Python交互支持行级的输入编辑和历史替换,在Korn shell和GUN Bash shell里可以找到相似之处。这里使用的是GUN 读行库,它可以支持多种风格的编辑。这个库有自己的文档,在这里我们就不打算复述了。 阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 《Python3.6官方文档》14 章


源码分析Kafka之Producer

Kafka是一款很棒的消息系统,可以看看我之前写的 后端好书阅读与推荐来了解一下它的整体设计。今天我们就来深入了解一下它的实现细节(我fork了一份代码),首先关注Producer这一方。

要使用kafka首先要实例化一个KafkaProducer,需要有brokerIP、序列化器必要Properties以及acks(0、1、n)、compression、retries、batch.size非必要Properties,通过这个简单的接口可以控制Producer大部分行为,实例化后就可以调用send方法发送消息了。

核心实现是这个方法:

public Future<RecordMetadata> send(ProducerRecord<K, V> record, Callback callback) {
    // intercept the record, which can be potentially modified; this method does not throw exceptions
    ProducerRecord<K, V> interceptedRecord = this.interceptors.onSend(record);//①
    return doSend(interceptedRecord, callback);//②
}

通过不同的模式可以实现发送即忘(忽略返回结果)、同步发送(获取返回的future对象,回调函数置为null)、异步发送(设置回调函数)三种消息模式。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 源码分析Kafka之Producer


容器(docker)中运行java需关注的几个小问题

简介

  • container: 资源隔离、平台无关, 限制cpu、mem等资源
  • Java: 平台无关、Write once, run anywhere、WORA
      java不知道自己运行在container里,以为它看到的资源都能用。结果:java工作在资源充足的
    

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 容器(docker)中运行java需关注的几个小问题


如何优雅的使用和理解线程池

前言

平时接触过多线程开发的童鞋应该都或多或少了解过线程池,之前发布的《阿里巴巴 Java 手册》里也有一条:

可见线程池的重要性。

简单来说使用线程池有以下几个目的:

  • 线程是稀缺资源,不能频繁的创建。
  • 解耦作用;线程的创建于执行完全分开,方便维护。
  • 应当将其放入一个池子中,可以给其他任务进行复用。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 如何优雅的使用和理解线程池


HashMap? ConcurrentHashMap? 相信看完这篇没人能难住你!

前言

Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据。

本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 HashMap,没有它就不会有后面的 ConcurrentHashMap。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: HashMap? ConcurrentHashMap? 相信看完这篇没人能难住你!


Raft论文读书笔记

Raft是当前分布式领域最重要的一致性算法之一,今天我们就来好好研究研究这个算法的[论文][1], 还有对应[网站][2], [动画][3], 不想看英文的也有中文的[翻译][4],所以我这边就不翻译了,主要还是记录一下论文重点和自己的心得。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Raft论文读书笔记


你真的了解延时队列吗(一)

 

1 使用场景

  • 关闭空闲连接。服务器中,有很多客户端的连接,空闲一段时间之后需要关闭之。
  • 清理过期数据业务上。比如缓存中的对象,超过了空闲时间,需要从缓存中移出。
  • 任务超时处理。在网络协议滑动窗口请求应答式交互时,处理超时未响应的请求。
  • 下单之后如果三十分钟之内没有付款就自动取消订单。
  • 订餐通知:下单成功后60s之后给用户发送短信通知。
  • 当订单一直处于未支付状态时,如何及时的关闭订单,并退还库存?
  • 如何定期检查处于退款状态的订单是否已经退款成功?
  • 新创建店铺,N天内没有上传商品,系统如何知道该信息,并发送激活短信?
  • 定时任务调度:使用DelayQueue保存当天将会执行的任务和执行时间,一旦从DelayQueue中获取到任务就开始执行。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 你真的了解延时队列吗(一)


MySQL中流式查询使用

一、前言

MySQL 是目前使用比较广泛的关系型数据库,而从数据库里面根据条件查询数据到内存的情况想必大家在日常项目实践中都有使用。

当指定条件的数据量特别大时候一般是通过分页的方式在前端页面通过 Tag 标签一页页的加载数据到内存;但是有些情况下却不需要用户切换 Tag 标签的方式一页页的加载数据,这时候如果一下子全部把数据加载内存,就有可能会导致 OOM,虽然这时候可以通过程序控制分页查询,但是每次查询时候数据库都需要把所有符合条件的数据查询出来然后根据当前页的返回来返回指定的页,这无疑加重了 MySQL 服务器不必要的开销。 阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: MySQL中流式查询使用


《Python官方文档》5.数据结构

数据结构

本章会更细节的讲一些你已经学过的东西,同时也会加一些新的内容。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 《Python官方文档》5.数据结构


return top