在一个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.还有别的事吗?
我想将一批20k JMS消息发送到同一队列.我正在使用10个线程分割任务,因此每个线程将处理2k个消息.我不需要交易.
我想知道是否有一个连接,一个会话和10个生产者是否是推荐的方式?
如果我有一个生产者共享所有线程怎么样?我的邮件会损坏还是会同步发送(不会带来性能提升)?
如果我总是连接到同一个队列,那么决定是否创建新连接或会话的一般原则是什么?
谢谢你,很抱歉一下子就问了很多.
(这是一个类似的问题,但它并没有完全回答我正在寻找的内容.长期存在的JMS会话.保持JMS连接/ JMS会话总是打开一个糟糕的实践吗?)
我在一个WebLogic集群中运行了几个J2EE应用程序实例.
在某些时候,这些应用程序会执行MERGE以将记录插入或更新到后端Oracle数据库中.MERGE检查是否存在具有指定主键的行.如果它在那里,请更新.如果没有,请插入.
现在假设两个应用程序实例想要插入或更新主键= 100的行.假设该行不存在.在合并的"检查"阶段,他们都看到行不在那里,所以他们都试图插入.然后我得到一个唯一的键约束违规.
我的问题是:Oracle中是否存在原子MERGE?我正在寻找与INSERT ... FOR UPDATEPL/SQL 具有类似效果的东西,除了我只能从我的应用程序执行SQL.
编辑:我不清楚.我在使用MERGE语句时仍然出现此错误.问题是,只有"修改"部分是原子的,而不是整个合并.
我是weblogic的新手.
我已经阅读了http://download.oracle.com/docs/cd/E11035_01/wls100/cluster/overview.html并在互联网上搜索了这个主题,但仍然很难理解一些weblogic的集群概念.
任何人都可以在下面确认/纠正我的理解吗?
也许我把整个概念弄错了.有人能指出我正确的方向吗?
非常感谢.
我正在使用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循环中的这个小功能?
我的问题类似于这个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很新,所以如果我误解了什么,请教育我.
我多次在开源代码中看到对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)
为什么这是一个好习惯?
任何人都可以给我一个真实世界的例子,说明当需要dynamic_cast并且根本无法解决时?我能想到的例子通常可以解决双重调度问题.
如果约束太强,那么一般来说,dynamic_cast的示例也很好.
我希望看到真实的例子,而不是"它通常用于在类型树之间向上和向下转换".
我一直在玩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类型推导.
标准中有这样的理由吗?
我正在读别人的代码.这是它的要点.
类使用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和解压缩过程中选择的原因是什么?这让我很困惑.
除非有充分的理由,否则我认为我正在改变它们,以避免将来混淆.这是一个好主意吗?