自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

gonefuture的学习博客

不断地学习,不断地发现!

  • 博客(69)
  • 收藏
  • 关注

原创 MQ基础知识点

MQ基础介绍核心概念Topic生产者消费者消息属性:生产者可以为消息定义的属性,包含Message Key和Tag。Group:一类生产者或消费者,这类生产者通常生产或消费同一类消息,且消息发布或订阅的逻辑一致。消息类型普通消息事务消息:实现类似X/Open XA的分布事务功能,以达到事务最终一致性状态。定时和延时消息:允许消息生产者对指定消息进行定时(延时)投递,最长支持40天。顺序消息:允许消息消费者按照消息发送的顺序对消息进行消费。MQ应用场景交易系统红包秒杀关

2022-04-06 21:56:19 1565

原创 kafka re-blance 重平衡、堆积、自动提交

由一次kafk数据堆积说起因为公司的项目是由一个第三方的旧系统迁移过渡开发过来的,而且时间很急,所以有许多数据需要修正。为了不影响线上的业务,修复数据的逻辑是在另一个应用的,可以通过管理系统圈定数据范围,然后发送到kafka。但是某一天kafka上的数据一直在堆积,高峰期一直下不去。查询了很多日志,发现很多消费者的消费速度异常地慢,而且存在重复消费的情况(业务上是允许重复消费)。最后发现kafka不断地在重平衡,导致数据一直不能尽快被消费。那么,是什么导致了系统频繁重平衡呢?重平衡的作用要想知道什

2022-03-30 18:14:03 3379

原创 AOP-实现一个自定义缓存失效注解

AOP实现自定义注解,Spring

2022-03-17 21:48:01 819

原创 Mybatis一级缓存 返回值对象引用

一个线上的诡异问题同事在排查一个线索问题时,发现一个方法获取的数据里会有几个相同的数据。理论上来说,这个方法里一次数据库查询只会是不会相同的数据的。代码如下:/**一个从数据库中查询并返回列表的方法 * @param mobile * @param group * @return */protected List<BzClue> getAllInActionClue(String mobile, String group, String column) { BzFus

2022-03-14 11:48:05 1912 1

原创 Elasticsearch基础

简介Elasticsearch 是一个实时的分布式搜索分析引擎,它能让你以前所未有的速度和规模,去探索你的数据。 它被用作全文检索、结构化搜索、分析以及这三个功能的组合:Wikipedia 使用 Elasticsearch 提供带有高亮片段的全文搜索,还有 search-as-you-type 和 did-you-mean 的建议。卫报 使用 Elasticsearch 将网络社交数据结合到访客日志中,为它的编辑们提供公众对于新文章的实时反馈。Stack Overflow 将地理位置查询融入全文检

2022-03-03 11:28:07 1481

原创 网游游戏背包设计

网游游戏背包设计背包业务需求物品唯一id格子的数据结构数组结构背包查找背包变化背包整理和排序map结构背包查询背包变化背包业务需求网络游戏游戏背包的表现为一堆格子,格子可以空着,也可以被物品填充。背包的情况储存情况可以被持久化。一个物品占一个格式一个物品占多个各种物品唯一id如果背包系统比较简单,可以只用物品配置id和物品数量来表示背包中的物品。但是很多情况下背包里会有许多物品配置id相同的物品,物品可能还会附加一下特殊属性。所以游戏中物品的唯一id就显得很有必要。格子的数据结构数

2020-06-03 18:31:00 3343 1

原创 Executors.newSingleThreadScheduledExecutor异常后执行停止,不显示任何报错信息

title: 2019-1-14-开发笔记 Executors.newSingleThreadScheduledExecutortags: [java]categories:开发笔记Executors.newSingleThreadScheduledExecutor异常后执行停止,不显示任何报错信息问题使用newSingleThreadScheduledExecutor作为场景...

2019-01-14 16:28:33 4572 1

原创 Netty, SpringBoot, MyBatis搭建游戏服务器 - 1

netty SpringBoot myBatis

2018-09-19 17:02:42 5616 6

原创 《Netty实战》-第五章-ByteBuf

《Netty实战》-第五章-ByteBuf5.1 ByteBuf的APINetty的数据处理API通过两个组件暴露—abstract class ByteBuf和interface ByteBufHolder。 下面是一些ByteBuf API的优点:他可以被用户自定义的缓冲区类型扩展通过内置的复合缓冲区类型实现了透明的零拷贝容量可以按需增长(类似于JDK的String...

2018-09-13 17:08:30 400

原创 零碎的知识点-6

零碎的知识点-6JVM性能调优监控工具jps、jstack、jstat、jmap、jinfo使用详解jps 查看所有的jvm进程,包括进程ID,进程启动的路径等等。jstack 观察jvm中当前所有线程的运行情况和线程当前状态。例,jmap -heap 5966。 在程序崩溃或卡住的时候,查看java stack和native stack的信息。jstat jstat...

2018-09-10 10:37:10 149

原创 网游服务器架构变迁

一、早期网游服务器 网游刚出现的时候,游戏服务器和小Web服务器没有区别。 从《传奇》的时代开始,游戏服务器内部就出现了游戏逻辑,既能用于同步每个玩家看到的世界,又能让逻辑与客户端分离,避免早期的网络游戏那种毫无防范的逻辑体系(对外挂防御能力为0)。这种服务器在客户端通过某种形式验证登陆以后,就和服务器通过TCP直接连接了。这种服务器的承载能力不高。靠多开服务器来弥补单...

2018-08-28 10:42:47 313

原创 暗黑类游戏的设计概念

《暗黑破坏神》已面世20年了,但是它的带来的游戏设计概念依旧在影响着现在很多游戏。游戏设计总览 暗黑破坏神是一款角色扮演游戏,其中玩家将会创建一个独立的角色并引领他在地牢副本中去尝试寻找和消灭暗黑破坏神——恶魔本质。游戏进程都将发生在一个四方之三等距的视角(六十度倾斜的游戏画面视角,也有称为四五度视角),由棱形广场平台组成的空间,如图。 整个游戏由一个基于回合的系统开展,玩家...

2018-08-28 10:38:48 1889

原创 零碎的知识点-5

零碎的知识点-5AOP的实现方式AOP是Aspect Oriented Programming的缩写,意思是面向方面编程。Java可以通过三个层面来实现AOP:在编译期修改源代码在运行期字节码加载前修改字节码 0在运行期字节码加载后动态创建代理类的字节码各种实现机制的比较: 类别 机制 原理 优点 缺点 实现的代表 静态AO...

2018-08-27 18:19:20 179

原创 《Java并发编程实战》-10

第11章 性能与可伸缩性11.1 对性能的思考11.1.1 性能与可伸缩性 可伸缩性指的是:当增加计算资源时(例如CPU、内存、存储容量或I/O带宽),程序的吞吐量或处理能力能相应地增加。11.1.2 评估各种性能权衡因素 避免不成熟的优化。首先使程序正确,然后提高运行速度–如果它还运行得不够快。以测试为基准,不要猜测。11.2 Amda...

2018-08-21 18:05:56 114

原创 《Java并发编程实战》-9

第10章 避免活跃性危险10.1 死锁哲学家问题10.1.1 锁顺序死锁 如果所有线程以固定的顺序来获得锁,那么在线程中就不会出现锁顺序死锁问题。10.1.2 动态的顺序死锁通过锁顺序来避免死锁10.1.3 在协助对象之间发生的死锁如果在持有锁时调用某个外部方法,那么将出现活跃性问题。在这个外部方法中可能会获取其他锁(这可能会产生死锁),或...

2018-08-21 18:04:25 366

原创 《Java并发编程实战》-8

图形用户界面应用程序9.1 为什么GUI是单线程的9.1.1 串行时间处理9.1。2 Swing中的单线程封闭机制 Swing的单线程规则是:Swing中的组件以及模型只能在这个事件分发线程中进行创建、修改以及查询。9.2 短时间的GUI任务模型对象与视图对象的控制流Created with Raphaël 2.1.2EDT鼠标点击动作事件...

2018-08-21 18:01:02 134

原创 《Java并发编程实战》-7

线程池的使用8.1 在任务与执行策略之间的隐形耦合并非所有的任务有些任务需要明确地指明执行策略,包括:依赖性任务使用线程封闭机制的任务。对应时间敏感的任务。使用ThreadLocal的任务 在一些任务中,需要拥有或排除某种特定的执行策略。如果某些任务依赖于其他的任务,那么会要求线程池足够大,从而确保它们依赖任务不会被放入等待队列中或者被拒绝,而采用线程封闭机制的任...

2018-08-21 18:00:10 145

原创 《Java并发编程实战》-6

取消与关闭行为良好的软件能够完善地处理失败,关闭和取消等过程。7.1任务取消取消某个操作的原因:用户请求取消有时间限制的操作应用程序时间错误关闭7.1.1 中断在Java的API或语言规范中,并没有将中断与任何取消语言关联起来,但实际是激昂,如果在取消之外的其他操作中使用中断,那么都是不合适的,并且很难支撑起更大的应用。public clas...

2018-08-21 17:58:59 113

原创 《Java并发编程实战》-5

《Java并发编程实战》-56.1.1 串行地执行renwu6.1.2 显式地为任务创建线程6.1.3 无限制创建线程的不足线程生命周期的开销非常高。资源消耗。稳定性。6.2 Executir框架6.2.1 示例:基于Executor的Web服务器6.2.2 执行策略 每当看到new Thread(runnable).start(...

2018-08-21 17:58:02 147

原创 零碎的知识点-4

零碎的知识点-4select、poll、epoll之间的区别总结select、poll、epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而...

2018-08-21 16:42:32 216

原创 《Java并发编程实战》-3

对象的组合4.1 设计线程安全的类在设计线程安全类的过程中,需要包含一下三个基本要素:找出构成对象状态的所有变量。找出约束状态变量的不变性条件。建立对象状态的并发访问管理策略。4.1.1 收集同步需求 如果不了解对象的不变性与厚颜条件,那么就不能确保线程安全性。要满足在状态变量的有效值或状态转换上的各种约束条件,就需要结组于原子性和封装性。4.1....

2018-08-14 16:43:33 222

原创 《Java并发编程实战》-4

《Java并发编程实战》-45.1 同步容器类Collections.synchronizedXxx等工厂方法创建的同步实现线程安全的方式是:将它们的状态封装起来,并对每个公有方法都进行同步,使得每次只有一个线程能访问容器的状态。5.5.1 同步容器的问题在使用客户端加锁的Vector上的复合操作public static Object getList(Vector...

2018-08-14 16:39:41 462

原创 零碎的知识点-3

零碎的知识点-3TCP拥塞控制-慢启动、拥塞避免、快重传、快启动一般原理:发生拥塞控制的原因:资源(带宽、交换节点的缓存、处理机)的需求&amp;amp;amp;amp;gt;可用资源。作用:拥塞控制就是为了防止过多的数据注入到网络中,这样可以使网络中的路由器或者链路不至于过载。拥塞控制要做的都有一个前提:就是网络能够承受现有的网络负荷。对比流量控制:拥塞控制是一个全局的过程,涉及到所有的主机、路由器、以及降...

2018-08-14 15:43:43 142

原创 Java常用的排序算法

title: 排序算法 tags: [java] [算法] categories: - 算法Java常用的排序算法1. 直接插入排序直接插入排序(Straight Insertion Sorting)的基本思想:在要排序的一组数中,假设前面(n-1) [n&amp;gt;=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环...

2018-08-08 16:08:04 192

原创 《Java并发编程实战》-2

对象的共享3.1 可见性在没有同步的情况下,编辑器、处理器以及运行时等都可能对操作的执行顺序进行一些意想不到的调整。在缺乏足够同步的多线程程序中,想要对内存操作的执行顺序进行判断,几乎无法得出正确的结论。3.1.1 失效数据线程安全的可变整数类@ThreadSafepublic class SynchronizedInteger { @GuardedBy(...

2018-08-07 20:47:10 956

原创 《Java并发编程实战》-1

第2章 线程安全性2.1 什么是线程安全性 当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程架构如何交替执行,并且在主调用代码中不需要任何额外的同步或协同,这个类都表示出正确的行为,那么就称这个类是线程安全。 在线程安全类中封装了必要的同步机制,因此客户端无需进一步采用同步措施。 无状态对象一定是线程安全的。2.2 原子性2....

2018-08-07 17:46:39 141

原创 《Eeffective Java》读书笔记 - 第三章 对于所有对象都通用的方法

第三章 对于所有对象都通用的方法2018年7月10日17:57第8条:覆盖equals时请准守通用的约定 不覆盖equals方法的情况:类的每个实例本质上都是唯一的。 不关心类是否提供了“逻辑相等的测试功能“。 超类已经覆盖了equals,从超类继承过来的行为对于子类也是合适的。 类时私有的或是包级私有的,可以确定它的的equals方法永远不会被调用。 覆盖eq...

2018-08-07 17:17:37 173

原创 零碎的知识点-2

零碎的知识点-2死锁及其解决方案(避免、预防、检测)死锁产生的原因因竞争资源发生死锁 现象:系统中供多个进程共享的资源的数目不足以满足全部进程的需要时,就会引起对诸资源的竞争而发生死锁现象。死锁的四个必要条件:互斥条件:进程对所分配到的资源不允许其他进程进行访问,若其他进程访问该资源,只能等待,直至占有该资源的进程使用完成后释放该资源请求和保持条件:进程获得一定...

2018-08-06 16:56:56 185

原创 零碎的知识点-1

零碎的知识点-1二叉排序树二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于 它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于或等于 它的根结点的值; (3)左、右子树也分别为二叉排序树; (4)没有键值相等的节点。 中序遍历可以得到二叉排序树的有序序列 40 / \ ...

2018-08-02 20:58:48 221

原创 《Thinking in Java 》读书笔记-17

《Thinking in Java 》读书笔记-1717.1 完整的容器分类法17.2 填充容器Collections.nCopies()和Collection.fill()都可以用单个对象的引用来填充Collection,并且所有引用都被设置为指向相同的的对象。 fill()方法的用处更为有限,它只能替换已经在List中存在的元素,而不能添加新的元素。17.2.1 ...

2018-08-01 21:05:32 170

原创 《Thinking in Java 》读书笔记-11

第11章 持有对象11.1 泛型和类型安全的容器1.2 基本概念CollectionMapList1.3添加一组元素构建一个不包含元素的Collection,然后调用Collection.addAll()这种方式,运行速度快,也比较方便,是首先方式。使用Array.asList()可以使用显式类型参数说明产生的List的实际的目标类型。1.4 容器的...

2018-07-31 21:07:00 159

原创 《Eeffective Java》读书笔记 - 第二章 创建和销毁对象

第二章 创建和销毁对象2018年7月9日19:12第一条:考虑用静态工厂方法代替构造器 静态工场方法与构造器不同的优势:    他们有名称。 当一个类需要多个带有相同签名的构造时,就用静态工厂方法代替构造器。不必每次调用他们的时候都创建一个新对象。 Flyweight模式,实例受控类他们可以返回原返回类型的任何子类型的对象。 基于接口的框架,服务提供者框架...

2018-07-16 19:50:56 148

原创 java NIO 非阻塞I/O编程

java NIO

2018-05-13 15:39:06 371

原创 设计模式 --- Singleton模式(单例模式)

设计模式 — Singleton模式(单例模式) 只有一个实例想确保任何情况下都绝对只有一个实例想在程序上表现出”只存在一个实例” 只生成一个实例的模式被称作Singleton模式.Singleton是指只含有一个元素的集合.单例模式可以分为懒汉式和饿汉式:懒汉式单例模式:在类加载时不初始化饿汉式单例模式:在类加载时就完成了初始化,所以类加载比较慢,但获取对象的速度快。实例程序

2018-05-03 21:51:11 116

原创 设计模式 -- Factory Method 模式(工厂方法模式)

设计模式 – Factory Method 模式 将实例生成交给子类 在Facotry Method模式中,父类决定实例的生产方式,但并不决定所要生产的具体的类,具体的处理全部交给子类负责.这样就可以将生产实例的框架(framework)和实际负责生产实例的类解耦.代码实现下面的例子的作用是制作身份证(ID卡)生成实例的框架(framework包)/** * <pre>框架 Cre

2018-05-03 18:04:23 113

原创 scala 隐式转换

scala 隐式转换 隐式转换就是:当Scala编译器进行类型匹配时,如果找不到合适的候选,那么隐式转化提供了另外一种途径来告诉编译器如何将当前的类型转换成预期类型。使用方式: - 将方法或变量标记为implicit - 将方法的参数列表标记为implicit - 将类标记为implicit隐式值:用于给方法提供参数// 声明一个带有implicit修饰过参数的方法def person

2018-05-02 21:56:13 137

原创 设计模式 -- Adapter模式(适配器模式)

设计模式 – Adapter模式(适配器模式) 用于填补”现有程序”和”所需程序”之间差异的设计设计模式类适配器模式(使用委托的适配器)package xin.gonefuture.adapter.adapterUseDelegation;/** * <pre> * <h1>适配器模式</h1> * - 类适配器模式(使用继承的适配器) * - 对象适配器模式(

2018-05-01 19:00:47 111

原创 使用spark ML创建机器学习流水线,ml包和mllib包的区别

使用spark ML创建机器学习流水线,ml包和mllib包的区别spark中ml包和mllib包的区别mllib,主要针对RDDml,主要针对dataSet - 建议使用ml,它比mllib新,而且dataSet可用spark SQL操作,比较灵活.下面是一个机器学习的Demo,使用DataFrame作为数据集package edu.zhku.mllib.baseimport org.a

2018-04-30 23:31:45 855

原创 使用Spark streaming 获取 kafka的json数据分析并用Hbase保存结果

使用Spark streaming 连接 kafka分析并用Hbase保存结果kafka发送的数据是json格式{"userId":20400,"day":"2017-03-01","begintime":1488326400000,"endtime":1488327000000,"data":[{"package":"com.browser1

2018-04-23 22:17:36 8503 8

原创 基于vert.x与webSocket的简单聊天系统

基于vert.x与webSocket的简单聊天系统使用vert.x和webSocket的简单聊天实现主要的verticlepackage com.zhku.analysis.service;/* * @author : * @version : 2018/4/22 21:00. * 说明: */import io.vertx.core.AbstractV...

2018-04-23 22:00:08 1522

空空如也

空空如也

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

TA关注的人

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