Guava

好用到爆的 Java 技巧,不是吹嘘的!

ε祈祈猫儿з 提交于 2020-11-17 07:13:55
点击上方“ 技术最TOP ”,星标公众号 重磅干货,第一时间送达 来 自:Lrwin http://lrwinx.github.io/2017/03/04/细思极恐-你真的会写java吗/ 本文不是一个吹嘘的文章,不会讲很多高深的架构,相反,会讲解很多基础的问题和写法问题,如果读者自认为基础问题和写法问题都是不是问题,那请忽略这篇文章,节省出时间去做一些有意义的事情。 开发工具 不知道有多少“老”程序员还在使用 Eclipse,这些程序员们要不就是因循守旧,要不就是根本就不知道其他好的开发工具的存在,Eclipse 吃内存卡顿的现象,以及各种偶然莫名异常的出现,都告知我们是时候寻找新的开发工具了。 更换 IDE 根本就不想多解释要换什么样的 IDE,如果你想成为一个优秀的 Java 程序员,请更换 IntelliJ IDEA。使用 IDEA 的好处,请搜索谷歌。 别告诉我快捷键不好用 更换 IDE 不在我本文的重点内容中,所以不想用太多的篇幅去写为什么更换IDE。在这里,我只能告诉你,更换 IDE 只为了更好、更快的写好 Java 代码。原因略。 别告诉我快捷键不好用,请尝试新事物。 Bean Bean 使我们使用最多的模型之一,我将以大篇幅去讲解 Bean,希望读者好好体会。 Domain 包名 根据很多 Java 程序员的”经验”来看,一个数据库表则对应着一个 Domain

牛逼哄哄的布隆过滤器,到底有什么用?

匆匆过客 提交于 2020-11-15 20:04:25
作者:CodeBear的园子 www.cnblogs.com/CodeBear/p/10911177.html 本文是站在小白的角度去讨论布隆过滤器,如果你是科班出身,或者比较聪明,又或者真正想完全搞懂布隆过滤器的可以移步。 不知道从什么时候开始,本来默默无闻的布隆过滤器一下子名声大燥,仿佛身在互联网,做着开发的,无人不知,无人不晓,哪怕对技术不是很关心的小伙伴也听过它的名号。 我也花了不少时间去研究布隆过滤器,看了不少博客,无奈不是科班出身,又没有那么聪明的头脑,又比较懒...经过“放弃,拿起,放弃,拿起”的无限轮回,应该算是了解了布隆过滤器的核心思想,所以想给大家分享下。 布隆过滤器的应用 我们先来看下布隆过滤器的应用场景,让大家知道神奇的布隆过滤器到底能做什么。 缓存穿透 我们经常会把一部分数据放在Redis等缓存,比如产品详情。这样有查询请求进来,我们可以根据产品Id直接去缓存中取数据,而不用读取数据库,这是提升性能最简单,最普遍,也是最有效的做法。面试常问,缓存三大问题及解决方案! 一般的查询请求流程是这样的:先查缓存,有缓存的话直接返回,如果缓存中没有,再去数据库查询,然后再把数据库取出来的数据放入缓存,一切看起来很美好。 但是如果现在有大量请求进来,而且都在请求一个不存在的产品Id,会发生什么?既然产品Id都不存在,那么肯定没有缓存,没有缓存

开源GitHub标星30K的腾讯Redis笔记,阿里技术专家看到都赞不绝口

感情迁移 提交于 2020-11-13 19:29:03
前言 Redis的火爆程度,相信不用我多说,现在大型的互联网公司基本上都需要使用到Redis技术。Redis作为目前最火爆的内存数据库之一,通过在内存中读写数据,很大程度上提高了读写速度,可以说Redis 是实现网站高并发不可或缺的一部分。 但是,对于Redis的使用,相信还是有很多人不知道如何使用,也有不少中小型企业还没有使用到Redis,但是现在的大厂要求,对Redis的使用是需要熟练并掌握的,因此,学习Redis刻不容缓。 好消息是,今天公开了一份宝藏的技术笔记,由腾讯技术专家整理出来的Redis技术笔记,下载量已经突破了30W。 现在分享出来,需要的朋友,私信我领取密码“Redis”即可免费下载。 首先,上一套Redis思维脑图 这一套Redis的思维脑图还是非常详细具体的,内容比较多,图片展示的是“简约版”,实际上还有更完整的内容,“+”键未展开,Redis的思维导图能够更好地去帮助我们理解这本笔记的内容,也让我们在学习Redis的时候有一个更清晰的思路。 Redis思维导图内容: 基本数据结构及其应用:字符串+列表+集合+有序集合+哈希 用Redis实现分布式锁 持久化:AOF+RDB 如何解决多线程竞争问题 数据库、缓存双写不一致问题 事务 如何保证高可用 哨兵 集群 面试题相关 然后,上正菜:Redis技术笔记 1.认识Redis (Redis简介

Redis缓存击穿、缓存穿透、缓存雪崩

ぐ巨炮叔叔 提交于 2020-11-04 09:37:32
上篇文章谈到了 Redis 分布式锁,实际上就是为了解释为什么做缓存采用 Redis 而不使用 map/guava 。 缓存分为本地缓存和分布式缓存。以 Java 为例,使用自带的 map /guava 实现的是本地缓存,最主要的特点是轻量以及快速,生命周期随着 JVM 的销毁而结束。而且在多实例状态下缓存不具有唯一性。使用 Redis 作缓存称为分布式缓存,在多实例状态下共用一份缓存数据,缓存具有一致性。 所以说在分布式下最合适的缓存方案就是采用 Redis 实现分布式缓存。 本篇文章主要谈谈 Redis 中很容易出现的三大问题现象:缓存击穿、缓存穿透以及缓存雪崩。不过在介绍这三个问题现象之前,我们首先需要先来了解下 Redis 中 key 的过期淘汰机制。众所周知, Redis 可以对存储在 Redis 中的缓存数据设置过期时间,比如我们获取的短信验证码一般十分钟过期,我们这时候就需要在验证码存进 Redis 时添加一个 key 的过期时间,但是这里有一个需要格外注意的问题就是:并非 key 过期时间到了就一定会被 Redis 给删除。那么 Redis 是如何做到对过期 key 进行删除呢?Redis中对于过期 key的 删除分为两种策略:定期删除和惰性删除。 定期删除: Redis 默认是每隔 100ms 就随机抽取一些设置了过期时间的 Key ,检查其是否过期

连载:阿里巴巴大数据实践—数据服务

荒凉一梦 提交于 2020-11-03 16:42:55
阿里数据人都在用的内部技术经验 关注 数智化转型俱乐部 ,数智化不迷路 摘要 服务架构的每次升级,均在性能、稳定性、扩展性等方面有所提升,从而能更好地服务于用户 数据部门产出的海量数据,如何能方便高效地开放出去,是我们一直想要解决的难题。在没有数据服务的年代,数据开放的方式简单、粗暴,一般是直接将数据导出给对方。这种方式不仅低效,还带来了安全隐患等诸多问题。 为此,我们在数据服务这个方向上不断探索和实践。最早的数据服务雏形诞生于2010年,至今已有7个年头。在这期间,随着我们对业务的理解不断加深,同时也得益于新技术的持续涌现,对数据服务架构也进行了多次升级改造。服务架构的每次升级,均在性能、稳定性、扩展性等方面有所提升,从而能更好地服务于用户。 1.服务架构的演进 阿里数据服务架构演 进过程如图6.1所示。 基于性能、扩展性和稳定性等方面的要求,我们不断升级数据服务的架构,依次经历了内部代号为DWSOA、OpenAPI、SmartDQ和OneService的四个阶段。 阿里数据服务架构演进过程 其中, 第四个阶段是统一的数据服务层(即OneService) 。大家心里可能会有疑问:SQL并不能解决复杂的业务逻辑啊。确实,SmartDQ其实只满足了简单的查询服务需求。我们遇到的场景还有这么几类:个性化的垂直业务场景、实时数据推送服务、定时任务服务

面试官问我:创建线程有几种方式?我笑了

≡放荡痞女 提交于 2020-10-31 03:33:51
前言 多线程在面试中基本上已经是必问项了,面试官通常会从简单的问题开始发问,然后再一步一步的挖掘你的知识面。 比如,从线程是什么开始,线程和进程的区别,创建线程有几种方式,线程有几种状态,等等。 接下来自然就会引出线程池,Lock,Synchronized,JUC的各种并发包。然后就会引出 AQS、CAS、JMM、JVM等偏底层原理,一环扣一环。 这一节我们不聊其他的,只说创建线程有几种方式。 是不是感觉非常简单,不就是那个啥啥那几种么。 其实不然,只有我们给面试官解释清楚了,并加上我们自己的理解,才能在面试中加分。 正文 一般来说我们比较常用的有以下四种方式,下面先介绍它们的使用方法。然后,再说面试中怎样回答面试官的问题比较合适。 1、继承 Thread 类 通过继承 Thread 类,并重写它的 run 方法,我们就可以创建一个线程。 首先定义一个类来继承 Thread 类,重写 run 方法。 然后创建这个子类对象,并调用 start 方法启动线程。 2、实现 Runnable 接口 通过实现 Runnable ,并实现 run 方法,也可以创建一个线程。 首先定义一个类实现 Runnable 接口,并实现 run 方法。 然后创建 Runnable 实现类对象,并把它作为 target 传入 Thread 的构造函数中 最后调用 start 方法启动线程。 3、实现