- 博客(20)
- 收藏
- 关注
原创 Java动态代理InvocationHandler和Proxy
java动态代理机制中有两个重要的类和接口InvocationHandler(接口)和Proxy(类),这一个类Proxy和接口InvocationHandler是我们实现动态代理的核心;1.InvocationHandler接口是proxy代理实例的调用处理程序实现的一个接口,每一个proxy代理实例都有一个关联的调用处理程序;在代理实例调用方法时,方法调用被编码分派到调用处理程序的invoke方法。每一个动态代理类的调用处理程序都必须实现InvocationHandler接口,并且每个代理类的实例都
2020-10-14 13:50:04 201
原创 Eureka
Eureka 核心概念Eureka 作为 Spring Cloud 体系中最核心、默认的注册中心组件,研究它的运行机制,有助于我们在工作中更好地使用它。服务提供者和服务的消费者,本质上也是 Eureka Client 角色。整体上可以分为两个主体:Eureka Server 和 Eureka Client。Eureka Server:注册中心服务端注册中心服务端主要对外提供了三个功能:服务注册服务提供者启动时,会通过 Eureka Client 向 Eureka Server 注册信息,Eur
2020-09-24 19:12:09 395
原创 JAVA多线程实现的四种方式
1、继承Thread类创建线程public class MyThread extends Thread { public void run() { System.out.println("MyThread.run()"); } } MyThread myThread1 = new MyThread();MyThread myThread2 = new MyThread();myThread1.start();myThread2.start(); 2、实现
2020-09-24 16:56:58 159
原创 spring boot自动配置工作原理
工作原理剖析Spring Boot关于自动配置的源码在spring-boot-autoconfigure-x.x.x.x.jar中:当然,自动配置原理的相关描述,官方文档貌似是没有提及。不过我们不难猜出,Spring Boot的启动类上有一个@SpringBootApplication注解,这个注解是Spring Boot项目必不可少的注解。那么自动配置原理一定和这个注解有着千丝万缕的联系!@EnableAutoConfiguration@SpringBootApplication是一个复合注解
2020-09-24 16:31:20 101
原创 分布式事务解决方案
分布式理论当我们的单个数据库的性能产生瓶颈的时候,我们可能会对数据库进行分区,这里所说的分区指的是物理分区,分区之后可能不同的库就处于不同的服务器上了,这个时候单个数据库的ACID已经不能适应这种情况了,而在这种ACID的集群环境下,再想保证集群的ACID几乎是很难达到,或者即使能达到那么效率和性能会大幅下降,最为关键的是再很难扩展新的分区了,这个时候如果再追求集群的ACID会导致我们的系统变得很差,这时我们就需要引入一个新的理论原则来适应这种集群的情况,就是 CAP 原则或者叫CAP定理,那么CAP定理
2020-09-24 15:56:16 93
原创 分布式锁的三种实现方式
分布式锁的三种实现方式1.基于数据库实现分布式锁;2.基于缓存(Redis等)实现分布式锁;3.基于Zookeeper实现分布式锁;一.基于数据库的实现方式基于数据库的实现方式的核心思想是:在数据库中创建一个表,表中包含方法名等字段,并在方法名字段上创建唯一索引,想要执行某个方法,就使用这个方法名向表中插入数据,成功插入则获取锁,执行完成后删除对应的行数据释放锁。(1)创建一个表:DROP TABLE IF EXISTS `method_lock`;CREATE TABLE `method_
2020-09-24 15:35:01 251
原创 REDIS缓存穿透,缓存击穿,缓存雪崩原因+解决方案
一、前言在我们日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题,可是一旦涉及大数据量的需求,比如一些商品抢购的情景,或者是主页访问量瞬间较大的时候,单一使用数据库来保存数据的系统会因为面向磁盘,磁盘读/写速度比较慢的问题而存在严重的性能弊端,一瞬间成千上万的请求到来,需要系统在极短的时间内完成成千上万次的读/写操作,这个时候往往不是数据库能够承受的,极其容易造成数据库系统瘫痪,最终导致服务宕机的严重生产问题。为了克服上述的问题,
2020-08-25 14:32:45 210
原创 Redis的持久化操作---RDB&AOF
Redis的持久化操作—RDB&AOFRDB(Redis DataBase):Rdb 保存的是dump.rdb文件顾名思义,他是一个redis的一个数据库备份文件,是一个快照,可以保存当前时间内数据库内的所有信息。它会在指定的时间间隔内将内存中的数据集快照写入到磁盘,也就是Snapshot快照,恢复数据的时候,将快照文件直接读取到内存中去。原理:Redis会单独创建一个子进程(fork)来进行持久化,会先将数据写入到一个临时文件中去,等持久化过程结束后,再用这个临时文件替换上次持久化号的文
2020-08-25 13:59:29 315
原创 @PostConstruct注解
@PostConstruct注解好多人以为是Spring提供的。其实是Java自己的注解。Java中该注解的说明:@PostConstruct该注解被用来修饰一个非静态的void()方法。被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。通常我们会是在Spring框架中使用到@PostConstruct注解 该注解的方法在整个Bean初始化中的执行顺序:Constructor
2020-07-22 13:58:06 122
原创 java freemark导出word (模板、单张图片、多张图片源码)
java freemark导出word (模板、单张图片、多张图片源码)首先模板设置代码编辑设置word只读、全部环境设置、jar包**模板设置**设置模板然后另存为这里一定要选择对xml格式,否则后期模板图片设置的时候有问题,无法多张图片,被这坑过,勿踩!!!然后就是把xml文件直接修改后缀.ftl文件直接放到项目目录下代码:import java.io.BufferedWriter;import java.io.File;import java.io.FileInput
2020-07-15 16:00:31 580
原创 MQ安装及队列和通道配置
一、 MQ安装打开安装程序检查所需软件是否已经全部安装,如果没有,则需要安装之后才能进行MQ安装。检查方法:选择软件需求,对于列表中未安装软件进行安装。选择CD-ROM,选取语言,点击确定,即可进入自动安装页面。点击下一步,选择安装路径,下一步,直到安装完成,刷新安装向导页面,所有必需软件都以安装完成。网络配置选项不做任何更改。选择WebSphere MQ安装,选择启动IBM WebSphere MQ安装程序。接受许可协议,下一步。选择定制安装。下一步。选择路径,安装所有需要的功
2020-07-15 15:51:03 4912
原创 git push免输入账号和密码方法
最近在做些oj,所以需要频繁的git push提交代码,每次都要输入帐号和密码,感觉不舒服,于是乎就做了如下设置,然后就可以开心的提交啦~Linux或者Mac下方法:创建文件,进入文件,输入内容:cd ~touch .git-credentialsvim .git-credentialshttps://{username}:{password}@github.com在终端下输入:git config --global credential.helper store打开~/.gitconfi
2020-07-15 15:42:37 396
原创 java 反射机制之 getDeclaredMethod()获取方法,然后invoke执行实例对应的方法
获取反射的方法有:第一种:Class c = SubjectService.class第二种:Class c = Class.forName(SubjectService)获取到 Class 之后,便可以获取有参方法c.getDeclaredMethod(String name, Class<?>... parameterTypes)获取本类中的所有方法 (只拿本类中的)c.getDeclaredMethods();继续解析代码中的SubjectService.cla
2020-07-15 15:39:02 860
原创 JAVA后端生成Token(令牌),用于校验客户端
1.概述:在web项目中,服务端和前端经常需要交互数据,有的时候由于网络相应慢,客户端在提交某些敏感数据(比如按照正常的业务逻辑,此份数据只能保存一份)时,如果前端多次点击提交按钮会导致提交多份数据,这种情况我们是要防止发生的。2.解决方法:①前端处理:在提交之后通过js立即将按钮隐藏或者置为不可用。②后端处理:对于每次提交到后台的数据必须校验,也就是通过前端携带的令牌(一串唯一字符串)与后端校验来判断当前数据是否有效。3.总结:第一种方法相对来说比较简单,但是安全系数不高,第二种方法从根本上解决了
2020-07-15 15:21:49 1052
原创 Java中的BigInteger和 BigDecimal
Integer类作为int的包装类,能存储的最大整型值为2^31-1 ,Long类最大为2^63-1,虽然比Integer类大了很多,但是也是有限的。如果想要表示更大的整数,不管是基本数据类型还是它们对应的包装类都无法实现。Java中提供了两个用于高精度计算的类:BigInteger和BigDecimal,这两个类包含的方法、提供的操作与基本类型及其对应的包装类相同,并提供了java.lang.Math的所有相关方法。BigInteger类实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数
2020-07-15 15:13:46 391
原创 spring data jpa的使用
Spring Data Jpa 简介JPAJPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范(JSR 338,这些接口所在包为javax.persistence,详细内容可参考https://github.com/javaee/jpa-spec)JPA的出现主要是为了简化持久层开发以及整合ORM技术,结束Hibernate、TopLink、JDO等ORM框架各自为营的局面。JPA是在吸收现有ORM框架的基础上发展而来,易于使
2020-07-15 11:15:17 336
原创 java中静态方法,非静态方法和构造方法的执行顺序问题
java中静态方法,非静态方法和构造方法的执行顺序问题一直是面试总会遇到的一个问题,很多初级程序员都会在这个上面出现问题public class A {static {System.out.println(“输出静态方法===A”);}public A() { System.out.println("输出构造方法===A");}{ System.out.println("输出非静态方法===A");}}public class B extends A {static
2020-07-15 10:46:26 278
原创 单例模式
什么是单例模式面试官问什么是单例模式时,千万不要答非所问,给出单例模式有两种类型之类的回答,要围绕单例模式的定义去展开。单例模式是指在内存中只会创建且仅创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同时,为了防止频繁地创建对象使得内存飙升,单例模式可以让程序仅在内存中创建一个对象,让所有需要调用的地方都共享这一单例对象。单例模式的类型单例模式有两种类型:懒汉式:在真正需要使用对象时才去创建该单例类对象饿汉式:在类加载时已经创建好该单例对象,等待被程序使用懒汉式创建单例对象.
2020-07-15 10:35:48 99
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人