3.19面试总结
介绍一下自己:
balabal,学校专业,实习经历,项目经验。
一些Java基础,接口和抽象类的区别,重载和重写,进程和线程,gc回收,都能说上来。内存泄露,不懂。
看到项目中用到了Redis,具体怎么用的。描述了一下。让在白板上具体演示一下。顺便讲了一下敏感词过滤的算法。
然后一道算法题,一串字符串,判断其中出现的三种括号(){ } [ ],是否匹配。 用栈实现,以此判断字符是否是括号,不是括号就跳过;是左括号就压入栈中;是右括号就peek一下,看两个括号是否匹配,不匹配返回false,遍历结束,判断栈是否为空,为空返回true,不空返回false。
package com.leeshuai; import java.io.*; import java.security.Key; import java.util.*; /** * @description: * @author: leeshuai * @create: 2018-03-15 20:28 **/ public class Main{ public static void main(String[] args) { String str="(asd)asdf[asdf]}"; System.out.println(result(str)); } public static int isNotChar(char c){ char[] chs={'[',']','(',')','{','}'}; for(int i=0;i<chs.length;i++){ if(c==chs[i]) return i; //是括号就返回下标,每队括号下标相邻; } return -1; //不是括号返回-1; } public static boolean result(String str){ char [] chs=str.toCharArray(); Stack<Character> stack=new Stack<>(); for(int i=0;i<chs.length;i++){ if(isNotChar(chs[i])%2==0) //左括号,压入栈 stack.push(chs[i]); if(stack.isEmpty()&&isNotChar(chs[i])%2==1) //栈为空,右括号,肯定错误,返回false return false; if(isNotChar(chs[i])%2==1&&stack.isEmpty()==false){ //栈不为空,右括号,取出站最顶端的括号,看是否匹配,不匹配返回false,匹配弹出。 char c=stack.peek(); if(isNotChar(chs[i])-isNotChar(c)!=1) return false; else{ stack.pop(); } } } if(stack.isEmpty()) //最后判断栈是否为空,为空返回true,否则返回false,如果多了几个右括号会出现这种情况 return true; return false; } }