我最近了解到开关语句在OOP中很糟糕,特别是罗伯特·马丁的"清洁代码"(第37-39页).
但请考虑这个场景:我正在编写一个游戏服务器,接收来自客户端的消息,其中包含一个表示玩家行为的整数,例如移动,攻击,挑选项目......等等,将有超过30种不同的动作.当我编写代码来处理这些消息时,没有想到我想到的解决方案,它将不得不在某处使用switch.如果不切换语句,我应该使用什么模式?
在Java中,我理解volatile
关键字提供变量的可见性.问题是,如果变量是对可变对象的引用,那么volatile
还是为该对象内的成员提供了可见性吗?
在下面的示例中,如果多个线程正在访问volatile Mutable m
并更改value
?,它是否正常工作?
例
class Mutable {
private int value;
public int get()
{
return a;
}
public int set(int value)
{
this.value = value;
}
}
class Test {
public volatile Mutable m;
}
Run Code Online (Sandbox Code Playgroud) 首先, 那些成功的商业MMORPG是否使用加密进行游戏数据传输?
我得到的印象是,许多开发人员倾向于不使用加密,因为它无法阻止对作弊和制作私有服务器的逆向工程,但是它不能有效地减少那些数量吗?
加密也会影响性能,即使只是一点点.
良好的加密确实可以防止网络嗅探和中间人,对于MMORPG来说这些重要吗?
如何保护聊天消息以保护隐私?
你怎么想?
PS:我说的是游戏数据,而不是用户/密码,auth信息需要加密.
考虑一个原始类型变量,其中包含许多线程读取和几个线程写入,以下代码是否可以正常工作?
如果它会,它提供比1)更好的性能.声明所有方法的同步; 2).使用显式ReadWriteLock?
这是一种常见的模式吗?如果没有,在这种情况下通常使用什么模式?
这对我来说当前工作正常,但我觉得使用volatile和synchronized有点多余.
private volatile int value = 1;
public void func1()
{
if (value == 1) {
// do something
}
}
public void func2()
{
if (value == 2) {
// do something
}
}
public void func3()
{
if (value == 3) {
// do something
}
}
public synchronized void increase()
{
if (value < 10) value++;
}
public synchronized void decrease()
{
if (value > 0) value--;
}
Run Code Online (Sandbox Code Playgroud) JIT编译器已存在一段时间了.偶尔我会想到,"嘿,为什么不直接将Java源文件编译成机器代码呢?"
与编译库一起,我们可以摆脱繁琐的JVM.
我能想到的唯一障碍是垃圾收集器.你的想法怎么样?
PS:哦,你说便携性?WTH是那个?另外,我不得不首先安装JVM.
java ×3
concurrency ×2
volatile ×2
coding-style ×1
encryption ×1
jvm ×1
mutable ×1
oop ×1
synchronized ×1