11 若鱼1919

尚未进行身份认证

暂无相关描述

等级
博文 166
排名 6k+

缓存穿透与布隆过滤器BloomFilter那些事

原文在这里:缓存穿透与布隆过滤器BloomFilter那些事很多小伙伴在面试的时候都会被问到类似这样的问题:如何解决redis的缓存穿透问题?以用户登录为例来说,浏览器传递过来用户名和密码,服务端首先是根据用户名去查cache,如果有直接返回,如果没有再去查DB,如果查到回写到cache并返回,查不到说明用户不存在。中间加一个cache就是为了加快查询的速度,减轻DB的压力,对DB做一层保护...

2019-06-20 13:08:05

如何用redis做活跃用户统计-HyperLoglog

原文在这里:如何用redis做活跃用户统计-HyperLoglog网站经常有这样的需求:统计日活用户数,有哪些实现方式呢?第一种做法:用redis的set集合。用户登录以后,把用户id添加到redis的set中,set会自动进行去重,类似于这样:127.0.0.1:6379>saddusers_2019_06_17user1(integer)1127.0.0.1:63...

2019-06-17 18:00:04

单点登录系统SSO是如何实现的?

原文在这里:单点登录系统SSO是如何实现的?所谓单点登录就是在A系统登录以后,跳转到B系统,此时可以直接访问B系统的资源,而不需要二次登录,目前这种需求已经非常普遍了,那么背后是怎么实现的呢?本文将用一个实际的例子来给大家详细的讲解下。准备工作(1)准备3个域名来模拟3个站点,www.site1.com和www.site2.com是业务域,www.usercenter.com是用户中心。...

2019-06-13 19:12:29

如何用redis正确实现分布式锁?

原文在这里:如何用redis正确实现分布式锁?先把结论抛出来:redis无法正确实现分布式锁!即使是redis单节点也不行!redis的所谓分布式锁无法用在对锁要求严格的场景下,比如:同一个时间点只能有一个客户端获取锁。首先来看下单节点下一般redis分布式锁的实现,其实就是个set:加锁:/***尝试获取分布式锁*@paramjedisRedis客户端...

2019-06-10 19:40:33

你真的会用String吗(4)-intern看JVM内存结构变化

原文在这里:你真的会用String吗(4)-intern看JVM内存结构变化上一篇你真的会用String吗(3)-关于字符串拼接中我们提到了String.intern()方法,本篇我们就来详细的看下这个方法是干嘛的。首先来看下jdk8中这个方法的注释:Whentheinternmethodisinvoked,ifthepoolalreadycontainsastri...

2019-06-06 14:38:28

你真的会用String吗(3)-关于字符串拼接

原文在这里:你真的会用String吗(3)-关于字符串拼接Java开发的同学估计都知道至少是听说过:在开发中一般不建议用+来做字符串拼接,如果有字符串拼接的需求可以用StringBuilder来代替,因为String是不可变的,而StringBuilder是可变的,用StringBuilder来拼接效率会更高。这种说法有道理吗?以下代码为例:publicstaticStringf1...

2019-06-05 08:54:29

你真的会用String吗(1)-关于replace

原文在这里:你真的会用String吗(1)-关于replace先看下这段代码的输出结果是什么:publicstaticvoidmain(String[]args)throwsException{Stringsrc="aa|bb|cc";Stringstr1=src.replace("|","");Stringstr2=src....

2019-06-03 09:20:56

你真的会用Enum吗(4)-集成SpringBoot

原文在这里:你真的会用Enum吗(4)-集成SpringBoot自定义Enum共有四篇,本篇为第四篇。前面我们已经实现了把浏览器的参数映射成自定义的枚举,并且把枚举保存到数据库,本篇来看下如果是SpringBoot该如何来做。测试代码还是跟之前的一样,就不重复发了,请参考:你真的会用Enum吗(2)-集成SpringMVC你真的会用Enum吗(3)-集成Mybatis(1)添加扫描En...

2019-05-27 13:26:05

你真的会用Enum吗(3)-集成Mybatis

原文在这里:你真的会用Enum吗(3)-集成Mybatis自定义Enum共有四篇,本篇为第三篇。前面一篇你真的会用Enum吗(2)-集成SpringMVC我们实现了把浏览器传递的参数反序列化成我们自定义的枚举,同时可以把枚举序列化成字符串输出给浏览器,本篇我们来看下,如何使用Mybatis把自定义的枚举给保存到数据库中。我们想实现的效果://普通的daopublicinterface...

2019-05-24 09:36:56

你真的会用Enum吗(2)-集成SpringMVC

原文在这里:你真的会用Enum吗(2)-集成SpringMVC欢迎加关注:自定义Enum共有4篇,本篇为第二篇。上一篇我们自定义了通用的枚举类你真的会用Enum吗?,本篇我们来看下我们自定义的枚举类如何与SpringMVC进行集成。我们想实现这样的效果:@RequestMapping(value="/wd",method=RequestMethod.GET)@ResponseBod...

2019-05-23 14:16:54

你真的会用Enum吗?

关于自定义Enum总共有4篇,本篇为第1篇,后面会继续介绍如何集成SpringMVC、如何集成Mybatis和SpringBoot。JDK从1.5开始新添加了枚举类Enum,用起来也比较简单,比如我们要定义一个Week的Enum:publicenumWeek{MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,...

2019-05-21 09:01:39

JS中文字符串转GBK字节数组

需要引入gbk.js,在这里:gbk.js下载<script> functiontoGbkBytes(str){ varstr=$URL.encode(str) vararr=str.split("%"); for(vari=1;i<arr.length;i++){ varnum=arr[i]; arr[i]=...

2019-03-27 18:42:36

SpringMVC+Mybatis,@Transactional注解会影响Mybatis的一级缓存

项目使用的是SpringMVC+Mybatis,如果service的方法里面全都是查询,那么加不加@Transactional有什么影响呢?SpringMVC集成Mybatis的常见配置如下:<!--数据源--><beanid="dataSource"。。。></bean&

2018-12-27 16:32:42

JDK11-G1收集器调优

G1通用推荐设置G1一般推荐使用它的默认设置,然后设置一个停顿时间和最大堆内存的目标。G1跟别的收集器不一样,G1默认配置的目标既不是最大化吞吐量也不是最小化停顿时间,而是使用时间相对较短的停顿来达到很高的吞吐量。但是,G1的这种增量回收内存和停顿时间的控制机制不管是对应用线程还是对内存回收的效率都会导致一些额外的开销。如果你更想要高的吞吐量,那就设置相对宽松的停顿时间的目标(用-XX:...

2018-10-02 14:13:01

JDK11-G1垃圾收集器

原文在这里:https://docs.oracle.com/en/java/javase/11/gctuning/garbage-first-garbage-collector.htmlG1垃圾收集器简介TheGarbage-First(G1)garbagecollectoristargetedformultiprocessormachineswithalargeam...

2018-10-01 15:13:42

如何解决ThreadLocal与ThreadPool的小矛盾?

忽然发现还有个更牛逼的:https://github.com/alibaba/transmittable-thread-localThreadLocal一个很有用的场景:收到请求,框架解析出用户User对象,保存到ThreadLocal中,然后Controller、Service中就可以直接从ThreadLocal中来获取User对象了。大部分时候,这已经足够了,直到遇到了ThreadPool...

2018-08-23 12:46:35

JVM的方法区和永久带是什么关系?

原文这这里:https://www.imooc.com/article/47149群里面有小伙伴问到这个问题,说在网上看了很多文章,但是还是没弄明白这俩是啥关系,下面我们就来详细的解释一下:什么是方法区?方法区(MethodArea)是jvm规范里面的运行时数据区的一个组成部分,jvm规范中的运行时数据区还包含了:pc寄存器、虚拟机栈、堆、方法区、运行时常量池、本地方法栈。方法区...

2018-07-26 11:07:52

java并发编程之wait&notify VS lock&condition

jdk5之前线程同步可以用synchronized/wait/notify来进行控制,jdk5以后新添加了lock/condition。他们之间有什么联系与区别的?本文就用一个例子循序渐进的给大家展示一下:首先来看一个有界缓存的例子:abstractclassBaseBoundedBuffer<V>{privatefinalV[]buff;private...

2018-07-06 09:55:37

java里面i++与++i到底哪一种写法的效率高?

首先我们来看一段简单的代码:f1()和f2()唯一的区别在于:f1()使用的i++,而f2()使用的++i。那么这两种情况之下,哪一种写法的效率高呢?单纯从源码层面我们是看不出来到底是哪一种效率高的,但是我们可以用javap打印一下字节码,然后再来看,命令行执行:javap-verboseSelfAdd.class我们截取两个方法的字节码:从字节码我们就可以很明显的看出来,这两种循环的写法的效...

2018-07-04 08:41:09

Java中如何做GC调优?

首先要明确以下几个东西:(1)评价GC性能的指标有哪些?一个是吞吐量,另一个是最大停顿时间。什么叫吞吐量?GC里面的吞吐量说的是cpu花在垃圾回收的时间和花在应用程序上的时间的占比。什么叫最大停顿时间?就是中断应用程序来做垃圾回收的应用停顿时间。(2)常用的GC有哪些?GC分为3大类:serial、parallel、concurrent(CMS、G1)。parallel和concurrent是...

2018-07-02 16:52:22
奖章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周上午根据用户上周的博文发布情况由系统自动颁发。