1、給定一個字元串比如“abcdef”,要求寫個函數程式設計“defabc”,位數是可變的。這個比較簡單,我用的是strcpy和memcpy,然後他問有什麼優化的辦法,我就不知道了。
2、socket過程就是socket的server和client整個流程寫下來,這個還是沒啥問題的。
3、資料結構二叉樹的周遊,給了個二叉樹,前序、中序、後序寫出來,這個沒什麼難度。
<a href="http://blog.csdn.net/hackbuteer1/article/details/6583988">http://blog.csdn.net/hackbuteer1/article/details/6583988</a>
4、樹的層次周遊,這個開始真忘了,想了半天才想起來用隊列。然後他又讓我詳細寫出入隊出隊的過程,總之還是搞定了。
5、兩圓相切轉圏問題——一個小圓半徑是1厘米,一個大圓半徑是5厘米,小圓沿着大圓轉圈,請問要轉幾圈可以轉完大圈?這個問題在行測題做過,就是公轉自轉的問題,不管大小圓半徑是多少,外切轉圏要轉R/r+1圏,外切轉圏轉R/r-1圈。
1、二叉樹的前序周遊的遞歸和非遞歸的可執行程式
2、寫出快速排序的實作代碼,一個是字元串拼接函數的實作strcat(),還有大數相乘,都是基本題。
3、歸并排序的實作。
<a href="http://blog.csdn.net/hackbuteer1/article/details/6568913">http://blog.csdn.net/hackbuteer1/article/details/6568913</a>
4、檔案按a~z編号,aa~az,ba~bz...za...zz...aaa...aaz,aba~abz...這樣的方法進行編号。給定任意一個編号,輸出檔案是第幾個檔案。并寫出測試方法。簡單,把編号看成26進制,這題就是一個十進制和26進制的進制轉換問題了。
5、程式設計:兩個連結清單,按升序排序,合并後仍按升序,不準用遞歸,并求複雜度
1、談談你對資料庫中索引的了解
2、現在普通關系資料庫用得資料結構是什麼類型的資料結構
3、索引的優點和缺點
4、session、cookie和cache的差別是什麼
5、如果有幾千個session,怎麼提高效率?
6、session是存儲在什麼地方,以什麼形式存儲的?
一、資料結構和算法
1、簡述什麼是hashtable,如何解決hash沖突
2、什麼叫二叉樹,滿二叉樹,完全二叉樹
4、數組和連結清單有什麼差別,分别用在什麼場合
二、作業系統
1、什麼叫虛拟記憶體
2、塊裝置和字元裝置有什麼差別
3、程序和線程的差別
4、簡述TCP網關連接配接互動細節
三、Lunix
1、寫出10個常用的linux指令和參數
2、如何檢視磁盤剩餘空間 df -h1
3、如何檢視端口是否被占用
4、如何檢視某個程序所占用的記憶體 用ps指令檢視程序的記憶體
四、程式題(具體題目記不太清了)
1、用兩個線程實作1-100的輸出
2、把一個檔案夾中所有01結尾的檔案前十行内容輸出
1、C++和Java最大的差別是什麼?
2、static、extern、global的作用?(再一次出現了static,上鏡率真高挖~)
<a href="http://blog.csdn.net/hackbuteer1/article/details/7487694">http://blog.csdn.net/hackbuteer1/article/details/7487694</a>
3、inline内聯函數是否占用運作時間?
思科二面:
1、程序和線程有什麼差別?
2、程序的排程算法,把記得的全說出來
3、頁面的替換算法都有哪些?
4、使用者态和核心态的差別?
5、平面上N個點 沒兩個點都确定一條直線 求出斜率最大 那條直線所通過 兩個點 斜率不存在 情況不考慮 時間效率越高越好
解法:先把N個點按x排序。
斜率k最大值為max(斜率(point[i],point[i+1])) 0<=i<n-2。
複雜度Nlog(N)。
以3個點為例,按照x排序後為ABC,假如3點共線,則斜率一樣,假如不共線,則可以證明在AB或BC中,一定有一個點的斜率大于AC,一個點的斜率小于AC。
1、關系型資料庫的特點
2、父類的析構函數為什麼要定義為虛函數
3、把一個字元串的大寫字母放到字元串的後面,各個字元的相對位置不變,不能申請額外的空間。 (比較難)
4、快排算法實作程式
5、KMP算法實作程式
<a href="http://blog.csdn.net/hackbuteer1/article/details/7319115">http://blog.csdn.net/hackbuteer1/article/details/7319115</a>
6、override和overload的差別
7、程式設計并實作一個八皇後的解法
8、連結清單的歸并排序
騰訊二面:
1、在資料庫中如何建立一個表
2、建立後如何添加一個記錄、删除一個記錄
3、編寫C++中的兩個類 一個隻能在棧中配置設定空間 一個隻能在堆中配置設定。 (比較難)
4、請編寫實作malloc()記憶體配置設定函數功能一樣的代碼。
5、請編寫能直接實作strstr()函數功能的代碼。
6、已知: 每個飛機隻有一個油箱, 飛機之間可以互相加油(注意是互相,沒有加油機) 一箱油可供一架飛機繞地球飛半圈, 問題:為使至少一架飛機繞地球一圈回到起飛時的飛機場,至少需要出動幾架飛機?(所有飛機從同一機場起飛,而且必須安全傳回機場,不允許中途降落,中間沒有飛機場)
7、static的作用——再一次出現~
8、寫string類的構造,析構,拷貝函數——這題大約出現過4次左右,包括程式設計和程式填空,程式員面試寶典上有這題,也算是個經典筆試題,出現幾率極大~
1、給你一個凸多邊形,你怎麼用一條線,把它分成面積相等的兩部分
2、有一條數軸,上有一整數點s,點s兩側分别放了兩個機器人,不知道兩個機器人分别距離s的距離,兩機器人不能互相通信。
現在,給你以下指令:
R(往右一格)
L(往左一格)
IF(S)是否在S點
GOTO A,跳到A代碼段。
設計一套指令給兩個機器人,讓兩個器機可以最終在某一點相遇。
3、怎麼判斷兩棵二叉樹是否是同構的
4、按層次列印一個二叉樹
5、給你一個數n(最大為10000),怎麼求其階乘
6、判斷兩個單連結清單是否有交叉
一面:
1、set(底層基于紅黑樹實作)的操作;
2、手寫快排遞歸與非遞歸實作;
3、KMP原了解釋
4、聚類分類協同過濾算法;
二面:
1、提示詞實作Trie樹+hash
2、最快速度求兩個數組之交集;
3、文章最短摘要生成;
1、試着用最小的比較次數去尋找數組中的最大值和最小值。
解法一:
掃描一次數組找出最大值;再掃描一次數組找出最小值。
比較次數2N-2
解法二:
将數組中相鄰的兩個數分在一組, 每次比較兩個相鄰的數,将較大值交換至這兩個數的左邊,較小值放于右邊。
對大者組掃描一次找出最大值,對小者組掃描一次找出最小值。
比較1.5N-2次,但需要改變數組結構
解法三:
每次比較相鄰兩個數,較大者與MAX比較,較小者與MIN比較,找出最大值和最小值。
1、寫一個字元串插入的函數
2、問了我關于虛函數底層的實作
<a href="http://blog.csdn.net/hackbuteer1/article/details/7883531">http://blog.csdn.net/hackbuteer1/article/details/7883531</a>
3、寫了快排、堆排
4、問我TCP、UDP的一些知識
<a href="http://blog.csdn.net/hackbuteer1/article/details/6845406">http://blog.csdn.net/hackbuteer1/article/details/6845406</a>
5、還問了我一些Linux的知識
6、讓我實作紅黑樹的删除操作
<a href="http://blog.csdn.net/hackbuteer1/article/details/7760584">http://blog.csdn.net/hackbuteer1/article/details/7760584</a>
1、考察指針int (*p)[10]和int *p[10]的差別,用法
2、sizeof(),strlen()的差別和用法
3、堆、棧的差別和用法
4、多繼承的優點與缺點
5、(1)IO2:30ms, CPU 20ms, IO1 20ms, CPU 30ms
(2) IO1 20ms, CPU 20ms, IO2 10ms
(3) CPU 30ms, IO1 20ms
求三種情況的CPU和IO占用率
網新恒天二面:
1、内聯函數與宏的差別
2、與信号量相關知識的考察,具體題目記不清了,反正知道基本概念就會做
3、填空,考察頁式虛拟記憶體的缺頁情況,也是知道這部分知識點就會做的題
4、類的繼承相關知識點的考察,是一道程式輸出分析題
5、棧的類的成員函數的實作,程式填空題。
6、模闆函數與函數模闆的差別
7、函數模闆與類模闆的差別
1、數組,連結清單的優缺點:這個問題比較簡單不過我自己經常會忽略的一點是數組是固定空間,連結清單是可變空間
2、a[N][20]輸入N個長度不超過20的字元串,比較這些字元串中是否有完全相同的字母,且相同字母數是否相等。如何改進該算法,降低複雜度。
3、猜撲克牌——給定一些牌,把花色告訴,把點數告訴乙
甲:我不知道 乙:我知道你不知道
甲:現在我知道了 乙:我也知道了
求是哪張牌。
給定的牌我不記得,反正這個題很簡單,行測中的簡單題,網上比比皆是。
4、A:M*M矩陣,求字元串S是否存在A的連續對角線上。(這題應該有涉及到一個之字二維矩陣方面的知識)
A若為記憶體裝不下的大矩陣該如何處理?
5、系統接收資料包32位元組,第1位元組為優先級,其餘為資料。設計一個排程算法
(1)優先級高的先處理
(2)同等條件下,請求次數多的先處理
(3)優先級高的一定比優先級低的先處理
寫出所用的資料結構的定義,計算空間容量。
1、各種排序算法的比較次數
2、static、auto未初始化的初始值
3、x*=y+8,給出x,y的值,求該表達式計算後二者的值
4、enum類型的default指派規則
5、定義函數F(int x){return (x*x);} 求F(3+5)
6、fgets(s,n,f)函數的功能
7、定義*s="ab\0cdef",輸出該字元可以看到什麼結果
8、還是static相關知識——在此說明一下static這個關鍵字相當重要,在筆試中出現率為100%,在面試中出現率為50%。
9、資料庫中索引,簇索引,非簇,唯一,複合,覆寫索引的差別
10、SQL語句和範式是對資料庫有要求的公司筆試必考點之一
阿裡巴巴B2B二面
1、通配符的含義
2、死鎖的基本知識——死鎖是各大筆試面試中出現率50%的知識點
3、信号量P、V原語的相關知識點
4、有向圖的鄰接表表示
5、STL中疊代器的工作原理,疊代器與普通指針有什麼差別?
疊代器和指針相同的地方:
1、指針和iterator都支援與整數進行+,-運算,而且其含義都是從目前位置向前或者向後移動n個位置
2、指針和iterator都支援減法運算,指針-指針得到的是兩個指針之間的距離,疊代器-疊代器得到的是兩個疊代器之間的距離
3、通過指針或者iterator都能夠修改其指向的元素
通過上面這幾點看,兩者真的很像,但是兩者也有着下面的幾個不同地方
1、out操作符可以直接輸出指針的值,但是對疊代器進行在操作的時候會報錯。通過看報錯資訊和頭檔案知道,疊代器傳回的是對象引用而不是對象的值,是以cout隻能輸出疊代器使用*取值後的值而不能直接輸出其自身。
2、指針能指向函數而疊代器不行,疊代器隻能指向容器
這就說明了疊代器和指針其實是完全不一樣的概念來的。指針是一種特殊的變量,它專門用來存放另一變量的位址,而疊代器隻是參考了指針的特性進行設計的一種STL接口。
筆者曾在網上看到這樣一種說法:疊代器是廣義指針,而指針滿足所有疊代器要求。疊代器是STL算法的接口,而指針是疊代器,是以STL算法可以使用指針來對基于指針的非STL容器進行操作。
筆者覺得上面說法也有幾分道理,但是到底正不正确就留給看官自己判斷了。但是有一點希望大家注意的是:千萬不要把指針和疊代器搞混了。也許某些編譯器使用指針來實作疊代器以至于有些人會誤以為指針和疊代器是一個概念來的。
6、什麼是友元?
7、delete、new的用法
8、typename的用法
9、程式設計判斷一個數是否為2的幂
10、你怎樣重新改進和設計一個ATM銀行自動取款機?
12、10000Mbps萬兆交換機怎麼實作?
13、操作符重載的相關知識點,大題,具體記不清了
1、列印漢諾塔移動步驟,并且計算複雜度
2、計算兩個字元串的是否相似(字元的種類,和出現次數相同)
3、定義二叉樹,節點值為int,計算二叉樹中的值在[a,b]區間的節點的個數
4、動态規劃題:一條路有k可坑,每次能跳平方數步長(1 4 9 16。。),不能跳到坑裡,從a跳到b最少幾步?
5、給一個整數數組,求數組中重複出現次數大于數組總個數一半的數。
1、對以孩子兄弟連結的樹進行周遊,不能用遞歸,也不能借助任何輔助空間
2、假設數組B是升序Int數組A循環移若幹得到的位,實作對數組B進行查找的高效算法
3、隻有整數和+-*/四種運算組成的算術表達書,實作其求值
4、還有一個是考貪心算法的,你讓他們看算法導論那本書,關于fractional knapsack problem的那一段,就是0-1背包的一種變形;
5、連結清單相鄰元素翻轉,如a->b->c->d->e->f-g,翻轉後變為:b->a->d->c->f->e->g
6、求正整數n所有可能的和式的組合(如;4=1+1+1+1、1+1+2、1+3、2+1+1、2+2)
1、實作一個atoi函數==>'注意正負号的判定'
2、翻轉一個句子,其中單詞是正序的==>兩次旋轉
3、二叉樹兩個結點中的最小公共子結點==>求長度,長度之差,遠的先走,再一起走
4、三角陣中從第一行到最後一行(給出搜尋方向的限制)找一個連續的最大和==>廣度優先搜尋√
5、實作一個STL中的vector中的盡量多的方法。
6、字元串移動(字元串為*号和26個字母的任意組合,把*号都移動到最左側,把字母移到最右側并保持相對順序不變),要求時間和空間複雜度最小。
7、說說outer join、inner join、left join、right join的差別是什麼?
内連接配接:進行連接配接的兩個表對應的相比對的字段完全相同的連接配接。join
外連接配接又分為左外連接配接和右外連接配接。
左連接配接即LEFT OUTER JOIN:
兩個表進行左連接配接時會傳回左邊表中的所有的行和右邊表中與之相比對的列值沒有相比對的用空值代替。
右連接配接即RIGHT OUTER JOIN:
兩個表進行右連接配接時會傳回右邊表中的所有的行和左邊表中與之相比對的列值沒有相比對的用空值代替。
我們建立兩張表,students、class并插入測試資料
students
---------------------------
id name classId
1 name1 1
2 name2 null
3 name3 2
class
-----------------------
id name
1 class1
2 class2
3 class3
實驗結果如下:
mysql> select s.name,c.name from students s join class c where s.classId=c.id ; (注:inner join和join一樣)
+-------+-------+
| name | class |
| name1 | 1 |
| name3 | 2 |
2 rows in set
mysql> select s.name,c.name from students s left join class c on s.classId=c.id ; (left join 和 left outer join 一樣)
| name2 | NULL |
3 rows in set
mysql> select s.name,c.name from students s right join class c on s.classId=c.id ; (right join 和 right outer join 一樣)
| NULL | 3 |