Guava

后端系统缓存技术分析

你离开我真会死。 提交于 2020-08-14 07:26:31
缓存有很多种,如CPU 缓存、磁盘缓存、浏览器缓存等;本文主要针对后端系统的缓存,也就是将程序或系统经常要使用的对象存在内存中,以便在使用时可以快速调用,避免加载数据或者创建重复的实例,以达到减少系统开销,提高系统效率的目的。 为什么需要缓存? 我觉得操作系统里面讲高速缓存(CPU Cache)的一句话特别好: 为什么要使用CPU Cache? 因为CPU 和内存访问性能的差距非常大,为了弥补两者之间的性能差异,充分利用 CPU,现代 CPU 中引入了 高速缓存(CPU Cache)。 因为我们一般都会把数据存放在关系型数据库中,不管数据库的性能有多么好,受限于磁盘IO性能和远程网络的原因,一个简单的查询也要消耗毫秒级的时间,这样我们的 QPS 就会被数据库的性能所限制。 而内存的性能高于磁盘,也没有远程网络的花费。如果恰好这些数据的数据量不大,不经常变动,而且访问频繁。那么就非常适合引入缓存。 总结一下,缓存使用场景: 数据不常变更且查询比较频繁是最好的场景,如果查询量不够大或者数据变动太频繁,缓存使用的意义不大,甚至可能适得其反。 缓存的类型 常用的缓存可以分为内部缓存和外部缓存。 内部缓存是指存放在运行实例内部并使用实例内存的缓存,这种缓存可以使用代码直接访问。 外部缓存是指存放在运行实例外部的缓存,通常是通过网络获取,反序列化后进行访问。 一般来说对于不需要实例间同步的

Android Studio 3.6 报错 Could not download guava.jar.....No cached version available for offline mode

為{幸葍}努か 提交于 2020-08-14 05:59:34
最近公司的RN新项目 androidStudio 已经三个多月没怎么打开了 今天改老项目东西 一启动就开始报错 然后我就一脸懵逼 又咋了?为啥啊?不知道啊? 错误: Could not download guava.jar…No cached version available for offline mode 我的第一反应就是 androidStudio又升级了?我凑 有毒啊 查看版本一看 3.6.3 好嘛 给我自动更到3.6了都 经过调查 错误原因如下: 更新到Android Studio 3.6之后,以前一直用的本地的Gradle,选择勾选了offline work,更新后Gradle编译的时候报offline work下没有缓存的相应的编译版本 解决方法如下: 需要设置取消offline work AS3.6版本前在setting中的Gradle下设置offline work AS3.6版本中在setting中的Gradle下没有offline work勾选框,那我们可以在项目的最右侧边栏点击Gradle,然后点击2取消选中状态,关闭offline work 处于状态,如下图: 然后重新Build一下 就ok了 来源: oschina 链接: https://my.oschina.net/u/4259369/blog/4287482

Github即将破百万的PDF:编写高质量代码改善JAVA程序的151个建议

非 Y 不嫁゛ 提交于 2020-08-14 02:48:08
在通往"Java技术殿堂"的路上,本书将为你指点迷津!内容全部由Java编码的最佳 实践组成,从语法、程序设计和架构、工具和框架、编码风格和编程思想等五大方面,对 Java程序员遇到的各种棘手的疑难问题给出了经验性的解决方案,为Java程序员如何编写 高质量的Java代码提出了151条极为宝贵的建议。对于每一个问题,不仅以建议的方式从 正反两面蛤出了被实践证明为十分优秀的解决方案和非常精糕的解决方案,而且还分析了 问题产生的根源,犹如醍醐灌顶,让人豁然开朗。 全书-共12章,第1~ 3章针对Java语法本身提出了51条建议,例如覆写变长方法 时应该注意哪些事项、final 修饰的常量不要在运行期修改、匿名类的构造函数特殊在什么 地方等:第4~9章重点针对JDK API的使用提出了80条建议,例如字符串的拼接方法该 如何选择、枚举使用时有哪些注意事项、出现NullPointerException该如何处理、泛型的多 重界限该如何使用、多线程编程如何预防死锁,等等r第10~ 12章针对程序性能、开源 的工具和框架、编码风格和编程思想等方面提出了20条建议。 希望本文能让你少走一些弯路 您是否曾经为了提供一个"One Line"的解决方案而彻夜地查看源代码?现在您不用了。 您是否曾经为了理解某个算法而冥思苦想、阅览群书?现在您不用了。 您是否曾经为了提升0

如何研究Java的API?

℡╲_俬逩灬. 提交于 2020-08-13 23:15:59
研究源码时候,首先会看到一个类,但是这个类的复杂度以及到底做了什么,并不是很清楚,这里总结了一些经验。 1 对象是实体类,还是抽象类,还是接口 。接口类看有几个接口以及默认方法,接口越多职责越多,接口参数越多发生耦合可能性越大。抽象类看抽象方法,是否是模板模式,是否是钩子方法,是否是流程的一部分,看是否提供了相应层级的抽象程度。实体类的话看继承结构,是否有defalut修饰符,从而是能在包内使用,或者是否是protected,是否为了给子类继承用的。如果有 内部类 ,需要看是否是静态内部,还是非静态内部,两种设计截然不同。这里 类,方法,属性修饰符 非常重要。final,protected,static,private等等.... 2 对象如何覆写Object和经典接口。 经典方法toString,clone,hashCode,equals方法必看。如何实现经典的接口,如Comparable,Cloneable, Serializable(序列化的transient字段),Iterable接口,这些接口影响了是否能作为集合的元素或者key使用?原子变量没有equals和hashcode方法。 3 实例属性字段。 字段越多,状态越多,维护状态付出代价越高,从而可以看出类的复杂度,以及状态流转。对象是否有生命周期的概念?是否用了复杂的算法实现逻辑?如果静态字段过多,是否影响OO

别说你不知道什么是异步编程的Future!

做~自己de王妃 提交于 2020-08-13 16:17:47
作者 | why技术 来源 | why技术(ID:hello_hi_why) 你就是写了个假异步 先去我的第一篇公众号文章中拿张图片:《Dobbo 2.7新特性之异步化改造》。 这是 rpc 的四种调用方式: 文本主要分享这个 future 的调用方式,不讲 Dubbo 框架,这里只是一个引子。 谈到 future 的时候大家都会想到异步编程。但是你仔细看框起来这里: 客户端线程调用 future.get() 方法的时候还是会阻塞当前线程的。 我倒是觉得这充其量只能算一个缩减版的异步编程。 本文将带你从缩减版的 future 聊到升级版的 Google Guava 的 future,最后谈谈加强版的 future 。 先聊聊线程池的提交方式 谈到 Future 的时候,我们基本上就会想到线程池,想到它的几种提交方式。 先是最简单的,execute 方式提交,不关心返回值的,直接往线程池里面扔任务就完事: public class JDKThreadPoolExecutorTest { public static void main(String[] args) throws Exception { ThreadPoolExecutor executor = new ThreadPoolExecutor(2, 5, 60, TimeUnit.SECONDS, new

求求你了,不要再自己实现这些逻辑了,开源工具类不香吗?

假装没事ソ 提交于 2020-08-13 06:17:33
最近公司来了一批实习生,小黑哥负责带一个。这位小师弟说实话,基本功很扎实,做事也非常靠谱,深得小黑哥真传。 不过最近给其 Review 代码的时候,小黑哥发现小师弟有些代码逻辑有些繁琐,有些代码小黑哥看来可以用一些开源工具类实现,不需要自己重复实现。 不过这也是正常的,小黑哥刚入行的时候写的代码也是这样,这几年慢慢接触了一些开源工具类,逐渐积累。现在写代码才会直接用工具类替换自己实现的这些繁琐的逻辑。 于是小黑哥给小师弟分享了几个自己常用的开源工具类,小师弟学完直呼:『666』。 这里小黑哥抛砖引玉,分享几个常用的工具类,希望帮助到刚入行的同学们。其他 编程老司机 如果还有其他好用的工具类,欢迎评论区分享。 下文主要分享这几个方向的常用工具类: 点赞再看,养成习惯,微信搜索『程序通事』,关注就完事了。 点击查看更多系列相关文章 字符串相关工具类 Java 中 String 应该是日常用的最多一个类吧,平常我们很多代码需要围绕 String ,做一些处理。 JDK 提供 String API 虽然比较多,但是功能比较基础,通常我们需要结合 String 多个方法才能完成一个业务功能。 下面介绍一下 Apache 提供的一个工具类 StringUtils. Maven Pom 信息如下: <dependency> <groupId>org.apache.commons</groupId

求求你了,不要再自己实现这些逻辑了,开源工具类不香吗?

て烟熏妆下的殇ゞ 提交于 2020-08-13 03:36:44
最近公司来了一批实习生,小黑哥负责带一个。这位小师弟说实话,基本功很扎实,做事也非常靠谱,深得小黑哥真传。 不过最近给其 Review 代码的时候,小黑哥发现小师弟有些代码逻辑有些繁琐,有些代码小黑哥看来可以用一些开源工具类实现,不需要自己重复实现。 不过这也是正常的,小黑哥刚入行的时候写的代码也是这样,这几年慢慢接触了一些开源工具类,逐渐积累。现在写代码才会直接用工具类替换自己实现的这些繁琐的逻辑。 于是小黑哥给小师弟分享了几个自己常用的开源工具类,小师弟学完直呼:『666』。 这里小黑哥抛砖引玉,分享几个常用的工具类,希望帮助到刚入行的同学们。其他 编程老司机 如果还有其他好用的工具类,欢迎评论区分享。 下文主要分享这几个方向的常用工具类: 点赞再看,养成习惯,微信搜索『程序通事』,关注就完事了。 点击查看更多系列相关文章 字符串相关工具类 Java 中 String 应该是日常用的最多一个类吧,平常我们很多代码需要围绕 String ,做一些处理。 JDK 提供 String API 虽然比较多,但是功能比较基础,通常我们需要结合 String 多个方法才能完成一个业务功能。 下面介绍一下 Apache 提供的一个工具类 StringUtils. Maven Pom 信息如下: <dependency> <groupId>org.apache.commons</groupId

Alluxio基于冷热数据分离的元数据管理策略

霸气de小男生 提交于 2020-08-12 15:32:42
文章目录 前言 Alluxio内部元数据管理架构 Alluxio的支持异步写出功能的自定义Cache实现 引用 前言 上篇文章末尾,笔者聊到了一种叫做分层元数据管理模式。它主张的思想是将元数据进行分级对待,比如Cache+Persist层2种,cache拿来用于热点数据的访问,而persist层即持久层则存储那些冷的访问不频繁的数据,以此达到元数据的强扩展性和一个较好的访问性能。当今存储系统Alluxio就是使用了这种分层级对待的元数据管理模式。本文我们就来简单聊聊Alluxio的tier layer的元数据管理。 Alluxio内部元数据管理架构 相比较于将元数据全部load到memory然后以此提高快速访问能力的元数据管理方式,Alluxio在这点上做了优化改进,只cache那些active的数据,这是其内部元数据管理的一大特点。对于那些近期没有访问过的冷数据,则保存在本地的rocksdb内。 在Alluxio中,有专门的定义来定义上述元数据的存储,在内存中cache active数据的存储层,我们叫做cache store,底层rocksdb层则叫做baking store。 Alluxio就是基于上面提到的2层store做数据数据然后对外提供数据访问能力,架构图如下所示: 本文笔者这里想重点聊的点在于Cache store如何和上面Rocks store(Baking

Java 8清单 <V> 进入地图 <K, V>

岁酱吖の 提交于 2020-08-12 01:55:14
问题: I want to translate a List of objects into a Map using Java 8's streams and lambdas. 我想使用Java 8的流和lambda将对象列表转换为Map。 This is how I would write it in Java 7 and below. 这就是我在Java 7及以下版本中编写它的方式。 private Map<String, Choice> nameMap(List<Choice> choices) { final Map<String, Choice> hashMap = new HashMap<>(); for (final Choice choice : choices) { hashMap.put(choice.getName(), choice); } return hashMap; } I can accomplish this easily using Java 8 and Guava but I would like to know how to do this without Guava. 我可以使用Java 8和Guava轻松完成此操作,但是我想知道如何在没有Guava的情况下执行此操作。 In Guava: 在番石榴: private Map<String,

springboot1.5.9升级springboot2.0.5

大兔子大兔子 提交于 2020-08-11 22:17:16
占坑 springboot1.5.9升级springboot2.0.5 此升级只适应于参考(本公司暂时正常运行) 原文链接 官网翻译 spring-cloud 组件 springboot 版本 <version>2.0.5.RELEASE</version> springcloud 版本 <version>Finchley.RELEASE</version> eureka-server 替换 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> eureka-client 替换 2.0.X guava scope 为runtime 项目引用不到 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava<