自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 TCC-Transaction原理解析

了解一下分布式 事务的原理

2022-11-12 13:54:52 309

原创 Kafka集群搭建 topic+partition消费逻辑梳理

文章目录Zookeeper内部信息Kafka指令消费逻辑kafka的consumer是以什么为粒度更新&持久化offset的???Zookeeper内部信息查看当前那个broker是controllerget /controllerls /brokersls /brokers/topics 查看当前kafka 集群中的所有topicKafka指令kafka-topics.sh --zookeeper hadoop3:2181 --create --topic first --part

2022-01-25 11:20:38 1389

原创 Kafka初始,架构模型,角色功能梳理

[root@hadoop1 kafka]# kafka-topics.sh --zookeeper node3:2181,node4:2181 --create --replica-assignment 3 --partition 2 --topic ooxxException in thread "main" joptsimple.UnrecognizedOptionException: partition is not a recognized option at joptsimple.Optio.

2022-01-23 16:34:53 3179

原创 服务器的单线程以及多线程读写数据库

herostory3 添加了以下几种功能1.在moveTo上添加fromX,fromY2.解决了 自己刷新,其他用户也回归原点的问题(正常应该沿着原本的路线走)3.单线程解决 血量可能因为并发出错4.添加登录问题那么为什么需要使用服务器单线程呢?由图就可以知道,默认netty就是使用多线程执行的,如果执行某些业务的话,那么我们需要如何保证 数据的线程安全问题,此时只能使用单线程了。那么为什么后面又需要使用多线程呢?比如用户量一多,单线程执行的就比较慢了,我们就可以使用这种多线程异步的方式

2022-01-09 15:42:48 1258

原创 Netty 游戏开发 自动注入handler以及通过Javassist提高反射效率

通过路径扫描,扫描出该包或子包中标有@CmdHandler注解的类,然后通过反射,将其实例化后缓存。try { Set<Class> classes = ScanPackageUtil.ScanPackage("org.tinygame.herostory2", CmdHandler.class); if(classes == null){ logger.error("自动添加handler扫描包失败");

2022-01-04 10:07:09 2752

原创 Netty 游戏开发 -重构 -设计模式实战

先来看几段代码从 解码-> 处理 -> 编码,你会发现我们使用了很多的if或者case,尤其是这个handler处理这一步代码量非常多,还是多功能的耦合在一起,非常不利于业务的拓展以及维护。略懂设计模式的应该都懂,需要使用设计模式中的工厂模式来优化。创建对应的工厂,使用hashmap集合来存储编码器和解码器工厂(消息编码工厂)Handler处理器工厂需要获取的话直接使用 map.get来获取对应的value,看这个handlerMap,每个命令需要执行的具体业务就交给一个

2021-12-29 16:50:03 1785

原创 Netty入门之游戏开发 Protobuf消息应用

首先来看看需要完成的游戏效果,两个客户端都可以移动,其他客户端也实时可见,刷新那一方刷新两个英雄都回归原点(bug),另一方还在连接的那一方正常。网页浏览地址http://cdn0001.afrxvk.cn/hero_story/demo/step010/index.html?serverAddr=127.0.0.1:11234&userId=2GameMsgProtocol.protosyntax = "proto3";package msg;option java_packag

2021-12-27 17:43:12 1846

原创 zookeeper原理知识,Paxos、ZAB协议、Watch、API

paxos简单介绍https://www.douban.com/note/208430424/Zookeeper Atomic Broadcast(原子广播)简称为ZAB协议看了前面的Paxos算法,我们可能会认为Zookeeper就是基于Paxos算法的实现,但是事实上,Zookeeper并不是完全采用的Paxos,而是一种名为Zookeeper Atomic Broadcast,简称ZAB协议的一种支持奔溃恢复的协议作为数据一致性核心算法。ZAB协议定义整个Zookeeper中关于事物消息的处理流程

2021-11-25 19:47:57 1219

原创 zookeeper介绍、安装、shell cli使用

我们是用keepalived一般采用的是主从模型,看过去好像很可靠,但是不要忘了keepalived也只是一个程序而已,当keepalived因为某些异常退出(不是stop,stop会执行相应的关闭命令),导致物理网卡配置的eth0:2子接口还是暴露的。此时从机器的keepalived也启动,也会将物理网卡的eth0:2暴露出来,那么可能会出现同一个连接的数据包转发到不同的RServer上去,而导致数据包被丢弃,虽然三次握手会重传,但是会导致效率不高的问题。此时zookeeper就可以派上用场啦!!!请

2021-11-24 12:30:50 122

原创 高并发负载均衡:基于keepalived的lvs高可用搭建

1

2021-11-20 18:57:25 745

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

11

2021-11-19 15:55:42 375

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

lvs三层hold住流量,nginx控制(hold)住握手,tomcat控制住计算

2021-11-18 00:23:37 603

原创 高并发负载均衡:网络协议原理

OSI七层模型查看Linux当前进程的文件描述符接着执行8这个文件描述符(输入和输出),与外界建立套接字(socket),这就是Linux操作系统中万物皆文件的概念关闭当前8文件描述符exec 8<& -三次握手建立连接,四次挥手建立连接查看Linux网卡信息cat /etc/sysconfig/network-scripts/ifcfg-eth0/etc是用来存放系统主要的配置文件,例如人员的账号密码文件、各种服务的起始文件等。一般来说,这个目录下的各文件属性是可以

2021-11-15 17:04:38 1393

原创 面试官:群聊消息的已读未读功能,你来设计一个?

企业IM比如企业微信、钉钉里面的群消息的有个已读未读的功能,发送者刚发出消息时,当前群里其他群成员都是未读状态,陆陆续续有人看了这个消息,这时候消息的详情变成x人已读,y人未读,如下图所示,有具体的已读未读列表(万恶的功能,看到同事or老板的消息不能假装没看到了),每条消息对应一个唯一的messageid(uint64_t),每个用户对应一个唯一的userid(uint64_t),应该如何保存这个消息对应的已读未读详情呢?第一反应就是很简单粗暴的方案对于每一个messageid,存当前readi.

2021-11-15 13:29:04 336

原创 福州锐捷网络java后端开发工程师面试

一面 技术面首先针对简历问,你的项目使用的技术栈,比如使用RebbitMQ对它的理解,数据库有什么感觉设计的比较好的,为什么这样设计,有什么问题,怎样解决的?Redis你是用来干什么的?会遇到什么问题?如何解决?防止用户的短信轰炸,如何解决?我回答的是使用在server层判断该用户ip的次数或者使用AOP来实现。那还有没有其他方法呢?呃呃呃,我想不起来了,其实微服务的GetWay网关是可以实现的。简历上面写的几乎都有涉及到二面 综合面总的是以唠叨为主,你有什么优势?逻辑性强热爱学习你是怎样

2021-10-20 23:25:04 860 1

原创 23种设计模式之6大原则

1.单一职责原则单一职责约定一个类应该有且仅有一个改变类的原因视频观看的角色分为 访客用户(480p)、普通会员(720p)、VIP会员(1080p),以及是否有广告违背原则方案创建一个VideoUserService类,创建一个方法,通过if…else if…else进行判断虽然看过去好像没什么问题,但是很多东西堆在一起,难维护!!!单一职责原则改善方案定义一个IVideoUserService接口,内部定义两个方法void definition();//视频清晰度void adver

2021-09-02 09:27:12 86

原创 MyBatis-Plus 实体entity自动生成器

话不多说,直接上代码运行// 1、创建代码生成器// AutoGenerator mpg = new AutoGenerator(); AutoGenerator mpg = new AutoGenerator(); // 2、全局配置 GlobalConfig gc = new GlobalConfig(); String projectPath = System.getProperty("user.dir");

2021-06-28 20:27:09 1402

原创 Reactor主从模型以及netty之ChannelInitializer源码分析

fd

2021-06-18 19:20:19 204

原创 BIO演变到NIO,以及select、poll、epoll

BIO模型BIO模型也称为同步非阻塞模型,当ServerSocket需要accept()、read()、write()时,调用操作系统的相关函数,但是如果没有拿到对应的数据时,会一直阻塞在那里。当服务器每接收一个Client就需要开启一个线程去处理在现在访问量如此之大的条件下,C10K问题是无法避免的,一台服务器根本无法开启如此之多的线程来处理那么在硬件方面是否可以解决,答案是可以。但是N多台服务器分布式,你想想,这在经济方面是非常昂贵的,很多公司是承担不起的,而且你为每个用户开启一个线程,你能确

2021-06-07 10:15:44 248 2

原创 Elasticsearch的基本操作CRUD

配置Maven<dependencies> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>7.8.0</version> </dependency>

2021-06-04 21:37:46 220 1

原创 Linux磁盘I/O (2)

需要到 /etc/sysctl.conf 中去配置,ratio(百分比)和具体的bytes只能二选一https://blog.youkuaiyun.com/weixin_44410537/article/details/98449706$ sysctl -a | grep dirtyvm.dirty_background_bytes = 0vm.dirty_background_ratio = 10vm.dirty_bytes = 0vm.dirty_ratio = 20vm.dirty_writeb

2021-05-30 12:27:02 103

原创 Linux磁盘I/O (1)

df -h 显示每个文件所在的文件系统的信息,或所有文件系统(-h 是显示大小)。

2021-05-29 14:32:23 231 2

原创 docker 运行image的启动命令

mysql :docker run -p 3306:3306 --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.32

2021-05-23 19:29:05 5737

原创 Netty解决粘包和拆包出现的问题

1.自定义协议 粘包和拆包(tcpStickingAndUnpacking2)public class DongMessageDecoder extends ReplayingDecoder<Void>{ ... protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception { //ReplayingDecoder自动帮我们判断是否

2021-05-23 19:26:59 289

原创 网络编程 调用 操作系统底层知识

需要有一定的BIO和NIO的基础和经验,方可读懂本文章笔者懒,其中奥秘需自行领悟编译.java文件追踪并运行此文件,可以看到调用 操作系统的具体执行函数有一个客户端连接后看看输出的日志4.查看Main线程的日志最终总结(epoll)每次一开始先在操作系统里面开辟一个内核空间,用于存储需要监听的fd在Java中向select.register()注册,就相当于向此内核空间里面存贮 对应的fdselect.select() 就是操作系统的wait,等待看看哪.

2021-05-23 16:34:44 112

原创 JUC集合与线程安全解决方案

随着上网的人越来越多,现在的网络请求不在像以前那样,可以用就行,却不考虑是否线程安全一.List集合看下面这段代码,我们经常敲,再收悉不过了,但是他是线程安全的吗? List<String> list = new ArrayList(); for(int i = 0; i < 3; i++){ new Thread(()->{ list.add("a"); System.o

2021-04-11 11:40:47 99

原创 springcloud stream 的作用流程图

这些中间件的差异性,导致我们实际项目开发给我们造成了一定的困扰,如果我们,用不了两种消息,队列的其中一种后面的业务需求,我们想往另外一种消息队列进行迁移,这时候无疑是一种灾难性的, 一大堆东西都要重新推倒重新做 ,因为他跟我们的系统耦合了,这时候springcloud stream 给我们提供了一种解耦合的方式...

2021-02-15 16:54:44 249

原创 抽象工厂

类图原理图工厂模式与抽象工厂的区别

2021-01-24 21:24:42 76

原创 工厂模式的学习

1.狂神版简单工厂模式工厂方法模式2.小傅哥版本 (工厂方法模式)爱奇艺 会员卡服务优惠券 服务优惠券 结果实体商品 服务发货 信息1. 未使用工厂方法模式public class AwardReq { private String uId; // 用户唯一ID private Integer awardType; // 奖品类型(可以用枚举定义);1优惠券、2实物商品、3第三方兑换卡(爱奇艺)

2021-01-21 15:29:41 384

原创 Maven配置settings(阿里镜像)

1.先在 C:\Users\东\.m2 路径下创建settings.xml2.里面的内容如下<?xml version="1.0" encoding="UTF-8"?><settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ma

2021-01-11 14:06:47 4197

原创 Linux 上部署springboot项目

sss

2020-12-10 13:50:17 147

原创 Vue脚手架创建项目

如果出现无法初始化的npm i -g @vue/cli-init或者检查一下vue -V 是否配好了(有可能是 路径没有添加到环境变量中)npm 的正常配置一.初始化一个项目vue init webpack hello4? Project name hello4? Project description A Vue.js project? Author hdy <2855181983@qq.com>? Vue build standalone? Install vu.

2020-12-07 23:53:26 104

原创 nginx 的部署过程

docker run -id --name=nginx01 \-p 80:80 -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/var/log/nginx -v $PWD/html:/usr/share/nginx/html nginx

2020-11-08 22:45:26 126

原创 Spring Aware接口解析

1.Aware接口简介Spring的依赖注入的最大亮点是所有的Bean对Spring容器的存在是没有意识的,我们可以将Spring容器换成其他的容器,Spring容器中的Bean的耦合度因此也是极低的。但是我们在实际的开发中,我们却经常要用到Spring容器本身的功能资源,所以Spring容器中的Bean此时就要意识到Spring容器的存在才能调用Spring所提供的资源。我们通过Spring提供的一系列接口Spring Aware来实现具体的功能。/** * A marker superinter

2020-10-27 00:16:47 128

原创 Docker启动Elasticsearch7.x报错以及解决方法

使用Docker run 命令正常情况我们是执行:docker run -d -p 9200:9200 -p 9300:9300 --name 用户自定义名字 容器ID这是设置初始化 刚开始堆栈 需要的内存大小,默认是1G,但是由于电脑配置原因,我们需要设置为256mdocker run -d -e ES_JAVA_POTS="-Xms256m -Xmx256m" -p 9200:9200 -p 9300:9300 --name ES3 8f46db60ddd6我们发现该容器命名明明已经启

2020-10-24 00:48:27 712

转载 Get https://registry-1.docker.io/v2/: net/http: TLS handshake timeout(Docker镜像拉取错误)

场景:在使用docker 拉取httpd的镜像时,报连接超时的问题,如标题修改或新建/ect/docker/daemon.json文件vim daemon.json文件中编辑阿里云的镜像地址:{ "registry-mirrors":["https://6kx4zyno.mirror.aliyuncs.com"]}重启docker服务(注意:必须重启,否则不生效)systemctl daemon-reload systemctl restart docker...

2020-10-18 00:13:13 3785 1

原创 在docker中启动Elasticsearch

docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 --name ES01 elasticsearch:7.9.0如果不写,默认初始是占用2G的堆内存空间,如果虚拟机内存空间不足,就会报错第一个设置的是 初内存大小,第二个是最大使用内存。...

2020-10-17 16:52:25 546

原创 使用IDEA创建springboot项目时,出现错误Cannot download ‘https://start.spring.io‘: connect timed out

1.进入settings2.把URL 改成 https://start.aliyun.com/

2020-10-10 23:39:34 231 1

转载 stringRedisTemplate之opsForValue使用说明

这个是针对字符串的存储,若是存对象,请使用redisTemplate1、 set(K key, V value)新增一个字符串类型的值,key是键,value是值。stringRedisTemplate.opsForValue().set("stringValue","bbb"); 2、get(Object key)String stringValue = stringRedisTemplate.opsForValue().get("key")3、append(K key, String v

2020-09-29 22:44:43 13425

原创 Docker 的简单容器操作

1.从云仓库搜索镜像docker search tomcat2.拉取镜像docker pull tomcat:5.0.523.根据镜像启动容器 (-d :表示后台启动 , -p:表示端口映射(将主机的端口8888映射到容器的8080端口))docker run -d -p 8888:8080 tomcat:5.0.52(注意默认的tomcat版本:它的/webapp文件下没有网页,就算开启成功也看不到那个页面)docker run --name mytomcat -d -p 8888:808

2020-09-18 21:55:47 127

空空如也

空空如也

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

TA关注的人

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