我怀疑是否有一种方法可以在Java中创建编译时条件,如C++中的#ifdef #ifndef.
我的问题是有一个用Java编写的算法,我有不同的运行时间改进了该算法.所以我想测量每次改进时我节省了多少时间.
现在我有一组布尔变量,用于在运行时决定应该使用哪些改进,哪些不使用.但即使测试这些变量也会影响总运行时间.
所以我想找到一种方法来在编译期间决定编译和使用程序的哪些部分.
有人知道在Java中使用它的方法.或者也许有人知道没有这样的方式(它也会有用).
我在linux机器上有一个正在运行的PostgreSql本地实例.当我使用psql
shell中的命令时,我成功登录而没有任何问题.我需要通过JDBC连接到PostgreSql,但我不知道究竟应该将什么作为url
参数传递给DriverManager.getConnection()
.
它应该从jdbc:postgresql:
但接下来会发生什么?
系统组告诉我,创建了一个像用户名一样的数据库.例如,如果我的用户是jutky
一个名为db的jutky
创建者,但是当我尝试打开一个连接时,jdbc:postgresql:jutky
我收到一个错误
org.postgresql.util.PSQLException: FATAL: password authentication failed for user "jutky"
:(
附加信息
当我通过psql
提示登录时,我没有提示输入密码,所以当我尝试通过JDBC登录时,我传递一个空字符串作为密码 - 它是正确的,还是我应该通过null
什么?
当我输入psql --help
shell时,我看到其余的这一行:
Connection options:
-h, --host=HOSTNAME database server host or socket directory (default: "/var/run/postgresql")
Run Code Online (Sandbox Code Playgroud)
所以我理解我通过a连接到PostgreSql socket directory
,这对JDBC中的URL字符串有用吗?
编辑
首先要感谢答案.
第二:它不是我第一次使用JDBC,特别是我第一次从JDBC连接到PostgreSql,所以我知道一般规则,我已经阅读了文档.但是在描述的情况下,我不确定如果实例正在运行socket directory
并且我应该提供什么密码,我应该如何构造连接字符串.因为当我通过登录时,psql
我根本没有提示输入密码.
提前致谢.
在Java中,当由于空间不足而无法显示JLabel的文本时,文本被截断并且最后添加"...".
如何轻松找出当前JLabel是显示全文还是截断?
编辑:
我看到有一种方法可以通过使用找出文本的大小FontMetrics
.但是,此解决方案并未完全回答这个问题.在JLabel的文本包含HTML装饰的metrics.stringWidth()
情况下,还将计算HTML标签的宽度.因此,可能会发生metrics.stringWidth()
比JLabel的宽度更大的结果,但仍然可以正确显示文本.
有没有办法知道在显示文本时JLabel本身做出了什么决定.它是否决定截断文本.
我正在通过DPL界面使用Berkeley DB Java版.
我想询问是否有人知道任何GUI库可以轻松浏览保存在数据库中的数据.
我知道BDB文档说有关存储实体的元数据不会保存在任何地方,因此只有编写数据的人才能知道从那里返回的类的类型.这就是为什么我正在搜索将包含在主项目中的库(不是一个完整的程序),因此它将知道我的类的类型并能够正确显示数据.
ps我发现这个bdb浏览器,但它似乎是一个死的项目.
更新:
到目前为止,我已经找到了一个GUI,它显示了通过JMX为BDB收集的统计信息.以下是如何使用它:http://www.oracle.com/technology/documentation/berkeley-db/je/jconsole/JConsole-plugin.html
仍在搜索数据浏览器...
我在Postgre(9.1.9)中将连接与顺序结合起来很麻烦.比方说,我有一个带有3个字段的表格边框:
Table "borders"
Column | Type | Modifiers
---------------+----------------------+-----------
country1 | character varying(4) | not null
country2 | character varying(4) | not null
length | numeric |
Run Code Online (Sandbox Code Playgroud)
前两个字段是各国的代码,第三个字段是这些国家之间的边界长度.
主键在前两个字段中定义.
我需要编写一个对整个表具有唯一值的列的选择,此外,应该按降序选择此列.为此,我将关键字段与分隔符字符连接起来,否则两个不同的行可能会给出相同的结果,如(AB,C和A,BC).
所以我运行以下查询:
select country1||'_'||country2 from borders order by 1;
Run Code Online (Sandbox Code Playgroud)
但是在结果中我看到排序中省略了'_'字符.结果如下:
?column?
----------
A_CH
A_CZ
A_D
AFG_IR
AFG_PK
AFG_TAD
AFG_TJ
AFG_TM
AFG_UZB
A_FL
A_H
A_I
.
.
Run Code Online (Sandbox Code Playgroud)
您可以看到结果的排序就像字符串中不存在"_"一样.
如果我使用一个字母(比如'x')作为分隔符 - 订单是正确的.但我必须使用一些未出现在country1和country2字段中的特殊字符,以避免争用.
我应该怎么做,以便在排序过程中考虑'_'字符.
事实证明,连接与问题无关.问题是订单只是忽略'_'字符.
我正在编写一个使用Dijkstra算法的应用程序来查找图中的最小路径.图中节点和边的权重是float
数字,因此算法在浮点数上做了很多算术.如果我将所有重量转换为int
s,我可以获得运行时间的改善吗?在Java中,int算术运算是否比浮动运算更快?
我试着写一个简单的基准来检查出来,但我对我得到的结果不满意.可能编译器已优化程序的某些部分,因此结果对我来说不太好.
编辑:
我试图解决的问题是在信息检索字段中.应用程序应显示作为一组关键字提出的查询的答案.
我的数据结构是加权有向图.给定一组叶节点,我必须找到连接这些节点并向用户显示答案的最小树.权重由部分基于tf/idf技术的加权函数指定.用户不知道我分配给节点和边缘的权重,他只想看到与他提出的查询相关的答案.因此不需要精确的结果,只需根据他们的权重枚举答案.只是本地使用加权函数(正如我提到它基于tf/idf)给出了浮点权重,所以我到目前为止使用了浮点数.
我希望这会为这个问题增加一些背景知识.
我正在查看java并发集合的代码,我看到它们只是在操作开始时锁定一些锁定并在最后解锁它的简单集合.
怎么样volatile
?如果后端集合不是易失性的,那么其他线程可能会错过更改,因此节省了一些线程.我知道synchronized
可以解决这个问题,但他们只使用锁而没有任何进一步的同步.
这是一个问题,还是我错过了什么?
更新:
经过一番讨论,我想稍微改一下这个问题.
我想在多线程环境中使用java集合.(例如我目前正在谈论的PriorityBlockingQueue
)
我想确保一个线程对集合(push/pop)所做的更改立即被其他人看到.
当线程数量更新时,java并发集合阻止我陷入麻烦以保持集合的内部状态稳定是好的,但我想确保数据本身对所有线程都可见.
问题是:我是否正确java并发集合不提供开箱即用的功能?如果我这样做,我应该使用哪些额外的(简约成本)技术来提供所需的可见性?
谢谢.
我正在编写一个在多核硬件上运行在Tomcat中的Java应用程序.应用程序执行算法并将答案返回给用户.问题是即使我同时运行两个请求,tomcat进程最多只使用一个CPU核心.
据我所知,Tomcat中的每个请求都是在单独的线程中执行的,而JVM应该在单独的CPU核心上运行每个线程.
限制JVM或Tomcat使用不超过一个核心的问题是什么?
提前致谢.
我正在编写一个在 Nehalem 处理器上运行的多线程 java 应用程序。然而,我有一个问题,从 4 个线程开始,我几乎看不到应用程序的加速。
我做了一些简单的测试。我创建了一个线程,它只分配一个大数组并访问数组中的随机条目。因此,当我运行线程数时,运行时间不应改变(假设我没有超过可用 CPU 核心的数量)。但我观察到,运行 1 或 2 个线程几乎需要相同的时间,但运行 4 或 8 个线程要慢得多。因此,在尝试解决应用程序中的算法和同步问题之前,我想找出可以实现的最大可能并行化。
我使用了-XX:+UseNUMA
JVM 选项,因此数组应该分配在相应线程附近的内存中。
PS 如果线程正在进行简单的数学计算,则 4 个甚至 8 个线程不会出现时间下降,因此我得出的结论是,当线程访问内存时,我遇到了一些问题。
任何帮助或想法表示赞赏,谢谢。
编辑
谢谢大家的回复。我发现我对自己的解释还不够好。
在尝试消除应用程序中的同步问题之前,我做了一个简单的测试,检查可以实现的最佳并行化。代码如下:
public class TestMultiThreadingArrayAccess {
private final static int arrSize = 40000000;
private class SimpleLoop extends Thread {
public void run() {
int array[] = new int[arrSize];
for (long i = 0; i < arrSize * 10; i++) {
array[(int) ((i * i) % arrSize)]++; // randomize a bit …
Run Code Online (Sandbox Code Playgroud) 我有一个带有数字的字符串,我想要检索该数字.例如,如果我有一个字符串"bla bla 45 bla bla"我想得到数字45.我已经搜索了一下,发现这段代码应该能够完成工作
Matcher matcher = Pattern.compile("\\d+").matcher("bla bla 45 bla bla");
if(matcher.matches())
String result = matcher.group();
Run Code Online (Sandbox Code Playgroud)
但它没有:(
可能问题是"\ d +"正则表达式转换为"^\d + $",因此匹配器与文本内部的数字不匹配.
任何想法.
java ×9
postgresql ×2
berkeley-db ×1
collation ×1
collections ×1
compilation ×1
concurrency ×1
conditional ×1
cpu-cores ×1
jdbc ×1
jlabel ×1
math ×1
nehalem ×1
numbers ×1
performance ×1
primitive ×1
regex ×1
sizing ×1
sql ×1
sql-order-by ×1
string ×1
swing ×1
tomcat ×1
tomcat6 ×1