自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 资源 (1)
  • 收藏
  • 关注

原创 Spring事务多个业务场景分析

事务业务逻辑上的一组操作,要么全部成功,要么全部失败,比如下面的伪代码:public class MyService { //外界调用 public void doService(){ //A逻辑 serviceA(); //B逻辑 serviceB(); //C逻辑 serviceC(); //

2021-10-26 23:42:26 404

原创 JVM优化相关常用命令

堆空间大小设置-Xms:设置堆初始内存,等价于-XX:InitialHeapSize-Xmx:设置堆做大内存,等价于-XX:MaxHeapSize一旦堆区中的内存大小超过"-Xmx"指定的大小时,就会抛出OutOfMemoryError异常例子://设置堆内存初始化为10m,最大也为10m-Xms10m -Xmx10m...

2021-10-25 11:33:14 150

原创 线程池核心原理详解

为什么需要线程池我们知道相比较进程而言,线程是操作系统调度的更细粒度的资源,如果通过大量手动创建、调用线程,显然线程资源的复用,线程如何更好管理等问题就出现了。所以能不能有一种机制既能解决实现线程的复用,以及线程管理呢,这就提出线程池的概念,类比还有像其他基于池化思想的:数据库连接池,Http连接池等线程池创建多线程通常使用Executors工具类创建一个线程池,该类提供多种类型线程池的创建方法,主要分析一下3种 //创建一个包含指定线程数的线程池(单池多线程) public static

2021-10-24 19:49:52 226

原创 Spring核心技术IOC和AOP

前言Spring核心部分:IOC:控制反转,把创建对象的过程交给Spring容器进行管理,降低对象直接的耦合度AOP:面向切面,不修改源代码的基础上进行功能增强,比如权限检查,请求拦截,日志收集等IOCSpring底层其实是基于xml解析、反射机制、底层通过对象工厂实现IOC过程伪代码如下:/** * @Description * @Author Fangchenjiang * @Date 2021/10/13 11:56 */public class MyFactory {

2021-10-15 11:26:13 112

原创 手撸一个SpringBoot场景启动器Starter实现组件复用

前言SpringBoot能够实现快速开发,其中一点是底层为我们自动化配置好了一个个Starter,我们只需根据自身需求,修改相应配置项即可。那如何来定制化一个Starter,实现功能的复用呢?定制化mytest-spring-boot-starter编码之前,我们可以回顾一下SpringBoot的自动装配流程,这里我简单以导入mybatis的starter为例。 <!--导入的mybatis-spring-boot-starter--> <dependency&

2021-10-11 11:55:15 182

原创 SpringBoot2核心技术-Web开发原理

前言SpringBoot自动配置了SpringMVC组件,而Web开发场景在SpringBoot应用十分常用。静态资源原理SpringBoot默认静态资源可以从以下路径中获取:/static (or /public or /resources or /META-INF/resources)。由于SpringBo启动默认加载SpringMVC功能的自动配置类 WebMvcAutoConfiguration@Configuration(proxyBeanMethods = false)@Conditi

2021-10-11 09:07:34 108

原创 SpringBoot2核心技术-基础入门

依赖管理SpringBoot有很多优点,其中依赖管理也是其特性之一。对于任何一个SpringBoot应用,都会初始化引入一个父项目做依赖管理。 <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <a

2021-10-08 11:13:02 101

原创 Java基础核心知识汇总(个人笔记)

Java基础篇JDK与JRE的区别JDK:Java开发工具包,也叫JavaSDK,包含JRE拥有的一切,还有编译器(javac),能够创建和编译Java程序JRE:Java运行环境,主要包含一些Java类库以及JVM,能够运行Java程序Java语言特点“一次编译,到处运行”:并不是说Java语言跨平台,而是JVM可以安装在不同的操作系统上,本身JVM也存在JRE中,所以与其说Java语言跨平台,倒不如说是JVM跨平台Java语言有垃圾回收机制,不用开发人员手动回收,这是较其他语言一个明显的特

2021-09-15 20:40:57 131

原创 Centos7安装常用编程开发软件

前言基于Centos7汇总常用的编程开发软件安装Jdk1.8下载地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html1.下载tar.gz安装包2.通过远程传输到服务器3.使用tar -zxvf 命令解压文件到指定目录(通常将jdk压缩包放到/usr/local/路径下解压)4.配置环境变量vi /etc/profile#在文件内容最后添加jdk路径#java environmentex

2021-09-15 20:37:42 649

原创 Java递归获取省市区树形结构

递归简单地说,就是如果在函数中存在着调用函数本身的情况,这种现象就叫递归;而在实际开发中,常见的递归使用场景有省市区父子级数据获取,树形菜单等。现在,我以Java递归获取省市区来实战一遍递归的使用场景实现省市区树形数据展示具体最终数据展示:为了方便演示,不采用MySQL查询数据库,本地模拟省市区数据即可区域类import lombok.Data;/** * @Description * @Author Fangchenjiang * @Date 2021/8/19 16:24

2021-08-19 20:48:04 5777 2

原创 Java集合实现排序分页

序言对于某些排序并分页的场景,传统的SQL的limit关键字和order by此时无法满足这种特殊的场景。另外的通用解决方案就是将数据批量存储到Java集合中,再通过Java API显示排序。不过这种场景很明显的缺点就是性能底,若是数据量过大,可能会引起内存溢出等。自定义分页由于传统的分页是通过一些插件比如Mybatis-Helper,若是通过Java集合来处理,显然之前的插件已不再适用。通常我们会自定义一个关于List的分页类,其中核心点就是通过List的sublist方法实现分页/** * 自

2021-07-11 20:30:43 1950

原创 Java实现排行榜功能

前言最近项目需要开发一个排行榜功能,根据订单金额进行排名,同金额排名相同,不同则跳过,序列递增。技术实现MySQL通过SQL语句也能实现,不过SQL过于复杂,也不好维护。SELECTCASE WHEN @pre = final_score THEN @pic + 0 WHEN @pre := final_score

2021-06-05 12:21:52 12888 5

原创 Jdk动态代理和基于反射实现任务调度

代理模式代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问。代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。...

2021-05-24 18:33:37 159

原创 SpringBoot自带Jackson实现手机号脱敏

手机号在实际开发中通常要求安全返回,例如183****5996,那在Web开发中实现起来非常简单SpringBoot自带Jackson手机号脱敏由于SpringBoot默认整合了JSON序列化器Jackson,我们只需自定义一个序列化器并继承JsonSerializer即可public class PhoneJsonSerializer extends JsonSerializer { @Override public void serialize(Object value, J

2021-05-07 16:11:06 1967

原创 Hystrix-微服务架构服务调用的“保护伞“

HystrixHystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等。而Hystrix能够保证一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性,从而保护整个分布式系统能够正常运作,稳定运行,所以我把它比作分布式系统的"保护伞"。主要从服务降级、服务熔断、服务熔断服务降级...

2021-04-21 22:15:37 164

原创 Ribbon在微服务中运用及实现原理

Ribbon在微服务架构中,通常服务注册中心以及服务提供者大都是集群部署,当客户端与众多微服务交互过程中,如何保证服务的高可用性(避免出现某些服务出现请求过载,某些服务比较"闲"),也就是常说的负载均衡,而Ribbon就是在客户端实现软负载均衡的一种组件,通常与Eureka结合使用。简单总结就是RestTemplate+负载均衡Ribbon负载均衡和Rest调用这里我事先准备两个订单微服务和一个消费者服务并集群注册到Eureka集群在消费者服务中通过RestTemplate远程请求两个订单微服务并

2021-04-04 23:06:17 279 1

原创 Eureka服务注册中心的搭建

序言Eureka作为在微服务架构中必不可少的核心组件,主要分为两部分Eureka-Server和Eureka-Client。保证着微服务在RPC调用过程中的可用性和服务管理。Eureka架构图Eureka Server提供服务注册与发现,保证服务信息的一致性Service Provider服务提供者,将自身信息注册到Eureka服务器,提供给消费者调用Service Consumer服务消费者,从Eureka服务器拉取提供者信息,从而实现远程调用不过不管是服务提供者还是服

2021-03-29 00:28:59 111

原创 微服务项目搭建过程

序言最近领导安排有活,将原先公司的核心项目进行拆分,由于该项目是个基于SSM的单体应用,整体代码量比较庞大,现在要求根据新系统需求对该老项目基于微服务架构进行拆分,由于新旧系统大量存在业务耦合,编码过程那叫一个苦逼。不过今天只是聊聊整个微服务的模块搭建,步骤很简单。项目搭建一、创建父工程通常我都是基于maven构建一个简单父POM工程,简单说白了这个父工程没啥模块功能,主要是依赖的版本控制和依赖管理。而后边一些列的功能模块,都基于这个父工程进行创建,而这一个个的功能模块,就是一个个的SpringBo

2021-03-28 01:37:52 868 1

原创 MySQL limit分页运用

Limit关键字使用在Mysql中,如果是数据量小的场景,可以通过select * from t limti offset,rows进行分页查询。offset偏移量,默认从0开始;rows:返回的行数。比如select * from t limit 2,10,表示从全表的第三行开始,返回10条。Java分页的运用基于前面提到的limit,我们实际可以通过接收前端传来的分页参数即可实现分页逻辑。前提是我们需要自己分装一个分页工具类:@ApiModel(value = "分页对象")@NoArgsCo

2021-01-27 15:14:15 203 1

原创 SpringMVC实现异步任务支持

异步任务在Http协议中,基于Request<=>Response交互模型。不仅支持同步请求模式,也支持异步请求方式。而在异步任务场景中,避免客户端进入阻塞等待,请求达到并立即响应。后端一般借助线程池原理,初始化各个参数,将任务丢给线程池慢慢处理,同时响应客户端即可Spring配置异步任务调度核心配置/** * ①利用@EnableAsync 注解开启异步任务支持。 * ②配置类实现AsyncConfigurer 接口并重写getAsyncExecutor 方法,并返回一个 * T

2020-12-23 16:57:53 725

原创 Websocket实现简易聊天室功能

WebSocketWebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。WebSocke

2020-12-06 15:20:34 515

原创 Java批量追加文本数据

序言最近Leader要求批量采取视频资源,并将需要的视频Url下载方便对视频进行分析。这就需要Java对文件的批量操作了。代码废话不多,直接上代码,原理也很简单。 /** * formal.txt * @param urlList * @throws IOException */ public void writeFormalAppendFile(List<String>urlList) throws IOException {

2020-11-10 21:21:17 104

原创 微信登录以及微信支付流程

序言微信登录和微信支付在很多互联网开发中,已经成为必不可少的技术特点。今天,稍微做个简短的总结。微信登录流程准备工作:在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的网站应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程。登录流程:具体对应下图:具体详说整个流程:1.用户在前端页面点击微信登录,访问后台登录接口,验证参数合法性后重定向到二维码扫描页面。2.用户用微信扫一扫,请求微信OAuth2.0授权登录

2020-11-06 16:40:57 1808

原创 SpringMVC实现多文件上传到七牛云

前言最近在做某个业务开发,需要实现图片批量上传到七牛云,并将资源url存到数据库。这一个看似简单的流程,在实际开发中确实最常用的。所以,稍微总结一下。上传流程整个流程很简单,前端指定好文件的name属性,调用后台接口,Java程序通过遍历文件数组,通过七牛提供的API进行文件流上传,最终将文件存储到七牛的url插入到数据库。咱们直接贴上核心代码即可。 @AutoWird private IRemarkService remarkService; @RequestMapping(value = "

2020-11-02 20:41:57 799

原创 虚拟机安装Linux CentOS7系统

序言最近,因为换了新电脑,之前的镜像出了点问题,想重新装一遍Linux,顺便对整个过程做个记录,方便日后回顾也顺便解决环境搭建令小白头疼的问题。工具准备Vmware Workstation15:官网下载地址选择Windows下载即可CentOS7:官网下载地址推荐使用阿里云提供的镜像系统配置首先安装 Vmware Workstation,随便百度一个密钥激活软件打开Vmware Workstation,创建新的虚拟机选择典型安装,下一步选择镜像所在目录,稍后进行安装,下一步

2020-11-01 14:54:58 216

原创 Linux搭建Nexus私服

Nexus是什么Nexus是一个强大的Maven仓库管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问。利用Nexus你可以只在一个地方就能够完全控制访问 和部署在你所维护仓库中的每个Artifact。Nexus是一套“开箱即用”的系统不需要数据库,它使用文件系统加Lucene来组织数据。简单来说,它就是我们自己维护管理的maven仓库,仅限本人或公司内部使用,他人想要访问必须获取授权为什么要用Nexus1.在外网速度比较慢的情况下,我们可以将某些已下载包缓存到Nexus,下次获取就比较快了。

2020-11-01 14:28:33 247

原创 SpringBoot自定义Starter并上传到Nexus私服

StarterStarter是SpringBoot一种重要的机制,是一组方便的依赖关系描述符。能够抛弃以前Spring中繁杂的配置,集成了相关的依赖组件,只需引入相关Starter依赖,SpringBoot会自动扫描到要加载的配置信息并启动相应的默认配置。因此,SpringBoot默认在很多企业级开发场景中集成常用的Starter,如:spring-boot-starter-data-jdbc,spring-boot-starter-web等为什么要自定义Starter在我们的日常开发工作中,经常会有

2020-11-01 14:15:05 1656 1

原创 SpringBoot自动装配原理与启动流程

序言SpringBoot的自动装备与启动流程在面试中被问了很多次了。这次认真做给总结吧,免得下一次面试一问三不知,毕竟作为一名的Javaer,常用框架基本原理搞不清楚的话,就有点说不过去了o(╥﹏╥)oSpringBoot自动装配首先找到启动类(SpringBoot主启动类),点击进入@SpringBootApplication注解,可以该注解是一个符合注解,重点看@EnableAutoConfiguration注解(开启自动配置),那具体的自动配置逻辑在哪呢?别急,继续@EnableAutoConf

2020-11-01 14:04:44 4235

原创 别怕下次面试官再问你SpringMVC执行流程了

前言SSM(Spring+SpringMVC+Mybatis)作为目前主流的JavaEE框架,今天好好聊聊三只神器之一SpringMVC。SpringMVC的名字由两部分组成,Spring 彰显了它的家族身份,而 MVC 则代表它的能力。那么 MVC 究竟是什么呢?MVC模式:是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。视图(View) :在 JavaEE 应用程序中,视图(View)可以由 JSP(Java Ser

2020-11-01 13:46:12 189

原创 聊聊Spring中的核心IOC和AOP

Spring框架概述Spring是轻量级的开源JavaEE框架,解决企业应用开发的复杂性。其中的核心部分有ICO(控制反转,将创建对象的过程交给Spring进行管理,不再通过传统的new方式)和AOP(面向切面,不修改源代码的基础上进行功能增强)。Spring特点有:方便解耦,简化开发、AOP编程、方便测试、方便与其他框架整合、事务操作等IOCIOC:控制反转,将对象创建过程与对象之间的调用过程,交给Spring进行管理,降低代码耦合度。简单说就是假如类A中依赖类B,不再通过new的方式注入依赖,而是

2020-11-01 13:32:14 431

原创 Nginx反向代理+负载均衡到网关+动静分离

NginxNginx (engine x) 是一个高性能的HTTP和反向代理web服务器,在微服务架构中,Nginx作为客户端请求的第一层中间件,通常将请求转发代理给网关。一般Nginx运用的主要场景有反向代理、负载均衡、动静分离等,在微服务架构如下:反向代理为了安全起见,一般我们不会将应用服务器内网地址暴露给外界,此时就让Nginx作为代理来访问内网地址。而Nginx的IP地址可以作为公网IP暴露给外界使用,这样就屏蔽了内网服务器信息。例如:首先在本机修改hosts文件路径为:C:\Wi

2020-10-20 21:47:56 3726 3

原创 Jdk1.8新特性看这篇就够了

前言Jdk1.8提出了很多新特性,比如增加新的语言(Lambda表达式)、Stream API,Optional类。jdk8增加的新特性,使得程序效率会更快,提升程序员的编程体验。Lambda表达式Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码。使得写出更简洁、灵活的代码。举例:(o1,o2)->Integer.compare(o1,o2),其中->:Lambda操作符或箭头操作符;->左边:Lambda形参列表(接口中抽象方法的形参列表);-&

2020-10-18 11:09:51 199

原创 聊聊Java中的反射机制

反射机制反射机制:程序运行期间,获取类内部的结构(属性,方法等信息)。反射机制和new的方式都可以创建类的对象,一般推荐使用new的方式。而反射创建对象通常用于框架层面,比如Spring,Mybatis等框架内部就用到了反射反射获取类内部结构首先定义一个Java类:public class Student { private int id; public String name; public Student(int id, String name) {

2020-10-18 10:48:49 78

原创 Java常用运算符(++,--)

前言Java提供的常用的运算符包括+,-,*,/,%,–,++,=;今天稍微总结下期中比较常用的几个。/和%/:等价于数学中的除法;%:取模运算,获取除法中的余数作为运算结果- -和++在Java中,- -和++主要分为以下几类:i++先运算,再自增1++i先自增1,再运算i- -先运算,在自减1– -i先自减1,再运算代码验证: int i=10; int result1=++i; //前++ int result2=i++;

2020-10-18 10:41:58 443 1

原创 Comparable与Comparator排序

前言对于Java对象,通常情况下只能存在==,!=的比较,而没有<或>的比较。但是实际开发中,我们却会遇到实现对象的排序,比如商品排序,按销量排序,价格排序,以及评论数排序等。可以通过java提供的两个比较器:Comparable和ComparatorComparable接口像String,包装类底层实现了Comparable接口,重写了compareTo(obj)方法并默认从小到大排序compareTo(obj)比较规则如果当前对象this大于形参对象obj,则返回正整数如果当前

2020-10-18 10:36:21 141

原创 枚举类与注解

枚举类枚举类:当类的对象是有限个,并且确定的常量,我们就称此类为枚举类,并且类似class也有属性,jdk1.5新增用enum关键字表示。由于枚举的实例为常量,习惯用大写字母对每个常量命名,并用",“隔开,最后一个以”;"结尾。比如我们开发中表示一周的7天,或者四季,性别等,都是能确定的常量,这就可以用枚举类。枚举演示定义一个季节的枚举,具体有春夏秋冬四个季节,代码如下:/** * 季节枚举类 * */public enum Seaon{ SPRING("春天","春暖花开"),

2020-10-18 10:24:51 113

原创 Java常见日期时间类

前言发中,我们经常与日期时间类打交道,比如数据库中常用的datetime与Java中的时间类型作转换,还有前端传过来的时间字符串处理等等。接下来,我们来熟悉一些常用的日期时间API。具体分为jdk1.8之前和jdk1.8后(含1.8)两类JDK1.8之前日期时间类jdk1.8前,常用时间日期类主要有System.currentTimeMillis(),java.util.Date类,java.sql.Date类,SimpleDateFormat,下面简单说说各个类的主要用法和运用场景System.

2020-10-18 10:15:30 302

原创 原来String、StringBuffer、StringBuilder底层是这么回事

前言字符串的使用在不仅在Java代码中随处可见,而且在面试也常被问起。所以,对于咱们朝夕相处的老友,我觉得有必要好好来重新认识它们,了解其底层实现原理。String类String表示字符串,用一对""表示String声明为final,表示不可以被继承String实现了Serializable接口,表示String可以被实例化实现了Comparable接口,表示可以比较大小定义了final char value[],存储字符串数据源码如下:大家都知道,String代表不可变的字符序列。

2020-10-17 21:04:56 953

原创 Java IO常见用法

初始IO流I/O流(Input/Output)流,通常用于处理设备间的数据传输,如读写文件,网路通讯等,如下图演示文件读写:简单来说就是Java程序将磁盘上的文件通过流读到内存层面称为Input流(输入流);Java程序将内存层面的数据通过流持久化到磁盘文件称为Output流(输出流)流的分类按操作数据单位:字节流、字符流按数据的流向:输入流、输出流按流的角色:节点流、处理流流的体系结构节点流以及处理流都继承抽象基类,只需实例化节点流或处理流即可对文件进行操作,除开抽象基类,节点流和处理

2020-10-17 20:42:55 192 1

转载 JAVA技术汇总

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

2019-11-06 22:36:46 257

java多线程学习

java多线程学习,常见实现线程的方式,继承Thread类,实现Runnable接口,实现Callable接口

2019-10-31

空空如也

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

TA关注的人

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