Bugs

微笑的周末


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • github

Java 并发之 AQS 详解 Thread 详解 Thread 详解

发表于 2018-09-06 | 分类于 java
字数统计: 6.1k 字 | 阅读时长 ≈ 23 分钟
本文由 简悦 SimpRead 转码, 原文地址 https://www.cnblogs.com/waterystone/p/4920797.html 一、概述  谈到并发,不得不谈 ReentrantLock;而谈到 ReentrantLock,不得不谈 AbstractQueuedSynchronizer(AQS)!   类如其名,抽象的队列式的同步器,AQS 定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的 ReentrantLock/Semaphore/CountDownLatch…。   以下是本文的目录大纲: 概述 框架 源码详解 简单应用   若有不正之处,请谅解和批评指正,不胜感激。   请尊重作者劳动成果,转载请标明原文链接:http://www.cnblogs.com/waterystone/p/4920797.html   手机版可访问:https://mp.weixin.qq.com/s/eyZyzk8ZzjwzZYN4a ...
阅读全文 »

深入剖析未来的缓存 - Caffeine

发表于 2018-09-05 | 分类于 缓存
字数统计: 5.3k 字 | 阅读时长 ≈ 18 分钟
本文由 简悦 SimpRead 转码, 原文地址 https://juejin.im/post/5b8df63c6fb9a019e04ebaf4?utm_source=gold_browser_extension 1. 前言读这篇文章之前希望你能好好的阅读: 你应该知道的缓存进化史 和 如何优雅的设计和使用缓存? 。这两篇文章主要从一些实战上面去介绍如何去使用缓存。在这两篇文章中我都比较推荐 Caffeine 这款本地缓存去代替你的 Guava Cache。本篇文章我将介绍 Caffeine 缓存的具体有哪些功能,以及内部的实现原理,让大家知其然,也要知其所以然。有人会问: 我不使用 Caffeine 这篇文章应该对我没啥用了,别着急,在 Caffeine 中的知识一定会对你在其他代码设计方面有很大的帮助。当然在介绍之前还是要贴一下他和其他缓存的一些比较图: 可以看见 Caffeine 基本从各个维度都是相比于其他缓存都高,废话不多说,首先还是先看看如何使用吧。 1.1 如何使用C ...
阅读全文 »

如何优雅的设计和使用缓存?

发表于 2018-09-05 | 分类于 缓存
字数统计: 6.5k 字 | 阅读时长 ≈ 22 分钟
本文由 简悦 SimpRead 转码, 原文地址 https://juejin.im/post/5b849878e51d4538c77a974a 背景在之前的文章中你应该知道的缓存进化史介绍了爱奇艺的缓存架构和缓存的进化历史。俗话说得好,工欲善其事,必先利其器,有了好的工具肯定得知道如何用好这些工具,本篇将介绍如何利用好缓存。 1. 确认是否需要缓存在使用缓存之前,需要确认你的项目是否真的需要缓存。使用缓存会引入的一定的技术复杂度,后文也将会一一介绍这些复杂度。一般来说从两个方面来个是否需要使用缓存: CPU 占用: 如果你有某些应用需要消耗大量的 cpu 去计算,比如正则表达式,如果你使用正则表达式比较频繁,而其又占用了很多 CPU 的话,那你就应该使用缓存将正则表达式的结果给缓存下来。 数据库 IO 占用: 如果你发现你的数据库连接池比较空闲,那么不应该用缓存。但是如果数据库连接池比较繁忙,甚至经常报出连接不够的报警,那么是时候应该考虑缓存了。笔者曾经有个服务,被很多其他服务调 ...
阅读全文 »

支付平台的架构设计(蚂蚁金服)

发表于 2018-08-30 | 分类于 架构
字数统计: 7k 字 | 阅读时长 ≈ 24 分钟
支付系统中数据库锁的应用实践 如何科学的设置线程池 缓存使用的最佳实践 数据库设计要点 一行代码引起的血案 幂等和防重 实现分布式任务调度的多种方法 支付系统中数据库锁的应用实践锁通常应用在多个线程对一个共享资源进行同时操作,用来保证操作的有序性和正确性的同步设施。在笔者看来,锁的本质其实是排队,不同的锁排队的空间和时间不同而已,例如,Java 的 Synchronized 的锁是在应用处理业务逻辑的时候在对象头上进行排队,数据库的锁是在数据库上进行数据库操作的时候进行排队,而分布式锁是在处理业务逻辑的时候在一个公用的存储服务上排队。 乐观锁乐观锁是基于一种具有“乐观”的思想,假设数据库操作的并发非常少,多数情况下是没有并发的,更新是按照顺序执行的,少有的一些并发通过版本控制来防止脏数据的产生。具体过程为,在操作数据库数据的时候,对数据不加显式的锁,而是通过对数据的版本或者时间戳的对比来保证操作的有序性和正确性。一般是在更新数据之前,先获取这条记录的版本或者时间戳,在更新数据的时候, ...
阅读全文 »

常见算法

发表于 2018-08-30 | 分类于 算法
字数统计: 640 字 | 阅读时长 ≈ 2 分钟
查找一个数组的中位数? 基本思路是:任意挑一个元素,以该元素为支点,将数组分成两部分,左部分是小于等于支点的,右部分是大于支点的。如果你的运气爆棚,左部分正好是(n-1)/2个元素,那么支点的那个数就是中位数。如果左侧长度<(n-1)/2, 那么中位点在右侧,反之,中位数在左侧。 进入相应的一侧继续寻找中位点。这种方法很快,但是在最坏的情况下时间复杂度为O(N^2), 不过平均时间复杂度好像是O(N)。 将前(n+1)/2个元素调整为一个小顶堆,对后续的每一个元素,和堆顶比较,如果小于等于堆顶,丢弃之,取下一个元素。 如果大于堆顶,用该元素取代堆顶,调整堆,取下一元素。重复2.2步当遍历完所有元素之后,堆顶即是中位数。 查找N个元素中的第K个小的元素(来自编程珠玑) 编程珠玑给出了一个时间复杂度O(N),的解决方案。该方案改编自快速排序。经过快排的一次划分, 1)如果左半部份的长度>K-1,那么这个元素就肯定在左半部份了 2)如果左半部份的长度==K-1,那 ...
阅读全文 »

Java基础面试

发表于 2018-08-29 | 分类于 java
字数统计: 16.5k 字 | 阅读时长 ≈ 61 分钟
最近看到网上流传着,各种面试经验及面试题,往往都是一大堆技术题目贴上去,而没有答案。 为此我业余时间整理了,Java 基础常见的 40 道常见面试题,及详细答案,望各路大牛,发现不对的地方,不吝赐教,留言即可。 八种基本数据类型的大小,以及他们的封装类 引用数据类型 Switch 能否用 string 做参数 equals 与 == 的区别 自动装箱,常量池 Object 有哪些公用方法 Java 的四种引用,强弱软虚,用到的场景 Hashcode 的作用 HashMap 的 hashcode 的作用 为什么重载 hashCode 方法? ArrayList、LinkedList、Vector 的区别 String、StringBuffer 与 StringBuilder 的区别 Map、Set、List、Queue、Stack 的特点与用法 HashMap 和 HashTable 的区别 JDK7 与 JDK8 中 HashMap 的实现 HashMap 和 ConcurrentHa ...
阅读全文 »

蚂蚁金服面试

发表于 2018-08-29 | 分类于 java
字数统计: 4.3k 字 | 阅读时长 ≈ 15 分钟
一面1、自我介绍、自己做的项目和技术领域 2、项目中的监控:那个监控指标常见的哪些? 3、微服务涉及到的技术以及需要注意的问题有哪些? 4、注册中心你了解了哪些? Zookeeper:历史悠久,数据存储格式类似文件系统,通过私有协议访问,集群式架构。优点是成熟稳定,缺点是系统复杂,资源占用高 Consul:Consul 提供了高可用的kv存储,集群架构,这点和etcd zookeeper类似。 另外也提供了自动服务发现注册的套件,并且能否对服务进行健康检查。 结合consul-template可以实现服务提供方信息更新(比如增加了API服务器)时,自动生成配置文件给服务使用方自动更新配置。 Consul支持跨数据中心 Eureka 5、consul 的可靠性你了解吗? 6、consul 的机制你有没有具体深入过?有没有和其他的注册中心对比过? 7、项目用 Spring 比较多,有没有了解 Spring 的原理?AOP 和 IOC 的原理 Spring的两个核心概念是IO ...
阅读全文 »

Python面试题之二

发表于 2018-08-28 | 分类于 Python
字数统计: 4k 字 | 阅读时长 ≈ 16 分钟
Q1. Python支持什么数据类型?这是最基本的Python面试问题。Python支持5种数据类型: Numbers(数字)——用于保存数值 12>>> a=7.0>>> Strings(字符串)——字符串是一个字符序列。我们用单引号或双引号来声明字符串。 1>>> title="Ayushi's Book" Lists(列表)——列表就是一些值的有序集合,我们用方括号声明列表。 123>>> colors=['red','green','blue']>>> type(colors) <class 'list'> Tuples(元组)——元组和列表一样,也是一些值的有序集合,区别是元组是不可变的,意味着我们无法改变元组内的值。 12345>>> name=('Ayushi','Sharma')>>> name[0]='Avery'Traceb ...
阅读全文 »

https如何保证数据传输的安全性

发表于 2018-08-25 | 分类于 HTTP
字数统计: 2k 字 | 阅读时长 ≈ 6 分钟
大家都知道,在客户端与服务器数据传输的过程中,http协议的传输是不安全的,也就是一般情况下http是明文传输的。但https协议的数据传输是安全的,也就是说https数据的传输是经过加密。 在客户端与服务器这两个完全没有见过面的陌生人交流中,https是如何保证数据传输的安全性的呢? 下面我将带大家一步步了解https是如何加密才得以保证数据传输的安全性的。我们先把客户端称为小客,服务器称为小服。然后一步步探索在小客与小服的交流中(就是一方请求一方响应),https是如何保证他们的交流不会被中间人窃听的。 1. 对称加密假如现在小客与小服要进行一次私密的对话,他们不希望这次对话内容被其他外人知道。可是,我们平时的数据传输过程中又是明文传输的,万一被某个黑客把他们的对话内容给窃取了,那就难受了。 为了解决这个问题,小服这家伙想到了一个方法来加密数据,让黑客看不到具体的内容。该方法是这样子的: 在每次数据传输之前,小服会先传输小客一把密钥,然后小服在之后给小客发消息的过程中,会用这把密钥对 ...
阅读全文 »

数据库事务隔离级别

发表于 2018-08-23 | 分类于 数据库
字数统计: 4.3k 字 | 阅读时长 ≈ 15 分钟
本文由 简悦 SimpRead 转码, 原文地址 https://juejin.im/post/5b90cbf4e51d450e84776d27?utm_source=gold_browser_extension 之前对于数据库事务概念的理解有很多不到位的地方,今天用简单的实例再来阐述一下数据库事务和隔离级别的概念,也方便以后温故而知新。 1. 什么是事务事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。例如,银行转账工作:从一个账号扣款并使另一个账号增款,这两个操作要么都执行,要么都不执行。所以,应该把它们看成一个事务。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保 持数据一致性。我们以 Msql 数据库的操作为例,再进一步解释一下数据库事务: 首先我们用以下命令查看该 Mysql 会话的事务隔离级别,关于事务隔离级别及其作用,我们在后面的章节中会进行详细介绍,这里只要简单知道 ...
阅读全文 »
1…678…10

Dean Wang

92 日志
20 分类
36 标签
GitHub E-Mail
© 2018 Dean Wang | Site words total count: 292.5k
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.4