Redis基础—了解Redis是如何做数据持久化的

之前的文章介绍了Redis的简单数据结构的相关使用和底层原理,这篇文章我们就来聊一下Redis应该如何保证高可用。 数据持久化 我们知道虽然单机的Redis虽然性能十分的出色, 单机能够扛住10w的QPS,这是得益于其基于内存的快速读写操作,那如果某个时间Redis突然挂了怎么办?我们需要一种持久化 ... »

Redis基础——剖析基础数据结构及其用法

这是一个系列的文章,打算把Redis的基础数据结构、高级数据结构、持久化的方式以及高可用的方式都讲一遍,公众号会比其他的平台提前更新,感兴趣的可以提前关注,「SH的全栈笔记」,下面开始正文。 如果你是一个有经验的后端或者服务器开发,那么一定听说过Redis,其全称叫Remote Dictionary ... »

简单了解InnoDB底层原理

存储引擎 很多文章都是直接开始介绍有哪些存储引擎,并没有去介绍存储引擎本身。那么究竟什么是存储引擎?不知道大家有没有想过,MySQL是如何存储我们丢进去的数据的? 其实存储引擎也很简单,我认为就是一种存储解决方案,实现了新增数据、更新数据和建立索引等等功能。 有哪些已有的存储引擎可以让我们选择呢? ... »

深入了解ConcurrentHashMap

在上一篇文章【简单了解系列】从基础的使用来深挖HashMap里,我从最基础的使用中介绍了HashMap,大致是JDK1.7和1.8中底层实现的变化,和介绍了为什么在多线程下可能会造成死循环,扩容机智是什么样的。感兴趣的可以先看看。 我们知道,HashMap是非线程安全的容器,那么为什么Concurr ... »

【简单了解系列】从基础的使用来深挖HashMap

恢复内容开始 HashMap定义 说的专业一点,HashMap是常用的用于存储key value键值对数据的一个集合,底层是基于对Map的接口实现。每一个键值对又叫Entry,这些Entry分散的存储在一个由数组和链表组成的集合中。当然在Java8中,Entry变成了Node。 说的通俗一点,就像你 ... »

【硬核教程】只需1秒—你也可以有自己的API文档

Nothing is true. Everything is permitted. 写在前面 先聊聊为什么想到了要用Vuepress来代替原来写在Confluence上的文档。 大意是有个需要其他部门接入的项目,这个项目有个用md写的接入文档,其他部门的人需要看着这个文档才知道怎么接以及哪些东西需要 ... »

简单了解一下K8S,并搭建自己的集群

距离上次更新已经有一个月了,主要是最近工作上的变动有点频繁,现在才暂时稳定下来。这篇博客的本意是带大家从零开始搭建K8S集群的。但是我后面一想,如果是我看了这篇文章,会收获什么?就是跟着步骤一步一走吗?是我的话我会选择拒绝,所以我加了关于K8S的简单介绍,每一步的步骤都添加了解释。由于篇幅和时间原因 ... »

两分钟让你明白Go中如何继承

最近在重构代码的时候,抽象了大量的接口。也使用这些抽象的接口做了很多伪继承的操作,极大的减少了代码冗余,同时也增加了代码的可读性。 然后随便搜了一下关于Go继承的文章,发现有的文章的代码量过多,并且代码format极其粗糙,命名极其随意,类似于A、B这种,让人看着看着就忘了到底是谁继承谁,我又要回去 ... »

你知道和你不知道的选择排序

1. 什么是选择排序? 首先贴上从wiki上弄下来的关于选择排序的定义。 选择排序 (Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。 ... »

你知道和你不知道的冒泡排序

这篇文章包含了你一定知道的,和你不一定知道的冒泡排序。 gif看不了可以点击【 "原文" 】查看gif。 1. 什么是冒泡排序 可能对于大多数的人来说比如我,接触的第一个算法就是冒泡排序。 我看过的很多的文章都把冒泡排序描述成我们喝的汽水,底部不停的有二氧化碳的气泡往上冒,还有描述成鱼吐泡泡,都特别 ... »

聊聊微服务集群当中的自动化工具

本篇博客主要介绍了自动化工具这个概念,在微服务集群当中的作用,算抛砖引玉,欢迎大家提出自己的见解。 写在前面 在了解自动化工具的概念之前,我们先了解一下微服务和集群的概念。 什么是微服务 这个概念其实有些广泛,而我的知识广度也有限,我会尽量用通俗的语言来描述什么是微服务,什么是集群,以及为什么我们需 ... »

go源码解析-Println的故事

本文主要通过平常常用的go的一个函数,深入源码,了解其底层到底是如何实现的。 Println Println函数接受参数a,其类型为…interface{}。用过Java的对这个应该比较熟悉,Java中也有…的用法。其作用是传入可变的参数,而interface{}类似于Java中的Object,代表 ... »

小强开饭店-从单体应用到微服务

本篇博客通过小强开饭店的通俗易懂的故事,带你了解后端服务是如果从单体应用演变到微服务的。如果有说的不对的地方,欢迎各位大佬强势怼。 小强开饭店 有一天,小强为了早日奔赴小康生活,打算开一个饭店来帮他快速的实现这个目标。 饭店开业了 于是他盘下了一个店面,一顿装修之后,雇了一个厨师,便开业了。 饭店生 ... »

用go-module作为包管理器搭建go的web服务器

本篇博客主要介绍了如何从零开始,使用Go Module作为依赖管理,基于Gin来一步一步搭建Go的Web服务器。并使用Endless来使服务器平滑重启,使用Swagger来自动生成Api文档。 源码在此处: "项目源码" 大家可以先查看源码,然后再根据本篇文章,来了解搭建过程中服务器的一些细节。 搭 ... »

是时候拥有一个你自己的命令行工具了

本篇博客主要介绍了如何使用commander, inquirer以及chalk从零开始,创建属于自己的命令行工具。 0. 一分钟体验 首先我们先花一分钟的时间,体验一下创建自己的命令行cli工具是什么感觉。 0.1. 新建项目目录 假如我们的项目名称叫 ,使用如下命令新建项目目录。 0.2. 初始化 ... »

如何在SpringBoot中集成JWT(JSON Web Token)鉴权

这篇博客主要是简单介绍了一下什么是JWT,以及如何在Spring Boot项目中使用JWT(JSON Web Token)。 1.关于JWT 1.1 什么是JWT 老生常谈的开头,我们要用这样一种工具,首先得知道以下几个问题。 这个工具是什么,这个工具解决了什么问题 是否适用于当前我们所处得业务场景 ... »

想在Java中实现Excel和Csv的导出吗?看这就对了

前言 最近在项目中遇到一个需求,需要后端提供一个下载Csv和Excel表格的接口。这个接口接收前端的查询参数,针对这些参数对数据库做查询操作。将查询到的结果生成Excel和Csv文件,再以字节流的形式返回给前端。 前端拿到这个流文件之后,最开始用ajax来接收,但是前端发送的请求却被浏览器cance ... »

什么?你竟然还没有用这几个chrome插件?

前言 其实18年之前写过一篇关于chrome插件的文章,里面安利了4个chrome插件。鉴于这已经是9102年了,之前觉得好用的chrome插件跟新了解到的比起来,还是差了那么点味道。所以决定再更新一波,顺便补上之前漏掉的几个插件。 运用有效的有用的插件,会让我们的工作在一个相对舒适的状态,工作起来 ... »