笔记
文章平均质量分 51
Java游戏服务器
zfoo-framework
致力于万能框架zfoo的发展,能做rpc、游戏服务器、web服务器,满足我目前想要的一切需求,是一套线上验证过的方案。
展开
-
xml学习笔记
xml原创 2022-06-24 12:12:53 · 93 阅读 · 0 评论 -
多核编程4种方式:多线程、多进程、csp(轻量级线程)、actor(轻量级进程)
1)多线程方式利用多核心 锁(信号量、互斥锁、自旋锁、读写锁、原子锁cas、乐观锁、悲观锁) 锁的粒度 什么情况下用什么锁,比较困惑 消息队列 管道(不需要加锁): pipe+epoll/select/epoll 资源+锁 并发实体:线程 总结: 需要大量的锁。2)多进程方式利用多核心 共享内存 pipe管道、 父进程fork子进程有限制 只能一端读...原创 2020-10-11 17:16:38 · 1330 阅读 · 0 评论 -
mutex spinlock 无锁cas
并发1)加锁mutex 获取不到锁就休眠,让出CPU; ==>去尝试获取锁,并不怎么耗时间。 等拿到锁,比较耗时间。 使用场景:只有一个连接时,去连接数据库。 假如:有3个线程去,这时去竞争,那么就可以用mutex,让竞争不到的不要死等。 为什么不能用自旋锁呢? 因为会忙等,等于啥也不干空耗CPU。2)自旋锁 获取不到锁,继续去检测; 获取自旋锁:如果不能及时获取,它是一个忙等待的过程,占CPU。 使用场...原创 2021-04-14 15:06:06 · 172 阅读 · 0 评论 -
红黑树学习
1)二叉排序树:1.用的不多,但是它是红黑树的基础;操作:每次插入,必然是插入到最下面的叶子节点。最坏的情况下,会退化成链表。2)红黑树1.linux内核进程调度2.nginx定时器;3)红黑树在工程上的使用(1)利用红黑树排序的功能; ==》顺序;(2)快速查找的功能,key-value;任何数据结构,比如:二叉树, 咱们写逻辑时要做到性质和业务没有做到分离。==》业务和数据结构要分离。4)红黑树的5个性质1.每个节点是红的...原创 2021-04-30 16:38:10 · 101 阅读 · 1 评论 -
跳表和红黑树学习的简单笔记
===============跳表1)基于链表结构2)不断的增加索引层==>接近于2分查找3)空间换时间的一种算法-->可以改变抽取间隔来平衡下需要的空间。4)基本操作: 插入 删除-->可能要修改前驱 索引5)随机函数实现平衡===============红黑树避免退化为单链表根节点是黑色。一个节点是:红色。 那么叶子节点必须是黑色。也就是遍历的话,不存在2个连续节点为红色。黑高度必须相同。新插入的节点,必然是: 红色的。...原创 2021-04-14 16:25:26 · 153 阅读 · 0 评论 -
定时器的实现: 1.跳表 2.红黑树 3.时间轮
gcc skiplist.c sl-timer.c -I./ -o sl-timer./sl-timerg++ test.cc -o test./test1)红黑树2)时间轮3)跳表 zset 数据>=128时,数据用skiplist来存储。 redis有哪些事件需要定时器处理? key expire redis的是双向 链表的实现(无序的)。 优化: ...原创 2021-04-13 16:22:28 · 646 阅读 · 0 评论 -
协程的实现,及其我们为什么用协程
1)为什么要有协程?2)客户端的同步和异步 1.客户端的同步:发送一个请求,等待服务器端的返回。如:请求Redis,等待返回value 缺点: 每一秒钟客户端请求服务器的数量不会很多。 2.客户端的异步:不停的提交。 结论:客户端使用异步,速度远远快于同步。3)king式四元组: 1.init 2.commit 3.callback 4.destroy4)服务器端的同步与异步(以增加1000连接为例子) (...原创 2021-04-12 23:16:44 · 386 阅读 · 0 评论 -
远程通信协议原理:NIO(包括select、epoll),深刻理解epoll为什么叫做同步非阻塞(同步在于:服务器回执时客户端需要到内核空间去拷贝数据到用户空间 非阻塞在于:服务器不会卡在IO)
远程通信协议原理1)分布式: 在不同计算机上。2)切入: http协议的通信流程 DNS解析==》域名解析服务得到ip==》通过 ip地址去访问 CDN:网络缓存技术。放到离:客户资源最近的地方。 cdn.baidu.com 思考: 拿到ip地址后,如何建立连接和通信的? 通信协议: http是应用层协议,在tcp/udp之上。 还有:ftp、smtp、TelNet。 ...原创 2021-04-29 01:12:30 · 354 阅读 · 0 评论 -
1.ReentrantLock+Condition 2.CountDownLatch计数器 3.Semaphore限流 4.CyclicBarrier栅栏
并发工具基本原理及其使用1)Condition (1) synchronized + wait/notify/notifyall Lock + Condition(signal、signalall): 可以等待多线程,让等到满足了一定条件后,才被唤醒 (2) Lock lock=new ReentrantLock(); //重入锁 Condition condition=lock.newCondition(); ...原创 2020-09-19 22:08:08 · 218 阅读 · 0 评论 -
咕泡学院~JVM
----------------------1)JDK > JRE > JVM2)Person.java--->javac编译器(源码文件到类文件)-->Person.class-->交给JVM运行 (1)javac: 编译原理的知识,把源码文件进行:词法、语法、语法树、字节码生成器-->生成对应的字节码文件Person.class文件 Person.class 是一个二进制/16进制的表示方式--》我们看不懂,但是JVM能看懂。 ...原创 2020-11-04 00:25:35 · 466 阅读 · 0 评论 -
MyBatis应用分析与最佳实践
1)为什么要用MyBatis? (1)JavaEE的规范,用JDBC (2)JDBC的问题 代码重复:和业务逻辑无关的代码,十分重复。 结果集处理太复杂: 需要啊自动转化为Pojo对象,十分麻烦。 连接管理: 忘记关闭导致连接被消耗完毕 SQL语句的硬编码: sql和业务处理的代码放在一起,十分麻烦。 (3)现成的工具框架 ...原创 2020-09-26 10:05:54 · 187 阅读 · 0 评论 -
多线程可见性的本质(本质是:为了解决cpu、内存、硬盘之间速度不匹配增加缓存导致的)
线程安全性原理1)volatile 主线程里面改变的值,无法使得T1线程可见,导致依然退不出来。 volatile的目的在于:在多个处理器下,保证多个共享变量的可见性。 可见性: 别的线程修改的值,别的线程无法连读取到最新的值。 hsdis工具: 多了一个Lock的汇编指令。 基于总线或者缓存,达到可见性的目的。2)可见性到底是什么? --》硬件层面了解可见性的本质 CPU、内存、磁盘IO设备。 矛盾点: 3者之间的速度差异...原创 2020-09-13 23:49:13 · 589 阅读 · 0 评论 -
mongodb快速入门(咕泡学院)
1.什么是候选择mongoodb? 什么是候不用?2.orm3.分片、存储、恢复-----------------mongodb是什么? not only sql 在key,value的基础上,加上结构化的约束。 mongodb是一个最像关系型数据库的非关系型数据库。关系型数据库: 事务 表关联 表结构约束非关系型数据库: 无事务,性能会大大提高。 数据与数据之间没有关联,都是独立的。 key-value,无结构约束。...原创 2021-05-22 20:16:53 · 284 阅读 · 0 评论 -
01.分布式架构的发展及演进
1)springcloud alibaba dubbo、RocketMQ2)SpringCloud NetFix3)去IOE(IB、Oracle、Emc)4)分/合--》有序化重构 userId、user_id、user 用户中心 迫切需要解决的问题,拆分和组合==》子系统或者模块或者组件进行拆分。5)业务架构、技术架构(中间件) 抽象思维6)电商 用户(注册、登陆) 商品(商品查询) 交易(下单、支付)v1:...原创 2021-04-27 00:34:56 · 111 阅读 · 0 评论 -
RabbitMQ
1)MQ的诞生 (1)以前的软件那都是点对点的. (2)有没有软件是:专门用于通信的呢?就像一个Bus,于是开发了TIB,用于金融领域。 主要实现了生产和消费者,发布订阅模型。 2)JMS的规范。 缺点是与Java语言绑定的。3)AMQP: 跨语言的。才真正促进了MQ的发展。 07年Rabbit公司,用ErLang开发了。 淘宝在使用RocketMQ之前,也是RabbitMQ。 是应用层的协议。4)MQ的本质 (1...原创 2020-11-29 22:13:13 · 165 阅读 · 0 评论 -
ConcurrentHashMap的原理分析
1)ConcurrentHashMap的原理分析 (1)Collections.SynchronizedMap: 把不安全的集合变为不安全的 (2)2个API put:putVal get (3)Spring Bean (4)怎么去解决并发安全的问题的: 并发安全 + 效率 (5)分段锁:1.7 1.8: 变化1:取消分段segment 变化2:数组+单向链表--》数组+单向链表+红黑树 (...原创 2020-09-20 22:46:16 · 139 阅读 · 0 评论 -
Spring源码的前生今世及其源码构建
1)Spring的前生今世 (1)如果没有Spring,你将怎样开发? 造轮子 servlet+jsp 2)Spring不仅只是一个框架,而是一种生态 依赖管理 事物 aop 插件机制,万能胶,粘合剂 3)基于java设计4)Bean-->BOP: 面向Bean编程5)Java: 把逻辑封装为Bean OOP通过Java发扬光大 Spring在OOP的基础上,发扬光大 J...原创 2020-09-09 01:22:41 · 162 阅读 · 0 评论 -
springcloud服务调用与熔断
独立思考的能力和精神。空杯心态:不要觉得自己厉害。不要觉得别人不懂。“横空出世”:这代人和上代人的区别。技术的套路: 注册与发现。 代理。IOC: 大的map。 就是一个原则性的问题:谁来管理这些bean。Feign整合。Hystrix暂时听不懂,不要放弃,要有点追求。加强学习。万变不离其宗。高精尖--》培养。劝退:java没那么简单,但是也没有那么个程度。corba:发明60周年。退休了。rpc:你问我答。流式的方式: 其实...原创 2021-05-09 09:39:49 · 145 阅读 · 0 评论 -
ThreadLocal原理分析
1)什么是线程安全? 多个线程调用这个方法,对数据修改时,多个线程看到的数据是一致的。2)做线程隔离 提供了一个线程范围的局部变量,使得某个共享资源的变量是独立的。3)使用 (1)synchronized可以去加锁 (2)ThreadLocal<Integer> num = new ThreadLocal<>(){ protected } 每个线程去拿到的值,都是线程级别隔离的,都是拿到...原创 2020-09-22 23:51:50 · 670 阅读 · 1 评论 -
青山~深入理解mysql
----------------1)脑图整理2)快速复习3)生产版本还是以5.7版本4)带着问题去学习----------------1)行锁-----------------查询语句 + 更新(增删改) 是如何实现的?-----------------1)一条查询语句是怎么执行的?(什么样的模块(名字)做了什么事情) 1.首先是建立一个tcp连接。 自带的客户端是用的文件。 show global status like 'Thread%';...原创 2020-11-03 18:52:16 · 424 阅读 · 0 评论 -
300行代码手写提炼Spring的核心原理
1)不是调试源码,也不是给源码增加注释2)理解设计思想-----------------------------1)如何下手,从哪里看? web.xml开始: 配置了DispatchServlet extends HttpServlet init 初始化(入口) service 浏览器输入url的时候,会由web容器调用service doGet ...原创 2020-09-11 00:36:52 · 140 阅读 · 0 评论 -
JUC的基础:AQS底层原理分析
juc1)synchronized实践中的问题: 锁的获得、锁的释放,不够灵活--》Lock的出现2)Lock是一个接口: 意味着这是一个标准,有很多种实现。 重入锁,读写锁。3)ReentrantLock: 重入的含义:获得锁时,再次去获得锁,只用记录次数就行,而不会阻塞。 synchronized 和 ReentrantLock 重入是为了解决死锁问题的。4) AQS Sync...原创 2020-09-17 01:04:21 · 389 阅读 · 0 评论 -
synchronized和volatile实现原理
1)只有锁抢占时,才BlockED,如:synchronized方法,t1获得了锁,t2返回的状态则是Blocked2)waiting: wait join LockSupport.park3)jps: 显示所有的Java进程4)jstack 848700(线程id)5)start: start-->start这个是native方法------------------------多线程原理分析------------------------1)线...原创 2020-09-13 02:02:52 · 233 阅读 · 0 评论 -
Java游戏服务器9:ansible+jenkins: 集群服务器线上部署
1)部署jar包的shell脚本指定了最大的堆内存: 2G2)用PowerShell远程登录发布服务器远程登录的原理是:配置了ssh免密登录。3)免密登录配置(以机器A座位发布机器,元和才能登录BC为例子)在A中生成公钥在B机器上查看公钥把A中生成的公钥粘贴到B机器上4)playbook通过配置yaml的方式自动化部署脚本运行...原创 2021-02-24 11:03:04 · 232 阅读 · 0 评论 -
Java游戏服务器8:分布式游戏日志处理: Filebeat(搜集日志到ES) + ES + Kibana(从es捞出来日志,前端的形式展现出来)
问题:用户登陆1服有日志,登陆2服也有日志,需要跨服务器。之前log4j+socket,但是很麻烦目标:通过一个简单的管理界面,管理所有服务器的日志。从elk官网上下载filebeat,修改下配置文件,告诉es和kibana在哪里在kibana上可以捞到所有的日志2)Filebeat到ELK下载...原创 2021-02-25 00:13:54 · 245 阅读 · 0 评论 -
Java游戏服务器7(课程总结)
Java: 内存管理基本不用管。死板,但是不华丽花哨。C++写宏定义之类的,每个人写的,看不懂。Java则是一个统一的标准,容易协作。js的也是每个人风格不一样,就会导致看不懂。处理业务: 千万不要在线程之间跳来跳去。 那么IO实在是没有办法了,因为不能再主线程中做,所以只能在跳出IO线程。在IO线程里面处理逻辑,基本上都能定位到代码。多线程并发处理业务逻辑,基本就无解了,是很麻烦的。看病去了,先去拍片子,回来后,再次回到队尾排队。回到主线程时,需要知道之前是哪个IO线程..原创 2021-02-25 00:15:02 · 166 阅读 · 0 评论 -
Java游戏开发6(RocketMQ+Redis将排行榜功能独立出来)
1)排行榜的需求: 在未来扩展功能,修改代码,则需要重启服务器。 事故: 到点了, 没有发放奖励。 修复辅助业务的代码,不影响主业务。2)架构 Redis 游戏服务器 排行榜进程 RocketMQ3)游戏服务器是生产者,往MQ中扔; 排行榜从MQ中取出,然后计算结果,扔到Redis; 游...原创 2021-02-07 00:16:05 · 360 阅读 · 0 评论 -
Java游戏服务器5
来自谷歌的面试题: 死神杀人。 没有计划,随便猜一个; A计划: 50~75%的概率; 99.5%的概率生存--》但是也可能全都死;1)单线程方案 单线程? 不会慢么? 解决慢,要比教会所有人跨线程写逻辑简单; 架构师的工作是取舍和折中,不要炫技; 项目框架越简单,适用性就越广; 可以出错,但是错误不要向下传递; 2)游戏的单线程方案 问题的提出: A和B都打C,那么可能引起死锁。 加锁的...原创 2021-02-06 20:06:20 · 341 阅读 · 1 评论 -
Java游戏服务器4
1)消息识别器: 根据消息号,创建一个Builder。2)javassist:动态修改字节码。==》用于ormtest 原生反射很慢,那我可以用javaassist来加速 3)一些框架没有实现类,是怎么实现出来的。4)多线程与IO5)先讲解移动。 攻击的话,就是涉及到多线程的问题。6)A和B同时攻击C时,A和B 分别在自己的线程,因此有并发访问安全的问题。7)多个线程操作同一份数据,数据不一致的问题。解决方案 (1)加锁 synchroniz...原创 2021-02-04 21:34:30 · 186 阅读 · 1 评论 -
Java游戏服务器3
1)编码 消息长度(short int-->2个字节) + 消息编号(short int--》2个字节) + 消息体2)Protobuf协议文档 (1)syntax="proto3"; (2)命名格式 XxxCmd: UserEntryCmd XxxResult: UserEntryResult (3)定义 enum { } message xxx { } ...原创 2021-01-29 23:03:57 · 160 阅读 · 0 评论 -
Java游戏服务器2
1)走动和攻击就OK了,没有物理的运动2)长连接与短连接 长: 游戏服务器 可以主动推送数据 插损胡二进制数据 协议自己cuan 占用资源多 短: Web服务器 传输文本数据 HTTP、HTML 占用资源相对较少3)消息协议 编解码: 编码--》二进制流--》解码4)新建项目 (1)org.tinygame ...原创 2021-01-23 13:20:37 · 199 阅读 · 1 评论 -
Java游戏服务器1
1)军团战 与 跨服战 单服架构: 多台服务器。 1号和2号服务器谁也不管谁的事。 但是也要支持跨服,1服和2服之间打架。 新服务器,不充钱了,再次导入新用户来玩。 谁也不服谁,就可以做跨服战的功能。大R,中R,小R 大服架构: 皇室战争,部落冲突。 不选服务器。 但是后端服务器是集群的。 玩家数据是相通的,从玩家的角度看是比较简单的。2)世界系统: 等级比...原创 2021-01-23 09:51:36 · 561 阅读 · 0 评论