Java
文章平均质量分 70
希望之光芒
风一样的速度,风一样的自由
展开
-
Redis的雪崩,击穿,穿透详解
该商品引起了一千万人关注,这些人不断的竞拍这双鞋,价格越拍越高,马爸爸乐开了花。,导致该key的大量请求,都打到了数据库,直接导致数据库挂掉了,服务无法响应。,并且附带本人签名,程序员将该鞋的信息存到了redis中,设置了。分,马上要拍到一个亿了,突然这双鞋在redis里的key数据。竞拍到此结束,鞋没卖出去,马爸爸又不开心了,把这个程序员也。的参数不断发起请求),redis中没有这样的数据,,这时候3个小时过去了,redis里首页的key。的数据,redis并没有这样的数据,这时候就。...转载 2022-08-10 16:02:33 · 6153 阅读 · 5 评论 -
SpringBoot循环依赖注入的问题
目录项目场景:问题描述:原因分析:解决方案:一、改为使用 Setter 方式注入二、使用 @Lazy 注解三、使用 PostConstruct 注解项目场景:后台架构为SpringBoot,业务上有一套调第三方接口逻辑,由于不稳定,需要另写一套新的。旧的有部分接口要依赖新的逻辑,新的有一部分需要通过旧的去获取第三方数据。于是,导致了代码上这两个类互相依赖,一启动直接裂开,报循环依赖错误。后来查阅了资料,了解了循环依赖注入的原理,在不解耦的情况下(当然最好的方式是解耦,重转载 2022-04-22 19:18:56 · 1623 阅读 · 1 评论 -
Disconnected from the target VM, address:xxxx 或者 Process finished with exit code 1 终极解决办法 idea
这个bug,没有日志,无从下手!网上找了上100篇文章仍然找不到解决方案!报错如下图:终极解决办法:1.安装jrebel,参考本博主博文https://blog.csdn.net/u013294097/article/details/902634772.使用jrebel使用debug启动3.特别注意:此处有日志文件产生4.排查日志,搞定!我这里的问题是两个同名文件导致的:如图,谢谢!————————————————...转载 2022-02-28 16:39:55 · 484 阅读 · 0 评论 -
Spring中BeanFactory和FactoryBean的区别
共同点: 都是接口区别: BeanFactory以Factory结尾,表示它是一个工厂类,用于管理Bean的一个工厂 在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器)来进行管理的。 但对FactoryBean而言,这个Bean不是简单的Bean,而是一个能生产或者修饰对象生成的工厂Be...转载 2019-12-06 17:35:48 · 135 阅读 · 0 评论 -
JVM架构和GC垃圾回收机制(JVM面试不用愁)
JVM架构和GC垃圾回收机制详解JVM架构图分析下图:参考网络+书籍,如有侵权请见谅 (想了解Hadoop内存溢出请看: Hadoop内存溢出(OOM)分类、参数调优化)JVM被分为三个主要的子系统(1)类加载器子系统(2)运行时数据区(3)执行引擎1. 类加载器子系统Java的动态类加载功能是由类加载器子系统处理。当它在运行时(不是编译时)首次引用一个类时,它加载、链接并初始化该类文件。1.1 ...转载 2018-07-04 11:48:45 · 147 阅读 · 0 评论 -
velocity http请求400错误HTTP Status 400 The request sent by the client was syntactically incorrect
今天在和后端联调一个接口的时候,一个是要提交7个字段如果全部提交的时候,response返回结果是 HTTP Status 400 The request sent by the client was syntactically incorrect只提交其中必填的三个时候,是可以正确提交的,把字段和后端确认了下,字段都没问题。解决思路:首先可以确认前端ajax是没有问题的,请求是走到后端了,那么就...转载 2018-06-26 17:04:58 · 305 阅读 · 0 评论 -
乐观锁的一种实现方式——CAS
在深入理解乐观锁与悲观锁一文中我们介绍过锁。本文在这篇文章的基础上,深入分析一下乐观锁的实现机制,介绍什么是CAS、CAS的应用以及CAS存在的问题等。线程安全众所周知,Java是多线程的。但是,Java对多线程的支持其实是一把双刃剑。一旦涉及到多个线程操作共享资源的情况时,处理不好就可能产生线程安全问题。线程安全性可能是非常复杂的,在没有充足的同步的情况下,多个线程中的操作执行顺序是不可预测的。...转载 2018-06-15 02:33:34 · 203 阅读 · 0 评论 -
代理模式 vs 装饰模式
代理模式和装饰模式有很大的相似性,二者的类图(几乎)是一样的。下面分别讲解代理模式和装饰模式。1、代理模式 一般著名的跑步运动员都会有自己的代理人,如果想联系该运动员的比赛事宜,可以直接联系他的代理人就可以了。类图如下所示: IRunner接口如下:public interface IRunner { public void run();}Runner类如下所示:public clas...转载 2018-06-15 01:36:17 · 119 阅读 · 0 评论 -
JDK里的设计模式
结构型模式:适配器模式:用来把一个接口转化成另一个接口。java.util.Arrays#asList()javax.swing.JTable(TableModel)java.io.InputStreamReader(InputStream)java.io.OutputStreamWriter(OutputStream)装饰者模式:动态的给一个对象附加额外的功能,这也是子类的一种替代方式。可以看到...转载 2018-06-15 01:29:37 · 119 阅读 · 0 评论 -
JVM常见垃圾回收算法
jdk1.7.0_79 众所周知,Java是一门不用程序员手动管理内存的语言,全靠JVM自动管理内存,既然是自动管理,那必然有一个垃圾内存的回收机制或者回收算法。本文将介绍几种常见的垃圾回收(下文简称GC)算法。 在Java堆上分配一个内存给实例对象时,此时在虚拟机栈上引用型变量就会存放这个实例对象的起始地址。Object obj = new Object(); 现在如果我们将变量赋值为n...转载 2018-06-22 15:37:32 · 508 阅读 · 0 评论 -
Java反射中Class.forName和classloader的区别
ava中Class.forName和classloader都可以用来对类进行加载。 Class.forName除了将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的static块。而classloader只干一件事情,就是将.class文件加载到jvm中,不会执行static中的内容,只有在newInstance才会去执行static块。 Class.forName(name,...转载 2018-06-22 11:42:27 · 784 阅读 · 0 评论 -
ReenTrantLock可重入锁(和synchronized的区别)总结
ReenTrantLock可重入锁(和synchronized的区别)总结可重入性:从名字上理解,ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也是可重入的,两者关于这个的区别不大。两者都是同一个线程没进入一次,锁的计数器都自增1,所以要等到锁的计数器下降为0时才能释放锁。 锁的实现:Synchronized是依赖于JVM实现的,而ReenTran...转载 2018-04-27 03:53:44 · 159 阅读 · 0 评论 -
Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition
在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作。比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权。因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,就不会让队列有空间,那么生产者就会一直无限等待下去。因此,一般情况下,当队列满时,会让生产者交出对...转载 2018-05-03 03:50:46 · 97 阅读 · 0 评论 -
volatile的使用及其原理
1、 volatile的作用相比Sychronized(重量级锁,对系统性能影响较大),volatile提供了另一种解决可见性和有序性问题的方案。对于原子性,需要强调一点,也是大家容易误解的一点:对volatile变量的单次读/写操作可以保证原子性的,如long和double类型变量,但是并不能保证i++这种操作的原子性,因为本质上i++是读、写两次操作。2、volatile的使用1、...转载 2018-08-16 14:31:43 · 130 阅读 · 0 评论 -
分布式系统的 CAP 定理
AP定理指出,在一个分布式系统中,对于一致性、可用性、分区容错这三个特性,不可能同时满足,而是必须有所舍弃。我们设计分布式系统时,必须在三者之间(尤其是一致性和可用性之间)有所取舍和平衡。 作者:王克锋 出处:https://kefeng.wang/2018/08/01/distributed-cap/ 版权:自由转载-非商用-非衍生-保持署名,转载请标明作者和出处。1 概述1.1 概念...转载 2018-09-13 15:47:58 · 227 阅读 · 0 评论 -
Spring Boot static静态资源不能访问问题
之前做了一个demo,当时并没有注意,后来发现静态资源不能访问了。Spring Boot自动配置了classpath:/static/下面的资源为静态资源,后来网上找了很多的方法都试过了,解决不了。于是我重新写了一个项目,把这个旧项目的配置一个一个的移动过去,最后发现是我配置的拦截器的问题。因为我配置拦截器继承的类是:WebMvcConfigurationSupport这个...转载 2019-09-10 22:39:38 · 2654 阅读 · 1 评论 -
HashMap常见面试题
1.“你知道HashMap的工作原理吗?” “你知道HashMap的get()方法的工作原理吗?”HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存Entry对象。当获取对象时,通过键对象的equals()方法找到正确的键值对,然...转载 2019-06-24 17:43:11 · 478 阅读 · 0 评论 -
Java基础:Java finally语句到底是在return之前还是之后执行?
网上有很多人探讨Java中异常捕获机制try…catch…finally块中的finally语句是不是一定会被执行?很多人都说不是,当然他们的回答是正确的,经过我试验,至少有两种情况下finally语句是不会被try语句没有被执行到,如在try语句之前就返回了,这样finally语句就不会执行,这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被执行到。 在tr...转载 2019-06-26 17:40:15 · 108 阅读 · 0 评论 -
spring boot redis分布式锁
转载自https://blog.csdn.net/qq_36510261/article/details/78962081一. Redis 分布式锁的实现以及存在的问题锁是针对某个资源,保证其访问的互斥性,在实际使用当中,这个资源一般是一个字符串。使用 Redis 实现锁,主要是将资源放到 Redis 当中,利用其原子性,当其他线程访问时,如果 Redis 中已经存在这个资源,就不允许之后...转载 2018-10-31 18:35:16 · 166 阅读 · 0 评论 -
logback和log4j比较,前者是后者改良,logback配置详解
一、logback的介绍 Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch。它当前分为下面下个模块: logback-core:其它两个模块的基础模块 logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging...转载 2018-10-17 14:19:11 · 195 阅读 · 0 评论 -
Git Flow工作流程
引言编写的目的-通过规范化的流程,使得产品、开发与测试等各个部门更高效的协同工作。-通过规范化的流程使得产品高效稳定运行。背景在多组员,多项目等环境进行协同工作时,如果没有统一规范、统一流程,则会导致额外的工作量,甚至会做无用功。所以要减少版本冲突,减轻不必要的工作,就需要规范化的工作流程。总则-统一使用Git作为版本控制的主要工具。-统一使用GitFlow流程管理控制...转载 2018-10-08 09:12:22 · 3545 阅读 · 0 评论 -
Spring Boot学习--项目启动后执行特定方法
Springboot给我们提供了两种“开机启动”某些方法的方式:ApplicationRunner和CommandLineRunner。这两种方法提供的目的是为了满足,在项目启动的时候立刻执行某些方法。我们可以通过实现ApplicationRunner和CommandLineRunner,来实现,他们都是在SpringApplication 执行之后开始执行的。CommandLineRun...转载 2018-09-29 02:28:38 · 236 阅读 · 0 评论 -
@Value("#{}")与@Value("${}")的区别
1 @Value("#{}") SpEL表达式@Value("#{}") 表示SpEl表达式通常用来获取bean的属性,或者调用bean的某个方法。当然还有可以表示常量@RestController@RequestMapping("/login")@Componentpublic class LoginController { @Value("#{1}") privat...转载 2018-09-29 02:20:50 · 2705 阅读 · 0 评论 -
tomcat启动脚本startup.sh分析
一、分析说明 为了写出更加完善的tomcat启动方面的自动化脚本,健壮自己用于代码上线自动化部署的脚本,特分析下tomcat的bin目录下的starup.sh脚本,学习标准的sh脚本的编写方法,从中吸取经验 二、脚本分析#!/bin/sh# Licensed to the Apache Software Foundation (ASF) under one or more...转载 2018-09-21 16:15:37 · 13399 阅读 · 0 评论 -
Java多线程: CAS
悲观锁与乐观锁悲观锁:悲观锁思想认为如果多个线程中使用共享资源,则它们肯定会同时进行修改从而引起冲突,悲观锁的解决方式是共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程。synchronized和ReentrantLock等独占锁就是悲观锁思想的实现。乐观锁:乐观锁思想认为如果多个线程使用共享资源,它们修改应该是有先后顺序的,不会同时进行修改,如果真的有冲突则后面修改失败。...转载 2018-05-03 02:41:19 · 89 阅读 · 0 评论 -
Java笔记
1、ArrayList和LinkedList的大致区别如下:1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于双向链表的数据结构。2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。2...原创 2018-04-10 22:06:47 · 120 阅读 · 0 评论 -
API 管理工具 Swagger 和 RAP 的比较
# 概述 微服务在当今的 web 开发中越来越盛行,前后端分离现在似乎也已成为中大型 Web 工程的基本模式,如何建立好前端调用和后端接口 (或者服务调用方和 API 提供方) 之间的契约,妥善处理好前端和后端之间的调用关系已经已经成为每个 web 项目开发前必须要考虑的一个问题,选择一个良好的 API 管理工具可以妥善处理好前端和后端开发人员的任务分工,使得项目开发可以达到事半功倍的效果。 之所...转载 2018-04-08 16:16:37 · 2190 阅读 · 0 评论 -
Spring框架中ModelAndView、Model、ModelMap的区别
1. ModelModel 是一个接口, 其实现类为ExtendedModelMap,继承了ModelMap类。public class ExtendedModelMap extends ModelMap implements Model12.ModelMapModelMap的声明格式:public class ModelMap extends LinkedHash转载 2017-09-15 15:03:36 · 234 阅读 · 0 评论 -
Java多线程:线程状态
一. 线程状态类型1. 新建状态(New):新创建了一个线程对象。2. 就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。3. 运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。4. 阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂转载 2017-09-13 16:07:20 · 142 阅读 · 0 评论 -
几种常见加密算法解析及使用
1.分类加密算法首先分为两种:单向加密、双向加密。单向加密是不可逆的,也就是只能加密,不能解密。通常用来传输类似用户名和密码,直接将加密后的数据提交到后台,因为后台不需要知道用户名和密码,可以直接将收到的加密后的数据存储到数据库。双向加密算法通常分为对称性加密算法和非对称性加密算法,对于对称性加密算法,信息接收双方都需事先知道密匙和加解密算法且其密匙是相同的,之后便是对数据转载 2017-09-04 23:23:48 · 677 阅读 · 0 评论 -
session原理及集群中session共享实现原理
对Web服务器进行集群,Session的安全和同步是最大的问题,实现Session同步有很多种方案,常见的可能的方式有:1、客户端Cookie加密。 用的较少,此处不详述。2、Session复制。 参与集群的每个节点的Session状态都被复制到集群中的其他所有节点上,无论何时,只要Session发生改变,Session数据都要重新被复制。Tomcat、JB转载 2017-09-03 21:11:53 · 159 阅读 · 0 评论 -
HttpSession详解
session的机制 http是无状态的协议,客户每次读取web页面时,服务器都打开新的会话,而且服务器也不会自动维护客户的上下文信息,那么要怎么才能实现会话跟踪呢?session就是一种保存上下文信息的机制,它是针对每一个用户的,变量的值保存在服务器端,通过SessionID来区分不同的客户,session是以cookie或URL重写为基础的,默认使用cookie来实现,转载 2017-08-12 05:38:06 · 209 阅读 · 0 评论 -
Nginx+Tomcat搭建高性能负载均衡集群
一、 工具 nginx-1.8.0 apache-tomcat-6.0.33二、 目标 实现高性能负载均衡的Tomcat集群: 三、 步骤 1、首先下载Nginx,要下载稳定版: 2、然后解压两个T转载 2017-08-12 05:32:32 · 164 阅读 · 0 评论 -
Java常用算法
1、冒泡法原理:比较两个相邻的元素,将值大的元素交换至右端。由此可见:N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N-i)次,所以可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数,即public class BubbleSort { public static void BubbleSort(int[] arr) {原创 2017-08-12 03:33:05 · 352 阅读 · 1 评论 -
Servlet中HttpSession
HttpSessionHttpSession概述什么是HttpSesssionjavax.servlet.http.HttpSession接口表示一个会话,我们可以把一个会话内需要共享的数据保存到HttSession对象中!获取HttpSession对象l HttpSession request.getSesssion():如果当前会话已经有了转载 2017-08-12 02:24:33 · 1075 阅读 · 0 评论 -
JVM内存管理的机制
1.JVM内存管理的机制 内存空间划分为:Sun JDK在实现时遵照JVM规范,将内存空间划分为堆、JVM方法栈、方法区、本地方法栈、PC寄存器。堆: 堆用于存储对象实例及数组值,可以认为Java中所有通过new创建的对象的内存都在此分配,Heap中对象所占用的内存由GC进行回收,在32位操作系统上最大为2GB,在64位操作系统上则没有限制,其大小可通过-Xms和-Xmx来控制,-X原创 2017-08-10 04:05:41 · 177 阅读 · 0 评论 -
HTTPS 是如何保证安全的?
每当我们讨论到信息安全的时候,我们最长接触到的信息加密传输的方式莫过于 HTTPS 了,当我们浏览器地址栏闪现出绿色时,就代表着这个网站支持 HTTPS 的加密信息传输方式,并且你与它的连接确实被加密了。但是 HTTPS 并不是一个单一的东西,它只是我们常见的 HTTP 协议和某个加密协议的一个混合,这个加密协议通常会是 TLS。那么 HTTPS 为什么安全呢?其实我们需要先考虑 HTTP 为什么转载 2017-08-17 04:35:13 · 176 阅读 · 0 评论 -
web.xml中的url-pattern写法规则及匹配过程
1. 写法①完全匹配:以“/”开头,以字母(非“*”)结束 如:/test/list.do②目录匹配:以“/”开头且以“/*”结尾 如:/test/*/*③扩展名匹配:以“*.”开头,以扩展名结束 如:*.do④ “/” 用来表明对应的Servlet为应用默认的Servlet。在这种情况下Servlet路径是请求的UR转载 2017-09-16 14:56:32 · 510 阅读 · 0 评论 -
JAVA8之lambda表达式详解,及stream中的lambda使用
前言: 本人也是学习lambda不久,可能有些地方描述有误,还请大家谅解及指正!lambda表达式详解一.问题1.什么是lambda表达式? 2.lambda表达式用来干什么的? 3.lambda表达式的优缺点? 4.lambda表达式的使用场景? 5.lambda只是一个语法糖吗?二.概念lambda表达式是JAVA8中提供转载 2017-09-28 09:37:43 · 419 阅读 · 0 评论 -
Java8揭秘(三)Default 方法
第二章 Default 方法为什么要有Default方法在Java8发布之际,有件事情就显得非常重要,即在不破坏java现有实现架构的情况下能往接口里增加新方法。引入Default方法到Java8,正是为了这个目的:优化接口的同时,避免跟现有实现架构的兼容问题。看下面例子:List list = ...list.forEach(...);// Lambda c转载 2017-09-28 14:08:17 · 333 阅读 · 0 评论