自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

cpown的博客

逆风飞翔

  • 博客(70)
  • 资源 (2)
  • 收藏
  • 关注

原创 OOP七大原则

开闭原则:对扩展开放,对修改关闭里氏替换原则:继承必须确保超类所拥有的性质在子类中仍然成立。依赖倒置原则:要面形接口编程,不要面向实现编程。单一职责原则:控制累的粒度大小,将对象解耦,提高内聚性。接口隔离原则:要为各个类建立他们需要的专用接口。迪米特法则:只与你的直接朋友交谈,不更“陌生人”说话。合成服用原则:尽量先使用组合活着聚合等关联关系来实现,其次次啊是考虑使用即成关系来实现。...

2022-03-21 21:57:03 477

原创 JVM 常用参数

JVM 常用参数-Xmx/-Xms最大和初始堆大小。最大默认为物理内存的1/4,初始默认为物理内存的1/64。-Xss等价于-XX:ThresholdStackSize。用于设置单个栈的大小,系统默认值是0,不代表栈大小为0。而是根据操作系统的不同,有不同的值。比如64位的Linux系统是1024K,而Windows系统依赖于虚拟内存。-Xmn新生代大小,一般不调。-XX:MetaspaceSize设置元空间大小。-XX:+PrintGCDetails输出GC收集信息,包含GC和Full

2020-10-24 20:39:51 300

原创 阻塞队列 BlockingQueue 实现生产者消费者模式线程通信

概念:当阻塞队列为空时,获取(take)操作是阻塞的;当阻塞队列为满时,添加(put)操作是阻塞的。好处:阻塞队列不用手动控制什么时候该被阻塞,什么时候该被唤醒,简化了操作。体系:Collection→Queue→BlockingQueue→七个阻塞队列实现类。类名作用ArrayBlockingQueue由数组构成的有界阻塞队列LinkedBlockingQueue由链表构成的有界阻塞队列PriorityBlockingQueue支持优先级排序的无界阻塞队列

2020-10-13 22:09:36 499 1

原创 Synchronized和Lock的区别

synchronized关键字和java.util.concurrent.locks.Lock都能加锁,两者有什么区别呢?原始构成:sync是JVM层面的,底层通过monitorenter和monitorexit来实现的。Lock是JDK API层面的。(sync一个enter会有两个exit,一个是正常退出,一个是异常退出)使用方法:sync不需要手动释放锁,而Lock需要手动释放。是否可中断:sync不可中断,除非抛出异常或者正常运行完成。Lock是可中断的,通过调用interrupt()方法。

2020-10-13 21:30:48 213

原创 跨境电商Api接口地址汇总

汇集主流跨境电商平台Api对接地址:amazon:http://docs.developer.amazonservices.com/zh_CN/dev_guide/DG_Endpoints.htmlAliexpress:https://developers.aliexpress.com/doc.htm?docId=108334&docType=1Ebay(SDK):https://developer.ebay.com/devzone/xml/docs/Reference/eBay/index.

2020-10-10 10:37:20 3656 1

原创 ReentrantReadWriteLock 实现手写缓存,并发读取、阻塞添加

前言我们在大多数业务中遇到并发问题,最先想到的是,Synchorized,以及 ReentrantLock,但是这两种锁是重量级的,也是阻塞的锁,一个线程获取了锁,其他线程必须阻塞,并发性能大大降低。今天我们来介绍一下java.util.concurrent.locks包下面的另一把锁:ReadWriteLock 读写锁,顾名思义,就是可以区分读还是写操作,展现不同的锁类型,做到并发读取,阻塞写入,使性能大大提升。案例本文我们使用一个简单的手写缓存Demo来展示一下锁的特性以及功能。package

2020-10-08 17:50:30 294

原创 基于 Redis 实现分布式锁

问题背景实际开发场景中,可能需要处理并发线程互斥地访问某个共享资源。 Java中通常用synchronized、Lockd来加锁,避免多线程中由于竞争导致的数据不一致问题。问题是Java中的锁,只在同一JVM环境下才生效。分布式系统中,应用部署在多台服务器。这时候需要使用分布式锁,利用一个第三方节点来获取/释放锁。分布式锁实现方式有数据库、redis、zookeeper等,基本原理是一样的:标识锁状态+锁的唯一持有者。 这里只介绍单节点下redis实现分布式锁要求互斥性(加锁):任意时刻只

2020-09-30 16:20:40 291

原创 使用CloseableHttpClient发送 Put请求

首先创建Http连接池工具类:PoolingHttpClientConnectionUtils:package com.epean.ops.utils;import java.io.IOException;import java.net.BindException;import java.security.GeneralSecurityException;import java.security.cert.CertificateException;import java.security.ce

2020-09-24 17:13:32 1454

原创 Spring Cloud Alibaba服务注册与配置中心:Nacos 【一】

一、什么是Nacos前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service;一个更易于构建云原生应用的动态服务发现,配置管理和服务管理中心Nacos = Eureka+Config+Bus:Nacos就是注册中心+配置中心的组合服务是Nacos的头等公民。Nacos支持发现,配置和管理几乎所有类型的服务:Kubernetes服务、gRPC和Dubbo RPC服务、Spring Cloud RESTful服务Nacos的主要功能替代Eureka做服务注册

2020-09-21 21:19:34 212

原创 Spring Cloud之服务网关 Gateway

前言API 网关的定义网关的角色是作为一个 API 架构,用来保护、增强和控制对于 API 服务的访问。API 网关是一个处于应用程序或服务(提供 REST API 接口服务)之前的系统,用来管理授权、访问控制和流量限制等,这样 REST API 接口服务就被 API 网关保护起来,对所有的调用者透明。因此,隐藏在 API 网关后面的业务系统就可以专注于创建和管理服务,而不用去处理这些策略性的基础设施。Gateway提供了一个用于在Spring MVC之上构建API网关的库。Spring Cloud

2020-09-19 17:36:03 293

原创 spring Cloud: 服务监控 hystrixDashboard

前文演示了Hystrix断路器与服务降级:https://blog.csdn.net/flycp/article/details/108568785一、概念除了隔离依赖服务的调用以外,Hystrix还提供了准实时的调用监控(Hystrix Dashboard),Hystrix会持续的记录所有通过Hystrix发起的请求的执行信息,并一统计报表和图形的形式展示给用户,包括每秒执行多少请求,多少成功,多少失败等。NetFlix通过hystrix-mertrics-event-stream 项目实现了对以上指

2020-09-15 21:43:12 163

原创 SpringCloud核心组件:Hystrix断路器

前边学习了,服务注册中心:Eureka,consul,服务接口调用:Ribbon,Feign。本章学习,Spring Cloud的一个重要组件,Hystrix断路器。一、前言分布式系统往往,由很多个微服务程序组成,复杂的分布式体系接口中的应用程序个数可能达到数十种,程序互相依赖,协同作业,每个依赖关系在某些时候将不可避免的出现失败。比如,多个服务之间调用的时候,假设微服务A调用微服务B和C,微服务B和C又调用着其他的微服务,这就是所谓的“扇出”,如果扇出的链路上某个微服务的调用时间过长或者不可用,对

2020-09-15 20:55:49 276 1

原创 Spring Cloud 接口调用组件:Feign

在学习Feign之前我们调用微服务接口的方式主要是:RestTemplate + ribbon;一、Feign的概念Feign是一个声明式Web Service客户端。使用Feign能让编写Web Service客户端更加简单, 它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解。Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Eur

2020-09-13 21:12:29 1293

原创 ribbon实现负载均衡

上文说了使用 consul做服务注册中心,实现服务注册与发现使用 consul 实现服务注册与发现我们仅仅说了单机版(也就是单客户端,单服务端),本文介绍一下多服务端集群搭建。其实consul的,服务集群搭建很简单,只需要在多建一台一摸一样的微服务项目即可(端口不同)。一、搭建consul多服务版集群我们按照8006的项目在建一个一模一样的项目8007。application.yml,端口不同,服务名称spring.application.name一模一样。#端口号 不同server:

2020-09-10 20:58:27 6679

原创 使用 consul 实现服务注册与发现

上一篇我们介绍了使用Eureka搭建高可用集群方案。Eureka 搭建 高可用 订单支付集群现在市场可以实现服务注册与发现的组件有很多,除了 Eureka(已停止维护) 之外,还有zookeeper,consul,Nacos等诸多组件。今天介绍一下如何使用Consul做服务注册。首先去官网下载consol客户端:consol下载地址什么是Consul?Consul是HashiCorp公司推出的开源工具,Consul由Go语言开发,部署起来非常容易,只需要极少的可执行程序和配置文件,具有绿色、轻量级

2020-09-10 19:52:26 1491

原创 Eureka 搭建 高可用 订单支付集群

在springcloud之前我们听过最多的服务注册rpc框架就是 dubbo + zookepper。今天我们说一下一个新的服务注册组件:eureka一、核心概念Eureka 作为 Spring Cloud 体系中最核心、默认的注册中心组件,研究它的运行机制,有助于我们在工作中更好地使用它。Eureka 主要包括两个模块:Eureka Server 和 Eureka Client。1. Eureka Server:注册中心服务端以 REST API 的形式为服务实例提供了注册、管理和查询等操

2020-09-06 17:45:44 278

原创 Mysql Sql执行顺序 、正则表达式、常用函数使用

一、sql执行顺序1.编写顺序:SELECT DISTINCT <select list>FROM <left_table> <join_type>JOIN <right_table> ON <join_condition>WHERE <where_condition>GROUP BY <group_by_list>HAVING <having_condition>ORDER BY

2020-08-26 20:47:52 222

原创 什么是 Mysql 锁?

一、概述锁是计算机协调多个进程或线程并发访问某一资源的机制(避免争抢)。在数据库中,除传统的计算资源(如 CPU、RAM、I/O 等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。二、锁分类从对数据操作的粒度分 :1) 表锁:操作时,会锁定整个表。2) 行锁:操作时,会锁定当前操作行。从对数据操作的类型分:1) 读锁(共享

2020-08-26 20:40:38 587

原创 Mysql 并发参数详解

从实现上来说,MySQL Server 是多线程结构,包括后台线程和客户服务线程。多线程可以有效利用服务器资源,提高数据库的并发性能。在Mysql中,控制并发连接和线程的主要参数包括 max_connections、back_log、thread_cache_size、table_open_cahce。一、 max_connections采用max_connections 控制允许连接到MySQL数据库的最大数量,默认值是 151。如果状态变量 connection_errors_max_connect

2020-08-26 20:28:29 495

原创 java 从字符串里面提取时间

今天接到一个需求,需要从一段带有时间串的字符串里面提取出时间保存。"PDFS(iZh9k5gurgwcwpZ) 2020-01-01 21:27:36.560 >订单编号:1112233 提交订单成功! 跟踪号:待取跟踪号 内部单号:2342244"需要从上面数据中心提取出 2020-01-01 21:27:36要怎么操作呢?我们可以使用正则表达式,对时间串进行提取,并处理,代码如下:package com.epean.trade.framework.util;import

2020-08-21 10:20:34 5725 1

原创 慢SQL 到底应该如何优化?

在应用的的开发过程中,由于初期数据量小,开发人员写 SQL 语句时更重视功能上的实现,但是当应用系统正式上线后,随着生产数据量的急剧增长,很多 SQL 语句开始逐渐显露出性能问题,对生产的影响也越来越大,此时这些有问题的 SQL 语句就成为整个系统性能的瓶颈,因此我们必须要对它们进行优化,本章将详细介绍在 MySQL 中优化 SQL 语句的方法。当面对一个有 SQL 性能问题的数据库时,我们应该从何处入手来进行系统的分析,使得能够尽快定位问题 SQL 并尽快解决问题。一、查看sql的执行频率MySQL

2020-08-18 21:30:17 6991

原创 MySql存储引擎的种类和区别

一. Mysql的体系结构概览整个MySQL Server由以下组成Connection Pool : 连接池组件Management Services & Utilities : 管理服务和工具组件SQL Interface : SQL接口组件Parser : 查询分析器组件Optimizer : 优化器组件Caches & Buffers : 缓冲池组件Pluggable Storage Engines : 存储引擎File System : 文件系统1) 连接

2020-08-17 21:27:30 4901

原创 Mysql高级——触发器

阿萨德

2020-08-15 17:27:02 276

原创 Comparable 和 Comparator 的区别和使用

在我们实际开发过程中,经常会遇到各种各样的排序,我们都知道,基本数据类型排序就是按照数值大小排序。如果我们需要按照对象的某一个属性进行对象的比较排序,比如,按照商品的价格对商品进行排序,或者按照学生的升高对学生进行排序,这就涉及到对象间的排序。应该怎么做呢?一、自然排序:java.lang.Comparablejava.lang包下的Comparable接口会强行对他的实现类进行排序,这种排序规则称之为类的自然排序。例如String类,以及基本数据类型的包装类如Integer,Double等都实现了

2020-08-14 22:19:01 279

原创 Mysql高级——存储过程和函数

一、什么是存储过程和函数存储过程和函数是事先经过编译 并存储在数据库中的一段sql语句的集合,调用存储过程和函数可以简化开发人员的许多工作,减少数据在数据库和应用服务之间的传输,对于提高数据处理效率是有好处的。(现在已经不推荐使用,面试会问到。)存储过程和函数的区别在于,一个又返回值,一个没有。存储过程:是一个没有返回值的函数。函数:是一个有返回值的过程。二、创建存储过程书写格式:create procedure procedure_name(in/out param ...)b

2020-08-12 22:25:28 308

原创 设计模式【1】单例模式

单例模式是一种比较常见的设计模式,在很多Manager 以及 Factory类中广泛使用。下面我们来介绍一下几种常见的写法:一、饿汉式/** 1. 单例模式之一 2. 饿汉式 */public class Singleton { //1.确保构造方法私有化,外界无法通过new 创建对象 private Singleton(){ } //2.静态私有化的创建 类的对象,类加载时就创建对象(饿汉式) private static final Single

2020-08-04 20:58:18 133

原创 简单算法——二分查找法

二分查找算法二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,前提是查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。查找过程首先,假设数组中元素是按升序排列,将数组中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将数组分成前、后两个子数组,如果中间位置记录的关键字大于查找关键字,则进一步查找前一数组,否则进一步查找后一数组。重复以上过程,直到找到满足条件的记录,使查找成功,或直到数组不存在为止,此时查找不成功。

2020-08-03 22:21:25 455

原创 还在使用 PostMan 测试接口?试试 Swagger 吧

一,简介什么是swagger?我们去官网看一下https://swagger.io/:简化Api开发,方便大规模Api设计。号称世界上最流行的Api框架。RestFul Api文档在线生成工具。字节运行,可以在线测试Api接口。支持多种语言,java、php等。二、如何使用Swagger...

2020-08-01 16:18:53 555

原创 Spring Boot 整合 Shiro 实现登录认证权限控制

在互联网软件开发过程中,我们项目中必不可少的是安全框架,如何做好项目的安全是一个app最基本的一步。我们现阶段使用最多的安全框架一个是springboot的security框架,另一种是Apache Shiro,今天我们来学习一下shiro的使用。一、简介什么是权限管理权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。  权限管理包括用户身份认证和授权两部分,简称认证授权。对于需要访问控制的资源用户首先经过身份认证,

2020-07-30 16:54:34 507

原创 springboot + mysql + druid 整合

springboot 2.0以上默认使用 com.zaxxer.hikari.HikariDataSource 数据源,但是我们可以通过 spring.datasource.type 指定数据源。一、Maven 引入和Druid配置首先添加maven配置druid依赖: <dependency> <groupId>com.alibaba</groupId> <artifactId>druid<

2020-07-28 16:43:44 2152 1

原创 自从使用了Semaphore,再也不用担心接口并发频率限制了

今天在写代码时遇到一个问题,在对接shopify电商平台api接口时,使用多线程并发处理数据返回了一个报错:Exceeded 2 calls per second for api client. Reduce request rates to resume uninterrupted service.平台接口有频率限制一秒钟只能够请求两次,多线程并发处理,导致大量数据处理失败,咋整?按照我们以前的思维,这里肯定不适合使用多线程,乖乖换回单线程处理,并且每个请求睡眠0.5s。但是作为一个多年经验的

2020-07-21 14:50:07 776

原创 springboot + bootstrap + thymeleaf +mybatis 编写员工管理系统

前面一篇文章实现了用户登录验证:springboot + thymeleaf +interceptor实现用户登录验证今天接着上一篇文章,接入mybatis,实现员工管理系统的增删改查功能。首先贴一下maven配置:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-in

2020-07-20 21:06:35 1881 2

原创 springboot + thymeleaf +interceptor实现用户登录验证

一、环境准备首先创建一个springboot项目,并引入thymeleaf依赖。贴一下pom.xml<!--引入thymeleaf--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>准备一个静

2020-07-17 14:08:26 1439 1

原创 mybatis-generator-maven-plugin:1.3.7:generate failed: Exception getting JDBC Driver: com.mysql.jdbc.

使用Maven :generator插件自动生成pojo以及xml映射文件时报这个错:[ERROR] Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.7:generate (default-cli) on project demo: Execution default-cli of goal org.mybatis.generator:mybatis-generator-maven-plug

2020-07-14 20:28:31 3087

原创 springboot配置多数据源

一、前言springboot 为我们集成了数据库资源,只要maven引入数据库资源,在配置文件中配置数据库连接即可。但是默认数据库只能有一个,真正生产中往往我们需要在项目中配置多个数据库资源。该如何配置呢?二、场景现有两个数据库,test、test1,分别有一张表,sys_user以及sys_student.我们现在要通过springboot项目,根据不同场景分别连接到不同的数据库。<?xml version="1.0" encoding="UTF-8"?><project

2020-07-09 22:19:30 575

原创 springboot扫包的坑

今天在测试maven插件mybatic-generator自动生产pojo以及Mapper映射文件时发现一个问题。我生成的Mapper文件竟然不能够被springboot扫描到,导致在controller里面使用时出现装配异常。2020-07-09 12:00:06.110 WARN 15848 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context i

2020-07-09 12:18:15 521

原创 【深度好文】Mysql 缓冲池(buffer pool)机制详解

应用系统分层架构,为了加速数据访问,会把最常访问的数据,放在缓存(cache)里,避免每次都去访问数据库。操作系统,会有缓冲池(buffer pool)机制,避免每次访问磁盘,以加速数据的访问。MySQL作为一个存储系统,同样具有缓冲池(buffer pool)机制,以避免每次查询数据都进行磁盘IO。今天,和大家聊一聊InnoDB的缓冲池。一、InnoDB的缓冲池缓存什么?有什么用?缓存表数据与索引数据,把磁盘上的数据加载到缓冲池,避免每次访问都进行磁盘IO,起到加速访问的作用。速度快,那为啥.

2020-07-08 16:14:52 1235

原创 springboot静态资源加载规则

我们经常会使用springboot创建web应用,在springboot中金静态资源是如何存放的呢?一、静态资源映射规则我们先创建一个springboot项目。使用https://start.spring.io/idea内置创建一个项目,不多说了。我们要引入我们前端资源,我们项目中有许多的静态资源,比如css,js等文件,我们以前写项目与都是自己建立文件夹,自己设计访问路径,但是现在,这个SpringBoot怎么处理呢?如果我们是一个web应用,我们的main下会有一个webapp,我们以前都是将

2020-07-07 17:50:43 1271

原创 springboot自动装配原理

springboot为我们提供了大量自动配置。一、分析自动配置原理以HttpEncodingAutoConfiguration(Http编码自动配置)为例解释自动配置原理;//表示这是一个配置类,和以前编写的配置文件一样,也可以给容器中添加组件;@Configuration //启动指定类的ConfigurationProperties功能; //进入这个HttpProperties查看,将配置文件中对应的值和HttpProperties绑定起来; //并把HttpProperties

2020-07-06 20:53:46 978

原创 java自定义注解实现校验对象属性是否为空

前面学习了如何自定义一个注解:java如何优雅的自定义一个注解下面来实战演示一下如何使用自定义注解做一些实际的功能。比如校验对象属性是否为空。一、自定义一个NotNull注解我们自定义一个NotNull注解,里面有一个参数message 默认为“”;/** * 自定义注解 * 判断屬性不为空注解 */@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.FIELD)public @interface NotNull { /*

2020-07-03 12:15:44 6556

springboot-thymeleaf素材.rar

使用soringboot 以及thymeleaf实现用户登录以及权限校验的Web素材,包含首页,登录页,以及样式信息。

2020-07-16

Navicat Premium_11.2.7简体中文版.rar

Navicat Premium 多平台集合版,可连接多重数据库mysql,sqlServer,oracle,Sqlite等,中文版

2020-05-14

空空如也

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

TA关注的人

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