思緒萬千,內推面試電話打完之后,做了編程筆試,題目很簡單,而且之前還用偽代碼寫過,有點緊張最終寫了個大概,但思路還算清楚,已經涼涼!
電話面試問題:
1、介紹項目,業務邏輯+框架+部署+運維+數據庫;
2、GC算法,標記清楚、標記整理、復制算法;
3、雙親委派機制;
4、ThreadLocal;
5、樂觀鎖和悲觀鎖;
問題還算比較簡單,都xjb說了一些,然后發了個編程題,在線測了一下,太緊張只寫了個大概,現在想想愚不可及。。。。面試完了一下就寫出來了,真是呵呵。。。上題及實現:
題目:
給定一個字符串,找出這個字符串中最長的不重復串。
比如:對於字符串"abcba",那么返回的結果應該是"abc"或者"cba"(返回一個即可);對於字符串"acbba",返回的應是"acb"
1 package interview.test; 2 3 import java.util.Scanner; 4 5 public class TestClass { 6 7 /** 1 40' 8 題目: 9 給定一個字符串,找出這個字符串中最長的不重復串。 10 比如:對於字符串"abcba",那么返回的結果應該是"abc"或者"cba"(返回一個即可);對於字符串"acbba",返回的應是"acb" 11 */ 12 public static void main(String[] args) { 13 // write your code here 14 Scanner sc = new Scanner(System.in); 15 16 String inputString = sc.nextLine(); 17 char[] arrString = inputString.toCharArray(); 18 int length = arrString.length; 19 20 // 記錄最大長度的不重復的字符串的起始位置和終止位置,及最大長度 21 int start = 0; 22 int end = 1; 23 int maxLength = 1; 24 25 // 用來滑動的窗口 26 int windowStart = 0; 27 int windowEnd = 1; 28 29 // 存儲字符是否已在子串中,字符的ASCII做為數組索引,數組值為當前字符的索引位置 30 int[] flag = new int[256]; 31 for (int i = 0;i < 256; i++){ 32 flag[i] = -1; 33 } 34 35 flag[arrString[0]]= 0; 36 for(int i = 1; i < length; i++) { 37 // 如果已經存在,將窗口起始點值為該元素的index 38 if (windowStart < windowEnd){ 39 if(flag[arrString[i]] >= 0 ) { 40 windowStart = flag[arrString[i]]; 41 }else { 42 flag[arrString[i]] = i; 43 windowEnd++; 44 } 45 46 // 如果當前滑動窗口的長度大於原來記錄的最大非重復子串的長度,說明找到了一個新的最大子串,更新最大子串紀錄值 47 if ((windowEnd - windowStart + 1) > maxLength) { 48 maxLength = windowEnd- windowStart + 1; 49 start = windowStart; 50 end = windowEnd; 51 } 52 } 53 } 54 StringBuilder db = new StringBuilder(); 55 for(int k = start;k < end; k++) { 56 db.append(arrString[k]); 57 } 58 System.out.println(db); 59 } 60 }