- 博客(23)
- 收藏
- 关注
原创 开发规范
规范一阿里开发规约-编程规约-控制语句-第六条 :超过 3 层的 if-else 的逻辑判断代码可以使用卫语句、策略模式、状态模式等来实现。if (conditionA) { 逻辑1} else if (conditionB) { 逻辑2} else if (conditionC) { 逻辑3} else { 逻辑4}这种代码虽然写起来简单,但是很明显违反了面向对象的 2 个基本原则:单一职责原则(一个类应该只有一个发生变化的原因):因为之后修改任何一个
2020-12-29 09:48:37
298
原创 开发常见注意点
开发常见注意点关于@Builder的使用结论先行这里重点说一下结论三。关于@Builder的使用结论先行1. @Builder无法直接使用字段默认值2. 需要在字段上使用@Default,才可以使用字段默认值3. @Builder会自动生成一个全参的构造函数其实这三个结论都比较简单,只是平时不了解的开发者便会忽略,从而导致异常发生。这里重点说一下结论三。@Builder 在使用后,会给对应的类默认加上全参构造函数,当与数据库交互返回对象时,若数据库返回的sql中缺少某个字段,便会出现异常。
2020-12-23 10:36:45
257
原创 synchronized 解析
一提到锁,java程序员立马想到的便是 synchronized。接着如果让你说说你对 synchronized 的理解。你力马开启了你的表演。synchronized 可以让线程串行化的去控制线程,保证方法某一时刻只有一个线程去执行,从而保证线程安全性;synchronized 可以修饰方法,对象实例,某个类,代码块。。。然后就嗯…或许对 synchronzied 理解更深的可以说到它的锁升级过程,它的底层模型 monitor管程,并会说出 monitorr 中有些什么,这其中是怎么工作的
2020-12-12 16:55:48
507
转载 Java 线程池 ThreadPoolExecutor 八种拒绝策略浅析
前言谈到 Java 的线程池最熟悉的莫过于 ExecutorService 接口了,jdk1.5 新增的 java.util.concurrent 包下的这个 api,大大的简化了多线程代码的开发。而不论你用 FixedThreadPool 还是 CachedThreadPool 其背后实现都是ThreadPoolExecutor。ThreadPoolExecutor 是一个典型的缓存池化设计的产物,因为池子有大小,当池子体积不够承载时,就涉及到拒绝策略。JDK 中已经预设了 4 种线程池拒绝策略,下面结
2020-08-29 11:48:26
788
转载 利用redis做次数限制的小结
有一些需要限制次数的场景,比如api调用次数限制、在一段时间内只能使用几次的限制,在几秒内、几分钟时间内只能使用几次的限制。简单的实现可以把需要做限制的次数放在redis中,利用redis的特点进行限制。这里只是对本人的一些用法做个简单的小结。1.在单位时间内只能使用N次的限制常见于api调用次数限制,时间可以是1秒、1分钟、1小时,1天。其他规则的时间限制,需要自定义。这种的用法相对简单,直接用incr方法就可以实现。这里有个小细节,是先用get方法来获取key的值判断是否达到上限,还是直接用inc
2020-08-29 11:28:20
3281
3
转载 Spring IoC有什么好处呢?
转载链接:https://www.zhihu.com/question/23277575/answer/169698662要了解控制反转( Inversion of Control ), 我觉得有必要先了解软件设计的一个重要思想:依赖倒置原则(Dependency Inversion Principle )。什么是依赖倒置原则?假设我们设计一辆汽车:先设计轮子,然后根据轮子大小设计底盘,接着根据底盘设计车身,最后根据车身设计好整个汽车。这里就出现了一个“依赖”关系:汽车依赖车身,车身依赖底盘,底盘依赖轮子
2020-08-23 10:54:46
106
原创 Java打印下载文件
打印和下载其实是两个不同的概念。打印: 将pdf平铺在浏览器上;下载: 以文件的形式在浏览器下载。1.直接通过Response输出流写文件,浏览器表现为下载文件response.setContentType("application/x-download");response.addHeader("Content-Disposition", "attachment;filename="+...
2020-03-20 22:02:12
505
原创 JVM调优相关好文推荐
dump文件分析工具:MAT使用场景:a)OutOfMemoryError的时候,触发full gc,但空间却回收不了,引发内存泄露b)java服务器系统异常,比如load飙高,io异常,或者线程死锁等,都可能通过分析堆中的内存对象来定位原因内存分析工具:第三方内存分析工具MATMAT使用-jvm内存溢出问题分析定位OutOfMemoryError系列: MetaspaceOutOf...
2020-03-09 12:44:38
114
原创 Idea中SpringBoot项目的热部署自动化
微服务SpringBoot的自动化热部署总共分为五步:1.Adding devtools to your project2.Adding plugin to your pom.xml添加maven依赖3. Enabling automatic build4. Update the value of快捷键:ctrl+shiift+alt+/,会出现如下图所示:点击第一个Regi...
2020-03-07 13:58:00
344
原创 AspectJ的Execution表达式常用写法
任意公共方法的执行:1.execution(public * *(..))任何一个名字以 set 开始的方法的执行:1.execution(* set*(..))AccountService 接口定义的任意方法的执行:1.execution(* com.xyz.service.AccountService.*(..))在 service 包中定义的任意方法的执行:1.execu...
2019-12-21 08:57:02
466
原创 基于Btrace的监控调试
Btrace简介 BTrace可以动态地向目标应用程序的字节码注入追踪代码两种运行脚本方式 1. 在JVisualIVM中添加Btrace插件,添加classpath 2. 使用命令行 btrace <pid> <trace_script>拦截拦截方法 普通方法 @OnMethod(clazz="",method="") 构造方法 @OnMetho...
2019-12-08 19:24:04
134
原创 基于JDK命令行工具的监控
JVM的参数类型标准参数-help-server -client-version -showversion-cp -classpathX参数 -Xint 解释执行 -Xcomp 第一次使用就编译成本地代码 -Xmixed 混合模式,JVM自己来决定是否编译成本地代码XX参数Boolean类型 格式:-XX:[+-]<name>表示启用或者禁用...
2019-12-07 21:48:40
110
原创 tomcat8 优化过程
内存优化在开发当中,当一个项目比较大时,依赖的jar包通常比较多,我们都知道,在应用服务器启动时,会将应用引用到的所有类通过ClassLoader依次全部加载到内存当中。Java的逻辑内存模型大致分为堆内存、栈内存、静态内存区,也称持久区,该区的内存不会被GC回收。堆内存用于存储类的实例、数组等引用类型数据,也就是用new生成的对象,都存放在这里,栈内存存储局部变量(如:方法参数),静态内存区存...
2019-12-05 10:20:44
184
原创 对多线程future以及futureTask的理解
异步计算助手FutureTask由来原因: 无论是Runnable实例还是Callable实例所表示的任务,只要我们把这些任务扔到线程池中,那么这些任务就是异步任务。 1.采用Runnbale实例来表示异步任务,其优点:任务既可以以相应的Runnable实例为参数创建并启动一个工作线程,也可以交给一个线程池或者Executor的其他实例类来执行;其缺点:我们无法直接获取任务的执行结果。 2...
2019-11-24 20:32:28
355
原创 redis默认外界不能访问
错误原因:Redis搭建好后一般都是使用编程语言进行连接调用,默认Redis的设置是不允许外界访问的,外界telnet请求Redis服务器,以及通过客户端连接redis的时候会报错连接超时:这说明目前处在保护模式上,查看Redis的注释可以了解,连接Redis只能通过本地(127.0.0.1)来连接,而不能使用网络IP(192.168.1.x)来连接,如果需要请修改配置文件redis.conf...
2019-11-18 16:53:33
433
原创 调用list的clear方法和new一个新的list相比
再一次偶然的机会,看见了list.clear() 方法(ps:很少之前很少看API,只知道常用的,之后要准备看API了),觉得奇怪,便去深入源码研究了一下clear方法的特别之处。个人之前在循环中要么是每次new一个list集合,要么就是使 list=null,但是在大批量大数据量循环的时候,确实影响性能的开销。ArrayList 的 clear 方法源码如下:/** * Remo...
2019-11-11 09:45:11
3086
2
原创 微服务--SpringBoot文件上传异常,解决The temporary upload location xxx is not valid
springBoot搭建的微服务平台,项目部署在linux上,自部署上线以来一直没有毛病,突然有一天上传出现问题,并且后台不报任何日志,根本无从下手解决。最后通过抓包发现总是报异常500的错误,而报500异常的错误是:org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet re...
2019-11-08 22:24:04
550
原创 log日志输出注意
1. 一个最基本的例子使用Logging框架写Log基本上就三个步骤引入loggerg类和logger工厂类声明logger记录日志下面看一个例子//1. 引入slf4j接口的Logger和LoggerFactoryimport org.slf4j.Logger;import org.slf4j.LoggerFactory;public class UserService {...
2019-10-25 16:12:23
2086
原创 分布式锁Redis以及Ression分析
参考博文:https://crazyfzw.github.io/2019/04/15/distributed-locks-with-redis/http://wuwenliang.net/2019/07/23/%E5%86%8D%E8%B0%88%E5%88%86%E5%B8%83%E5%BC%8F%E9%94%81%E4%B9%8B%E5%89%96%E6%9E%90Redis%E5%AE%...
2019-10-14 20:49:42
6230
原创 Spring-boot: StandardMultipartFile不能转换为CommonsMultipartFile的问题
异常信息.w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.method.annotation.MethodArgumentConversionNotSupportedException: Failed to convert value of type 'org.springframework....
2019-10-14 20:42:23
5625
原创 Excel大数据量导出
之前用这个方式的导出,当数据量达到65535的时候i,便会报错,达到excel的最大限制,困扰了博主半天,Workbook wb = new HSSFWorkbook();查询了很久,发现有一个新的方法:Workbook wb = new SXSSFWorkbook();用这种导出时能达到大数据量级别,并且在导出10万条数据时,本地导出仅仅用了不到五十秒。图中采用的是ms:具体代...
2019-10-09 16:38:59
1266
原创 excel服务器导出,避免文件损坏
ecplise下载excel模板,从服务器导出,主要分为两部:1.写导出功能;2.当用maven打包编译时,指定不过滤excel格式的文件。具体如下:导出代码FileInputStream inputStream=null; ServletOutputStream outputStream=null; try { String fileName...
2019-10-08 16:02:42
400
原创 开发接口需注意
后端开发接口应注意1.是否有参数校验;2.是否所有的情况都测试过了,如果可以请写单元测试;3.是否返回数据准确明朗,响应状态码是否正常;4.文档是否已经完备。...
2019-10-04 22:03:58
187
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人