共2頁(yè): 1 2
re: gcc 中std::list 的size()成員函數(shù)[未登錄] hdqqq 2016-04-25 10:01
@Chipset
麻煩看清楚文章再噴
麻煩看清楚文章再噴
re: 有問題的c++通信代碼的識(shí)別[未登錄] hdqqq 2016-04-12 11:36
12 行沒檢查返回值
53 行 new 一定成功嗎
53 行 new 一定成功嗎
re: 怎么實(shí)現(xiàn)釋放和分配時(shí)間復(fù)雜度都為常數(shù)(O(1))的內(nèi)存池[未登錄] hdqqq 2012-03-16 16:54
在alloc和free中看到了new和delete,這種分配不會(huì)是o(1)的。
re: 被delete難倒了[未登錄] hdqqq 2011-04-01 11:32
如果樓主使用 /mt 編譯,dll啟動(dòng)時(shí)使用自己的堆, 在主程序中new 出來的對(duì)象,再通過指針傳給dll,然后在dll中釋放,會(huì)產(chǎn)生錯(cuò)誤,主程序和dll使用不同的堆。
re: 自己常用的 VIM 命令[未登錄] hdqqq 2011-03-27 23:12
* 查找光標(biāo)當(dāng)前單詞
gd 查找光標(biāo)單詞定義
ga 顯示光標(biāo)下字母ascii碼
gd 查找光標(biāo)單詞定義
ga 顯示光標(biāo)下字母ascii碼
re: 一種基于引用計(jì)數(shù)機(jī)制的智能指針實(shí)現(xiàn)[未登錄] hdqqq 2010-12-17 22:55
比較討厭這種引用計(jì)數(shù)指針的使用,一旦使用就意味這在所有的函數(shù)參數(shù)中必須使用指針引用或者值拷貝,一旦某些函數(shù)要求用裸指針,就可能引發(fā)問題。
re: 求助。關(guān)于如何將文件映射成STL容器內(nèi)存空間的方法。[未登錄] hdqqq 2010-12-10 20:58
文件映射無助于增加進(jìn)程可用地址空間。除非你修改set的實(shí)現(xiàn),把對(duì)節(jié)點(diǎn)的訪問直接
對(duì)應(yīng)到對(duì)文件的訪問,但是在大數(shù)據(jù)量的情況下,隨機(jī)訪問的效率很差。
關(guān)鍵還是在于減少內(nèi)存的使用上
1. stl 中的set使用紅黑樹實(shí)現(xiàn)的,一個(gè)節(jié)點(diǎn)有左,右,父節(jié)點(diǎn)三個(gè)指針和一個(gè)紅黑標(biāo)志位.32位系統(tǒng)下最少占用13個(gè)字節(jié),
考慮內(nèi)存對(duì)齊下,可能使用到16個(gè)字節(jié),在大數(shù)據(jù)量的情況下,為了保持這個(gè)樹結(jié)構(gòu),額外使用的內(nèi)存是很多的,可以考慮使用hash set.
2. url長(zhǎng)度都比較長(zhǎng),可考慮計(jì)算md5 hash,減少存儲(chǔ)占用.
3. 不要妄想把所有數(shù)據(jù)都存在內(nèi)存,總會(huì)有內(nèi)存耗盡的時(shí)候,另外,如果程序異常或者崩潰,所有數(shù)據(jù)將丟失.
我以前實(shí)現(xiàn)的一種方式是,以數(shù)據(jù)庫(kù)為主要存儲(chǔ),內(nèi)存作為優(yōu)先查詢cache.
1. 數(shù)據(jù)庫(kù)建散列表, 以十六進(jìn)制 0-F 開始,根據(jù)md5第一位決定存儲(chǔ)表,用于存儲(chǔ)md5值,并對(duì)md5建索引加快查詢.
2. 在內(nèi)存中用set或map保存md5值,查詢時(shí)先計(jì)算url md5值,再查詢內(nèi)存,如果不存在,則從數(shù)據(jù)庫(kù)加載.如為新url,先存入內(nèi)存.
3. 內(nèi)存總量到一定閥值,進(jìn)行數(shù)據(jù)保存,并清空內(nèi)存cache.
不過這種實(shí)現(xiàn)存在cache命中問題,你可以一次加載整張表,也可以用 like 查詢條件,減少數(shù)據(jù)庫(kù)返回的記錄數(shù).
已有的php實(shí)現(xiàn),內(nèi)存cache200萬條記錄,總內(nèi)存使用在1200M左右,可長(zhǎng)時(shí)間運(yùn)行,沒有內(nèi)存使用問題.
對(duì)應(yīng)到對(duì)文件的訪問,但是在大數(shù)據(jù)量的情況下,隨機(jī)訪問的效率很差。
關(guān)鍵還是在于減少內(nèi)存的使用上
1. stl 中的set使用紅黑樹實(shí)現(xiàn)的,一個(gè)節(jié)點(diǎn)有左,右,父節(jié)點(diǎn)三個(gè)指針和一個(gè)紅黑標(biāo)志位.32位系統(tǒng)下最少占用13個(gè)字節(jié),
考慮內(nèi)存對(duì)齊下,可能使用到16個(gè)字節(jié),在大數(shù)據(jù)量的情況下,為了保持這個(gè)樹結(jié)構(gòu),額外使用的內(nèi)存是很多的,可以考慮使用hash set.
2. url長(zhǎng)度都比較長(zhǎng),可考慮計(jì)算md5 hash,減少存儲(chǔ)占用.
3. 不要妄想把所有數(shù)據(jù)都存在內(nèi)存,總會(huì)有內(nèi)存耗盡的時(shí)候,另外,如果程序異常或者崩潰,所有數(shù)據(jù)將丟失.
我以前實(shí)現(xiàn)的一種方式是,以數(shù)據(jù)庫(kù)為主要存儲(chǔ),內(nèi)存作為優(yōu)先查詢cache.
1. 數(shù)據(jù)庫(kù)建散列表, 以十六進(jìn)制 0-F 開始,根據(jù)md5第一位決定存儲(chǔ)表,用于存儲(chǔ)md5值,并對(duì)md5建索引加快查詢.
2. 在內(nèi)存中用set或map保存md5值,查詢時(shí)先計(jì)算url md5值,再查詢內(nèi)存,如果不存在,則從數(shù)據(jù)庫(kù)加載.如為新url,先存入內(nèi)存.
3. 內(nèi)存總量到一定閥值,進(jìn)行數(shù)據(jù)保存,并清空內(nèi)存cache.
不過這種實(shí)現(xiàn)存在cache命中問題,你可以一次加載整張表,也可以用 like 查詢條件,減少數(shù)據(jù)庫(kù)返回的記錄數(shù).
已有的php實(shí)現(xiàn),內(nèi)存cache200萬條記錄,總內(nèi)存使用在1200M左右,可長(zhǎng)時(shí)間運(yùn)行,沒有內(nèi)存使用問題.
re: 麒麟操作系統(tǒng)內(nèi)核同其他操作系統(tǒng)內(nèi)核的相似性分析[未登錄] hdqqq 2010-11-18 18:11
麒麟感覺就是參照freebsd搞的,看top的顯示就知道了,可以說是一抹一樣.
可能就是直接拿過來調(diào)了一下。
可能就是直接拿過來調(diào)了一下。
re: Vim操作技巧札記(一)[未登錄] hdqqq 2010-11-09 16:20
配置文件中增加
imap <F3> <Esc>gg=G
或者
nmap <F3> gg=G
以后一鍵搞定.
imap <F3> <Esc>gg=G
或者
nmap <F3> gg=G
以后一鍵搞定.
re: 一道面試題(求一個(gè)unsigned int 數(shù)的二進(jìn)制表示中有多少個(gè)1?)[未登錄] hdqqq 2010-05-29 11:30
@hdqqq
上面已經(jīng)貼了類似的,我的作廢。
上面已經(jīng)貼了類似的,我的作廢。
re: 一道面試題(求一個(gè)unsigned int 數(shù)的二進(jìn)制表示中有多少個(gè)1?)[未登錄] hdqqq 2010-05-29 11:26
unsigned long val ;
int count = 0;
while(val) {
count += (val & 1) ;
val >>= 1;
}
int count = 0;
while(val) {
count += (val & 1) ;
val >>= 1;
}
re: 學(xué)之者生,用之者死——ACE歷史與簡(jiǎn)評(píng) hdqqq 2010-03-12 16:37
用協(xié)議棧代碼和ace代碼對(duì)比欠妥,基礎(chǔ)層要提供的接口和要實(shí)現(xiàn)的功能相對(duì)固定,而在應(yīng)用層上,要復(fù)雜很多。
re: MultiByteToWideChar和WideCharToMultiByte用法詳解 [未登錄] hdqqq 2009-08-22 00:08
照著樓主的代碼,果然有問題,麻煩樓主以后寫代碼或者轉(zhuǎn)文章對(duì)讀者負(fù)責(zé)一下,最煩這種轉(zhuǎn)文章的,搞的搜索結(jié)果都一樣,都是轉(zhuǎn)帖的。
re: 一個(gè)想法,用程序畫出高維超立方體在三維上的投影!!!(1)[未登錄] hdqqq 2009-07-31 23:25
演示4維立方體的falsh
http://4d.shadowpuppet.net/4d.php
http://4d.shadowpuppet.net/4d.php
re: 邪惡的Windows[未登錄] hdqqq 2009-07-31 17:25
你有命名MessageBox的權(quán)利,條件是別去包含 <windows.h>
既然你包含了這個(gè)文件,那就乖乖換名字吧。
既然你包含了這個(gè)文件,那就乖乖換名字吧。
re: 使用boost庫(kù)需要一定的素質(zhì)[未登錄] hdqqq 2009-07-30 21:43
涉及的東西太多了,有些還不完善,線程庫(kù)在windows下只是簡(jiǎn)單的封裝,連優(yōu)先級(jí)調(diào)整都沒有,線程局部存貯沒有編譯開關(guān)。
re: 在類模板的聲明和定義中把.h與.cpp分離[未登錄] hdqqq 2009-07-25 20:11
這個(gè)和include .h 文件有啥區(qū)別,后綴不同而已。
re: 類實(shí)例能做做模板參數(shù)嗎?[未登錄] hdqqq 2009-06-03 21:08
是啊,所以我讓你看
typeid(std::string()).name()
的輸出.
typeid(std::string()).name()
的輸出.
re: 類實(shí)例能做做模板參數(shù)嗎?[未登錄] hdqqq 2009-06-02 13:38
typedef void (type_func)(void);
typedef void (*ptype_func)(void);
template <typename T>
class template_class
{
private:
typedef T local_type;
public:
template_class()
{
std::cout << typeid(local_type).name() << std::endl;
}
};
void test()
{
template_class<int> la;
template_class<type_func> lg;
template_class<ptype_func> lb;
template_class<int()> le;
template_class<int(int)> lf;
template_class<int(int())> lc;
template_class<void()> ld;
}
上面的代碼可編譯通過
typedef void (*ptype_func)(void);
template <typename T>
class template_class
{
private:
typedef T local_type;
public:
template_class()
{
std::cout << typeid(local_type).name() << std::endl;
}
};
void test()
{
template_class<int> la;
template_class<type_func> lg;
template_class<ptype_func> lb;
template_class<int()> le;
template_class<int(int)> lf;
template_class<int(int())> lc;
template_class<void()> ld;
}
上面的代碼可編譯通過
re: C 還是 CPP[未登錄] hdqqq 2009-05-27 14:34
re: 類實(shí)例能做做模板參數(shù)嗎?[未登錄] hdqqq 2009-05-27 10:14
std::string() 也可以看作是一個(gè)類型.
long test(void);
sizeof(test) 和 sizeof( test() )
前面一個(gè)是 函數(shù)指針, 后面一個(gè)是 test 的返回值 long.
你可以看看這個(gè)的輸出.
std::cout << typeid(std::string).name() << std::endl;
std::cout << typeid(std::string()).name() << std::endl;
在下面這句話里
boost::function<std::string()> func(Test);
這個(gè)std::string 的變量根本不會(huì)被構(gòu)造, 所以不存在 所謂的實(shí)例.
long test(void);
sizeof(test) 和 sizeof( test() )
前面一個(gè)是 函數(shù)指針, 后面一個(gè)是 test 的返回值 long.
你可以看看這個(gè)的輸出.
std::cout << typeid(std::string).name() << std::endl;
std::cout << typeid(std::string()).name() << std::endl;
在下面這句話里
boost::function<std::string()> func(Test);
這個(gè)std::string 的變量根本不會(huì)被構(gòu)造, 所以不存在 所謂的實(shí)例.
re: C 還是 CPP[未登錄] hdqqq 2009-04-10 18:41
@Lingol
可能我舉得例子太簡(jiǎn)單了,在編譯時(shí)候沒開優(yōu)化的情況下,是不會(huì)精簡(jiǎn)代碼的.在復(fù)雜的情況下,如果 funcb被這個(gè)類的某個(gè)虛函數(shù)依賴.
如:
class CTestClass
{
public:
CTestClass(void);
~CTestClass(void);
public:
void mem_func1();
void mem_func2();
virtual void vfunc();
};
int test_function(int);
static int glob_val;
CTestClass::CTestClass(void)
{
glob_val = 10;
}
CTestClass::~CTestClass(void)
{
glob_val = 0;
}
void CTestClass::mem_func1()
{
glob_val = 1;
}
void CTestClass::mem_func2()
{
printf("hello world\n");
}
void CTestClass::vfunc()
{
mem_func1();
}
int test_function(int val)
{
int ret = val;
CTestClass lt;
lt.mem_func2();
return ret;
}
用vs2003把
上面的代碼被編譯成了lib,在main函數(shù)中調(diào)用
test_function(atoi(argv[1]));開啟全部?jī)?yōu)化,在生成的map文件中顯示
_main 00401000 f comple_test.obj
??0CTestClass@@QAE@XZ 00401020 f complie_lib:TestClass.obj
??1CTestClass@@QAE@XZ 00401040 f complie_lib:TestClass.obj
?mem_func1@CTestClass@@QAEXXZ 00401060 f complie_lib:TestClass.obj
?mem_func2@CTestClass@@QAEXXZ 00401070 f complie_lib:TestClass.obj
?vfunc@CTestClass@@UAEXXZ 00401080 f complie_lib:TestClass.obj
?test_function@@YAHH@Z 00401090 f complie_lib:TestClass.obj
可以看到,盡管只調(diào)用了構(gòu)造,析構(gòu)和mem_func2,mem_func1 還是連接在里面.
可能我舉得例子太簡(jiǎn)單了,在編譯時(shí)候沒開優(yōu)化的情況下,是不會(huì)精簡(jiǎn)代碼的.在復(fù)雜的情況下,如果 funcb被這個(gè)類的某個(gè)虛函數(shù)依賴.
如:
class CTestClass
{
public:
CTestClass(void);
~CTestClass(void);
public:
void mem_func1();
void mem_func2();
virtual void vfunc();
};
int test_function(int);
static int glob_val;
CTestClass::CTestClass(void)
{
glob_val = 10;
}
CTestClass::~CTestClass(void)
{
glob_val = 0;
}
void CTestClass::mem_func1()
{
glob_val = 1;
}
void CTestClass::mem_func2()
{
printf("hello world\n");
}
void CTestClass::vfunc()
{
mem_func1();
}
int test_function(int val)
{
int ret = val;
CTestClass lt;
lt.mem_func2();
return ret;
}
用vs2003把
上面的代碼被編譯成了lib,在main函數(shù)中調(diào)用
test_function(atoi(argv[1]));開啟全部?jī)?yōu)化,在生成的map文件中顯示
_main 00401000 f comple_test.obj
??0CTestClass@@QAE@XZ 00401020 f complie_lib:TestClass.obj
??1CTestClass@@QAE@XZ 00401040 f complie_lib:TestClass.obj
?mem_func1@CTestClass@@QAEXXZ 00401060 f complie_lib:TestClass.obj
?mem_func2@CTestClass@@QAEXXZ 00401070 f complie_lib:TestClass.obj
?vfunc@CTestClass@@UAEXXZ 00401080 f complie_lib:TestClass.obj
?test_function@@YAHH@Z 00401090 f complie_lib:TestClass.obj
可以看到,盡管只調(diào)用了構(gòu)造,析構(gòu)和mem_func2,mem_func1 還是連接在里面.
re: C 還是 CPP[未登錄] hdqqq 2009-04-07 23:12
我說的這個(gè)程序,它的用途是和一些數(shù)據(jù)打包后,需要在客戶機(jī)器上直接運(yùn)行,不需要安裝或依賴額外的dll,就像直接運(yùn)行的電子書或者demo啥的,如果試想程序有上兆,數(shù)據(jù)才幾百k是不是有點(diǎn)浪費(fèi),而且以后還可能制作成千上百個(gè)的文件,累計(jì)起來是很可觀的,執(zhí)行文件大小和效率一樣重要. 另外 crt用dll的話,vc6的crt dll基本上windows系統(tǒng)都有,但是vc2005的crt就不是每個(gè)系統(tǒng)都有的,你需要另外裝個(gè)vc2005 redistributable. 至于庫(kù)的問題,程序的配置文件,一開始用的是一個(gè)跨平臺(tái)的xml解析lib, 開始的時(shí)候運(yùn)行的很好,但是當(dāng)配置文件在600K以上的時(shí)候,效率慘不忍睹,后來算了,改為直接結(jié)構(gòu)化讀寫,一樣解決問題,我寫這篇文章的目的,不是說啥庫(kù)都不用,而是不要濫用,模版也一樣,在做程序規(guī)劃的時(shí)候,在寫程序的時(shí)候,多用用 "奧卡姆剃刀".
re: C 還是 CPP[未登錄] hdqqq 2009-04-05 19:27
效率還是很重要的,打個(gè)比方,客戶要輛自行車,一個(gè)手工作坊弄了輛捷安特出來,一個(gè)號(hào)稱全能的車間弄了輛28吋永久出來,你說那個(gè)更好,我寫這篇文章的目的,是想說在寫代碼的時(shí)候,用到某項(xiàng)功能或者庫(kù)的時(shí)候,你需要清楚地了解,你會(huì)付出哪些代價(jià),并且權(quán)衡一下,如果沒有使用的必要,就不要用.對(duì)于一個(gè)新開發(fā)的項(xiàng)目來說,沒有對(duì)比,也許還不是很突出,但是對(duì)于已有項(xiàng)目來說,是一個(gè)很重要的問題.
re: 在IE中增加文字內(nèi)容收集功能[未登錄] hdqqq 2009-01-23 15:52
多謝反饋意見.
這個(gè)錯(cuò)誤是
ts.WriteLine(external.menuArguments.document.selection.createRange().text);
這句代碼有問題,缺省打開的是ascii文件, 改成uncode模式打開文件就好了.
修改后的代碼
<script language="javascript">
var fso,ForAppending,ts;
var t_str;
fso=new ActiveXObject("Scripting.FileSystemObject");
ForAppending = 8;
ts = fso.OpenTextFile("c:\\collect.txt",ForAppending, true, -1); //在這里是一個(gè)絕對(duì)路經(jīng),用的時(shí)候必須修改
t_str = external.menuArguments.document.selection.createRange().text;
ts.WriteLine(t_str);
ts.WriteLine("#########################");
ts.close();
</script>
這個(gè)錯(cuò)誤是
ts.WriteLine(external.menuArguments.document.selection.createRange().text);
這句代碼有問題,缺省打開的是ascii文件, 改成uncode模式打開文件就好了.
修改后的代碼
<script language="javascript">
var fso,ForAppending,ts;
var t_str;
fso=new ActiveXObject("Scripting.FileSystemObject");
ForAppending = 8;
ts = fso.OpenTextFile("c:\\collect.txt",ForAppending, true, -1); //在這里是一個(gè)絕對(duì)路經(jīng),用的時(shí)候必須修改
t_str = external.menuArguments.document.selection.createRange().text;
ts.WriteLine(t_str);
ts.WriteLine("#########################");
ts.close();
</script>
re: 線程模型:將任務(wù)與執(zhí)行分離[未登錄] hdqqq 2008-08-26 16:12
任務(wù)只是抽象意義上的需要運(yùn)行的代碼,函數(shù)和成員函數(shù)只是對(duì)于人來說的,對(duì)于機(jī)器來說,都是一樣的,至于已有函數(shù)滿不滿足接口我想是架構(gòu)需要考慮的問題,其實(shí)一旦代碼編譯好了,其調(diào)用方式就定了,如果非要滿足所有的調(diào)用方式,可能rpc或者com的方式更適合一些。
我以前寫的關(guān)于 函數(shù)和線程方面調(diào)用的文章。
http://blog.csdn.net/hdqqq/archive/2005/06/29/407674.aspx
我以前寫的關(guān)于 函數(shù)和線程方面調(diào)用的文章。
http://blog.csdn.net/hdqqq/archive/2005/06/29/407674.aspx
re: 線程模型:將任務(wù)與執(zhí)行分離[未登錄] hdqqq 2008-08-26 15:04
其實(shí)不一定要過度追求線程實(shí)現(xiàn),一般的實(shí)現(xiàn)方式是啟動(dòng)幾個(gè)線程提供對(duì)外服務(wù),有任務(wù)提交后,分配運(yùn)行。這樣可伸縮性也比較強(qiáng)。
re: boost 1-35編譯[未登錄] hdqqq 2008-07-16 17:13
你到linux下編譯一下就知道了,不帶版本號(hào)的是一個(gè)鏈接,但是在windows下不支持,所以有兩個(gè)了,用鏈接的好處就是可以隨時(shí)升級(jí)新的版本.
re: HTML 轉(zhuǎn) text 工具 hdqqq 2008-07-15 07:46
re: (轉(zhuǎn))C++中extern “C”含義深層探索[未登錄] hdqqq 2008-06-22 22:52
c++編譯的時(shí)候,對(duì)函數(shù)名進(jìn)行修飾,用于實(shí)現(xiàn)函數(shù)充載,而c里面沒有這個(gè),所以需要用extern “C” 在對(duì)頭文件進(jìn)行聲明的時(shí)候加以區(qū)分。這個(gè)用于鏈接的時(shí)候進(jìn)行函數(shù)名查找。
re: SOS, 請(qǐng)教:XML和struct之間相互轉(zhuǎn)換的問題[未登錄] hdqqq 2008-06-04 22:52
我寫的模板讀取xml配置的代碼
http://www.shnenglu.com/hdqqq/archive/2006/02/13/3234.html
http://www.shnenglu.com/hdqqq/archive/2006/02/13/3234.html
re: 可愛的Vim[未登錄] hdqqq 2008-05-26 10:56
vim 是控制臺(tái)程序,所以可以遠(yuǎn)程登錄后進(jìn)行文件編輯,這點(diǎn)上windows下的編輯器根本沒這個(gè)功能.
vim用熟了,鼠標(biāo)根本用不著,很靈活.
vim用熟了,鼠標(biāo)根本用不著,很靈活.
re: 一個(gè)輕量級(jí)家用爬蟲[未登錄] hdqqq 2008-05-19 14:50
@苦惱
我寫的爬蟲,主要的幾個(gè)類都在代碼里面了,你用java開發(fā)的話,關(guān)鍵還是找到對(duì)應(yīng)的功能,象map或者h(yuǎn)ash map, http下載, 正則表達(dá)式等功能的類或者庫(kù),還有就是處理數(shù)據(jù)庫(kù)的模塊,應(yīng)該可以實(shí)現(xiàn)的.
我寫的爬蟲,主要的幾個(gè)類都在代碼里面了,你用java開發(fā)的話,關(guān)鍵還是找到對(duì)應(yīng)的功能,象map或者h(yuǎn)ash map, http下載, 正則表達(dá)式等功能的類或者庫(kù),還有就是處理數(shù)據(jù)庫(kù)的模塊,應(yīng)該可以實(shí)現(xiàn)的.
re: 一個(gè)輕量級(jí)家用爬蟲[未登錄] hdqqq 2008-05-14 11:36
是的,那些在javascript中的url比較難用正則表達(dá)式概括出來,因?yàn)檫€可能是根據(jù)變量生成的,所以就直接過濾了.
至于排重的問題,因?yàn)槲矣?jì)算的是url的md5,而不是整個(gè)html的md5,所以在碰到頁(yè)面更新而url不變的時(shí)候,會(huì)有問題.這個(gè)我在測(cè)試新浪新聞首頁(yè)的時(shí)候,發(fā)現(xiàn)盡管新浪新聞首頁(yè)的url不變,內(nèi)容會(huì)變,但是具體到其中的某條新聞,都是有單獨(dú)的url的.碰到這種情況,只要周期的運(yùn)行一下爬蟲就可以了,我現(xiàn)在的機(jī)器上就是用crontab 定時(shí)運(yùn)行的.
這個(gè)也和爬蟲的目的有關(guān)系,有的可能更關(guān)注某個(gè)具體站點(diǎn),有的也許想多爬一些站點(diǎn),這個(gè)是深度和廣度的關(guān)系,和使用者的策略有關(guān).
我現(xiàn)在用的是一張表記錄歷史記錄,在百萬數(shù)量記錄下,效率不是最好的,建立更小的的分布存儲(chǔ)表可能會(huì)更好一些. 這些可以部署架構(gòu)方面進(jìn)行改進(jìn).
至于排重的問題,因?yàn)槲矣?jì)算的是url的md5,而不是整個(gè)html的md5,所以在碰到頁(yè)面更新而url不變的時(shí)候,會(huì)有問題.這個(gè)我在測(cè)試新浪新聞首頁(yè)的時(shí)候,發(fā)現(xiàn)盡管新浪新聞首頁(yè)的url不變,內(nèi)容會(huì)變,但是具體到其中的某條新聞,都是有單獨(dú)的url的.碰到這種情況,只要周期的運(yùn)行一下爬蟲就可以了,我現(xiàn)在的機(jī)器上就是用crontab 定時(shí)運(yùn)行的.
這個(gè)也和爬蟲的目的有關(guān)系,有的可能更關(guān)注某個(gè)具體站點(diǎn),有的也許想多爬一些站點(diǎn),這個(gè)是深度和廣度的關(guān)系,和使用者的策略有關(guān).
我現(xiàn)在用的是一張表記錄歷史記錄,在百萬數(shù)量記錄下,效率不是最好的,建立更小的的分布存儲(chǔ)表可能會(huì)更好一些. 這些可以部署架構(gòu)方面進(jìn)行改進(jìn).
re: HTML 轉(zhuǎn) text 工具[未登錄] hdqqq 2008-05-13 14:14
郵件已經(jīng)發(fā)了.
re: gcc 中std::list 的size()成員函數(shù)[未登錄] hdqqq 2007-12-16 21:36
@TD
是的,如果開始的時(shí)候指定vector是可以的,但是限定了vector的大小。
是的,如果開始的時(shí)候指定vector是可以的,但是限定了vector的大小。
re: 最新安裝了Linx的蘋果主題,讓大家欣賞一下[未登錄] hdqqq 2007-12-14 14:46
字體還要美好.
re: gcc 中std::list 的size()成員函數(shù)[未登錄] hdqqq 2007-12-11 13:20
不用vector是考慮到在大數(shù)據(jù)量的情況下,vector會(huì)進(jìn)行內(nèi)存的拷貝復(fù)制,所以采用了list
re: OOP的黃昏[未登錄] hdqqq 2007-12-07 18:31
標(biāo)題取的和內(nèi)容沒啥聯(lián)系。看了標(biāo)題跑進(jìn)來,原來在將concept。
re: C中如何調(diào)用C++函數(shù)[未登錄] hdqqq 2007-11-30 18:14
extern "C" 之后,就不能重載函數(shù)了,關(guān)鍵還是函數(shù)名修飾的問題.
re: 把private聲明從.h文件移到.cpp文件[未登錄] hdqqq 2007-11-09 12:46
如果隱藏私有的數(shù)據(jù)成員,會(huì)不會(huì)造成實(shí)現(xiàn)代碼中sizeof(class) 和使用該類時(shí)sizeof(class) 大小不同, 導(dǎo)致數(shù)據(jù)出錯(cuò).
re: ubuntu 7.10真酷,我好喜歡[未登錄] hdqqq 2007-10-21 23:06
裝個(gè)beryl 弄個(gè)立體桌面,比vista 酷多了.
re: 一個(gè)讀取xml配置文件的通用模板 hdqqq 2007-09-12 09:07
loki for vc6 我已經(jīng)上傳了,下載地址.
http://www.shnenglu.com/Files/hdqqq/lokiVC6port.zip
http://www.shnenglu.com/Files/hdqqq/lokiVC6port.zip
re: 一個(gè)讀取xml配置文件的通用模板[未登錄] hdqqq 2007-09-11 18:00
我這里有,留個(gè)mail地址我發(fā)給你.
re: 創(chuàng)建一個(gè)基于模板的數(shù)據(jù)庫(kù)記錄集操作類(四)[未登錄] hdqqq 2007-08-28 09:16
跨平臺(tái)的數(shù)據(jù)庫(kù)操作接口,比較難實(shí)現(xiàn).
re: 顯示字符串的函數(shù)[未登錄] hdqqq 2007-08-03 09:39
類似于Format的用法可以象下面這樣,只是少了格式字符串
make_str("當(dāng)前計(jì)數(shù):",100,"總計(jì)數(shù)", 150);
至于效率的問題,確實(shí)是沒有sprintf這種直接操作的函數(shù)快,因?yàn)樯婕暗椒祷氐目截悘?fù)制的開銷和stringstream的內(nèi)部實(shí)現(xiàn)等制約.
make_str("當(dāng)前計(jì)數(shù):",100,"總計(jì)數(shù)", 150);
至于效率的問題,確實(shí)是沒有sprintf這種直接操作的函數(shù)快,因?yàn)樯婕暗椒祷氐目截悘?fù)制的開銷和stringstream的內(nèi)部實(shí)現(xiàn)等制約.
re: 顯示字符串的函數(shù)[未登錄] hdqqq 2007-07-31 13:11
這些函數(shù)的目的只是為了生成字符串,至于是顯示出來還是寫入文件,是看需求的,功能就象cstring 的format 成員函數(shù).
re: 數(shù)組取大小[未登錄] hdqqq 2007-06-15 11:42
這個(gè)倒是沒考慮過.
re: 比較有用的一組構(gòu)造多參數(shù)的C++宏.[未登錄] hdqqq 2007-04-23 09:36
你可以取看看boost中的preprocessor 部分,講的是預(yù)處理元編程,你這個(gè)宏的功能和boost 中的BOOST_PP_ENUM_PARAMS 宏功能類似.
共2頁(yè): 1 2