计算两个或多个数字/数组之间的最大公约数 const gcd = (...arr) => { const _gcd = (x, y) => (!y ? x : gcd(y, x % y)); return [...arr].reduce((a, b) => _gcd(a, b)); }; 函数使用递归。 基本情况是当y等于0.在这种情况下,返回x。 否则,返回y的GCD和除法...
cookies和sessionstorage和localstorage区别 相同点:客户端都会存储 不同点 不同点 存储大小 有效时间 数据与服务器交互方式 cookies <=4K 在设置cookie过期之前一直有效(无论窗口浏览器是否关闭) 正常情况下,cookies数据会自动传到服务器,服务器也可以写cookie到客户端 sessionstorage 5M 数据在当前浏览器关闭后删除(session...
隐蔽的bean没有定义错误:No bean named 'SysJdTypeServiceImpl' is defined org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'SysJdTypeServiceImpl' is defined bean没有定义错误常见的原因有: 1、对应要注入的实现类没有 加注解,如dao层 @Repository 如service层 @Service 2、Ecli...
Java并发系列(7)CountDownLatch源码分析 CountDownLatch(闭锁)是一个很有用的工具类,利用它我们可以拦截一个或多个线程使其在某个条件成熟后再执行。它的内部提供了一个计数器,在构造闭锁时必须指定计数器的初始值,且计数器的初始值必须大于0。另外它还提供了一个countDown方法来操作计数器的值,每调用一次countDown方法计数器都会减1,直到计数器的值减为0时就代表条件已成熟,所有因调用await方法而阻塞的线程...
Java并发系列(5)ReentrantLock源码分析 在Java5.0之前,协调对共享对象的访问可以使用的机制只有synchronized和volatile。我们知道synchronized关键字实现了内置锁,而volatile关键字保证了多线程的内存可见性。 在大多数情况下,这些机制都能很好地完成工作,但却无法实现一些更高级的功能,例如,无法中断一个正在等待获取锁的线程,无法实现限定时间的获取锁机制,无法实现非阻塞结构的加锁规则等...
Java并发系列(8)CyclicBarrier源码分析 现实生活中我们经常会遇到这样的情景,在进行某个活动前需要等待人全部都齐了才开始。例如吃饭时要等全家人都上座了才动筷子,旅游时要等全部人都到齐了才出发,比赛时要等运动员都上场后才开始。 在JUC包中为我们提供了一个同步工具类能够很好的模拟这类场景,它就是CyclicBarrier类。利用CyclicBarrier类可以实现一组线程相互等待,当所有线程都到达某个屏障点后再进行后续的操作。 ...
Java并发系列(6)Semaphore源码分析 Semaphore(信号量)是JUC包中比较常用到的一个类,它是AQS共享模式的一个应用,可以允许多个线程同时对共享资源进行操作,并且可以有效的控制并发数,利用它可以很好的实现流量控制。 Semaphore提供了一个许可证的概念,可以把这个许可证看作公共汽车车票,只有成功获取车票的人才能够上车,并且车票是有一定数量的,不可能毫无限制的发下去,这样就会导致公交车超载。所以当车票发完...
深入聚合数据分析 1、家电卖场案例背景 以一个家电卖场中的电视销售数据为背景,来对各种品牌,各种颜色的电视的销量和销售额,进行各种各样角度的分析 PUT /tvs{ "mappings": { "sales": { "properties": { "price": { "type": "long" }, "color": { "type": "keyword" ...
es查询性能优化 filesystem cache 数据预热 冷热分离 document 模型设计 分页性能优化 1、filesystem cache 往 es 里写的数据,实际上都写到磁盘文件里去了,**查询的时候**,操作系统会将磁盘文件里的数据自动缓存到 `filesystem cache` 里面去 es 的搜索引擎严重依赖于底层的 ...
为什么要用缓存? 为什么要用缓存?用缓存,主要有两个用途:**高性能**、**高并发**。 就是说对于一些需要复杂操作耗时查出来的结果,且确定后面不怎么变化,但是有很多读请求,那么直接将查询出来的结果放在缓存中,后面直接读缓存就好。 用了缓存之后会有什么不良后果?常见的缓存问题有以下几个:- [缓存与数据库双写不一致]- [缓存雪崩、缓存穿透]- [缓存并发竞争] 转载于:https://ww...
Java并发系列(4)AbstractQueuedSynchronizer源码分析之条件队列 AbstractQueuedSynchronizer内部维护了一个同步状态和两个排队区,这两个排队区分别是同步队列和条件队列。 我们还是拿公共厕所做比喻,同步队列是主要的排队区,如果公共厕所没开放,所有想要进入厕所的人都得在这里排队。而条件队列主要是为条件等待设置的,我们想象一下如果一个人通过排队终于成功获取锁进入了厕所,但在方便之前发现自己没带手纸,碰到这种情况虽然很无奈,但是...
Java并发系列(3)AbstractQueuedSynchronizer源码分析之共享模式 通过上一篇的分析,我们知道了独占模式获取锁有三种方式,分别是不响应线程中断获取,响应线程中断获取,设置超时时间获取。在共享模式下获取锁的方式也是这三种,而且基本上都是大同小异,我们搞清楚了一种就能很快的理解其他的方式。 1、不响应线程中断的获取 //以不可中断模式获取锁(共享模式) public final void acquireShared(int a...
如何导出MySQL索引的创建语句 SELECTCONCAT('ALTER TABLE `',TABLE_NAME,'` ', 'ADD ', IF( any_value(NON_UNIQUE )= 1, CASE UPPER(any_value(INDEX_TYPE)) WHEN 'FULLTEXT' THEN 'FULLTEXT INDEX' WHEN 'SPATIAL' THEN 'SPATIAL INDEX' E...
AbstractQueuedSynchronizer源码分析之独占模式 在本篇中会介绍在独占模式下结点是怎样进入同步队列排队的,以及离开同步队列之前会进行哪些操作。 AQS为在独占模式和共享模式下获取锁分别提供三种获取方式:不响应线程中断获取,响应线程中断获取,设置超时时间获取。 这三种方式整体步骤大致是相同的,只有少部分不同的地方,所以理解了一种方式再看其他方式的实现都是大同小异。在本篇中我会着重讲不响应线程中断的获取方式,其他两种方式也会顺带讲一下不...
AbstractQueuedSynchronizer源码分析之概要 学习Java并发编程不得不去了解一下java.util.concurrent这个包,这个包下面有许多我们经常用到的并发工具类,例如:ReentrantLock, CountDownLatch, CyclicBarrier, Semaphore等。而这些类的底层实现都依赖于AbstractQueuedSynchronizer这个类,由此可见这个类的重要性。 所以在Java并发系列文章中我...
win10电脑上不了网了 从网上下了个免费软件,结果给我安装了好多流氓软件,之后电脑就上不了网了,郁闷! 从网上找了好多解决方法,都没有用,自己瞎捣鼓,就好了,记录一下。 1.点击右下角的“打开网络和Internet设置” 2.点击”网络重置“,重启之后就好了 转载于:https://www.cnblogs.com/jishugaochao/p/11573725.html...
es6-对象与数组的解构赋值 //1.测试对象解构赋值 const object1 = {a1:'a1', b1:'b1'}; const {a1, b1, c1} = object1; console.log(a1, b1, c1); //2.测试数组解构赋值 const arr2= ['a2', 'b2']; co...