2014百度校園招聘軟件研發類筆試(深圳)


時間:2013年9月28日。
地點:深圳
職位:軟件研發
問答題:(10*3)

1.動態連接庫(DLL)與靜態連接庫(lib)的優缺點: c++

靜態連接庫和動態連接庫都是共享代碼的方式,若是採用靜態連接庫,則不管你願不肯意,lib中的指令都所有被直接包含在最終的EXE文件中,若使用DLL,該DLL沒必要被包含在最終的EXE中,EXE文件執行時能夠」動態「地引用和卸載與這個EXE獨立的DLL文件。
程序員

靜態鏈接庫優勢: 算法

(1)代碼裝載速度快,執行速度比動態鏈接庫略快;可是影響啓動時的效率 數據庫

(2)直接和包含在EXE文件中,能夠避免DLL地獄問題; 編程

動態連接庫優勢: 緩存

(1)節省內存並減小頁面交換; 架構

(2)DLL與EXE文件獨立,只要輸出接口不變(即名稱、參數、返回值類型和調用約定),更換DLL文件不會對EXE文件形成影響,極大提升了可維護性和可擴展性; 負載均衡

(3)不一樣編程語言編寫的程序只要按照函數調用約定就能夠調用同一個DLL函數。 編程語言

不足:(1)使用靜態連接生成的可執行文件體積交到,包含相同公共代碼,形成浪費; 分佈式

(2)使用動態鏈接庫的應用程序不是自完備的,它依賴的DLL模塊也要存在,若是使用載入時動態倆接,程序啓動時發現DLL不存在,系統將終止程序並給出錯誤信息。而使用運行時動態連接,系統不會終止,但因爲DLL中的導出函數不可用,程序會加載失敗。

(3)使用動態連接庫可能形成DLL地獄。

DLL Hell是指系統文件(DLL)的版本或兼容性問題形成程序沒法正常運行,其覆蓋了系統上原有的同一個DLL文件

另外,靜態鏈接庫中不能包含其餘的動態鏈接庫和靜態連接庫,可是在動態鏈接庫中還能夠包含其餘的動態或靜態鏈接誒庫。

1)靜態連接庫的使用須要庫的開發這提供生成庫的.h投文件和.lib文件

2)由於靜態連接庫是將所有指令都包含入調用程序生成的EXE文件中。所以若是用的是靜態連接庫,那麼也就不存在「導出某個函數提供給用戶使用」的狀況,要想用就得全要!要不就都別要!:

一、在VC++6.0中new一個名稱爲libTest的static library工程,並新建lib.h和lib.cpp兩個文件

//文件lib.h
//#代表是預處理命令,可用於條件編譯
//若LIB_H表示符未被#define命令定義則編譯下面的程序段#else
#ifndef LIB_H
#define LIB_H
extern "C" int add(int x,int y);//聲明爲C編譯、鏈接方式爲外部函數
#endif
//文件lib.cpp
#include "lib.h"
int add(int x, int y)
{
  return x+y;
}



編譯這個工程就獲得了一個.lib文件,這個文件就是一個函數庫,提供add功能。將頭文件和.lib文件提交給用戶後,用戶就能夠直接使用其中的add函數,

//indlude命令後, 通常使用<>符號調用庫函數,使用」「調用自定義函數
#include <stdio.h>
#include "..\lib.h"
#pragma comment( lib, "..\\debug\\libTest.lib" )  //本文件生成的.obj文件應與libTest.lib一塊兒鏈接
int main(int argc, char* argv[])
{
printf( "2 + 3 = %d", add( 2, 3 ) );
}
若是不用#pragma comment能夠在vc++中用菜單選項設定,填入庫文件路徑。

(1)編寫庫的程序與編寫其餘程序區別不大,只是庫不能單獨執行;

(2)庫提供一些能夠給別的程序調用的方法函數,調用時必須以某種方式指明要調用;

庫的調試與查看

因爲庫文件不能單獨執行,F5(debug調試模式)或ctrl+F5(運行模式),在彈出對話框中輸入可執行文件的路徑來啓動庫函數的執行

對於動態鏈接庫

1)DLL的編制與具體的編程語言與編譯器無關

只要遵循約定的DLL接口規範和調用方式,用各類語言編寫的DLL均可以相互調用。譬如Windows提供的系統DLL(其中包括了Windows的API),在任何開發環境中都能被調用,不在意其是Visual Basic、Visual C++仍是Delphi。

Windows目錄下的system32文件夾中,kernel32.dll中的函數主要處理內存管理和進程調度;user32.dll中的函數主要控制用戶界面;gdi32.dll中的函數負責圖形方面操做;

通常的程序員都用過相似MessageBox的函數,其實它就包含在user32.dll這個動態連接庫中。因而可知DLL對咱們來講其實並不陌生。

 非MFC動態庫不採用MFC類庫結構,其導出函數爲標準的C接口,能被非MFC或MFC編寫的應用程序所調用;MFC規則DLL 包含一個繼承自CWinApp的類,但其無消息循環;MFC擴展DLL採用MFC的動態連接版本建立,它只能被用MFC類庫所編寫的應用程序所調用。

2.輪詢調度和搶佔調度的不一樣



3.數據庫的鎖及其應用場景


算法題:(15*3)
1.輸入任意正整數,比這個數大的最小不重複數(相鄰兩個數字不重複),例如1101是重複,1234不重複,1201不重複


2.從字符串(長度很是大)中找出最長迴文子串


3.數軸上n個點(a0,a1,.....an),長爲L的繩子最多能覆蓋多少個點


系統設計:(25*1)
1.分佈式緩存系統,容錯和負載均衡,設計分佈式緩存系統架構和分配策略
相關文章
相關標籤/搜索