前言
无论是对于刚入行工作还是已经工作几年的java开发者来说,面试求职始终是你需要直面的一件事情。首先梳理自己的知识体系,针对性准备,会有事半功倍的效果。我们往往会把重点放在技术上,而忽略了人事部分,实际上人事面试也会影响到最终的结果,把每一个环节做好,最终的结果自然不会差。在这总结一些java面试中常问的面试问题,由于过多答案文字已总结成文档在文末有领取!
而金三银四马上就到了,很多工程师朋友准备跳槽,那么现在就可以开始多看看面试题啦,我在网上找了两份比较有全的面试题,除此之外还有大厂面试全解。
真的非常全面,从初级到高级,框架、数据库、并发知识、还有多企业的面试题整理!
- 2019年多家公司整理的350道Java面试题手册.pdf
这一份主要是中高级的面试题,看完那个18K以上木有问题呀!
下面的一些常问大厂面试题
一、数据结构与算法
- 链表与数组?
- 队列和栈,出钱与入栈?
- 链表的删除、插入、反向?
- Hash表的hash函数,冲突解决方法有哪些?
- 各种俳序:冒泡、选择、插入、希尔、归并、快排、堆俳、桶排、基数的原理、平均时间复杂度、最坏时间复杂度、空间复杂度、是否稳定?
- 对冒泡与快排的改进?
- 二分查找,与变种二分查找?
- 二叉树、B+树、AVL树、红黑树、哈夫曼树?
- 二叉树的前中后续遍历:递归与非递归写法,层序遍历算法?
- KMP算法?
- 排列组合问题?
- 贪心算法、分治算法?
二、并发编程
- 跟 Synchronized 相比,可重入锁 ReentrantLock 其实现原理有什么不同?
- 那么请谈谈 AQS 框架是怎么回事儿?
- 请尽可能详尽地对比下 Synchronized 和 ReentrantLock 的异同。
- ReentrantLock 是如何实现可重入性的?
- 除了 ReetrantLock,你还接触过 JUC 中的哪些并发工具?
- 请谈谈 ReadWriteLock 和 StampedLock。
- 如何让 Java 的线程彼此同步?你了解过哪些同步器?请分别介绍下。
- CyclicBarrier 和 CountDownLatch 看起来很相似,请对比下呢?
- Synchronized 用过吗,其原理是什么?
- 你刚才提到获取对象的锁,这个“锁”到底是什么?如何确定对象的锁?
- 什么是可重入性,为什么说 Synchronized 是可重入锁?
- JVM 对 Java 的原生锁做了哪些优化?
- 为什么说 Synchronized 是非公平锁?
- 什么是锁消除和锁粗化?
- 为什么说 Synchronized 是一个悲观锁?乐观锁的实现原理又是什么?什么是
- 乐观锁一定就是好的吗?
- 什么是 Java 的内存模型,Java 中各个线程是怎么彼此看到对方的变量的?
- 请谈谈 volatile 有什么特点,为什么它能保证变量对所有线程的可见性?
- 请对比下 volatile 对比 Synchronized 的异同。
- 请谈谈 ThreadLocal 是怎么解决并发安全的?
- 很多人都说要慎用 ThreadLocal,谈谈你的理解,使用 ThreadLocal 需要注意些什么?
- Java 中的线程池是如何实现的?
- 创建线程池的几个核心构造参数?
- 线程池中的线程是怎么创建的?
- 如何在 Java 线程池中提交线程?
开源框架
- IOC和DI是什么?
- Spring IOC的理解,其初始化过程?
- BeanFactory 和 FactoryBean的区别?
- BeanFactory和ApplicationContext的区別?
- ApplicationContext上下文的生命周期?
- Spring Bean的生命周期?
- Spring AOP的实现原理?
- Spring是如何管理事务的,事务管理机制?
- Spring的不同事务传播行为有哪些,干什么闬的?
- Spring中用到了那些设计模式?
- Spring MVC的工作原理?
- Spring如何解决循环依赖?
- Spring如何保证Controller并发的安全?
数据库
- 事务四大特性(ACID)?
- 数据库隔离级别,每个级别会引发什么问题,mysql默认是哪个级别?
- innodb和myisam存储引擎的区別?
- MYSQL的两种存储引擎区别(事务、锁级别等等),各自的适用场景?
- 查询语句不同元素(where、jion、limit, group by、having等等)执行先后顺序?
- 数据库的优化(sql语句优化和索引)?
- 索引有B+索引和hash索引,各自的区别?
- B+索引数据结构,和B树的区別?
- 索引的分类(主键索引、唯一索引),最左前缀原则,哪些情况索引会失效?
- 聚集索引和非聚集索引区别
- 有哪些锁(乐观锁悲观锁),select时怎么加排它锁?
- 关系型数据库和非关系型数据库区别?
- 数据库三范式,根据某个场费设计数据表?
- 数据库的读写分离、主从复制?
- 使用explain优化sql和索引?
- long_query怎么解决?
- 死锁判定原理和具体场景,死锁怎么解决?
- varchar和char的使用场景?
- mysql并发情况下怎么解决(通过事务、隔离级别、锁)?
- 数据库崩溃时事务的恢复机制(REDO日志和UNDO日志) ?
微服务
- 什么是微服务?
- 微服务之间是如何独立通讯的?
- springCloud和dubbo 有哪些区别?
- springboot和springcloud,请谈谈对它们的理解?
- 什么是微服务熔断?什么是服务降级?
- 微服务的优缺点分别是什么?说下在项目开发中碰到的问题?
- 你所知道的微服务技术栈有哪些?
- eureka和zookeeper都可以提供服务的注册和发现的功能,请说说两者的区别?
总结
最后再给大家总结一下面试要注意的地方:面试前,提前准备面试问题的回答,回顾好简历中的工作经历;面试的时候,自我介绍要表现出自己的热情、与岗位的匹配、以及自己的亮点及有趣的地方,牢记 WWHC,STAR 原则,从岗位、部门、企业层面提问面试官;心态平稳,不要在技术面试时因为有一个知识点的不清楚而在后面的问题也回答不好!
最后
针对于上面所提到的面试问题我总结出了一些架构视频资料和互联网公司java程序员面试涉及到的绝大部分面试题及答案做成了文档和架构视频资料还有完整高清的java进阶架构学习思维导图免费分享给大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术资料),希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。