Java
文章平均质量分 90
Java基础知识,及高级特性积累,学习
Aran_
风筝有风,海豚有海
展开
-
【跟着源码学英语】 Map.java 是个接口
不定时java源码学习,这次是Map.java原创 2021-04-02 17:44:57 · 302 阅读 · 0 评论 -
【跟着官网学】mybatis-001 :入门
本文参考官网地址:点我直达这是【跟着官网学】mybatis的第一篇文章。每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。一、XML配置XML 配置文件中包.原创 2020-11-29 22:17:53 · 274 阅读 · 0 评论 -
[系统设计]电商 & 秒杀系统-设计思路和实现方法
本文为转载:查看原文mark 一篇关于秒杀系统的设计思路,以后仔细学习一、秒杀业务分析正常电子商务流程(1)查询商品(2)创建订单(3)扣减库存(4)更新订单(5)付款(6)卖家发货秒杀业务的特性(1)低廉价格(2)大幅推广(3)瞬时售空(4)一般是定时上架(5)时间短、瞬时并发量高;二、秒杀技术挑战假设某网站秒杀活动只推出一件商品,预计会吸引1万人参加活动,也就说最大并发请求数是10000,秒杀系统需要面对的技术挑战有:对现有网站业务造成冲击秒杀活动只是网站营转载 2020-08-28 22:22:13 · 945 阅读 · 0 评论 -
[java设计模式]我眼中的抽象工厂模式
千呼万唤的抽象工厂模式,它来了!上一篇分享的工厂模式,它在这里定义 :抽象工厂模式(Abstract Factory),提供了一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。假设你已经了解了工厂模式,那么我们对比一下工厂模式和抽象工厂的类图:工厂模式:抽象工厂模式:那么,如何理解呢?在介绍工厂模式的时候时候,我自己胡诌了一个面点和面点厂的例子,这次,我们还是用这个例子进行说明,只是稍微换一个方式:说明:面点厂相当于父类,具体的面点继承于面点厂的“加面”和“加糖”的原创 2020-08-06 15:01:10 · 197 阅读 · 0 评论 -
[java并发] java高并发系列 - 第29天:高并发中常见的限流方式
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本文内容:介绍常见的限流算法通过控制最大并发数来进行限流通过漏桶算法来进行限流通过令牌算法来进行限流限流工具类RateLimiter常见的限流的场景秒杀活动,数量有限,访问量巨大,为了防止系统宕机,需要做限流处理国庆期间,一般的旅游景点人口见多,采用排队方式做限流处理医院看病通过发放排队号来做限流处理常见的限流算法通过控制最大并发数来进行限流使用漏桶算法来进行限流使用转载 2020-08-04 17:59:46 · 244 阅读 · 0 评论 -
[Spring基础]原来,Spring实现定时器是这样的!
项目中偶尔会用到定时任务的执行,比如定时发短信,定时发送对账文件等等,今天,我们就一起学习下,在Spring中如何实现定时器!1 Java自带的定时器1.1 介绍对没错,它就是Timer,我们来了解下它的身份:所在包:java.util作者:Josh Bloch出生日期:JDK1.3直系亲属:Object个人简历:一堆English别怕,下面是英语学习时间:A facility for threads to schedule tasks for future execution原创 2020-08-04 10:09:55 · 662 阅读 · 0 评论 -
[资源分享] 这是我收集到的资源!
分享一些自己收集到的资源,等硬盘满了,找起来方便,长期更新1. 数据库相关mycat数据库中间件官方文档:mycat-definitive-guide.pdf2. java相关阿里java开发手册泰山版Java编程思想 - 第四版Java并发编程的艺术Spring Cloud微服务实战技术的高度不会因为分享而降低,而会因善于分享和使用分享而提高!...原创 2020-08-03 16:34:42 · 346 阅读 · 0 评论 -
[java工具类] AES加密解密工具类
AES是一种对称加密方式,加密解密同用一个Key,常用类,不解释 package com.wr.park_toolkit.utils; import java.util.Properties; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import org.apache.tomcat.util.codec.b原创 2020-07-29 16:09:24 · 855 阅读 · 0 评论 -
[java工具类]MD5withRSA签名算法工具类
加密 & 解密 & 签名 若想深究,还是有点深度的,本身密码学就是一门单独的学科,先会用,有个感性的认识,之后慢慢研究!package com.wr.park_toolkit.utils;import java.security.InvalidKeyException;import java.security.KeyFactory;import java.security.KeyPair;import java.security.KeyPairGenerator;import原创 2020-07-29 15:33:04 · 939 阅读 · 0 评论 -
[java工具类] 请求参数工具类
在开发过程中,我们经常需要将请求参数进行 & 拼接,以下是一个工具类,可以将Map中的数据转换为 & 格式的请求参数:package com.wr.park_toolkit.utils;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.HashMap;import java.util.List;import java.util原创 2020-07-29 14:17:06 · 735 阅读 · 0 评论 -
[java设计模式]我眼中的工厂模式
工厂模式,又叫工厂方法模式,其应用非常广泛,今天我们一起学习下工厂模式:1.1 定义工厂方法模式(Factory Method) :定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。如果你已经了解了简单工厂模式,对于工厂模式的定义就会更加清楚一些,我们还是用加减法的例子,先通过类图来对比一下简单工厂模式和工厂模式的区别:简单工厂模式:工厂模式:意思就是,与简单工厂相比,我们实例化具体的实体的工作交给了其子类或实现类,而不是由自己来完成。文字描述.原创 2020-07-28 23:33:42 · 237 阅读 · 0 评论 -
【java基础】java泛型[一]——使用泛型的三种方式
一、为啥要使用泛型?以前没有泛型的时候,泛型的设计时通过继承来实现的。ArrayList只维护一个Object引用的数组,存在了两个问题:获取一个值时,必须进行强制类型转换可以向其中添加任何类型的值而现在,泛型提供了更好的解决方法,使用 {类型参数}:var files = new ArrayList<String>();//或ArrayList<String> files = new ArrayList<>();二、Java泛型的应用场景Jav原创 2020-07-28 15:00:27 · 760 阅读 · 0 评论 -
[java并发概念篇]乐观锁与悲观锁
原文地址何为悲观锁与乐观锁乐观锁对应于生活乐观的人总是想着事情往好的方向发展,悲观锁对应生活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点,不能以场景而定说一种人好于另外一种人。悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其他线程)。传统的关系型数据库里面就用到了很多这种锁机制,比如 行锁,表锁,读锁,写锁等,都是在做操作之前先上转载 2020-07-27 17:27:01 · 146 阅读 · 0 评论 -
[java设计模式] 我眼中的简单工厂模式
在学习简单工厂模式之前,我们先来复习下设计模式的六大原则:1.1 设计模式的六大原则开闭原则(Open Close Principle)开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类。里氏代换原则(Liskov Substitution Principle)里氏代换原则(Liskov Substitution Principl.原创 2020-07-24 21:01:55 · 245 阅读 · 1 评论 -
[springBoot]震惊!多线程中使用@Autowired居然会发生这样的事!
近期,在项目中需要用到多线程,而且需要读取配置文件中RocketMq的相关参数,于是乎自自然而然的将配置文件映射到实体类中(据说Spring不建议这样干?),重复三遍,以后具体查一下:为什么Spring不建议将配置映射到实体类?为什么Spring不建议将配置映射到实体类?为什么Spring不建议将配置映射到实体类?然后,自然而然的用@Autowired在多线程中注入这个实体类!就这样奇迹发生了…在多线程中注入的实体类一直 空指针异常,而在test中却完全没问题,说明我的映射是成功了的,那,为啥?原创 2020-07-21 15:09:59 · 1729 阅读 · 0 评论 -
[java设计模式] 我眼中的单例模式(二)
上一篇[java设计模式] 我眼中的单例模式(一) 我们介绍了一些单例(单件)模式的基本概念,本文将对其中介绍的几种实现方式进行介绍:1. 饿汉模式类加载的时候就创建实例优点:类加载的时候就创建一次实例,避免了多线程同步问题缺点:即使单例没被用到也会创建,浪费内存public class Singleton{ private static Singleton instance = new Singleton(); private Singleton(){} public static Si原创 2020-07-19 17:08:53 · 135 阅读 · 0 评论 -
[java设计模式] 我眼中的单例模式(一)
本篇将对单例模式的定义及应用场景部分进行简要描述定义: 确保一个类只有一个实例,并且提供一个全局访问点。属于设计模式三大类中的 创建型模式特点:只有一个实例自我实例化提供全局访问点优点:由于单例模式只生成一个实例,所以能够节约资源,减少性能开销,提高系统效率,同时也能够严格控制客户对它的访问。缺点:正是因为系统中只有一个实例,这样就导致了单例类的职责过重,违背了“单一职责原则”,同时也没有抽象类,这样扩展起来会有一定困难。常见的实现方式:饿汉式懒汉式双重检锁式静态原创 2020-07-19 17:02:57 · 137 阅读 · 0 评论 -
[springBoot基础] yml配置文件学习
Spring boot 项目中,yaml的配置文件越来越受欢迎,本篇文章将对文件的格式以及在SpringBoot的简单使用方法进行记录说明1. 关于名字YAML:YAML Ain’t Markup Languageyml 和xml相比,更加简化yml和json相比,更加优雅2. 语法以空格的缩进程度来控制层级关系。空格的个数不重要,对齐即视为同一层级不能用tab空格大小写敏感支持字面量,对象,数组三种数据结构,也支持复合结构字面量:字符串,布尔类型,数值,日期。字符串默认不加.原创 2020-07-18 01:02:49 · 387 阅读 · 0 评论 -
[spring-jpa]定义查询方法
背景:假设我们有一个数据表叫Person,有ID(Number)、NAME(Varchar2)、AGE(Number)、ADDRESS(Varchar2)几个字段;对应的实体类叫Person,分别有id(long),name(String),age(Integer),address(String)。1. 根据属性名查询Spring Data jpa 支持通过定义在Repository接口中的方法名来定义查询,而方法名时根据实体类的属性名来确定的。常规查询。根据属性名来定义查询的方法,示例如下:原创 2020-07-14 08:59:18 · 361 阅读 · 0 评论 -
[java基础] java.io与java.nio
整理一张Java.io包的结构图,留着以后慢慢学习而对于Java.nio,处理的方式便不是字符或字节,而是以Channel(通道)、Buffer(缓冲区)和Selector(选择器)为核心的,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector(选择区)用于监听多个通道的事件(比如连接打开,数据到达),因此,单个线程可以监听多个通道。两者的区别是:Java.io是面向流的,而NIO是面向缓冲区的特此记录,后面会详细学习并附上例子!我是Aran,一起终身学习~...原创 2020-07-06 23:44:50 · 226 阅读 · 0 评论 -
[spring-aop](一)入门篇-基础概念
一、什么是AOP?AOP(Aspect Oriented Programming),即面向切面编程。众所周知,OOP(面向对象编程)通过的是继承、封装和多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。OOP从纵向上区分出一个个的类来,而AOP则从横向上向对象中加入特定的代码。AOP使OOP由原来的二维变为三维了,由平面变成立体了。AOP采用"横切"的技术,剖解开封装的对象内部,将影响了多个类的公共行为封装到一个可重用模块。将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于转载 2020-07-02 23:02:02 · 251 阅读 · 0 评论 -
[java基础] Java中的内部类基础
一、内部类介绍1.1 什么是内部类顾名思义,就是定义在另一个类的内部的类1.2 为什么要使用内部类?内部类可以对同一个包中的其他类隐藏内部类方法可以访问定义这个类的作用域中的数据,包括原本私有的数据二、内部类的划分成员内部类静态内部类方法内部类匿名内部类为了更好的理解内部类,我们定义如下两个类,后面的所有说明都基于这两个类:package com.aran.innerClass;/** * 一个外部类 * * @Author Aran * @Date 2020原创 2020-06-25 19:01:52 · 182 阅读 · 0 评论 -
[java并发] java并发系列 - 第 28 天:实战篇,微服务日志的痛,一并帮你解决
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本文内容:日志有什么用?日志存在的痛点?构建日志系统日志有什么作用?系统出现故障的时候,可以通过日志信息快速定位问题,修复bug,恢复业务提取有效数据,做数据分析使用日志存在的痛点?先介绍下多数公司采用的方式:目前比较流行的是采用springCloud (或者dubbo)做微服务,按照业务拆分为多个独立的服务,服务采用集群的方式部署在不同的机器上,当一个请求过来的时候,可能会调用很转载 2020-06-24 16:41:18 · 228 阅读 · 0 评论 -
[java基础]logback日志按照日志级别输出
logback日志按照日志级别输出:<configuration> <property name="APP_NAME" value="parkApi"/> <property name="LOG_HOME" value="log" /> <contextName>${APP_NAME}</contextName> <!-- 控制台日志输出 --> <appender name="stdou原创 2020-06-22 17:32:06 · 797 阅读 · 0 评论 -
[java基础]将请求参数排序并拼接
在日常的开发中,我们经常需要在请求参数签名前,对请求参数的参数名进行排序并拼接,再次记录,与君分享:先上代码:package com.wr.park_toolkit.utils;import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.List;import java.util.Map;/** * 请求参数工具类 * * @author ara原创 2020-06-22 15:03:58 · 2100 阅读 · 0 评论 -
[java基础]Java中Lambda表达式详解
本文为转载:查看原文为什么使用lambda?在java中我们很容易将变量赋值,比如:int a = 0;int b = a;但是我们如何将一段代码和一个函数赋值给一个变量?这个变量应该是什么类型?在javascript中,可以用一个对象来存储:var t=function(){ int a=1; a=a+1; alert(a);} 在java中,直到java8的lambda的特性问世,才有办法解决这个问题什么是lambda什么是lambda?lambda在程序中转载 2020-06-19 11:11:20 · 790 阅读 · 1 评论 -
[java并发] java高并发系列 - 第27天:实战篇,接口性能提升几倍原来这么简单
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧案例讲解电商app都有用过吧,商品详情页,需要给他们提供一个接口获取商品相关信息:商品基本信息(名称、价格、库存、会员价格等)商品图片列表商品描述信息数据库中我们用了3张表存储上面的信息:商品基本信息表:t_goods(字段:id【商品id】,名称、价格、库存、会员价格等)商品图片信息表:t_goods_imgs(字段:id、goods_ids【商品id】、图片路径),一个商品会有多张图片转载 2020-06-18 11:00:15 · 420 阅读 · 0 评论 -
[java基础] int 和 Integer的爱恨情仇
下面是一段经典的程序:package com.aran.basicDataType;/** * @Author Aran * @Date 2020/6/16 6:42 下午 */public class IntegerAndInt { public static void main(String[] args) { Integer v1 = 10; Integer v2 = 10; System.out.println(v1 == v2原创 2020-06-17 17:52:55 · 184 阅读 · 0 评论 -
[java并发] java高并发系列 - 第26天:学会使用JUC中常见的结合,常看看
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本文内容:了解JUC常见集合,学会使用ConcurrentHashMapConcurrentSkipListMapConcurrentSkipListSetCopyOnWriteArraySet介绍Queue接口ConcurrentLinkedQueueCopyOnWriteArrayList介绍Deque接口ConcurrentLinkedDequeue...转载 2020-06-17 17:22:38 · 253 阅读 · 0 评论 -
[java并发] java高并发系列 - 第25天:掌握JUC中的阻塞队列
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本文主要内容:掌握Queue、BlockingQueue接口中常用的方法介绍6种阻塞队列,及相关场景示例重点掌握4种常用的阻塞队列Queue接口队列是一种先进先出(FIFO)的数据结构,java中用 Queue 接口来表示队列。Queue 接口定义了6个方法:public interface Queue<E> extends Collection<E>{ bool转载 2020-06-16 17:26:36 · 286 阅读 · 0 评论 -
[实战] springBoot + Vue 如何实现前后端分离跨域请求?
Vue中, 我使用了被大家用烂了的 axios,为了实现跨域请求,需要如下配置:关于 withCredentials 的含义:一下摘自 mozilla开发者中心XMLHttpRequest.withCredentials 属性是一个Boolean类型,它指示了是否该使用类似cookies,authorization headers(头部授权)或者TLS客户端证书这一类资格证书来创建一个跨站点访问控制(cross-site Access-Control)请求。在同一个站点下使用withCrede.原创 2020-06-15 20:26:52 · 320 阅读 · 0 评论 -
[java并发] java高并发系列 - 第24天:ThreadLocal、InheritableThreadLocal(通俗易懂)
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本文内容需要解决的问题介绍ThreadLocal介绍InheritableThreadLocal需要解决的问题:我们还是以解决问题的方式引出 ThreadLocal、InheritableThreadLocal目前java开发web系统一般为3层,controller、service、dao,请求到达controller、controller调用service、service调用dao,转载 2020-06-14 15:51:41 · 240 阅读 · 0 评论 -
[java并发] java高并发系列 - 第23天,JUC原子类,一篇就够了
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本文主要内容:JUC 原子类介绍介绍基本类型原子类介绍数组类型原子类介绍引用类型原子类介绍对象属性修改相关原子类预备知识JUC中的原子类都是依靠volatile、CAS 、Unsafe 类配合实现的,需要了解的请移步之前的文章:volatile与Java内存模型Java中的CASJUC底层工具类UnsafeJUC中原子类介绍什么是原子操作?atomic 翻译成中文你是原子的转载 2020-06-13 11:04:15 · 288 阅读 · 0 评论 -
[java并发] java高并发系列 - 第22天:JUC底层工具类Unsafe,高手必须要了解
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本文主要内容:Unsafe基本介绍获取Unsafe实例Unsafe中的CAS操作Unsafe中原子操作相关方法介绍Unsafe中线程调度相关方法介绍park和unpark示例Unsafe锁示例Unsafe中对volatile的支持基本介绍...转载 2020-06-10 12:00:39 · 204 阅读 · 0 评论 -
[java并发]java高并发系列 - 第21天:java中的CAS,你需要知道的东西
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本文主要内容从网站计数器实现中一步步引出CAS操作介绍java中的CAS及CAS可能存的问题悲观锁和乐观锁的一些介绍及数据库乐观锁的一个常见示例使用java中的原子操作实现网站计数器功能我们需要解决的问题需求: 我们开发了一个网站,需要对访问量进行统计,用户每次发一次请求,访问量+1,如何实现呢?...转载 2020-06-09 10:48:58 · 184 阅读 · 0 评论 -
[java并发]java高并发系列- 第20天 JUC中的Executor框架详解2
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本文的主要内容ExecutorCompletionService出现的背景介绍CompletionService接口及常用的方法介绍ExecutorCompletionService类及其原理示例一:执行一批任务,然后消费执行结果示例二【2种方式】:异步执行一批任务,有一个完成立即返回,其他取消需要解决的问题:举例说明:买新房了,然后在网上单买电冰箱、洗衣机,电器商家不同,所以送货耗时不转载 2020-06-08 11:31:49 · 185 阅读 · 0 评论 -
[java并发] java高并发系列 - 第19天:JUC中的Executor框架详解1
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本文主要内容介绍Executor框架相关内容介绍Executor介绍ExecutorService介绍线程池ThreadPoolExecutor介绍定时器ScheduledExecutorService及案例介绍Executors类的使用介绍Future接口介绍Callable接口介绍FutureTask接口获取异步任务的执行结果的几种方法...转载 2020-06-05 17:15:24 · 337 阅读 · 0 评论 -
[java并发]java高并发系列 - 第18天:JAVA线程池,这一篇就够了
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本文主要内容什么是线程池线程池实现原理线程池中常见的各种队列自定义线程创建的工厂常见的饱和策略自定义饱和策略线程池中两种关闭方法有何不同扩展线程池合理地配置线程池10.线程池中线程数量的配置什么是线程池?大家用jdbc操作过数据库应该知道,操作数据库需要和数据库建立连接,拿到连接之后才能操作数据库,用完之后销毁。数据库连接的创建和销毁其实是比较耗时的,真正和业务相关的操作耗时是比转载 2020-06-04 09:16:39 · 327 阅读 · 0 评论 -
[java并发]java高并发系列-第17天:JUC中的循环栅栏CyclicBarrier的6种使用场景
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本文主要内容:介绍CyclicBarrier6个示例介绍CyclicBarrier的使用对比CyclicBarrier和CountDownLatchCyclicBarrier简介CyclicBarrier通常称为循环屏障。它和CountDownLatch很相似,都可以使线程先等待然后再执行。不过CountDownLatch是使一批线程等待另一批线程执行完毕后再执行;而CyclicBarrier转载 2020-06-02 18:27:44 · 344 阅读 · 0 评论 -
[java并发]java高并发系列 - 第16天:JUC中等待多线程完成的工具类CountDownLatch,必备技能
原文链接:查看原文感谢公众号“ 路人甲Java”的分享,如有冒犯,请联系删除,快去关注他吧本篇内容:介绍CountDownLatch及使用场景提供几个示例介绍CountDownLatch的使用手写一个并行处理任务的工具类假如有这样一个需求,当我们需要解析一个Excel里多个sheet的数据时,可以考虑使用多线程,每个线程解析一个sheet里的数据,等到所有的sheet都解析完之后,程序需要统计解析总耗时。分析一下:解析每个sheet耗时可能不一样,总耗时就是最长耗时的那个操作。我们转载 2020-06-01 22:22:37 · 239 阅读 · 0 评论