java
文章平均质量分 89
朝闻道-夕死可矣
朝闻道,夕死可矣!
展开
-
Java多线程中static变量的使用
有时候,对于在多线程中使用static变量有没有冲突,是否存在安全问题不能十分的确定。在使用过程中有点含糊,总想找点时间好好追究一下,可总因开发项目时间的紧迫而搁浅。我想,没有做进一步的研究而拿项目繁忙说事,这是自己的借口吧!鲁迅先生曾说过:“时间就像海绵里的水,只要愿挤,总还是有的”。不管肿(怎)么说,这事还是要做的啊。如果越往后推,可能造成的潜在影响更大。这始终是个隐患,不能不除。不是痛定思痛,而是认识到事情的重要性,就要开始行动了... ......转载 2021-08-02 16:16:24 · 811 阅读 · 0 评论 -
java list转为树形结构
废话不多,java中list转树entity:@Data@ToStringpublic class User { /** * 用户id */ private Long id; /** * 用户名 */ private String name; /** * 父id,即上级id */ private Long parentId; /** * 排名 ...原创 2020-12-24 09:10:43 · 2200 阅读 · 0 评论 -
Spring AOP讲解(Pointcut、Before、Around、AfterReturning、After)
AOP依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId></dependency>@Pointcut定义切入点,有以下2种方式:方式一:设置为注解@LogFilter1标记的方法,有标记的方法触发该AOP,没有标记就没有。@As转载 2020-12-17 09:04:00 · 3422 阅读 · 0 评论 -
SpringBoot集成kafka-转
本文是SpringBoot+Kafka的实战讲解,如果对kafka的架构原理还不了解的读者,建议先看一下《大白话kafka架构原理》、《秒懂kafka HA(高可用)》两篇文章。一、生产者实践 普通生产者 带回调的生产者 自定义分区器 kafka事务提交 二、消费者实践 简单消费 指定topic、partition、offset消费 批量消费 监听异常处理器 消息过滤器 消息转发 定时启动/停止监听转载 2020-12-10 13:53:11 · 433 阅读 · 0 评论 -
Logback日志,输出到文件以及实时输出到web页面
前言 SpringBoot对所有内部日志使用通用日志记录,但保留底层日志实现。为Java Util Logging、Log4J2和Logback提供了默认配置。在不同的情况下,日志记录器都预先配置为使用控制台输出,同时还提供可选的文件输出。默认情况下,SpringBoot使用Logback进行日志记录。 日志级别有(从高到低):FATAL(致命),ERROR(错误),WARN(警告),INFO(信息),DEBUG(调试),TRACE(跟踪)或者OFF(关闭),默认的日志配置在消息写入时将消息回.转载 2020-12-07 14:18:33 · 6369 阅读 · 0 评论 -
mybatis-plus简介
一、MyBatis-Plus1、简介 MyBatis-Plus 是一个 Mybatis 增强版工具,在 MyBatis 上扩充了其他功能没有改变其基本功能,为了简化开发提交效率而存在。官网文档地址: https://mp.baomidou.com/guide/MyBatis-Plus 特性: https://mp.baomidou.com/guide/#%E7%89%B9%E6%80%A72、使用 SpringBoot 快速使用 MyBatis-Plus(1)准备工转载 2020-11-25 10:58:07 · 1291 阅读 · 0 评论 -
富文本转码&后端处理
有时候富文本中有特殊符号,比如链接之类的,如果不处理后端有可能发生数据丢失或者解析失败,这时可以在前端将数据编码,后端解析入库encodeURIComponent将数据编码base64,decodeURIComponent将数据解码后端jiava中:String decode = URLDecoder.decode(dataEntity.getContent(), "UTF-8"); dataEntity.setContent(decode);...原创 2020-11-23 14:40:08 · 1568 阅读 · 0 评论 -
Activiti7入门
第1章 什么是工作流1.1工作流介绍工作流(Workflow),就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者 之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标, 或者促使此目标的实现”。1.2工作流系统一个软件系统中具有工作流的功能,我们把它称为工作流系统,一个系统中工作流的功能是什 么?就是对系统的业务流程进行自动化管理,所以工作流是建立在业务流程的基础上,所以一个软 件的系统核心根本上还是系统的业务流程,工作流只是协助进行业转载 2020-09-20 23:15:44 · 417 阅读 · 0 评论 -
SpringBoot集成mybatis配置
一个有趣的现象:传统企业大都喜欢使用hibernate,互联网行业通常使用mybatis;之所以出现这个问题感觉与对应的业务有关,比方说,互联网的业务更加的复杂,更加需要进行灵活性的处理,所以mybatis的灵活性特点更为适合其作为技术选型的优势;mybatis初期使用比较麻烦,需要各种配置文件、实体类、dao层映射关联、还有一大推其它配置。当然mybatis也发现了这种弊端,初期开发了可以根据表结果自动生产实体类、配置文件和dao层代码,可以减轻一部分开发量;后期也进行了大量的优化可以使用注解了,转载 2020-08-27 08:22:23 · 342 阅读 · 0 评论 -
Java项目一些常规配置、问题解决
1,gradle安装1.1 下载https://services.gradle.org/distributions/解压到一个目录:1.2配置环境变量GRADLE_USER_HOME:D:\soft\gradle-6.1.1\repo同样配置:GRADLE_HOME:D:\soft\gradle-6.1.1追加path:D:\soft\gradle-6.1.1\bin1.3验证:gradle -v2,eclipse配置help->Ecllipse Ma.原创 2020-08-25 16:15:56 · 741 阅读 · 0 评论 -
eclipse部署常见问题
1,javax.servlet.jsp.JspException cannot be resolved to a type taglib解决:右键项目——properties——Targeted Runtimes——选择运行环境,比如Apache Tomcat v7.0——Apply——OK或者在maven依赖中添加,注意相应版本: <dependencies> <dependency> <group...原创 2020-08-12 08:42:40 · 123 阅读 · 0 评论 -
Spring容器、属性注入和构造器注入详解
Spring 容器在 Spring IOC 容器读取 Bean 配置创建 Bean 实例之前, 必须对它进行实例化. 只有在容器实例化后, 才可以从 IOC 容器里获取 Bean 实例并使用.Spring 提供了两种类型的 IOC 容器实现.BeanFactory: IOC 容器的基本实现.ApplicationContext: 提供了更多的高级特性. 是 BeanFactory 的子接口.BeanFactory 是 Spring 框架的基础设施,面向 Spring 本身;Appl.转载 2020-07-10 16:47:49 · 856 阅读 · 0 评论 -
RMI与RPC的区别
一、RMI 远程方法调用RMI(Remote Method Invocation)远程方法调用。能够让在客户端Java虚拟机上的对象像调用本地对象一样调用服务端java 虚拟机中的对象上的方法。使用代表:EJBRMI远方法程调用步骤: 1、客户调用客户端辅助对象stub上的方法 2、客户端辅助对象stub打包调用信息(变量、方法名),通过网络发送给服务端辅助对象skeleton 3、服务端辅助对象skeleton将客户端辅助对象发送来的信息解包,找出真正被调用的方法以及该方法所在对象转载 2020-07-02 08:40:05 · 352 阅读 · 0 评论 -
深入理解JVM-内存模型(jmm)和GC
1 CPU和内存的交互了解jvm内存模型前,了解下cpu和计算机内存的交互情况。【因为Java虚拟机内存模型定义的访问操作与计算机十分相似】有篇很棒的文章,从cpu讲到内存模型:什么是java内存模型在计算机中,cpu和内存的交互最为频繁,相比内存,磁盘读写太慢,内存相当于高速的缓冲区。但是随着cpu的发展,内存的读写速度也远远赶不上cpu。因此cpu厂商在每颗cpu上加上高速缓存,用于缓解这种情况。现在cpu和内存的交互大致如下。cpu、缓存、内存cpu上加入了高速缓存这样做解转载 2020-07-02 08:33:18 · 743 阅读 · 0 评论 -
什么是Java内存模型
在知识星球中,有个小伙伴提了一个问题:有一个关于JVM名词定义的问题,说”JVM内存模型“,有人会说是关于JVM内存分布(堆栈,方法区等)这些介绍,也有地方说(深入理解JVM虚拟机)上说Java内存模型是JVM的抽象模型(主内存,本地内存)。这两个到底怎么区分啊?有必然关系吗?比如主内存就是堆,本地内存就是栈,这种说法对吗?时间久了,我也把内存模型和内存结构给搞混了,所以抽了时间把JSR133规范中关于内存模型的部分重新看了下。后来听了好多人反馈:在面试的时候,有面试官会让你解释一下Java的内存转载 2020-07-02 08:27:18 · 224 阅读 · 0 评论 -
Spring获取容器中的Bean的接口ApplicationContextAware
在Web应用中,Spring容器通常采用声明式方式配置产生:开发者只要在web.xml中配置一个Listener,该Listener将会负责初始化Spring容器,MVC框架可以直接调用Spring容器中的Bean,无需访问Spring容器本身。在这种情况下,容器中的Bean处于容器管理下,无需主动访问容器,只需接受容器的依赖注入即可。在某些的情况下,我们要获取IOC容器中指定注解、类型、名字的Bean,来实现某个功能实现上,我们不用类似new ClassPathXmlApplicationConte原创 2020-06-24 14:26:54 · 780 阅读 · 0 评论 -
java中==,equals和hashcode简介
equals() 与 == 的区别是什么?== : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不试同一个对象。equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况(前面第1部分已详细介绍过): 情况1,类没有覆盖equals()方法。则通过equals()比较该类的两个对象时,等价于通过“==”比较这两个对象。 情况2,类覆盖了equals()方法。一般,我们都覆盖equals()方法来两个对象的...原创 2020-06-22 09:23:49 · 251 阅读 · 0 评论 -
并发容器之ConcurrentLinkedQueue
1.ConcurrentLinkedQueue简介在单线程编程中我们会经常用到一些集合类,比如ArrayList,HashMap等,但是这些类都不是线程安全的类。在面试中也经常会有一些考点,比如ArrayList不是线程安全的,Vector是线程安全。而保障Vector线程安全的方式,是非常粗暴的在方法上用synchronized独占锁,将多线程执行变成串行化。要想将ArrayList变成线程安全的也可以使用Collections.synchronizedList(List<T> list)转载 2020-06-19 14:48:01 · 372 阅读 · 0 评论 -
RabbitMQ之Qos prefetch
实际使用RabbitMQ过程中,如果完全不配置QoS,这样Rabbit会尽可能快速地发送队列中的所有消息到client端。因为consumer在本地缓存所有的message,从而极有可能导致OOM或者导致服务器内存不足影响其它进程的正常运行。所以我们需要通过设置Qos的prefetch count来控制consumer的流量。同时设置得当也会提高consumer的吞吐量。prefetch与消息投递prefetch允许为每个consumer指定最大的unacked messages数目。简单来说转载 2020-06-19 14:41:56 · 509 阅读 · 0 评论 -
Eclipse源码插件、gradle
工欲善其事必先利其器1,安装源码插件Java Source Attacher之前安装的很多链接都失效了,以下是在线安装步骤:打开地址https://marketplace.eclipse.org/marketplace-client-intro?mpc_install=84997,将会出现一个Install按钮大概意思就是直接拖动到你的Eclipse工作空间即可;其实也就是安装一个插件到ecllipse目录中2,智能提示java的自动提示,点击“windows”->.原创 2020-06-16 20:35:43 · 218 阅读 · 0 评论 -
Java正则表达式Pattern和Matcher类简介
MySQL正则表达式通过java.util.regex包下的Pattern和Matcher类实现Pattern类的作用在于编译正则表达式后创建一个匹配模式. 可以通过两个静态方法创建Pattern:compile(String regex)和compile(String regex,int flags),其中regex是正则表达式,flags为可选模式(如:Pattern.CASE_INSENSITIVE 忽略大小写)Matcher类使用Pattern实例提供的模式信息对正则表达式进行匹配...原创 2020-06-05 08:22:34 · 205 阅读 · 0 评论 -
认识Netty
什么是Netty?Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架。Netty 是一个广泛使用的 Java 网络编程框架(Netty 在 2011 年获得了Duke's Choice Award,见https://www.java.net/dukeschoice/2011)。它活跃和成长于用户社区,像大型公司 Facebook 和 Instagram 以及流行 开源项目如 Infinispan, HornetQ, Vert.x,转载 2020-06-04 09:27:20 · 132 阅读 · 0 评论 -
同步 异步 阻塞 非阻塞
IO分两阶段(一旦拿到数据后就变成了数据操作,不再是IO): 1.数据准备阶段 2.内核空间复制数据到用户进程缓冲区(用户空间)阶段在操作系统中,程序运行的空间分为内核空间和用户空间。 应用程序都是运行在用户空间的,所以它们能操作的数据也都在用户空间。阻塞IO和非阻塞IO的区别在于第一步发起IO请求是否会被阻塞: 如果阻塞直到完成那么就是传统的阻塞IO,如果不阻塞,那么就是非阻塞IO。一般来讲: 阻塞IO模型、非阻塞IO模型、IO复用模型(select.转载 2020-06-04 08:39:19 · 154 阅读 · 0 评论 -
ClassPathXmlApplicationContext启动spring容器入门
本文不涉及原理深入的内容,仅介绍一下spring容器启动最简单的方式——ClassPathXmlApplicationContext。1. spring容器jar包引入maven坐标dependencygroupId:org.springframeworkartifactId:spring-contextversion:4.3.11.RELEASE2. 定义一个接口类package com.loge.service;public interface TestApi { ...原创 2020-05-29 16:44:38 · 1112 阅读 · 0 评论 -
java对象复制
java中有时候需要复制对象,比如别人调用你,你最好不要修改人家的参数内容,(1)将A对象的值分别通过set方法加入B对象中;(2)通过重写java.lang.Object类中的方法clone();(3)通过org.apache.commons中的工具类BeanUtils和PropertyUtils进行对象复制;(4)通过序列化实现对象的复制说明1) geter、seter方法在对象中属性比较少时可以用,多的话麻烦2)这里分为浅copy和深copy浅copy步骤:a)被复制的类需要实现..原创 2020-05-28 16:09:18 · 375 阅读 · 0 评论 -
Java中的 extends T和SUPER T
另,问题来源:Java 泛型 <? SUPER T> 中 SUPER 怎么 理解?与 extends 有何不同?<? extends T>和<? super T>是Java泛型中的“通配符(Wildcards)”和“边界(Bounds)”的概念。<? extends T>:是指“上界通配符(Upper Bounds Wildcards)” <? super T>:是指“下界通配符(Lower Bounds Wildcards)”为什..转载 2020-05-28 08:57:43 · 169 阅读 · 0 评论 -
RabbitMQ简单介绍
创建SpringBoot项目,引入依赖,pom.xml如下<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <m...原创 2020-05-22 15:01:52 · 257 阅读 · 0 评论 -
RabbitMQ:RabbitAdmin 与 RabbitTemplate 使用
RabbitAdmin该类封装了对 RabbitMQ 的管理操作@Beanpublic RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory){ return new RabbitAdmin(connectionFactory);}@Autowiredprivate RabbitAdmin rabbitAdmin;Exchange 操作//创建四种类型的 Exchange,均为持久化,不自动删除..转载 2020-05-22 14:35:18 · 1350 阅读 · 0 评论 -
RabbitMQ:消息发送确认 与 消息接收确认(ACK)
默认情况下如果一个 Message 被消费者所正确接收则会被从 Queue 中移除如果一个 Queue 没被任何消费者订阅,那么这个 Queue 中的消息会被 Cache(缓存),当有消费者订阅时则会立即发送,当 Message 被消费者正确接收时,就会被从 Queue 中移除消息发送确认发送的消息怎么样才算失败或成功?如何确认?当消息无法路由到队列时,确认消息路由失败。消息成功路由时,当需要发送的队列都发送成功后,进行确认消息,对于持久化队列意味着写入磁盘,对于镜像队列意味着所有镜.转载 2020-05-22 14:08:25 · 1837 阅读 · 0 评论 -
Spring中的定时器配置
定时器种类1.Timer比较单一,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行,一般用的较少。2.Quartz是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行,配置起来有些复杂。3.Spring3.0以后自带的task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多。从作业类继承分类主要分为两类:1.作业类需要继承自特定的作业类基类,如Qua...原创 2020-05-22 09:54:33 · 767 阅读 · 0 评论 -
spring配置注解context:annotation-config和context:component-scan区别
Spring 中在使用注解(Annotation)会涉及到< context:annotation-config> 和 < context:component-scan>配置,下面就对这两个配置进行诠释。1.context:annotation-config< context:annotation-config> 是用于激活那些已经在spring容器里注册过的bean上面的注解,也就是显示的向Spring注册AutowiredAnnotationBeanPost转载 2020-05-21 17:07:33 · 192 阅读 · 0 评论 -
Java中的Java.lang.Runtime类
每个Java应用程序都有一个Runtime类实例,它允许应用程序与运行应用程序的环境进行交互。可以从getRuntime方法获取当前运行时。Java Runtime类的方法:1)public static Runtime getRuntime():此方法返回与当前Java应用程序关联的实例或Runtime对象。 // Java program to illustrate getRuntime() // method of Runtime class public clas.转载 2020-05-18 08:20:01 · 2316 阅读 · 0 评论 -
Java多线程extends Thread和implements Runnable
第一种:将类声明为Thread的子类。该子类重写Thread类的run方法,之后就可以分配并且启动该子类的实例。第二种:声明实现Runnable的接口类。在该类实现run()方法,然后分配该类实例,之后创建Thread时作为一个参数传递并启动即可。Runnable为非Thread子类的类提供了一种激活的方式。因为接口实现的Thread的接口类并不是线程,所以使用的时候要先创建该类然后创建线程并把该类对象传进创建的线程类。class ThreadDemo extends Thread/implemen原创 2020-05-16 11:37:05 · 1128 阅读 · 0 评论 -
MAVEN POM.XML
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><!-- POM版本,4.0.0是唯一支持MAVEN 2和3的POM版本 --&..原创 2020-05-13 15:05:48 · 361 阅读 · 0 评论 -
commons-logging输出日志
commons-logging和slf4j都是日志的接口,供用户使用,而没有提供实现!log4j,logback等等才是日志的真正实现。当我们调用接口时,接口的工厂会自动寻找恰当的实现,返回一个实现的实例给我服务。这些过程都是透明化的,用户不需要进行任何操作common-logging:common-logging是apache提供的一个通用的日志接口。用户可以自由选择第三方的日志组件作...原创 2020-03-17 14:54:03 · 4591 阅读 · 0 评论 -
getResourceAsStream和getClassLoader().getResourceAsStream
直接上图,便于比较不理解上面连个路径在哪配置,哦,上图吧,虽然eclise在某些同仁眼里都成古董了,这里是上图的maven项目:通样一般的java项目一般会有个bin目录,配置在此:以下是引用网络上总结的,搬过来,本来我们就是搬砖的,哈:另外经常会看到如下配置:<value>classpath*:/application.properties&l...原创 2020-03-12 14:54:09 · 266 阅读 · 0 评论 -
Java 8 中的 Streams API 详解(转)
为什么需要 StreamStream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合...转载 2020-01-21 20:27:58 · 582 阅读 · 0 评论 -
commons-lang3
看下官网描述:The standard Java libraries fail to provide enough methods for manipulation of its core classes. Apache Commons Lang provides these extra methods.Lang provides a host of helper utilities for ...原创 2020-01-19 10:07:38 · 352 阅读 · 0 评论 -
系统学习消息队列分享(十) 如何实现高性能的异步网络传输?
异步与同步模型最大的区别是,同步模型会阻塞线程等待资源,而异步模型不会阻塞线程,它是等资源准备好后,再通知业务代码来完成后续的资源处理逻 辑。这种异步设计的方法,可以很好地解决IO等待的问题。我们开发的绝大多数业务系统,它都是IO密集型系统。跟IO密集型系统相对的另一种系统叫计算密集型系 统。通过这两种系统的名字,估计你也能大概猜出来IO密集型系统是什么意思。IO密集型系统大部分时间都在执...转载 2019-12-12 14:30:53 · 155 阅读 · 2 评论 -
系统学习消息队列分享(九) 如何使用异步设计提升系统性能?
对于开发者来说,异步是一种程序设计的思想,使用异步模式设计的程序可以显著减少线程等待,从而在高 吞吐量的场景中,极大提升系统的整体性能,显著降低时延。因此,像消息队列这种需要超高吞吐量和超低时延的中间件系统,在其核心流程中,一定会大量采用异步的 设计思想。接下来,我们一起来通过一个非常简单的例子学习一下,使用异步设计是如何提升系统性能的。异步设计如何提升系统性能?假设我们要实现一个...转载 2019-12-12 14:30:11 · 185 阅读 · 0 评论