java
文章平均质量分 71
凯丽考恩
清茶_
跟自己的热爱
展开
-
【腾讯】Java安全编程指南
Java安全编程指南转载 2023-02-17 10:53:57 · 618 阅读 · 1 评论 -
jpa在定时任务中执行失败-TransactionRequiredException
jpa在定时任务中执行失败问题排查与解决原创 2023-01-29 16:01:30 · 1036 阅读 · 0 评论 -
Kafka消费异常报Failing OffsetCommit request since the consumer
一次kafka重复消费解决过程总结原创 2022-10-21 15:50:23 · 1826 阅读 · 0 评论 -
数据库版本管理工具 Flyway 使用
Flyway是一款开源的数据库版本管理工具,使用简单,应用无侵入。面向 SQL,选择 Flyway不面向 SQL,选择 Liquibase。原创 2022-10-08 16:03:44 · 5401 阅读 · 0 评论 -
poi多线程导出
目录前言poi导出问题优化背景优化思路代码实现前言几年前就想记录下关于导出的东西,正好最近又遇到了数据量偏大,需要优化导出的一个项目,这里稍微记录下思路,以及一些垃圾代码~poi导出问题查询数据量过大,导致内存溢出或者时间耗时比较严重(通过多线程分批查询) 最后下载的时候excel转换的输出流内存溢出(可通过新版的SXSSFWorkbook解决,可通过其构造函数指定在内存中缓存的行数,剩余的会自动缓存在硬盘的临时目录上)优化背景项目中的导出实际上已经优化过一版了,原创 2021-12-23 16:52:28 · 2314 阅读 · 0 评论 -
跨域测试与解决
目录前言浏览器的同源策略如何允许跨域访问如何验证后端服务是否跨域java后端支持跨域配置前言一直想写的一个自用cv工程一直懒得写,本文主要目的是存放java后台开启跨域配置代码,用于复制,顺便整理一下笔记中的跨域内容浏览器的同源策略同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互,这是一个用于隔离潜在恶意文件的重要安全机制如果两个页面的协议、域名和端口均一模一样,则认为两个页面具有相同的源,下表给出相对http://store.comp原创 2021-12-17 13:32:44 · 3411 阅读 · 0 评论 -
Mybatis-plus打印完整执行sql
前言如果你恰好使用 Mybatis-plus 框架,那么在开发环境就不能错过它提供的 PerformanceInterceptor 插件,该插件能打印 sql 执行时间以及完整的 sql 语句,非常方便复制出来分析 sql使用这里使用的 Mybatis-plus 框架比较老,是 2.3 版本的,引入依赖,然后实例化 PerformanceInterceptor 插件即可,如下<dependency> <groupId>com.baomido.原创 2021-10-25 15:34:08 · 5317 阅读 · 0 评论 -
浙政钉应用接入
一、申请入驻政务钉钉开放平台首先需要申请入驻政务钉钉开放平台上(https://openplatform-portal.dg-work.cn/portal/#/index),该平台主要用于联调测试,填写、上传相关信息后,经审核通过后,申请成功ISV租户二、接口开发联调测试首先需要自行在ISV租户内创建应用(文档参考:https://openplatform-portal.dg-work.cn/portal/#/helpdoc?docKey=ksrm&slug=xggle5),创建完...原创 2021-06-15 10:54:42 · 12746 阅读 · 2 评论 -
微信公众号授权绑定第三方应用
网页授权微信文档链接:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html这里的两个业务场景主要是通过静默授权实现,该授权链接只能在微信客户端打开,主要是依赖微信授权链接中的回调url来满足业务场景。第三方应用扫码绑定公众号前端首先根据微信的网页授权链接(回调页需要带上当前用户id)生成一个二维码,微信扫码后会自动去请求该链接,然后跳转到回调页面(该页面可展原创 2021-04-01 08:06:11 · 3108 阅读 · 0 评论 -
redis+lua实现滑动窗口限流
前言关于滑动时间窗口算法以及更多限流实践请走:接口限流实践脚本主要是利用redis的有序集合(zset)来实现,计算前一秒内已访问的次数主要使用zcount命令来计算在当前集合中指定区间分数内的成员数,如果不使用lua脚本,各命令调用之间会存在并发隐患,而redis会将整个lua脚本作为一个命令执行,保证原子操作,无需担心并发,我们可以将所有计算逻辑均放在脚本内,脚本如下:local key = KEYS[1]-- 一个时间窗口限制数量local limitCount = tonumb原创 2021-02-04 14:10:57 · 1884 阅读 · 2 评论 -
SpringBoot+Mybatis多数据源实践
一、前言随着业务量增大,数据库性能终究会遇到瓶颈,因此需要将部分业务进行分库处理,同时部分查询需要切换到性能更好的数据库,如阿里云的数仓,因此便会遇到多数据源场景,当然此时不同数据源之间的事务一致性就格外重要,本文就记录下SpringBoot+Mybatis实现多数据源事务一致的小案例二、多数据源事务这里准备记录两种实现方式,以便日后查阅方案一主要思路就是不同的数据源管理指定路径下的mapper文件,同时使用不同的事务管理类来进行事务区分,依赖spring的默认事务传播行为实现,即spr原创 2021-01-23 15:07:44 · 415 阅读 · 0 评论 -
@Value和@ConfigurationProperties获取配置信息
目录前言配置读取@Value注解中"#{}"和"${}"区别前言在java项目中,我们可以通过以下几种常用方式获取并绑定配置文件中的信息:@Value注解 Spring的Environment类(可通过接口或直接注入方式获取,然后使用getProperty()方法) @ConfigurationProperties注解(SpringBoot下使用)@ConfigurationProperties是 Springboot 提供读取配置文件的一个注解,主要用于将配置文件中每个属性的原创 2021-01-23 11:41:36 · 689 阅读 · 0 评论 -
接口限流实践
目录前言一、何为限流二、分布式限流/集群流控三、限流算法1、固定窗口计数器2、滑动窗口计数器3、漏桶4、令牌桶四、限流实践1、脚本编写2、执行限流前言目前我司采用的是网关层限流,即在 nginx 层就控制了每ip每秒仅能通过5次,主要是某部分接口调用实在太频繁,因此限制较为严格,且网关层限流太笼统,因此需要应用层也增加限流,日后可以放宽网关层限流频率,另一个问题是在ip的限制下,许多客户往往通过使用不同的ip来绕过该限制...一、何为限流接口限流是原创 2020-12-13 14:44:49 · 1226 阅读 · 0 评论 -
序列化技术初窥之Kryo、Hessian、Json
目录何为序列化JDK序列化Kryo序列化依赖快速入门三种读写方式类注册线程安全循环引用JDK序列化和Kryo序列化性能对比整合RedisTemplate测试Hessian序列化依赖快速入门Fastjson序列化依赖快速入门何为序列化简而言之,序列化就是一种处理对象流的机制,即将对象的内容流化,将数据转化成字节流,以便存储在...原创 2020-01-02 21:07:14 · 2778 阅读 · 0 评论 -
webService入门
目录前言webService是什么webService平台技术XML+XSD-Extensible Markup Language(扩展性标记语言)SOAP-Simple Object Access Protocol(简单对象访问协议)WSDL-WebService Description Language(web服务描述语言)webService调用过程webSe...原创 2019-10-31 12:10:35 · 562 阅读 · 0 评论 -
ExecutorService等待线程执行并设置超时时间的三种方式
目录前言1、使用Future.get()2、使用CountDownLatch.await()3、使用ExecutorService.awaitTermination()前言日常开发中肯定会遇到需要同步执行的线程,即主线程需要等待子线程执行完毕才能继续接下来的操作,并且线程需要在特定的时间内执行完成,例如脚本执行这一类,这时我们就可以使用ExecutorService线程池来...原创 2019-10-24 20:11:13 · 12089 阅读 · 0 评论 -
Netty入门
目录简介IO编程NIO编程Netty编程简介Netty是一款高效的网络通信框架,讲的官方一点即一个异步事件驱动的网络应用框架,用于快速开发可维护的高性能服务器和客户端,简单来说Netty主要封装了jdk的NIO包。IO编程既然说Netty是一款高性能网络通信框架,那在Netty之前服务端和客户端的通信是怎么个样子呢,也就是我们传统的IO编程。IO编程模型是阻塞...原创 2019-10-21 20:25:51 · 214 阅读 · 0 评论 -
java环境下使用Mockito进行单元测试
1. @Mock与@InjectMocks的作用@Mock:创建一个Mock@InjectMocks:创建一个实例(被测试类的实例,一般只用一次该注解)在单元测试某个类的时候,需要标注@InjectMocks,该类的变量需要添加注解@Mock,当需要用到被测试类中变量下的变量时,需要通过Mockito.when(method).thenReturn()进行初始化ps:必须使用@Ru...原创 2018-10-16 17:41:39 · 2666 阅读 · 0 评论 -
java实现二叉树遍历
二叉树的遍历是对二叉树的一种基本操作,一般可以分为递归遍历和非递归遍历,本文就直接贴代码了,二叉树图如下:先贴树节点实体类:package structure;import lombok.Data;/** * 节点实例 * Created by xujia on 2019/5/27 */@Datapublic class BinaryTreeNode { ...原创 2019-05-27 20:04:48 · 2866 阅读 · 1 评论 -
java并发编程学习
目录前言SynchronizedSynchronized同步静态方法与非静态方法的区别公平锁和非公平锁偏向锁、轻量级锁和重量级锁可重入锁和不可重入锁基于等待/唤醒的可重入和不可重入锁自旋锁的可重入与不可重入Atomic原子类CAS比较交换CountDownLatch简介使用案例源码分析Fork/Join框架简介使用案例Conc...原创 2019-06-01 21:59:02 · 636 阅读 · 0 评论 -
递归思想总结
目录前言递归概述递归的使用递归的小案例裴波那契数列二叉树的前序遍历前言前一篇在做链表题时,大多数题目都可以利用递归实现,然而递归其实又比较抽象,尤其是自己手写递归的时候有时又很难入手,这一篇特地总结下。身为一个程序猿,良好的逻辑思维能力和抽象能力是必不可少的,当然抽象能力可能更加重要,尤其是在把需求变为代码实现的时候,可能需要通过模型转换。对于我这种菜鸡来说,有...原创 2019-06-22 12:50:18 · 627 阅读 · 0 评论 -
Aop无法拦截内部方法调用的原因
目录前言Aop小案例过程分析解决方案前言今天在写系统权限校验时发现某个含有切点注解的方法进不去切面类,单元测试了下,发现在单个类内的方法调用是不能够进入切面中的,这就说明在内部方法调用时并未使用代理对象进行代理。Aop小案例为了验证这个现象,我们写个Aop的小例子,注意本案例是基于SpringBoot 2.1.3版本首先自定义一个注解,用于标识切点:...原创 2019-07-31 20:40:02 · 4458 阅读 · 4 评论 -
Activiti6.0(一)Activiti-app的安装使用及流程入门
目录一、前言二、Activiti简介三、Activiti-app安装使用四、创建第一个流程1、创建用户2、创建流程定义3、测试流程五、使用Activiti-admin查看历史记录六、获取xml文件七、工作流小结一、前言在流程服务方面也工作了挺长时间,项目上的工作流框架也在中途重构了一下子,底层工作流也从原先的手写到之后的重构成开源工作流框架Activ...原创 2019-08-10 00:21:17 · 10534 阅读 · 10 评论 -
理解每一行java代码的本质
光写java代码其实是一件很简单的事情,就算项目需要使用一门新技术时,随便google一下都能找到一大堆代码例子,然后简单学习一下api调用,接着要么自己调用、要么复制粘贴,实在不行最后再加上一堆if-else语句总能搞定大部分需求。在枯燥且无味的工作之余,有时候真的不能偷懒,比如别人这么写我也直接拷贝过来满足要求就得了,虽然能应付但是这真的是我们想要的吗?应该还是尽可能的通过自己的思考,有没...原创 2019-09-24 21:01:06 · 654 阅读 · 0 评论 -
Dubbo服务提供者单元测试
前言由于工作中使用Dubbo接口极多,在产品之间联调时往往会出现调用超时或数据错乱问题,此时想单独测试调用该提供者接口时往往需要启动整个项目,当项目较大时往往比较耗时且比较麻烦,后来发现可以直接通过API配置的方式模拟一个消费者,直接调用该接口,简单粗暴,作为单元测试异常好用,下面直接贴该单元测试:public class DubboProviderTest { /** ...原创 2019-10-11 14:32:50 · 2469 阅读 · 0 评论 -
Poi导出excel文件提示"由于一些内容不可读取,Excel无法打开"
首先描述下现象,导出后的文件使用wps可正常打开,一旦使用office则会报如上语句,需点击打开并修复按钮,错误图如下:虽然修复后数据都正常,但是测试不让过,导致我很郁闷,写过那么多次导入导出,代码明明都差不太多,唯独这次出现不兼容的问题,找了很多资料,现在总结部分原因以及楼主的最终解决方案,当然最笨的方法就是代码一行一行注释然后导出测试并找到最终的错误代码(然鹅该方法我测了n遍也没找到错...原创 2019-10-11 17:23:41 · 3922 阅读 · 1 评论 -
装饰者模式
目录前言为什么需要装饰者模式装饰者模式的实现前言该设计模式与代理模式非常相似,代理模式控制的是对对象的访问,而装饰者模式则事先传入对象并动态的增加功能。通俗一点来说,就是在原有基础上辅以装饰。举个披萨的小例子,在披萨的诞生之初,其原本是作为底层人民裹腹使用,另一方面由于披萨的面积大,也被底层人民当做吃饭的工具使用,即在上面加上各种配料、小菜,此时也省去了饭后洗碗的操作。关于披萨...原创 2019-05-26 16:05:21 · 125 阅读 · 0 评论 -
工厂模式
目录前言简单工厂模式工厂方法模式抽象工厂模式总结前言工厂模式的思想在实际开发中也算是比较常用的一种设计模式了,其本质就是为了在创建时不必显示指定创建的类型,将创建对象的具体过程隔离起来,实现解耦的最终大目标。从另一方面来说,使用工厂模式也有利于统一管理。一般说来有三种工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式。下面一一举例说明简单工厂模式类比于最初...原创 2019-05-26 14:55:01 · 128 阅读 · 0 评论 -
java启动如何保证不被销毁
例如以下两种方式:new CountDownLatch(1).await();System.in.read();---其实要保证不被销毁很简单,涉及到线程方面的知识,如果你只有一个主线程,当你启动运行完之后jvm就销毁了,但是如果有个子线程在运行,那么jvm就不会被销毁,然后就长存...原创 2018-01-17 17:17:08 · 1075 阅读 · 0 评论 -
jdk11、12、13、14面向开发者的新特性
目录前言jdk9新特性jdk10新特性jdk11新特性jdk12新特性jdk13新特性前言前两天jdk12如约而至发布了,而我们绝大部分人估计都还在用着jdk8,12其实是一个非LTS(long time support)版本,而11与8一样是LTS版,意味着下个通用的版本将从8直接到11,毕竟11包含了9和10的所有新特性,因此9和10估计就直接被废弃啦。不过9、...原创 2019-03-28 20:48:58 · 20963 阅读 · 1 评论 -
反射和注解总结及使用例子
前言:姑且算作三月的温故而知新吧 hhhh,注解在我们日常工作使用中可谓是用的很多了,然而反射却很少,因为反射一般都是在写基本框架时用的比较多,如果能更好的理解这两快其实对于我们学习是很有帮助,这里就再次回顾一下。btw 在讲反射之前,我们可以先了解下什么是静态编译与动态编译,这有助于我们自然而然的引出反射。静态编译与动态编译静态编译:一次性编译,在编译的时候把所有的模块全部编译...原创 2019-03-12 19:45:48 · 657 阅读 · 1 评论 -
java移位运算符及负数的二进制表示
前言这段时间在看源码的过程中发现好多地方都用到了移位运算符,恰好这块知识又有点遗忘,所以借此机会顺便一起回顾下移位运算符以及由此延伸出来的知识点。<<:带符号左移,低位补0,举例如下: // 正数的情况 int t = 4; System.out.println(Integer.toBinaryString(t)); /...原创 2019-02-26 22:27:17 · 324 阅读 · 0 评论 -
一个最简单的通过自定义注解形式实现AOP的例子
1.首先实现AOP实例的第一步即声明切面类,两种方式(1.基于注解形式@Aspect,2.基于xml配置,一般都通过注解来声明切面类)2.切入点表达式大致也有两种,一种是直接根据方法的签名来匹配各种方法@Pointcut("execution(xxxxxx表达式)"),另一种即标题的通过自定义注解的形式@Pointcut("@annotation(注解名)")3.首先自定义注解@Ta...原创 2018-06-13 10:01:15 · 1661 阅读 · 3 评论 -
Kafka发送消息与接收消息简单demo
一、先上pom依赖 <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>0.10.2.0<...原创 2018-09-11 16:40:05 · 9880 阅读 · 1 评论 -
Java多线程知识小结
一月Java温故而知新(Ps:希望每个月能坚持)前言:为了能时刻不忘基础,在得空时就稍微回顾一下java基础,下面是多线程相关1、volatile关键字及使用场景volatile变量是一种稍弱的同步机制,用来确保将变量的更新操作通知到其他线程。当一个变量被定义为volatile类型后,即具有两种特性:1)保证此变量对所有的线程的可见性,这里的“可见性”,即当一个线程修改了这个变量的值,...原创 2019-01-20 14:11:21 · 348 阅读 · 0 评论 -
java中可能会引起序列化错误的几种方式
前言:何为序列化?序列化就是一种处理对象流的机制,即将对象的内容流化,将数据分解成字节流,以便存储在文件中或用于在网络中传输,用的最多的场景就是在多个进程之间进行数据通信。实现序列化只需让要实现的实体类实现Serializable接口即可,该接口并没有需要实现的方法,只是为了标识该类可被序列化。更多内容请参考文章(不在本文讨论范围):https://blog.csdn.net/xlgen157...原创 2019-01-21 21:21:44 · 8891 阅读 · 0 评论 -
map与json互转以及map与string互转
map与json互转可以利用fastJson类库或者jackson类库进行转换,map与string互转利用谷歌的guava类库进行转换,guava是一款功能强大的类库工具,感觉每个java开发人员都应熟悉下.. 下面先贴pom依赖, <dependency> <groupId>org.codehaus.jackson</g...原创 2019-02-13 10:44:55 · 2263 阅读 · 0 评论 -
Spring项目实现国际化语言需求
在项目中,一般有请求访问时先根据请求所带的内容获取到其语言,然后设置到线程中,在用到国际化的地方时通过Spring的MessageSource类根据线程中的语言自动展现设置语言及获取语言思路:通过ThreadLocal实现,在每一个访问的请求线程内均设置语言,在该线程的生命周期内当使用到国际化语言时可以立马获取该语言变量,隔离了其他线程。简易代码实现:public class I18...原创 2019-02-15 23:35:54 · 703 阅读 · 0 评论 -
java项目多时区问题解决方式
前言:近期项目中由于以前的设计缺陷出现了多时区问题,一开始解决思路还错了导致折腾了好一会,特记录下来。主要现象:部署项目的服务器时区为UTC(协调世界时),客户端是CST(可理解为中国的标准时间),两者其实相差8小时,所以导致界面上的创建时间永远都少了8小时。 思考:为什么会出现这种多时区问题呢?看了下代码,发现在设计之初项目中都是以时间戳的方式存入mysql的,而不是TZ字符串的...原创 2019-02-20 20:34:12 · 5924 阅读 · 0 评论 -
过滤器和拦截器区别
各自实现:过滤器一般继承Filter接口,并主要重写doFilter方法,如下:public class Authfilter implements Filter { @Override public void init(FilterConfig filterConfig) { log.info("过滤器初始化"); } @Overri...原创 2019-04-08 21:52:05 · 221 阅读 · 0 评论