![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
其他
文章平均质量分 82
技术类
郑兆辉
这个作者很懒,什么都没留下…
展开
-
一文读懂哈希和一致性哈希算法
哈希 Hash 算法介绍哈希算法也叫散列算法, 不过英文单词都是 Hash, 简单一句话概括, 就是可以把任意长度的输入信息通过算法变换成固定长度的输出信息, 输出信息也就是哈希值, 通常哈希值的格式是16进制或者是10进制, 比如下面的使用 md5 哈希算法的示例md5("123456") => "e10adc3949ba59abbe56e057f20f883e"主要特点:不可逆 从哈希值不能推导出原始数据, 所以Hash算法广泛应用在现代密码体系中 无碰撞 不同的信息进行哈希转载 2021-08-17 17:28:51 · 376 阅读 · 0 评论 -
Vue中的MVVM原理解析和实现
下面由我阿巴阿巴的详细走一遍Vue中MVVM原理的实现,这篇文章大家可以学习到:1.Vue数据双向绑定核心代码模块以及实现原理2.订阅者-发布者模式是如何做到让数据驱动视图、视图驱动数据再驱动视图3.如何对元素节点上的指令进行解析并且关联订阅者实现视图更新1、思路整理实现的流程图:我们要实现一个类MVVM简单版本的Vue框架,就需要实现以下几点:1、实现一个数据监听Observer,对数据对象的所有属性进行监听,数据发生变化可以获取到最新值通知订阅者。2、.转载 2021-08-12 11:45:32 · 1121 阅读 · 0 评论 -
OAuth2 四种授权使用场景,图文结合不能再清晰了
OAuth 2.0 定义了四种授权方式密码模式(resource owner password credentials) 授权码模式(authorization code) 简化模式(implicit) 客户端模式(client credentials)1.1 密码模式这种模式是最不推荐的,因为 client 可能存了用户密码 这种模式主要用来做遗留项目升级为 oauth2 的适配方案 当然如果 client 是自家的应用,也是可以 支持 refresh token 一般在.转载 2021-08-11 11:24:39 · 693 阅读 · 0 评论 -
一遍记住Java常用的八种排序算法与代码实现方法
直接插入排序经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中。1.将第一个数和第二数排序,然后构成一个有序序列2.将第三个数插入进去,构成一个新的有序序列。3.对第四个数、第五个数......直到最后一个数,重复第二步。如何写写成代码:1.首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用插入。2. 设定插入数和得到已经排好序列的最后一个数的位数。insertNum和j=i-1。3.从最后一个数开始向前循环转载 2021-08-10 11:24:43 · 82 阅读 · 0 评论 -
万字长文:细谈Linux、JDK、Netty中NIO与零拷贝
一、先理解内核空间与用户空间Linux 按照特权等级,把进程的运行空间分为内核空间和用户空间,分别对应着下图中, CPU 特权等级分为4个,Linux 使用 Ring 0 和 Ring 3。内核空间(Ring 0)具有最高权限,可以直接访问所有资源,; 用户空间(Ring 3)只能访问受限资源,不能直接访问内存等硬件设备,必须通过系统调用陷入到内核中,才能访问这些特权资源。上面的Ring图可以简化成:内核从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程序运行的环转载 2021-08-10 11:17:37 · 380 阅读 · 0 评论 -
MVVM和MVC有什么区别?
前言:模型—视图—视图模型(Model-View-ViewModel,MVVM),本质上是MVC(模型—视图—控制器)的改进版,其最重要的特性是数据绑定(data binding),此外还包括依赖注入,路由配置,数据模板等一些特性。从MVC到MVVM模型—视图—控制器(Model-View-Controller,MVC)模式,在Web 1.0 时代曾被广泛应用于Web架构中,然而其诞生的时间却比Web早几年。最初,MVC被应用于桌面程序中,在PSP、JSP等脚本语言诞生之后,也逐渐成为Web开发转载 2021-08-09 10:42:40 · 451 阅读 · 0 评论 -
shiro 框架认识过程
关键对象:Subject:主体:访问系统的用户,进行认证的都称为主体;Principal:身份信息:是主体(subject)进行身份认证的标识,标识必须具有唯一性,如用户名,一个主体可以有多个身份,但是必须有一个主身份(Primary Principal)。credential:凭证信息:是只有主体自己知道的安全信息,如密码、证书等。主体(Subject),主体需要访问系统中的资源。资源(Resource),如系统菜单、页面、按钮、类方法、系统商品信息等。资源包括资源类型和资源实例,比如转载 2021-08-06 11:13:03 · 385 阅读 · 0 评论 -
95% 的算法都是基于这 6 种算法思想
算法思想是解决问题的核心,万丈高楼起于平地,在算法中也是如此,95% 的算法都是基于这 6 种算法思想,结下了介绍一下这 6 种算法思想,帮助你理解及解决各种算法问题。1 递归算法1.1 算法策略递归算法是一种直接或者间接调用自身函数或者方法的算法。递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。递归算法对解决一大类问题很有效,它可以使算法简洁和易于理解。优缺点:优点:实现简单易上手 缺点:递归算法对常用的算法如普通循环等,运行效率较低;并且转载 2021-08-05 14:03:35 · 622 阅读 · 0 评论 -
谷歌公司推荐的 Markdown 书写格式规范
Markdown 之所以伟大,很大部分原因是因为它只需要编写简单的纯文本,却能够输出漂亮的格式。为了管理好众多的 markdown 文件,你的 Markdown 文件应该尽可能简单并且风格保持一致。因此我们希望我们的 markdown 文件需要达到以下3个小目标:源码是易读的,并且是轻便的; markdown 文件内容要好维护; 语法要简单,并且容易记住;文档布局通常情况,下面的布局就很不错,如果不满意,可以在此基础上进行修改:# 文档的题目作者:程序员说IT时间:20转载 2021-08-05 14:00:28 · 673 阅读 · 0 评论 -
MyBatis的三种分页方式,你学废了吗?
前言分页是我们在开发中绕不过去的一个坎!当你的数据量大了的时候,一次性将所有数据查出来不现实,所以我们一般都是分页查询的,减轻服务端的压力,提升了速度和效率!也减轻了前端渲染的压力! 注意:由于 java 允许的最大整数为 2147483647,所以 limit 能使用的最大整数也是 2147483647,一次性取出大量数据可能引起内存溢出,所以在大数据查询场合慎重使用!一、Limit分页语法:limit ${startPos},${pageSize}1.在实际项目中我们一般会加上为转载 2021-08-05 13:55:22 · 593 阅读 · 0 评论 -
分库分表精辟解读
文章目录 分库分表介绍: 一、为什么要分库: 二、为什么要分表: 选型介绍: 一、三个问题: 二、中间件对比: 三、概念介绍: 四、两种方案: 分库分表介绍:分库分表的目的是为了系统高并发、高可用。分库和年发表是两回事,两个概念,都是为了防止数据库服务因为同一时间内访问量过大导致宕机而设计的一种应对策略。一、为什么要分库:参考:https://www.cnblogs.com/yanggb/p/11214339.html一般经验来说,转载 2021-08-05 13:24:04 · 86 阅读 · 0 评论 -
Unicode、UTF-8、UTF-16,终于懂了
计算机起源于美国,上个世纪,他们对英语字符与二进制位之间的关系做了统一规定,并制定了一套字符编码规则,这套编码规则被称为ASCII编码ASCII 编码一共定义了128个字符的编码规则,用七位二进制表示 ( 0x00 - 0x7F ), 这些字符组成的集合就叫做 ASCII 字符集随着计算机的普及,在不同的地区和国家又出现了很多字符编码,比如: 大陆的 GB2312、港台的 BIG5, 日本的 Shift JIS等等由于字符编码不同,计算机在不同国家之间的交流变得很困难,经常会出现乱码的问题,比如转载 2021-08-04 10:43:58 · 2550 阅读 · 0 评论 -
乐观锁与悲观锁的实际应用
前言随着互联网的兴起,现在三高( 高可用、高性能、高并发)项目是越来越流行。本次来谈谈高并发。首先假设一个业务场景:数据库中有一条数据,需要获取到当前的值,在当前值的基础上 +10,然后再更新回去。如果此时有两个线程同时并发处理,第一个线程拿到数据是10,+10=20更新回去。第二个线程原本是要在第一个线程的基础上再 +20=40,结果由于并发访问取到更新前的数据为10, +20=30。这就是典型的存在中间状态,导致数据不正确。来看以下的例子:并发所带来的问题和上文提到的类似,这里有转载 2021-08-04 09:29:51 · 449 阅读 · 0 评论 -
Jenkins与Docker的自动化CI/CD流水线实战
在互联网时代,对于每一家公司,软件开发和发布的重要性不言而喻,目前已经形成一套标准的流程,最重要的组成部分就是持续集成(CI)及持续部署、交付(CD)。本文基于Jenkins+Docker+Git实现一套CI自动化发布流程。1、发布流程设计工作流程:1.开发人员提交代码到Git版本仓库;2.Jenkins人工/定时触发项目构建;3.Jenkins拉取代码、代码编码、打包镜像、推送到镜像仓库;4.Jenkins在Docker主机创建容器并发布。环境规划如下:角色转载 2021-08-04 09:19:12 · 551 阅读 · 0 评论 -
基于JWT规范实现的认证微服务
目录:一、微服务介绍二、随之而来的认证和授权问题三、项目架构通信四、用于签名以及验证的公钥和私钥令牌五、项目数据库同步问题一、微服务介绍微服务日渐流行,几乎所有流行语言都提供了两种框架实现,一是面向Web开发的大型框架,一是面向小型应用的微框架。轻量级框架作为微服务架构来说,是个好的选择。微服务架构有很多优势,诸如高可维护性,独立部署等等。微服务架构让我们可以针对特定语言选择最优的解决方案来建立特定的服务,比如,针对爬虫类应用或者AI场景,我们可以选择建立一个Python服务;针转载 2021-08-03 16:22:11 · 286 阅读 · 0 评论 -
彻底搞懂NIO效率高的原理
前言这篇文章读不懂的没关系,可以先收藏一下。笔者准备介绍完epoll和NIO等知识点,然后写一篇Java网络IO模型的介绍,这样可以使Java网络IO的知识体系更加地完整和严谨。初学者也可以等看完IO模型介绍的博客之后,再回头看这些博客,会更加有收获。NIO相比BIO的优势NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到大型应用服务器,成为解决高并发与大量连接、I/O处理问题的有效方式转载 2021-08-03 16:20:07 · 674 阅读 · 1 评论 -
本地缓存GuavaCache
在并发量、吞吐量越来越大的情况下往往是离不开缓存的,使用缓存能减轻数据库的压力,临时存储数据。根据不同的场景选择不同的缓存,分布式缓存有Redis,Memcached、Tair、EVCache、Aerospike,本地缓存有Guava Cache、CurrentHashMap、Ehcache。分布式缓存有高可用,高性能,数据集中存储,保证数据一致性,独立部署不受应用程序重启影响。本地缓存与应用程序在同一进程,访问快,没有网络开销。1、简介GuavaCache是Google提供的一套Java工具包,是转载 2021-08-03 15:30:59 · 169 阅读 · 0 评论 -
1分钟插入10亿行数据!抛弃Python,写脚本请使用Rust
【新智元导读】近日,一位程序员急需在一分钟之内生成十亿行的测试数据库,然而在用Python写了脚本之后发现「大失败」。怎么办?当然是用Rust了!最近,一位程序员表示自己急需一个「也就」十亿行数据的测试数据库,并且还得在一分钟之内生成。于是,他做了一个所有程序员都会做的事:写一个Python脚本来生成数据库。然而,很不幸的是,这个脚本非 常 慢。于是,他又做了一个所有程序员都会做的事:进一步学习关于SQLite、Python以及不知道为什么还有Rust的知识。项目转载 2021-08-03 15:29:55 · 153 阅读 · 0 评论 -
算法有救了!GitHub上神仙项目手把手带你刷算法
算法有救了!!!前不久在 GitHub 出现了一个手把手带你刷 算法的项目:fucking-algorithm。该项目此前在 GitHub 开源后,连续多次霸榜 GitHub Trending 首页,用了一周Star数便突破 110k,受欢迎程度由此可见一斑:仓库作者 labuladong 最先提出「刷题要掌握模板和套路」的观点,刷题就是应对面试拿 offer,再也别整什么《算法导论》这种花里胡哨的了。还在为动态规划的一系列问题发愁吗?书中给动态规划总结出了一套框架模板,还有整整一个章节转载 2021-08-02 10:55:34 · 314 阅读 · 0 评论 -
分布式定时任务框架选型
我们先思考下面几个业务场景的解决方案:支付系统每天凌晨1点跑批,进行一天清算,每月1号进行上个月清算 电商整点抢购,商品价格8点整开始优惠 12306购票系统,超过30分钟没有成功支付订单的,进行回收处理 商品成功发货后,需要向客户发送短信提醒类似的业务场景非常多,我们怎么解决?为什么我们需要定时任务很多业务场景需要我们某一特定的时刻去做某件任务,定时任务解决的就是这种业务场景。一般来说,系统可以使用消息传递代替部分定时任务,两者有很多相似之处,可以相互替换场景。如,上面发货成功发短转载 2021-08-02 10:53:16 · 116 阅读 · 0 评论 -
何为幂等?如何设计?
目录前言 罪魁祸首 幂等性 幂等场景 token机制 token机制缺点 乐观锁机制 乐观锁机制缺点 唯一主键机制 去重表机制 总结前言小伙伴们有没有遇到过生产环境经常出现过重复的数据?在排查问题的时候,数据又是正常的。这个是何解呢?怎么会出现这种情况,而且还很难排查问题。今天老顾给大家分享一下这里的原因,以及解决方案。罪魁祸首产生重复数据或数据不一致(假定程序业务代码没问题),绝大部分就是发生了重复的请求,重复请求是指同一个请求因为某些原因被多次提交。导致这个情况会有转载 2021-08-02 10:51:08 · 179 阅读 · 0 评论 -
微服务架构实战:使用Jenkins实现自动化构建
使用Jenkins实现自动化构建一个大型平台的微服务架构设计通常会产生很多项目工程,因此会有很多服务和应用需要部署,并且需要不断地迭代和更新,这是一个庞大的工程,所以我们需要借助自动化工具,实现各个微服务工程的CICD工作流程。CICD是持续集成(Continuous Integration)和持续部署(Continuous Deployment)的总称,是指通过自动化的构建、测试和部署,实现软件产品可循环使用的快速交付流程。Jenkins是一个基于Java开发的功能强大的自动化构建工具,并且有转载 2021-07-30 15:04:51 · 318 阅读 · 0 评论 -
Docker+Jenkins+Nginx+SpringBoot自动化部署项目
Docker通过linux的namespace实现资源隔离、cgroups实现资源控制,通过写时复制机制(copy-on-write)实现了高效的文件操作,在实际开发中可用于提供一次性的环境、微服务架构的搭建、统一环境的部署。前言虽然Docker已经是风靡全球的容器技术了,统一环境避免环境问题上是Docker的主要吸引点之一,但使用时详细还是会遇到不少问题的,比如个人搭建时曾思考过这些问题:Jenkins官网既然有Docker上安装Jenkins的流程了,那我该怎么使用Jenkins.转载 2021-07-26 11:41:36 · 189 阅读 · 0 评论 -
分页插件PageHelper的使用及优化
介绍PageHelper是mybatis框架上的一款分页插件。通过它友好的api设计,可省去写count,分页sql嵌套的繁琐工作。同时插件内部兼容不同数据库间(mysql、Oracle等)的分页实现。开发者只需关注具体业务sql,其他的统计封装交给PageHelper插件动态处理。作为java后端开发者,这是一款必不可少的基础组件,大大减少了手动写分页列表查询的工作量。官方开源地址:GitHub -pagehelper/Mybatis-PageHelper: Mybatis通用分页插件转载 2021-07-21 11:44:58 · 6934 阅读 · 0 评论