在Nodejs中,几乎没有阻塞I/O操作.这意味着几乎所有nodejs IO代码都涉及许多回调.这适用于对数据库,文件,进程等进行读写操作.典型示例如下:
var useFile = function(filename,callback){
posix.stat(filename).addCallback(function (stats) {
posix.open(filename, process.O_RDONLY, 0666).addCallback(function (fd) {
posix.read(fd, stats.size, 0).addCallback(function(contents){
callback(contents);
});
});
});
};
...
useFile("test.data",function(data){
// use data..
});
Run Code Online (Sandbox Code Playgroud)
我期待编写代码来进行许多 IO操作,所以我希望编写很多回调函数.我对使用回调很满意,但我担心所有的递归.我是否有可能遇到过多的递归并在某个地方吹过堆栈?如果我通过数千次回调对我的键值存储进行数千次单独写入,我的程序最终会崩溃吗?
我误解或低估了影响吗?如果没有,有没有办法解决这个问题,同时仍然使用Nodejs的回调编码风格?
我收到了这个错误:
cannot access javax.el.ELContext
class file for javax.el.ELContext not found
Run Code Online (Sandbox Code Playgroud)
我正在使用Tomcat 6.0.20和Mojarra JSF 1.2_13-b01-FCS.我错过了什么课?请帮忙.
我正在研究如何正确地逃避来自外部世界的数据,然后才能将其用于应用程序控制,存储,逻辑等等.
显然,魔术语录指令很快在php 5.3.0+中被弃用,并在php6中删除,对于任何想要升级并进入新语言功能的人来说,这变得更加紧迫,同时保留遗留代码(我们不喜欢它..).
但是,有一件事我还没有看到很多关于理论/最佳实践的讨论,一旦你保护你的数据怎么做 - 例如,存储是否有斜杠?我个人认为在数据库中保存转载数据是一个不好的举动,但希望听到讨论并最好阅读一些案例研究.
PHP手册中的一些链接仅供参考:
PHP手册 - mysql_real_escape_string
等等
有小费吗?
每当我发现自己需要在C++程序中序列化对象时,我就会回到这种模式:
class Serializable {
public:
static Serializable *deserialize(istream &is) {
int id;
is >> id;
switch(id) {
case EXAMPLE_ID:
return new ExampleClass(is);
//...
}
}
void serialize(ostream &os) {
os << getClassID();
serializeMe(os);
}
protected:
int getClassID()=0;
void serializeMe(ostream &os)=0;
};
Run Code Online (Sandbox Code Playgroud)
以上在实践中效果很好.但是,我听说这种类ID转换是邪恶的,反模式; 什么是在C++中处理序列化的标准OO方式?
我想知道哪些是仅在头文件中声明和实现类之间的区别,与在标头中对类进行类型化并在有效的.cpp文件中实现的常规方法相比.
为了更好地解释我在说什么,我的意思是正常方法之间的区别:
// File class.h
class MyClass
{
private:
//attributes
public:
void method1(...);
void method2(...);
...
};
//file class.cpp
#include "class.h"
void MyClass::method1(...)
{
//implementation
}
void MyClass::method2(...)
{
//implementation
}
Run Code Online (Sandbox Code Playgroud)
和一个公正的方法:
// File class.h
class MyClass
{
private:
//attributes
public:
void method1(...)
{
//implementation
}
void method2(...)
{
//implementation
}
...
};
Run Code Online (Sandbox Code Playgroud)
我可以得到主要区别:在第二种情况下,代码包含在每个需要它生成相同实现的更多实例的其他文件中,因此是隐式冗余; 而在第一种情况下,代码是由自己编译的,然后每个引用对象的调用MyClass都链接到实现中class.cpp.
但还有其他差异吗?取决于具体情况,使用方法而不是另一种方法更方便吗?我还读过某个地方,直接将方法的主体定义到头文件中是对编译器内联该方法的隐式请求,是真的吗?
我试图用我自己的分配器替换new/delete.所以,重写新的和删除 - 非常满意.看起来像这样......
void* operator new( size_t size, Allocator* a )
{
return a->Alloc( size );
}
template<class T> inline void MyDelete( T* p, Allocator* a )
{
if( p )
{
p->~T();
a->Free( p );
}
}
Run Code Online (Sandbox Code Playgroud)
C++语言指定,对于放置删除,您必须显式调用~dtor.编译器不会为您执行此操作.这是一个模板化操作符删除还是显式函数如图所示.
见http://www2.research.att.com/~bs/bs_faq2.html#placement-delete
问题是 - 我怎样才能使这个数组删除[]?我知道我需要遍历数组并自己调用~dtor.因此我需要数组的大小,
编辑清晰
我可以存储此信息或从块大小推断它.然而,问题是编译器(MSVC v9)做了不同的事情,如果我分配一个带有析构函数的对象数组与没有析构函数的对象相比,即如果有一个dtor它将分配额外的4个字节.这是因为标准delete []的编译器需要做同样的事情,并且可以为delete []配对相应的代码.
但是在我自己的"placement"中删除[]我无法知道编译器做了什么,或者如果类有一个dtor,则在编译时安全地确定.
例如
char buf[ 1000 ];
MyClass* pA = new( buf ) MyClass[ 5 ];
Run Code Online (Sandbox Code Playgroud)
这里pA的值是buf + 4,如果存在~MyClass()并且分配的内存量是sizeof(MyClass)*5 + 4.但是如果没有dtor那么pA == buf并且分配的内存量是sizeof(MyClass)*5.
所以我的问题是 - 这种行为是一种语言标准,并且在编译器中是一致的,还是MSVC特有的?还有其他人对这个问题有一个很好的解决方案吗?我想唯一的选择是不使用new []并自己进行构造,这很好,但调用代码语法有点不寻常..或强制每个类都有一个析构函数.
我正在阅读O'Reilly的Flex&Bison,并想知道预先学习正则表达式是否有助于开发编程语言?
今天我看到了这个奇怪的神奇NTFS系统支持:每个文件可以有多个数据流.基本上可以有一个a.txt0b大小的文件,但是在该文件的单独数据流中可以隐藏任意数量的字节.这是严格的NTFS相关魔法,我没有看到有这些流的任何高尚的原因.您可以streams在Sysinternals 的实用程序的帮助下查找NTFS流.这将告诉你,基本上每个讨厌的thumbs.db文件都附带一个额外的数据流.
好的,现在我已经看到了这个神奇的工作在Windows NT4系统上,流添加到文件,复制,删除(在上述实用程序的帮助下),但我现在在家里尝试这个我的Win XP系统,但是虽然我可以检测现有的流,我无法显示它们的内容,无法创建新的内容,或者在使用filename:streamname语法时无法显示任何内容.
我收到此错误:
文件名,目录名或卷标语法不正确.
示例:流实用程序的输出:
c:\DOWNLOADS>streams.exe -s .
Streams v1.56 - Enumerate alternate NTFS data streams
Copyright (C) 1999-2007 Mark Russinovich
Sysinternals - www.sysinternals.com
c:\DOWNLOADS\1013.pdf:
:Zone.Identifier:$DATA 46
c:\DOWNLOADS>type 1013.pdf:Zone.Identifier
The filename, directory name, or volume label syntax is incorrect.
Run Code Online (Sandbox Code Playgroud)
为什么我不能显示备用数据流的内容?
查看有关" 如何使用NTFS备用数据流 " 的Microsoft文档,我可以看到这适用于我的操作系统,尽管他们确实提到将来不支持这些流.任何人都可以对此有所了解吗?
我想要我的应用程序,它会在单击关闭(X)按钮时最小化到系统托盘.
只有通过单击主应用程序窗口上的其他按钮/菜单或单击系统托盘上下文menuItem才能关闭它.
我可以在关闭时使窗口最小化到托盘.
但我面临的问题是,我现在无法关闭应用程序.
这是我的代码(它无法关闭应用程序):
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void hideToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Visible = false;
}
private void showToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Visible = true;
}
private void quitToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.DoEvents();
Application.Exit();
}
private void Form1_Resize(object sender, EventArgs e)
{
if (FormWindowState.Minimized == this.WindowState)
{
notifyIcon1.Visible = true;
notifyIcon1.ShowBalloonTip(500);
this.Hide();
}
else if (FormWindowState.Normal == this.WindowState)
{
notifyIcon1.Visible = false;
}
}
private void …Run Code Online (Sandbox Code Playgroud)