Java
文章平均质量分 78
熊與猫v
这个作者很懒,什么都没留下…
展开
-
Guava中的封装的Map操作
Guava是google公司开发的一款Java类库扩展工具包,内含了丰富的API,涵盖了集合、缓存、并发、I/O等多个方面。使用这些API一方面可以简化我们代码,使代码更为优雅,另一方面它补充了很多jdk中没有的功能,能让我们开发中更为高效。原创 2022-08-21 03:01:39 · 535 阅读 · 1 评论 -
单元测试Mockito使用及详解
就会抛出空指针异常,因为用spy之后,在我们的原始对象中,list.get(0)是没有值的,不能直接存根,所以使用spy的时候打桩我们尽量使用doReturn方法,如果用mock的话,都是虚假函数,不会执行真正的函数部分。通过以上使用,我们大致可以了解到mock对我们测试的具体帮助是什么,还有它的基本使用,当然它还有其它方法,只了解了一些最常用的测试方法,需要更深入了解还需要我们在写代码的过程中去探索,mock大大简化了我们写单元测试的复杂度,一些难引用的对象都可以通过mock来模拟。原创 2022-08-20 12:56:30 · 2957 阅读 · 0 评论 -
单元测试Junit使用与详解
当然了,最容易想到的一个方式,就是我们通过System.out来输出我们的结果,看看是不是满足我们的需求,但是项目中这些成千上万个方法,我们总不能在每一个方法中都去输出一遍嘛。在这里选择assertEquals(Object expected,Object actual),expected指的是期望得到的值,actual指实际返回的结果,如果期望值和实际结果不相等,就会抛异常,即断言失败。我们对add方法进行测试,代码如下。断言判断是否相等,这个方法里面可以又很多参数,一般根据我们的需要输入相应的参数。原创 2022-08-20 12:37:50 · 2296 阅读 · 0 评论 -
Guava LoadCache缓存介绍和使用
一般情况下,在缓存中查询某个key,如果不存在,则查源数据,并回填缓存。一般我们在业务中操作缓存,都会操作缓存和数据源两部分GuavaCache的get可以集成数据源,在从缓存中读取不到时可以从数据源中读取数据并回填缓存。GuavaCache可以在CacheLoader的load方法中加以控制,对同一个key,只让一个请求去读源并回填缓存,其他请求阻塞等待。GuavaCache构建的缓存不会"自动"执行清理和回收工作,也不会在某个缓存项过期后马上清理,也没有诸如此类的清理机制。...转载 2022-08-12 19:40:05 · 2263 阅读 · 0 评论 -
Guava/RateLimiter 限流使用详解
RateLimiter 从概念上来讲,速率限制器会在可配置的速率下分配许可证。如果必要的话,每个acquire()会阻塞当前线程直到许可证可用后获取该许可证。一旦获取到许可证,不需要再释放许可证。校对注:RateLimiter使用的是一种叫令牌桶的流控算法,RateLimiter会按照一定的频率往桶里扔令牌,线程拿到令牌才能执行,比如你希望自己的应用程序QPS不要超过1000,那么RateLimiter设置1000的速率后,就会每秒往桶里扔1000个令牌。com.google.common....转载 2021-08-30 19:49:03 · 2756 阅读 · 3 评论 -
跨域问题
写下这篇文章后我想,要不以后就把这种基础的常见知识都归到这个“不要再问我XX的问题”,形成一系列内容,希望大家看完之后再有人问你这些问题,你心里会窃喜:“嘿嘿,是时候展现真正的技术了!”一、不要再问我this的指向问题了跨域这两个字就像一块狗皮膏药一样黏在每一个前端开发者身上,无论你在工作上或者面试中无可避免会遇到这个问题。为了应付面试,我每次都随便背几个方案,也不知道为什么要这样干,反正面完就可以扔了,我想工作上也不会用到那么多乱七八糟的方案。到了真正工作,开发环境有webpack-dev-serv转载 2021-05-28 03:05:27 · 62 阅读 · 0 评论 -
多线程异步编排CompletableFuture和CompletionStage
1,什么是异步异步调用实现一个不需要被等等的方法的返回值;让调用者继续执行(异步执行);在 java 中,简单的讲就是开启另一个线程完成程序计算,使得调用者继续执行,不需要等等计 算的结果,但是调用者任然需要获取线程的计算结果(不需要同步阻塞等待)2,FutureFuture 也是一个异步计算结果返回接口,目的获取返回值结果。但是 future 在获取返回值结 构的时候,方法必须同步阻塞等待返回值结果。 Get : 获取结果(等待,阻塞)...原创 2021-07-17 22:44:58 · 457 阅读 · 1 评论 -
线程池的五种状态
待定。。原创 2021-05-23 20:05:11 · 1396 阅读 · 0 评论 -
线程的5种状态详解
Java中的线程的生命周期大体可分为5种状态。1.新建(NEW):新创建了一个线程对象。2.可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。3.运行(RUNNING):可运行状态(runnable)的线程获得了cpu 时间片(timeslice) ,执行程序代码。4.阻塞(BLOCKED):阻塞状态是指线程因为某种原因放弃了cpu 使用权,也即让出...转载 2021-05-20 04:12:59 · 10363 阅读 · 1 评论 -
拦截器(Interceptor)和过滤器(Filter)的执行顺序和区别
作者:华为云开发者社区链接:https://www.zhihu.com/question/30212464/answer/1786967139来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。1、实现原理不同过滤器和拦截器 底层实现方式大不相同,过滤器 是基于函数回调的,拦截器 则是基于Java的反射机制(动态代理)实现的。这里重点说下过滤器!在我们自定义的过滤器中都会实现一个 doFilter()方法,这个方法有一个FilterChain 参数,而实际.原创 2021-07-29 03:03:51 · 12351 阅读 · 7 评论 -
一文详解flatMap和map的区别
背景map和flatmap,从字面意思或者官网介绍,可能会给一些人在理解上造成困扰【包括本人】,所以今天专门花时间来分析,现整理如下:首先做一下名词解释------------------------------------------------我的理解map:map方法返回的是一个object,map将流中的当前元素替换为此返回值;flatMap:flatMap方法返回的是一个stream,flatMap将流中的当前元素替换为此返回流拆解的流元素;官方解释map:Return转载 2021-06-26 01:48:32 · 10598 阅读 · 0 评论 -
restful风格详解
概念一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。URL定义资源:互联网所有的事物都可以被抽象为资源资源操作:使用POST、DELETE、PUT、GET,使用不同方法对资源进行操作。分别对应 添加、 删除、修改、查询。传统方式操作资源http://127.0.0.1/item/queryUser.action?id=1查...转载 2021-06-23 02:31:08 · 238 阅读 · 0 评论 -
Java8新特性--Lambda表达式
Lambda Lambda表达式是JDK8中出现的新特性,其是函数接口的一种实现方式,用于代替匿名内部类。 函数式接口:Functional Interface,也称为功能性接口。简单来说,接口中可以包含多个方法,但仅能有一个自己的抽象方法,即接口的默认方法和静态方法并不影响一个接口 成为函数式接口。在JDK帮助文档中,FunctionInterface注解的说明中有关于函数接口的详细描述。An informative annotation type(信息注释类型) ...原创 2021-06-17 02:57:02 · 435 阅读 · 0 评论 -
为什么使用双亲委派机制以及如何破坏双亲委派
一、什么是双亲委派机制?当某个特定的类加载器它在接到需要加载类的请求时,这个类会首先查看自己已加载完的类中是否包含这个类,如果有就返回,没有的话就会把加载的任务交给父类加载器加载,以此递归,父类加载器如果可以完成类加载任务,就返回它,当父类加载器无法完成这个加载任务时,才会不得已自己去加载。这种机制就叫做双亲委派机制。工作机制类装载器就是寻找类的字节码文件,并构造出类在JVM内部表示的对象组件。在Java中,类装载器把一个类装入JVM中,要经过以下步骤:1) 装载:查找和导入Class文件;转载 2021-05-30 16:04:49 · 2170 阅读 · 0 评论