日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

QQC++笔试相关

發布時間:2023/12/20 c/c++ 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QQC++笔试相关 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

在網上看到這篇文章,轉載過來和阿友們分享一下。 第一面,面技術,問了我的項目,STL,紅黑樹,練表反轉+筆試錯題重做 我后面面的很不好,很多都不會,分數較低 第二面,面技術,給我出了個算法題,星際在地圖上點一塊,如何找到該塊上的所有物體 有可能會出邏輯推理題或者數學題 第三面,綜合面,鏈表排序,easy 第四面,HR面試,胡扯了。有沒有Offer聽天由命了,嘻嘻,給后來的人一個參考 軟件開發職位筆試試題 一、單項選擇 1、向單鏈表插入節點; 2、排序的穩定性比較; 3、帶頭節點的單鏈表的判空條件; 4、二叉樹的節點總數的計算; 5、遞歸向非遞歸的轉化使用什么?隊列,還是棧; 6、中斷響應時間的定義; 7、面向對象程序設計語言不同于其他語言的主要特點; 二、填空題 1、正弦函數用泰勒展開式來計算: 下面的流程圖描述了利用上述展開式計算并打印sinx的近似值的過程,其中e(>0)表示誤差要求,小于該誤差就可以結束計算,打印結果,請填寫流程圖中的空格部分。 圖略 2、雙循環鏈表的排序問題; 應該比較簡單,相信你們能夠搞定! 三、附加題 “背包問題”的基本描述是:有一個背包,能盛放的物品總重量為S,設有N個物件,其重量分別為W1,W2, ……… , Wn , 希望從N件物品中選擇若干物品,所選擇的物品的重量之和恰能放入該背包,即所選物品的重量之和等于S。遞歸和非遞歸解法都可以求得“背包問題”的一組解,試寫出“背包問題”的非遞歸解法。---- 1, 使用Linux epoll模型,水平觸發模式(Level-Triggered);當socket可寫時,會不停的觸發socket可寫的事件,如何處理? 2, 從socket讀數據時,socket緩存里的數據,可能超過用戶緩存的長度,如何處理? 例如,socket緩存有8kB的數據,而你的緩存只有2kB空間。 3, 向socket發送數據時, 可能只發送了用戶緩存里的一半,如何處理?例如,需要向socket發送8kB數據,返回值只有2kB發送成功。 4, C++的虛函數是怎么實現的? 5, C++的虛函數有什么作用? 6, 非阻塞connect()如何實現? 7,sizeof()問題 class A { char c; int val; short sh; } class B { char c; int val; short sh; void func1(void); virtual func2(void); } sizeof(A), sizeof(B) 分別是多少? 8, 實現字符串比較函數 strcmp(char *src, char * sub) 9, 實現內存拷貝函數 strcpy(void*dst, char * src, size_t len) 10,條件變量的如何使用? 你使用的線程函數是什么? 11, deamon進程如何實現? 12, HTTP和CGI是什么? 13, TCP的三次握手, TIME_WAIT和CLOSE_WAIT狀態是什么? 因為第7題之后的屬于客觀題,不打算在此寫答案。 朋友們如有好的答案也歡迎跟貼。 本人在此寫出自己對前6個問題的回答: 1, 使用linux epoll模型,水平觸發模式(Level-Triggered);當socket可寫時,會不停的觸發socket可寫的事件,如何處理? 第一種最普通的方式: 當需要向socket寫數據時,將該socket加入到epoll模型(epoll_ctl);等待可寫事件。 接收到socket可寫事件后,調用write()或send()發送數據。。。 當數據全部寫完后, 將socket描述符移出epoll模型。 這種方式的缺點是: 即使發送很少的數據,也要將socket加入、移出epoll模型。有一定的操作代價。 第二種方式,(是本人的改進方案, 叫做directly-write) 向socket寫數據時,不將socket加入到epoll模型;而是直接調用send()發送; 只有當或send()返回錯誤碼EAGAIN(系統緩存滿),才將socket加入到epoll模型,等待可寫事件后,再發送數據。 全部數據發送完畢,再移出epoll模型。 這種方案的優點: 當用戶數據比較少時,不需要epool的事件處理。 在高壓力的情況下,性能怎么樣呢? 對一次性直接寫成功、失敗的次數進行統計。如果成功次數遠大于失敗的次數, 說明性能良好。(如果失敗次數遠大于成功的次數,則關閉這種直接寫的操作,改用第一種方案。同時在日志里記錄警告)在我自己的應用系統中,實驗結果數據證明該方案的性能良好。 事實上,網絡數據可分為兩種到達/發送情況: 一是分散的數據包, 例如每間隔40ms左右,發送/接收3-5個 MTU(或更小,這樣就沒超過默認的8K系統緩存)。 二是連續的數據包, 例如每間隔1s左右,連續發送/接收 20個 MTU(或更多)。 回來查了資料,發現以下兩種方式: 第三種方式: 使用Edge-Triggered(邊沿觸發),這樣socket有可寫事件,只會觸發一次。 可以在應用層做好標記。以避免頻繁的調用 epoll_ctl( EPOLL_CTL_ADD, EPOLL_CTL_MOD)。 這種方式是epoll 的 man 手冊里推薦的方式, 性能最高。但如果處理不當容易出錯,事件驅動停止。第四種方式: 在epoll_ctl()使用EPOLLONESHOT標志,當事件觸發以后,socket會被禁止再次觸發。 需要再次調用epoll_ctl(EPOLL_CTL_MOD),才會接收下一次事件。 這種方式可以禁止socket可寫事件,應該也會同時禁止可讀事件。會帶來不便,同時并沒有性能優勢,因為epoll_ctl()有一定的操作代價。2, 從socket讀數據時,socket緩存里的數據,可能超過用戶緩存的長度,如果處理? 可以調用realloc(),擴大原有的緩存塊尺寸。 但是臨時申請內存的有一定性能損失。 這種情況要看接收緩存的方式。 第一種方式: 使用100k的大接收緩存為例。 如果要等待數據,并進行解析。可能發生緩存不夠的情況。此時只能擴充緩存,或先處理100k的數據,再接收新的數據。 第二種方式: 使用緩存隊列,分成8K大小的隊列。 不存在接收緩存不夠的情況。 除非用戶解析已出錯,使用數據接收、使用脫勾。這種方式的代價是,可能需要將緩存隊列再次拷貝、拼接成一塊大的緩存,再進行解析。而在本人的系統中,只需要將socket接收的數據再次原樣分發給客戶, 所以這種方案是最佳方案。3, 向socket發送數據時, 可能只發送了用戶緩存里的一半,然后失敗,如何處理? 記錄緩存的偏移量。 下一次socket寫事件時, 再從偏移的位置接著發送。 那個面試官居然對這個問題問了我兩次, 看來我解釋的不夠清晰。。。。。。 郁悶。 4, C++的虛函數是怎么實現的? 使用虛函數表。 回來查下資料: C++對象使用虛表, 如果是基類的實例,對應位置存放的是基類的函數指針;如果是繼承類,對應位置存放的是繼承類的函數指針(如果在繼承類有實現)。所以,當使用基類指針調用對象方法時,也會根據具體的實例,調用到繼承類的方法。5, C++的虛函數有什么作用? 虛函數作用是實現多態, 很多人都能理解這一點。但卻不會回答下面這一點。 更重要的,虛函數其實是實現封裝,使得使用者不需要關心實現的細節。在很多設計模式中都是這樣用法,例如Factory、Bridge、Strategy模式。 前兩天在書上剛好看到這個問題,但在面試的時候卻沒想起來。個人覺得這個問題可以很好的區分C++的理解水平。 6, 非阻塞connect()如何實現? 將socket設置成non-blocking,操作方法同非阻塞read()、write(); 面試官是在聽到我介紹之后,才問我這個問題。可惜還是問我兩遍。 ************** 1.cache 的作用是什么 2.一下集中排序中,哪種是不穩定排序 3.排序算法的效率由什么衡量 4.在雙向鏈表中,將一個節點P插入到鏈表中的節點Q后面,一下正確的操作是? (2)填空題 1.是一個sin函數問題,給出sin的泰勒展開公式,和一個帶有空格的程序流程圖,完成程序流程圖的空格。 sin(x)=x/1! - x3/3!+ x5/5! - …(-1)m-1 x(2m-1)/(2m-1)! 首先讀入X,要求最后誤差不差過m,流程圖如下 2.鏈表,結構體 包括 1數據 2該節點被訪問次數freq 要求一個節點每次被訪問則freq++,整個鏈表按被訪問次數(即訪問頻度)非升序排列。每次訪問完節點后都對鏈表進行排序。附加題: 背包問題。一個背包剛好裝S克東西,有N個物體 重量分別是:W1 W2 W3….WN 請編程 用非遞歸的方法 得出一組解。 第一面,面技術,問了我的項目,STL,紅黑樹,練表反轉+筆試錯題重做 我后面面的很不好,很多都不會,分數較低 第二面,面技術,給我出了個算法題,星際在地圖上點一塊,如何找到該塊上的所有物體 有可能會出邏輯推理題或者數學題 第三面,綜合面,鏈表排序,easy 第四面,HR面試,胡扯了。有沒有Offer聽天由命了,嘻嘻,給后來的人一個參考 軟件開發職位筆試試題 一、單項選擇 1、向單鏈表插入節點; 2、排序的穩定性比較; 3、帶頭節點的單鏈表的判空條件; 4、二叉樹的節點總數的計算; 5、遞歸向非遞歸的轉化使用什么?隊列,還是棧; 6、中斷響應時間的定義; 7、面向對象程序設計語言不同于其他語言的主要特點; 二、填空題 1、正弦函數用泰勒展開式來計算: 下面的流程圖描述了利用上述展開式計算并打印sinx的近似值的過程,其中e(>0)表示誤差要求,小于該誤差就可以結束計算,打印結果,請填寫流程圖中的空格部分。 圖略 2、雙循環鏈表的排序問題; 應該比較簡單,相信你們能夠搞定! 三、附加題 “背包問題”的基本描述是:有一個背包,能盛放的物品總重量為S,設有N個物件,其重量分別為W1,W2, ……… , Wn , 希望從N件物品中選擇若干物品,所選擇的物品的重量之和恰能放入該背包,即所選物品的重量之和等于S。遞歸和非遞歸解法都可以求得“背包問題”的一組解,試寫出“背包問題”的非遞歸解法。面試官以提問+代碼 相結合。我的問題有:自我介紹,項目介紹,這兩個是必須的,在介紹項目的時候,面試 官會深入問問題,會對某些細節,例如數據機構,算法復雜度,數據庫連接問一些問題。 隨后是專業面試,題目都是相當經典的題目,大致有:進程與線程;Unix和windows進程間 通信的主要方式和系統調用;敘述TCP/UDP協議,他們的應用,TCP的三次握手,滑動窗口 ,超時重傳;HTTP協議和COOKIE機制和一些COOKIE的問題(這個我不會);讓你設計一個PD A上的通信簿,你會用樹還是哈希,從這個問題會引申出hash,平衡數,紅黑數的一系列問 題;面向對象的多態是什么,設計一個多態的例子;C++的虛函數實現機制。問題不難,但 是你回答問題的手段和技巧很重要。幾個經驗:要有自信,敢說精通,熟悉這些詞語,對 自己的強項一定要毫不猶豫的說精通。回答問題之前,好好組織一下語言,不要說的顛三 倒四,邏輯不清。問題一定要回答的全面,你說的越多越好,如果能把相關方面說出來更 好。 面我的據 說是互動娛樂部的一個manager(HR說的),面的問題很無聊:進程和線程,TCP/UDP,排序算 法(讓我給他完整的說了一遍我所知道的排序算法和他們的時間復雜度),Windows的內存尋 址方式,Socket中阻塞模式干什么用的,你所認為的軟件開發模式和你對你所做項目的一 些評價。最后是一個程序題,寫代碼,個題非常重要,如果做不出來或者做錯了,那就 估計沒戲了。題目是給定一個字符串,例如abc123de4f67,把里面所有的數字字串找出來, 并且存貯起來,例如你要把123,4,67找出來,放到3個char型數組里。這個題目很經典了 ,相信很多人都知道。 兩道算法題: 1. 給出一個字符串str及指定一個位置p,交換p的前后兩段字符串,要求額外空間開銷盡量小。例如給出str=”people”,p=2,結果串變為str=”oplepe”。其實只要一個char型變量作為臨時空間,將p前的字符一個一個“沉”到最后就OK了,當時沒想得出來真是丟臉啊!嗚嗚! 2. 給出串A=”iqwqrpwpetppwanepnvomzlplte”,B=”people”,問能否通過在串B的任意位置插入位置個字符生成串A,如果可以,計算出有多少種不同的生成方法,要求時間復雜度盡量小。一看這道題很容易誤導思維,讓人以B為考慮的出發點。事實上,換過來思考,問題就是找串A中有沒有順序地出現過B中的所有字符,這樣就簡單多啦,時間復雜度僅為O(m+n)!第一大部分: 15道選擇題,都是C/C++ 和數據結構的最基礎的,基本上不會做錯那種。 第二大部分: 程序填空2題: 1.前序遍歷的 2.數組靜態鏈表的插入 每題4空共40分 第三大部分:(每題20分,共60分) 附加題 1.實現3D鏡像轉換矩陣(題目不太明白,明白的同學給解釋一下吧) 2.數據庫SQL a)建立employe表,包括工號、姓名、性別、年齡、部門、工資。 b)查詢每個部門的工資總數 c)查詢工資高于本部門平均工資的員工姓名 3.到商店里買200的商品返還100優惠卷(可以在本商店代替現金),請問 實際上折扣是多少?請寫出推理過程。 兩道編程題填空:
1.建鏈表,將鏈表倒置
2.統計一個相加為某一個整數的數列:8=4+2+1+1;8=3+2+2+1……
附加題:判斷斗地主的玩家出牌的合法性!

總結

以上是生活随笔為你收集整理的QQC++笔试相关的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。