
其他
CodersCoder
有人见星辰,有人见尘埃。
展开
-
springboot使用http发起远程服务调用,请求参数包含StandardMultipartHttpServletRequest
问题记录方便后续使用原创 2023-04-27 16:29:26 · 643 阅读 · 1 评论 -
BeanUtils工具类
public class BeanUtils { private static final String DEFAULT_HYPHEN = "-"; /** * 对象拷贝,先使用Spring的BeanUtils进行浅拷贝,再尝试拷贝属性名称相同、但类型不同的字段 * * @param source 源对象 * @param target 目标对象 */ public static void copyProperties(Objec原创 2023-04-07 16:13:15 · 195 阅读 · 0 评论 -
Java使用poi解析excel工具类
package cn.com.gome.scot.alamein.business.report.common.util;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.*;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileInputStream;import java.io.FileN原创 2022-05-18 17:51:09 · 879 阅读 · 0 评论 -
Java常用excel导出实现
最近在做很多报表相关的开发,包括使用shell和hive将大数据汇总,然后页面做展示,还有将结果导出excel发送给相关负责人,由于导出表格的时候,有很多场景,现在针对几种常用场景,进行一些整理,方便以后使用。1.少量数据,使用alibaba.excel.EasyExcelExcelUtils.java:@Slf4jpublic class ExcelUtils { /** * Excel模板导出 * * @param templateInputStream原创 2022-03-11 14:43:29 · 2932 阅读 · 0 评论 -
近期一些开发规范上的问题记录
1.log打印一定要在接口调用处和数据返回处加上log打印调用方法名和出入参,方便日志排查。在业务逻辑开发处,对一些关键点进行日志打印,方便在逻辑处理时进行问题排查。日志需要精简,不需要过多,能简单明确定位到问题即可。2.精度问题普通的Double类型直接做加减乘除的时候会出现精度缺失,需要用用BigDecimal类。 public double add(double d1,double d2){ BigDecimal bd1 = new BigDecimal(Doubl原创 2021-12-02 15:18:01 · 150 阅读 · 0 评论 -
拉勾课堂--代码优化法则
代码优化法则1.使用局部变量可避免在堆上分配由于堆资源是多线程共享的,是垃圾回收器工作的主要区域,过多的对象会造成 GC 压力。可以通过局部变量的方式,将变量在栈上分配。这种方式变量会随着方法执行的完毕而销毁,能够减轻 GC 的压力。2.减少变量的作用范围注意变量的作用范围,尽量减少对象的创建。如下面的代码,变量 a 每次进入方法都会创建,可以将它移动到 if 语句内部。public void test1(String str) { final int a = 100; if (!原创 2020-09-15 18:58:15 · 440 阅读 · 0 评论 -
Lua入门学习
简介lua是什么Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。特性支持面向过程(procedure-oriented)编程和函数式编程(functional programming);自动内存管理;只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象;语言内置模式匹配;闭包(closure);函数也可以看做一个值;提供多线程(协同进程,并非操作系统所支持的线程)支持;原创 2020-09-13 16:42:09 · 462 阅读 · 0 评论 -
MySQL中索引相关知识小结
索引索引是什么MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。我们可以简单理解为:快速查找排好序的一种数据结构。Mysql索引主要有两种结构:B+Tree索引和Hash索引。我们平常所说的索引,如果没有特别指明,一般都是指B树结构组织的索引(B+Tree索引)。索引分类主键索引: 数据列不允许重复,不允许为NULL,一个表只能有一个主键。唯一索引: 数据列不允许重复,允许为NULL值,一个表允许多个列创建唯一索引。普通索引: 基本的索引类型,没有唯一原创 2020-06-24 17:15:56 · 170 阅读 · 0 评论 -
Unsafe类学习
简介Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别、不安全操作的方法。Unsafe提供的API大致可分为内存操作、CAS、Class相关、对象操作、线程调度、系统信息获取、内存屏障、数组操作等几类。如若想使用这个类,该如何获取其实例?有如下两个可行方案。其一,从getUnsafe方法的使用限制条件出发,通过Java命令行命令-Xbootclasspath/a把调用Unsafe相关方法的类A所在jar包路径追加到默认的bootstrap路径中,使得A被引导类加载器加载,从原创 2020-06-23 18:49:02 · 230 阅读 · 0 评论 -
JAVA反射机制简单学习
获取类对象1.类对象对象之间区别:例如zhangsan和lisi都是User对象,他们的区别是每个人有不同的姓名,性别,年龄等等…类之间的区别:例如User和Good都是类,他们的区别是都有不同的方法和属性等等…通过上述可以引申出类对象,就是用于描述这种类,都有什么属性,什么方法的。2.获取类对象获取类对象一般有3种方式Class.forName类名.classnew 类名().getClass()在一个JVM中,一种类,只会有一个类对象存在。所以以上三种方式取出来的类对象,都是一样原创 2020-06-20 14:26:22 · 505 阅读 · 0 评论 -
IO网络编程(五)
Netty组件Channel、EventLoop 和 ChannelFutureChannel、EventLoop 和 ChannelFuture这三个抽象类聚合在一起,可以被认为是 Netty 网络抽象的代表: Channel—Socket; EventLoop—控制流、多线程处理、并发; ChannelFuture—异步通知。1.Channel接口基本的 I/O 操作(bind()、connect()、read()和 write())依赖于底层网络传输所提供的原语。在基于 Java原创 2020-06-13 18:13:09 · 187 阅读 · 0 评论 -
springboot使用SHA256加密算法对接口访问控制
使用场景由于业务系统较多,且存在很多个提供给第三方系统的查询接口,第三方系统属于外部系统,个别系统在调用内部系统接口时可能存在安全风险,在周五项目组评审后决定,在对外提供的接口中,请求方需要添加私钥请求校验,我方使用 SHA256 算法计算签名,然后进行Base64 encode,最后再进行urlEncode,来得到最终的签名。周末闲来无事,简单研究一波(基于内网中其他系统已有的类似功能,结合外网资料)。学习使用创建一个简单的springboot项目,目录结构如下:由于并不是对所有接口进行过滤验证原创 2020-05-31 17:31:03 · 8761 阅读 · 3 评论 -
腾讯课堂Redis简单学习
1.redis核心数据结构redis核心数据结构有5种:string,hash,zset,list,set2.应用场景String应用场景单值缓存,对象缓存:利用JSON强大的兼容性、可读性和易用性,将对象转换为JSON字符串,再存储在string类型中,是个不错的选择,如用户信息、商品信息等。分布式锁:Redis 是单线程,多路复用方式提高处理效率。我们可以借助中间件Redis的setnx()命令实现分布式锁。setnx()命令只会对不存在的key设值,返回1代表获取锁成功。对存在的key设值原创 2020-05-28 20:56:00 · 283 阅读 · 0 评论 -
IO网络编程(四)
netty客户端的创建(简单入门)netty客户端创建时序图步骤 1:用户线程创建 Bootstrap实例,通过 API设置创建客户端相关的参数,异步发起客户端连接。步 骤 2: 创 建 处 理 客 户 端 连 接、I/O 读 写 的 Reactor 线 程 组NioEventLoopGroup, 可以通过构造函数指定 I/O 线程的个数,默认为 CPU内核数的 2 倍;步骤 3:通过 Bootstrap 的 ChannelFactory 和用户指定的 Channel 类型创建用于客户端连接的 Ni原创 2020-05-25 19:03:09 · 279 阅读 · 0 评论 -
IO网络编程(三)
netty服务端的创建netty服务端创建时序图步骤 1:创建 ServerBootstrap 实例。ServerBootstrap 是 Netty 服务端的启动辅助类,它提供了一系列的方法用于设置服务端启动相关的参数。步 骤 2: 设 置 并 绑 定 Reactor 线 程 池。Netty 的 Reactor 线 程 池 是EventLoopGroup,它实际就是 EventLoop 的数组。EventLoop 的职责是处理所有注册到本线程多路复用器 Selector 上的 Channel,Se原创 2020-05-24 20:03:33 · 185 阅读 · 0 评论 -
IO网络编程(二)
NIO简介有人称之为 New I/O,因为它相对于之前的 I/O 类库是新增的,所以被称为 NewI/O,这是它的官方叫法。但是,由于之前老的 I/O 类库是阻塞 I/O,New I/O 类库的目标就是要让 Java 支持非阻塞 I/O,所以,更多的人喜欢称之为非阻塞 I/O(Non-block I/O),由于非阻塞 I/O 更能够体现 NIO 的特点,所以本文使用的NIO 都指的是非阻塞 I/O。IO是面向流的,NIO是面向缓冲区,面向块的。NIO相关的包都在java.nio包下,并且对原来java.原创 2020-05-22 14:38:53 · 152 阅读 · 0 评论 -
IO网络编程(一)
Netty入门1.传统的BIO编程网络编程的基本模型是 Client/Server 模型,也就是两个进程之间进行相互通信,其中服务端提供位置信息(绑定的 IP 地址和监听端口),客户端通过连接操作向服务端监听的地址发起连接请求,通过三次握手建立连接,如果连接建立成功,双方就可以通过网络套接字(Socket)进行通信。在基于传统同步阻塞模型开发中,ServerSocket 负责绑定 IP 地址,启动监听端口;Socket 负责发起连接操作。连接成功之后,双方通过输入和输出流进行同步阻塞式通信。原创 2020-05-21 16:44:07 · 221 阅读 · 0 评论 -
JVM相关理论知识
JVM 内存区域在 Java 中,JVM 内存区域主要是指的运行时的数据区,主要分为堆、程序计数器、方法区、虚拟机栈和本地方法栈。1.堆对于大多数应用来说,堆是java虚拟机管理内存最大的一块内存区域,因为堆存放的对象是线程共享的,所以多线程的时候也需要同步机制。注意:它是所有线程共享的,它的目的是存放对象实例。同时它也是GC所管理的主要区域,因此常被称为GC堆。堆被划分为新生代和老年代,新生代又被进一步划分为 Eden 和 Survivor 区,最后 Survivor 由 From Survivo原创 2020-05-20 20:10:42 · 156 阅读 · 0 评论 -
学习系列之并发编程(五)
Java内存模型——JMM简介在不同的硬件生产商和不同的操作系统下,内存的访问逻辑有一定的差异,结果就是当你的代码在某个系统环境下运行良好,并且线程安全,但是换了个系统就出现各种问题。Java内存模型,就是为了屏蔽系统和硬件的差异,让一套代码在不同平台下能到达相同的访问结果。JMM从java 5开始的JSR-133发布后,已经成熟和完善起来。JMM规定了内存主要划分为主内存和工作内存两种。此处的主内存和工作内存跟JVM内存划分(堆、栈、方法区)是在不同的层次上进行的,如果非要对应起来,主内存对应的是J原创 2020-05-19 15:18:18 · 148 阅读 · 0 评论 -
学习系列之并发编程(四)
CAS1、什么是CAS?CAS:Compare and Swap,即比较再交换。java.util.concurrent.*,其下面的类使用CAS算法实现了区别于synchronouse同步锁的一种乐观锁。原创 2020-05-15 19:42:37 · 152 阅读 · 0 评论 -
学习系列之并发编程(三)
多线程队列在 Java 多线程应用中,特别是在线程池中,队列的使用率非常高。Java 提供的线程安全队列又分为了阻塞队列和非阻塞队列。1. 阻塞队列在 Java 线程池中,用到了阻塞队列。当创建的线程数量超过核心线程数时,新建的任务将会被放到阻塞队列中。我们可以根据自己的业务需求来选择使用哪一种阻塞队列,阻塞队列通常包括以下几种:ArrayBlockingQueue:一个基于数组结构实现的有界阻塞队列,按 FIFO(先进先出)原则对元素进行排序,使用 ReentrantLock、Condition原创 2020-05-14 16:55:08 · 138 阅读 · 0 评论 -
学习系列之并发编程(二)
线程池原创 2020-05-13 16:00:55 · 172 阅读 · 0 评论 -
学习系列之并发编程(一)
简介1.JUC简介在Java中,线程部分是一个重点。JUC就是java.util .concurrent工具包的简称。这是一个处理线程的工具包,JDK 1.5开始出现的。2.线程与进程1.进程与线程进程是指处于运行过程中的程序,并且具有一定的独立功能。进程是系统进行资源分配和调度的一个单位。当程序进入内存运行时,即为线程。简而言之,进程是一个程序,或者是一个程序集合。一个进程包含至少一个或多个线程。java中默认开启的线程:main线程和gc线程java开启多线程的方法:Thread,Run原创 2020-05-10 10:32:31 · 168 阅读 · 0 评论 -
ForkJoin简单入门
简介ForkJoin框架介绍从JDK1.7开始,Java就提供了ForkJoin框架用于并行执行任务,然而真正发扬光大的是在JDK1.8以后,它的思想就是讲一个大任务分割成若干小任务,最终汇总每个小任务的结果得到这个大任务的结果。ForkJoin框架其实就是一个线程池ExecutorService的实现,通过工作窃取(work-stealing)算法,获取其他线程中未完成的任务来执行。可以充分...原创 2020-05-08 18:55:17 · 293 阅读 · 0 评论 -
InfluxDB简单学习
1.InfluxDB介绍InfluxDB用Go语言编写的一个开源分布式时序、事件和指标数据库,和传统是数据库相比有不少不同的地方。类似的数据库有Elasticsearch、Graphite等。特点提供了Http接口的API来操作数据提供了类似sql的数据库语句2.InfluxDB相关名词术语介绍其中,Point由时间戳(time)、数据(field)、标签(tags)组成。还有一...原创 2020-05-07 15:52:07 · 263 阅读 · 0 评论