大搜車的一次筆試面試(2018/6)
參加筆試面試的流程
這次去參加的是應屆生的面試,進門首先是掃描二維碼,確認自己的身份信息,這個很強大的微信就會提示你和誰聯繫的幾點來參加筆試面試,筆試完了後把題目交給前臺接待的人,她會把題目再轉交到技術人員,然後很快就會出來結果,如果筆試通過的話,很快就會有人來進行面試,如果是筆試沒有通過的話,一樣也是很快會有人來通知你,(不好意思。。。。。。。。。。。您的筆試。。。。。。。沒有通過
主要考察的內容
選擇題
鏈表的實現ArrayList 和LinkList 之間的區別,java的異常,集合的實現hashmap treemap等,springmvc的註解有哪些。
簡答題
1 froward和redirect的區別:
forward(轉發):
是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器.瀏覽器根本不知道服務器發送的內容從哪裏來的,因爲這個跳轉過程實在服務器實現的,並不是在客戶端實現的所以客戶端並不知道這個跳轉動作,所以它的地址欄還是原來的地址.
redirect(重定向):
是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址.所以地址欄顯示的是新的URL.
轉發是服務器行爲,重定向是客戶端行爲。
區別:
1. 從地址欄顯示來說
forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器.瀏覽器根本不知道服務器發送的內容從哪裏來的,所以它的地址欄還是原來的地址.
redirect是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址.所以地址欄顯示的是新的URL.
2. 從數據共享來說
forward:轉發頁面和轉發到的頁面可以共享request裏面的數據.
redirect:不能共享數據.
3. 從運用地方來說
forward:一般用於用戶登陸的時候,根據角色轉發到相應的模塊.
redirect:一般用於用戶註銷登陸時返回主頁面和跳轉到其它的網站等
4. 從效率來說
forward:高.
redirect:低.
2 客戶端如何和服務器保持連接
在HTTP的WEB應用中, 應用客戶端和服務器之間的狀態是通過Session來維持的, 而Session的本質就是Cookie, 簡單的講,當瀏覽器向服務器發送Http請求的時候, HTTP服務器會產生一個SessionID,這個SessionID就唯一的標識了一個客戶端到服務器的請求會話過程。
3 寫一個電話號碼的正則表達式
編程題
1 統計一下一串給定的字符串中出現頻率最先出現的最高的字符,aaabbbccccdffff 這隔得話輸出的就是c。
package com.bigselectcar;
import java.util.HashMap;
import java.util.Map;
public class statistics {
public static void main(String[] args) {
charCount("asaaaaaasdssddddvdvffdfdds");
}
public static String charCount(String str){
char[] chs = str.toCharArray();
Map<Character,Integer> tm = new HashMap<Character,Integer>();
int max=0;
char maxchar=0;
for(int x=0; x<chs.length; x++){
Integer value = tm.get(chs[x]); //通過key 獲取value的值get 方法這裏的key是Character
if(value==null)
{
tm.put(chs[x], 1);
}else{
value = value +1;
tm.put(chs[x],value);
if(max<value){
max = value;
maxchar = chs[x];
}
}
}
System.out.println(max);
System.out.println(maxchar);
return null;
}
}
2 給定一個很大的數組加入裏面有10000個數,輸出前n個最小的數字,考慮效率的情況下。
package com.bigselectcar;
/**
* 選擇排序
* */
public class SelectSort {
public static void exch(int a[],int i,int j){
int t = a[i];
a[i] = a[j];
a[j] = t;
}
public static void sort(int [] a) {
int N = a.length;
for(int i=0; i<2; i++){
int min = i;
for(int j=i+1; j< N; j++){
if(a[j]<=a[min])
min=j;
}
exch(a,i,min);
}
}
public static void main(String[] args) {
int a [] = {2,3,4,1,3,34,2,32,3,23};
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
sort(a);
System.out.println(" ");
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}
}