-
SpringBoot中如何让List和Json自动互转
之前业务开发时,有一个字段接收的数据是Json格式的,并且需要以Json形式入库:数据库中是这样存储的,这里实际是一个Json数组。[ { "label": "result1", "name": "较好", &nbs...
-
Java基础|强引用、弱引用、软引用、虚引用
前言在ThreadLocal源码中,其中嵌套类ThreadLocalMap中的Entry继承了WeakReferenc。Java中提供这四种引用类型主要有两个目的:第一是可以让程序员通过代码的方式决定某些对象的生命周期;第二是有利于JVM进行垃圾回收。强引用(StrongReference)强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。如下:Obj...
-
FFmpeg实战001:FFmpeg简介
什么是FFmpegFFmpeg是当前相当流行的开源多媒体开发框架,可以记录、转换数字音频、视频并能将其解码、编码、转码、混流、分离、转化为流、过滤以及播放几乎所有的媒体文件。FFmpeg拥有先进的音频/视频编解码库libavcodec,可以完成音视频的编码、解码、转码、采集、后处理(抓图、水印、封装/解封装、格式转换等)、流媒体服务等诸多功能。基本涵盖了音视频开发中绝大多数的领...
-
OAuth 2.0授权框架详解
简介在现代的网站中,我们经常会遇到使用OAuth授权的情况,比如有一个比较小众的网站,需要用户登录,但是直接让用户注册就显得非常麻烦,用户可能因为这个原因而流失,那么该网站可以使用OAuth授权,借助于github或者其他的第三方网站的认证授权,来获取相关的用户信息,从而避免了用户注册的步骤。当然,很可能在第三方网站上授权获得用户信息之后,还需要在本网站填写一些必要的信息进行绑...
-
你来说一下springboot的启动时的一个自动装配过程吧
前言没有面试就继续夯实自己的基础,前阵子的在面试过程中遇到的各种问题陆陆续续都会总结出来分享给大家,这次要说的也是面试中被问到的一个高频的问题,我当时其实没答好,因为很早之前是看到springboot的启动的一个过程的源码的,但是时间隔得有点久了(两年多没用过springboot),所以当时也没答好。这次好好总结这部分知识。SpringApplication.run()我看网上...
-
无锁队列Disruptor原理解析
队列比较队列队列比较总结: 就性能而言,无锁(什么也不加) > CAS > LOCK; 从现实使用中考虑,我们一般选择有界队列(避免生产者速度过快,导致内存溢出);同时,为了减少Java的垃圾回收对系统性能的影响,会尽量选择array/heap格式的数据结构。所以我们实际使用中用ArrayBlockingQueue多一些;注:之后会将ArrayBlockingQue...
-
集成动态日志,“消灭”logback-spring.xml
前言动态调整线上日志级别是一个非常常见的场景,借助apollo这种配置中心组件非常容易实现。作为apollo的官方技术支持,博主经常在技术群看到有使用者询问apollo是否可以托管logback的配置文件,毕竟有了配置中心后,消灭所有的本地配置全部交给apollo管理是我们的最终目标。可是,apollo不具备直接托管logback-spring.xml配置文件能力,但是,我们可...
-
springboot之本地缓存-guava与caffeine
1. 场景描述因项目要使用本地缓存,具体为啥不用redis等,就不讨论,记录下过程,希望能帮到需要的朋友。2.解决方案2.1 使用google的guava作为本地缓存初步的想法是使用google的guava,因为本身项目中就有guava的denpency。2.1.1 pom文件需要3个dependency,如下: <!--软件老王 1--> <depen...
-
基于vue和JsPlumb的流程设计器——easyflow
介绍easyflow是一个码云上开源的一款流程设计器项目,基于VUE+ElementUI+JsPlumb,通过 vuedraggable 插件来实现节点拖拽。仓库地址https://gitee.com/xiaoka2017/easy-flowhttps://github.com/BiaoChengLiu/easy-flow功能概述支持拖拽添加节点点击线进行设置条件支持给定数据加...
-
SpringBoot中如何实现接口的统一返回和异常的统一捕获
接口的统一返回在开发公司接口时,发现Controller层的接口返回都需要用一个Result包裹,如下图所示:图示代码中无论是创建接口或者查询接口,这里都需要用一个Result去接收,我们来看看Result的结构:这个Result中有几个字段:“code:状态码message:状态信息data:装载正真返回的数据exception:异常数据”然后我们测试下接口,看看返回样式:调...
-
分布式事务的七种实现方案汇总
背景随着微服务的普及,分布式事务成为了系统设计中不得不面对的一个问题,而分布式事务的实现则十分复杂。阅读本文之前,需要你对数据库事务的ACID、CAP理论、Base理论以及两阶段提交有一定的认知,不熟悉者请自行百度或者阅读参考博客1、2、3和4。除此之外,在阅读本文过程中,如果对某种方案不理解,强烈建议先阅读对应方案中的参考博客后再阅读本文中对应的介绍。为了便于后文叙述,这里对...
-
如何在mysql 造1亿条记录的大容量数据表?
背景及目标:现有数据1000w单表,为压力测试准备1亿条数据。步骤:1.将1000w条记录,除id外都导入到多个文件中://DELIMITER DROP PROCEDURE if EXISTS createManyTable; create PROCEDURE createManyTable() BEGIN DECLARE i int; DECLARE fileName VAR...
-
VUE 实现高性能的 PDF 在线预览
最近在实现共享 PDF 文档的需求,存在主讲人这样一个角色,上传 PDF 文档后,通知其它连接中的终端,进行实时同步展示的功能。对于这样的需求,pdf.js 成功的让我想起了它。PDF 文档的预览,总的就是要加载速度快,尽最快的速度完成渲染,呈现给用户看,不要出现长时间的白屏或 Loading 状态的现象,另外 PDF 文档需要支持翻页等操作。具体看看一步步的实现。文档分片下载...
-
Springboot+MybatisPlus高效实现增删改查
Mybatis-Plus基于mybatis做了增强,大大简化了单表CRUD操作,而且Mybatis-Plus是无侵入性的,不会影响现有项目,Mybatis-Plus提供了代码生成器,可以根据数据库表一键生成对应的service、mapper、xml文件,service和mapper提供了丰富的CRUD操作方法,xml文件也是非常简洁。目前最新版本是3.4.1版本。最新版本蛮看一...
-
完美的分布式监控系统——普罗米修斯
DevOps工程师或SRE工程师,可能都知道Prometheus普罗米修斯。Prometheus于2012年由SoundCloud创建,目前已经已发展为最热门的分布式监控系统。Prometheus完全开源的,被很多云厂商(架构)内置,在这些厂商(架构)中,可以简单部署Prometheus,用来监控整个云基础架构设施。比如DigitalOcean或Docker都是普罗米修斯作为基...
-
动态高并发时为什么推荐重入锁而不是Synchronized?
前言碎语Synchronized和 ReentrantLock 大家应该都不陌生了,作为java中最常用的本地锁,最初版本中 ReentrantLock 的性能是远远强于 Synchronized 的,后续java在一次次的版本迭代中 对 Synchronized 进行了大量的优化,直到 jdk1.6 之后,两种锁的性能已经相差无几,甚至 Synchronized 的自动释放锁...
-
自定义ElementUI选择器选项样式的方法
前言最近接了一个需求,基于 ElementUI的选择器,自定义符合需求的样式出来,笔者最终顺利完成了需求,其中踩了不少坑,写本分分享下案例首先展示下本demo的代码结构,以便后续观具体代码,心中数本项目是基于 ElementUI 的 Starter,这个可以开箱即用,里边搭建好 Vue,ElementUI的架子,方便开发者进行后续的开发,不用浪费精力在配置上,具体地址如下:ht...
-
写出好的Join语句,前提你得懂这些
前言最近在读《MySQL性能调优与架构设计》,看到一个关于join的优化原则,如下:大白话解释下:因为驱动结果集越大,意味着需要循环的次数越多,也就是说在被驱动结果集上面所 需要执行的查询检索次数会越多。比如,当两个表(表 A 和 表 B) Join 的时候,如果表 A 通过 WHERE 条件过滤后有 10 条记录,而表 B 有 20 条记录。如果我们选择表 A 作为驱动表,也...
-
Vue学习笔记之路由的keep-alive应用及技巧
keep-alive的应用:作用:keep-alive是Vue内置的一个组件,可以使比包含的组件保留状态,或避免重新渲染,而router-view也是一个组件,如果直接被包在keep-alive里面,所有的路径匹配到的视图组件都会被缓存。生命周期:· 初次进入时:created > mounted > activated;退出后触发 deactivated· 再次进...
-
Spring Boot 整合 Netty
前言Protobuf介绍使用代码编写服务端客户端功能测试其它前言本篇文章主要介绍的是SpringBoot整合Netty以及使用Protobuf进行数据传输的相关内容。Protobuf会简单的介绍下用法,至于Netty在之前的文章中已经简单的介绍过了,这里就不再过多细说了。Protobuf介绍protocolbuffer(以下简称PB)是google 的一种数据交换的格式,它独立...
-
快速实现图形验证码、token验证
验证码(图形、短信、邮箱)、token机制对于系统的安全性已经是老生常谈;本文将结合spring-security快速实现Google图形验证码、token的安全性校验。 技术储备1、UserDetailsService接口/** * Core interface which loads user-specific data. * <p> * It is us...
-
thinkphp5.1 _initialize初始化方法不执行问题
thinkphp5.1的初始化方法名称已修改成了 initialize,前面不带下划线,使用新版这个要注意哦。 thinkphp5.1的初始化方法名改为initialize去掉了之前的下划线,在 使用/重写 的时候应该注意将其声明为protected类型的,若直接声明为public类型,则其功能和普通方法无二,也就是说可以被用户访问到,并且会被执行两次。
-
简单列一下分布式高并发要做的事情
数据库以MySQL为例。慢查询日志,索引优化(explain),覆盖索引。数据库一主多从或者双主多从。读写分离。然后对表进行垂直划分,例如一张字段很多的宽表转为子母表。水平划分,根据业务特性,对表进行分区(现在应该很少用),分表,甚至分库。数据该归档的归档,日表变月表,年表,或者变地域表等。使用sharding-jdbc等。甚至可以给数据库硬盘换上SSD。数据量再大,就该考虑大...
-
探究神秘的SpringMVC,寻找遗失的web.xml踪迹
寻找遗失的 web.xml在开始 Spring MVC 的分析之前,先来聊一聊 Java 初学者接触的最多的 Java Web 基础。还记得我的第一个 Web 工程是由 Servlet、Velocity 和 Filter 来完成的,那时几乎所有人都是根据 Servlet、JSP 和 Filter 来编写自己的第一个 Hello World 工程。那时,还离不开 web.xml ...
-
如何做一个防重设计
前言在业务设计中防重设计是一个关键点,以接口设计为例,防重就是防止接口被多次调用而产生脏数据,比如支付订单出现重复支付,所以说防重至关重要,在如何防重之前我们首先看一下是如何出现重复请求的。何时出现多次调用多次调用接口的出现有主观原因比如:人为的重复请求攻击,用户的误操作等;也有客观原因比如:为了健壮性进行超时重试;重复请求攻击对于这种恶意攻击,其实已经属于安全范畴了,我们可以...
-
微服务技术方案:Spring Cloud 从入门到实战
随着互联网技术的发展与不断创新,以及用户流量的不断增大,越来越多的企业项目面临大数据、高并发等问题,随之而来的就是通过分布式模型组建架构,微服务思想就集中体现了应用价值,2020 年的你还没有掌握微服务技术吗?本课程会讲解 Spring Cloud 的重要知识点同时也会跟随源码,与框架设计者共同探索其设计奥妙所在,做到知其然更知其所以然!实验介绍Spring Cloud 是一系...
-
从 0 学习 Spring 缓存数据
前言昨天在开发业务时,打算加入缓存层来提高系统响应速度。查找了一些资料,发现 Spring 的缓存功能十分强大!只需要添加少量的代码,就可以轻松缓存方法所返回的对象。这篇文章通过描述一个实际使用例子,介绍 Spring Cache 的使用限制以及注意事项。环境准备Redis 5+JDK 1.8+Gradle 6+一款你喜爱的 IDE实践过程添加依赖打开 build.gradle...
-
如何在项目中优雅的校验参数
前言验证数据是贯穿所有应用程序层(从表示层到持久层)的常见任务。通常在每一层实现相同的验证逻辑,这既费时又容易出错。为了避免重复这些验证,开发人员经常将验证逻辑直接捆绑到域模型中,将域类与验证代码混在一起,这些验证代码实际上是关于类本身的元数据,与业务逻辑不相关。JSR 380——Bean Validation2.0——定义了用于实体和方法验证的元数据模型和API,将数据校验逻...
-
Redis缓存机制与应用
Redis是目前最为主流的缓存技术之一,Redis基于内存操作从而拥有强大的性能,可以达到每秒10万次的请求,可以说是一款非常强大的缓存技术了。本文分为三部分:基础知识介绍常用技术讲解与缓存机制使用场景、缓存问题基础知识介绍NoSQL概述什么是NoSQL?NoSQL = Not Only SQL (不仅仅是SQL)关系型数据库:表格 ,行 ,列 非关系型数据库:没有固定的查询语...
-
Spring Cloud系列Gateway:自定义断言规则
尽管Spring Cloud Gateway已经包含了很多路由匹配规则,有时候我们需要开发自定义路由匹配规则来满足需求,下面简单的介绍一下如何自定义路由匹配规则。需求转发请求参数中带有token并且token值为123的请求。实现实现有三步步骤,如下所示修改配置文件spring: profiles: customPredicate cloud: gateway:...