阿里内推面试
内推面试电话打完之后,做了编程笔试,题目很简单,而且之前还用伪代码写过,有点紧张最终写了个大概,但思路还算清楚,已经凉凉!
电话面试问题:
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 }
专注搬砖,擅长搬砖砸自己的脚~~~
Email:
ltwbuaa@163.com