小编Rea*_*cen的帖子

毫秒到天

我做了一些研究,但仍然找不到如何得到这些日子......这就是我得到的:

int seconds = (int) (milliseconds / 1000) % 60 ;
int minutes = (int) ((milliseconds / (1000*60)) % 60);
int hours   = (int) ((milliseconds / (1000*60*60)) % 24);
int days = ????? ;
Run Code Online (Sandbox Code Playgroud)

请帮忙,我吮吸数学,谢谢.

java math time milliseconds

44
推荐指数
3
解决办法
10万
查看次数

MySQL从表中获取缺少的ID

我在MySQL中有这个表,例如:

ID | Name
1  | Bob
4  | Adam
6  | Someguy
Run Code Online (Sandbox Code Playgroud)

如果您注意到,则没有ID号(2,3和5).

如何编写查询以便MySQL只回答缺少的ID,在这种情况下:"2,3,5"?

mysql

31
推荐指数
3
解决办法
1万
查看次数

GC执行的频率是多少?

Java:在JVM中执行GC的频率是多少?每一秒?每一分钟?或者它是随机的,具体取决于内存大小?我只是想有个主意.

谢谢.

java garbage-collection

15
推荐指数
1
解决办法
9359
查看次数

类实例中的方法是否在内存中占有一席之地?

当我有这样的课程时:

class Test {
    private int _id  = 0 ; // 4 bytes
    private int _age = 0 ; // 4 bytes
}
Run Code Online (Sandbox Code Playgroud)

我确信它的每个实例在内存中消耗超过8个字节,因为它有2个整数.

但是方法怎么样?如果我有一个拥有一百万个方法的类,以及它的两个实例,这些方法会占用内存的两倍吗?

它是如何工作的?

谢谢.

java

14
推荐指数
2
解决办法
2031
查看次数

我的ISP强迫我在发送之前缓冲tcp数据

我有一个Java TCP游戏服务器,我使用java.net.ServerSocket并且一切运行得很好,但最近我的ISP做了某种升级,其中,如果你为同一个TCP连接快速发送两个数据包,他们会强制关闭它.

这就是为什么我的很多玩家在游戏中有大量流量的情况下随机断开连接(当服务器有很多机会同时为同一个人发送2个数据包时)

这是我的意思的一个例子:如果我做这样的事情,我的ISP将无缘无故地关闭连接到客户端和服务器端:

tcpOut.print("Hello.");
tcpOut.flush();

tcpOut.print("How are you?");
tcpOut.flush();
Run Code Online (Sandbox Code Playgroud)

但是如果我做这样的事情,它会工作得很好:

tcpOut.print("Hello.");
tcpOut.flush();

Thread.sleep(200);

tcpOut.print("How are you?");
tcpOut.flush();
Run Code Online (Sandbox Code Playgroud)

或这个:

tcpOut.print("Hello.");
tcpOut.print("How are you?");
tcpOut.flush();
Run Code Online (Sandbox Code Playgroud)

这只是在几周前他们(ISP)对服务和网络进行了一些更改时才开始的.我注意到使用Wireshark你必须在两个数据包之间至少有大约150ms的时间用于相同的TCP连接,否则它将关闭.

1)你们知道这叫什么?是甚至有名字?这合法吗?

现在我必须重新编写我的游戏服务器,知道我使用了一个名为的方法: send(PrintWriter out, String packetData);

2)在将数据发送给客户端之前,是否有任何简单的解决方案要求java缓冲数据?或者在每次发送前等待150ms而不必重写整个事情?我做了一些谷歌搜索,但我找不到任何处理这个问题.任何有关此问题的提示或信息都会非常感激,顺便提一下速度优化非常关键.谢谢.

java networking tcp wireshark

12
推荐指数
2
解决办法
752
查看次数

BufferedReader.read()占用100%的CPU

我有一个JAVA游戏服务器,每个TCP连接使用1个线程.(我知道这很糟糕,但我现在必须保持这种方式).在(3.2Ghz 6cor x2机器,24GB RAM,Windows Server 2003 64位)和这里是一段代码:

public void run()
{
    try
    {   
        String packet = "";
        char charCur[] = new char[1];

        while(_in.read(charCur, 0, 1)!=-1 && Server.isRunning)
        {
            if (charCur[0] != '\u0000' && charCur[0] != '\n' && charCur[0] != '\r')
            {
                packet += charCur[0];
            }else if(!packet.isEmpty())
            {
                parsePlayerPacket(packet);
                packet = "";
            }
        }

    }catch(Exception e)
    {
        e.printStackTrace();
    }
    finally
    {
        try{
            kickPlayer();
        }catch(Exception e){e.printStackTrace();};

        Server.removeIp(_ip);
    }
}
Run Code Online (Sandbox Code Playgroud)

服务器upTime大约12个小时或更长时间(连接大约3.000个播放器)后,服务器开始永久占用所有12个CPU中的100%,直到我手动重启JAVA应用程序.所以游戏开始落后于糟糕,我的球员开始抱怨.

我试过分析应用程序,这是我想出的:

我的分析结果的屏幕截图

所以我猜这个问题来自这里:

while(_in.read(charCur, 0, 1)!=-1 && Server.isRunning)
Run Code Online (Sandbox Code Playgroud)

知道变量"_in"是套接字输入的读者:(_in = new BufferedReader(new InputStreamReader(_socket.getInputStream()))). …

java sockets multithreading profiling tcp

9
推荐指数
1
解决办法
2638
查看次数

currentTimeMillis()到年,日,分钟和后记.(硬)

我需要System.currentTimeMillis()转换成3个变量:

int Years;
int DaysMonths;
int MinutesHours;
Run Code Online (Sandbox Code Playgroud)

我的意思DayMonths,并且MinutesHours是,让我们说,例如,我们有2个小时.那么MinutesHours应该等于120(因为2小时= 120分钟).但是一旦它达到24小时,它应该是0并且通过它DaysMonths.DaysMonths变量也是一样.

而且我还需要知道如何让这件事情逆转.使用这三个变量,我需要另一种方法来获取System.currentTimeMillis()它们.

我很难解释这个,但我希望你知道我的意思.我真的很讨厌在java中处理时间.这不是我的事,但我需要它对游戏项目来说真的很糟糕.

java time

5
推荐指数
1
解决办法
1万
查看次数

MySQL将所有内容都整理成一个大字符串(列和行)

我有一个很大的MySQL SELECT查询,我只需要转换成一个字符串,所以我可以从中进行UPDATE,而不必使用两个单独的查询.为简单起见,我们假设我们有一个返回此结果的SELECT查询:

在此输入图像描述

如何将所有内容转换为以下内容:

1,Bob,20;2,Adam,30;3,Steve,40;
Run Code Online (Sandbox Code Playgroud)

我可以使用UPDATE其他表吗?

知道列数和行数都可以更改而不是静态的.(非常重要!特别是列!).我该如何解决这个问题?我不认为CONCAT()在这种情况下可以提供帮助.

任何帮助,将不胜感激.谢谢.

mysql sql

5
推荐指数
1
解决办法
1万
查看次数

以x百分比返回true或false的方法

我正在寻找一种方法,通过给定的百分比整数随机地回答真或假.例如:

percent(100); //Will always 100% return true
percent(50); //Will return 50% true, or 50% false
percent(0); //Will always 100% return false, etc..
Run Code Online (Sandbox Code Playgroud)

这是我想出来的,但由于某种原因,它不能正常工作:

public static boolean percent(int percentage)
{
    Random rand = new Random();
    return ((rand.nextInt((100-percentage)+1))+percentage)>=percentage;
}
Run Code Online (Sandbox Code Playgroud)

我需要一个非常准确和真实的方法,请帮助它太复杂它让我头疼

java

4
推荐指数
2
解决办法
3804
查看次数

如何使用System.currentTimeMillis()管理剩余的时间

我使用例如此代码来检查用户是否可以执行某些操作.因此,用户每5秒钟只能执行一次操作.

if((System.currentTimeMillis() - lastTime) > 5000)
{
    // Message: Ok, you can do action now.
}else{
    // Message: Have to wait 5 seconds to do action.
    return;
}

lastTime = System.currentTimeMillis();
Run Code Online (Sandbox Code Playgroud)

但是众所周知,System.currentTimeMillis()回报很长,而且长期可以继续增长,直到它变成否定为止.

我的代码应该在需要超过1个月正常运行时间的服务器上运行.因此,我担心在某些时候System.currentTimeMillis()会返回一个否定值,我的代码将始终告诉用户他需要等待5秒或相反.

我真的很难专注于这段代码并修复它,所以我问你们,如果你有一个关于如何解决这个问题并使我的代码100%安全的提示.

java time milliseconds

2
推荐指数
1
解决办法
1393
查看次数

我总是在Javascript中看到这段奇怪的代码

我不是Javascript专家,但我知道的旧Javascript只是一堆简单的函数和变量,如下所示:

function doSomething(){
    var data = "test";
    return data;
}
Run Code Online (Sandbox Code Playgroud)

但最近我看到一些像这样的Javascript代码:

$(document).ready(function(){
                    $("#about").hide();
                    $(".tababout").collapser({
                        target: '#about',
                        effect: 'slide',
                        changeText: false,
                    });
        });
Run Code Online (Sandbox Code Playgroud)

这到底是什么?这叫什么?所有浏览器都更容易和支持吗?我需要更多关于此的信息.

javascript

2
推荐指数
1
解决办法
106
查看次数

如何在不创建变量的情况下将值传递给数组?

public static void testArray(int[]a)
{
    for(int i:a)
    {

        if(i==10)
        {
        System.out.println("Number 10 exists !");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想在不创建变量的情况下将参数传递给此方法.我想这样称呼它:

testArray({5, 10, 15});
Run Code Online (Sandbox Code Playgroud)

这可能吗?

java

2
推荐指数
1
解决办法
128
查看次数

如何从StringBuilder快速获取String?

我有一种感觉,使用:StringBuilder.toString()是缓慢的,非常耗费资源..

所以我在考虑这样的事情:

public static void doSomething(String data){ ... }

public static void main(String[] args)
{
    StringBuilder s = new StringBuilder();
    doSomething(""+s);
}
Run Code Online (Sandbox Code Playgroud)

但是我想知道是否还有另一种"更好,更快"的方法,因为doSomething(""+s)在循环中会产生一个新的String实例,因为我认为这是空的引号,并且把它放在里面并不是一个好主意一个循环.

java

0
推荐指数
1
解决办法
324
查看次数