Java面试总结(2017.10)
把最近一个月的面试经历总结一下吧。期间有面试大数据和java,以下主要针对java大概总结一下。
一、某滴(套路:项目、数据结构、算法、数据库、多线程)
1.手写链表反转、二分查找(有序循环数组 4 5 1 2 3)
2.mysql索引,哪些地方影响性能?
3.jdk1.8 hashmap 的变化? 数组+树,数组加表 空间复杂度
4.hashmap的结构优化?
5.concurrenthashmap机制?
6.hbase,为什么要有列族?
7.rabbitmq、redis相关?
8.公司项目架构(我把自己负责的模块讲了)
9.spark rdd?
10.内存模型,内存管理,GC?
11.js创建对象的方式(用的不多)
12.数据库引擎,索引,哪些地方涉及到io,怎么优化?
13.设计清理机制,redis设置过期的值,如何清理?
14.redis存储类型?
15.springmvc的执行过程,mybatis二级缓存,缓存机制?
16.zookeeper选举机制?
17.spring core有哪些组件?
18.数据库隔离机制 脏读 幻读?
19.锁机制?
20.synchronized(排序)与lock(不排序,吞吐量大)的区别?
21.volatile 可见性?
22.多线程实现方法,构造方法参数
二、某东(套路:项目、架构图、高并发、JVM、数据库)
1.自我介绍
2.画出最熟悉项目的架构图 讲一下流程
3.根据流程问细节实现
4.并发安全实现的几种方式 你在工作中的实现场景
5.java的同步机制
6.synchronized
7.Object方法中的方法
8.ThreadLocal机制
9.一个类里static方法和普通方法都用synchronized修饰会发生什么
10.并发下hashmap死锁问题如何解决
11.Hashtable替换HashMap
12.Collections.synchronizedMap将HashMap包装起来
13.ConcurrentHashMap替换HashMap
14.jvm内存模型 jvm如何处理String str = new String(“abc”)
15.gc的机制和算法 (何时触发full gc等)
16.一谈最近看过的技术书籍
17.服务器/数据库高并发/高可用解决方案
18.讲一下一次典型写操作的流程 创建几个类 如何提升mysql 写操作的最大并发量
19.查询的优化
20.如何保证高访问量下读写数据的一致
21.创建表时要注意的事项 什么时候需要冗余设计
22.哪些字段要建索引 同一张表建多个索引的优缺点
23.你研究过最难的算法是哪个
24.Nginx里正则的使用
25.Springmvc里面都有什么注解 spring aop底层用什么实现
26.动态代理,反射
27.http状态码302 代表什么
28.cookie请求头包含哪些内容
29.不用session如何保存用户数据
30.单例为什么需要双重检查
31.js对象的种类 js如何实现map结构
总结:连续3轮面试 无笔试 对于有工作经验的会问细节 具体到代码实现
三、某米(套路:多线程、数据结构、算法、数据库、linux)
1.栅栏(cyclic),闭锁\递减锁(countdownlatch)
2.多线程,5种状态,多线程方法参数(核心线程池数量、最大数量、超时时间、时间单位、拒绝服务器助手(handler,队列))
3.hashmap源码,参数
4.空间复杂度、时间复杂度
5.两个线程,分别输出1,2。如何实现1,2,1,2,1,2,.....交换输出
6.二分查询,返回下标,
7.快速排序
8.数据库,索引,
9.flume 与 storm的区别
10.redis如何存set\list等值
11.volatile作用
12.悲观锁,乐观锁什么情境下用
13.如何实现秒杀
14.三维数组赋值,三层for循环,用一个循环?
15.linux查询某一个文件的IP
16.查找目录下的所有文件中是否含有某个字符串
17.linux通过关键词查询 命令 xiaomi.com
18.输出日志的最后5行 tail -f 5 ./log
最后总结:以上列举三家公司面试情况(两年工作经验),面试问题大同小异,换汤不换药。面试时间一般在2个小时左右,我经历最长的一次是3个半小时。面试一般是三轮(两轮技术面,一轮HR面),经历最多的面试是四轮(三轮技术面,一轮HR面)。大公司更注重基础,比如:数据结构、算法、索引、JVM、优化等,小公司更偏重应用,比如:Spring、struts2、mybatis、数据库等的使用。