某碩軟件校園招聘筆試題


某碩軟件校園招聘筆試題(開發)

 

第一部分:簡答題

 

1.請問TCP/IP協議分為哪幾層?

按照一般套路他可能想問的是ISO七層模型(理論),然而另外有一個模型叫做TCP/IP模型的四層模型(實際),它們分別如下:

ISO七層模型:

TCP/IP四層模型:

 

2. 寫出判斷ABCD四個表達式的是否正確,若正確,寫出各個表達式中a的值。

int a=4;

(A) a+=(a++);

(B) a+=(++a);

(C) (a++)+=a;

(D) (++a)+=(a++);

首先明確一下基本法,左值必須是一個地址。

所以:

A:8

B:9

C、D錯誤。

我去這么基礎的我開始竟然沒做對....我以為自加的在使用完會改變自己值,現在看來是被丟棄了,自運算什么的一直有點暈暈的,無實用價值的東西不值得花費時間,價值觀如此,嘲諷請隨意

 

3. 給跪了,草榴算不  :)

 

4. Error和Exception有什么區別?

Exception是正常的,屬於程序員掌控范圍內,並且可以借助Exception的名字傳遞信息(異常重要的就是名字,詳見Thinking in java第十二章),但是一出現Error基本意味着玩砸了...

參考了一下網上的資料:

1. Exception是可控的,應該在程序級就處理掉,Error是不可控的,讓系統去處理。

2. 一般是由程序員(或輸入)導致的問題(人為因素),Error一般是系統錯誤或低級(沒太理解?)的錯誤(不可控因素)。

3. (Exception) chekced exception鼓勵catch,(RuntimeException & Error) unchecked exception不鼓勵catch。

參考資料:錯誤和異常的區別(Error vs Exception)

 

 

5.  String、StringBuffer、StringBuilder的區別?

光看底層的話好像並沒有太大的區別,都是使用char[]數組來實現的,但是String有一個字符串緩沖池,之前被使用過的會緩存啊,並且像這種"hello"+"world"的會被預編譯為StringBuffer的拼接。

好了不扯淡,正經答題:

長度:String是不可變類型,再操作只能返回新的類型,而StringBuffer和StringBuilder的長度都是可變的。

線程安全:StringBuffer是線程安全的,StringBuilder是非線程安全的,當然套路中想聽的一句話就是線程安全的效率都會低一些....

通常StringBuffer或StringBuilder會被用來做多次字符串拼接的緩沖。

 

第二部分:程序題

 

1. 請編寫一個程序實現乘法口訣表,乘法口訣表如下:

 

送頭題,如下:

 1 public class Main {
 2 
 3     public static void main(String[] args) {
 4         
 5         for(int i=1;i<=9;i++){
 6             for(int j=1;j<=i;j++){
 7                 System.out.printf("%d*%d=%d ",i,j,i*j);
 8             }
 9             System.out.println();
10         }
11         
12     }
13     
14 }

 

 

2. 畢達哥拉斯三元組(此處省略看不懂的英文名詞描述...),是一組三個正數,a<b<c,並且滿足a^2+b^2=c^2。例如:3^2+4^2=5^2,。現在存在一組上面那個名詞的數滿足a+b+c=1000,請編寫一個程序找到這組數a,b,c並將它們輸出。

繼續送頭,這組數是: 200 375 425

代碼如下:

 1 public class Main {
 2 
 3     public static void main(String[] args) {
 4         
 5         final int n=1000;
 6         for(int c=n;c>=0;c--){
 7             for(int b=c-1;b>=0;b--){
 8                 int a=n-b-c;
 9                 if(a<0 || a>=b) continue;
10                 if(pow2(a)+pow2(b)==pow2(c)){
11                     System.out.printf("%d %d %d\n",a,b,c);
12                 }
13             }
14         }
15     }
16     
17     public static int pow2(int n){
18         return n*n;
19     }
20     
21 }

 

3. 平面上有6個點,每兩個點之間都以紅線或黑線連接,任意三點均不共線。現在,已知下列點之間的連線是紅色的,剩下的連線都是黑色的,要求計算這些點組成的三角形有多少是同色的?

已知的紅色連線:

6 5
1 2
1 3
2 3
2 5
3 6

 

這道題考的是算法。

我的思路:

 

每兩個點之間都以紅線或黑線連接   -->   有條邊的全連通圖

任意三點不共線      -->      任意三個頂點都可以組合

根據以上兩條可以推出:取任意三個頂點都可以組合成一個三角形。

 

所有三角形的可能性是:

=20種

從這20種選出三條邊a-b、b-c、c-a都相等的邊。

 

可以構圖了,使用鄰接矩陣:

代入樣例數據:

 

 

代碼如下:

 1 import java.util.Scanner;
 2 
 3 public class Main {
 4 
 5     public static void main(String[] args) {
 6         
 7         final int size=6;
 8         final int inf=-1;
 9         
10         int x[][]=new int[size][size];
11         for(int i=0;i<size;i++){
12             x[i][i]=inf;
13         }
14         
15         Scanner sc=new Scanner(System.in);
16         int n=sc.nextInt();
17         while(n-->0){
18             int u=sc.nextInt()-1;
19             int v=sc.nextInt()-1;
20             x[u][v]=1;
21             x[v][u]=1;
22         }
23         
24         int ans=0;
25         for(int i=0;i<size;i++){
26             for(int j=i+1;j<size;j++){
27                 for(int k=j+1;k<size;k++){
28                     if(x[i][j]==x[j][k] && x[j][k]==x[k][i]) ans++;
29                 }
30             }
31         }
32         System.out.println(ans);
33         
34     }
35     
36 }

 

 

輸入:

6
6 5
1 2
1 3
2 3
2 5
3 6

 

 

輸出:

5 

 

 

 

 

4. 存在一個Words.txt,這是一個保存了5000多單詞的文本文件,將里面的單詞按其字母在26字母表里的位置獲取一個位置數(A為1,Z為26),再將每個字母的位置相加,即得到這個單詞的得分。

例如:COLIN,它的字母值是3+15+12+9+14=53,所以該單詞得分53,請寫程序計算出這個文件里得分最高的單詞。

備注:名字間是用逗號分隔的,得分不區分字母大小寫。

 

這道題考的是工程應用。

 

計算得分的類:

 1 import java.io.BufferedReader;
 2 import java.io.FileInputStream;
 3 import java.io.FileNotFoundException;
 4 import java.io.IOException;
 5 import java.io.InputStreamReader;
 6 import java.io.UnsupportedEncodingException;
 7 
 8 /**
 9  * 單詞工具類
10  * @author CC11001100
11  *
12  */
13 public class WordUtils {
14 
15     /**
16      * 傳入文件路徑和文件編碼方式,返回得分最高的單詞
17      * @param filepath 文件路徑
18      * @param separator 單詞分隔符
19      * @param charset 文件編碼方式
20      * @return String 得分最高的單詞
21      */
22     public static String getHighestScore(String filepath,String separator,String charset){
23         
24         BufferedReader reader=null;
25         try {
26             reader=new BufferedReader(new InputStreamReader(new FileInputStream(filepath),charset));
27             
28             //緩沖讀入
29             StringBuilder sb=new StringBuilder();
30             while(reader.ready()) sb.append(reader.readLine());
31 
32             //分離單詞
33             String ss[]=sb.toString().split(separator);
34             
35             //計算每個單詞得分拿到最大的
36             int maxScore=0;
37             String maxString=null;
38             for(int i=0;i<ss.length;i++){
39                 int t=coutingScore(ss[i]);
40                 if(t>maxScore){
41                     maxScore=t;
42                     maxString=ss[i];
43                 }
44             }
45             
46             return maxString;
47         } catch (UnsupportedEncodingException e) {
48             e.printStackTrace();
49         } catch (FileNotFoundException e) {
50             e.printStackTrace();
51         } catch (IOException e) {
52             e.printStackTrace();
53         }finally{
54             //清理資源
55             if(reader!=null){
56                 try {
57                     reader.close();
58                 } catch (IOException e) {
59                     e.printStackTrace();
60                 }
61             }
62         }
63         return null;
64     }
65     
66     /**
67      * 計算單詞得分
68      * @param word 英文單詞,不區分大小寫
69      * @return 
70      */
71     public static int coutingScore(String word){
72         
73         //統一大寫
74         word=word.toUpperCase();
75         
76         //掃描計算得分
77         int score=0;
78         for(int i=0;i<word.length();i++) score+=word.charAt(i)-'A'+1;
79         return score;
80     }
81     
82 }

 

 

生成測試數據的類:

 1 import java.io.BufferedWriter;
 2 import java.io.FileOutputStream;
 3 import java.io.IOException;
 4 import java.io.OutputStreamWriter;
 5 import java.util.Random;
 6 
 7 public class Main_020 {
 8 
 9     public static void main(String[] args) throws IOException {
10         
11         String savepath="D:/test_001/words.txt";
12         
13         BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(savepath),"UTF-8"));
14         StringBuilder sb=new StringBuilder();
15         for(int i=0;i<5000;i++){
16             sb.append(randWord());
17             if(i!=4999) sb.append(",");
18         }
19         writer.write(sb.toString());
20         writer.close();
21         
22         System.out.println(sb);
23     }
24     
25     public static String randWord(){
26         //長度[1,20]隨機
27         int length=new Random().nextInt(20)+1;
28         StringBuilder sb=new StringBuilder(length);
29         while(length-->0){
30             char c=(char) (new Random().nextInt(26)+(new Random().nextBoolean()?'A':'a'));
31             sb.append(c);
32         }
33         return sb.toString();
34     }
35     
36 }

 

 

測試類:

 1 public class Main_021 {
 2 
 3     public static void main(String[] args) {
 4         
 5         String ans=WordUtils.getHighestScore("D:/test_001/words.txt",",","UTF-8");
 6         System.out.println(ans);
 7         
 8     }
 9     
10 }

 

 

 

 連自加都沒搞明白的弱渣 or 三觀不正 隨便找一條就可以把我干掉啦   :(

 

 

 

 

EOF

 


免責聲明!

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



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