?? 金山問題.txt
字號:
1.new delete malloc free
delete會調用對象的析構函數,和new對應free只會釋放內存,
new調用構造函數。
malloc與free是C++/C語言的標準庫函數,new/delete是C++的運算符。它們都可用于申請動態內存和釋放內存。
對于非內部數據類型的對象而言,光用maloc/free無法滿足動態對象的要求。對象在創建的同時要自動執行構造函數,對象在消亡之前要自動執行析構函數。由于malloc/free是庫函數而不是運算符,不在編譯器控制權限之內,不能夠把執行構造函數和析構函數的任務強加于malloc/free。因此C++語言需要一個能完成動態內存分配和初始化工作的運算符new,以及一個能完成清理與釋放內存工作的運算符delete。注意new/delete不是庫函數。
2.delete與 delete []區別:
delete只會調用一次析構函數,而delete[]會調用每一個成員的析構函數。
在MoreEffectiveC++中有更為詳細的解釋:
“當delete操作符用于數組時,它為每個數組元素調用析構函數,然后調用operator delete來釋放內存。”
delete與New配套,delete []與new []配套
MemTest *mTest1 = new MemTest[10];
MemTest *mTest2 = new MemTest;
int *pInt1 = new int[10];
int *pInt2 = new int;
delete []pInt1; //-1-
delete []pInt2; //-2-
delete []mTest1; //-3-
delete []mTest2; //-4-
在-4-處報錯。
這就說明:對于內建簡單數據類型,delete和delete[]功能是相同的。對于自定義的復雜數據類型,delete和delete[]不能互用。
delete[] 刪除一個數組,delete刪除一個指針
簡單來說,用new 分配的內存用delete刪除
用new[]分配的內存用delete[]刪除
delete []會調用數組元素的析構函數。 內部數據類型沒有析構函數,所以問題不大。
如果你在用delete時沒用括號,delete就會認為指向的是單個對象,否則,它就會認為指向的是一個數組
3.C C++ JAVA共同點,不同之處
4.繼承優缺點。
類繼承是在編譯時刻靜態定義的,且可直接使用,類繼承可以較方便地改變父類的實現。但是類繼承也有一些不足之處。首先,因為繼承在編譯時刻就定義了,所以無法在運行時刻改變從父類繼承的實現。更糟的是,父類通常至少定義了子類的部分行為,父類的任何改變都可能影響子類的行為。如果繼承下來的實現不適合解決新的問題,則父類必須重寫或被其他更適合的類替換。這種依賴關系限制了靈活性并最終限制了復用性。
(待補充)
5.C++有哪些性質(面向對象特點)
6.子類析構時要調用父類的析構函數嗎?
析構函數調用的次序是先派生類的析構后基類的析構,也就是說在基類的的析構調用的時候,派生類的信息已經全部銷毀了
定義一個對象時先調用基類的構造函數、然后調用派生類的構造函數;
析構的時候恰好相反:先調用派生類的析構函數、然后調用基類的析構函數
JAVA無析構函數
深拷貝和淺拷貝
7.多態,虛函數,純虛函數
4面筆試題
1閱讀理解:某函數的使用方法;對象的使用過程,對象聲明,創建實例用NEW;找語意上下文不符的一句
2KMP算法填空
3程序改錯:參數順序,if(值),---
4圖行矩陣:乘以一個矩陣后圖形X軸、Y軸、Z軸對稱,放大或平移
5設計:代碼行統計,字數統計的過濾條件
應聘java:OSI七層協議,排序算法,數據結構,二叉樹,鏈表,算法效率和優劣
JAVA類的是Java基礎和kjava的合卷,我只做了前面的
一共是7個題目,4個選擇題,一個問答題,一個讀程題,一個編程題
第一個題目是考String的用法:
選出用法錯誤的:
a: Stirng a ="Gone With Wind";
String t= "Wind";
String m;
m=a-t;
B: Stirng a ="Gone With Wind";
String m ;
m=a[3]+"one";
C: Stirng a ="Gone With Wind";
Sting m;
m=a.toUpperCase();
D: 不記得了
第2題考的是變量賦值用法:
選出能正確賦值的:
public class A {
private int a;
public void change(int m) {
return m;
}
}
public class B extend A{
public int b;
public static void main() {
A aa = new A();
B bb = new B();
int k;
//px
}
}
在px處可以正確賦值的有:
A k= m; B k=b; C k=aa.a; D k=bb.change(30); E k=bb.a
第3題是考位運算的
第4題考的是垃圾回收的
具體的選項不記得了
5.問答題: 實現線程有兩種用法,分別為: ____________和____________
他們之間有什么區別
6.讀程題:
class testA {
public testA(){
a1();
}
public void a1() {
System.out.println("A-a1");
}
}
public class testB extends testA{
int bb=0;
public testB() {
bb=1000;
}
public void a1() {
System.out.println("bb is"+bb);
System.out.println("B-a1");
}
public static void main(String[] args) {
new testB();
}
}
c:>java testB 的結果是:
7.編程題
一個short型數組, 另有一個byte型數組,存儲了若干short型的數,存放時short型數的低
位在前, 那么寫一段程序,將byte數組轉換為short數組
(原題的標準表述不記得了,大致就是這個意思,我覺得這個有點意思,我覺得轉換時應該
考慮當byte為負數的時候)
public short[] ConvertToShort(byte[] inputData) {
//補全代碼
}
JAVA手機的題目沒有作,
上面是筆試的題目
詞霸的研發工程師。詞霸的筆試題目對編程要求比較高。
第一題是一段英文閱讀題,主要內容是關于COM的,后面有三道判斷題,題目也是英文的,我想應該是考察應聘者的專業英文水平。我英文不是太好,雖然基本每句話能大概了解意思,題目仍然做不出。我想應該在大學學習中學習一些課外的知識會比較好,不要求會用,只要能了解其大概,基本工作原理,特性什么的就行,這題應該就很容易答出來。
第二題~第四題是算法編程題,應該是考察應聘者的基本專業素質
第二題的內容是:輸入自然數n,打印1~n的所有質數。寫出算法思路、函數實現、如何優化時間復雜度。
個人感覺這道題是比較簡單的。最為比較常見的算法,應該掌握。
第三題的內容是:高精度乘法,輸入不大于256位的正整數,計算其結果,并顯示計算過程(乘法豎式),寫出算法思路、函數實現
比如11×11=121,應顯示為:
11
× 11
——————
11
11
——————
121
這道題跟我以前的數據結構實驗的一道題類似,當時要求使用鏈表,我沒有選這道題,所以見到這道題我不太會做,只寫了一下算法思路。
第四題是:已存在一組數據,若數據個數小于兩個則程序結束,若不是,則選擇一個中間點,將數據分成兩組,比中間點小的放在一組,其余的放在一組。并對并對兩組數據排序。
這道題應該是測試評聘者的基本素質,對經典排序算法的掌握程度。我對這些算法卻僅僅是了解,建議大家一點要練到熟練寫出的程度,可以節省很多時間。
第五題是VC++改錯題,由于前邊時間耽誤的太多,沒時間做了。應該考察的是應聘者對C++語言的語法熟悉程度。
第六題是操作系統的題目,是關于死鎖的。不知做得對不對,但感覺上不是很難。
第七題是匯編題,本題有兩道題,后一題是選做題。
前一題好象是說子程序的調用又要有匯編語句的支持,不同的編譯器、操作系統等都有不同的隱式約定,簡述你了解的一種。我對匯編不熟,而且學校學的是16位匯編,且好像沒叫過題目說的東西,所以此題放棄。
后一題是現有一段英文簡述64位匯編,之后問64匯編按英文簡述的那樣有什么優勢?
今天去筆試金山了,出的題不算難,很基本,但是答好也根本就不容易
c語言中我們常用的memcpy(),memset(),memmove()等這些函數的實現細節平時有幾個人能去把他弄明白哩……
反正我是沒弄清楚,呵呵,今天晚上就出了memmove()的實現
第一個題目關鍵是運用模塊化 , 我當時就是不知道 ,一看比較簡單,就直接寫了下去,結果后來發現重復寫的太多,已經寫滿了卷上的空白,沒辦法改了,結果就郁悶了 ,就是按照規則打印一些東西,看上去在main里邊就能搞定,誰知道........ 哎 不提了
第二個題目是一個編寫函數題 , 就是考的是數組和指針的互用
第三個題目是一個考C++構造函數和繼承 比較簡單,不說了
剩下三個匯編題目 都是WIN32匯編,只記得有一個是寫了一個函數,然后問是哪種調用方式
stdcall ,c,還是pasical ,就是根據參數進棧次序和清棧方式來進行判斷
忘說了 ,最前面還有一個選擇題,是英文的, 考的是C++
1.第一題英文閱讀理解,好像是從msdn中,復制了一段關于COblist的,讓你選擇3個答案
2.編程題;有a,b,c,d四個整數,從這四個數中,取一個數,2個數,3個數,4個
數,不能重復,問多少中情況,每一種得到數的和有多少不同的,列出分布情況
3。考你虛函數和重載的,
4. 改錯題,關于動態分配,賦值操作這方面的東西
5. 論述題,談談你怎么開始一個新程序,具體機不起來的
:) 只要你c++基礎知識扎實,這些題還是很簡單
class Value
{
public:
Value(int nVal) {m_nVal=nVal;printf("Call Value::Value(int nValue)\n");}
~Value() {printf("Call Value::~Value()\n");}
Value& operator=(int nVal)
{
m_nVal=nVal;
printf("Call Value::operator=\n");
return *this;
}
void Dump() {printf("Value::m_nVal=%d\n",m_nVal);}
protected:
int m_nVal;
};
class Base
{
public: Base() {Init();}
virtual ~Base() {Release();}
virtual void Init() {printf("Call Base::Init()\n");}
virtual void Release() {printf("Call Base::Release()\n");}
virtual void Dump() {printf("Call Base::Dump()\n");}
};
class Derive:public Base
{
public:Derive() {printf("Call Derive::Derive()\n");}
~Derive() {printf("Call Derive::~Derive()\n");}
virtual void Init() {m_Val=2;printf("Call Derive::Init()\n");}
virtual void Release() {printf("Call Derive::Release()\n");}
virtual void Dump() {m_Val.Dump();}
protected:
static Value m_Val;
};
Value Derive::m_Val=0;
void DestroyObj(Base* pOb)
{
pOb->Dump();
delete pOb;
}
void main()
{
Derive *pOb=new Derive;
DestroyObj(pOb);
}
寫出輸出結果
Call Value::Value(int nValue)//static
Call Base::Init()
Call Derive::Derive()
Value::m_nVal=0
Call Derive::~Derive()
Call Base::Release()
Call Value::~Value()//static
設計一函數,求整數區間[a,b]和[c,d]的交集
二題:
/////////////////////////////////////////
#define BOOL int
#define TRUE 1
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -