互联网分布式注册中心Zookeeper介绍
¶一、简介
¶1、概述
Zookeeper 是一个开源的分布式的,为分布式框架提供协调服务的 Apache 项目。
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
¶2、工作机制
Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。
¶3、特点
Zookeeper:一个领导者(Leader),多个跟随者(Follower)组成的集群。
集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。所 以Zookeeper适合安装奇数台服务器。
全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。
更新请求顺序执行,来自 ...
Mybatis加强版MyBatis-Plus使用、为简化开发而生
¶一、简介
¶1、概述
MP官网!
MyBatis-Plus(简称 MP),是一个 MyBatis 的增强工具包,只做增强不做改变. 为简化开发工作、提高生产率而生
我们的愿景是成为 Mybatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。
¶2、特点
无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
支持自定义全局通用操作:支持全局通用方法 ...
轻量应用容器框架、开源软件部署解决方案之Docker从入门到精通
¶一、Docker概述
¶1、Docker是什么
Docker 是一个开源的应用容器引擎,基于 Go 语言并遵从 Apache2.0 协议开源;
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化;
容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低;
Docker 从 17.03 版本之后分为 CE(Community Edition-社区版)和 EE(Enterprise Edition-企业版)。
Docker是一个Client-Server结构的系统,以守护进程运行在主机上。通过Socket从客户端进行访问。
Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上
¶2、Docker应用场景
Web应用的自动化打包和发布,自动化测试和持续集成、发布;
在服务型环境中部署和调整数据库或其他的后台应用;
从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 ...
反向代理、负载均衡服务器Nginx入门到精通
¶一、Nginx简介
¶1、背景介绍
Nginx(“engine x”)一个具有高性能的【HTTP】和【反向代理】的【WEB服务器】,同时也是一个【POP3/SMTP/IMAP代理服务器】,是由伊戈尔·赛索耶夫(俄罗斯人)使用C语言编写的,Nginx的第一个版本是2004年10月4号发布的0.1.0版本。另外值得一提的是伊戈尔·赛索耶夫将Nginx的源码进行了开源,这也为Nginx的发展提供了良好的保障。
¶2、名词解释
¶WEB服务器
WEB服务器也叫网页服务器,英文名叫Web Server,主要功能是为用户提供网上信息浏览服务。
¶HTTP
HTTP是超文本传输协议的缩写,是用于从WEB服务器传输超文本到本地浏览器的传输协议,也是互联网上应用最为广泛的一种网络协议。HTTP是一个客户端和服务器端请求和应答的标准,客户端是终端用户,服务端是网站,通过使用Web浏览器、网络爬虫或者其他工具,客户端发起一个到服务器上指定端口的HTTP请求。
¶POP3/SMTP/IMAP
POP3(Post Offic Protocol 3)邮局协议的第三个版本,
SMTP(Simple Mail Tr ...
MySQL数据库索引、索引失效、B树、B+树、聚簇索引、非聚簇索引
¶一、索引数据结构介绍
tips:旧金山大学官网有可视化数据结构供我们使用!
都以插入1-10这10个数字为例!
¶1、哈希索引
可视化哈希索引,https://www.cs.usfca.edu/~galles/visualization/ClosedHash.html
可以发现查找可以直接找到,因为是计算了哈希值,可以直接找到!效率非常高!
但是,为什么MySQL没有使用这种数据结构了?
哈希值是无序的,不能进行范围查找
不能进行排序
哈希冲突,比对,可能发生全表扫描
¶2、平衡二叉树
可视化平衡二叉树,https://www.cs.usfca.edu/~galles/visualization/AVLtree.html
查找10的过程: 也仅仅比了四次!
缺点:
随着数据量的增大,树的高度也会增加,查找速度会越来越慢
还有一个致命缺点,若查找大于5的范围,他将会先找到5再进行回旋查找大于5的数,若大于5的数非常多,将会导致非常的慢
¶3、B树
可视化B树,https://www.cs.usfca.edu/~galles/visualization/BTr ...
MySQL数据库高级-MySQL数据库优化
基于centos7及mysql-5.7.35,5.7.35为目前最新5.x版本!
¶一、Linux安装MySQL及相关配置
¶1、安装
安装步骤参考我之前的博客,Linux安装MySQL5.7!
关于Linux下的三种安装包介绍:
rpm package:是某个特定的包,比如server,client,shared lib等。(可以单独安装 )
rpm bundle:是该版本所有包的集合。(一般是把服务器端要用的都安装上,其他的不带,尤其是开发包 )
Compressed TAR Archive:是源码,必须用源码方式安装。(这个是源码,需要自己编译的,也有编译好,但不是安装包的)
下载地址:
1wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.35-1.el7.x86_64.rpm-bundle.tar
查看MySQL用户和组信息:
/etc/passwd 文件:记录用户的各种信息。每行含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录 Shell
/etc/group 文件:组(g ...
Redis从入门到入土及几大面试常问问题
¶一、NoSQL数据库简介
¶1、引入
随着Web2.0的时代的到来,用户访问量大幅度提升,同时产生了大量的用户数据。加上后来的智能移动设备的普及,所有的互联网平台都面临了巨大的性能挑战。
解决CPU及内存压力? — 增加多台服务器,复制进行分散!
解决IO压力? — 增加缓存数据库!
¶2、NoSQL概述
NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库。
NoSQL 不依赖业务逻辑方式存储,而以简单的key-value模式存储。因此大大的增加了数据库的扩展能力。
不遵循SQL标准。
不支持ACID。(并不是不支持事务)
远超于SQL的性能。
¶3、NoSQL使用场景
适用场景:
对数据高并发的读写
海量数据的读写
对数据高可扩展性的
不适用场景
需要事务支持
基于sql的结构化查询存储,处理复杂的关系,需要即席查询。
(用不着sql****的和用了sql也不行的情况,请考虑用NoSql)
¶二、Redis安装及其启动
¶1、Redis概述
Redis是一个开源的key-value存储系统。
和Me ...
Shell编程学习总结
¶一、概述
Shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至是编写一些程序!
¶1、第一个Shell脚本
脚本以#!/bin/bash 开头:指明使用的是Bash Shell
脚本需要有可执行权限
vim hello.sh:
12#!/bin/bashecho "hello,world~"
¶2、Shell脚本执行
方式一:赋予脚本x可执行权限chmod u+x xx.sh,然后直接./xxx.sh执行
方式二:直接使用命令:sh xx.sh执行
¶二、Shell变量
¶1、概述
Linux Shell 中的变量分为,系统变量和用户自定义变量。
系统变量:$HOME、$PWD、$SHELL、$USER 等等,比如: echo $HOME
显示当前 shell 中所有变量:set
¶2、shell 变量的定义
定义变量及撤销变量:
定义变量:变量名=值
撤销变量:unset 变量
声明静态变量:readonly 变量。注意:不能 unset
将命令的返回值赋给变量:
...
Linux使用及JavaEE环境搭建
以Centos7.6为主讲解,后面会有Ubuntu不同之处的单独讲解!
¶一、Linux目录结构
linux 的文件系统是采用层级式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录。
记住一句经典的话:在 Linux 世界里,一切皆文件!
/bin [常用] (/usr/bin 、 /usr/local/bin):是 Binary 的缩写, 这个目录存放着最经常使用的命令
/sbin (/usr/sbin 、 /usr/local/sbin):s 就是 Super User 的意思,这里存放的是系统管理员使用的系统管理程序。
/home [常用]:存放普通用户的,在 Linux 中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名
/root [常用]:该目录为系统管理员,也称作超级权限者的用户主目录
/lib:系统开机所需要最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库
/lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件
/etc ...
常用Git命令及IDEA整合Git、GitHub
好久前学习的Git内容记录,点击这里!
本篇只记录最常用的命令及整合IDEA的步骤!
¶一、常用命令
命令名称
作用
git config --global user.name 用户名
设置用户签名
git config --global user.email 邮箱
设置用户签名
git init
git init 初始化本地库
git status
查看本地库状态
git add
文件名 添加到暂存区
git commit -m “日志信息” 文件名
提交到本地库
git reflog
查看版本信息
git log
查看版本详细信息
git reset --hard 版本号(前七位即可)
版本穿梭
git branch 分支名
创建分支
git branch -v (*代表当前所在的分区)
查看分支
git checkout 分支名
切换分支
git merge 分支名
把指定的分支合并到当前分支上
¶1、设置用户签名
设置完成可以在家目录下的.gitconfig中看到:cat ~/.gitconfig
签名的 ...
每日一题之LeetCode 783.二叉搜索树节点最小距离
¶一、题解
题目大意:
求一个二叉搜索树任意两个节点数的差值的最小值!
思路:
我们知道,二叉搜索树的中序遍历就是一个单调序列!
因此我们可以在中序遍历的同时保存上一个节点的值,然后每次比较相邻两个数的差值即可!
处理相邻的一定是最优的,非相邻节点的差值一定比相邻节点的差值要大!
具体:
只要不是第一个遍历的节点,我们就可保存的上一个节点做一个差值,然后取一个最值即可
要注意,保存上一个节点的一定要在取过最值之后再保存!
时间复杂度: O(n)
空间复杂度: O(h)
¶二、AC代码
参考代码:
12345678910111213141516171819202122232425262728293031/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNod ...
每日一题之AcWing 1453.移掉K位数字
题目链接:AcWing 1453. 移掉K位数字
¶一、题解
题目大意:
给定一个很长的字符串表示的非负整数,去掉 k 位数,使得结果表示的数最小!
思路:
对于一个单调递增的序列,我们发现,若出现后一个数比序列尾的数要小,即发生了逆序,那么我们应该尽可能删掉该序列的末尾比出现的数大的数,这样可以使得结果尽可能的小!
删完后,将当前数加入序列!
当然可以删除的前提是还有次数可以删!
最后处理完毕,若还有删除次数,则此时的单调递增序列,可以直接删掉后面对应个数的数即可!
注意:
为了防止全部删完,我们提前在最前方插入一个0,最终我们将前导0去掉即可!
时间复杂度: O(n)
空间复杂度: O(n)
¶二、AC代码
参考代码:
1234567891011121314151617181920#include <iostream>#include <cstring>#include <algorithm>using namespace std;int main(){ string s; int k; cin >> s >& ...