不少人蠢蠢欲动,有童鞋问我java后端面试会面试什么?
作为一个java后端老鸟,跌打滚爬多次被面试和面试别人,总结了一些经验,希望对大家有所帮助。
特别说明,仅仅针对工作两年以上的java后端开发。以开发性题目为主。
1.数据结构相关
假设1亿整数存放在一个txt文件中,如何去重和排序?
思路:
1.1.面试者要评估一下一亿整数的大小。一个int占4个字节,1亿呢?
1.2.去重的数据结构有哪些?HashSet--->引申到HashMap--->ConcurrentHashMap
1.3 数据量增大到十亿百亿怎么去重?
布隆过滤器,优点,缺点
1.4.其他方式?
数据库distinct order by,txt怎么导入到数据库?load
redis去重排序,redis的数据结构-->引申到其他数据结构 String,list,hash,set,sorted set,hyperloglog,geo
mongo去重排序,
....
2. 算法相关,主要考察代码能力
斐波那契数列(fabnacci)实现,首先介绍一下该算法的思想

2.1 第一级别实现: 两层递归
public static long fibonacci(int n){ if(n==0) return 0; else if(n==1) return 1; else return fibonacci(n-1)+fibonacci(n-2); }
问算法复杂度及评估一下性能问题,提示可以优化。
2.2 第二级别:减少一层递归
public static void main(String[] args) { long tmp=0; // TODO Auto-generated method stub int n=10; Long start=System.currentTimeMillis(); for(int i=0;i<n;i++){ System.out.print(fibonacci(i)+" "); } System.out.println("-------------------------"); System.out.println("耗时:"+(System.currentTimeMillis()-start)); } public static long fibonacci(int n) { long result = 0; if (n == 0) { result = 0; } else if (n == 1) { result = 1; tmp=result; } else { result = tmp+fibonacci(n - 2); tmp=result; } return result; }
问题,算法复杂度,引导有没有不用递归的?
2.3 无递归
public

