自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(77)
  • 资源 (6)
  • 问答 (1)
  • 收藏
  • 关注

原创 简单的死锁例子

package com.xmg.lock;/*** @author 作者 : xuminggang* @version 创建时间:2020年8月24日 上午11:41:33* * * 简单的死锁例子,容易发生死锁*/public class SimpleDeadLock { private final Object left = new Object(); private final Object right = new Object(); public void leftRig.

2020-08-24 11:45:24 25

原创 Collections.sort多字段排序

Collections.sort(yProducts, new Comparator<CardHeroStoreProductInfo>(){ @Override public int compare(CardHeroStoreProductInfo p1, CardHeroStoreProductInfo p2) { int c = 0; //首先按照state由小到大排序 c = p1.getState() - p2.getSt.

2020-07-31 14:56:14 136

原创 笔试ledao

JAVA 部分equals()方法是用来干嘛的?它和有什么不同?重载equals的时候一般还会重载哪个函数,为什么答:(1)equals()方法是Object的方法,通过覆盖该方法可以判断两个对象是否相等。(2) 是用来判断基本类型的值是否相等或判断对象的地址是否相等。(3)重载equals时候还会重载hashcode,可能出现两个对象“相等”,但是hashcode不一样导致不相等的情况。比如,往set里加入10个自定义类,自定义类重载了equals方法,未重载hashcode,则它的大小就为1

2020-07-05 22:05:51 54

原创 根据ReentrantLock和Condition创建阻塞队列

package com.test.day;import java.util.ArrayList;import java.util.List;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;/** * 写一个自定义阻塞队列,根据ReentrantLock和Condition */public class MyBlockingQueue<E> {

2020-07-05 11:20:48 51

原创 CountDownLatch的理解和例子

CountDownLatch内部通过共享锁实现。在创建CountDownLatch实例时,需要传递一个int型的参数:count,该参数为计数器的初始值,也可以理解为该共享锁可以获取的总次数。当某个线程调用await()方法,程序首先判断count的值是否为0,如果不会0的话则会一直等待直到为0为止。当其他线程调用countDown()方法时,则执行释放共享锁状态,使count值 - 1。当在创建CountDownLatch时初始化的count参数,必须要有count线程调用countDown方

2020-07-01 22:12:42 62

原创 线上问题总结------跨服状态改变问题

游戏中有各种跨服活动,在大部分战斗中没有出现问题,但是在擂台赛出现了选择。刚开始查看觉得是客户端问题,其实确实是中心服服务器的问题。消息发到中心服后,在中心服改变了武将的状态,但是在发送回游戏服时,出现了characters为空,直接返回。if ( this.getType() != BattleType.BATTLE_TYPE_SUPREME ) { if (characters.isEmpty()) { return; } }...

2020-06-30 18:19:06 51

原创 BIO、NIO、AIO

BIO-会产生阻塞NIO-非阻塞单线程模型-轮询模式--相当于selector负责client的连接并负责client的读写package com.xmg.nio;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import...

2020-06-25 08:44:44 47

原创 java如何停止一个正在运行的线程

停止一个线程意味着在任务处理完任务之前停掉正在做的操作,也就是放弃当前的操作。停止一个线程可以用Thread.stop()方法,但最好不要用它。虽然它确实可以停止一个正在运行的线程,但是这个方法是不安全的,而且是已被废弃的方法。在java中有以下3种方法可以终止正在运行的线程:使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。 使用stop方法强行终止,但是不推荐这个方法,因为stop和suspend及resume一样都是过期作废的方法。 使用interrupt方法中断线程。1. 停

2020-06-23 10:48:50 258

原创 Mysql 聚集索引和非聚集索引区别

1)聚集索引和非聚集索引区别------------聚簇索引和非聚簇索引区别1.在InnoDb中主键索引即为聚集索引,数据存储在B+树的叶子节点,索引和数据放在一起2.非聚集索引:指的是非主键索引,非主键索引叶子节点数据存储的是主键索引的ID,真实数据没有和索引放一起2)为什么非主键索引存储的是主键索引非真实数据为了数据的一致性,对一个索引数据进行修改将会导致其他索引也修改,需要改很多地方,开销大。占用磁盘空间。通过时间换空间...

2020-06-18 22:44:39 130

原创 FutureTask源码分析

1.7个状态

2020-06-14 19:54:51 39

原创 FutureTask源码分析-重点方法

FutureTask源码分析1.FutureTask的7中状态转换2.重点方法分析1.get()2.run()3 cancel()3 举例代码1.FutureTask的7中状态转换​​2.重点方法分析1.get()/** * @throws CancellationException {@inheritDoc} */ public V get() throws InterruptedException, ExecutionException { int s = state; /

2020-06-14 19:54:05 50

原创 package io.netty.handler.codec.ReplayingDecoder

package xmg.quest.netty.core;/*** @author 作者 : xuminggang* @version 创建时间:2020年6月8日 上午10:05:15* */import io.netty.buffer.ByteBuf;import io.netty.buffer.Unpooled;import io.netty.channel.ChannelHandler;import io.netty.channel.ChannelHandlerContext;.

2020-06-09 10:13:47 81

原创 AtomicIntegerFieldUpdater要点总结

1.更新器更新的必须是int类型变量,不能是其包装类型。2.更新器更新的必须是volatile类型的,确保线程之间共享变量时的立即可见性。3.变量不能是static的,必须是实例变量。因为Unsafe.objectFieldOffset()方法不支持静态变量(CAS操作本质上是通过对象实例的偏移量来直接进行赋值)。4.更新器只能修改它可见范围的变量,因为更新器是通过反射来得到这个变量,如果变量不可见就会报错。如果要更新的是包装类型,那么可以使用AtomicReferenceFieldU.

2020-06-03 14:36:11 51

原创 package io.netty.util.ReferenceCounted

package xmg.quest.netty.core;/** * 一个引用计数对象需要显式的回收 * <p> * 当一个新的{@link ReferenceCounted} 被创建好,这个对象的引用计数就是{@code 1}。 * 调用{@link #retain()}方法会增加这个引用计数,调用 {@link #release()}会减少这个引用计数。 * 当引用计数减少到 {@code 0},这个对象会被显式的回收,如果去访问一个已经被回收掉的对象通常会导.

2020-06-02 18:23:55 44

原创 jvm-java虚拟机栈详解

java虚拟机栈虚拟机栈存储内容栈帧Local Variables 局部变量表Operand Stacks 操作数栈Dynamic Linking 动态链接Invocation/Completion 方法返回地址例子对java文件进行分析对calc()方法分析虚拟机栈存储内容栈帧每个栈帧对应一个被调用的方法,可理解为一个方法的运行空间。Local Variables 局部变量表方法中定义的局部变量及方法的参数局部变量表中的变量不可直接使用,如需使用,必须通过相关指令将其加载至操作数栈中作为操作

2020-05-27 15:37:46 83

原创 UDP校验和计算-理解和java实现

UDP校验和计算UDP概述UDP首部UDP计算校验和UDP实际例子UDP概述UDP是User Datagram Protocol的简称,中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,UDP在IP报文的协议号是17。UDP首部用户数据报UDP有两个字段:数据字段和首部字段。首部字段很简单,只有8个字节,有四个字段组成,每个字段的长度都是两字节。各段意义如下:源端口:源端

2020-05-20 14:58:09 233

原创 LinkedHashMap深入理解

LinkedHashMap可以是:保持插入顺序的LinkedHashMap 和 保持访问顺序的LinkedHashMap,其中LinkedHashMap的默认实现是按插入顺序排序的。head为最先插入的节点,tail为最后插入的节点,插入新节点后tail会指向新节点,前驱索引:before后继索引:after...

2020-05-19 14:47:13 33

原创 Effective java 读书记录

37条:标记接口(marker interface)是没有包含方法声明的接口,只是指明(或“标明”)一个类实现了具有某种属性的接口。优点1:标记接口定义的类型是由被标记类的实例实现的;标记注解则没有定义这样的类型。优点2:标记接口可以更精确地进行锁定如果标记只应用给类和接口,就要分析要编写一个还是多个只接受有这种标记的方法,这种应该优先使用标记接口41条: 当一个子类包含的方法声明与祖先类中的方法声明具有同样的签名时,方法就被覆盖了,就是重写了,调用重写是在运行时决定的重载:是在一个类中,

2020-05-16 22:00:59 49

原创 HTTP-响应状态码

http响应状态码 状态码 英文解释 中文解释 理解 200 ok 正常 正常返回 204 206 Partial Content 部分内容 范围请求返回 301 Moved Permanently 永久重定向 以后使用新的uri 302 Found 临时性重定向 临时的,希望客户端本次使用新的uri访问 304 No...

2020-05-14 18:25:45 129

原创 二叉树的创建及非递归遍历

这里写目录标题二叉树创建二叉树先序遍历二叉树中序遍历后序遍历层序遍历辅助方法main方法二叉树创建/** * 递归构建二叉树 * * @param arr * @param index * @return */ private static TreeNode createTree(String[] arr, int index) { TreeNode tn = null; if (index < arr.length) { if (arr[index].e

2020-05-14 18:17:59 60

原创 java 通过字符串建立二叉树

package mian.erchashu;/** * 给定字符串建立二叉树 空节点用null表示 * * @author xuminggang * */public class StringToBinaryTree { public static void main(String[] args) { TreeNode root = stringToTree("[3,9,20,2,null,15,7]"); new StringToBinaryTree().preOrder(r

2020-05-14 11:18:56 467

原创 启动tomcat报错,尝试source下

启动tomcat报错:apache-tomcat-7.0.72/bin/catalina.sh: line 108: JAVA_OPTS: command not foundNeither the JAVA_HOME nor the JRE_HOME environment variable is definedAt least one of these environment variable is needed to run this program尝试用:source /etc..

2020-05-13 11:21:35 54

原创 PriorityQueue源码分析

PriorityQueue分析常量插入操作 add()poll() 获取并删除实例常量/** 默认初始化队列长度 */ private static final int DEFAULT_INITIAL_CAPACITY = 11; /** * 优先队列表示为一个平衡二叉堆:queue[n]节点的两个子节点 * 是queue[2*n+1]和queue[2*(n+1)]。优先队列通 * 过comparator保持顺序,或当comparator为null时通过 * 元素的自然顺序,对于

2020-05-09 18:13:11 45

原创 ThreadPool详解--线程池连环问

参考链接:https://www.cnblogs.com/thisiswhy/p/12690630.html线程池执行的流程线程池的默认的创建a) Executors.newSingleThreadPool() —单线程的线程池b) Executors.newFixedThreadPool(int) ----固定大小的线程池c) Executors.newCachedThreadPool() -----可缓存的线程池(回收60秒不执行的任务)d) Sched

2020-05-08 17:56:30 60

原创 网络问题:输入url后发生了什么,详细说明各层之间的作用

具体流程1.DNS域名解析2.建立TCP连接2.1 应用层:发送HTTP请求2.2 传输层:TCP传输报文2.3 网络层:IP协议查询Mac地址2.4 链路层:以太网协议1.DNS域名解析在浏览器DNS缓存中搜索在操作系统DNS缓存中搜索读取系统hosts文件,查找其中是否有对应的ip向本地配置的首选DNS服务器发起域名解析请求2.建立TCP连接2.1 应用层:发送HTTP请求浏览器构造一个HTTP报文,包括:请求报头(Request Header):请求方法、目标地址、遵循的协议

2020-05-08 17:49:16 206

原创 jvm知识点总结--面试用

双亲委派模型的特点定义:如果一个类加载器在接到加载类的请求时,它首先不会自己尝试去加载这个类,而是把这个请求任务委托给父类加载器去完成,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载。优势: 避免类的重复加载 防止核心API库被随意篡改。比如,Java中的Object类,它存放在rt.jar之中,无论哪...

2020-04-28 15:15:56 49

原创 Mysql的行锁和表锁

InnoDB 的行锁,就是通过锁住索引来实现的

2020-04-26 20:59:30 66

原创 Mysql的InnoDB内存结构和磁盘结构

InnoDB内存结构一、 Buffer Pool 主要分为3 个部分: Buffer Pool、Change Buffer、Adaptive Hash Index,另外还有一个(redo)log bufferBuffer Pool缓存的是页面信息,包括数据页、索引页。Change Buffer 写缓冲如果数据库大部分索引都是非唯一索引,并且业务是写多读少,不会在写数据后立刻读取,就可以使...

2020-04-24 16:22:19 273

原创 Mysql引擎Innodb和MyISAM的特点

MyISAM的特点支持表级别的锁(插入和更新会锁表)。不支持事务。拥有较高的插入(insert)和查询(select)速度。存储了表的行数(count 速度更快)适合:只读之类的数据分析的项目Innodb的特点支持事务,支持外键,因此数据的完整性、一致性更高。支持行级别的锁和表级别的锁。支持读写并发,写不阻塞读(MVCC)。特殊的索引存放方式,可以减少 IO,提升查询效率。...

2020-04-23 21:51:17 39

原创 红黑树深入理解

插入的节点默认为红色3.插入操作

2020-04-22 18:00:16 36

原创 Mysql 的分库分表

表的水平切分一、如何选择分区键:分区键要能尽量避免跨分片查询的发生。(例如,博客的id和用户id,以用户id分片好)分区键要能尽量使各个分片中的数据平均(使用哈希分配)二、如何存储无需分片的表每个分片中存储一份相同的数据(用于表本身量不大,字典列表,可更好提高查询效率,应用更新时要对其检查,更新数据)使用额外的节点统一存储(没有冗余的数据,应用不用维护多份相同数据,查询效率差)...

2020-04-21 17:21:50 46

原创 索引深入理解2-数据存储文件-使用规则

数据存储文件frm文件是 是 MySQL 里面表结构定义的文件,不管你建表的时候选用任何一个存储引擎都会生成InnoDBt_user.frmt_user.idbidb文件存储了表数据和索引InnoDB 中,主键索引和辅助索引是有一个主次之分的。辅助索引存储的是辅助索引和主键值。如果使用辅助索引查询,会根据主键值在主键索引中查询,最终取得数据。MyISAMt_...

2020-04-10 21:25:10 45

原创 面试汇总1

1.有两个水桶一个可以装水5KG一个可以装水13KG不用称怎么装出7KG水?思路:7kg = 13kg - 5kg -1kg想办法让5kg的水桶存着4kg水,这样从13kg倒入1kg水后,将小桶倒掉,打通剩余12kg再将5kg桶倒满,大桶剩余7kg流程: 13kg为大桶,5kg为小桶, 1).大桶装满水,倒入小桶三次,小桶剩余3kg 2).大桶装满,再倒入小桶,大桶剩...

2020-04-10 11:11:38 30

原创 二分搜索树删除任一节点-Hubbard Deletion

package com.xmg.tree;import java.util.LinkedList;import java.util.Queue;/** * 二分搜索树---不一定是完全二叉树 * * BST -- binary search tree * * 查找表的实现-字典数据结构 * * 高效,查找,插入,删除都可以 */public class Bi...

2020-04-09 09:27:13 45

原创 索引的深入理解

索引索引定义平衡二叉树(AVL树)多路平衡查找树(B树)加强版多路平衡查找树(B+树)实例InnoDB 中的 B+Tree 的特点索引定义在 InnoDB 里面,索引类型有三种,普通索引、唯一索引(主键索引是特殊的唯一索引)、全文索引。1.普通(Normal):也叫非唯一索引,是最普通的索引,没有任何的限制。2.唯一(Unique):唯一索引要求键值不能重复。另外需要注意的是,主键索引...

2020-04-08 22:18:17 56

原创 二分查找法,有序数列

1.二分查找法,只能在作用于有序数列。private static int binarySearch(Comparable[] arr,Comparable target){ //arr[r,r]之间查找 int l = 0, r= arr.length -1; while(l<=r){ //mid = (l+r)/2 可能产生大整数越界 int mid = l...

2020-04-02 09:48:42 68

原创 O(nlgn)排序-归并排序-快速排序及优化

1.归并排序---等分数组-递归合并/** * 递归使用归并排序,对arr[l...r]的范围进行排序 * * @param arr * @param l * @param r */ private static void mergeSortOwn(int[] arr, int l, int r) {// if (l >= r) {// re...

2020-04-01 10:23:31 30

原创 选择排序,插入排序,冒泡排序

1.选择排序找到最小位置的index然后和前面交换。private static void selectionSort(int[] arr){ int n = arr.length; for(int i=0;i<n;i++){ // 寻找[i,n]的最小值 int minIndex = i; for(int j=i+1;j<n;j++){ i...

2020-04-01 10:10:47 26

原创 堆的认识

1.从1开始的数组存储堆2.最大堆,向下移动,用于最大值出堆3.从0开始的数组存储二叉堆

2020-03-31 15:21:18 22

原创 JDK的ByteBuffer和Netty的ByteBuf对比

Netty的ByteBuf采用读写索引分离的策略(readerIndex与writerIndex),一个初始化(里面尚未有任何数据)的ByteBuf的readerIndex与writerIndex都为0。当读索引与写索引处于同一个位置时,如果我们继续读取,就会抛出IndexOutofBoundsException对于ByteBuf的任何读写操作都会分别单独维护读索引与写索引。maxCapac...

2020-03-26 11:08:58 56

eclipse插件在线下载源码.rar

eclipse添加自动下载源码包插件,下载下来的jar包保存到eclipse / dropins /文件夹下 最后重启eclipse点击jar包就会出现attach java source点击下载源码包

2019-07-16

netty实战源码13章

netty实战源码13章的server和client,示例代码,测试后的

2018-12-04

netty实战源码

netty实战源码

2018-12-04

java并发编程源码

java并发编程源码,解压可用,jar包解压后为源码也可引入到工程中

2018-08-08

测试Eclipse的启动时间插件

测试Eclipse的启动时间插件,将插件放入eclipse的plugins中,重启eclipse即可

2018-02-11

myeclipse2015破解文件

亲测可用,myeclipse2015 stable1.0破解工具

2017-04-05

空空如也

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

TA关注的人 TA的粉丝

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