公司招聘软件研发程序员的一道考题--MS SQL Server数据库数据文件页面头部结构...
有一次在招聘C++程序員時,出的一道考題,內(nèi)容其實(shí)就是MS SQL Server數(shù)據(jù)庫數(shù)據(jù)文件頁面頭部結(jié)構(gòu),如下:
有個file.a文件,這個文件以16sec[sec是扇區(qū),每個sec包含512個Byte(字節(jié))]為一個頁進(jìn)行分組并編號。
如:
文件的0-15sec(0-8191byte)?為第0頁
文件的16-31sec(8192-16383byte)?為第1頁
文件的32-47sec(16384-24575byte)?為第2頁 以此類推
每個頁的頭96個字節(jié)結(jié)構(gòu)如下:(注意:這里是每個頁頭部96Byte,1頁大小是16 sec,8192 bytes)
struct mdfPageHeader //文件頁頭部結(jié)構(gòu)
??? {
????? UINT8??? m_headerVersion; //版本
??????UINT8??? m_type;???????? //頁類型
????? UINT8??? m_typeFlagBits;
????? UINT8??? m_level;??
????? UINT8??? m_flagBits;???
????? UINT8??? m_reservedB;? ??
????? UINT16?? m_indexId;????
????? UINT32?? m_prevPage_id;??
??????UINT16?? m_prevPage_fid;
??????UINT16?? pminlen;?????
????? UINT32?? m_nextPage_id;??
??????UINT16?? m_nextPage_fid;
????? UINT16?? m_slotCnt;????
????? UINT32?? m_objId;???? //所屬對象ID????
????? UINT16?? m_freeCnt;????
????? UINT16?? m_freeData;???
????? UINT32?? m_pageId_id;? //每頁編號?
????? UINT16?? m_pageId_fid;? ?
????? UINT16?? m_reservedCnt;??
????? UINT32?? m_lsn_d1;????
????? UINT32?? m_lsn_d2;
????? UINT16?? m_lsn_w1;
????? UINT16?? m_xactReserved;?
????? UINT32?? m_xdesId_id;
??????UINT16?? m_xdesId_fid;
????? UINT16?? m_ghostRecCnt;
????? UINT32?? m_tornBits;???
????? UINT64?? temp1;
????? UINT64?? temp2;
????? UINT64?? temp3;
????? UINT64?? temp4;
??? };
用VC++完成下面編程:
把符合m_headerVersion==1、m_type==1、m_objId==1三個條件的頁面(16sec)找出來,
并把這些頁面按照查詢先后順序?qū)懙搅硪粋€文件file.b文件中。
提示:
打開和創(chuàng)建文件可以用下面兩種方法來實(shí)現(xiàn)
1、CFile fileo,filew;
fileo.Open("file.a",CFile::modeRead|CFile::typeBinary);
filew.Open("file.b",CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);
2、HANDLE hFileA,hfileB;
hFileA = CreateFile(_T("file.a"),GENERIC_READ, FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
hFileB = CreateFile(_T("file.b"),GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,0,NULL);
?
轉(zhuǎn)載于:https://blog.51cto.com/199818/638725
總結(jié)
以上是生活随笔為你收集整理的公司招聘软件研发程序员的一道考题--MS SQL Server数据库数据文件页面头部结构...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: poj1835
- 下一篇: linux分屏显示文件命令:more(l