自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

临窗,听雨声

翻过了一座又一座高山之后,回首望去,不过如此。

  • 博客(124)
  • 收藏
  • 关注

原创 以BIO的思维模拟NIO

以BIO的思维模拟NIO此处使用NIO的ServerSocketChanle使用一个LIst来装所有的请求(clinet)所有的请求来了,先设置非阻塞,然后放入list中遍历list,拿出里面所有的 client,进行读取数据,如果没有读到就不做处理,如果报错了则证明client端已经关闭代码如下:这就是个非阻塞的IOpackage bio;import lombok.exte...

2020-03-24 14:57:40 287 1

原创 1024记录下

1024记录下现在转 github 写笔记了。github 地址:https://github.com/winterme/study

2019-10-24 09:34:49 2955

原创 csdn的博客不写了,转github

csdn博客不写了,转githubhttps://github.com/winterme/study以后github记笔记

2019-09-27 17:31:46 381

原创 RSA加密敏感数据

RSA加密敏感数据前端从后台获取公钥前端使用公钥对 密码 进行加密前端将请求发送到后台,后台使用私钥进行解密源码地址:https://github.com/winterme/spring-boot-rsa文章参考:https://www.jianshu.com/p/87d2148a4298...

2019-08-16 17:30:06 483

原创 手写固定线程池

我们都知道线程池高效,是因为其节省了线程创建的资源。那么到底是怎样节省的呢?其实也很简单,就是根据给的知道线程池大小去new 多少个 Thread ,然后在 run 方法里面无限循环,从线程池的 任务队列里面获取方法执行。代码实例:import java.util.ArrayList;import java.util.Collections;import java.util.Li...

2019-08-09 00:27:12 249

原创 netty之tcp拆包粘包问题

# 解决tcp拆包,粘包问题* 方案一:消息定长* 方案二:在包尾部加上特殊字符进行分割* 方案三:将消息分为消息头,消息体,类似与自定义协议此处示例在尾部添加特殊字符解决拆包粘包问题在 ServerBootstrap的childHandler方法里面(initChannel)添加// 设置特殊分隔符ByteBuf buf = Unpooled.copiedBuffer(...

2019-08-06 23:29:02 192

原创 GetToken的故事

今天写一个接口,接口需要获取token,然后通过token访问,但是token可能会过期(失效),于是我要写一个获取token的方法,保证所有请求获取到的 token 都是有效的,那么,方案来了,声明一个标识符,标识是否需要枷锁,在token失效,刷新token的时候,进行枷锁,getToken 等待,刷新token的时候先将 标识设置为 true,然后获取完新的token之后设置为false...

2019-08-06 22:36:53 3485 1

原创 maven打包的时候将依赖的jar包也打进去

学到了一个新知识,记录一下:https://blog.csdn.net/xb12369/article/details/79966633<plugins> <!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 --> <plugin> <grou...

2019-07-21 23:30:44 2947

原创 java 内存区域划分与内存溢出异常(浅谈解决OutOfMemoryError)

本文章根据周志明写的深入理解jvm第二章,以及个人的理解,查阅的资料而编写以下内容不做说明,jdk指1.6,虚拟机指 hotspot运行时数据区根据《java虚拟机规范 SE7版》 规定,java虚拟机所管理的内存将会包括一下几个运行时数据区1.程序计数器 程序计数器是一块较小的内存区域,用于当前执行程序的字节码的行号指示,如果java在执行 native 方法的时候...

2019-07-21 14:04:02 701

原创 学习设计模式

代码都在github上,可以看代码,看md文件https://github.com/winterme/DesignPatterns/blob/master/README.mdhttps://github.com/winterme/DesignPatterns/

2019-07-18 17:03:36 112

原创 netty之 hello word

这篇文章介绍netty的最基本的输出 hello word。该文章根据 并发编程网的译文进行实现https://ifeve.com/netty5-user-guide/首先引入包:<!-- https://mvnrepository.com/artifact/io.netty/netty-all --><dependency> <groupI...

2019-07-13 17:23:37 181

原创 使用 AIO 进行网络编程=>模拟 Http服务器

此文章用于熟悉 AIO 的基本操作之前用 NIO 写过,地址:https://blog.csdn.net/yali_aini/article/details/91978722步骤:1.创建线程池 2.创建线程组 3.创建服务器通道 4.进行绑定 (服务器通道绑定 InetSocketAddress) 5.进行阻塞代码:import java.net.InetSocket...

2019-06-18 22:00:09 678

原创 使用aop+redis+注解 实现 限制单位时间内访问接口的次数

今天上午看博客,看到了一篇大佬写的文章:https://blog.csdn.net/Muscleheng/article/details/91492302讲诉了怎样根据IP限制指定时间内访问接口的次数,看完之后,发现有点像是硬编码,不够灵活,个人觉得 使用 aop+自定义注解可能会更好一些。源码地址:https://github.com/winterme/SpringBoot-aop-an...

2019-06-17 17:14:21 3193 4

原创 使用 NIO 进行网络编程=>模拟 Http服务器

这篇文章只是为了 熟练使用 nio 写的个小 demo原来的 bio 的在这里:https://blog.csdn.net/yali_aini/article/details/82598307我就直接放代码了:import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuff...

2019-06-14 15:36:54 294

原创 使用拦截器记录每个请求的 url 和执行所需的时间

1.实现 HandlerInterceptor 接口因为要记录执行时间,所以这里使用 ThreadLocalimport org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http....

2019-06-12 15:49:34 2668

原创 javaweb 上传文件使用NIO进行读写

import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework....

2019-06-12 15:47:50 1551

原创 分布式事务控制解决方案

官方文档:http://www.txlcn.org/zh-cn/docs/developer.html博客记录:https://cj466.top/codes/96.html

2019-06-11 20:53:42 502

原创 使用aop动态切换数据源

参考博客园大佬描述的问题,https://www.cnblogs.com/wscit/p/6257539.html源码github地址:https://github.com/winterme/pkusoft-aop-dynamic-datasource(#)背景:由于业务的需求,导致需要随时切换15个数据源,此时不能low逼的去写十几个mapper,所以想到了实现一个数据源的动态切换数...

2019-06-05 17:15:45 1912 1

原创 思考:fastxml 的 ObjectMapper readValue(data , Map.class) 的时候,fastxml 是使用的哪个 Map

Map 是一个接口,比如说我们使用 mybatis的xml返回数据的时候,写 java.util.Map 类型,然后 Map 是接口肯定是不能实例化的,那么,返回的是 什么 类型的Map 呢?在这里,我看了 fastxml 的ObjectMapper readValue(data , Map.class) ,断点调试,进去之后,发现 在 BasicDeserializerFacrto...

2019-06-05 16:55:50 2655

原创 自定义MyBatisAutoConfiguration,MyBatis的配置从未如此简单过~(实现自己的 start)

项目 github地址:https://github.com/winterme/pkusoft-mybatisjar 包地址:链接:https://pan.baidu.com/s/1MMsZgjbm9yKkn4GfcZ1WIQ 提取码:to0t在工作中,发现我们经理写的一个包很好用,就是只需要在 yml 上配置 数据库连接信息,包路径,xml路径,mybatis 就能跑了,很方...

2019-05-29 15:28:36 3846 1

原创 ReentrantLock,Condition,ReentrantReadWriteLock.ReadLock,ReentrantReadWriteLock.WriterLock简介

ReentrantLock重入锁 重入锁,在需要同步的代码部分进行锁定,使用完毕之后一定要释放锁。实例方式:ReentrantLock lock = new ReentrantLock(true) ;后面有个 Boolean 类型的 fair 参数,是标识该锁是否公平的,默认 不公平,公平的意思就是 锁的给与基于调用顺序,先调用的,先获取,不公平则是遵循cpu调用规则,默认...

2019-05-23 23:57:03 412

原创 CyclicBarrier 类简介

CyclicBarrier 类,就像一个哨子,等所有人都准备好了之后,一声令下,全部开始跑。区别于 CountDownLatch ,CountDownLatch 是阻塞主线程,等其他的线程执行完了之后才让主线程继续执行。CyclicBarrier是阻塞子线程,等所有的子线程准备好了之后,才让所有的子线程全部开始执行具体用法: 1.实例化 final CyclicBarr...

2019-05-22 15:42:33 220

原创 ExecutorService 线程池简介

1. Executors 创建线程池的方法 newFixedThreadPool() 方法,该方法返回一个固定数量的线程池,该方法的线程数始终不变,当有一个任务提交时,若线程池中空闲,则立即执行,若没有,则会被暂缓在一个任务队列中等待有空闲的线程去执行。适用场景:可用于Web服务瞬时削峰,但需注意长时间持续高峰情况造成的队列阻塞。 newSingleThreadExec...

2019-05-22 12:21:33 281

原创 java.util.concurrent 包下容器简介

1.ConcurrentMap 接口ConcurrentHashMap:替代 HashTable,并发性能大大提升的mapConcurrentSkipListMap:替代TreeMap 可以并发排序的MapConcurrentHashMap内部使用段(Segment)来表示这些不同的部分,每个段其实就是一- 个小的HashTable,它们有自己的锁。只要多个修改操作发生在不同的...

2019-05-21 17:45:26 440

原创 Master-Worker设计模式

Master-Worker设计模式,并行计算,很实用得一个设计模式。该设计模式的好处就是 并行计算,开一定的线程数去执行需要的操作,还是空间换时间,加快处理速度思路:在 Master 里面使用三个字段,分别去装 所有的任务,所有的 子节点(Worker),装每个Worker返回数据的map,在Worker里面使用 Master 的 queue,resultMap 的引用,当 ...

2019-05-19 18:38:10 381

原创 future 设计模式

future 设计模式是一种很常见的设计模式,jdk就自带实现,Future,就是 一个线程执行之后可以获取到返回值的那个。类实现 CallAble 之后 进行线程池 submit之后返回 future对象,可以进行 get返回值。 此处自己实现一个 future设计模式的数据获取,future设计模式的好处就是 以空间换时间,获取数据的事情新开一个线程去执行,...

2019-05-19 00:35:55 275

原创 ThreadLocal简单用法-记录

ThreadLocal提供的方法:publicT get() { } publicvoidset(T value) { } publicvoidremove() { } protectedT initialValue() { }get() 获取ThreadLocal在当前线程中保存的变量的副本set() 设置ThreadLocal在当前线程中保存的变量的副本的值re...

2019-05-15 23:41:58 914

原创 CountDownLatch 简单用法-记录

参考+引用:https://www.cnblogs.com/liun1994/p/7396026.htmlCountDownLatch 是java1.5 之后在java.util.concurrent包下引入的并发类CountDownLatch能等待其他线程执行完毕后再执行自己线程,CountDownLatch是JDK 5+里面闭锁的一个实现。闭锁(latch):是一种同步方法,就像一...

2019-05-15 22:48:46 2407 3

原创 @CacheEvict 模糊删除缓存问题-RedisTemplate 模糊key删除缓存

缓存管理使用注解形式,非常方便了我们的使用,然而今天我想 使用@CacheEvict 的实和key 进行 模糊删除,发现@CacheEvict 貌似不支持这样的操作,然后想起RedisTemplate 好像支持 key的模糊匹配。于是,方法有了既然@CacheEvict做不到,那就用RedisTemplate第一步:获取key这里的key就是 : user:role*...

2019-05-07 16:25:25 6234

原创 SpringCloudEureka 服务注册与发现以及调用-例子记录

例子github地址:https://github.com/winterme/eurekaA.eureka server1.pom<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3....

2019-05-06 22:24:46 772 1

原创 Java导出数据到excel,数据量百万级别

1.pom支持 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.10-FINAL</vers...

2019-04-23 10:56:21 1574

原创 VUE基本操作-cli-小结

1.安装 vue-clinpm install vue-cli -g2.初始化项目vue init <template-name> <project-name>如果报错Failed to download repo vuejs-templates/vuedemo: Response code 404 (Not Found);则:https://www....

2019-04-09 21:34:57 150

原创 VUE基本操作==>选项

本文从五个知识点写vue选项 propsData 用于扩展自定义标签的时候构造器传值 computed 格式化数据 methods 系列知识 Watch 选项 监控数据 mixins 选项 混入 extends 选项 扩展 1.propsData 用于扩展自定义标签的时候构造器传值propsData 用于扩展自定义标签的时候构造器传值...

2019-03-26 10:17:19 411

原创 linux 基本操作记录收录

1.从一台linux机器上连接另一台linux机器ssh username@ip_or_domain2.从一台linux机器上传文件到另外一台Linux机器上scp filename username@ip_or_domain:/target_directory/3.tar.gz 文件解压tar -zxvf filename4.linux查看cpu信息cat /proc...

2019-03-21 15:49:06 254

原创 VUE基本操作==>全局API

全文从五个方面介绍 vue 的全局 apiVue.directive 自定义指令 Vue.extend 扩展实例构造器 Vue.set赋值 Vue 的生命周期 vue template模板 vue component 组件 1.Vue.directive 自定义指令vue自定义指令,就像 &lt;p v-zzq="" &gt;&lt;/p&g...

2019-03-15 17:04:53 327

原创 VUE基本操作==>基本语法入门

推荐jspang大佬的 vue 视频教程:https://juejin.im/post/5b834971f265da436d7e4a9dnode安装教程:https://www.cnblogs.com/zhouyu2017/p/6485265.html此篇文章以 script 引入的方式介绍vue基本语法 <script type="text/javascript" sr...

2019-03-04 11:24:07 1041

原创 SpringCloudEurekaServer初体验

体验spring家族产品的最好的办法就是上 spring.io ,去上面看文档。然后我在官网上找到了这个例子 https://github.com/spring-cloud-samples/eureka当然,我们这里不直接复制官网的,跑跑就完事,我们来熟悉一下流程1.项目创建spring cloud 项目其实是基于 spring boot 项目的,所以这里我们创建一个 普通的 spri...

2019-02-26 23:13:37 148

原创 RabbitMq基于订阅(Direct)模式发送消息

RabbitMq 的消息交换器有三种常用的交换模式,分别是direct 订阅模式,发布与订阅,完全匹配 fanout 广播模式 topic 主题,规则匹配今天这篇文章介绍 rabbitmq 如何基于 direct 模式进行发送消息这里我们准备两个项目。消息生产项目(rabbit-provider) 消息接收项目(rabbit-consumer)模拟项目中统一处理日志的效果,消...

2019-02-20 21:46:02 1432

原创 RabbitMq基本知识

1.为什么要用 RabbitMq?解决了哪些问题?同步变异步,同步执行的操作变成异步执行,提高系统反应效率 流量控制,秒杀的时候通过 消息队列 进行处理请求,可以设置超过多少个消息了就直接说活动结束。减轻服务器压2.消息队列基础知识provide  消息生产者,投递消息的程序 consumer 消费者,接收消息的程序3.消息队列的传递方式4.什么是队列?队列就像存放了商...

2019-02-17 17:51:18 182 1

原创 SpringBoot整合 RabbitMq 之 入门操作

rabbitmq,很好用的一个消息中间件。可以将同步进行的事情变成异步处理。这次演示在windows系统上跑,erlang 和 rabbitmq 安装也在 windows 机器上。不知道如何安装的请移步:https://www.cnblogs.com/ericli-ericli/p/5902270.html好,现在开始,此处演示 使用 rabbitmq 发送邮件1.pom ...

2019-02-17 17:42:39 300

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除