8 明成天下

尚未进行身份认证

我要认证

做个技术达人

等级
TA的排名 11w+

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

笔试ledao

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

2020-07-05 22:05:51

根据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

CountDownLatch的理解和例子

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

2020-07-01 22:12:42

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

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

2020-06-30 18:19:06

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...

2019-08-20 17:32:23

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

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

2020-06-23 10:48:50

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

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

2020-06-18 22:44:39

FutureTask源码分析

1.7个状态

2020-06-14 19:54:51

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

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

AtomicIntegerFieldUpdater要点总结

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

2020-06-03 14:36:11

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

jvm-java虚拟机栈详解

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

2020-05-27 15:37:46

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

LinkedHashMap深入理解

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

2020-05-19 14:47:13

Effective java 读书记录

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

2020-05-16 22:00:59

HTTP-响应状态码

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

2020-05-14 18:25:45

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

这里写目录标题二叉树创建二叉树先序遍历二叉树中序遍历后序遍历层序遍历辅助方法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

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

查看更多

勋章 我的勋章
  • 阅读者勋章Lv2
    阅读者勋章Lv2
    授予在CSDN APP累计阅读博文达到7天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。