
java相关的方法
文章平均质量分 77
自由圣骑士
喜欢学习、喜欢接近新事物。
展开
-
怎样快速插入数据
1.2、实体类、mapper和配置文件定义User实体mapper接口mapper.xml文件jdbc.propertiessqlMapConfig.xml2、MyBatis实现插入30万条数据使用了 MyBatis 的批处理操作,将每 1000 条数据放在一个批次中插入,能够较为有效地提高插入速度。同时请注意在循环插入时要带有合适的等待时间和批处理大小,以防止出现内存占用过高等问题。此外,还需要在配置文件中设置合理的连接池和数据库的参数,以获得更好的性能。在上面的示例中,我们每插入10原创 2024-04-23 16:18:22 · 649 阅读 · 0 评论 -
CompletableFuture 处理异步异常
0L,在使用异步CompletableFuture时,无论是否有返回值都要调用get()/join()方法,避免程序执行报错了,仍然返回成功。如果在程序报错时需要对上一个异步任务结果做其他操作,可以调用whenComplete()、handle()处理,如果只是对异常做处理,不涉及对上一个异步任务结果的情况,调用exceptionally()处理。原创 2024-04-15 16:10:58 · 847 阅读 · 0 评论 -
Spring Boot 如何使用拦截器、过滤器、监听器?
过滤器过滤器的英文名称为 Filter, 是 Servlet 技术中最实用的技术。如同它的名字一样,过滤器是处于客户端和服务器资源文件之间的一道过滤网,帮助我们过滤掉一些不符合要求的请求,通常用作 Session 校验,判断用户权限,如果不符合设定条件,则会被拦截到特殊的地址或者基于特殊的响应。过滤器的使用首先需要实现 Filter接口然后重写它的三个方法init 方法:在容器中创建当前过滤器的时候自动调用destory 方法:在容器中销毁当前过滤器的时候自动调用doFilter 方法:过滤的转载 2020-09-25 14:40:49 · 390 阅读 · 0 评论 -
抛出这8个问题,检验你是否真的会ThreadLocal
一、概述1、官方术语ThreadLocal类是用来提供线程内部的局部变量。让这些变量在多线程环境下访问(get/set)时能保证各个线程里的变量相对独立于其他线程内的变量。2、大白话ThreadLocal是一个关于创建线程局部变量的类。通常情况下,我们创建的成员变量都是线程不安全的。因为他可能被多个线程同时修改,此变量对于多个线程之间彼此并不独立,是共享变量。而使用ThreadLocal创建的变量只能被当前线程访问,其他线程无法访问和修改。也就是说:将线程公有化变成线程私有化。二、应用场景每个转载 2020-08-18 20:24:42 · 251 阅读 · 1 评论 -
丢弃掉那些BeanUtils工具类吧,MapStruct真香!!!
在前几天的文章《为什么阿里巴巴禁止使用Apache Beanutils进行属性的copy?》中,我曾经对几款属性拷贝的工具类进行了对比。然后在评论区有些读者反馈说MapStruct才是真的香,于是我就抽时间了解了一下MapStruct。结果我发现,这真的是一个神仙框架,炒鸡香。这一篇文章就来简单介绍下MapStruct的用法,并且再和其他几个工具类进行一下对比。为什么需要MapStruct ?首先,我们先说一下MapStruct这类框架适用于什么样的场景,为什么市面上会有这么多的类似的框架。在软件原创 2020-08-12 16:25:46 · 165 阅读 · 0 评论 -
如何去掉 list 集合中重复的元素
在实际开发的时候,我们经常会碰到这么一个困难:一个集合容器里面有很多重复的对象,里面的对象没有主键,但是根据业务的需求,实际上我们需要根据条件筛选出没有重复的对象。比较暴力的方法,就是根据业务需求,通过两层循环来进行判断,没有重复的元素就加入到新集合中,新集合中已经有的元素就跳过。操作例子如下,创建一个实体对象PenBean,代码如下:/** * 笔实体 */public class PenBean { /**类型*/ private String type; /**原创 2020-08-12 15:01:15 · 1606 阅读 · 0 评论 -
想用@Autowired注入static静态成员?官方不推荐你却还偏要这么做
想用@Autowired注入static静态成员?官方不推荐你却还偏要这么做转载 2020-06-15 15:39:21 · 387 阅读 · 0 评论 -
HashMap 这一篇就够了
二狗:先来点简单的,介绍下 HashMap 的底层数据结构吧。囧辉:我们现在用的都是 JDK 1.8,底层是由“数组+链表+红黑树”组成,如下图,而在 JDK 1.8 之前是由“数组+链表”组成。二狗:为什么要改成“数组+链表+红黑树”?囧辉:主要是为了提升在 hash 冲突严重时(链表过长)的查找性能,使用链表的查找性能是 O(n),而使用红黑树是 O(logn)。二狗:那在什么时候用链表?什么时候用红黑树?囧辉:对于插入,默认情况下是使用链表节点。当同一个索引位置的节点在新增后达到9个(阈值转载 2020-06-12 17:57:07 · 404 阅读 · 0 评论 -
9种分布式ID生成方式
一、为什么要用分布式ID?在说分布式ID的具体实现之前,我们来简单分析一下为什么用分布式ID?分布式ID应该满足哪些特征?1、什么是分布式ID?拿MySQL数据库举个栗子:在我们业务数据量不大的时候,单库单表完全可以支撑现有业务,数据再大一点搞个MySQL主从同步读写分离也能对付。但随着数据日渐增长,主从同步也扛不住了,就需要对数据库进行分库分表,但分库分表后需要有一个唯一ID来标识一条数据,数据库的自增ID显然不能满足需求;特别一点的如订单、优惠券也都需要有唯一ID做标识。此时一个能够生成全局唯转载 2020-06-04 20:17:38 · 265 阅读 · 0 评论 -
我用的最多的三种模式
策略模式关于策略模式的使用方式,在Spring中其实比较简单,从本质上讲,策略模式就是一个接口下有多个实现类,而每种实现类会处理某一种情况。我们以发奖励为例进行讲解,比如我们在抽奖系统中,有多种奖励方式可供选择,比如积分,虚拟币和现金等。在存储时,我们必然会使用一个类似于type的字段用于表征这几种发放奖励的,那么这里我们就可以使用多态的方式进行奖励的发放。比如我们抽象出一个PrizeSender的接口,其声明如下:public interface PrizeSender { /** *原创 2020-05-15 15:04:16 · 271 阅读 · 0 评论 -
从源码角度,看 Java 是如何实现自己的 SPI 机制的?
java的spi机制与应用原创 2020-04-03 11:21:13 · 206 阅读 · 0 评论 -
简单介绍Spring Boot 自动配置原理
1. 概述Spring Boot 自动配置,顾名思义,是希望能够自动配置,将我们从配置的苦海中解脱出来。那么既然要自动配置,它需要解三个问题:满足什么样的条件?创建哪些 Bean?创建的 Bean 的属性?我们来举个示例,对照下这三个问题。在我们引入 spring-boot-starter-web 依赖,会创建一个 8080 端口的内嵌 Tomcat,同时可以通过 application...原创 2020-03-13 16:03:12 · 1076 阅读 · 0 评论 -
Java 8 Steam API map和flatMap方法使用详解
java 8 stream api 中有两个方法map和flatMap非常实用,应用场景也非常广泛,能极大提升编程效率。下面我们详细介绍一下这两个方法的用法。map方法我们来看个示例:把一个整数列表转换成字符串列表,java 8之前常用的实现方法如下List<Integer> numList = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);Lis...原创 2020-03-10 15:04:17 · 1955 阅读 · 0 评论 -
如何设计一个安全的对外接口
1.数据加密我们知道数据在传输过程中是很容易被抓包的,如果直接传输比如通过http协议,那么用户传输的数据可以被任何人获取;所以必须对数据加密,常见的做法对关键字段加密比如用户密码直接通过md5加密;现在主流的做法是使用https协议,在http和tcp之间添加一层加密层(SSL层),这一层负责数据的加密和解密;2.数据加签数据加签就是由发送者产生一段无法伪造的一段数字串,来保证数据在传输过...原创 2020-02-04 09:00:56 · 467 阅读 · 0 评论 -
你能聊聊高并发下的接口幂等性如何实现吗
实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返回一样的结果。例如:1、前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果。2、我们发起一笔付款请求,应该只扣用户账户一次钱,当遇到网络重发或系统bug重发,也应该只扣一次钱;3、发送消息,也应该只发一次,同样的短信发给用户,用户会哭的; 创建业务订单,一次业务请求只能创建一个,创建多个就会出大问题。等等很多重要的...转载 2020-02-01 15:30:03 · 146 阅读 · 0 评论 -
从头梳理一下 Java 面试中经常问到的 “零拷贝” 问题!
前言从字面意思理解就是数据不需要来回的拷贝,大大提升了系统的性能;这个词我们也经常在java nio,netty,kafka,RocketMQ 等框架中听到,经常作为其提升性能的一大亮点;下面从I/O的几个概念开始,进而在分析零拷贝。I/O概念1.缓冲区缓冲区是所有I/O的基础,I/O讲的无非就是把数据移进或移出缓冲区;进程执行I/O操作,就是向操作系统发出请求,让它要么把缓冲区的数据排...转载 2020-02-01 15:21:54 · 285 阅读 · 0 评论 -
lambda
1什么是Lambda?我们知道,对于一个Java变量,我们可以赋给其一个“值”。如果你想把“一块代码”赋给一个Java变量,应该怎么做呢?比如,我想把右边那块代码,赋给一个叫做aBlockOfCode的Java变量:在Java 8之前,这个是做不到的。但是Java 8问世之后,利用Lambda特性,就可以做到了。当然,这个并不是一个很简洁的写法。所以,为了使这个赋值操作更加eleg...转载 2020-01-12 17:54:42 · 180 阅读 · 0 评论 -
压缩 20M 文件从 30 秒到 1 秒的优化过程!
有一个需求需要将前端传过来的10张照片,然后后端进行处理以后压缩成一个压缩包通过网络流传输出去。之前没有接触过用Java压缩文件的,所以就直接上网找了一个例子改了一下用了,改完以后也能使用但是随着前端所传图片的大小越来越大的时候,耗费的时间也在急剧增加,最后测了一下压缩20M的文件竟然需要30秒的时间。压缩文件的代码如下。public static void zipFileNoBuffer...原创 2019-12-02 19:27:43 · 139 阅读 · 0 评论 -
SpringBoot自定义请求参数校验
最近在工作中遇到写一些API,这些API的请求参数非常多,嵌套也非常复杂,如果参数的校验代码全部都手动去实现,写起来真的非常痛苦。正好Spring轮子里面有一个Validation,这里记录一下怎么使用,以及怎么自定义它的返回结果。一、Bean Validation基本概念Bean Validation是Java中的一项标准,它通过一些注解表达了对实体的限制规则。通过提出了一些API和扩展性的...原创 2019-11-29 19:40:39 · 828 阅读 · 0 评论 -
为什么要重写 hashcode 和 equals 方法
目录通过Hash算法来了解HashMap对象的高效性为什么要重写equals和hashCode方法对面试问题的说明你在用HashMap的时候,键(Key)部分,有没有放过自定义对象,也就是说,当你使用hashMap的时候,你的hashMap中的key是否存放的是一个对象,如果是一个对象,那么就需要重写该对象的hashCode方法和equels方法。通过Hash算法来了解HashMap...原创 2019-11-29 09:42:50 · 196 阅读 · 0 评论 -
java的反射机制与通过反射创建对象的四种方式
java的反射机制与通过反射创建对象的四种方式原创 2019-11-26 16:40:48 · 263 阅读 · 0 评论 -
还在重复写空指针检查代码?考虑使用 Optional 吧!
前言如果要给 Java 所有异常弄个榜单,我会选择将 NullPointerException 放在榜首。这个异常潜伏在代码中,就像个遥控炸弹,不知道什么时候这个按钮会被突然按下(传入 null 对象)。还记得刚入行程序员的时候,三天两头碰到空指针异常引发的 Bug,解决完一个,又在另一处碰到。那时候师兄就教我,不要相信任何『对象』,特别是别人给你的,这些地方都加上判断。于是代码通常为会变成下...原创 2019-11-06 18:03:07 · 139 阅读 · 0 评论 -
使用序列化与反序列化方式克隆对象
实现 Serializable 接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆,代码如下:汽车类:package com.tang.clone;import java.io.Serializable;/** * car类 * * @author tangyifei * @date 2019年8月21日14:24:38 */public class Car ...原创 2019-08-21 14:51:45 · 644 阅读 · 0 评论 -
对HashMap进行排序
代码如下:Car类:package com.tang.clone;import java.io.Serializable;/** * car类 * * @author tangyifei * @date 2019年8月21日14:24:38 */public class Car implements Serializable { private static fi...原创 2019-08-21 15:48:54 · 215 阅读 · 0 评论 -
注解的使用
Spring中的注解大概可以分为两大类:spring的bean容器相关的注解,或者说bean工厂相关的注解;springmvc相关的注解。spring的bean容器相关的注解,先后有:@Required, @Autowired, @PostConstruct, @PreDestory还有Spring3.0开始支持的JSR-330标准javax.inject.*中的注解(@Inject, @...原创 2019-08-26 10:14:44 · 605 阅读 · 0 评论 -
使用java的集合时,需要注意的问题
1、ArrayList 踩坑首先大家看看这段代码有什么问题嘛?其实在大部分情况下这都是没啥问题,无非就是循环的往 ArrayList 中写入数据而已。但在特殊情况下,比如这里的 getData() 返回数据非常巨大时后续 temp.add(str) 就会有问题了。比如我们在 review 代码时发现这里返回的数据有时会高达 2000W,这时 ArrayList 写入的问题就凸显出来了。...原创 2019-09-02 10:54:08 · 342 阅读 · 0 评论 -
不能修改 匿名内部类里传过来的外部类中基本数据类型的变量的值的原因
在 Java 8 之前,匿名内部类在使用外部成员的时候,会报错并提示 “Cannot refer to a non-final variable arg inside an inner class defined in a different method”:但是在 Java 8 之后,类似场景却没有再提示了:难道是此类变量可以随便改动了吗?当然不是,当你试图修改这些变量的时候,仍然会...原创 2019-09-11 11:09:38 · 1414 阅读 · 0 评论 -
Java的IO模型
1、同步与异步的概念想要搞明白IO模型,就先得搞明白“同步”与“异步”的关系。所谓的“同步”,比如说调用者去调用一个接口,这个接口比如要执行一些磁盘文件读写操作,或者是网络通信操作。假设是“同步”的模式,调用者必须要等待这个接口的磁盘读写或者网络通信的操作执行完毕了,调用者才能返回,这就是“同步”,如下图所示:所谓的“异步”,就是说这个调用者调用接口之后,直接就返回了,他去干别的事儿了,...原创 2019-09-12 15:18:06 · 149 阅读 · 0 评论 -
Arrays.asList()转为集合的过程中,不能调用集合的相关方法修改集合
1、引语阿里巴巴java开发规范说到使用工具类Arrays.asList()方法把数组转换成集合时,不能使用其修改集合相关的方法它的add/remove/clear方法会抛出UnsupportedOperationException(),我们来看一下为什么会出现这种情况2、问题分析我们做个测试public static void main(String[] args) { List...原创 2019-09-16 09:54:47 · 620 阅读 · 1 评论 -
StringBuilder 究竟为什么线程不安全
1、引言面试官:StringBuilder和StringBuffer的区别在哪?我:StringBuilder不是线程安全的,StringBuffer是线程安全的面试官:那StringBuilder不安全的点在哪儿?我:。。。(哑巴了)在这之前我只记住了StringBuilder不是线程安全的,StringBuffer是线程安全的这个结论,至于StringBuilder为什么不安全从来没...原创 2019-09-17 18:49:17 · 155 阅读 · 1 评论 -
java重写与重载
JAVA重写和重载的区别重写表示对子类继承过来的方法进行重写,表现的是父类与子类之间的一种多态性;如果在子类中与子类继承过来的方法有不同的参数列表和相同的方法名,那么在子类中叫做方法重载;重载表现为同一个类中的多态性表现,如果子类的方法与继承过来的方法有相同的返回类型,有相同的函数名,有相同的参数列表,则表示的是方法的重载。...原创 2019-09-18 14:05:14 · 397 阅读 · 0 评论 -
简单工厂模式、工厂方法模式、抽象工厂模式
简单工厂模式、工厂方法模式、抽象工厂模式原创 2019-09-18 14:21:44 · 86 阅读 · 0 评论 -
Java中的clone克隆方法
Java中对象的创建clone 顾名思义就是 复制 , 在Java语言中, clone方法被对象调用,所以会复制对象。所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象。我们回顾一下:在java语言中,有几种方式可以创建对象呢?使用new操作符创建一个对象使用clone方法复制一个对象那么这两种方式有什么相同和不同呢?new操作符的本意是分配内存。程序...原创 2019-08-12 15:01:07 · 259 阅读 · 0 评论