自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 收藏
  • 关注

原创 nio与零拷贝

零拷贝一、零拷贝原理二、nio零拷贝一、零拷贝原理传统iommap:mmap 通过内存映射,将文件映射到内核缓冲区,同时,用户空间可以共享内核空间的数据。这样,在进行网络传输时,就可以减少内核空间到用户控件的拷贝次数。sendFile:Linux 2.1 版本 提供了 sendFile 函数,其基本原理如下:数据根本不经过用户态,直接从内核缓冲区进入到 Socket Buffer,同时,由于和用户态完全无关,就减少了一次上下文切换零拷贝从操作系统角度,是没有cpu 拷贝sendFile优

2021-03-23 11:51:47 259

原创 MongoDB(三)--mongodb常用函数

一、常用聚合表达式表达式描述实例$sum计算总和。db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])$avg计算平均值db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])$min获取集合中所有文档对应值得最小值。db.myco

2021-03-17 14:30:28 1838

原创 MongoDB(二)--mongodb命令

一、创建数据库use foobar二、创建集合db.createCollection(name, options)三、查找db.persons. find()db.persons. findOne()四、修改db.persons. update({name:"zhaomin"},{ $set:{age:18}}) #不会影响其他属性列 ,主键冲突会报错db.persons. update({name:"zhaomin"},{ $set:{age:18}},true) #第三个参数为true

2021-03-17 10:58:39 717

原创 java线程池

java自定义线程池一、jdk常用线程池二、线程池设计与实现2.1 总体设计2.2 生命周期管理2.3 任务执行机制2.3.1 任务调度2.3.2 任务缓冲2.3.3 任务申请2.4 Worker 线程管理2.4.1 Worker 线程2.4.2 Worker 线程增加2.4.3 Worker 线程回收2.4.4 Worker 线程执行任务三、 线程池参数一、jdk常用线程池Executors.newFixedThreadPool创建固定线程数线程池Executors.newSingleThread

2021-03-02 10:45:45 472

原创 mybatis (四) 运行原理

运行原理简介一、sqlSessionFactory二、sqlSession三、 getMapper四、mybatis查询流程五、总结简介一、sqlSessionFactory二、sqlSession三、 getMapper public <T> T getMapper(Class<T> type, SqlSession sqlSession) { MapperProxyFactory<T> mapperProxyFactory

2021-02-18 09:53:29 149 2

原创 mybatis (三) 二级缓存

二级缓存简介一 、一级缓存二 、二级缓存三、缓存设置四、整合第三方缓存简介一 、一级缓存一级缓存又称本地缓存、是sqlSession级别的缓存,一级缓存是默认一直开启。一级缓存失效情况:sqlSession不同sqlSession相同,查询条件不同sqlSession相同,两次查询之间执行了增删改操作sqlSession相同,清空了一级缓存二 、二级缓存二级缓存又称全局缓存,基于namespace级别的缓存,一个namespace对应一个二级缓存。原理:一个会话,查询一条数据,

2021-02-06 09:02:57 161

原创 mybatis (二)占位符

占位符简介一、#{}二、${}简介mybatis的占位符有两种:#{}、${}。共同点:都可以获取参数列表中的参数不同点:#{}采取预编译的形式将参数设置到sql语句中,可以防止sql注入${}直接将取出的值拼装在了sql中,会出现安全问题一、#{}应用场景:普通的条件参数占位可应用在条件参数上@select("select * from tb_test where id=#{id}")public Test findById(int id);二、${}应用场景:可

2021-02-04 11:28:01 1027

原创 mybatis (一)参数解析

参数解析简介一 、参数解析规则1.1 单个参数1.2 单个引用类型参数1.3 多个简单参数1.4 多个引用类型参数1.5 map类型参数1.6 Collection类型参数二、 参数解析原理三 、总结简介一 、参数解析规则1.1 单个参数 @Select("select * from tb_test where id=#{id}") Employee findOne(Long id);1.2 单个引用类型参数 /** * @param employee

2021-02-04 10:21:52 489

原创 springBoot yml写自定义的配置文件参数没有提示怎么办?

问题在开发中我们经常会写xxxxProperties,在配置文件中配置参数和Properties做映射。经常碰到有Spring Boot Confiquration Annotation Processor not configured这个提示:在application.yml中我们也会遇到springBoot官方的配置带自动提示,而我们自己写的不带。解决加入依赖:<dependency> <groupId>org.springframework.boot&

2021-01-25 09:12:36 2850

原创 redis持久化

redis持久化一 、rdb1.1 rdb是什么1.2 触发rdb1.3 rdb恢复数据1.4 rdb适用场景二、aof2.1 aof简介2.2 aof配置2.3 aof启动/修复/恢复2.4 rewrite一 、rdb1.1 rdb是什么在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到 一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的

2021-01-22 16:11:21 97 1

原创 redis基础命令及部分配置文件

redis概念须知一、 分布式数据库CAP原理二、 redis2.1 redis特性2.2 redis基础命令2.3 redis数据结构2.3.1 String2.3.2 List2.3.3 Set2.3.4 Hash2.3.5 ZSet2.4 redis配置文件一、 分布式数据库CAP原理传统的ACID分别是什么A (Atomicity) 原子性C (Consistency) 一致性I (Isolation) 独立性D (Durability) 持久性关系型数据库遵循ACID规则,事务在英文

2021-01-21 15:29:58 99

原创 mycat分片及分片规则

mycat分片一、垂直拆分1.1 准备工作1.2 插入表二、水平拆分一、垂直拆分按照不同的表(或者Schema)来切分到不同的数据库(主机)之上,这种切分可以称之为数据的垂直(纵向)切分。1.1 准备工作1).准备三个数据库实例,这里我用docker启动了三个容器192.168.1.178:3306192.168.1.178:3307192.168.1.178:33082).准备一个mycat,这里我用的1.61.2 插入表3306节点:CREATE DATABASE IF NOT E

2021-01-19 15:19:11 523

原创 mycat实现mysql主从复制读写分离

mycat实现mysql读写分离一、 一主一从二、 双主双从一、 一主一从1.配置mysql主从复制,参考https://blog.csdn.net/weixin_44032502/article/details/1125279312.修改用户信息,与MySQL区分<user name="mycat"> <property name="password">mycat</property> <property name="schemas">TESTD

2021-01-18 17:12:57 160

原创 mycat配置安装及配置

mycat配置mysql主从复制简介一、 mycat安装启动1.1 docker安装1.2 解压安装二、 mycat配置文件三、 一主一从简介一、 mycat安装启动1.1 docker安装docker脚本已上传github ,地址:https://github.com/itwwj/iot-project/tree/master/docs/docker/mycat1.下载阿里云镜像docker pull registry.cn-hangzhou.aliyuncs.com/ongo360/myca

2021-01-14 13:54:50 521

原创 mysql主从复制

mysql主从复制一、 主从复制原理二、主从配置一、 主从复制原理1.master 将改变记录到二进制日志(binary log)。 这些记录过程叫做二进制日志事件, binary log events;2.slave 将 master 的 binary log events 拷贝到它的中继日志(relay log);3.slave 重做中继日志中的事件, 将改变应用到自己的数据库中。 MySQL 复制是异步的且串行化的二、主从配置1.mysql 版本一致且后台以服务运行2.主从都配置在[m

2021-01-12 18:30:18 118

原创 mysql锁

mysql锁一、 表锁二、 行锁一、 表锁特点:偏向MyISAM存储引擎,开销小,加锁快,无死锁,锁定粒度大,发生锁中突的概率最高,并发最低语法:-- 加表锁lock table 表名 read(write),表名 read(write)....-- 查看表上加过的锁show open tables;-- 释放表锁unlock tables;结论:Myisam在执行查询语句(select)之前,会自动给涉及的所有表加读锁,再增删改操作之前,会给涉及的所有表加写锁。mysql的表级

2021-01-12 11:55:03 66

原创 mysql日志分析

mysql日志分析一、 慢查询日志1.1 开启慢查询日志1.2 日志分析二、SHOW PROFILES三、全局查询日志一、 慢查询日志1.1 开启慢查询日志默认情况下, MySQL 数据库没有开启慢查询日志, 需要我们手动来设置这个参数。当然, 如果不是调优需要的话, 一般不建议启动该参数, 因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件。开启设置:SQL 语句描述备注SHOW VARIABLES LIKE ‘%slow_query_log

2021-01-11 17:34:09 93

原创 mysql索引失效和优化

mysql索引失效和优化一、单表使用索引注意事项一、单表使用索引注意事项尽量全值匹配最佳左前缀法则 过滤条件要使用索引必须按照索引建立时的顺序, 依次满足, 一旦跳过某个字段, 索引后面的字段都无法被使用。不要在索引列上做任何计算索引列上不能有范围查询尽量使用覆盖索引使用不等于(!= 或者<>) 有时会无法使用索引会导致全表扫描字段的is not null 用不到索引 ,is null可以用到索引like 的前后模糊匹配字符串加单引号减少使用 or...

2021-01-09 18:07:39 677

原创 mysql Explain 性能分析

mysql Explain 性能分析一、mysql常见的瓶颈1.1 cpu1.2 io1.3服务器硬件性能二、mysql EXPLAIN2.1 id2.2 select_type2.3 table2.4 type2.5 possible_keys2.6 key2.7 key_len2.8 ref2.9 rows2.10Extra一、mysql常见的瓶颈1.1 cpucpu在饱和的时候一般发生在数据装入内存或从磁盘上读取数据的时候1.2 io磁盘i/o瓶颈发生在装入数据远大于内存容量的时候1.3服

2021-01-08 14:29:51 88

原创 mysql索引

mysql索引简介一、索引分类1.1 单值索引1.2 唯一索引1.3 主键索引1.4 复合索引二、索引创建简介概念:索引(Index) 是帮助 MySQL 高效获取数据的数据结构。 可以得到索引的本质:索引是数据结构。 可以简单理解为 排好序的快速查找数据结构。优点:提高数据检索的效率, 降低数据库的IO成本。通过索引列对数据进行排序, 降低数据排序的成本, 降低了CPU的消耗。缺点:虽然索引大大提高了查询速度, 同时却会降低更新表的速度, 如对表进行INSERT、 UPDATE和DE

2021-01-07 14:38:11 151 1

原创 mysql CentOS安装

mysql CentOS安装一、rpm包安装二、docker安装三、配置四、mysql用户权限4.1 用户管理4.2 用户权限管理一、rpm包安装1.检查当前系统是否安装过 Mysqlrpm -qa|grep mariadb卸载自带的mariadb rpm -e --nodeps mariadb-libs2.下载mysqlwget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm3.安

2021-01-06 14:26:05 139

原创 mysql流程控制

mysql流程控制一、分支结构1.1 if函数1.2 case结构1.3 if结构二、循环结构2.1 while2.2 loop2.3 repeat一、分支结构1.1 if函数语法: if(条件,值1,值2)功能: 实现双分支应用: begin end中或外面1.2 case结构语法:1.case 变量或表达式when 值1 then 语句1;when 值2 then 语句2;…else 语句n;end2.casewhen 条件1 then 语句1;when 条件2 then

2021-01-05 17:51:29 109

原创 mysql存储过程和函数

mysql存储过程简介一、变量1.1 系统变量1.1.1 全局变量1.1.2 局部变量1.2 自定义变量1.2.1 用户变量1.2.2 局部变量二、存储过程2.1 创建2.2 调用2.3 删除2.4 查看三、函数3.1 创建3.2 调用3.3 查看3.4 删除简介存储过程和函数:类似于java中的方法好处:1、提高代码的重用性2、简化操作一、变量1.1 系统变量说明:变量由系统定义,不是用户定义,属于服务器层面注意:全局变量需要添加global关键字,会话变量需要添加session关键字,

2021-01-05 16:07:35 72

原创 mysql视图

mysql视图简介一、应用场景二、应用实例2.1 创建视图2.2 修改视图2.3 删除视图2.4 查看视图2.5 更新视图简介MySQL从5.0.1版本开始提供视图功能。一种虚拟存在的表,行和列的数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的, 只保存了sql逻辑,不保存查询结果。一、应用场景多个地方用到同样的查询结果该查询结果使用的sql语句较复杂二、应用实例语法:创建视图:create [or replace] view view_name As select_sta

2021-01-05 11:01:14 64

原创 mysql事务操作

mysql事务操作简介一、事务特性二、事务创建2.1、隐式事务2.2、显式事务三、事务的隔离级别四、演示简介事务:一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行。在mysql中使用最多的存储引擎是:innodb、myisam、memory等。其中innodb支持事务操作,而myisam、memory等不支持事务。一、事务特性ACID原子性:一个事务不可再分割,要么都执行要么都不执行一致性:一个事务执行会使数据从一个一致状态切换到另外一个一致状态隔离性:一个事

2021-01-05 10:05:22 67

原创 mysql数据类型

mysql数据类型一、数值型1.1 整数1.2小数二、字符型2.1短文本2.2 长文本三、日期型一、数值型1.1 整数如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加unsigned关键字如果插入的数值超出了整型的范围,会报out of range异常,并且插入临界值如果不设置长度,会有默认的长度,长度代表了显示的最大宽度,如果不够会用0在左边填充,但必须搭配zerofill使用!整数类型字节范围tinyint1有符号:-128~127 无符号:

2021-01-04 18:42:30 224

原创 mysql常见约束

mysql常见约束简介一、外键分类二、添加外键2.1 、创建表时2.1.1 、添加列级约束2.1.2、添加表级约束2.2、修改表时2.2.1、添加列级约2.2.2、添加表级约束三、删除外键总结简介一、外键分类非空约束 NOT NULL默认值约束 DEFAULT主键约束 PRIMARY KEY唯一约束 UNIQUE检查约束 CHECK外键约束 FOREIGN KEY二、添加外键2.1 、创建表时2.1.1 、添加列级约束语法:字段名和类型后面追加 约束类型即可。支持范围:默认、非

2021-01-04 18:42:15 66

原创 mysql子查询

sql子查询简介一、 select后面1.1 标量子查询二、 from后面2.1 表子查询三、 where或having后面3.1 标量子查询3.2 列子查询3.3 行子查询四、 exists后面4.1 表子查询简介sql执行顺序1、from2、 join3、 on4、 where5、group by6、avg,sum…7、having8、 select9、 distinct10、 order by部门表:员工表:工种表:一、 select后面1.1 标量子查询一般

2020-12-31 15:04:57 152

原创 mysql多表连接查询

mysql多表连接查询简介一、内连接1.1 等值连接1.2 非等值连接1.3 自连接二、外连接2.1 左外连接2.2 右外连接简介又称多表查询,当查询的字段来自于多个表时,就会用到连接查询。多表连接sql join图:测试sql:CREATE DATABASE IF NOT EXISTS testDROP TABLE IF EXISTS `department`;CREATE TABLE `department` ( `id` int(10) NOT NULL AUTO_INCREME

2020-12-30 15:36:01 240

原创 mysql常用函数汇总

mysql常用函数汇总一. 单行函数1.1 字符函数1.2 数学函数1.3 日期函数1.4 其他函数1.5 控制函数二、分组函数一. 单行函数1.1 字符函数length(); 获取参数值的字节个数 例:SELECT LENGTH('axiba');concat(); 拼接字符串 例:SELECT CONCAT(name1,'_',name2) 姓名 FROM test;upper()、lower(); 改变大小写 例:SELECT UPPER('axiba'); SELECT LOWER(

2020-12-29 11:04:30 71

原创 基于redis手写一个分布式锁

基于redis手写一个分布式锁简介一、分布式锁原理二、java实现redis的分布式锁三、使用redisson实现分布式锁简介分布式锁,名字就看的出来是应用于分布式系统中的锁,我们平时熟知的synchronized等一系列锁是在一个jvm内实现的,而很多大型的系统通常都是采用分布式部署开发,不在一个jvm内运行所以synchronized等锁就失效了,分布式锁就是解决分布式系统中锁的问题,下面我们来手写一个基于redis的分布式锁来了解一下分布式锁的原理。本文源码地址:https://github.co

2020-12-26 10:24:12 640

原创 Reactor线程模型详解

Reactor线程模型简介一、单Reactor单线程二、单Reactor多线程三、主从Reactor多线程3.1 netty线程模型图简介在目前的线程模型中一种是传统阻塞的I/O模型,一种是Reactor线程模型。Reactor模型根据Reactor的数量和处理资源线程池的数量不同又分为三种Reactor线程模型:单Reactor单线程单Reactor多线程主从Reactor多线程Reactor模型的核心是:Reactor+Handles。Reactor在一个单独的线程中运行,负责监听和分发事

2020-11-14 17:09:13 2201

原创 netty(七) --基于redis搭建netty tcp通讯集群方案

基于redis搭建netty tcp通讯集群方案简介一、集群原理二、项目依赖三、部分代码简介在实际应用中我们的tcp服务端经常会使用集群方式运行,这样增大了系统的性能和容灾,本文讲述简单的netty tcp服务端集群应用原理的部分代码,文章源码地址:https://github.com/itwwj/netty-learn.git中的netty-day08-cluster项目。一、集群原理服务端启动会向redis注册自己,以ip为key,以连接信息为value客户端连接服务端时,服务端会向red

2020-11-06 10:00:10 5341 2

原创 netty(六) --基于netty搭建大文件分片传输服务

基于netty搭建大文件分片传输服务简介一、依赖导入二、代码2.1代码结构2.2 部分代码三、测试简介在应用中经常会使用到服务间的大文件传输功能,本文简单介绍和编写基于netty的客户端和服务端之间的大文件分片传输功能,项目源码:https://github.com/itwwj/netty-learn.git中的netty-day07-uploading项目。一、依赖导入 <properties> <protostuff.version>1.0.10&l

2020-11-04 14:46:34 2134 3

原创 netty(五) --netty与springBoot整合

netty与springBoot整合简介一、依赖导入二、代码三 、测试简介通常在项目中我们都是结合spring或者springboot使用netty,本章节介绍springboot整合netty。项目源码地址:https://github.com/itwwj/netty-learn.git中的netty-day06-boot项目。一、依赖导入 <properties> <netty_version>4.1.24.Final</netty_versi

2020-11-03 17:06:56 948 3

原创 netty(四) --基于netty搭建简单的http服务器

基于netty简单的http服务器搭建简介一、http协议简介1.1 HttpRequest1.2 HttpResponse二、服务端开发三、测试简介 HTTP是一个超文本传输协议,是一种建立在TCP传输协议之上的应用层协议。http是目前web的主流协议,本章讲述的是基于netty NIO开发的http服务端。本章项目源码地址:https://github.com/itwwj/netty-learn.git中的netty-day05-httpServer项目。一、http协议简介 HTTP是一个应

2020-11-03 15:58:29 814

原创 netty(三)--自定义消息编码、解码器

自定义消息编码、解码器简介一、自定义编码、解码器解决的问题二、代码实现2.1MessageToByteEncoder和ByteToMessageDecoder介绍2.2代码实现2.3测试简介一、自定义编码、解码器解决的问题二、代码实现2.1MessageToByteEncoder和ByteToMessageDecoder介绍2.2代码实现2.3测试...

2020-11-03 10:25:20 1128

原创 基于HandlerInterceptorAdapter自定义springBoot拦截器

springBoot自定义拦截器1.应用场景分析2.结构分析3.HandlerInterceptorAdapter中的方法作用3.1 preHandle:3.2 postHandle:3.3 afterCompletion:4. 实例应用1.应用场景分析自定义拦截器可以应用于多种场景,可以说是springBoot开发的必备技能日志记录: 可以记录接口的访问信息,访问监控权限检测: 比如在使用jwt作为权限认证的时候可以配置拦截器解析jwt信息多租户信息提取: 关于多租户后期会有相关文章,这里只说

2020-10-14 08:38:58 964

原创 MongoDB(一)--基础知识及安装部署和使用

mongo的基础知识及部署简介一、MongoDB介绍二、入门知识三、简单的安装部署四、spring-data-mongodb使用MongoDB4.1运行环境配置4.2代码实现简单的增删改查4.3测试简介本文介绍一下非关系型数据库的特点,及MongoDB的优势和简单的部署使用MongoDB。本文java客户端使用mongodb源码: https://github.com/itwwj/iot-project.git 中的iot-mongodb项目,其他请忽略。一、MongoDB介绍MongoDB是一种

2020-08-25 11:33:37 221

原创 netty(二)--解决粘包拆包及编码解码问题

事件处理类中解决粘包拆包及编码解码问题简介一、粘包、拆包问题1.1粘包、拆包发生的原因1.2粘包、拆包解决方案1.3代码演示二、消息的编码解码问题2.1 编码解码解决的问题2.2 实现简单的编码解码2.3 使用开源的Protobuf实现编码解码2.3.1 Protobuf简介2.3.2 Protobuf环境搭建2.3.3 Protobuf与netty结合案例简介 本文主要讲解在现实netty开发中遇到的编解码和粘包、半包问题,参考《netty权威指南》、以及自己的一点心得体会,欢迎评论指错,共同成长。

2020-08-24 14:30:01 418

空空如也

空空如也

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

TA关注的人

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