情况:服务器调用listen()(但不是accept()!).客户端将SYN发送到服务器.服务器获取SYN,然后将SYN/ACK发送回客户端.但是,客户端现在挂断/死亡,因此它永远不会将ACK发送回服务器.连接处于SYN_SENT状态.
现在另一个客户端发送一个SYN,从服务器返回一个SYN/ACK,然后发回一个ACK.此连接现在处于ESTABLISHED状态.
现在服务器最终调用accept().怎么了?accept()是否阻塞第一个错误的连接,直到发生某种超时?是否检查队列中是否存在任何ESTABLISHED连接并首先返回这些连接?
我有一个数组,告诉你卡是否正在使用:
int used[52];
Run Code Online (Sandbox Code Playgroud)
如果我有很多二手卡,这是一种挑选随机卡的可怕方法:
do {
card = rand() % 52;
} while (used[card]);
Run Code Online (Sandbox Code Playgroud)
因为如果我只有3-4张未使用的卡片,那么找到它们需要永远.
我想出了这个:
int card;
int k = 0;
int numUsed = 0;
for (k=0; k < 52; ++k) {
if (used[k]) numUsed += 1;
}
if (numUsed == 52) return -1;
card = rand() % (52 - numUsed);
for (k=0; k < 52; ++k) {
if (used[k]) continue;
if (card == 0) return k;
card -= 1;
}
Run Code Online (Sandbox Code Playgroud)
我觉得如果甲板已满,效果会更好,但是当甲板是空的时候会更糟,因为我必须通过两个for循环.
最有效的方法是什么?
我有一个Python应用程序.它通过执行以下操作来加载配置文件(以及各种其他文件):
_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
CONFIG_DIR = os.path.join(_path, 'conf')
Run Code Online (Sandbox Code Playgroud)
这很好用.但是,当我用py2exe打包应用程序时,会发生不好的事情:
File "proj\config.pyc", line 8, in <module>
WindowsError: [Error 3] The system cannot find the path specified: 'C:\\proj\
\dist\\library.zip\\conf'
Run Code Online (Sandbox Code Playgroud)
显然这是一条无效的道路......这样做的更有效的方法是什么?我不想在程序中指定绝对路径,因为它可以放在不同的文件夹中.我应该只说"如果它说文件夹名称是'library.zip',那么再向下一级到'dist'文件夹"?
请注意,我有非常嵌套的目录层次结构...例如,我有一个模块gui.utils.images,存储在"gui/utils/images.py"中,它使用其路径访问"gui/images/ok. png",例如.现在py2exe版本会尝试访问"proj/dist/library.zip/gui/images/ok.png",或其他东西,这是行不通的.
给定一个整数数组,你怎么能找到两个索引i和j,这样在索引开始和结束时子元素的总和最大化,在线性时间?
我有一张桌子,Foo.我在Foo上运行查询以从Foo的子集中获取ID.然后我想运行一组更复杂的查询,但仅限于那些ID.有没有一种有效的方法来做到这一点?我能想到的最好的是创建一个查询,例如:
SELECT ... --complicated stuff
WHERE ... --more stuff
AND id IN (1, 2, 3, 9, 413, 4324, ..., 939393)
Run Code Online (Sandbox Code Playgroud)
也就是说,我构建了一个巨大的"IN"子句.这有效吗?有没有更有效的方法,或者是获取ID的初始查询加入的唯一方法?如果它有帮助,我使用SQLObject连接到PostgreSQL数据库,并且我可以访问执行查询的游标以获取所有ID.
更新:我应该提到更复杂的查询都要么依赖这些ID,要么创建更多ID以在其他查询中查找.如果我要做一个大型查询,我最终会一次加入六个表,这可能太慢了.
我知道有两种方法可以插入而无需重复.第一个是使用一个WHERE NOT EXISTS子句:
INSERT INTO table_name (col1, col2, col3)
SELECT %s, %s, %s
WHERE NOT EXISTS (
SELECT * FROM table_name AS T
WHERE T.col1 = %s
AND T.col2 = %s)
Run Code Online (Sandbox Code Playgroud)
另一个是做LEFT JOIN:
INSERT INTO table_name (col1, col2, col3)
SELECT %s, %s, %s
FROM ( SELECT %s, %s, %s ) A
LEFT JOIN table_name B
ON B.COL1 = %s
AND B.COL2 = %s
WHERE B.id IS NULL
LIMIT 1
Run Code Online (Sandbox Code Playgroud)
是否存在一个比另一个更快的一般规则,还是依赖于表?有不同的方式比两者都好吗?
当我有一个时gtk.CellRendererText,我可以将其foreground颜色与一个树存储列相关联,并将该foreground-set属性设置为True,以更改该列中文本的颜色.但是,当选择带有彩色列的行时,其颜色会消失,并且与任何选定单元格的颜色相同.如何在选择颜色时更改颜色?
当列改变大小时,我可以捕获什么信号来检测gtk.TreeView?我似乎无法在文档中找到它.
我正在实现一些基于模板的序列化。我为 实现了模板化函数std::map,但现在我使用的是std::unordered_map. 我宁愿不复制和粘贴整个函数,而只是更改参数类型。有没有办法制作一个只需要一张地图或一张无序地图的模板?
我知道如何列出 Windows 中的所有窗口标题,例如通过 Win32 API使用 Python 。或者最终我可以直接用 C/C++ 编写它。
如何在 Mac OS X 上完成此操作?它不一定必须是Python 语言,也不一定是跨平台的。最好它不需要任何额外的下载就可以运行(例如仅使用包含的命令的 applescript 文件或 bash 文件),但这不是必需的。