Tag: java

是否有一个明智的技巧来检查数字的可分性为2或3?

我正在寻找相当于(num%2) == 0 || (num%3) == 0逐位测试 (num%2) == 0 || (num%3) == 0 。 我可以用num&1替换num%2 ,但我仍然坚持使用num%3和逻辑 – 或者。 这个表达式也等同于(num%2)*(num%3) == 0 ,但我不确定这有多大帮助。

计算多边形的最小面积矩形

我需要计算多边形周围的最小区域矩形( 最小可能的矩形 )。 我唯一的输入是多边形中的点数。 我也有积分的坐标。

SWIG将生成的类从不同的模块和包导入当前类

我很难让SWIG类型映射(javapackage)正常工作。 我尝试制作一个问题的简单版本,即使这似乎也失败了。 foo.h中: #ifndef FOO_H #define FOO_H class Foo { public: Foo() {}; int doSomething() { return 1 }; }; #endif bar.h: #ifndef BAR_H #define BAR_H #include “foo.h” class Bar { public: Bar() {}; int doSomething(Foo foo) { return foo.doSomething(); }; }; #endif Foo.i %module FooMod %include “typemaps.i” %include “stdint.i” %{ #include “../header/foo.h” %} %include […]

确定范围是否重叠

给定具有整数开始和结束时间的两个事件,E1 =(s1,e1),E2 =(s2,e2),实现快速布尔检查以查看事件是否重叠。 我有解决方案,但我很想知道其他人想出了什么。 编辑:好的,这是我的解决方案: e1 > s2 || (s1 > s2 && e2 < s1)

计算(金钱)从167.37美元变化的不同方式?

这是一个面试问题: 给定金额,比如167.37美元,找到使用货币中可用面额生成此金额变化的所有可能方法? 任何想到空间和时间有效的算法和支持代码的人,请分享。 这是我写的(工作)代码。 我试图找到这个的运行时间,任何帮助表示赞赏 import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.Map; public class change_generation { /** * @param args */ public static void generatechange(float amount,LinkedList denominations,HashMap useddenominations) { if(amount<0) return; if(amount==0) { Iterator it = useddenominations.keySet().iterator(); while(it.hasNext()) { Float val = it.next(); System.out.println(val +” :: “+useddenominations.get(val)); } System.out.println(“**************************************”); return; } for(Float denom : […]

Java和C / C ++之间MultiThread方面的差异

我已经阅读了一些提示,multithreading实现很大程度上取决于您正在使用的目标操作系统。 操作系统最终提供了multithreadingfunction。 比如Linux有POSIX标准实现和windows32有其他方式。 但我想知道编程语言水平的主要差异。 C似乎为同步提供了更多选择,例如Mutex,读写锁,记录锁定,Posix信号量。 但在Java中,我知道我们可以使用像Mutex这样的同步作品吗? 还有一些其他高级API,比如AtomicXX和volatile。 但我没有找到像记录锁定和读写锁的东西。 它是Java语言的弱点吗? 或者是跨平台的牺牲? 另外我想知道这是一个主要原因,像nginx这样的Web服务器和像oracle这样的数据库都是用C / C ++编写的吗? 我实际上是一名Java开发人员,我对它非常好奇。 希望有人可以给我一些建议。 编辑: Paul和Jesper已经建议Java在JDK1.5之后支持所有类似的锁类,如C / C ++。 但是如果可能的话,我仍然希望有人可以解释为什么Java提供足够支持的更多细节,我们仍然找不到纯Java“oracle”。 编辑: 另外,我想添加一些有趣的东西,我是从Nasi Khan的developer.com上学到的。 了解Javamultithreading和读写锁 。 其中的一些话题。 共享主内存与线程本地内存的交互, 关于这种相互作用和互斥的“同步”的含义。 澄清对象锁和它所守护资源的区别。 编辑: 来自FileLock JavaDocs 文件锁代表整个Java虚拟机。 它们不适合控制同一虚拟机中多个线程对文件的访问。 Java中的文件锁与C / C ++中的文件锁完全相同。 UPDATE 我找到了另一个有趣的区域来比较 在C ++中,有一些类似的东西 atomic x, y; 在JAVA中我们也有AtomicInteger 。 它们是一样的吗?

JNI与JNA表现

我们有一个原生的c/asm应用程序利用GPU(OpenCL)通过特定的方法获得大的encrypt/decrypt数据,它只是工作完美,没问题。 项目的一部分(Web和分发)由JEE开发,我们只需要调用本机应用程序/库。 我们尝试使用Process类将其称为分离外部进程。 问题是我们无法控制应用程序(事件,处理程序,线程等)。 我们还尝试将C代码切换为Java代码,但性能已经消失。 除了将本机代码作为进程运行之外,我正在考虑JNA和JNI,但是有一些问题。 问题: 为了更好(更快)的读/写解决方案,是否可以通过JNI和JNA中的直接(非托管)内存[Java( ByteBuffer#allocateDirect() )]交换数据? 是否可以通过本机代码管理和处理进程,并通过Java代码(OpenCL lib)访问GPU(共享)内存? 性能怎么样? JNA比JNI快吗? 我们在Redhat Linux6 x64上有两个AMD W7000集群设备。

对于switch的break语句,是否有更好的编程语言?

语法太多,语法相同: switch (someValue) { case OPTION_ONE: case OPTION_LIKE_ONE: case OPTION_ONE_SIMILAR: doSomeStuff1(); break; // EXIT the switch case OPTION_TWO_WITH_PRE_ACTION: doPreActionStuff2(); // the default is to CONTINUE to next case case OPTION_TWO: doSomeStuff2(); break; // EXIT the switch case OPTION_THREE: doSomeStuff3(); break; // EXIT the switch } 现在你知道所有break语句都是必需的,因为当缺少break语句时, switch将继续下一个case 。 我们有一个OPTION_LIKE_ONE , OPTION_ONE_SIMILAR和OPTION_TWO_WITH_PRE_ACTION 。 问题是我们很少需要这个“跳到下一个案例”。 我们经常在case结束时case 。 […]

你怎么知道机器的堆栈是否在内存中增长或减少? (JAVA)

我有一个C程序来检查机器堆栈是否在内存中增长或减少。 它是这样的: #include void sub(int *a) { int b; if (&b > a) { printf(“Stack grows up.”); } else { printf(“Stack grows down.”); } } main () { int a; sub(&a); } 现在我想在Java中做同样的事情。 🙂 没有写任何本机代码,任何人都知道一个解决方案 谢谢

什么可以导致Java本机函数(在C中)在进入时出现段错误?

该项目 我正在使用Java Native Interface将Java命令行界面编写到内部网络和网络测试工具的C库中。 C代码(我没有写)是复杂的低级别,通常在位级操作内存,并且只使用原始套接字。 应用程序是C端的multithreading(后台运行的pthread)以及Java端(ScheduledThreadPoolExecutors运行调用本机代码的线程)。 也就是说,C库应该基本稳定。 事实certificate,Java和JNI接口代码会导致问题。 问题 应用程序在进入本机C函数时崩溃并出现分段错误。 这仅在程序处于特定状态时才会发生(即,成功运行特定本机函数会导致下一次调用另一个特定本机函数进行段错误)。 此外,在发出quit命令时,应用程序会以类似的段错误崩溃,但同样,只有在成功运行相同的特定本机函数之后才会崩溃。 我是一个没有经验的C开发人员和经验丰富的Java开发人员 – 我习惯崩溃,给我一个特定的原因和一个特定的行号。 在这种情况下我需要做的就是hs_err_pid*.log输出和核心转储。 在这个问题的最后,我已经包含了我所能做的。 我的工作到目前为止 当然,我想找到发生崩溃的特定代码行。 我在Java端的本机调用之前放置了一个System.out.println()并且将printf()作为本机函数的第一行,程序崩溃后肯定会直接使用fflush(stdout) 。 System.out调用运行, printf调用没有。 这告诉我,在进入函数时发生了段错误 – 这是我以前从未见过的。 我将参数三重检查到函数,以确保它们不会起作用。 但是,我只传递一个参数(类型为jint )。 另外两个( JNIEnv *env, jobject j_object )是JNI构造,不受我的控制。 我注释掉了函数中的每一行,只留下了return 0; 在末尾。 段错误仍然发生。 这让我相信问题不在这个function中。 我以不同的顺序运行命令(有效地运行本机函数不同的命令)。 只有在崩溃函数调用之前运行一个特定的本机函数时才会发生段错误。 此特定function在运行时似乎表现正常。 我在另一个函数的末尾附近打印了env指针的值和&j_object的值,以确保我没有以某种方式破坏它们。 我不知道我是否损坏了它们,但是在退出函数时它们都具有非零值。 编辑1:通常,相同的函数在许multithreading中运行(通常不是并发的,但它应该是线程安全的)。 我从主线程运行该函数,而没有任何其他线程处于活动状态,以确保Java端的multithreading不会导致问题。 它不是,我得到了同样的段错误。 所有这一切都困扰着我。 如果我注释掉整个函数,除了return语句之外,为什么它仍然是段错误? 如果问题出现在另一个function中,为什么不在那里失败? 如果第一个函数弄乱内存并且第二个函数非法访问损坏的内存是一个问题,为什么不在非法访问的行上失败,而不是进入函数? 如果您看到一篇互联网文章,其中某人解释了与我类似的问题,请对其进行评论。 有很多段错误的文章,似乎都没有包含这个特定的问题。 对于SO问题同样如此。 […]