自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 「Netty系列」TCP通信过程中遇到粘包拆包解决全过程

周末了,文章继续。在使用TCP协议进行通信时,听到最多的也就是粘包和拆包问题。本文就来看看,如何解决粘包和拆包问题。 一 TCP的粘包/拆包的问题以及解决在解决TCP粘包和拆包,我们先看看一种思想。来看看读取一个Int数据的Demo,体会下这种思想。1.1 ReplayingDecoder1. 自定义解码器,从ByteBuf读取一个Int。(重点,一定要看懂这段代码)publicclassIntegerHeaderFrameDecoderextendsByteToMe...

2020-12-21 21:10:56 318 1

原创 「Netty系列」介绍下Netty中常用的编码器和解码器

​周末 文章走起。前面文章介绍Netty相关知识点。接下来将介绍下在通信过程中用的编码器和解码器。这里会不会联想到谍战戏里面。发送情报者怕情报泄露,所以对情报行加密然后传给接收者。接收者对情报进行解密,得到情报。这里讲的编码器和解码器是和情报传递很相似?一起查看这篇文章,来揭秘!!!一 编解码器1.1 什么叫编解码器在网络传输的过程中,数据都是以字节流的方式进行传递。客户端在向服务端发送数据的时候,将业务中其他类型数据转化为字节,叫编码。服务端接收到数据为字节流,将字节流转化为原来的格式,叫解.

2020-12-21 21:04:55 1168

原创 「Netty系列」带你深入刨析Netty运用IO模型和Reactor模型

周五咯,今天上班主要实现多个服务端如何通信,如何实现每个服务端部署多台。运维不在没法安装Redis,下周继续这块功能实现。继续不加班,文章走起。前面几篇文章讲述了Netty前置知识,接下来正式介绍Netty。我们都知道Netty基于NIO实现的,但是相对NIO有什么好处呢?从IO模型和Reactor模型来刨析Netty。一 概述接下来就要接触Netty了,我们先对Netty有一个简单的认识,看下面介绍。1.1 初步了解Netty Netty是什么? Netty是一个高性能的、异.

2020-12-21 21:00:21 249

原创 「Netty系列」从实战开始,带你深入了解Netty各个组件和ByteBuf

上文对IO模型和Reactor模型进行讲解,是不是感觉有点懵懵的。哈哈哈,反正我并没有对其有深入见解。我是这样安慰自己的,知识在不断的反复学习和思考中有新的感悟。不气馁,继续新的征程。本篇文章想来从实战开始,带我深入了解Netty各个组件是做什么?ByteBuf执行原理又是怎样的?​一 第一个Netty实例用Netty实现通信。说白了就是客户端向服务端发消息,服务端接收消息并给客户端响应。所以我来看看服务端和客户端是如何实现的?1.1 服务端1. 依赖<?xmlversi..

2020-12-21 20:55:07 386

原创 「Netty系列」一文熟悉NIO(Netty前置三)

正常下班,文章走起。通过前面几篇文章对网络基础知识和网络编程有了认识。接下来这篇文章表述和Netty更加息息相关的知识-NIO。每天学习一小时,期待质变来临。NIO又称为非阻塞IO,是JDK1.4提出的新的IO模型。01NIO组件基本介绍1 Buffer概述(缓冲区)按照物理分区:直接缓冲区和堆字节缓冲区。Buffer模式:写模式和读模式。2Buffer执行原理分析三个属性(Buffer的三个属性)capacity(容量)、position(位置)、limit(限...

2020-12-21 16:25:36 164

原创 「Netty系列」使用wireshark对网络通信扑捉,进行三次握手和四次挥手原理分析(Netty前置二)

正常下班,文章走起。在网络的通信的时候,都有听说过三次握手四次挥手。但是对其原理是否清晰?本篇文章通过使用wireshark对网络通信扑捉,进行原理分析。1BIO代码实现//服务端代码publicclassServerSocket{publicstaticvoidmain(String[]args)throwsException{//创建ServerSocket对象,用于客户端的连接java.net.ServerSo...

2020-12-21 16:25:00 337

原创 「Netty系列」彻底弄清网络七层协议、TCP/IP、IP、TCP(Netty前置一)

目前工作中使用Netty进行服务端开发,在实践中有自己一点点心得。接下来分享Netty系列文章。在学习Netty之前先了解下网络基础知识、分清网络七层协议、TCP/IP协议族、IP、TCP各代表什么含义。一 基础1.1 概述1 网络分层中的IOS七层模型、TCP/IP协议族、TCP、IP,这些有什么不同2 TCP协议通信过程中的三次握手和四次挥手到底是什么流程?1.2 软件架构在生活中,我们经常用QQ、微信、百度云盘、Goole、IE浏览器、火狐浏览器......。可以总结为两大类,c

2020-12-21 16:22:03 862

原创 GC什么样对象需要被回收?垃圾回收算法有哪些?如何选择垃圾回收器?如何选择?

都知道Java垃圾回收都是交给JVM来处理,什么时机、如何处理了解不多,可以查看此篇文章。如果了解,浏览文章一起交流。分为三个模块:什么样对象需要回收?回收算法有哪些?如何选择垃圾回收器?java中有了垃圾自动回收机制,让程序员更多的关注业务,不必考虑内存的释放。所以自动垃圾算法就变的很重要了,如果算法不合理,导致一些内存不释放,从而就导致内存溢出。一 什么样对象需要被回收?垃圾回收机制通过一套的有效的算法计算,什么对象有效,什么对象无效。对于无效的对象进行回收。常见的计算对象的有效无效两种方法

2021-05-18 22:44:12 485

原创 单体定时任务到分布式集群定时平台搭建

task-scheduling模块:corn、Timer、ScheduledExecutor、scheduled、quartz、elastic-jobgitee地址(开源项目):https://gitee.com/flowerAndJava/task-scheduling开源源码timer-demo模块:Timer定时案例;scheduledExecutor-demo模块:为ScheduledExecutor线程池定时任务;springboot-scheduled模块:SpringBoot自带

2021-05-17 13:57:03 440

原创 JVM基础知识到使用jemeter进行线上JVM调优(一)

一 前置知识JDK包含JRE和Java设计语言。是Java语言开发最小环境,即XXX.java变为XXX.class最小环境。JRE包含Java类库Api和虚拟机等,是Java程序运行标准环境。即运行XXX.class文件。JVM自动管理内存。LTS版本LTS版本 JDK能获取为期三年的支持和更新,普通JDK版本能获取短短的六个月支持。JDK 8和JDK 11是LTS版,再下一个就到2021年发布的JDK 17。二 了解JVM基础知识 Java 虚拟机会自动管理内存,内存的获取和

2021-05-16 19:01:04 248

原创 从自定义注解到手写(elasticjob)启动类

annotation-learn了解常见注解认识自定义注解手写分布式任务调度(elasticjob启动类)@SpringBootApplication自动装载对象流程一 介绍看着代码学习注解!开源项目https://gitee.com/flowerAndJava/annotation-learn代码getting-started模块 com.haopt.annotation.definition包 自定义注解代码getting-started模块 com.haopt.

2021-05-14 09:51:49 261 1

原创 MySQL思考-分库分表(Sharding-JDBC)

一 分库分表基本概念1.1 分库将一个数据库,在节点上部署多台。因为当很多客户端连接客户端,并发量高,需要进行分库。1.2 分表将一个表,分成多个表。因为在MySQL中一个表数据达到5千万条,数据库性能严重下降。1.3 分区概述分区技术是数据库内部技术,对于我们开发者来说,一张表分区后仍然是一张表,我们开发操作表名没有变化。仅仅是将表分成若干物理区。为什么不使用分区受单机因素限制(大量连接、高吞吐),虽然每个区是独立的,但是分区表的总入口就一个。二 分库分表的中间件我们

2021-03-18 21:51:35 542 3

原创 MySQL思考-索引

一 索引本质索引是什么?索引:有序的数据结构。索引目的?帮助MySQL高效获取数据。索引文件目录MyISAM引擎-rw-r-----. 1 polkitd input 61 9⽉ 2 11:31 db.opt-rw-r-----. 1 polkitd input 8668 9⽉ 2 11:36 tb_user2.frm #表结构⽂件-rw-r-----. 1 polkitd input 0 9⽉ 2 11:36 tb_user2.MYD #MyISAM引擎类型的表数据⽂件

2021-03-16 12:06:17 208

原创 MySQL思考-存储引擎(InnoDB)

一 MySQL体系架构MySQL Server组成部分 Connection Pool :连接池组件 Management Services & Utilities :管理服务和工具组件 Parser: 查询分析器组件 Optimizer: 优化器组件 Caches & Buffers: 缓冲池组件 Pluggable Storage Engines:存储引擎 File System : 文件系统1.1 各层之间解释连接层 完成一些连接处理、授权认证。服

2021-03-15 22:21:14 178 2

原创 「Netty系列」使用Netty开发,踩坑到解决全过程(附解决方案源码)

​周五没事干,对之前文章进行整理下。来到现公司已经有半年时间。从当初对网络编程的懵懵懂懂,到现在使用Netty对服务端开发完成并上线。今天这篇文章总结下在这个过程困扰我的最多点--“TCP协议进行通信,出现粘包和拆包”。使用TCP协议通信一定会出现粘包和拆包?为什么加上固定包头就可以解决粘包和拆包?首先我们先分析下,什么情况下会出现粘包?是TCP通信都有可能出现粘包?来通过一个Demo模拟下TCP协议通信,一起分析下粘包出现的可能性。来来来!1.1 实例不出现粘包1.1.1 代码实现客户

2020-12-22 16:34:51 930 1

原创 「MySQL系列」存储引擎InnoDB结构和原理深入刨析

参考黑马架构课程。从InnoDB体系结构、逻辑存储结构、chekpoint、插入缓存、两次写、自适应hash索引、异步IO、刷新临时页、InnoDB事务隔离级别、隔离级别实现对InnoDB刨析。一 存储引擎体系1.1 MySQL体系架构上图描述ConnectionPool:连接池组件ManagementServices&Utilities:管理服务和工具组件SQLInterface:SQL接口组件Parser:查询分析器组件Optimizer:...

2020-12-14 14:56:15 392

原创 「MySQL系列」索引设计原则、索引失效场景、limit 、order by、group by 等常见场景优化

一 索引使用1.1 概述1. 定义索引帮助MySQL高效获取数据的数据结构(按照一定规则)。2. 定义解释MySQL在存储数据之外,数据库系统还维护者满足特定查找算法的 数据结构,这些数据结构以某种方式引用(指向)数据, 这样就 可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。3. 优缺点优点 提高数据检索效率,降低数据库IO成本。通过索引对数据进行排序降低数据排序成本,降低CPU消耗。缺点 实际上索引也是一张表,该表中保存了主键与索引字段,并指向实体类的记录,所以索

2020-12-08 21:20:15 424

原创 「MySQL系列」分析Sql执行时间及查询执行计划(附数据库和一千万数据)

在查询sql执行时间,查看sql执行计划的时候。发现自己数据量太少,时间差距不明显。来来来,给你一千万条数据。一 准备数据1. 创建表和导入一千万条数据表和数据地址2. 大批量数据导入数据a 将数据库导入服务器中(如果是windows系统,这步省略)b 创建一个数据库创建数据库(db2),表tb_skuc 命令行登录数据库mysql -u 用户名 -p 密码 ;d 切换到使用的数据库use db2;e 使用命令load data local infile '/tmp/tb_s

2020-12-04 10:56:07 1170

原创 缓存仅仅是使用Redis?看看高并发系统缓存体系架构(缓存体系架构一)(共6篇,后续不断更新)

一 缓存概述缓存(cache),,原始意义是指访问速度比一般随机存储器(RAM)快的一种高速存储器。1.1 缓存分类应用级缓存应用级缓存也就是我们平时写的应用程序中所使用的缓存。在平时程序中一般 是按照如下操作流程来实现缓存:上图说明:在平时程序中一般是按照如下操作流程来实现缓存的操作,首先张三用户读取 数据库,并将读取的数据存入到缓存中,其他用户读取的时候,直接从缓存中 读取,而不用查询数据库,从而提高程序的执行速度和效率。系统级别缓存系统级别缓存是抛开我们应用程序之外硬件

2020-12-01 08:54:15 405

原创 基于数据结构和算法的业务应用(二)

基于数据结构和算法的业务应用二一 限流算法与应用1.1 计数器1.2 漏桶算法1.3 令牌桶1.4 滑动窗口二 定时算法与应用2.1 最小堆2.2 时间轮三 负载均衡算法3.1 轮询(RoundRobin)3.2 随机(Random)3.1 源地址哈希(Hash)2.4 加权轮询(WRR)3.5 加权随机(WR)3.6 最小连接数(LC)3.7 应用案例四 加密算法与应用4.1 散列4.2 对称4,3 非对称五 一致性hash及应用六 典型业务场景应用6.1 网站敏感词过滤6.2 最优商品topk相关文章

2020-11-30 08:34:59 274

原创 基于数据结构和算法的业务应用(一)

数据结构、算法到底什么?算法如何再业务中应用?一 概述1.1 数据结构的概述1.1.2 概述数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。1.1.3 划分数据结构我们关注的维度不一样,划分的方式不一样。数据结构可以分为逻辑结果和物理结构。逻辑结构逻辑结构,反应元素之间的逻辑关系。逻辑关系是指元素之间的前后间是什么形式关联,这与他们在计算机中的存储位置无关。类型如下:线性结构

2020-11-26 17:48:53 658

原创 从阿里云购买、域名购买、SSL免费购买到SSL集成开发(网络编程安全三)

一 阿里云HTTPS开发1.1 准备工作准备工作a 阿里云ecs一个b 域名一个(www.itheima.cloud)c ca证书一份(用来支持https)(需要绑定域名)d 本地打包好的springboot项目 (需要打包上传到阿里云)e ftp客户端一个,用来把jar传到阿里云服务器上阿里云域名申请https://mi.aliyun.com/3. 选择域名直接购买4. 查看域名状态https://dc.console.aliyun.com/next/index?

2020-11-23 22:25:29 470

原创 WebSocket实战集成SSL(网络安全编程二)

从阿里云服务器购买、域名购买、SSL免费一 WebSocket实战1.1 认识WebSocket上图说明发送连接请求客户端通过ws://host:port/ 的请求地址发起WebSocket请求连接。由JavaScript实现WebSocket API与服务器建立WebSocket连接。host服务器ip,port为端口。握手服务器端接受请求后,会解析请求头信息,根据升级协议判断请求是否为WebSocket请求,并取出请求信息中的Sec-WebSocket-Key字段的数据。按照

2020-11-23 22:23:07 2963 1

原创 keytool错误:java.lang.Exception 没有创建键值对,别名<czbk>已经存在

在生成keystore证书,在输入一遍完成,找不到生成文件。再次输入命令,报如下错:keytool错误 java.lang.Exception 没有创建键值对,别名已经存在

2020-11-22 22:12:18 1823 2

原创 揭秘HTTPS(网络编程安全一)

HTTPS是个什么?HTTPS和HTTP是什么关系?HTTPS加密流程是什么?一 HTTP和HTTPS概述1.1 HTTP协议概述HTTP的第一个版本只能传输超文本标记语言(HTML)文件,因此被称为超文本传输协议。特征a 是一个请求响应无状态的应用层协议。b 基于TCP/IP协议族传输(明文)数据,所有的WWWW都必须遵守这个标准。上图解释域名:表示网站中不同的页面。通信协议:浏览器和服务器之间沟通的语言。HTTP发展史1.2 HTTPSHTTPS是在H

2020-11-22 16:25:05 214 4

原创 Java面试题(数据结构相关)2020年11月

获取链表遍历题解答:链表是一个个节点连接起来形成一个链,所有遍历只能从头开始往后遍历。public class Solution {public ListNode findKthTotail(ListNode head, int k) {List nodeList = new ArrayList<>();while (head != null) {nodeList.add(head);head = head.next;}return nodeList.get(nodeLi..

2020-11-17 16:12:30 215 2

原创 上班第一天,安装编程软件和配置环境,这篇文章全部解决

1 安装JDKJDK教程安装2 安装IDEAIDEA安装教程3 安装git【git安装教程】4 安装仓库【Maven仓库】5 IDEA配置git1 点击file,选择file2 选择git,然后选择git安装目录。点击确认安装完毕!!!6 IDEA配置Maven环境1 选择Settings2 选择maven.然后在右侧出入maven安装地址和仓库目录。点击applay 配置完成!!!4 安装Navicat数据库连接工具navicat5 安装redis

2020-11-11 08:34:38 381

原创 Git安装教程,来了来了

一 资源链接:https://pan.baidu.com/s/1WP1rZaKdL7uiBhE7u0fymQ提取码:4mrn如果资源生效,请加QQ群318605142二 安装教程2.1 点击2.2 点击下一步2.3 选择安装路径(可以选择默认路径)2.4 点击下步2.5 点击下一步2.6 点击next2.7 选择红框圈住部分,点击next2.8 选择红框圈住部分,点击next2.9 选择圈住,点击下一步2.10 选择圈住的,点击next2.11 选择圈住的

2020-11-10 20:48:11 1931

原创 连接服务器工具,看这篇文章全解决

一 资源链接:https://pan.baidu.com/s/1sVyFxIrinr2F6CzGMnKuhA提取码:paja如果资源生效,请加QQ群318605142二 安装教程1 双击2 点击下一步3 接受协议,点击下一步4 下一步5 选择安装路径,点击下一步6 安装7 等待8 点击完成安装完毕!!!更多Java相关,请关注微信公众号 花花与Java...

2020-11-10 19:44:19 166

原创 连接Redis,连接Redis工具来了

一 资源链接:https://pan.baidu.com/s/1MD5DNaCIiEh1xFpb73zHWg提取码:h9zs如果资源生效,请加QQ群318605142二 安装教程2.1 双击,安装2.2 点击下一步2.3 点击 I Agree2.4 安装2.5 等待2.6 下一步2.7 完成2.8 消除弹出框2.9 查看安装结果安装完毕!!!更多Java相关内容。请关注微信公众号:花花与Java...

2020-11-10 19:43:26 366

原创 Redis安装教程,它来了

一资源链接:https://pan.baidu.com/s/1FyQ-8Zj4jF2hng1EnQCogQ提取码:cr6c如果资源生效,请加QQ群318605142二安装教程2.1 解压2.2 进入文件夹2.3 点击服务2.4 查看启动结果安装完毕!!!更多Java相关内容。请关注微信公众号:花花与Java...

2020-11-10 19:42:42 85

原创 Navicat一步一步安装(MySQL连接工具)

一 资源链接:https://pan.baidu.com/s/1pD5JiLlWeedjGyAjgN5nSA提取码:p1vn如果资源失效,请加qq群318605142二 安装教程1 双击2 点击下一步3 点击我同意,点击下一步4 选择安装目录(可以选择默认目录),点击下一步5 点击下一步76 勾选,点击下一步7 点击完成8 点击试用9 点击关闭安装完毕!!!更多Java相关内容。请关注微信公众号:花花与Java...

2020-11-10 19:41:30 159

原创 MySQL安装教程来了来了

一 资源链接:https://pan.baidu.com/s/1KRsvMhAKmtM0cgKXV-Wu8A 提取码:9pxz 如果资源生效,请加QQ群318605142二 安装步骤1 双击2 按照圈住内容操作3 按照圈住内容操作4 按照圈住内容操作5 按照圈住内容操作6 按照圈住内容操作7 按照圈住内容操作8 按照圈住内容操作9 按照圈住内容操作10 按照圈住内容操作[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img

2020-11-10 19:37:54 392

原创 IDEA安装教程,一步步截图

一 IDEA资源 链接:https://pan.baidu.com/s/19JoyPWe9NYATQfpYRk-xwA 提取码:v5pk 备注:如果资源失效请加QQ群318605142二 安装步骤2.1 双击文件2.2 点击next2.3 点击next2.4 点击已圈内容2.5 点击install2.6 等待2.7 点击圈中2.8 点击圈中2.9 点击next2.10 点击圈中安装完毕!!!更多Java相关内容。请关注微信公众号:花花与J

2020-11-10 19:36:21 537

原创 20张图教你安装JDK教程

0 JDK资源链接:https://pan.baidu.com/s/1Jdld5CXP85JVNVMlJp3MRA 提取码:n7vf 注意:如果资源失效,请加qq群318605142一 安装JDK1 双击下载后的文件,如下图2 点击下一步3 点击下一步4 等待5 点击下一步6 等待7 点击关闭二 配置jdk环境8 鼠标右击,选择属性9 点击高级属性10 点击新建11 点击环境变量12 输入变量名和变量值如下图,然后点击确定JAVA_HOM

2020-11-09 09:31:46 778

空空如也

空空如也

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

TA关注的人

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