小编Rus*_*ell的帖子

为什么使用数组大小​​1而不是指针?

在一个C++开源项目中,我看到了这一点.

struct SomeClass {
  ...
  size_t data_length;
  char data[1];
  ...
}
Run Code Online (Sandbox Code Playgroud)

这样做有什么好处而不是使用指针?

struct SomeClass {
  ...
  size_t data_length;
  char* data;
  ...
}
Run Code Online (Sandbox Code Playgroud)

我唯一能想到的是使用size 1数组版本,用户不会看到NULL.还有别的事吗?

c c++

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

JMS连接,会话和生产者/使用者之间的关系

我想将一批20k JMS消息发送到同一队列.我正在使用10个线程分割任务,因此每个线程将处理2k个消息.我不需要交易.

我想知道是否有一个连接,一个会话和10个生产者是否是推荐的方式?

如果我有一个生产者共享所有线程怎么样?我的邮件会损坏还是会同步发送(不会带来性能提升)?

如果我总是连接到同一个队列,那么决定是否创建新连接或会话的一般原则是什么?

谢谢你,很抱歉一下子就问了很多.

(这是一个类似的问题,但它并没有完全回答我正在寻找的内容.长期存在的JMS会话.保持JMS连接/ JMS会话总是打开一个糟糕的实践吗?)

java jms

42
推荐指数
2
解决办法
2万
查看次数

我可以在Oracle中进行原子MERGE吗?

我在一个WebLogic集群中运行了几个J2EE应用程序实例.

在某些时候,这些应用程序会执行MERGE以将记录插入或更新到后端Oracle数据库中.MERGE检查是否存在具有指定主键的行.如果它在那里,请更新.如果没有,请插入.

现在假设两个应用程序实例想要插入或更新主键= 100的行.假设该行不存在.在合并的"检查"阶段,他们都看到行不在那里,所以他们都试图插入.然后我得到一个唯一的键约束违规.

我的问题是:Oracle中是否存在原子MERGE?我正在寻找与INSERT ... FOR UPDATEPL/SQL 具有类似效果的东西,除了我只能从我的应用程序执行SQL.

编辑:我不清楚.我在使用MERGE语句时仍然出现此错误.问题是,只有"修改"部分是原子的,而不是整个合并.

java oracle concurrency merge weblogic

18
推荐指数
2
解决办法
6888
查看次数

weblogic集群如何工作?

我是weblogic的新手.

我已经阅读了http://download.oracle.com/docs/cd/E11035_01/wls100/cluster/overview.html并在互联网上搜索了这个主题,但仍然很难理解一些weblogic的集群概念.

任何人都可以在下面确认/纠正我的理解吗?

  • 群集包含一个或多个可驻留在一个或多个物理服务器上的逻辑服务器
  • 将j2ee应用程序部署到群集时,它将绑定到该群集中的一个服务器
  • 部署的应用程序的外部用户不知道群集
  • 该应用程序的日志文件位于其部署的服务器上
  • 如果托管应用程序的服务器出现故障,那可以,因为应用程序位于群集中,另一台服务器将接收工作?
  • 如果托管应用程序的服务器失败,登录会发生什么?

也许我把整个概念弄错了.有人能指出我正确的方向吗?

非常感谢.

weblogic cluster-computing java-ee

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

是否有一种优雅的方式可以对Java中for-each循环的最后一个元素执行某些操作?

我正在使用Java 6.

假设我有一堆猫要喂,并假设myCats已经分类.

for (Cat cat : myCats) {

    feedDryFood(cat);

    //if this is the last cat (my favorite), give her a tuna
    if (...) 
        alsoFeedTuna(cat);
}
Run Code Online (Sandbox Code Playgroud)

我想特别对待我的最后一只猫.

有没有办法在循环内优雅地做到这一点?我能想到的唯一方法是计算它们.

稍微退一步以获得更广泛的图片,是否有任何编程语言支持for-each循环中的这个小功能?

java foreach programming-languages

17
推荐指数
5
解决办法
1110
查看次数

WHERE和JOIN操作顺序

我的问题类似于这个SQL操作顺序,但有一点点扭曲,所以我认为这是公平的.

我正在使用Teradata.我有2张桌子: table1, table2.

table1只有一id列.
table2有以下栏目:id,val

我可能错了,但我认为这两个陈述给出了相同的结果.

声明1.

SELECT table1.id, table2.val
FROM table1
INNER  JOIN table2
ON table1.id = table2.id
WHERE table2.val<100
Run Code Online (Sandbox Code Playgroud)

声明2.

SELECT table1.id, table3.val
FROM table1
INNER JOIN (
    SELECT *
    FROM table2
    WHERE val<100
)  table3
ON table1.id=table3.id
Run Code Online (Sandbox Code Playgroud)

我的问题是,查询优化器是否足够聪明
- 首先执行WHERE子句然后在语句1中稍后加入
- 知道语句2中实际上不需要表3

我对SQL很新,所以如果我误解了什么,请教育我.

sql teradata

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

转换函数返回void

我多次在开源代码中看到对C函数的调用被转换为void.

例如,在ls(http://cvs.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/ls/ls.c)的源代码中,我看到以下内容.

(void) setlocale(LC_ALL, "");
Run Code Online (Sandbox Code Playgroud)

为什么这是一个好习惯?

c

13
推荐指数
1
解决办法
4645
查看次数

C++中dynamic_cast的真实例子

任何人都可以给我一个真实世界的例子,说明当需要dynamic_cast并且根本无法解决时?我能想到的例子通常可以解决双重调度问题.

如果约束太强,那么一般来说,dynamic_cast的示例也很好.

我希望看到真实的例子,而不是"它通常用于在类型树之间向上和向下转换".

c++ dynamic-cast

12
推荐指数
1
解决办法
3755
查看次数

为什么不能自动用作模板类型参数?

我一直在玩C++ 0x的auto关键字,并尝试了以下内容.

std::unique_ptr<auto> ptr(new int(0));
Run Code Online (Sandbox Code Playgroud)

我尝试用g ++ 4.4.5编译它并得到了

error: invalid use of auto
Run Code Online (Sandbox Code Playgroud)

通过眼睛判断,auto可以很容易地推断出来int.

我的猜测是类型推断,模板引擎不会相互通信.否则,模板引擎将知道将模板类实例int化为类型参数.

另一个猜测来自标准,我看到了这一点.

A member shall not be declared with auto, extern or register storage class.
Run Code Online (Sandbox Code Playgroud)

但我认为这auto就像局部变量一样,而不是auto用于推断类型.

我最后的猜测是编译器认为这是一个auto存储类,而不是auto类型推导.

标准中有这样的理由吗?

c++ templates c++11

10
推荐指数
2
解决办法
3540
查看次数

FileOutputStream与ByteArrayOutputStream

我正在读别人的代码.这是它的要点.

类使用GZIPInputStream和GZIPOutputStream压缩和解压缩文件.

这是压缩过程中发生的事情的片段.inputFile并且outputFile是班级的实例File.

FileInputStream fis = new FileInputStream(inputFile);
GZIPOutputStream gzos = new GZIPOutputStream(new FileOutputStream(outputFile));

//the following function copies an input stream to an output stream
IOUtils.copy(fis,gzos);

//outputFile is the compressed file
...
Run Code Online (Sandbox Code Playgroud)

现在,这是解压过程中发生的事情.

GZIPInputStream gzis = new GZIPInputStream(new FileInputStream(inputFile));
ByteArrayOutputStream baos = new ByteArrayOutputStream();

//copies input stream to output stream
IOUtils.copy(gzis,baos);

//this method does as its name suggests
FileUtils.writeByteArrayToFile(outputFile, baos.toByteArray());

//outputFile is the decompressed file
...
Run Code Online (Sandbox Code Playgroud)

原始程序员FileOutputStream在压缩ByteArrayOutputStream和解压缩过程中选择的原因是什么?这让我很困惑.

除非有充分的理由,否则我认为我正在改变它们,以避免将来混淆.这是一个好主意吗?

java file stream

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