- 博客(920)
- 资源 (3)
- 收藏
- 关注
原创 springboot2 用lettuce客户端配置多个redisTemplate
MAVEN依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId></dependency><dependency> &l...
2019-09-11 10:17:09 3351 1
原创 延迟任务的实现总结
实现延迟任务的方式有很多,各有利弊,有单机和分布式的。在这里做一个总结,在遇到这类问题的时候希望给大家一个参考和思路。延迟任务有别于定式任务,定式任务往往是固定周期的,有明确的触发时间。而延迟任务一般没有固定的开始时间,它常常是由一个事件触发的,而在这个事件触发之后的一段时间内触发另一个事件。延迟任务相关的业务场景如下:场景一:物联网系统经常会遇到向终端下发命令,如果命令一段时间没有应答,...
2019-09-08 16:05:10 995
原创 Log4j2异步日志配置
简介Apache Log4j 2 is an upgrade to Log4j that provides significant improvements over its predecessor, Log4j 1.x, and provides many of the improvements available in Logback while fixing some inherent...
2019-08-28 17:29:26 11081 1
原创 Log4j2的性能为什么这么好?都是因为disruptor
一、logback和log4j2压测比较1、logback压测数据logback压测数据,50个线程,500万条日志写入时间。logback:messageSize = 5000000,threadSize = 50,costTime = 27383mslogback:messageSize = 5000000,threadSize = 50,costTime = 26391ms...
2019-08-28 17:28:00 2176
转载 Vue CLI 3搭建vue+vuex 最全分析
一、介绍Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统。有三个组件:CLI:@vue/cli全局安装的 npm 包,提供了终端里的vue命令(如:vue create 、vue serve 、vue ui 等命令)CLI 服务:@vue/cli-service是一个开发环境依赖。构建于webpack和webpack-dev-server之上(提供 如:ser...
2019-06-25 11:30:57 451
转载 Vue CLI 2.x搭建vue,目录最全分析
一、vue-cli介绍vue-cli是一个用于快速搭建vue项目的 脚手架。二、vue-cli安装、更新安装过nodeJs 、cnpm 后,全局安装vue-cli(以后其他项目可直接使用):cnpm install -g vue-cli更新:cnpm update vue-cli查看安装成功否(有版本号就是成功,V大写)vue -V查看npm注册表里vue...
2019-06-25 11:29:54 282
转载 vue-cli的webpack模板项目配置文件分析
由于最近在vue-cli生成的webpack模板项目的基础上写一个小东西,开发过程中需要改动到build和config里面一些相关的配置,所以刚好趁此机会将所有配置文件看一遍,理一理思路,也便于以后修改配置的时候不会“太折腾”。一、文件结构本文主要分析开发(dev)和构建(build)两个过程涉及到的文件,故下面文件结构仅列出相应的内容。├─build│ ├─build.js...
2019-06-23 10:02:33 262
原创 idea如何安装使用jetty runner
在IDEA中运行web应用,可以安装jetty runner插件。File-setting...点击 install。Run-edit configurations找到jetty runner ,按左上角 + 号,新建一个应用,配置如上。然后点击run 即可运行成功。...
2019-06-18 16:08:55 3054
转载 IntelliJ IDEA 2018.3常用配置图解
软件版本IntelliJ IDEA 2018.3简介IDEA的优势(相对Eclipse)1.强大的整合能力。比如:Git、Maven、Spring等2.提示功能的快速、便捷3.提示功能的范围广4.好用的快捷键和代码模板5.精准搜索安装目录结构bin容器,执行文件和启动参数等help快捷键文档和其他帮助文档jre6464 位java 运行环境libidea ...
2019-06-18 15:17:28 1080
转载 阿里是如何处理分布式事务的
分布式事务中的TCC模式,貌似是阿里提出来的,所以阿里自研的分布式事务框架总是少不了TCC的影子。服务拆分很多系统早期都是单系统服务架构,所有业务聚合在少数几个系统中对外提供服务。随着业务发展,服务之间耦合比较严重,一般会对服务进行重构,重构的主要思想也就是围绕“拆分”展开。比如按照功能进行解耦的垂直拆分,拆分之后原有系统中的业务调用,就变成了分布式的调用了,但是由于网络的不可靠性,数...
2019-06-13 10:15:43 810
原创 Redis 的持久化机制RDB和AOF有什么区别?
前言Redis作为内存级缓存,当redis实例发生问题时,内存数据容易丢失,所以需要用到持久化技术。在Redis里,提供了两种持久化方式:RDB和AOF,两种持久化方式各有优势,本篇文章为你解密redis持久化的两种方式redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File)。RDB,简而言之,就是将存储...
2019-05-31 17:35:52 1125
原创 JAVA并发包的Volatile和CAS如何不用锁保证线程安全?
前言从JDK1.5以后,引入了java.util.concurrent并发包,其中java.util.concurrent.atomic包,方便在无锁的情况下,进行原子操作。在JUC中大部分都是利用volatile关键字+CAS在不用锁的情况来保证线程安全的。本篇文章把这两个知识点给大家一个清晰的解析,只有掌握了关键字volatile和CAS机制,你才能对JUC包有一个彻底的理解。...
2019-05-31 16:24:53 2267
原创 从Header中X-Forwarded-For获取的IP一定是真实IP吗?
前言在实际项目中,用户ip的获取很重要。通过报障用户的ip来快速定位用户的请求日志,还可以通过ip访问频率来进行防盗链处理。在有些项目中,比如之前我们说过的升级,通过用户ip尾号进行一部分用户的灰度升级,还比如通过ip来区分用户的地域,进行个性化的推荐等。一般获取ip的方式。都是通过Header中的X-Forward-For、X-Real-IP或Remote addr等属性获取,但是如果确保获...
2019-05-31 14:59:21 8243 1
原创 Interceptor、Filter、Servlet有什么区别?执行顺序是什么?
前言JAVA WEB项目中,Interceptor和Filter都拦截并处理请求,都是一种面向切面的编程思想,但是他们有什么区别呢?一个工程中有很多Interceptor和Filter,他们执行顺序如何?与Servlet又有什么区别呢?本篇文章为你解密!过滤器(Filter)我们知道Filter是配置在web.xml时,比如配置如下面一段字符编码Filter:<...
2019-05-30 14:43:24 1548
原创 Cookie->Session->Token的发展旅程(二)
前言上一篇讲了为了维持HTTP协议的状态,采用了Cookie与Session机制,但是这两种机制都有自己的局限性。Cookie保存在客户端有可能被篡改,而且浏览器可以手工禁止Cookie。Session对每个用户产生一个SessionId,可以通过url或者header传递。但是Session存储在服务器端的内存中,当数据量大的时候容易发生OOM,而且不利于扩展,从一台机器扩展到两台时,就需要...
2019-05-29 15:57:21 233
原创 Cookie->Session->Token的发展旅程(一)
前言JAVA WEB项目可分为无状态与有状态。一个商城,用户添加购物车或者下订单这种操作,都是有状态的,服务器为了区分不同用户的操作,需要记录一些特殊的信息。当用户再次访问时,携带这些信息,服务器就可以区分出用户做了哪些操作。从最早的Cookie到后来的Session,再到后来的Token,本文带你了解这段发展旅程。Cookie概念你有没有碰到过这种情形,之前在搜索引擎搜索过一些商品,...
2019-05-29 15:53:31 300
转载 Java字节码4-使用Java-Agent实现一个JVM监控工具
一、概述在前面几节当中,我们构造了多个Agent。Agent由于是在main方法之前执行,我们可以做很多事情。本节中,我们将使用Agent技术来监控应用程序的JVM内存和GC信息。二、实现1、修改pom.xml<dependencies><dependency> <groupId>javassist</groupId> ...
2019-05-28 16:53:15 744
转载 Java字节码3-使用ByteBuddy实现一个Java-Agent
一、概述在前面两节中,我们实现了Agent,但是其无论在使用方式和功能上面都有一定的局限性。本文我们借助字节码工具ByteBuddy,写出高级的Agent。ByteBuddy不仅仅是为了生成Java-Agent,它提供的API甚至可以改变重写一个Java类,本文我们使用其API实现和第二节一样的功能,给目标类中的函数统计其调用耗时。二、实现1、修改pom.xml本节和上节的不同点,主...
2019-05-28 16:51:57 1025
转载 Java字节码2-instrument初体验
一、概述在上一节中Java字节码1-Agent简单上手中,我们了解了通过一个Agent可以在main方法前执行。本节中,我们将介绍java.lang.instrument,通过instrument可以实现一个Agent来修改类的字节码。下面我们会借助javassist实现一个简单的性能检测工具。目的是检测函数的调用耗时,这里仅仅抛砖引玉,instrument提供的更松耦合的AOP不止于此。...
2019-05-28 16:50:43 358
转载 Java字节码1-Agent简单上手
一、概述Java Agent是从JDK1.5及以后引入的,其作用相当于你的main函数之前的一个拦截器,即在执行main函数前,先执行Agent中的代码。Agent的代码与你的main方法在同一个JVM中运行,并被同一个类加载器所加载,被同一的安全策略 和上下文所管理。二、简单上手写一个Agent1、编写一个Java类,并包含如下两个方法中的任一个:public static voi...
2019-05-28 16:49:28 300
原创 阿里巴巴Java开发手册推荐线程池的创建方式你知道吗?
前言之前在项目中做一些任务型的项目,采用多线程方式,笔者通常用ExecutorService cachedThreadPool=Executors.newFixedThreadPool();方式创建。但是后来看阿里巴巴的JAVA开发手册,上面有个建议:【强制】线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线...
2019-05-27 12:44:57 10832
原创 如何在JAVA编程中干掉if/else、switch/case(三)
前言前面的文章咱们通过表驱动法、策略模式两种方法替换掉JAVA代码里的if...else和switch...case,今天继续介绍第三种方法:责任链设计模式。在WEB应用中,大名鼎鼎的filter链就是责任链模式的具体实现。在笔者一个实际项目中就用到责任链模式,来看看吧。场景所有移动端app开发,都会面临一个问题:升级!后台在开发升级接口时,会判断很多逻辑,比如版本是否在升级的范...
2019-05-24 15:34:39 887
原创 JAVA类:我是如何被ClassLoader加载到内存的
前言之前看到阿里的一个面试题,JAVA类的双亲委派加载机制是什么?有什么好处?工作这么久,还不知道一个JAVA类如何被加载到内存并运行起来的有点羞愧。不懂但是会搜索啊,这篇文章就这样诞生了。本文主要总结了JAVA的类加载模型(classLoader),一个类的加载过程。ClassLoaderr定义我们用eclipse或idea编写一个xxx.java文件,...
2019-05-23 11:38:56 3763
原创 JAVA对象中POJO、PO、BO、VO、DTO你能分清吗?
前言很多JAVA书都会提到POJO对象,有时候也会说Bean,尤其spring中,所有对象都称为Bean,有时候项目中有个vo包、也有model包,这些对象都是怎么区分的呢?JavaBeanJavaBean是一种JAVA语言写成的可重用组件。JavaBean符合一定规范编写的Java类,不是一种技术,而是一种规范。大家针对这种规范,总结了很多开发技巧、工具函数。...
2019-05-09 18:52:19 630 2
原创 Lombok神器带你飞(简化POJO)
前言遇到残暴的大佬,心里不由得为代码暗暗揪了心,不过撸码残暴起来,也是感觉到了一丝丝的爽~今天为大家介绍一个神器:Lombok。希望各种各样的神器带来便捷的同时也为我们带来更多的Money~本文目标希望阅读完本文的童鞋,可以快速入手项目,让我们一起残暴的撸码!思考一下首先举三个例子:Case 1:属性私有,设置其 get / setpackage com.hl...
2019-05-09 18:18:37 2889
原创 大话分布式系统里涉及到的基本概念
前言最近看了一些蚂蚁金服的面试分享文章,里面多次提到分布式系统涉及的概念,比如分布式事务、接口的幂等性,乐观锁、数据一致性等。笔者一时也说不清楚,后来查询了一些资料,整理下来,以备后用。系统衡量关键指标QPS:单位时间内处理完请求次数。一个系统的qps是100,则代表一秒钟内处理100个请求。TPS:单位时间内处理完事务的次数。在分布式系统中,对应的是...
2019-05-09 10:00:58 272
原创 JAVA开发需要的环境准备
开篇记俗话说:工欲善其事必先利其器。JAVA开发最重要的就是配置好环境以及安装开发工具。本文从0基础开始,介绍工作中用到的工具以及优化配置,提高开发效率。随着时间的发展,开发工具也在变化,比如早期的代码库使用的是SVN,现在更多的是使用GIT。有人喜欢使用Eclipse,现在很多人也喜欢使用IDEA开发平台。本文重点介绍Eclipse、JDK、SVN、GIT、Xshell、MAVEN等。...
2019-05-09 10:00:13 4443
原创 三十岁应该知道的职场规则
开篇记千里之行始于足下,做技术这行更多的是要脚踏实地,逐步积累的过程。做编程不能浮躁,要想提高技术不仅要读万卷书,还要加以更多的实践才能提高自己的水平。猫叔毕业以来,参加工作五年半,仍觉编程知识匮乏,实践不足。由此,开此公号以记录工作之点滴,同时系统梳理知识理论以备此后翻阅。也希望刚踏入编程之门的后来人能从此公号得到一点点启发和成长,慢慢深夜聊以慰藉。开此号,也不止为了谈技术,猫叔也会把在职场...
2019-05-09 09:59:19 429
原创 如何在JAVA编程中干掉if/else、switch/case(二)
前言上一篇中介绍了采用表驱动(map)方式和Optional方式取代if...else、switch...case逻辑。本章采用JAVA设计模式之策略模式抽象公共方法,剥离像map这样的紧耦合操作,对扩展开放,只关心自己的handler逻辑即可。策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个...
2019-05-06 17:50:42 738
原创 如何在JAVA编程中干掉if/else、switch/case(一)
前言if...else在每一种语言中都存在,但是代码中如果存在大量的if...else语句,就会造成程序的可读性变差,可维护性变差,进而危害整个系统。同样switch...case也会让代码变得冗余,我们称这样的代码有坏代码的味道,为了优化掉系统中的if...else和switch...case,猫叔做了一个系列,研究可替代方案。这一篇我们重点讲解使用java8中的optional和lambd...
2019-05-06 14:37:33 2074
转载 理解、学习与使用 JAVA 中的 OPTIONAL
从 Java 8 引入的一个很有趣的特性是Optional 类。Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都非常了解的异常。本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空。Optional 是 Java 实现函数式编程的强劲一步,并且帮助在范式中实现。但...
2019-05-05 17:47:31 164
转载 Xmanager4注册码
Xmanager简介:Xmanager包含好多工具Xbrowser,Xshell,Xftp等1、Xbrowser可以远程访问linux/unix的X window桌面,类似windows的远程桌面,非常好用。2、Xshell可以替代SecureCRT和putty,不过他们的功能都类似。通过telnet,ssh等方式访问linux/unix/windows等服务器。3、Xftp可以当作...
2019-04-27 18:28:32 3548
转载 eclipse优化:最详细
字体需要修改tomcat配置jdk配置选中文件,快速打开文件位置eclipse优化文件默认打开方式设置每个字母自动提示checkstyle设置tomcat内存分配配置项目热部署General > Startup and Shutdown : 移除所有在启动时加载的插件。General > Editors > Text ...
2019-04-27 18:08:41 1377
转载 SpringBoot整合Swagger2
手写Api文档的几个痛点:文档需要更新的时候,需要再次发送一份给前端,也就是文档更新交流不及时。 接口返回结果不明确 不能直接在线测试接口,通常需要使用工具,比如postman 接口文档太多,不好管理Swagger也就是为了解决这个问题,当然也不能说Swagger就一定是完美的,当然也有缺点,最明显的就是代码移入性比较强。其他的不多说,想要了解Swagger的,可以去Swagger...
2019-04-15 16:50:00 143
转载 Swagger从入门到精通
前言编写目的本文介绍如何使用Swagger编写API文档。通过阅读本文,你可以:了解swagger是什么 掌握使用swagger编写API文档的基本方法涉及范围 本文包括对swagger specification(以下译作”规范“)的介绍,如何使用swaager协议编写出功能完整、结构清晰的API文档,以及项目实践中需要注意的问题。 swagger的生态完整,从文...
2019-04-15 15:40:39 1378
转载 SimpleDateFormat时间格式化存在线程安全问题
想必大家对SimpleDateFormat并不陌生。SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出,但如果使用不小心会导致非常微妙和难以调试的问题,因为 DateFormat 和 SimpleDateFormat 类不都是线程安全的,在多线程环境下调用 format() 和 parse() 方法应该使用同步代码来避免问题。下面我们通过...
2018-12-24 12:01:13 1397
转载 运维监控数据模型
Counter(计数器)模型计数器是一个累积指标,单调递增,其值仅能增长或重置为0。类似于“服务请求数”、“任务完成数”和“错误数”等可以使用计数器模型,而“进程数”等可能会出现下降的指标不适合使用计数器模型Gauge(数值)模型数值模型代表了简单的整形或非整形数字值,值可任意上升或下降。类似于“温度”、“内存使用率”等可以使用数值模型。Histogram(直方图)模型直方图模型比较...
2018-11-02 16:26:29 1699
转载 YAML快速入门
我们学习Java,都是先介绍properties文件,使用properties文件配合Properties对象能够很方便的适用于应用配置上。然后在引入XML的时候,我们介绍properties格式在表现层级关系和结构关系的时候,十分欠缺,而XML在数据格式描述和较复杂数据内容展示方面,更加优秀。到后面介绍JSON格式的时候,我们发现JSON格式比较XML格式,更加方便(除去数据格式限制之外),所以...
2018-10-19 14:58:02 590
转载 Coverity代码静态检测工具介绍
使用了Coverity代码静态检测工具。功能很强大,超乎我的期望。主要功能如下:列出不会被执行到的代码 列出没被初始化的类成员变量 列出没有被捕获的异常 列出没有给出返回值的return语句 某个函数虽然有返回值,但调用该函数的地方没有用到它的返回值,这也会被列出来 列出没有被回收的new出来的对象 列出没有被关闭的句柄 精确定位到代码行,并提供逐层展开函数的功能 列出可能的数...
2018-08-27 16:05:13 25013 3
转载 Shiro 基础教程
一、前言Apache Shiro 是 Java 的一个安全框架。功能强大,使用简单的Java安全框架,它为开发人员提供一个直观而全面的认证,授权,加密及会话管理的解决方案。二、介绍2.1 功能特点Shiro 包含 10 个内容,如下图:1) Authentication:身份认证/登录,验证用户是不是拥有相应的身份。2) Authorization:授权,即权限验证,验...
2018-08-23 17:14:31 316
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人