我自己和一些队友一直无法理解为什么下面的代码片段在使用JVM版本1.6u23到1.6u31(本帖子的最新版本)时不能提供正确的输出.此代码段代表了一个更大问题的简化:
更新:稍微修改了示例,重点关注"virtual_function()"似乎没有被调用的问题.
更新:根据迄今为止的评论更简化示例.
NodeTester.cpp:
#include <iostream>
#include <jni.h>
class Node {
public:
Node () :m_counter(0) {}
virtual ~Node () {}
virtual void virtual_function () {
m_counter += 10;
}
void non_virtual_function () {
m_counter += 1;
}
int get_counter () {
return m_counter;
}
private:
int m_counter;
};
extern "C" {
JNIEXPORT void JNICALL Java_NodeTester_testNode (JNIEnv *jni_env_rptr,
jclass java_class) {
Node *node_rptr = new Node();
node_rptr->non_virtual_function();
node_rptr->virtual_function();
std::cout << node_rptr->get_counter() << std::endl;
delete node_rptr;
}
}
Run Code Online (Sandbox Code Playgroud)
NodeTester.java:
public class NodeTester …Run Code Online (Sandbox Code Playgroud) 我正在为一个约30名开发人员的团队编写一套python编码指南.作为我的文档的基础,到目前为止,我已经研究了谷歌python风格指南和PEP 8风格指南,并结合了两者的信息.
谷歌风格指南比PEP 8更具限制性的地方是进口.Google指南要求开发人员仅导入包和模块,然后通过更合格的名称引用其中的项目.例如:
from pkg import module
...
my_class = module.MyClass()
Run Code Online (Sandbox Code Playgroud)
理由是"每个标识符的来源以一致的方式表示".对于我们的项目,我们打算使用两个或三个级别的包进行组织,因此要了解标识符的完整来源,读者可能还需要检查import语句.我想提倡这种导入方式作为"首选风格":
from pkg.module import MyClass
...
my_class = MyClass()
Run Code Online (Sandbox Code Playgroud)
恕我直言,当名称更简洁时,改进了列表推导等python结构中的可读性.
我不清楚的是python解释器可能在幕后做什么.例如,MyClass现在是该模块的全局命名空间的一部分,还是该模块的所有导入器?(这会很糟糕,可能会导致一些奇怪的错误;如果这是真的,我会提倡谷歌风格).
我的python开发经验仅限于6个月(我们的项目专家咨询的人数不多),所以我希望从社区获得更多信息.以下是我已经研究过的一些项目:
谢谢您的反馈!
我有一种情况,我想从一个以NULL结尾的char*中有效地删除一个字符.我可以假设传入的字符串很大(即复制效率不高); 但我也可以假设我不需要取消分配未使用的内存.
我以为我可以std::remove_if用于此任务(用NULL-terminator替换返回的迭代器中的字符),并设置以下测试程序以确保我的语法正确:
#include <algorithm>
#include <iostream>
bool is_bad (const char &c) {
return c == 'a';
}
int main (int argc, char *argv[]) {
char * test1 = "123a45";
int len = 6;
std::cout << test1 << std::endl;
char * new_end = std::remove_if(&test1[0], &test1[len], is_bad);
*new_end = '\0';
std::cout << test1 << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然而,这个程序编译,我正在Segmentation Fault某个地方remove_if- 这里的输出来自gdb:
Program received signal SIGSEGV, Segmentation fault.
0x0000000000400914 in std::remove_copy_if<char*, char*, bool (*)(char …Run Code Online (Sandbox Code Playgroud) 我们在现场部署了一个系统,该系统具有使用logback日志记录框架的Java服务.每个服务都有自己的logback配置文件.
我们发现每秒多次以WARN级别发出特定的日志消息.我们真的只对看到这个消息感兴趣,例如,一次/分钟,以便我们知道问题正在发生; 但是我们不想提高类的日志记录级别,以便丢弃INFO级别的其他消息.
修改代码不是一种选择,也不会对涉及重新启动违规服务的系统进行任何修改.但是,我们可以修改日志配置.
有没有办法在logback中通过XML配置文件来实现这种行为?
更新 消息类似,但不相同; 例如:
WARN The following ID will be dropped: 12345
WARN The following ID will be dropped: 54321
Run Code Online (Sandbox Code Playgroud)