
Java
残雪飞扬
这个作者很懒,什么都没留下…
展开
-
Java常见面试题—Future与FutureTask
Future就是对于具体的Runnable或者Callable任务的执行结果进行取消、查询是否完成、获取结果等操作。必要时可以通过get方法获取执行结果,该方法会阻塞直到任务返回结果。方法用来取消任务,如果取消任务成功则返回true,如果取消任务失败则返回false。参数mayInterruptIfRunning表示是否允许取消正在执行却没有执行完毕的任务,如果设置true,则表示可以取消正在执行过程中的任务。原创 2022-09-20 11:21:31 · 359 阅读 · 0 评论 -
垂直拆分和水平拆分
其实,相对于垂直切分更进一步的是服务化改造,说得简单就是要把原来强耦合的系统拆分成多个弱耦合的服务,通过服务间的调用来满足业务需求看,因此表拆出来后要通过服务的形式暴露出去,而不是直接调用不同模块的表,淘宝在架构不断演变过程,最重要的一环就是服务化改造,把用户、交易、店铺、宝贝这些核心的概念抽取成独立的服务,也非常有利于进行局部的优化和治理,保障核心模块的稳定性。如果系统过于庞大,拆分的表可以放在不同的数据库中,甚至不同的Server中,怎样划分Server就要根据功能模块和项目实际划分。原创 2022-09-09 19:12:36 · 2321 阅读 · 0 评论 -
偏向锁、轻量级锁、重量级锁的理解和适用场景
线程在执行同步块之前,JVM会先在当前线程的栈桢中创建用于存储锁记录的空间,并将对象头中的Mark Word复制到锁记录中,官方称为Displaced Mark Word。当一个线程访问同步块获取锁时,会在对象头和栈帧的锁记录里存储锁偏向的线程ID,以后该线程再进入和推出同步块时不需要进行CAS(比较和交换,下次详细记录一下)操作来加锁和解锁。适用场景:偏向锁只适合大部分锁没有被竞争的系统中,如果系统中存在大量被争用的锁时,会导致持有锁的线程不断切换,这时可以考虑关闭偏向锁。,程序默认会进入轻量级锁状态。.原创 2022-08-17 11:19:54 · 466 阅读 · 0 评论 -
线程的生命周期和触发的机制
ps:当调用线程的yield()方法时,线程从运行状态转换为就绪状态,但接下来CPU调度就绪状态中的哪个线程具有一定的随机性,因此,可能会出现A线程调用了yield()方法后,接下来CPU仍然调度了A线程的情况。3.运行状态(Running):当CPU开始调度处于就绪状态的线程时,此时的线程才开始被执行,即进入到运行状态,PS:就绪状态是进入运行状态的唯一入口,也就是说,线程想进入运行状态,必须先处于就绪状态。运行状态转为就绪状态:当前线程调用了yeid()或者在运行过程中失去了处理器资源。...原创 2022-08-17 10:17:40 · 224 阅读 · 0 评论 -
使用 fastjson将字符串转为 list<map<string,object>>
//先将字符串转为list 集合List list =JSON.parseArray(bxInsertOrderVo.getTourist());//然后循环遍历list集合强转为map集合 (可以new新集合把转换后的值put进去,list集合中有多个map时,应在循环里new新集合,避免key重复,覆盖)List< Map> listw = new ArrayList();for (Object object : list){Map...原创 2022-07-06 16:55:33 · 10146 阅读 · 0 评论 -
使用Java8 Stream流的skip + limit实现批处理
1、一般进行批处理时会将数据加入到一个临时的集合中,当数据量达到一定大小后进行下一步操作,数据量不足时需要进行额外的判断;2、若使用Java8的Stream流中的 skip + limit 则可以让我们对集合方便快捷的操作,其中:(1)skip(x):返回丢弃流中的前x个元素后剩下元素组成的新流;若原流中包含的元素个数小于x,则返回空流。(2)limit(x): 对一个Stream流进行截断操作,获取其前x个元素;若原流中包含的元素个数小于x,那就获取其所有的元素;3、实例代码如下:输出结果:原创 2022-07-05 10:03:48 · 3094 阅读 · 0 评论 -
【RestTemplate】关于getForObject()的正确用法
【RestTemplate】关于getForObject()的正确用法原创 2022-06-14 09:36:51 · 5116 阅读 · 0 评论 -
Oracle sql大于和小于号的转义写法
mybatis 中 SQL 写在mapper.xml文件中,而xml解析 < 、>、= 时会出错,这时应该使用转义写法。原创 2022-06-14 09:27:13 · 3315 阅读 · 0 评论 -
list组装转化为树形结构list
/** * 使用递归方法构建分区树 * @param dtoList * @param level0Root * @return */ public static List<DtoList> buildDmaTree(List<DtoList> dtoList, boolean level0Root) { List<DtoList> trees = new ArrayList<>();.原创 2022-05-31 15:58:48 · 461 阅读 · 0 评论 -
Java中BeanUtils.copyProperties()用法和需要导入maven依赖
1、导入的maven依赖包 <!-- BeanUtils的依赖 --> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.9.4</version>原创 2022-05-31 15:16:01 · 2644 阅读 · 0 评论 -
java8两个list根据某一属性取交集
class User {public User(Integer id, String name) {this.id = id;this.name = name;}private Integer id;private String name;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {re.原创 2022-05-25 17:16:20 · 1688 阅读 · 0 评论 -
java8中Stream的一些使用例子总结
Stream API例子如果有一个需求,需要对数据库查询到的菜肴进行一个处理: 筛选出卡路里小于400的菜肴 对筛选出的菜肴进行一个排序 获取排序后菜肴的名字 菜肴:Dish.java public class Dish { private String name; private boolean vegetarian; private int calories; private Type type; // getter原创 2022-05-25 17:14:13 · 812 阅读 · 0 评论 -
记录FTPClient 超时处理的相关问题
apache有个开源库: commons-net,这个开源库中包括了各种基础的网络工具类,我使用了这个开源库中的FTP工具。但碰到一些问题,并不是说是开源库的 bug,可能锅得算在产品头上吧,各种奇怪需求。问题当将网络限速成1KB/S时,使用commons-net开源库中的FTPClient 上传本地文件到FTP服务器上,FTPClient源码内部是通过Socket 来实现传输的,当终端和服务器建立了连接,调用storeFile()开始上传文件时,由于网络限速问题,一直没有接收到是否传输结束的反馈原创 2022-05-25 17:09:16 · 4953 阅读 · 3 评论 -
高可用的Spring FTP上传下载工具类
前言ftp服务器进行交互关于ftp上传下载的工具类大致有两种。 第一种是单例模式的类。 第二种是另外定义一个Service,直接通过Service来实现ftp的上传下载删除。 这两种感觉都有利弊。 第一种实现了代码复用,但是配置信息全需要写在类中,维护比较复杂。 第二种如果是spring框架,可以通过propertis文件,动态的注入配置信息,但是又不能代码复用。 所以我打算自己实现一个工具类,来把上面的两种优点进行整合。顺便把一些上传过程中一些常见的问题也给解决了。原创 2022-05-25 17:08:12 · 739 阅读 · 0 评论 -
Java创建TXT文件并写入 内容
public static void main(String[] args) { String filePath = "E:/" + "1.txt"; FileWriter fw = null; try { File file = new File(filePath); if (!file.exists()) { file.crea.原创 2022-05-11 17:21:52 · 7793 阅读 · 0 评论 -
java实现RSA算法
import javax.crypto.Cipher;import java.io.ByteArrayOutputStream;import java.nio.charset.Charset;import java.security.*;import java.security.spec.PKCS8EncodedKeySpec;import java.security.spec.X509EncodedKeySpec;import java.util.*;public class RSAU.原创 2022-04-28 14:45:40 · 655 阅读 · 0 评论 -
Java获取两个时间段之间的每个年月或者月初的值
1. 求两个年月之间的月份,包含开始月份 /** * @param startMonth @example: "2016-01" * @param endMonth @example: "2019-11" * @return 两个时间之间的月份(含开始,结束) * @throws ParseException */ private List<String> getMonths(String startMonth,Str原创 2022-04-22 17:56:27 · 341 阅读 · 0 评论 -
转换double为百分数,保留小数
@Test public void date20220328(){ NumberFormat nf = NumberFormat.getPercentInstance(); nf.setMaximumFractionDigits(1); nf.setMinimumFractionDigits(1); System.out.println(nf.format(0.248106002318448)); }24.8%原创 2022-03-28 14:38:55 · 569 阅读 · 0 评论 -
webServiceTemplate.marshalSendAndReceive;Spring Boot SOAP Client – WebServiceTemplate 案例
1. SpringBootSoapClient技术栈JDK 1.8 SpringBoot maven-jaxb2-plugin2. 具体操作1. 在pom.xml中添加dependency和plugin <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starte..原创 2022-03-16 15:03:33 · 1180 阅读 · 1 评论 -
StringUtils里的isEmpty方法和isBlank方法的区别
我们常说的字符串为空,其实就是一个没有字符的空数组。比如:String a = "";a 就可以称为是一个空字符串。由于 String 在 Java 中底层是通过 char 数组去存储字符串的,所以空字符串对应的 char 数组表现形式为private final char value[] = new char[0];但实际工作中,我们需要对字符串进行一些校验,比如:是否为 null,是否为空,是否去掉空格、换行符、制表符等也不为空。我们一般都是通过一些框架的工具类去做这些判断,比.原创 2022-01-17 11:47:25 · 228 阅读 · 0 评论 -
@Slf4j是啥,它是干啥的
@Slf4j是用作日志输出的,一般会在项目每个类的开头加入该注解,如果不写下面这段代码,并且想用logprivate final Logger logger = LoggerFactory.getLogger(当前类名.class);就可以用@Slf4来代替;这样就省去这段很长的代码。import ...@Controller@RequestMapping("/abc")@Slf4jpublic class QueryBillController { @Autowired原创 2022-01-17 11:43:13 · 456 阅读 · 0 评论 -
Error:java: Can‘t generate mapping method with primitive return type.
Spring项目中使用了JPA以及Mybatis–mapper文件注解引错包导致编译错误错误导入 jpaimport org.mapstruct.Mapper;正确导入 mybatisPlusimport org.apache.ibatis.annotations.Mapper;原创 2022-01-12 13:58:30 · 875 阅读 · 0 评论 -
win10安装JDK1.8及配置java环境变量详解
首先下载一个jdk,可以通过这个链接下载:https://pan.baidu.com/s/1aP6SdL8UQK_C2GvALLb6Wg也可以去官网下载:https://www.oracle.com/technetwork/java/javase/downloads/index.html接下来就是安装,非常的简单,如下图所示:双击下载的文件,出现该界面,点击下一步。安装路径我们选择默认的,当然,我们也可也修改安装路径,但一定要记得安装路径,这里我们选择默认的。点击下一步。原创 2021-12-31 11:24:25 · 708 阅读 · 0 评论 -
Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean)
在使用maven的tomcat控件编译java程序时,报错Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) on project **-web: Failed to clean project: Failed to delete E:\**\target\tomcat\logs\access_log这类错误出现这种错误,通常是由于您已启动了另一个tomcat 进程.原创 2021-12-28 10:44:40 · 3565 阅读 · 0 评论 -
Intellij IDEA 控制台日志缓存调整
最近,有同学在群里说,他的IDEA控制台打印的日志超过一定的大小,就会被IDEA 给“吃”掉。这里,统一给大家答疑一下,其实IDEA为了节约资源,对在控制台的日志进行了限制,默认缓冲区的输出日志大小是1024kb,超出这个限制就会被清除,而且还会显示「too much output to process」,其实这个配置我们是可以做修改的。通过Console配置修改来修改,点击 File ->Settings ->editor - >General->Console 选中如下图原创 2021-12-28 10:41:07 · 4020 阅读 · 0 评论 -
IDEA控制台显示所有日志
在%安装目录%/bin中找到idea.properties文件,更改idea.cycle.buffer.size项值为disabled,保存,重启idea即可原创 2021-12-15 10:34:04 · 2959 阅读 · 0 评论 -
CentOS7卸载openJDK安装JDK1.8
查看已有openjdk版本rpm -qa|grep jdk卸载openjdkremove后面的参数是上面得到的结果.noarch结尾的包yum -y remove copy-jdk-configs-3.3-10.el7_5.noarch下载jdk1.8下载jdk-8u40-linux-x64.tar.gz,上传到/usr/local/soft/java可自行下载一个linux JDKhttps://download.csdn.net/download/m119590024原创 2021-11-15 15:56:35 · 680 阅读 · 0 评论 -
DDD+微服务实战:什么是DDD?
1 DDD是什么?DDD是领域驱动设计,是Eric Evans于2003年提出的,离现在有17年。2 为什么需要DDD当软件越来越复杂,实际开发中,大量的业务逻辑堆积在一个巨型类中的例子屡见不鲜,代码的复用性和扩展性无法得到保证。为了解决这样的问题,DDD提出了清晰的分层架构和领域对象的概念,让面向对象的分析和设计进入了一个新的阶段,对企业级软件开发起到了巨大的推动作用。2.1 POP,OOP,DDD是如何解决问题面向过程编程(POP),接触到需求第一步考虑把需求自顶向下分解成一个一个函原创 2021-11-12 09:56:48 · 660 阅读 · 0 评论 -
java实现生产者和消费者 类比消息中间件
一、对生产者消费者的理解生产者消费者模式是并发、多线程编程中经典的设计模式。简单来看,就是一个类负责生产,一个类负责消费。举例来说,一个变量,生产者不断增加这个变量,消费者不断减少这个变量。在互联网应用中,抢票机制就是应用了该模式,比如大麦网演唱会门票抢票,12306火车票抢票等。二、代码演示下面使用代码来举例理解:有这样一个场景:生产者:往一个公共的盒子里面放苹果消费者:从公共的盒子里面取苹果盒子:盒子的容量不能超过5我们将使用wait() 和 notify() 通信方法实原创 2021-09-01 15:12:53 · 285 阅读 · 0 评论 -
idea提交代码到github教程
前言随着科技社会的发展, 程序员的工作不再作为一个神秘的特殊行业, 程序员的生活也只是万千世界的普通生活, 但是程序员还是不得不每天都去全球最大的同性交友网站上进行学术交流…github上创建空项目登录自己的github在github上创建repository填写仓库基本信息创建创建后把仓库的git地址copy出来备用https://github.com/ShengLiuDave/java_test.gitidea上代码关联本地git在...原创 2021-08-23 15:01:45 · 193 阅读 · 0 评论 -
centos7 rabbitmq the VM is running with native name encoding of latin1 which may
CentOS7中安装了rabbitmq,操作CLI工具时报如下错误:warning: the VM is running with native name encoding of latin1 which may cause Elixir to malfunction as it expects utf8. Please ensure your locale is set to UTF-8 (which can be verified by running "locale" in your shell原创 2021-08-19 17:05:43 · 751 阅读 · 0 评论 -
RabbitMq ERROR: distribution port 25672 in use by rabbit
10:14:40.014 [error]10:14:40.021 [error] BOOT FAILEDBOOT FAILED10:14:40.021 [error] ======================10:14:40.021 [error] ERROR: distribution port 25672 in use by rabbit@host-117ERROR: distribution port 25672 in use by rabbit@host-111710:14:40.0原创 2021-08-19 17:01:07 · 1128 阅读 · 0 评论 -
CentOS7安装RabbitMQ
安装erlang由于rabbitmq是基于erlang语言开发的,所以必须先安装erlang。安装依赖yum -y install gcc glibc-devel make ncurses-devel openssl-devel xmlto perl wgeterlang官网:https://www.erlang.org/downloads下载(会比较慢,请耐心等待)wget http://erlang.org/download/otp_src_21.3.tar.gz原创 2021-08-19 15:42:34 · 274 阅读 · 0 评论 -
Java stream()用法集合单独取出对象中一个属性成为集合或数组
集合List<DictEntity> dictEntityList = dictService.findByType(6);取出属性为集合List<String> stateNameList = dictEntityList.stream().map(DictEntity::getName).collect(Collectors.toList());取出属性为数组Long[] ids = dictEntityList.stream().map(DictEnt原创 2021-07-20 09:36:26 · 16052 阅读 · 0 评论 -
Windows安装RabbitMQ
rabbitMQ是Erlang语言开发的所以先下载Erlanghttps://www.erlang.org/downloads下载到磁盘中双击安装配置环境变量检验下载RabbitMQhttps://www.rabbitmq.com/download.html双击安装安装完成后,开始安装RabbitMQ-Plugins插件先cd D:\software\RabbitMQ\rabbitmq_server-3...原创 2021-07-18 13:45:04 · 117 阅读 · 0 评论 -
List数据去重的五种有效方法
方案一:借助Set的特性进行去重 /** * 去除重复数据 * 由于Set的无序性,不会保持原来顺序 * @param list */ public static List<String> list distinct(List<String> list) { final boolean sta = null != list && list.size() > 0; Lis转载 2021-07-15 14:40:41 · 2663 阅读 · 0 评论 -
Stream字符串按数字排序
//对字符串数字排序Stream.of("123", "321", "132","312").sorted(Comparator.comparingInt(Integer::parseInt))// 对Object属性排序Stream.of(new Exception("13"),new Exception("1"),new Exception("21"),new Exception("3")).sorted(Comparator.comparing(Exception::getMessag原创 2021-07-15 14:30:28 · 5255 阅读 · 3 评论 -
图说Stream中的skip()和limit()方法及组合使用
1 简介本文将讲解Java 8 Stream中的两个方法:skip()和limit()。这两个方法是Stream很常用的,不仅各自会被高频使用,还可以组合出现,并能实现一些小功能,如subList和分页等。2 skip()方法见名知义,skip()方法用于跳过前面n个元素,然后再返回新的流,如图所示:来看看代码:List<Integer> result = Stream.of(1, 2, 3, 4, 5, 6) .skip(4) .collect(Collector转载 2021-07-15 14:24:54 · 8391 阅读 · 1 评论 -
语言为什么都要实例化后才能用 ?实例化后这里东西是放在堆里面还是栈里面?
类类似一个模板,要实例化后才有个体,类到对象实例是一对多的关系;实例化后放堆还是栈看地方;函数里面实例化内存就分配在这个函数栈帧里面,全局的分配在堆上面;划分出堆、栈:栈结构的特点就很适合函数的调用,这也就自带确定了一些变量的作用域功能。堆的话,就Java语言来说,又划分很多小区域,当然很重要的一个原因是为了方便gc,而gc也在寻求一个合适的平衡点。就操作系统的层面,一个进程可以分为正文段、数据段、堆栈段。 而这个堆栈段是会随着程序的执行而变大的;堆的内存分配还可以看看tcmalloc这一类算法...原创 2021-06-08 14:17:48 · 267 阅读 · 0 评论