前幾天Java面試中遇到的問題,這隻是其中的一部分問題,面試中有很多問題是關于資料結構和算法的。在這裡做下總結,希望有能力的人可以試着做一下,并在評論區留下您的答案,讓大家互相學習。謝謝
程式設計部分
第1題*
已知類定義如下
class Node {
public Double value;
public List<Node> children;
}
将以下遞歸程式改成非遞歸程式(兩個程式的輸出應保持順序一緻)
publicstaticvoid process(Node node) {
for (int i = 0; i < node.children.size(); i++) {
Node child = node.children.get(i);
if (child.value < node.value) {
process(child);
}
}
System.out.println(node.value);
for (int i = 0; i < node.children.size(); i++) {
Node child = node.children.get(i);
if (child.value >= node.value) {
process(child);
}
}
}
第2題*
請完善以下程式,輸入為字元數組(數組内每個字元均不相同)和個數n,傳回值是由這些字元組成的所有長度為n的字元串
例如輸入為{'a','b','c'}和個數1,則傳回值為{"a","b","c"}
例如輸入為{'a','b','c','d'}和個數2,則傳回值為{"ab","ac","ad","ba","bc","bd","ca","cb","cd","da","db","dc"}
public String[] doit(char[]chars){
......
}
第3題**
參考第1題Node類定義,Node類定義了一個樹形結構,請完善以下程式
輸入node滿足以下條件:
1 node的value是大于0的浮點數
2 node的下級節點(以及更下級節點)的value可能是null或者大于0的浮點數
程式的作用如下:
1 将樹形結構裡面所有value是null的均設為大于0的浮點數
2 非葉子節點(即children數量大于0的節點)的value均等于它的children的value之和
public void doit(Nodenode){
......
}
第4題***
Saga語言由變量定義、變量指派、條件執行三種語句組成,其中變量定義必須位于另外兩種語句之前,三種語句定義如下:
變量定義由變量名和常量值組成:
def變量名=常量值
變量指派由變量名和運算表達式組成:
變量名=運算表達式
條件執行由比較表達式和一系列變量指派組成:
if(比較表達式){
變量指派1
變量指派2
......
}
其中:
a) 變量名由小寫字母組成
b) 常量值為浮點數,例如1.1,2.0等
c) 運算表達式由變量、常量值、運算符加減乘除(+,-,*,/)和括号組成
c) 比較表達式由兩個運算表達式加比較符(>,<, =)組成,示例a+b>100.0
Saga語言程式示例:
def a=100.0
def b=200.0
def c=1.0
def d=0.0
c=(a+b)/2.0
if(c=150.0){
d=d+1.0
d=d+1.0
}
請完善以下程式(寫出思路即可),輸入是任意Saga語言程式(字元串格式),傳回值是程式中所有變量及其最終值。
public Map<String, Double> doit(Stringprog){
......
}
資料分析部分
第1題**
下圖中為一列時序變量,綠色點為正常資料點,紅色為異常資料點。請設計算法可識别異常點,簡述算法架構和内容要點。

邏輯與幾何部分
第1題***
20個球,按順序标上序号1-20,将這些球放進一個箱子,老師從這個箱子中随機取出2個球,序号分别是a和b,将a與b的和告訴學生甲,将a與b的積告訴學生乙,然後
甲問乙:你知道a和b分别是多少嗎?
乙回答:不知道
乙問甲:你知道a和b分别是多少嗎?
甲回答:不知道
乙說:呵呵,我知道了
甲說:呵呵,我也知道了
請回答a和b分别是多少,并寫出推理過程。
第2題**
已知平行四邊形的邊長分别為a和b,外接正方形如圖所示,隻外接點,無外接邊,求外接正方形邊長c的範圍