自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

CrankZ的博客

希望能用自己的技术使这个世界更加美好。

  • 博客(85)
  • 收藏
  • 关注

原创 幕译--本地字幕生成与翻译--Whisper客户端

本地离线的字幕生成与翻译,支持显卡加速。可免费试用

2024-04-06 19:23:11 678

原创 接口的性能优化(从前端、后端、数据库三个角度分析)

主要通过三方面进行优化。

2023-12-08 14:57:50 576

原创 RPC与HTTP的关系

而RPCRemoteProcedureCall),又叫做远程过程调用。它本身并不是一个具体的协议,而是一种调用方式,只要能够实现这种调用方式都可以称为RPC实现RPC有两个核心点,传输协议与序列化方式,而HTTP只是传输协议中的一种。

2023-10-29 21:38:36 1089

原创 RESTful 接口设计规范-个人总结

以下接口规范为个人收集并总结,仅供参考。欢迎提供建议。

2023-10-18 16:02:56 238

原创 2023-IDEA插件推荐

提供下划线、驼峰等代码风格的切换。快捷键是⇧ + ⌥ + U / Shift + Alt + U根据JSON字符串,自动生成实体直接在 IDE 中操作 JSON 字符串支持格式化、压缩JSON转义、反转义JSON这个插件会帮助你更好的使用MapStruct,比如提供代码跳转服务可以可视化的分析和排除冲突依赖关系将mybatis sql日志恢复为原始的完整可执行sql。可渲染PlantUML的图形,并且提供代码提醒与高亮代码质量检测。

2023-10-07 21:05:20 653

原创 2023-油猴(Tampermonkey)脚本推荐

移除登录弹窗、屏蔽首页视频、默认收起回答、快捷收起回答/评论(左键两侧)、快捷回到顶部(右键两侧)、屏蔽用户、屏蔽关键词、移除高亮链接、屏蔽盐选内容/热榜杂项、净化搜索热门、净化标题消息、展开问题描述、显示问题作者、置顶显示时间、完整问题时间、区分问题文章、直达问题按钮、默认高清原图、默认站外直链安装后为 Github 的等任何需要下载的文件添加高速下载(加速下载)!以及在项目列表页,添加单文件快捷下载 (☁)链接,方便单独下载某个文件!以及在项目 Git 地址处,自动在开头添加git clone。

2023-09-25 23:29:18 3783

原创 2023-Chrome插件推荐

一键开启、禁用Chrome插件。无需打开 Gmail 或 邮件客户端,即可收到桌面邮件通知,方便地查看、收听或删除邮件,并且支持多账户。能够把任意格式的文本,转成指定的排版格式。也能方便的导出为PDF或者MD网页翻译,双语对照翻译深度定制优化主流网站 - 针对 Google、Twitter、Reddit、YouTube、彭博社、华尔街日报等主流网站进行优化,无论是搜索、社交还是获取资讯,都更加流畅高效。一款用于嗅探、分析网页图片并提供批量下载等功能的浏览器扩展程序。可以方便、批量的下载当前网页中的图片。

2023-09-25 23:03:02 646

原创 Devs--开源规则引擎介绍

DevsDevs是一款轻量级的规则引擎。开源地址:https://github.com/CrankZ/devs基础概念此规则引擎的基础概念有字段、条件、规则等。其中字段组成条件,条件组成规则,并且支持多个条件通过与或组成一个规则。下面用常见的代码说明各个概念代码举例规则分类多个规则可组成一个模板,调用接口执行的时候是以模板为维度执行的。模板模板名称模板1规则模板映射表模板id规则id111213规则相关字段

2021-11-28 17:45:45 1493

原创 规则引擎相关开源项目总结

表达式引擎JavaGroovyhttps://groovy-lang.org/JEXLhttps://commons.apache.org/proper/commons-jexl/mvelhttps://github.com/mvel/mvelSpringELhttps://docs.spring.io/spring-framework/docs/3.0.x/reference/expressions.htmlOGNLhttps://commons.apache.org/proper/

2021-04-01 10:58:37 1805

原创 幂等性概念与解决方案

幂等性概念幂等性原本是数学上的概念用在编程领域,则意为对同一个系统,使用同样的条件,一次请求和重复的多次请求对系统资源的影响是一致的。幂等性原本是数学上的概念,,即使公式:f(x)=f(f(x)) 能够成立的数学性质。编程领域,则意为对同一个系统,使用同样的条件,一次请求和重复的多次请求对系统资源的影响是一致的。用通俗的话讲:就是针对一个操作,不管做多少次,产生效果或返回的结果都是一样的。如果没有实现接口幂等性会有很严重的后果: 支付接口,重复支付会导致多次扣钱 订单接口,同一个订单可能会多次创建。

2021-03-24 22:53:51 925

原创 限流算法总结:计数器、滑动窗口、漏桶算法、令牌桶算法

为什么需要限流?由于互联网公司的流量巨大,系统上线会做一个流量峰值的评估,尤其是像各种秒杀促销活动,为了保证系统不被巨大的流量压垮,会在系统流量到达一定阈值时,拒绝掉一部分流量。限流会导致用户在短时间内(这个时间段是毫秒级的)系统不可用,一般我们衡量系统处理能力的指标是每秒的QPS或者TPS,假设系统每秒的流量阈值是1000,理论上一秒内有第1001个请求进来时,那么这个请求就会被限流。比如web服务、对外API,这种类型的服务有以下几种可能导致机器被拖垮:用户增长过快因为某个热点事件(秒杀、微

2021-03-23 23:55:32 6727 6

原创 本地缓存Caffeine

Caffeine说起Guava Cache,很多人都不会陌生,它是Google Guava工具包中的一个非常方便易用的本地化缓存实现,基于LRU算法实现,支持多种缓存过期策略。由于Guava的大量使用,Guava Cache也得到了大量的应用。但是,Guava Cache的性能一定是最好的吗?也许,曾经,它的性能是非常不错的。但所谓长江后浪推前浪,总会有更加优秀的技术出现。今天,我就来介绍一个比...

2019-05-19 16:54:04 1227

原创 Java——七种垃圾收集器+JDK11最新ZGC

JDK1.8之前的堆内存示意图:从上图可以看出堆内存的分为新生代、老年代和永久代。新生代又被进一步分为:Eden 区+Survior1 区+Survior2 区。值得注意的是,在 JDK 1.8中移除整个永久代,取而代之的是一个叫元空间(Metaspace)的区域(永久代使用的是JVM的堆内存空间,而元空间使用的是物理内存,直接受到本机的物理内存限制)。JVM为什么要进行垃圾回收?...

2019-01-07 16:41:45 27142 10

原创 String学习笔记

阿里Java开发手册这里总结了阿里开发手册中有关String类的介绍13. 【推荐】使用索引访问用String的split方法得到的数组时,需做最后一个分隔符后有无内容的检查,否则会有抛IndexOutOfBoundsException的风险。说明:String str = "a,b,c,,";String[] ary = str.split(",");// 预期大于3,...

2018-12-25 16:23:54 897

原创 结构型模式:代理模式,Java静态代理+动态代理实现

什么是代理模式代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.这里使用到编程中的一个思想:对扩展开放,对修改关闭。也就是不要随意去修改已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法举个例子来说明代理的作用:假设我们想邀请一位明...

2018-12-15 11:22:03 415

原创 基本类型与包装类型

阿里开发手册中关于基本类型的问题7. 【强制】所有的相同类型的包装类对象之间值的比较,全部使用equals方法比较。 说明:对于Integer var = ? 在-128至127范围内的赋值,Integer对象是在IntegerCache.cache产生,会复用已有对象,这个区间内的Integer值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是...

2018-12-14 21:48:08 2166

原创 创建型模式:单例模式+5种写法+最佳实践。

什么是单例模式单例模式(Singleton Pattern):单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。单例模式特点:这个类只能有一个实例; 它必须自行创建这个实例; 它必须自行向整个系统提供这个实例。Tips:单例模式是一种对象创建型模式。单例模式分类饿汉方式 懒汉方式 双重检测法 静态内...

2018-12-11 15:04:04 938

原创 创建型模式:工厂模式

23种设计模式工厂模式的分类简单工厂(Simple Factory)模式 工厂方法(Factory Method)模式 抽象工厂(Abstract Factory)模式为什么要用工厂模式满足开闭原则:对修改关闭,对扩展开放。就是别改老代码,只需要添代码,以前所有的老代码,都是有价值的,需要尽力保留 解耦 :把对象的创建和使用的过程分开 降低代码重复: 如果创建某个对象的过...

2018-12-10 15:52:13 414

原创 哈希 学习笔记

Tips:Hash=哈希=散列Tips:哈希经常与哈希函数指一个意思。本文中哈希与哈希函数不做特殊区分,默认就是一个意思。什么是哈希在记录的关键字与记录的存储地址之间建立的一种对应关系叫哈希函数。哈希函数就是一种映射,是从关键字到存储地址的映射。通常,包含哈希函数的算法的算法复杂度都假设为O(1),这就是为什么在哈希表中搜索数据的时间复杂度会被认为是”平均为O(1)的复杂度...

2018-12-09 18:30:13 2043

原创 布隆过滤器,原理+案例+代码实现

概述什么是布隆过滤器        布隆过滤器(Bloom Filter)是1970年由布隆提出的,它实际上是由一个很长的二进制向量和一系列随意映射函数组成。        它是一种基于概率的数据结构,主要用来判断某个元素是否在集合内,它具有运行速度快(时间效率),占用内存小的优点(空间效率),但是有一定的误识别率和删除困难的问题。它能够告诉你某个元素一定不在集合内或可能在集合内。...

2018-12-09 15:49:10 8062 4

原创 分布式锁,学习笔记

什么是分布式锁?当在分布式模型下,数据只有一份(或有限制),此时需要利用锁的技术控制某一时刻修改数据的进程数。与单机模式下的锁不仅需要保证进程可见,还需要考虑进程与锁之间的网络问题。(我觉得分布式情况下之所以问题变得复杂,主要就是需要考虑到网络的延时和不可靠。。。一个大坑)分布式锁还是可以将标记存在内存,只是该内存不是某个进程分配的内存而是公共内存如 Redis、Memcache。至于...

2018-12-06 17:55:17 327

原创 时间复杂度+常见复杂度解释

前言算法的效率虽然计算机能快速的完成运算处理,但实际上,它也需要根据输入数据的大小和算法效率来消耗一定的处理器资源。要想编写出能高效运行的程序,我们就需要考虑到算法的效率。算法的效率主要由以下两个复杂度来评估:时间复杂度:评估执行程序所需的时间。可以估算出程序对处理器的使用程度。空间复杂度:评估执行程序所需的存储空间。可以估算出程序对计算机内存的使用程度。设计算法时,一般是要先考虑系...

2018-12-02 19:07:15 20636 4

原创 分库分表

名词解释库:database;表:table;分库分表:sharding为什么要分库分表移动互联网时代,海量的用户每天产生海量的数量,比如:用户表 订单表 交易流水表以支付宝用户为例,8亿;微信用户更是10亿。订单表更夸张,比如美团外卖,每天都是几千万的订单。淘宝的历史订单总量应该百亿,甚至千亿级别,这些海量数据远不是一张表能Hold住的。事实上MySQL单表可以存储10亿级...

2018-12-01 23:11:31 8669 2

原创 MySQL存储引擎:MyISAM与InnoDB

常见命令查看数据库可配置的存储引擎类型MySQL>show engines; create table创建表时指定存储引擎MySQL> use schoolMySQL> create table class(id int ,cname varchar(20)) engine=InnoDB; #创建库,指定引擎InnoDBMySQL> show...

2018-11-28 23:14:30 564

原创 Cookie、Session、Token

HTTP无状态而Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。就是说假如你去网上购物,把喜欢的商品加到购物车中,因为HTTP是无状态的协议,一旦你的浏览器关闭,下次打开的时候,你上次购物车的商品都没了。这种体验肯定是很差的,所有需要一种机制解决这个问题...

2018-11-28 11:47:23 450

原创 8个排序算法

排序算法排序算法(Sorting algorithms)是什么? Wikipedia 如是说:In computer science, a sorting algorithm is an algorithm that puts elements of a list in a certain order.也就是说,排序算法,就是某种算法,将列表中的元素按照某种规则排序。常见的如数字大...

2018-11-22 18:30:44 502

原创 BeanFactory、 ApplicationContext、FactoryBean区别与联系

BeanFactory概述Spring 作为一种IoC容器最大的目的就是降低组件与组件之间的依赖关系。而BeanFactory作为整个Spring IoC容器的核心使用了一种统一的方法来装配所有的应用对象,通过Java的反射机制和依赖注入来实现这一装配过程,使受之管理的对象无需知道Spring的存在,同时也降低了组件间的依赖程度,同时受管对象的生命周期由BeanFactory来统一管理,开...

2018-11-21 16:53:25 1010

原创 从输入URL到显示页面的过程中发生了什么?

概览关于这个问题,我看过很多文章,每个人分析的方法与总结的步骤都不相同。我这里按照自己的理解把过程分为了十个部分。因为我主要学习后端,所以最后几步前端的内容略写了。一、URL解析二、DNS域名解析三、建立TCP连接四、发送HTTP请求五、访问重定向301/302(非必须)六、服务器处理请求七、返回响应结果八、断开TCP连接九、浏览器解析HTML十、浏览器渲染界面一...

2018-11-20 16:41:09 4081

原创 Redis淘汰机制+热点数据问题

为什么需要淘汰Redis是内存数据库,我们能时时刻刻能感受到Redis作者为更好地使用内存而费尽各种心思,例如最明显的是对于同一种数据结构在不同应用场景下提供了基于不同底层编码的实现(如压缩列表、跳跃表等)。Redis最常见的两种应用场景为缓存和持久存储,当Redis做缓存时,有一个Redis服务器,服务器物理内存大小为1G的,我们需要存在Redis中的数据量很小,这看起来似乎足够用很长时...

2018-11-18 23:11:00 7666 4

原创 Netty学习笔记(一):基础理论+核心组件

前置知识I/O模型用什么样的通道将数据发送给对方,BIO、NIO或者AIO,I/O模型在很大程度上决定了框架的性能阻塞I/O传统阻塞型I/O(BIO)可以用下图表示:特点每个请求都需要独立的线程完成数据read,业务处理,数据write的完整操作问题当并发数较大时,需要创建大量线程来处理连接,系统资源占用较大 连接建立后,如果当前线程暂时没有数据可读,则线程就阻...

2018-11-18 21:49:12 679

原创 Java多线程学习笔记:Callable、Future、FutureTask

概述创建线程的三种方式:继承Thread,重写run方法 实现Runnable接口,重新run方法 实现Callable接口,重写call方法前两种方式,一种是直接继承Thread,另外一种就是实现Runnable接口,这两种方式都是Java第一版就有的方法。 这两种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信...

2018-11-08 10:14:32 351

原创 Java多线程学习笔记:ReentrantLock,Condition,ReentrantReadWriteLock

ReentrantLockReentrantLock和synchronized关键字一样可以用来实现线程之间的同步互斥,但是在功能是比synchronized关键字更强大而且更灵活。ReentrantLock 整体结构如下图:常用接口分析构造器ReentrantLock()创建一个 ReentrantLock的实例。 ReentrantLock(boolean fai...

2018-11-07 11:48:31 356

原创 Java并发编程:CountDownLatch、CyclicBarrier和Semaphore

概述在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。CountDownLatch上图TA刚开始被阻塞,三个线程T1,T2,T3每次调用countDown()方法cnt就减1,等到cnt=0时,TA才开始执行。正如Java文档所描述的那...

2018-11-06 10:03:52 354

原创 Docker学习笔记(一):基础概念与核心原理

开发中遇到的问题场景1当你拥有一台新的电脑,你第一件事会做什么?一般都是去装一些常用软件,比如QQ、微信、网易云音乐、Chrome浏览器等等。当然作为开发者,还需要装一些环境,JDK,或者python等等。假如现在让你负责给学校机房100台电脑,都安装以上软件和环境。那你怎么办?一台一台的手工去装?NONO这时候你肯定想在一台电脑上把环境安装好,然后把这个系统打包,直接复制...

2018-11-05 11:24:12 379

原创 设计模式学习笔记:设计模式七大原则

维基百科对设计模式的分类什么是设计模式可以用一句话概括设计模式———设计模式是一种利用OOP的封闭、继承和多态三大特性,同时在遵循单一职责原则、开闭原则、里氏替换原则、迪米特法则、依赖反转原则、接口隔离原则及合成/聚合复用原则的前提下,被总结出来的经过反复实践并被多数人知晓且经过分类和设计的可重用的软件设计方式。什么是 GOF(四人帮,全拼 Gang of Four)?在 19...

2018-10-26 11:35:16 642 2

原创 二叉树,二叉搜索树,AVL树,红黑树。学习笔记

树的基本概念维基百科对树的分类树的基本概念与术语在计算器科学中,树(英语:tree)是一种抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个节点有零个或多个子节点; 没有父节...

2018-10-23 09:45:57 933

原创 Linux学习笔记+Vim用法简介

学习Linux之前,我们先来简单的认识一下操作系统。一 从认识操作系统开始1.1 操作系统简介我通过以下四点介绍什么操作系统:操作系统(Operation System,简称OS)是管理计算机硬件与软件资源的程序,是计算机系统的内核与基石; 操作系统本质上是运行在计算机上的软件程序 ; 为用户提供一个与系统交互的操作界面 ; 操作系统分内核与外壳(我们可以把外壳理解成围绕着内...

2018-10-11 22:41:07 587

原创 数据库【三种读现象】与【四种隔离级别】+MySQL相关命令

数据库事务特性ACID数据库事务特征,即 ACID:A Atomicity 原子性事务是一个原子性质的操作单元,事务里面的对数据库的操作要么都执行,要么都不执行,C Consistent 一致性在事务开始之前和完成之后,数据都必须保持一致状态,必须保证数据库的完整性。也就是说,数据必须符合数据库的规则。I Isolation 隔离性数据库允许多个并发事务同事对数据进行操...

2018-10-11 20:23:07 546

原创 Java NIO学习笔记:结合源码分析+Reactor模式

Java NIO和IO的主要区别下表总结了Java NIO和IO之间的主要差别,我会更详细地描述表中每部分的差异。IO NIO 面向流 面向缓冲 阻塞IO 非阻塞IO 面向流与面向缓冲Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在...

2018-10-01 20:24:23 813

原创 数据库连接池学习笔记(一):原理介绍+常用连接池介绍

什么是连接池数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。为什么要使用连接池 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。  一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完都关闭连接,这样造成系统的 性能低下。 数据库连接池的解决方案是在应用程序启动...

2018-09-27 22:12:43 76104 13

空空如也

空空如也

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

TA关注的人

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