
Java学习
文章平均质量分 82
Venlenter
这个作者很懒,什么都没留下…
展开
-
Mysql+ES+Canal实现高性能模糊搜索
mysql+ES+canal实现高并发、高性能搜索转载 2025-04-30 15:28:04 · 24 阅读 · 0 评论 -
通俗易懂 悲观锁、乐观锁、可重入锁、自旋锁、偏向锁、轻量/重量级锁、读写锁、各种锁及其Java实现!
通俗易懂 悲观锁、乐观锁、可重入锁、自旋锁、偏向锁、轻量/重量级锁、读写锁、各种锁及其Java实现!转载 2024-12-31 18:20:37 · 223 阅读 · 0 评论 -
一篇吃透布隆过滤器(Bloom Filter)及其使用场景
一篇吃透布隆过滤器(Bloom Filter)及其使用场景、Redis缓存穿透、Java实现转载 2024-06-14 16:38:04 · 1310 阅读 · 1 评论 -
基于SpringBoot的ElasticSearch操作(超详细教程)
基于SpringBoot+Elasticsearch的操作项目,从零到一,囊括了es本身的API操作、java代码的请求(索引操作、doc操作插入、精准搜索、模糊搜索、聚合搜索等)原创 2023-10-05 20:47:18 · 6204 阅读 · 1 评论 -
Spring Boot 系列 - WebSocket 简单使用(建立一个网页聊天室)
使用方法:启动application启动类,然后右键在浏览器中打开chat.html,可以打开2个页面,这样就可以双人聊天交流。在实现消息推送的项目中往往需要 WebSocket,以下简单讲解在 Spring boot 中使用 WebSocket。1、pom.xml 中引入 spring-boot-starter-websocket。2、往 spring 容器中注入 ServerEndpointExporter。3、Endpoint 具体实现。原创 2023-06-01 18:39:23 · 772 阅读 · 1 评论 -
Spring事务失效八大场景
Spring事务失效八大场景转载 2023-02-09 12:04:41 · 2738 阅读 · 0 评论 -
基于elasticjob的入门maven项目搭建
基于elasticjob的入门maven项目搭建原创 2022-09-01 15:39:44 · 1878 阅读 · 0 评论 -
java字符串不足长度自动补0
java字符串不足长度自动补0原创 2022-07-28 13:46:58 · 19363 阅读 · 2 评论 -
SpringBoot注解@Async
一、前言Springboot中执行异步任务,可以使用线程池,也可以直接使用@Async注解来实现异步任务。而@Async也不是可以随便使用的,如果使用方式不对,也可能做了无用功,@Async不生效,导致实际还是同步执行二、原理因为@Transactional和@Async注解的实现都是基于Spring的AOP,而AOP的实现是基于动态代理实现的。那么注解失效的原因就很明显了,有可能因为调用方法的是对象本身而不是代理对象,没有经过Spring容器,无法使用代理对象调用即被调用方法 和 调用原创 2022-04-01 15:51:49 · 7808 阅读 · 0 评论 -
@Transactional事务不生效的原因大解读
1、概述事务在后端开发中无处不在,是数据一致性的最基本保证。在Spring中可以通过对方法进行事务的配置,而不是像原来通过手动写代码的方式实现事务的操作,这在很大程度上减少了开发的难度。因此我们在使用spring事务的时候,门槛变得异常的低,小学生水平就能很好的管理好事务,但是同学们或多或少都遇见过一些事务不生效的难题,为啥呢?本文就针对于此来做一些具体举例分析,尽量做到全覆盖2、栗子Spring团队建议在具体的类(或类的方法)上使用 @Transactional 注解,而不要使用在类所要实现转载 2022-04-01 14:56:36 · 12577 阅读 · 0 评论 -
Springboot通过redisTemplate实现发布订阅
Springboot通过redisTemplate实现发布/订阅原创 2022-02-25 17:17:42 · 4682 阅读 · 0 评论 -
如何获取JVM的dump文件
一、方式一:JVM启动时增加两个参数:1、出现 OOME 时生成堆 dump: -XX:+HeapDumpOnOutOfMemoryError2、生成堆文件地址:-XX:HeapDumpPath=/opt/logs/myService/HeapDumpOnOutOfMemoryError/java -Xms2048m -Xmx2048m-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=/opt/logs/myService/HeapDumpOn原创 2022-01-11 15:46:50 · 2892 阅读 · 0 评论 -
过滤器Filter vs 拦截器Interceptor vs 切片Aspect 详解
1 前言 最近接触到了过滤器和拦截器,网上查了查资料,这里记录一下,这篇文章就来仔细剖析下过滤器和拦截器的区别与联系。2 拦截器与过滤器之间的区别从上面对拦截器与过滤器的描述来看,它俩是非常相似的,都能对客户端发来的请求进行处理,它们的区别如下:拦截机制有三种:1.过滤器(Filter)能拿到http请求,但是拿不到处理请求方法的信息。2.拦截器(Interceptor)既能拿到http请求信息,也能拿到处理请求方法的信息,但是拿不到方法的参数信息。3.切片(As...转载 2021-09-13 11:30:09 · 890 阅读 · 0 评论 -
Java各种加密方式集锦(AES,DES,RSA,DSA,MD5,SHA)
一. 什么是加密加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。在网络数据传输过程中会经常用到报文加密,通常是对报文体body信息或者某些参数进行加密。大体上分为双向加密和单向加密,而双向加密又分为对称加密和非对称加密.二.加密方式有哪些,具体怎么加密(一).双向加密1 .对称秘钥加密对称秘钥加密,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规转载 2021-08-25 16:46:39 · 3215 阅读 · 0 评论 -
配置使用logback-spring.xml
1、application.yml指定使用某个分支,rspring: profiles: active: prod原创 2021-06-01 14:03:39 · 1580 阅读 · 0 评论 -
Java Stream API入门
你可能没意识到Java对函数式编程的重视程度,看看Java 8加入函数式编程扩充多少功能就清楚了。Java 8之所以费这么大功夫引入函数式编程,原因有二:代码简洁,函数式编程写出的代码简洁且意图明确,使用stream接口让你从此告别for循环。 多核友好,Java函数式编程使得编写并行程序从未如此简单,你需要的全部就是调用一下parallel()方法。这一节我们学习stream,也就是Java函数式编程的主角。对于Java 7来说stream完全是个陌生东西,stream并不是某种数据结构,它只是数转载 2020-12-08 11:46:12 · 334 阅读 · 0 评论 -
CountDownLatch、CyclicBarrier和Semaphore用法与区别
在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。 以下是本文目录大纲: 一.CountDownLatch用法 二.CyclicBarrier用法 三.Semaphore用法 一.CountDownLatch用法 CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比转载 2020-09-08 15:15:35 · 1419 阅读 · 0 评论 -
Redis分布式锁-这一篇全了解(Redisson实现分布式锁完美方案)
前言在某些场景中,多个进程必须以互斥的方式独占共享资源,这时用分布式锁是最直接有效的。随着技术快速发展,数据规模增大,分布式系统越来越普及,一个应用往往会部署在多台机器上(多节点),在有些场景中,为了保证数据不重复,要求在同一时刻,同一任务只在一个节点上运行,即保证某一方法同一时刻只能被一个线程执行。在单机环境中,应用是在同一进程下的,只需要保证单进程多线程环境中的线程安全性,通过 JAVA 提供的 volatile、ReentrantLock、synchronized 以及 concurrent转载 2020-09-03 15:46:24 · 150251 阅读 · 37 评论 -
Redis分布式锁
关键词分布式锁: 是控制分布式系统之间同步访问共享资源的一种方式。 spring-data-redis: Spring针对redis的封装, 配置简单, 提供了与Redis存储交互的抽象封装, 十分优雅, 也极具扩展性, 推荐读一读源码 Lua: Lua 是一种轻量小巧的脚本语言, 可在redis执行.前言本文阐述了Redis分布式锁的一种简单JAVA实现及优化进阶, 实现了自动解锁、自定义异常、重试、注解锁等功能, 尝试用更优雅简洁的代码完成分布式锁.需求互斥性: 在分布式系统环境下转载 2020-09-02 23:38:51 · 680 阅读 · 0 评论 -
JAVA线上故障排查全套路
线上故障主要会包括cpu、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如jstack、jmap等工具也是不囿于一个方面的问题的,基本上出问题就是df、free、top 三连,然后依次jstack、jmap伺候,具体问题具体分析即可。CPU一般来讲我们首先会排查cpu方面的问题。cpu异常往往还是比较好定位的。原因包括业务逻辑问题(死循环)、频繁gc以及上下文切换过多。而最常见的往往是业务逻辑(或者框架逻辑)导致的,可以使用jsta转载 2020-09-02 14:32:30 · 1358 阅读 · 0 评论 -
用“逐步排除”的方法定位Java服务线上“系统性”故障
一、摘要由于硬件问题、系统资源紧缺或者程序本身的BUG,Java服务在线上不可避免地会出现一些“系统性”故障,比如:服务性能明显下降、部分(或所有)接口超时或卡死等。其中部分故障隐藏颇深,对运维和开发造成长期困扰。笔者根据自己的学习和实践,总结出一套行之有效的“逐步排除”的方法,来快速定位Java服务线上“系统性”故障。二、导言Java语言是广泛使用的语言,它具有跨平台的特性和易学易用的特点,很多服务端应用都采用Java语言开发。由于软件系统本身以及运行环境的复杂性,Java的应用不可避免.转载 2020-09-02 14:30:13 · 469 阅读 · 0 评论 -
Java 线上问题排查思路与工具使用
一、前言Java 语言是当前互联网应用最为广泛的语言,作为一名 Java 程序猿,当业务相对比较稳定之后平常工作除了 coding 之外,大部分时间(70%~80%)是会用来排查突发或者周期性的线上问题。由于业务应用 bug(本身或引入第三方库)、环境原因、硬件问题等原因,Java 线上服务出现故障 / 问题几乎不可避免。例如,常见的现象包括部分请求超时、用户明显感受到系统发生卡顿等等。尽快线上问题从系统表象来看非常明显,但排查深究其发生的原因还是比较困难的,因此对开发测试或者是运维的同学产生了转载 2020-09-02 14:27:15 · 551 阅读 · 0 评论 -
Java线程池实现原理及其在美团业务中的实践
随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流。使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器。J.U.C提供的线程池:ThreadPoolExecutor类,帮助开发人员管理线程并方便地执行并行任务。了解并合理使用线程池,是一个开发人员必修的基本功。本文开篇简述线程池概念和用途,接着结合线程池的源码,帮助读者领略线程池的设计思路,最后回归实践,通过案例讲述使用线程池遇到的问题,并给出了一种动态化线程池解决方案。一、写在前面1.1 线程池是什么线程池(Thread转载 2020-08-17 17:49:48 · 937 阅读 · 0 评论 -
Java多线程之内存可见性和原子性详解:Synchronized和Volatile
一、 背景和应用先给出开篇的问题能否保证 synchronized volatile 原子性 √ × 可见性 √ √ 二、 可见性介绍2.1 可见性介绍2.1.1 定义可见性:一个线程对共享变量值的修改,能够及时地被其他线程看到 共享变量:如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量2.1....原创 2020-03-21 23:15:16 · 448 阅读 · 0 评论 -
预防xss漏洞的方法
1、jstl:<c:out value="${name}" escapeXml="true"/>2、EL: ${fn:escapeXml(param)}3、工具类:org.apache.commons.lang.StringEscapeUtils.escapeXml(String)原创 2020-03-16 17:45:46 · 1153 阅读 · 0 评论 -
synchronized深度解析
一、背景高并发问题向来是Java程序员进阶的重点,也是面试的难点,而其中synchronized是不得不趟过的坑。所以专门整理记录了下synchronized的理解和笔记,从synchronized使用方法到底层原理源码,还对常见面试题和更深层扩展方面的思考,做出了讲解。二、 Synchronized简介2.1 synchronized的作用能够保证在【同一时刻】最多只有【一个】...原创 2020-03-14 23:52:28 · 408 阅读 · 3 评论 -
java.util.ConcurrentModificationException详解
异常产生当我们迭代一个ArrayList或者HashMap时,如果尝试对集合做一些修改操作(例如删除元素),可能会抛出java.util.ConcurrentModificationException的异常。import java.util.Iterator;import java.util.List;public class AddRemoveListElement { ...转载 2020-03-11 17:31:17 · 479 阅读 · 0 评论 -
深入浅出java Semaphore
前言JDK的并发包中提供了几个非常有用的工具类,这些工具类给我们在业务开发过程中提供了一种并发流程控制的手段,本文会基于实际应用场景介绍如何使用Semaphore,以及内部实现机制。Semaphore是什么Semaphore也叫信号量,在JDK1.5被引入,可以用来控制同时访问特定资源的线程数量,通过协调各个线程,以保证合理的使用资源。Semaphore内部维护了一组虚拟的许可,许...转载 2020-01-02 16:23:29 · 180 阅读 · 0 评论 -
java HttpClient发送get和post请求
最近需要用到在A项目里面发起请求去请求B项目的接口,所以用到了HttpClient,将工具类记录下,可设置get、post方式,也可以设置session和cookie等header 一、工具类HttpClientUtilpackage Utils;import java.io.*;import java.net.HttpURLConnection;import jav...原创 2018-10-27 12:06:47 · 584 阅读 · 0 评论 -
Java并发:CAS、ABA问题、ABA问题解决方案
【1】锁1、加锁的机制参见:java线程安全和锁机制详解网址:http://smallbug-vip.iteye.com/blog/22757432、锁的机制有如下问题(1)在多线程环境下,加锁、释放锁会导致比较多的上下文切换和调度延时,从而引起性能问题。(2)一个线程持有锁会导致其他所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致...转载 2018-09-22 21:37:25 · 701 阅读 · 0 评论 -
Arrays.java 源码分析
package java.util;import java.lang.reflect.Array;import java.util.concurrent.ForkJoinPool;import java.util.function.BinaryOperator;import java.util.function.Consumer;import java.util.function.D...转载 2018-08-27 01:07:09 · 356 阅读 · 0 评论 -
java实现浏览器下载文件,并解决兼容各浏览器的乱码与后缀问题
之前用java写了一个文件流输出文件的功能,测试细节功能的时候,发现了许多问题一、火狐浏览器下载带中文名字的文件会乱码,其他浏览器不会1、原因:找了下资料后发现,是火狐使用了RFC 2183协议。文件名存在http header中的filename,Content-Disposition: attachment; filename=FILENAME,该filename参数可用于为浏览器...原创 2018-07-27 14:31:37 · 6172 阅读 · 0 评论 -
Java 泛型与类型擦除
泛型,一个孤独的守门者。大家可能会有疑问,我为什么叫做泛型是一个守门者。这其实是我个人的看法而已,我的意思是说泛型没有其看起来那么深不可测,它并不神秘与神奇。泛型是 Java 中一个很小巧的概念,但同时也是一个很容易让人迷惑的知识点,它让人迷惑的地方在于它的许多表现有点违反直觉。文章开始的地方,先给大家奉上一道经典的测试题。List<String> l1 = new ArrayList...转载 2018-07-15 23:46:52 · 225 阅读 · 0 评论 -
分享一百多套开发视频教程的下载地址
转自:http://www.cnblogs.com/dennisit/p/3184225.html1. 北京圣思Java培训教学视频(资源共享网)2.Lucene/WebService/SVN/Ant/SpringMVC视频(学习资料库网)3.JUnit和Ant视频教程(VeryCD社区)4.《张孝祥JAVA视频教程》完整版[RMVB](东西网)5.历经5年转载 2017-03-16 16:15:27 · 659 阅读 · 0 评论 -
Spring AOP com.sun.proxy.$Proxy6 cannot be cast to xxx
spring.xml中配置了文件后, 通过下行代码 BraveKnight实例的时候报错com.sun.proxy.$Proxy6 cannot be cast to model.BraveKnight BraveKnight braveKnight = (BraveKnight) context.getBean("knight");spring.xml配置如下:<aop:config &g...原创 2018-03-05 01:18:58 · 1568 阅读 · 0 评论 -
详解java代理机制(静态代理、动态代理)以及使用场景
说起java动态代理,在我刚开始学java时对这项技术也是十分困惑,明明可以直接调通的对象方法为什么还要使用动态代理?随着学习的不断深入和工作经验的积累,慢慢的体会并理解了java动态代理机制。昨天再给公司新同事做技术培训时有同学就对动态代理产生了疑问,我这里梳理一遍一并记录一下,方便大家查看对自己也是加深记忆。(1)什么是代理?大道理上讲代理是一种软件设计模式,目的地希望能做到代码重用。具体上讲...转载 2018-05-28 23:48:30 · 10248 阅读 · 3 评论 -
深拷贝与浅拷贝详解
1.拷贝的引入(1)引用拷贝创建一个指向对象的引用变量的拷贝。例1:Teacher teacher = new Teacher("Taylor",26);Teacher otherteacher = teacher;System.out.println(teacher);System.out.println(otherteacher);1234输出结果:blog.Teacher@355da2...转载 2018-05-22 00:09:49 · 185 阅读 · 0 评论 -
深入剖析Java中的装箱和拆箱
原文出处: 海子自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题。本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱、拆箱相关的问题。以下是本文的目录大纲:一.什么是装箱?什么是拆箱?二.装箱和拆箱是如何实现的三.面试中相关的问题若有不正之处,请谅解和批评指正,不胜感激。一.什么是装箱?什么是拆箱?在前面的文章中提到,Java为每...转载 2018-05-19 17:27:32 · 176 阅读 · 0 评论 -
SpringBoot restTemplate请求get和post
一、restTemplate-getpublic LunkrResult getAvatar(String uid) throws JsonProcessingException { //设置headers HttpHeaders headers = new HttpHeaders(); headers.setContentType(Media...原创 2018-11-05 12:29:28 · 3593 阅读 · 0 评论 -
Java中List Set Map总结
1.Collection List Set Map 区别记忆这些都代表了Java中的集合,这里主要从其元素是否有序,是否可重复来进行区别记忆,以便恰当地使用,当然还存在同步方面的差异,见上一篇相关文章。 有序否 允许元素重复否 Collection 否 是 ...转载 2018-12-11 00:39:37 · 248 阅读 · 0 评论