2019年Java高级开发面试总结

共参与了6家企业的面试, 包含水滴, 贝壳, 新东方, **未来, moka等, 职位:Java高级开发

高频面试题

  1. JUC下用过哪些类
    答: Atomic原子类, ThreadPoolExecutor, CountdownLatch, CyclicBarrier, 信号量, CopyOnWriteArrayList, ConcurrentHashMap
  2. CountdownLactch, CyclicBarrier, 信号量三者区别
  3. dubbo整个流程, zk宕机能不能继续使用
  4. dubbo支持的协议, 默认协议, dubbo有什么传输限制
  5. dubbo的集群容错, 负载均衡都有哪些? 但都没有问具体怎么实现
  6. mybatis一二级缓存
    答: mybatis一级缓存是sqlSession级别的, 在同一个sqlSession中重复查询会使用缓存; 二级缓存可扩展到第三方应用上, 比如ehcache, redis等, 重复查询会先通过二级缓存获取数据; 加分项: Mybatis在结合了Spring之后, 一级缓存会失效, 因为使用Spring的sqlSessionTemplate, 在finally中对sqlSession进行了关闭
  7. mybatis和hibernate区别
  8. CountDownLatch底层原理
  9. Mysql两个数据引擎的区别
    答: Innodb支持事务, 查询总数需要实时count, 底层使用两个文件存储, 一个结构, 一个数据+索引; myisam不支持事务, 但是查询或更新效率高, 底层使用3个文件, 一个结构, 一个数据, 一个索引文件
  10. 组合索引的各情况
    比如a,b,c3个字段组合索引, 条件c a b, b c, a c, a情况下索引是否有效
  11. Jvm内存模型, 一个对象创建到GC的流程描述一下
  12. 类加载机制, 为什么要使用双亲委派机制
  13. 线程池的参数有哪些
  14. 如何定位当前环境可设置的合理线程池corePoolSize的大小
  15. Spring IOC是什么? DI和IOC什么关系? 为什么要用IOC?
  16. Spring AOP原理? 有什么作用?
  17. 两种动态代理的区别?
  18. 同步关键字和ReentranLock区别
  19. HashMap的底层结构
  20. 异常的分类, 结构
  21. 前端向后台发起请求过慢, 如何定位错误?
  22. 程序中出现OOM如何定位与解决? 有没有遇到过?
  23. sql语句执行太慢, 如何优化?
  24. SpringMVC有哪些注解
  25. 描述一下单例模式?
  26. 反射的原理
    这个没有答出来, 后期做总结
  27. Jvm内存调优工具
  28. ConcurrentHashMap如何扩容?
  29. JDK8中元空间是什么?
  30. 线程池每个元素时怎么存储的?
    这个当时没有想出来, 应该是用的HashSet实现的
  31. 频繁GC应该怎么处理? 会有哪些原因?
  32. 数组和链表的区别
  33. 创建线程的方式
    要能答出来callable
  34. SpringBoot, cloud用过吗? 了解原理吗?
    用过, 原理不了解
  35. 原子操作类原理, 你在什么场景使用的? 会有什么问题?
    通过volitile和cas实现原子操作, 用作生成唯一订单号, 乐观锁会有ABA问题
  36. 分布式事务相关知识
  37. 同一类中, 使用私有方法有事务注解, 但是调用方法没有事务注解, 会不会有效? 为什么? 如何解决?
  38. 给定2000个元素, 存入到map中, 只让扩容一次, 初始容量应该是多少?
  39. 数据库数据如何防止被篡改?
    没能回答上来, 面试官提示: 使用记录生成加密字符串存储
  40. 什么元素可作为GC Root元素?
  41. dubbo的注册中心有哪些? 怎么知道服务数据的变化
    答: muticast, redis, zk; 我们使用的zk, 通过zk的watch机制, 主动通知消费端节点的变化信息
  42. 乐观锁和悲观锁的区别
  43. java在处理json格式化时候, 为什么效率会慢?
    没能答上来, 后期做总结
  44. HashMap会有环形链表, 怎么解决?
    答: 使用ConcurrentHashMap
  45. Redis你们都用作哪些方面?
    答: 缓存, 分布式session, 消息队列
  46. Redis持久化机制
    AOF和RDB(默认)
  47. 手写一个二叉树结构, 并遍历
    手写了一个结构, 用先序遍历
  48. 消息队列MQ如何保证不丢失
  49. 缓存如何避免数据不一致情况

新东方让手写算法
给定一个字符串, 求最长重复子串, 由于本人对算法比较不敏感, 解决效率不够高
然后面试官觉得很可惜, 又给了一个机会, 让手写链表的插入, 这个应该还算可以
最后面试官的评价: 基础应该可以, 算法有待提升

有一家公司问到了Mybatis怎么和Spring结合的? (这家面试官很不尊重人, 规模也不小, 面试全程手机聊天, 吃口香糖, 最后说要去请示一下领导, 然后说领导在, 没时间, 最后给标记成不合适了)
答: 通过MapperScan中指定一个类, 实现了ImportBeanDefinitionRegistrar接口和对应方法, 容器在初始化时, 会扫描对应接口的子类, 然后调用子类的实现方法, 在方法内扫描对应目录的文件, 并对Dao层添加动态代理支持, 注册到BeanDefinition中, 交给Spring容器管理

有一点让我比较好奇, 就是大家都不问源码, 就只是问你有没有看过源码, 关于队列, nio的问的也不多, 问的也都是偏平常实用的一些东西, 整体感觉就是从java基础开始, 到框架, 分布式, 数据库, 缓存递进

你可能感兴趣的:(2019年Java高级开发面试总结)