自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

阿昊的博客

在路上记录历程

  • 博客(124)
  • 资源 (2)
  • 收藏
  • 关注

原创 关系型数据库的范式 -- 六大范式

关系型数据库的范式 范式是关系型数据库的设计标准,范式分别有第一范式,第二范式,第三范式,BCNF范式(是在第三范式的补充和修订),第四范式和第五范式,第一范式 数据库表中的字段都是单一属性的,不可再分。这个单一属性可以是数据库中任何一种基本数据类型。如整型,字符型,日期型等。只要是关系型数据库都会满足第一范式。例如:一个产品信息表,描述产品信息的字段有产品编号,产品名称,产品数量,产品价格,产品描述。 字段名 数据类型 ...

2020-08-06 10:25:33 263

原创 python3 TypeError: 'type' object is not subscriptable

原本以为是类型错误,后来仔细一看,才知道是列表名称写错了。汗,改为list1[2],就好了list1 = ['Google', 'Runoob', 1997, 2000];list2 = [1, 2, 3, 4, 5 ];list3 = ["a", "b", "c", "d"];print ("第三个元素为 : ", list[2]);list[2] = 2001;...

2018-09-04 10:17:42 45016

原创 MySQL触发器中通过SELECT语句给局部变量赋值

一条赋值变量引发的巨坑,自己备注一下,浪费了不少时间这边关键字,我都用了大写,方便观看CREATE TRIGGER num_in AFTER INSERT ON user_tFOR EACH ROW BEGIN//变量的声明DECLARE num INT(11);//赋值SET num = (SELECT COUNT(id) FROM user_t);UPDATE co...

2018-04-19 17:58:52 10966 1

原创 (五)redis的持久化RDB、fork、copyonwrite、AOF、RDB&AOF混合使用

缓存的意义?缓存:数据可丢失数据库:数据绝对不能丢缓存追求的是速度,内存掉电易失存储层:1,快照/副本 : 时点性的一个数据整体2,日志 :是操作指令的历史记录单机持久化主从复制一,基础只是引入1,如果快照从8点写到8点半,怎么解决时点混乱(那么数据的时间是怎么样的?8点?8点半?8-8点半之间?)的问题8点的,使用的是fork()的方式liunx管道1,衔接前一个命令的输出作为后一个命令的输入2,管道会触发创建 【子进程】num=0 # 创建按变量echo $num

2021-05-06 22:26:45 25 2

原创 Controller异常统一处理

使用@ControllerAdvice注解在指定控制器上,@ExceptionHandler可以指定异常的细分类型@ControllerAdvicepublic class BaseController { private static final Logger logger = LoggerFactory.getLogger(BaseController.class); /** * 参数类型转换错误 * * @param exception 错误

2021-04-27 10:29:32 13

原创 (四) redis的消息订阅、pipeline、事务、modules、布隆过滤器、缓存LRU

使用进阶管道多次命令一次发送,通信成本变低linux \r\n windows \n发布订阅监听之后才能收到信息help @pubsub做缓存还是数据库缓存常见问题持久化

2021-04-25 23:41:30 21

原创 HttpURLConnection方式post请求中文乱码

try { URL url = new URL(path); HttpURLConnection connection = (HttpURLConnection)url.openConnection(); connection.setDoInput(true); connection.setDoOutput(true); connection.setUseCaches(false); connection.setRequestMethod("POST"); connection.setRequ

2021-04-22 00:11:09 5

原创 (三)Redis的list、hash、set、sorted_set、skip list

文章目录list**list命令**listlist命令help @listBLPOP key [key ...] timeout #删除并获取列表中的第一个元素,或阻止直到一个元素可用BRPOP key [key ...] timeout #删除并获取列表中的最后一个元素,或阻止直到一个元素可用BRPOPLPUSH source destination timeout #从一个列表中弹出一个值,将其推送到另一个列表并返回;或者阻止,直到一个列表可用为止LINDE

2021-04-07 22:47:48 15

原创 docker中安装Mkdocs

前言root@localhost ~]#linux发行版本CentOS7uname -srmLinux 3.10.0-693.el7.x86_64 x86_64docker -vDocker version 18.06.3-ce, build d7080c1一,搜索并拉取镜像文件大概100多Mdocker search mkdocsdocker pull squidfunk/mkdocs-material二,生成项目目录docker run -it

2021-04-07 14:58:43 17

原创 被拒绝,是成长的开始

我是什么时候开始有代码洁癖的?好像忘记了,恍惚之间好像开始是第一份工作时,项目经理说的:你代码格式这么差,我都懒得看,调整好在找我问。第二次是一次面试的时候,给面试官看了自己以前写的项目,时间紧任务重,很多时候都加班,通宵,那时候真是觉得自己成长的很快,但好多东西那时候并不重视。当面试官看了我的uils包内的工具类,冷冷的说了一句:你这个excle导出工具类3个?回去等通知吧我知道要凉,也就继续开始找工作,那段时间我把压箱底的《JAVA编程思想》看完,有了基础的代码格式和基础。以至于后来,做完功能

2021-04-01 11:39:25 31 1

原创 (二)redis的String类型 Bitmaps

分区redis进程中有16个的分区,分区之间是隔离的。#直接去8号库redis-cli -p 6379 -n 8help 提示String查看当前分区所有创建的keykeys *set k1 111 nx 不存的时候去设置(只能新增:分布式锁)set k1 111 xx 存的的时候去设置(只能更新)append k1 "sdas" 追加到末尾getrange k1 2 3 按下标获取值setrange k1 2 "s

2021-03-31 21:59:05 3

原创 (一)redis 介绍及NIO原理介绍

前言常识:维度磁盘带宽寻址msG/M带宽ns很大秒 > 毫秒 > 微妙 > 纳秒 磁盘比内存上的寻址满了10W倍关系型数据库建表:必须给出schema类型:字节宽度存储:倾向于行级存储例:10个宽度,只存了一个指,其他位置也要占位,增删改不用移动位置,直接覆盖即可。数据库的B+T在内存中,数据在磁盘索引是什么?举个栗子:评价一个外卖小哥的投递速度,在交通工具相同的前提下,怎么在一个小区内找到对应人?在不清楚楼号位置,楼层标记的

2021-03-31 13:58:39 32 2

原创 redis安装成服务

安装根据README.md介绍安装tar xf redis-5.0.7.tar.gzcd redis-5.0.7/make #如果make报错 yum install gcc make disrcleanmake install PREFIX=/opt/redis5vi /etc/profile export REDIS_HOME=/opt/redis5 export PATH=$PATH:$REDIS_HOME/binsource /et

2021-03-31 13:57:36 7

原创 service redis_6379 start /var/run/redis_6379.pid exists, process is already running or crashed

service redis_6379 start redis 启动报错[root@localhost ~]# service redis_6379 statusRedis is not running[root@localhost ~]# service redis_6379 start/var/run/redis_6379.pid exists, process is already running or crashed[root@localhost ~]# rm -rf /var/run/

2021-03-29 09:34:13 6

原创 MYSQL索引优化

一,索引的优点1,大大减少了服务器需要扫描的数据量2,帮助服务器避免排序和临时表3,将随机IO编程顺序IO二,索引的用处1,快速查找匹配WHERE子句的行;2,从consideration中消除行,可以在多个索引之间进行选择,mysql通常会使用找到最少行的索引;3,如果表具有多列索引,则优化器可以使用索引的任何左前缀来查找行;4,当表连接时,从其他表检索行数据;5,查找特定索引列的min或max值;6,如果排序或分组时可用索引的最左前缀上完成的,则对表进..

2021-03-26 08:39:22 6

原创 cargo常用命令

cargo run ,启动项目cargocargo build --release 发布cargo build,Cargo 将获取新的依赖项及其所有依赖项,将它们全部编译,然后更新Cargo.lock:将 crate 发布到 Crates.iocargo doc --open 会构建当前 crate 文档(同时还有所有 crate 依赖的文档)的 HTML 并在浏览器中打开。登录 Crates.iocargo login tokentoken 需要登陆之后,查看位于 crates.io/

2021-03-26 08:38:20 45

原创 (四)高并发负载均衡:基于keepalived的LVS高可用搭建

4层和7层的区别要分清哪些程序是应用层的,哪些程序是内核的。LVS四层负载均衡服务器,是不会碰握手这一个步骤的。Nginx是基于反向代理(七层)的负载均衡服务器,要先握手建立连接,才能取到URI,在判定location是否匹配,然后才将URI传递给后面的服务器。server返回数据时,是需要过Nginx服务器的,而使用LVS的时候不会过LVS服务器。四层负载均衡nginx 基于反向代理的负载均衡比LVS多了一次三次握手的连接。单台四层负载均会出现的问题1、如果你的LVS负载均衡服务器挂

2021-03-24 23:37:36 27

原创 (三)高并发负载均衡:LVS的DR模型试验搭建

LVSLVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。早期的小型运营商使用的LVS:使每个小区的用户平均分配在三个server服务器上,减少单台server的并发量。实现DR需要隐藏VIP一切皆文件:把程序或内核映射成文件,修改文件,相当于修改程序的变量,即时生效。一块网卡可以配置多个IP地址。隐藏VIP方法:对外隐藏,对内可见 :kernel parameter:目标mac地址为全F,交换机触发广播/proc/sys/ne

2021-03-22 23:10:54 32

原创 mysql innodb 日志与事物

redolog 前滚日志undolog 回滚日志在操作任何数据之前,首先将数据备份到一个地方(undo log)。然后进行数据的修改,如果出现了错误或者用户执行了rollback语句,系统可以利用undo log中的额备份将数据恢复到事务开始之前的状态。binlog是mysql service,不是innodb独有的。...

2021-03-22 16:21:13 10

原创 (二)高并发负载均衡:LVS的DR,TUN,NAT模型推导

目录24 高并发负载均衡:网络协议原理25 高并发负载均衡:LVS的DR,TUN,NAT模型推导26 高并发负载均衡:LVS的DR模型试验搭建28 高并发负载均衡:基于keepalived的LVS高可用搭建43 redis 介绍及NIO原理介绍44 redis的string类型&bitmap45 redis的list、set、hash、sorted_set、skiplist48 redis的消息订阅、pipeline、事务、modules、布隆过滤器、缓存LRU49 redis的持

2021-03-16 23:41:30 36

原创 (一)从网络到分布式(集群内高并发)

目录24 高并发负载均衡:网络协议原理25 高并发负载均衡:LVS的DR,TUN,NAT模型推导26 高并发负载均衡:LVS的DR模型试验搭建 地址28 高并发负载均衡:基于keepalived的LVS高可用搭建 地址redis资料43 redis 介绍及NIO原理介绍 地址44 redis的string类型&bitmap 地址45 redis的list、set、hash、sorted_set、skiplist 地址48 redis的消息订阅、pipeline、事务、modules

2021-03-16 00:36:40 57

原创 多线程高并发

一,基础(一)创建方式1,实现 Runable2,使用 Thread3,线程池创建 Executorse.newCachedThreadPool()其实哪有那么多创建方式,本质上都是实现了Runable 接口。(二)线程方法 只列出大部分使用的方法,并未代表所有线程方法,后续会添加实际的例子,以供参考。1,sleep 睡眠 : 当前线程暂停一段时间,让给别的线程2,yield 让出一下:返回就绪状态,进入等待队列3,join 保证线程顺序 : 在自己线程

2021-03-10 15:31:32 12

原创 thread ‘main‘ panicked at ‘called `Result::unwrap()` on an `Err` value: Os { code: 2, kind: NotFound

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Os { code: 2, kind: NotFound, message: "系统找不到指定的文件。" }', src\main.rs:31:55note: run with `RUST_BACKTRACE=1` environment variable to display a backtraceerror: process didn't exit succ

2021-03-08 14:33:08 241

原创 快速排序

一,快速排序快速排序算法首先会在序列中随机选择一个基准值(pivot),然后将除了基准值以外的数分为“比基准值小的数”和“比基准值大的数”这两个类别,再将其排列成以下形式。[ 比基准值小的数 ] 基准值 [ 比基准值大的数 ]接着,对两个“[ ]”中的数据进行排序之后,整体的排序便完成了。对“[ ]”里面的数据进行排序时同样也会使用快速排序。二,代码实现1,javapackage test1;import java.util.Random;import java.util.

2021-03-04 17:27:42 8 1

原创 rust 实现插入排序

一,插入排序 插入排序是一种从序列左端开始依次对数据进行排序的算法。在排序过程中,左侧的数据陆续归位,而右侧留下的就是还未被排序的数据。 插入排序的思路就是从右侧的未排序区域内取出一个数据,然后将它插入到已排序区域内合适的位置上。二,代码实现///插入排序///插入排序是一种从序列左端开始依次对数据进行排序的算法。在排序过程中,左侧的数据陆续归位,而右侧留下的就是还未被排序的数据。///插入排序的思路就是从右侧的未排序区域内取出一个数据,然后将它插...

2021-03-01 15:27:27 23

原创 rust 实现选择排序

一,选择排序 选择排序就是重复“从待排序的数据中寻找最小值,将其与序列最左边的数字进行交换”。这一操作的算法。在序列中寻找最小值时使用的是线性查找。二,代码实现fn select_sort<T: PartialOrd + Copy>(list: &mut Vec<T>) -> &Vec<T> { for i in 0..list.len() { let mut element = list[i];

2021-03-01 15:21:17 24

原创 rust 实现冒泡排序

一,冒泡排序 冒泡排序就是重复“从序列右边开始比较相邻两个数字的大小,再根据结果交换两个数字的位置”这一操作的算法。在这个过程中,数字会像泡泡一样,慢慢从右往左“浮”到序列的顶端,二,代码实现 添加了泛型fn main() { let mut list = vec![1, 34, 50, 200, 34, 51, 25, 100, 65]; bubble_sort(&mut list); println!("{:?} ", ...

2021-03-01 11:11:40 100

原创 rust HashMap

一,简介 HashMap 是最不常用的,所以并没有被 prelude 自动引用。标准库中对 HashMap 的支持也相对较少,例如,并没有内建的构建宏所有的键必须是相同类型,值也必须都是相同类型。 key ,value不允许有 None 。二,常见操作 3中声明方式,HashMap的所有权,循环HashMap,增删改查use std::collections::HashMap;fn main() { //1,new 创建一个空的 Hash...

2021-02-26 15:23:04 46

原创 rust 输出读取文件

一,输出道得经到D盘use std::fs::File;use std::io::{ Error, Write};fn main() -> Result<(), Error> { let path = "D:/道德经.txt"; let vec = vec![ "第一章", "道可道也,非恒道也。", "名可名也,非恒名也。", "无名,万物之始也;有名,万物之母也。", "故.

2021-02-25 14:14:15 64

原创 rust Vec 常用操作

Vec的一些常用操作: 声明,增删改查,判空,排序,比较,并集,搜索fn main() { let mut vec2: Vec<i32> = Vec::new(); println!(" 声明一个空Vec {:?} , 长度 {} ", vec2, vec2.len()); let mut vec3 = [1].repeat(5); println!(" 声明一个重复元素的Vec: {:?}", vec3); let mut v...

2021-02-25 10:16:42 411

原创 Spring Boot 是什么 不是什么 (读书摘抄)

Spring Boot将很多魔法带入了Spring应用程序的开发之中,其中最重要的是以下四个核心。自动配置消除了传统Spring应用程序里的很多样板配置;Spring Boot起步依赖让你能通过库所提供的功能而非名称与版本号来指定构建依赖;Spring Boot CLI将Spring Boot的无阻碍开发模型提升到了一个崭新的高度,在命令行里就能简单快速地用Groovy进行开发;Actuator让你能深入运行中的应用程序,了解Spring Boot做了什么,是怎么做的。Spring Boot 不是

2021-02-24 08:59:22 48

原创 springboot 覆盖起步依赖引入的传递依赖(读书摘抄)

说到底,起步依赖和你项目里的其他依赖没什么区别。也就是说,你可以通过构建工具中的 功能,选择性地覆盖它们引入的传递依赖的版本号,排除传递依赖,当然还可以为那些Spring Boot 起步依赖没有涵盖的库指定依赖。 以Spring Boot的Web起步依赖为例,它传递依赖了Jackson JSON库。如果你正在构建一个生 产或消费JSON资源表述的REST服务,那它会很有用。但是,要构建传统的面向人类用户的Web 应用程序,你可能用不上Jackson。虽然把它加进来也不会有什么坏处,...

2021-02-23 15:03:37 61 4

原创 rust 欧几里得算法实现

介绍 欧几里得算法(又称辗转相除法)用于计算两个数的最大公约数,被称为世界上最古老的 算法。现在人们已无法确定该算法具体的提出时间,但其最早被发现记载于公元前 300 年欧几 里得的著作中,因此得以命名。思路 首先用较小的数字去除较大的数字,求出余 数。也就是对两个数字进行取余运算,A %B 就是算出A除以B后的余数C。1112 %695 = 417 //首先1112 除695​​​​​​​,除完后的余数...

2021-02-22 15:24:51 12

原创 struct 实现增删改查初始化

一,前言如何给rust的struct写添加和修改的方法?起因是因为自己为了做测试写了一篇求助帖,然后最后自己结贴,结贴的实现原理来源于对可变性的理解加深。(顺便吐槽下,现在CSDN还没有针对Rust的代码段格式)可变性是一个不是借用(&mut)就是绑定的属性(&mut)。这意味着,你不能拥有一个一些字段可变而一些字段不可变的struct[结构体]然而,通过使用Cell<T>,你可以模拟字段级别的可变性:struct Ent1{ gl:i32,.

2021-02-09 11:19:52 30 1

原创 rust 所有权,借用,生命周期

一,前言 三个概念,一直在阶段性的困扰我,感觉还是尝试自己说一下,再加点案例,能够把这些讲清楚后,会有一个清晰的认识吧。二,所有权 Rust 注重安全和速度。它通过很多零开销抽象(zero-cost abstractions)来实现这些目标,也就是说在 Rust 中,实现抽象的开销尽可能的小。所有权系统是一个典型的零开销抽象的例子。所有权规则Rust中的每个值都有一个变量,称为其所有者。 一次只能有一个所有者。 当所有者超出范围时,该...

2021-02-08 20:39:55 46

原创 rust - Windows 编译执行

一,新建文件新建一个main.txt 的文件,写一个Hello, world! ,然后把文件后缀改为 rsfn main() { println!("Hello, world!");}二,编译文件打开cmd命令窗口,编译main.rs文件文件夹的内如如下:多个main.exe执行文件和main.pdb三,执行文件执行文件main.exe...

2021-02-03 23:21:29 58

原创 rust - len 和capacity 区别

前言 len 和capacity 都是获取字符对象长度,那么两者有什么本质区别呢?废话不说,上代码测试。代码测试fn len_f(){ let mut story = String::new(); let mut len = story.len(); let mut capacity = story.capacity(); println!("{},{}", capacity , len ); for _ in 0..5 { ...

2021-01-27 11:13:52 45

原创 rust 字符串的操作 -11

一,前言 不管在什么语言中,对字符串的处理都是必须且重要的,rust中的字符串数据类型关键字是String。(一)Rust将字符串分类 Rust将字符串分为两种: 1) &str :固定长度字符串(也称字符串字面量) 2) String ...

2021-01-27 10:39:23 187

原创 rust 函数 和 闭包 -10

一,函数的声明格式 &mut 修饰符在变量名前,函数定义时形式参数必须声明类型,这是出于安全的考虑,这样就不需要再进行推断了。 fn fn_name( [&mut]变量名 : 变量类型 [,...]) -> 返回类型{ // code_block return 返回参数; [返回参数] //两种不同的返回方式 }二,用函数实现两数交换值fn main() { let mut num1 = 1; let ...

2021-01-26 14:01:48 26

原创 rust 所有权 -9

所有权规则首先,让我们看一下所有权规则。在通过示例进行说明时,请牢记以下规则:Rust中的每个值都有一个变量,称为其所有者。 一次只能有一个所有者。 当所有者超出范围时,该值将被删除。大概思路就是两个水杯A,B和一杯水,A中的水倒入B,水的所有权就是B,A失去了水的所有权,这时你想从A杯里喝水,显然是不可能的了。如果这个场景结束了呢(方法执行结束)按照以往语言的经验,例如JAVA/py/go,被GC清理,C/C++需要编程人员手动处理而Rust不用手动处理和GC清理,编译器处.

2021-01-25 22:20:43 17

生成支付宝二维码工具类

生成支付宝二维码

2021-03-24

生成HTML模版工具类

生成HTML模版

2021-03-24

空空如也

空空如也

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

TA关注的人 TA的粉丝

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