Java学习
文章平均质量分 66
codingjav
骑马Coding
展开
-
mybatis源码解析 - mapper代理对象的生成
1、简单示例先看一个简单纯粹的mybatis demo(不集成spring等其他框架),代码结构很简单,如下图:完整代码地址:kingoe/boot-study;mapper层和我们平时说的dao层指的是同一个内容,都是数据库操作的封装,但是在没有集成mybatis时,dao层的接口都是需要我们手动去写其实现类,可在上图中我们却发现:我们并没有手动去实现PersonMapper接口,但工程却能实实在在的查询数据库,获取我们需要的数据,debug代码可以发现 PersonMapper实例是一个代.原创 2022-01-22 19:45:55 · 581 阅读 · 0 评论 -
Spring拓展接口之FactoryBean
1、是什么FactoryBean的源码比较简单,大家可以细读下其注释。/** * 实现此接口的bean不能用作普通bean。此bean暴露的对象是通过getObject()创建的对象,而不是它自身 */public interface FactoryBean<T> { /** * 返回此工厂管理的对象的实例(可能是共享的或独立的,取决于isSingleton()的返回值) */ @Nullable T getObject() thro原创 2022-01-22 14:35:54 · 359 阅读 · 0 评论 -
canal入门
前言以前对canal仅仅是停留在书本的概念层面上,从没实际搭建操作过,这不趁着元旦假期,学习输出一波。在此也祝福大家新年快乐,希望2022年大家工作顺利,事业更进一步。在日常工作中,数据不仅仅是直接保存在数据库中,还会涉及到其他中间组件,比如需要将数据同步到ES中供检索使用,也会把最新数据同步刷新到Redis等缓存中,实现数据一致性。这时就可以用到阿里开源的框架Canal,他可以很方便地同步数据库的增量数据到其他的存储应用。1、什么是canal我们先来看下官网的介绍:...原创 2022-01-02 19:59:30 · 874 阅读 · 0 评论 -
谈谈对线程安全的理解
如果这个是面试官直接问你的问题,你会怎么回答?一个专业的描述是,当多个线程访问一个对象时,如果不用进行额外的同步控制或其他的协调操作,调用这个对象的行为都可以获得正确的结果,我们就说这个对象是线程安全的那么我们如何做到线程安全?实现线程安全的方式有多种,其中在源码中常见的方式是,采用synchronized关键字给代码块或方法加锁,比如StringBuffer查看StringBuffer的源码,你会看到是这样的:那么,我们开发中,如果需要拼接字符串,使用StringBuilder还是S原创 2021-10-17 21:34:33 · 232 阅读 · 0 评论 -
SpringMVC 方法三种类型返回值总结,你用过几种?
SpringMVC 现在算是 Java 领域的一个基础性框架了,很多人天天用,可是对于 SpringMVC 方法的返回值,你又是否完全清楚呢?今天松哥就来和大家聊一聊 SpringMVC 中四种不同类型的返回值,看看有没有 get 到你的知识盲点?1. ModelAndView以前前后端不分的情况下,ModelAndView 应该是最最常见的返回值类型了,现在前后端分离后,后端都是以返回 JSON 数据为主了。后端返回 ModelAndView 这个比较容易理解,开发者可以在 ModelAndVie转载 2021-09-07 22:23:51 · 1289 阅读 · 0 评论 -
springboot跨域解决方案
1:为什么会出现跨域问题 出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port) 简单说A应用只能访问A应用后台传来数据,原创 2021-09-07 14:16:14 · 141 阅读 · 0 评论 -
JVM脑图整理
原创 2021-08-21 20:49:20 · 163 阅读 · 0 评论 -
面试题之Java内存区域
基本问题介绍下 Java 内存区域(运行时数据区) Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么) 对象的访问定位的两种方式(句柄和直接指针两种方式)1、运行时数据区域JDK1.8之前:JDK1.8:线程私有的:程序计数器 虚拟机栈 本地方法栈线程共享的:堆 方法区 直接内存 (非运行时数据区的一部分)2.1 程序计数器程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时通过原创 2021-08-21 17:34:10 · 215 阅读 · 0 评论 -
限流算法之计数器算法
计数器法是限流算法里最简单也是最容易实现的一种算法。假设一个接口限制一分钟内的访问次数不能超过100个,维护一个计数器,每次有新的请求过来,计数器加一,这时候判断,如果计数器的值小于限流值,并且与上一次请求的时间间隔还在一分钟内,允许请求通过,否则拒绝请求,如果超出了时间间隔,要将计数器清零。/** * 限流算法集合 */@Slf4jpublic class RateLimitUtils { //初始时间 private static long startTime =原创 2021-08-21 00:31:34 · 787 阅读 · 0 评论 -
Hystrix容错
Hystrix的容错主要是通过添加容许延迟和容错方法,帮助控制这些分布式服务之间的交互。还通过隔离服务之间的访问点,阻止它们之间的级联故障以及提供回退选项来实现这一点,从而提高系统的整体弹性。Hystrix主要提供了以下几种容错方法:1. 资源隔离,2.熔断,3. 降级。1 资源隔离 资源隔离主要指对线程的隔离。Hystrix提供了两种线程隔离方式:线程池和信号量。1. 线程隔离 - 线程池 Hystrix通过命令模式对发送请求的对象和执行请求的对象进行解耦,将不同类型的业务...原创 2021-08-18 23:53:47 · 570 阅读 · 0 评论 -
Hystrix原理讲解
目录前言:服务雪崩定义:雪崩应对策略:使用Hystrix解决雪崩:特色:设计原则前言:分布式系统中经常会出现某个基础服务不可用造成整个系统不可用的情况, 这种现象被称为服务雪崩效应. 为了应对服务雪崩, 一种常见的做法是手动服务降级. 而Hystrix的出现,给我们提供了另一种选择.服务雪崩定义:服务雪崩效应是一种因服务提供者的不可用导致服务调用者的不可用,并将不可用逐渐放大的过程.如果所示:上图中, A为服务提供者, B为A的服务调用者, ...原创 2021-08-18 23:43:20 · 146 阅读 · 0 评论 -
Java偷懒洗牌算法
public class Card { private String card; private String color; public Card(String card, String color) { this.card = card; this.color = color; } public String toString() { String ss= color+":"+card+" ";..原创 2021-08-18 15:15:29 · 108 阅读 · 0 评论 -
SpringBoot启动原理
正文我们开发任何一个Spring Boot项目,都会用到如下的启动类 123456 @SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }} 从上面代码可以看出,Annotation原创 2021-08-18 00:15:13 · 120 阅读 · 0 评论 -
spring注解之@Import注解的三种使用方式
1、@Import注解须知1、@Import只能用在类上,@Import通过快速导入的方式实现把实例加入spring的IOC容器中2、加入IOC容器的方式有很多种,@Import注解就相对很牛皮了,@Import注解可以用于导入第三方包,当然@Bean注解也可以,但是@Import注解快速导入的方式更加便捷3、@Import注解有三种用法2、@Import的三种用法@Import的三种用法主要包括:1、直接填class数组方式2、ImportSelector方式【重点..原创 2021-08-18 00:01:46 · 354 阅读 · 0 评论 -
Springboot-importSelector
ImportSelector接口概述ImportSelector接口是至spring中导入外部配置的核心接口,在SpringBoot的自动化配置和@EnableXXX(功能性注解)都有它的存在。我们先来看一下ImportSelector接口的源码,如下所示。public interface ImportSelector { /** * Select and return the names of which class(es) should be imported based on *原创 2021-08-17 23:38:58 · 597 阅读 · 0 评论 -
使用FactoryBean定制实例化逻辑
对象实现org.springframework.beans.factory.FactoryBean接口,则成为它本身的工厂。FactoryBean接口是Spring IoC容器实例化逻辑的扩展点。假如初始化代码非常复杂,此时使用java编码比使用XML配置更容易表达。这种场景中,你可以创建自己的FactoryBean,在该类中编写复杂的初始化程序,然后将你的自定义FactoryBean插入到容器。FactoryBean接口提供了三种方法:Object getObject():返回此工厂创建的对象原创 2021-08-17 00:50:06 · 191 阅读 · 0 评论 -
Spring解决循环依赖
跳出源码地狱,Spring巧用三级缓存解决循环依赖-原理篇-Java知音概述使用两级缓存即可解决循环依赖问题,但是Spring还需要支持AOP,对象被AOP之后会生成一个新的对象,如果在将实例注入之后再进行AOP,那么两个地方的对象将不一致。因此使用三级缓存,将对象的AOP提前到实例化进行。三级缓存的过程尝试获取一个bean,发现bean不存在,于是实例化该bean,并放入三级缓存。 第二次尝试获取该bean,从三级缓存中找到bean,对该实例执行AOP,放入二级缓存并返回。 在初始.原创 2021-08-16 00:59:08 · 102 阅读 · 0 评论 -
java.lang.IllegalStateException: closed
使用okhttp3的时候遇到的异常:java.lang.IllegalStateException: closed。原因是流已经关闭,所以无法再进行操作。public abstract class myCallback extends Callback<Bundle> { @Override public Bundle parseNetworkResponse(Response response, int id) throws Exception { .原创 2021-08-14 17:28:55 · 2511 阅读 · 0 评论 -
HashMap面试指南
(1)HashMap的实现原理?此题可以组成如下连环炮来问你看过HashMap源码嘛,知道原理嘛? 为什么用数组+链表? hash冲突你还知道哪些解决办法? 我用LinkedList代替数组结构可以么? 既然是可以的,为什么HashMap不用LinkedList,而选用数组?你看过HashMap源码嘛,知道原理嘛?针对这个问题,嗯,当然是必须看过HashMap源码。至于原理,下面那张图很清楚了:HashMap采用Entry数组来存储key-value对,每一个键值对...原创 2021-08-13 00:23:06 · 106 阅读 · 0 评论 -
Spring基础面试题-同步更新
谈谈你对IOC 和 AOP 的理解?他们的实现原理是什么?IOC 叫做控制反转,指的是通过Spring来管理对象的创建、配置和生命周期,这样相当于把控制权交给了Spring,不需要人工来管理对象之间复杂的依赖关系,这样做的好处就是解耦。在Spring里面,主要提供了 BeanFactory 和 ApplicationContext 两种 IOC 容器,通过他们来实现对 Bean 的管理。AOP 叫做面向切面编程,他是一个编程范式,目的就是提高代码的模块性。Srping AOP 基于动态代理的方式实现原创 2021-08-13 00:15:37 · 117 阅读 · 0 评论 -
CAS讲解
CAS,Compare and Swap即比较并交换,设计并发算法时常用到的一种技术,java.util.concurrent包全完建立在CAS之上,没有CAS也就没有此包,可见CAS的重要性。当前的处理器基本都支持CAS,只不过不同的厂家的实现不一样罢了。CAS有三个操作数:内存值V、旧的预期值A、要修改的值B,当且仅当预期值A和内存值V相同时,将内存值修改为B并返回true,否则什么都不做并返回false。CAS也是通过Unsafe实现的,看下Unsafe下的三个方法:public fin原创 2021-08-09 20:19:15 · 122 阅读 · 0 评论 -
Java中Random详解
目录伪随机什么是伪随机数?Java随机数产生原理:Java中常见生成随机数的几种方式Math.random()RandomRandom的两种构造方法:种子的作用数什么?小结ThreadLocalRandomSecureRandom总结参考资料伪随机什么是伪随机数?1.伪随机数是看似随机实质是固定的周期性序列,也就是有规则的随机。2.只要这个随机数是由确定算法生成的,那就是伪随机,只能通过不断算法优化,使你的随机数更接近随机。(随机这个属原创 2021-07-08 18:22:00 · 6101 阅读 · 0 评论 -
Redis进阶-缓存问题
Redis 最常用的一个场景就是作为缓存,本文主要探讨Redis作为缓存,在实践中可能会有哪些问题?比如一致性、击穿、穿透、雪崩、污染等。目录为什么要理解Redis缓存问题缓存穿透缓存击穿缓存雪崩缓存污染(或满了)缓存淘汰策略数据库和缓存一致性Cache Aside Pattern方案:队列 + 重试机制方案:异步更新缓存(基于订阅binlog的同步机制)参考文章为什么要理解Redis缓存问题在高并发业务场景下,数据库大多数情况都是用户并发访问.原创 2021-07-02 20:13:12 · 141 阅读 · 0 评论 -
MySQL中保存emoji表情
如果想要在MySQL数据库中保存表情这种字符,若字符集编码utf8或者其他字符集,当执行插入数据库操作就会抛错Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1这是因为这些字符所占用的字节数大于3,而utf8最大支持为3个字节,所以插入过程无法有效完成,导致错误。那么如果使得这些特殊字符保存到MySQL中?...原创 2020-02-13 10:46:21 · 332 阅读 · 0 评论 -
Leetcode-区域和检索-数组不可变
描述:给定一个整数数组 nums,求出数组从索引i到j(i≤j) 范围内元素的总和,包含i, j两点。说明:可以假设数组不可变;会多次调用区间和sumRange方法示例:给定 nums = [-2, 0, 3, -5, 2, -1],求和函数为 sumRange()sumRange(0, 2) -> 1sumRange(2, 5) -> -1...原创 2020-01-01 18:41:29 · 134 阅读 · 0 评论 -
Leetcode-二叉搜索树最近公共祖先
描述:给定一个二叉搜索树,找到该树中两个指定节点的最近公共节点(最近公共祖先节点可以为节点本身) 说明:所有节点的值都是唯一的。两个节点为不同节点且存在于给定的二叉搜索树。首先复习一下二叉搜索树的性质:左子树上所有节点的值都小于等于根节点的值 右子树上所有节点的值都大于等于根节点的值 左子树和右子树也都是二叉搜索树方法一:递归从根节点开始遍历树 如果节...原创 2019-12-31 22:13:03 · 167 阅读 · 0 评论 -
LeetCode-计数质数
描述:统计所有小于非负整数n的质数的数量。示例:输入:10;输出:4;解释:小于10的质数一共有4个,它们是2,3,5,7。解题思路:1、暴力破解验证一个数是否为质数有很多方法。最容易想到的就是暴力破解,采用暴力计算一步步碾压过去的方法。虽然不是最优的,但是对于我们解题是最有效的。public boolean isPrime(int n){ for(i...原创 2019-12-31 08:49:06 · 213 阅读 · 0 评论 -
策略模式
一、模式定义:大话设计模式中程杰老师给出的定义是这样的:策略模式(Strategy),定义了算法家族,分别封装起来,让它们之间可以互相替换,从模式让算法的变化不会影响到使用算法的用户。二、UML类图:这个模式涉及到三个角色:环境(Context)角色:持有一个Strategy的引用。抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口...原创 2018-04-19 13:15:22 · 218 阅读 · 0 评论 -
简单工厂模式
一、模式定义简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式(同属于创建型模式的还有工厂方法模式,抽象工厂模式,单例模式,建造者模式)。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。二、UML图结构:简单工...原创 2018-04-18 16:26:09 · 567 阅读 · 0 评论 -
设计模式-前序
最近在重新温故学习设计模式,所以准备在博客上分享出来,一方面加深自己学习和理解,还有就是分享出来互相学习,当然如果有不正确的地方希望大家理解,并在下面留言指出,我会第一时间更正;当然如果写的还不错,希望大家点下关注,谢谢大家。后面系列文章都是基于大话数据结构整理的,在此给出大话数据结构的下载连接:链接:https://pan.baidu.com/s/1ejtCFGWPRplG-GoMZeiTkw ...原创 2018-04-18 15:55:38 · 182 阅读 · 0 评论 -
Spring Boot:Exception parsing document: template="index", line 7 - column 3
最近这段时间在使用Spring Boot工程中访问静态html页面, 文件目录, -src/main/resources -templates -index.html -static -js -css 在写好HTML和css等后,浏览器访问,但是报错了, Whitelabel Error PageThis a...原创 2018-04-11 20:37:44 · 3700 阅读 · 2 评论 -
调用feign请求超时 feign.RetryableException: Read timed out executing POST
aused by: java.net.SocketTimeoutException: Read timed out at java.net.SocketInputStream.socketRead0(SocketInputStream.java) at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)...原创 2018-04-11 20:23:02 · 20490 阅读 · 5 评论 -
按月统计订单数量报表SQL语句(CASE 和DECODE的使用)
本文主要是使用CASE 和DECODE实现按月统计订单数量,通过此示例希望能帮助读者理解CASE和DECODE在ORCALE中的使用。1.使用CASE实现:按 Ctrl+C 复制代码按 Ctrl+C 复制代码这是一条按月统计每个OPERATING_WAREHOUSE_CODE订单数量的SQL语句,统计2012年一到三月份每个OPERATING_WAREHOUSE_COD转载 2017-10-23 19:53:18 · 6355 阅读 · 0 评论 -
Eclipse离线安装Java Decompiler插件
JavaDecompiler是Java语言的反编译工具,具体介绍见博客Java Decompiler(Java反编译工具)或者是看官网介绍,官网地址为http://jd.benow.ca/1、下载插件Eclipe的javaDecompiler插件名为JD-Eclipse,插件下载地址http://jd.benow.ca/2、安装插件Ecipse安装J原创 2017-09-03 22:48:28 · 1449 阅读 · 0 评论 -
BASE64Encoder及BASE64Decoder的正确用法
一直以来Base64的加密解密都是使用sun.misc包下的BASE64Encoder及BASE64Decoder的sun.misc.BASE64Encoder/BASE64Decoder类。这人个类是sun公司的内部方法,并没有在java api中公开过,不属于JDK标准库范畴,但在JDK中包含了该类,可以直接使用。但是在eclipse和MyEclipse中直接使用,却找不到该类。如下图!原创 2016-06-18 19:19:55 · 4067 阅读 · 0 评论 -
适配器模式
适配器模式基本介绍著名的设计模式“四人帮”这样评价适配器模式:将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。——Gang of Four适配器模式将一个类的接口适配成用户所期待的。一个适配器通常允许因为接口不兼容而不能一起工作的类能够在一起工作,做法是将类自己的接口包裹在一个已存在的类中。Ad...转载 2018-04-25 20:04:46 · 261 阅读 · 0 评论 -
备忘录模式
图例不全,大家最好还是看原文:原链接在阎宏博士的《JAVA与模式》一书中开头是这样描述备忘录(Memento)模式的: 备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式。 备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并外部化,存储起来,从而可以在将来合适...转载 2018-04-25 23:08:09 · 355 阅读 · 0 评论 -
组合模式
用途组合模式 (Component)将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有唯一性。组合模式是一种结构型模式。结构图-组合模式结构图Component : 组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理 Component 的子部件。abstract class Component { ...原创 2018-04-26 14:57:47 · 211 阅读 · 0 评论 -
迭代器模式
用途迭代器模式 (Iterator)提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。迭代器模式是一种行为型模式。 结构图-迭代器模式结构图Iterator : 定义访问元素的接口。interface Iterator { public Object first(); public Object next(); public boolean isDone()...原创 2018-04-26 15:28:56 · 241 阅读 · 0 评论 -
反射机制及其应用场景
反射----1 反射机制 反射的应用场景 Tomcat服务器1. Java的反射机制(1).反射和类的关系在程序运行状态中,对任意一个类(指的是.class文件),都能够知道这个类的所有的属性和方法。(2).反射和类对象的关系 反射对于某个类的一个对象,都能够调用它的任意一个方法和属性。(3).Java反射机制(基于(1) 和 (2))[1]. 这种动态获取类的信息以及动态...转载 2018-04-28 00:21:44 · 18970 阅读 · 5 评论