Java
KIWI的碎碎念
公众号:KIWI的碎碎念 | 独立博客:blog.coder4j.cn
展开
-
【并发那些事】线程有序化神器CompletionService
前言话说有一天,产品经理突然找到正在摸鱼的你。产品:『我们要加一个聚合搜索功能,当用户在我们网站查询一件商品时,我们分别从 A、B、C 三个网站上查询这个信息,然后再把得到的结果返回给用户』你:『哦,就是写个爬虫,从 3 个网站上抓取数据是吧?』产品:『呸,爬虫是犯法的,这叫数据分析,怎么样,能实现吧?』你:『可以』产品:『好的,明天上线』你:『。。。』Code 1.0你很快完成了开发...原创 2020-02-18 23:08:46 · 371 阅读 · 1 评论 -
【Jasypt】给你的配置加把锁
前言前几天,有个前同事向我吐槽,他们公司有个大神把公司的项目代码全部上传到了 github,并且是公开项目,所有人都可以浏览。更加恐怖的是项目里面包含配置文件,数据库信息、redis 配置、各种公钥私钥密码全在项目里面,也一同上传了。如果只是单纯的业务代码泄露,情况倒还好,因为别人知道你代码,要想搞你,他必须要把源码看一遍,分析漏洞。 又因为代码上线,经过了层层测试,漏洞也不好找,至少短时...原创 2020-01-05 23:24:26 · 1133 阅读 · 2 评论 -
【xmind】 使用 Java 生成思维导图
前言在日常的工作与学习中,我们经常会使用思维导图这个工具,来把抽象而又无形的思考转换成有形并且具体的图像,是理清思路,梳理逻辑的一大神器。准确的说,思维导图并不是一个具体的工具,而是一种方法。是道而不是术。实际落地时,我们通常还需要借助外部的工具。从最原始的纸和笔,到各种软件,可以说是应用尽有。目前我在使用的是 xmind 这款软件,下面就会以 xmind 为媒介间接的通过 Java 代码画...原创 2019-12-03 21:34:25 · 5416 阅读 · 2 评论 -
【并发那些事】可见性问题的万恶之源
【并发那些事】可见性问题的万恶之源硬件工程师为均衡 CPU 与 缓存之间的速度差异,特意加的 CPU 缓存,竟然在多核的场景下阴差阳错的成为了并发可见性问题的万恶之源!(本文过长,如果不是特别无聊,看到这里就可以了)前言还记得那些年,你写的那些多线程 BUG 吗?明明只想得到个 1 1 = 2 的预期,结果他有时候得到 1,有时候得到 3,但偏偏有时候他也会返回正确的 2。明...原创 2019-11-25 20:57:09 · 1123 阅读 · 0 评论 -
【并发那些事】生产者消费者问题
Step 1. 什么是生产者消费者问题生产者消费者问题也叫有限缓冲问题,是多线程同步的一个最最最经典的问题。这个问题描述的场景是对于一个有固定大小的缓冲区,同时共享给两个线程去使用。而这两个线程会分为两个角色,一个负责往这个缓冲区里放入一定的数据,我们叫他生产者。另一个负责从缓冲区里取数据,我们叫他消费者。这里就会有两个问题,第一个问题是生产者不可能无限制的放数据去缓冲区,因为缓冲区是有大小的...原创 2019-11-09 17:01:28 · 1204 阅读 · 0 评论 -
【spock】单测竟然可以如此丝滑
0. 为什么人人都讨厌写单测在之前的关于swagger文章里提到过,程序员最讨厌的两件事,一件是别人不写文档,另一件就是自己写文档。这里如果把文档换成单元测试也同样成立。每个开发人员都明白单元测试的作用,也都知道代码覆盖率越高越好。高覆盖率的代码,相对来说出现 BUG 的概率就越低,在线上运行就越稳定,接的锅也就越少,就也不会害怕测试同事突然的关心。既然这么多好处,为什么还会讨厌他呢?至少在...原创 2019-11-03 22:05:13 · 2608 阅读 · 0 评论 -
【websocket】spring boot 集成 websocket 的四种方式
集成 websocket 的四种方案1. 原生注解pom.xml<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId></dependency>...原创 2019-10-23 22:05:18 · 1752 阅读 · 0 评论 -
【并发那些事 】创建线程的三种方式
创建线程可以说是并发知识中最基础的操作了,JDK 提供的创建线程的方式,如果不包括通过线程池的话,目前有三种形式,它们分别是通过继承 Thread 类,通过实现 Runable 接口,通过 FutureTask。如下图所示下面整理了一下 3 种方法的具体使用与异同。创建线程的 3 种方法1. 继承 Thread创建一个类继承 Thread 并覆盖 run 方法class ...原创 2019-10-16 21:31:28 · 854 阅读 · 0 评论 -
【Sentinel】sentinel 集成 apollo 最佳实践
【Sentinel】sentinel 集成 apollo 最佳实践前言 在 sentinel 的控制台设置的规则信息默认都是存在内存当中的。所以无论你是重启了 sentinel 的客户端还是 sentinel 的控制台。你所设置的规则都会丢失。如果想要 sentinel 在线上环境使用,要么花钱用阿里云上的付费版本,要么自己去实现规则的持久化,如果你或你所在的公司不差钱...原创 2019-09-22 20:54:37 · 1102 阅读 · 0 评论 -
【Rocketmq】通过 docker 快速搭建 rocketmq 环境
1. 安装 Namesrv拉取镜像docker pull rocketmqinc/rocketmq:4.4.0`启动容器docker run -d -p 9876:9876 -v {RmHome}/data/namesrv/logs:/root/logs -v {RmHome}/data/namesrv/store:/root/store --name rmqnamesrv -e "M...原创 2019-09-18 22:24:25 · 1633 阅读 · 0 评论 -
【Swagger】可能是目前最好的 Spring Boot 集成 swagger 的方案
【Swagger】可能是目前最好的Spring Boot集成 swagger 的方案 据说程序员最恨的两件事:一件是别人不写文档,另一件是自己写文档。 可见文档真的是程序员生活中相爱相杀的存在。一方面对于使用者来说,一份全面、准确的文档简直就是旅行时的地图,烹饪时的菜谱,通关时的攻略。可以极大的提高对接的效率与尽可能的减少踩坑的概率。然而,一份...原创 2019-09-08 16:24:41 · 452 阅读 · 0 评论 -
【shiro】shiro学习笔记2-自定义realm
上一篇中使用的realm是shiro自带的realm,SecurityManager调用了IniRealm来进行认证。但开发中大部分是要自己实现realm的逻辑的环境jar包目录结构代码自定义realm认证程序shiro配置文件日志文件总结环境jar包pom.xml<dependencies> <!-- shiro --> <dependency> <groupId>or原创 2016-02-13 23:30:45 · 747 阅读 · 0 评论 -
【shiro】shiro学习笔记3-散列功能
对于密码,有很多种加密方式散列是其中 最常用的,shiro提供了直接支持。环境 <dependencies> <!-- shiro --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId>原创 2016-02-16 15:57:12 · 3952 阅读 · 0 评论 -
【shiro】shiro 学习笔记4-初识shiro授权
权限架构一般分为两个模块:认证与授权,前面三篇主要讲的就是认证的内容,现在开始授权环境:pom.xml <dependencies> <!-- shiro --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</arti原创 2016-02-18 16:54:05 · 446 阅读 · 0 评论 -
【spring】spring 与 redis集成
spring与redis集成有两种,一种是通过spring-data来集成,还有一种是通过 jedis,第一种集成比较简单,第二种自由度更大,本文用的是第一种方式原创 2016-09-01 00:16:33 · 1495 阅读 · 0 评论 -
【spring】AOP注解实现
spring aop常用的有以下: * 通知类型: * 前置通知(Before advice):在某连接点之前执行的通知,但这个通知不能阻止连接点之前的执行流程(除非它抛出一个异常)。 * 后置通知(After returning advice):在某连接点正常完成后执行的通知:例如,一个方法没有抛出任何异常,正常返回。 * 异常通知(After th原创 2016-09-01 00:19:44 · 663 阅读 · 0 评论 -
【多线程】1、创建线程的两种方法
【多线程】1、创建线程的两种方法继承Thread对象public class HelloThread extends Thread { @Override public void run() { System.out.println("hello thread"); } public static void main(String[] args) {原创 2016-12-12 19:38:28 · 394 阅读 · 0 评论 -
【Jmeter】- 使用 jmeter 进行 dubbo 接口测试
大家都知道 dubbo 是一个优秀 rpc 框架,它一般(dubbox 除外)通过对外提供 tcp协议的接口进行外部调用。而我们日常使用的测试工具 jmeter 并不支持 dubbo 协议的请求。所以本文到此结束,谢谢观看,再见。当然 jmeter 本身的确是不支持 dubbo 的请求,但是呢,有一个老哥,他通过 dubbo 的泛化调用特性写了一个jmeter 的插件,使用这个插件可以很方便的进行...原创 2019-09-05 11:25:02 · 1755 阅读 · 3 评论 -
【基准测试】JMH 简单入门
JMH 简单入门bdprtz)什么是 JMHJMH 是 Java Microbenchmark Harness 的缩写。中文意思大致是 “JAVA 微基准测试套件”。首先先明白什么是“基准测试”。百度百科给的定义如下:基准测试是指通过设计科学的测试方法、测试工具和测试系统,实现对一类测试对象的某项性能指标进行定量的和可对比的测试。可以简单的类比成我们电脑常用的鲁大师,或者手机常用...原创 2019-09-06 17:41:33 · 1214 阅读 · 0 评论 -
【shiro】shiro学习笔记1-shiro初识
认证流程环境代码总结认证流程Created with Raphaël 2.1.0Start构造SecurityManager环境Subject.login()提交认证SecurityManager.login()执行认证Authenticator执行认证Realm根据身份获取认证信息End环境目录 包依赖 pom.xml<dependencies> <!-- shiro -->原创 2016-02-12 21:55:38 · 430 阅读 · 0 评论