自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(73)
  • 问答 (2)
  • 收藏
  • 关注

转载 spring如何解决循环依赖(转载)

转载自:https://www.cnblogs.com/daimzh/p/13256413.html前言Spring中的循环依赖一直是Spring中一个很重要的话题,一方面是因为源码中为了解决循环依赖做了很多处理,另外一方面是因为面试的时候,如果问到Spring中比较高阶的问题,那么循环依赖必定逃不掉。如果你回答得好,那么这就是你的必杀技,反正,那就是面试官的必杀技,这也是取这个标题的原因,当然,本文的目的是为了让你在之后的所有面试中能多一个必杀技,专门用来绝杀面试官!本文的核心思想就是,当面试官问

2021-11-30 17:51:07 330

转载 分布式唯一Id生成工具类之Snowflake

Snowflake生成的是Long类型的ID,一个Long类型占8个字节,每个字节占8比特,也就是说一个Long类型占64个比特。Snowflake ID组成结构:正数位(占1比特)+ 时间戳(占41比特)+ 机器ID(占5比特)+ 数据中心(占5比特)+ 自增值(占12比特),总共64比特组成的一个Long类型。第一个bit位(1bit):Java中long的最高位是符号位代表正负,正数是0,负数是1,一般生成ID都为正数,所以默认为0。时间戳部分(41bit):毫秒级的时间,不建议存当前时间戳,而

2021-06-08 10:24:24 198

转载 Netty简单使用

1.添加依赖<dependency> <groupId>org.jboss.netty</groupId> <artifactId>netty</artifactId> <version>3.2.5.Final</version></dependency>2.服务端public class NettyServer { private static int HEA

2021-06-06 00:03:17 179

转载 接口限流,熔断降级

1.引入依赖<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-core</artifactId> <version>1.8.1</version></dependency>2.1限流2.1.1定义规则private static void initFlowRules(){ List&

2021-05-12 19:28:34 345

原创 Spring入门概括

1.BeanDefinitionBeandefinition表示Bean定义;Spring根据Beandefinition来创建Bean;BeanDefinition有很多属性用来描述Bean;BeanDefinition是Spring中非常核心的感念;BeanDefinition中的重要属性:beanClass:表示一个bean的类型,比如UserService.class.spring在创建备案的过程中会根据此属性来实例化得到对象;scope:表示一个bean的作用域,singleton表示该b

2021-04-24 22:06:07 117

转载 Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用

转自:https://www.cnblogs.com/fashflying/p/6908028.htmlSpring缓存注解@Cacheable、@CacheEvict、@CachePut使用从3.1开始,Spring引入了对Cache的支持。其使用方法和原理都类似于Spring对事务管理的支持。Spring Cache是作用在方法上的,其核心思想是这样的:当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的参数来调用该方法时将不再执行该方法,而是直接从缓存中

2021-04-19 10:50:51 140

原创 logback输出日志到指定文件配置

在根路径下创建:logback-spring.xmlSpringBoot 官方推荐优先使用带有 -spring 的文件名作为日志配置 ,默认的命名规则,并且放在:src/main/resources目录下,也可以使用核心配置文件自定义名字#自定义文件名logging.config=classpath:logging-config.xmllogback-spring.xml<?xml version="1.0" encoding="UTF-8"?><!-- 日志级别从低到高分为

2021-04-07 17:47:17 2017

原创 java实现斐波那数的两种方法

public class Fibona { public static void main(String[] args) { int result = function1(20); System.out.println(result); } private static int function1(int number) { if (number <= 1) { return number;

2021-04-02 22:08:25 81

原创 java获取文件目录地址工具类

public class DirectoryUtil { public static File[] local(File dir, final String regex) { return dir.listFiles(new FilenameFilter() { private Pattern pattern = Pattern.compile(regex); @Override public boolean

2021-03-31 22:41:48 118

原创 建造者模式(Builder)--流式API

如果类的构造器或者静态工厂中具有多个参数,设计这种类时,建造者模式(Builder)是最好的选择;特别是大多数参数都是可选或者类型相同时.与重叠构造器,建造者模式代码更易于阅读;与javaBeans比更加安全(javaBeans在构造过程中javaBeans可能处于不一致的状态,把类做成不可变的可能性不复存在)package com.builder;/** * @Authro: QYF * @Time:2021/3/23 22:39 */public class User { /*

2021-03-23 23:28:33 216

转载 idea提高效率的快捷键

idea 开发中常用的36个快捷键!  标题: idea 开发中常用的36个快捷键! - 不死码农 - 博客园转帖原地址: https://www.cnblogs.com/leeego-123/p/10429728.html------- 快速选中一个词,可以使用Ctrl+w------- udea中窗口最大化---->Windows 上: Ctrl+Shift+F12-------折叠方法代码 ctrl+shift+减号;展开方法区代码 ctrl+shift+加号------- Shif

2021-03-11 11:18:07 522

原创 java手写一个简单的栈类

public class LinkedStack<T> { private static class Node<U> { U item; Node<U> next; Node() { item = null; next = null; } Node(U item,Node<U> next){ thi

2021-03-09 22:51:30 114

原创 java获取整数二进制指定位数的值和给指定位数设置0或1(以及实际中的应用)

公司项目中领导要求数据库的一个字段用int类型的二进制表示多种状态每个下标对应不同的状态,1表示正常0表示不正常如7的二进制是111,则表示三个状态都正常6的二进制110表示第一个不正常,第二第三个都正常.要查询第二个状态是正常的,直接sql也能查出.这个样表示的好处就是便于以后扩展,以后的状态有增减不用修改数据库.package com.base;/** * @Authro: QYF * @Time:2021/2/26 21:38 */public class BinaryDemo

2021-02-27 22:03:28 2781 2

原创 mysql常用关键字及顺序

书写顺序select distinct * from '表名' where '限制条件' group by '分组依据' having '过滤条件' order by limit '展示条数'执行顺序1.from(查询)2.where(条件)3.group by(分组)4.having(过滤)5.order by(排序)6.limit(分页,显示记录数)7.distinct(去重)8.select(查询结果)正则:select * from emp where name regex

2021-02-24 17:49:27 266

原创 java动态代理简单实例

代理是基本的设计模式之一,它是你为了提供额外的或不同的操作,而插入用来代替实际对象的对象,这些操作通常涉及与"实际"对象的通讯,因此代理通常充当中间人的角色.动态代理并非是日常使用的工具,但是它可以非常好的解决某些类型的问题.下面是一个用来展示代理结构的简单示例:public interface Interface { void doSomething(); void somethingElse(String arg);}public class RealObject imple

2021-02-06 22:55:51 117

原创 企业级项目通讯常用的加密方式 AES+RSA (可直接拷到项目中使用)

简单解释下AES和RSAAES:对称加密,双方用一样的秘钥加密解密,耗时根据加密长度线性增长.RSA:非对称加密,有公钥和私钥,用公钥加密,用私钥解密,一般用在单向请求的业务中.发送方只保存公钥,用来加密原文.接收方只保存私钥,用来解密密文.耗时根据加密长度指数性增长.直接上代码;AES 工具类public class AESUtil { private static final String AES = "AES"; private static final String UTF

2021-01-30 00:18:51 791

转载 Linux命令发送Http GET/POST请求

Get请求curl命令模拟Get请求:1、使用curl命令:curl "http://www.baidu.com" 如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地curl -i "http://www.baidu.com" 显示全部信息curl -I "http://www.baidu.com" 只显示头部信息curl -v "http://www.baidu.com" 显示get请求全过程解析2、使用wget命令:wget "http://www.baidu.

2020-12-23 17:22:00 317

原创 java mongoTemplate时间戳格式化,分组聚合查询

用于接收返回数据的对象(直接用一个Map<String,Object>接收也可以)private int count;private String date;查询7天内的eventType的数据,并按日期聚合查询: //当前时间 Date time = new Date(); //7天前时间 Calendar calendar = Calendar.getInstance(); calendar.setTime(time);

2020-11-19 11:28:52 1709

转载 Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean

springboot项目启动报:ApplicationContextException: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean因为没有容器的缘故。springboot有两种tomcat发布的方式;1.内置tomcat,在pom.xml中配置spring-data-stater-tomcat的依赖就可以了2.外置tomcat,这个需要按照tomcat的

2020-11-12 15:06:32 99

原创 多线程之线程池的创建

多线程计算的出现大大提高了程序的处理性能.但是过多的线程一定会带来线程资源调度的损耗(如创建和回收线程).这样就会导致程序的响应速度.为了实现合理的线程操作.就需要提高线程的可管理性.并降低资源损耗.所在在JUC中提出了线程池的概念,线程池的创建可以通过Executors类完成.一:::executors类能搞创建的线程池一共有4种.:1.CacheThreadPool(缓存线程池):线程池中的每个子线程都可以进行重用.保存了所有的用户线程.并且随着处理量的增加可以进行用户线程的创建.2.FixedT

2020-11-08 23:26:57 89

转载 利用zookeeper实现分布式锁

转自:https://www.cnblogs.com/ysw-go/p/11444993.html

2020-11-05 10:00:22 35

原创 Socket聊天室

一个基于Socket的简单局域网通讯聊天室1.服务器package com.socket;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;import java.net.SocketTi

2020-10-28 00:08:46 195

原创 JAVA延迟队列(实现数据的缓存和定时清理)

在延迟队列中所保存的每一个元素内容.每当时间一到,(compareTo进行比较,getDelay()获取延迟时间),都会自动进行队里数据的弹出操作;使用延迟队列(模拟讨论会依次离开的场景)public class Student implements Delayed { //姓名 private String name; //离开时间 private long expire; //停留时间 private long delay; public S

2020-10-24 23:44:43 3012

原创 模拟spring的IOC(控制反转)和DI(依赖注入)

1.所需jar包:2.在src目录下件匹配文件:application.yml如下:spring: datasource: driver: com.mysql.jdbc.Driver username: root password: 123456 url: jdbc:mysql://127.0.0.1:3306/xxoo?allowMultiQueries=true&useUnicode=true&characterEncoding=utf-8&a

2020-10-22 00:34:54 167 1

原创 java并发集合

集合是数据结构的系统实现.穿透的java集合大多都是属于"非线程安全的",虽然java追加了collector工具类实现集合的同步处理操作.但是其并发效率不高.所以为了更好的支持高并发任务处理.在JUC中提供了支持高并发的处理类.同时为了保证集合操作的一致性.这些高并发的集合类依然实现了集合标准接口.如List,Set,Map,Queue.并发集合类的作用如下图:1.传统集合进行多线程并发访问/** * @Authro: QYF * @Time:2020/10/19 21:50 * 普通集合并

2020-10-20 21:44:23 1284

原创 多线程之回调异步处理Future和CompletableFuture

Future异步回调public class TestFutura2 { public static void main(String[] args) throws Exception { ExecutorService pool = Executors.newSingleThreadExecutor(); //任务c1放入线程池并行执行 C1 c1 = new C1(); Future<Double> future =

2020-10-19 00:13:23 408

原创 多线程之Exchanger数据交换

生产者和消费者模型需要一个公共操作区域进行数据的保存和获取.在JUC中专门提供了一个交换区域的程序类:java.util.concurrent.Exchanger类.public class ExchangerDemo { public static void main(String[] args) { Exchanger<String> ex = new Exchanger<>(); boolean isEnd=false;

2020-10-18 22:11:05 87

转载 SmartLifecycle接口

有些场景我们需要在Spring 所有的bean 完成初始化后紧接着执行一些任务或者启动需要的异步服务。常见有几种解决方案j2ee 注解 启动前@PostConstruct 销毁前@PreDestroy 基于j2ee 规范springboot 的 org.springframework.boot.CommandLineRunner springboot 特性前面我已经介绍过了spring org.springframework.context.SmartLifecycle这里介绍一下第三种 Smart

2020-10-13 09:35:46 161

原创 利用反射读取配置文件信息.并根据配置信息调用类方法

1.创建4个类:public class A { private int i; public int getI() { return i; } public void setI(int i) { this.i = i; } public void a() { System.out.println("好嗨哟~"); }}public class B { public void b()

2020-10-13 00:06:16 205

原创 反射基本用法

获取“类对象”1.Class.forName(“day1801.A”)2.A.class3. a1.getClass()获得包名、类名c1.getPackage().getName()包名c1.getName()完整类名c1.getSimpleName()类名,不含包名成员变量定义信息getFields()获得所有公开的成员变量,包括继承的变量getDeclaredFields()获得本类定义的成员变量,包括私有不包括继承的变量getField(变量名)getDeclar

2020-10-12 00:21:23 54

原创 多线程之CountDownLatch保证子线程执行

CountDownLatch可以保证一组子线程执行完毕后再进行主线程的执行操作.如在服务器主线程启动前.可能需要启动并执行若干子线程.这是就可以通过CountDownLatch来进行控制.CountDownLatch是通过一个线程个数计数器实现的同步处理操作.在初始化时可以为CountDownLatch设置一个线程执行总数,这样每当一个子线执行完毕后都执行减一的操作.当所有子线程都执行完毕后.CountDownLatch中保存的计数内容为0,则主线程恢复执行.主要方法public CountDownL

2020-10-11 23:20:55 243

原创 多线程之Semaphore线程调度

在大多数情况下服务器的提供的资源不是无限的.所以当并发访问线程最大时就需要针对所有的可用资源进行线程调度,这点类似于现实生活中的银行业务办理.业务窗口往往只有几个.但是办理业务的人很多.那么这些人将会通过一次叫号的功能获取业务办理资格.这样就可以实现有限资源的分配和调度.在JUC中Semaphore类就可以实现类似调度处理.public class SemaphoreDemo { public static void main(String[] args) { Semaphore

2020-10-11 23:08:19 58

原创 多线程之Condition基本使用,实现多线程精准休眠和唤醒操作

在JUC中允许用户自己进行锁对象的创建.而此种锁对象可以通过Condition接口进行描述.Condition提供了和Object类中类似的线程控制方法.同时由用户自己来决定使用的锁.例如.在之前使用读/写锁的时候是两个锁,而Condition可以直接创建开发者自己的锁,即可以创建更多的锁来控制.Condition接口实现的是锁都控制.如果要想获取此接口的实例,则可以依靠Lock接口中提供的newCondition方法完成.Condition基本使用public class ConditionDemo

2020-10-11 22:40:00 318

原创 多线程之StampedLock并发操作

ReentrantReadWriteLock读/写锁可以保证并发访问下的数据写入安全和读取性能,但是在读线程非常多的情况下.有可能造成写线程的长时间阻塞.从而减少写线程的调用次数.为此JUC中针对读/写锁提出了改进方案.提供了无障碍锁StampedLock,使用这种锁的特点在于:若干读线程彼此间不会相互影响.但是依然可以保证多个写线程的独占操作.StampedlLock中分为3中模式.写.读,乐观锁.以提高并发处理性能.同时也可以 实现类型转换public class Account { //账

2020-10-09 00:03:45 178

原创 多线程之ReentrantReadWriteLock读/写锁实现并发写入和读取

使用独占锁最大的特点在于其只允许一个线程进行操作,这样在数据更新的时候可以保证操作的完整性.但是在进行数据读取时,独占锁会造成严重的性能问题,为了解决高并发下的快速访问与安全修改,JUC提供了ReentrantReadWriteLock读/写锁,即在读取的时候上读锁,在写入的时候上写锁.这两种锁是互斥的.由JVM进行控制.在ReentrantReadWriteLock中,读锁属于共享锁.而写锁只允许一个线程进行操作…所以在使用时就需要通过不同的方式获取锁.public class Account {

2020-10-08 23:23:50 168

原创 多线程之使用互斥锁实现多线程并发售票操作ReentrantLock

传统的线程锁机制需要依赖synchronized同步与Object类中的wait()方法,notify()方法进行控制.然而这样的控制并不容易,所以在JUC,中提供有一个新的锁框架.在此框架中提供两个核心接口:Lock接口:支持各种不同语义(“公平机制锁”,“非公平机制锁”“可重入锁”)的锁规则;ReadWriteLock:接口:针对线程的读或写提供不同的锁处理机制,在数据读取时采用共享锁,数据修改时使用独占锁,这样就可以保证数据访问的性能;ReentrantLockReentrantLoclk提供

2020-10-08 22:47:01 314

转载 LocalDateTime用法

转载自:https://www.cnblogs.com/huanshilang/p/12013386.html

2020-09-27 17:45:34 49

转载 java发送http请求时处理异步回调结果

转载

2020-09-27 16:31:22 281

原创 ThreadLocal简单应用

创建线程集中方式?l 继承Threadl 实现Runnable两个工具辅助创建线程,控制线程的执行l 线程池l Callable/FutureThreadLocal辅助一个线程持有自己的数据,这个数据与其他线程不共享把数据绑定到线程,线程当做一条流水线,来传递数据l 多线程并行时,数据是安全的threadLocal = new ThreadLocal();// 在当前线程上绑定数据threadLocal.set(2.744625);// 从当前线程获取绑定的数据thre

2020-09-27 00:58:25 46

原创 利用Callable多线程计算一千万内的质数

public class TestPrime { public static void main(String[] args) throws Exception { //创建线程池 ExecutorService pool = Executors.newFixedThreadPool(5); //接收每个线程返回的结果 Future<Integer>[] a = new Future[5]; //开启5个线程

2020-09-27 00:42:19 160

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除