美團筆試總結


1.美團
int a[5]={1,3,5,7,9};
int *p = (int *)(&a +1);
printf("%d","%d",*(a+1),*(p-1));
輸出3,9
解析:a指向數組a[5]首地址,因此*(a+1)表示數組第二個3
&a+1表示整個數組a的首地址加上a的整個數組的長度,因此p-1表示a[5]的末地址
2.美團
linux系統中,有一個文件夾里面有若干文件,通常用哪個命令可以獲取這個文件夾的大小
 df可以查看一級文件夾大小、使用比例、檔案系統及其掛入點,但對文件卻無能為力。  df -h
  du可以查看文件及文件夾的大小。 du -sh

df -h

    參數 -h 表示使用「Human-readable」的輸出,也就是在檔案系統大小使用 GB、MB 等易讀的格式。

    上面的命令輸出的第一個字段(Filesystem)及最后一個字段(Mounted on)分別是檔案系統及其掛入點。我們可以看到 /dev/sda1 這個分割區被掛在根目錄下。

    接下來的四個字段 Size、Used、Avail、及 Use% 分別是該分割區的容量、已使用的大小、剩下的大小、及使用的百分比。 FreeBSD下,當硬盤容量已滿時,您可能會看到已使用的百分比超過 100%,因為 FreeBSD 會留一些空間給 root,讓 root 在檔案系統滿時,還是可以寫東西到該檔案系統中,以進行管理。

  du:查詢文件或文件夾的磁盤使用空間

    如果當前目錄下文件和文件夾很多,使用不帶參數du的命令,可以循環列出所有文件和文件夾所使用的空間。這對查看究竟是那個地方過大是不利的,所以得指定 深入目錄的層數,參數:--max-depth=,這是個極為有用的參數!如下,注意使用“*”,可以得到文件的使用空間大小.

    提醒:一向命令比linux復雜的FreeBSD,它的du命令指定深入目錄的層數卻是比linux簡化,為 -d。
3.
運行數據庫提交操作時使用事務(Transaction)是為了?
 在操作數據庫的過程中,為了 數據的一致性,我們可以使用Transaction,要么成功的時候全部提交,要么有任何一個操作失敗立即全部回滾。不僅僅是在數據庫方面,有時候操作其他的內容,比如說對於系統文件的操作,也需要把一些操作組合看做是一個事務。
4.
事務的性質:
事務是單個邏輯工作單元,要么全部做完,要么全部不做,事務由兩種狀態,一個提交一個回滾。
事務由四個特性ACID,原子性、一致性、隔離性和永遠性。
5.
網絡相關調試,最可能用到的命令 nc

linux nc命令使用詳解

   

功能說明:功能強大的網絡工具

語 法:nc [-hlnruz][-g<網關...>][-G<指向器數目>][-i<延遲秒數>][-o<輸出文件>][-p<通信端口>][-s<來源位址>][-v...][-w<超時秒數>][主機名稱][通信端口...]

參 數:

 -g<網關> 設置路由器躍程通信網關,最丟哦可設置8個。

 -G<指向器數目> 設置來源路由指向器,其數值為4的倍數。

 -h  在線幫助。

 -i<延遲秒數> 設置時間間隔,以便傳送信息及掃描通信端口。

 -l  使用監聽模式,管控傳入的資料。

 -n  直接使用IP地址,而不通過域名服務器。

 -o<輸出文件> 指定文件名稱,把往來傳輸的數據以16進制字碼傾倒成該文件保存。

 -p<通信端口> 設置本地主機使用的通信端口。

 -r  亂數指定本地與遠端主機的通信端口。

 -s<來源位址> 設置本地主機送出數據包的IP地址。

 -u  使用UDP傳輸協議。

 -v 詳細輸出--用兩個-v可得到更詳細的內容

 -w<超時秒數> 設置等待連線的時間。

  -z  使用0輸入/輸出模式,只在掃描通信端口時使用。
 
6.
構造函數,析構函數拋出異常問題:構造函數可以,析構函數不可以
 
7.
9個球,其中一個質量與其他球不同,有一個天平,最多幾次找出此球
第一次分成3,3,3任取兩堆放入天平,若天平平衡則第三堆存在質量不同的球,若天平不平衡還需再次比較,因此最多兩次,同理三個單獨的球也至多2次
若已知此球偏輕或偏重只需兩次
8.
c語言中volztile關鍵字
參考 
http://www.cnblogs.com/yc_sunniwell/archive/2010/06/24/1764231.html
  volatile總是與優化有關,編譯器有一種技術叫做 數據流分析,分析程序中的變量在哪里賦值、在哪里使用、在哪里失效,分析結果可以用於常量合並,常量傳播等優化,進一步可以死代碼消除。但有時這些優化不是程序所需要的,這時可以用volatile關鍵字禁止做這些優化,volatile的字面含義是易變的,它有下面的作用: 
      1 不會在兩個操作之間把volatile變量緩存在寄存器中。在多任務、中斷、甚至setjmp環境下,變量可能被其他的程序改變,編譯器自己無法知道,volatile就是告訴編譯器這種情況。
     2 不做常量合並、常量傳播等優化,所以像下面的代碼:
     volatile int i = 1;
     if (i > 0) ...
     if的條件不會當作無條件真。 
     3 對volatile變量的讀寫不會被優化掉。如果你對一個變量賦值但后面沒用到,編譯器常常可以省略那個賦值操作,然而對Memory Mapped IO的處理是不能這樣優化的。 
  C語言關鍵字volatile(注意它是用來修飾變量而不是上面介紹的__volatile__)表明某個變量的值可能在外部被改變,因此對這些變量的 存取不能緩存到寄存器,每次使用時需要重新存取。該關鍵字在多線程環境下經常使用,因為在編寫多線程的程序時,同一個變量可能被多個線程修改,而程序通過 該變量同步各個線程, 
9.算法空間復雜度比較

排序法

最差時間分析 平均時間復雜度 穩定度 空間復雜度
冒泡排序 O(n2) O(n2) 穩定 O(1)
快速排序 O(n2) O(n*log2n) 不穩定 O(log2n)~O(n)
選擇排序 O(n2) O(n2) 穩定 O(1)
二叉樹排序 O(n2) O(n*log2n) 不一頂 O(n)

插入排序

O(n2) O(n2) 穩定 O(1)
堆排序 O(n*log2n) O(n*log2n) 不穩定 O(1)        
歸並排序 O(n*log2n) O(n*log2n) 穩定 O(n)
 堆排序、快速排序、希爾排序、 直接選擇排序不是穩定的排序算法,而基數排序、冒泡排序、 直接插入排序、折半插入排序、歸並排序是穩定的排序算法。
 
10.
預編譯命令
#pragma 設定 編譯器的狀態或者是指示編譯器完成一些特定的動作。#pragma指令對每個編譯器給出了一個方法,在保持與C和C++語言完全兼容的情況下,給出主機或操作系統專有的特征。依據定義,編譯指示是機器或操作系統專有的,且對於每個編譯器都是不同的
常見的預編譯指令有:
(1)#include 指令
該指令指示編譯器將xxx.xxx文件的全部內容插入此處。若用<>括起文件則在系統的INCLUDE目錄中尋找文件,若用" "括起文件則在當前目錄中尋找文件。一般來說,該文件是后綴名為"h"或"cpp"的頭文件。
注意:<>不會在當前目錄下搜索頭文件,如果我們不用<>而用""把頭文件名擴起,其意義為在先在當前目錄下搜索頭文件,再在系統默認目錄下搜索。
(2)#define指令
該指令有三種用法:
第一種是定義標識,標識有效范圍為整個程序,形如#define XXX,常與#if配合使用;
第二種是定義常數,如#define max 100,則max代表100(這種情況下使用const定義常數更好,原因見注1);
第三種是定義"函數",如#define get_max(a, b) ((a)>(b)?(a):(b)) 則以后使用get_max(x,y)就可以得到x和y中較大的數(這種方法存在一些弊病,見注2)。
第四種是定義"宏函數",如#define GEN_FUN(type) type max_##type(type a,type b){return a>b?a:b;} ,使用時,用GEN_FUN(int),則此處預編譯后就變成了 max_int(int a,int b){return a>b?a:b;},以后就可以使用max_int(x,y)就可以得到x和y中較大的數.比第三種,增加了類型的說明。
(3)#if、#else和 #endif指令
這些指令一般這樣配合使用:
#if defined(標識) //如果定義了標識
要執行的指令
#else
要執行的指令
#endif
在頭文件中為了避免重復調用(比如說兩個頭文件互相包含對方),常采用這樣的結構:
#if !(defined XXX) //XXX為一個在你的程序中唯一的 標識符
//每個頭文件的標識符都不應相同。
//起標識符的常見方法是若頭文件名為"abc.h"
//則標識為"abc_h"
#define XXX
真正的內容,如函數聲明之類
#endif
注1:因為:const 常量有數據類型,而宏常量沒有數據類型。 編譯器可以對前者進行 類型安全檢查,而對后者只進行字符替換,沒有類型安全檢查,並且在字符替換時可能會產生意料不到的錯誤(邊際效應)。
注2:例如get_max(a++, b)時,a++會被執行多少次取決於a和b的大小!所以建議還是用 內聯函數而不是這種方法提高速度。雖然有這樣的弊病,但這種方法的確非常靈活,因為a和b可以是各種數據類型。
注3:可以查看百度百科的預處理命令,編排的比較簡明。
11.
操作符除常見的符號類外還有(type) 及sizeof 
12.
聯合索引

聯合索引使用結論:

   1):查詢條件中出現聯合索引第一列,或者全部,則能利用聯合索引.

   2):條件列中只要條件相連在一起,以本文例子來說就是:

   last_name=’1′ and first_name=’1′

   與

   first_name=’1′ and last_name=’1′

   ,無論前后,都會利用上聯合索引.

   3):查詢條件中沒有出現聯合索引的第一列,而出現聯合索引的第二列,或者第三列,都不會利用聯合索引查詢.

 

單一列索引的應用結論:

   1):只要條件列中出現索引列,無論在什么位置,都能利用索引查詢. 

兩者的共同點:

   1):要想利用索引,都要符合SARG標准.

   2) :都是為了提高查詢速度.

   3):都需要額外的系統開銷,磁盤空間.

   補充說明: stmtText信息來產生,在查詢語句前面加上:SET STATISTICS PROFILE on.可以通過運行它,來觀察你的查詢是否合理,這樣才能真正做到優化.

11.
N對256取余數
N%256 或 N&0xFF
12.
JVM垃圾回收方式采用復制算法回收的是
新生代串行收集器  新生代並行回收收集器 並行收集器
jvm垃圾回收算法:
http://jbutton.iteye.com/blog/1569746
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM