前言
很多朋友对面试不够了解,不知道如何准备,对面试环节的设置以及目的不够了解,因此成功率不高。通常情况下校招生面试的成功率低于1%,而社招的面试成功率也低于5%,所以对于候选人一定要知道设立面试的初衷以及每个环节的意义,有的放矢...
今天在这分享目前国内公司Java面试常问的问题包括JVM虚拟机、常用的算法和数据结构,Redis缓存,分布式,Spring,微服务等。为明年金三银四攻下BATJM等大厂做好准备!
正所谓知己知彼,只有体系知识巩固,面对不断更新的技术才能快速掌握,同时在面试、工作中也更能脱颖而出!
由于篇幅原因,在这答案就不做全部展示了,这些题我已经整理成pdf文档免费分享给那些有需要的朋友,同时整理也花费了蛮多时间,有需要的朋友
基础
- String类能被继承吗,为什么
- String,Stringbuffer,StringBuilder的区别?
- ArrayList和LinkedList有什么区别
- 类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,他们的执行顺序
- 用过哪些Map,都有什么区别,HashMap是线程安全的吗,并发下使用的Map是什么,他们内部原理分别是什么,比如hashcode,扩容等
- HashMap为什么get和set那么快,concurrentHashMap为什么能提高并发
- 抽象类和接口的区别,类可以继承多个类么,接口可以继承多个接口么,类可以实现多个接口么
- 什么情况下会发生栈内存溢出
- 什么是nio,原理
- 反射中,Class.forName和ClassLoader区别
- tomcat结构,类加载器流程
Spring Boot
- 什么是 Spring Boot?
- 为什么要用 Spring Boot?
- 什么是 Spring Boot Stater ?
- 你能否举一个例子来解释更多 Staters 的内容?
- Spring Boot 还提供了其它的哪些 Starter Project Options?
- Spring 是如何快速创建产品就绪应用程序的?
- 创建一个 Spring Boot Project 的最简单的方法是什么?
- 运行 Spring Boot 有哪几种方式?
- Spring Boot、Spring MVC 和 Spring 有什么区别?
- 什么是自动配置?
多线程
- 线城池的最大线程数目根据什么确定
- 多线程的几种实现方式,什么是线程安全,什么是重排序
- volatile的原理,作用,能代替锁么
- sleep和wait的区别,以及wait的实现原理
- Lock与synchronized 的区别,synchronized 的原理,什么是自旋锁,偏向锁,轻量级锁,什么叫可重入锁,什么叫公平锁和非公平锁
- 用过哪些原子类,他们的参数以及原理是什么
- 用过哪些线程池,他们的原理简单概括下,构造函数的各个参数的含义,比如coreSize,maxsize等
- 有一个第三方接口,有很多个线程去调用获取数据,现在规定每秒钟最多有10个线程同时调用它,如何做到。
- spring的controller是单例还是多例,怎么保证并发的安全
- 用三个线程按顺序循环打印abc三个字母,比如abcabcabc
- ThreadLocal用过么,原理是什么,用的时候要注意什么
- 如果让你实现一个并发安全的链表,你会怎么做
设计模式
- 请列举出在JDK中几个常用的设计模式?
- 什么是设计模式?你是否在你的代码里面使用过任何设计模式?
- Java 中什么叫单例设计模式?请用Java 写出线程安全的单例模式
- 在 Java 中,什么叫观察者设计模式(observer design pattern)?
- 使用工厂模式最主要的好处是什么?在哪里使用?
- 举一个用 Java 实现的装饰模式(decorator design pattern)?它是作用于对象层次还是类层次?
- 在 Java 中,为什么不允许从静态方法中访问非静态变量?
- 例说明什么情况下会更倾向于使用抽象类而不是接口?
JVM相关
- Jvm中一次完整的GC流程(从ygc到fgc)是怎样的,重点讲讲对象如何晋升到老年代,几种主要的jvm参数等
- 你知道哪几种垃圾收集器,各自的优缺点,重点讲下cms
- 当出现了内存溢出,你怎么排错
- JVM内存模型的相关知识了解多少
- 简单说说你了解的类加载器
- JAVA的反射机制
- 描述一下JVM加载class文件的原理机制?
- 如何判断对象可以被回收?
- 什么时候一个对象会被GC?
- 为什么要在这种时候对象才会被GC?
- JVM内存分为哪几部分,这些部分分别都存储哪些数据?
- 一个对象从创建到销毁都是怎么在这些部分里存活和转移的?
HTTP网络
- http1.0和http1.1有什么区别
- TCP三次握手和四次挥手的流程,为什么断开连接要4次,如果握手只有两次,会出现什么
- TIME_WAIT和CLOSE_WAIT的区别
- 说说你知道的几种HTTP响应码
- 当你用浏览器打开一个链接的时候,计算机做了哪些工作步骤
- Linux下IO模型有几种,各自的含义是什么
- TCP/IP如何保证可靠性,数据包有哪些数据组成
中间件及分布式
- tomcat如何调优,各种参数的意义
- 常见的缓存策略有哪些,你们项目中用到了什么缓存系统,如何设计的,Redis的使用要注意什么,持久化方式,内存设置,集群,淘汰策略等
- 如何防止缓存雪崩
- 用java自己实现一个LRU
- 分布式集群下如何做到唯一序列号
- 设计一个秒杀系统,30分钟没付款就自动关闭交易
- 如何做一个分布式锁
- 用过哪些MQ,怎么用的,和其他mq比较有什么优缺点,MQ的连接是线程安全的吗
- MQ系统的数据如何保证不丢失
- 分布式事务的原理,如何使用分布式事务
- 什么是一致性hash
算法
- 10亿个数字里里面找最小的10个
- 有1亿个数字,其中有2个是重复的,快速找到它,时间和空间要最优
- 2亿个随机生成的无序整数,找出中间大小的值
- 遍历二叉树
数据库
- 数据库隔离级别有哪些,各自的含义是什么,MYsql默认的隔离级别是是什么,各个存储引擎优缺点
- 高并发下,如何做到安全的修改同一行数据,乐观锁和悲观锁是什么,INNODB的行级锁有哪2种,解释其含义
- SQL优化的一般步骤是什么,怎么看执行计划,如何理解其中各个字段的含义,索引的原理?
- 数据库会死锁吗,举一个死锁的例子,mysql怎么解决死锁
- MYsql的索引实现方式
- 聚集索引和非聚集索引的区别
- 数据库中 BTREE和B+tree区别
- 数据库三范式
- 脏读&不可重复读&幻读
- 存储引擎 MyISAM和InnoDB区别
- Mysql中有哪几种锁?
- 讲一下存储过程
Redis
- 为什么要用 redis /为什么要用缓存
- 为什么要用 redis 而不用 map/guava 做缓存?
- redis 和 memcached 的区别
- redis 常见数据结构以及使用场景分析
- redis 设置过期时间
- redis 内存淘汰机制(MySQL里有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据?)
- redis 持久化机制(怎么保证 redis 挂掉之后再重启数据可以进行恢复)
- redis 事务
- Redis 常见异常及解决方案
本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点
针对于上面的面试问到的知识点我总结出了互联网公司Java程序员面试涉及到的绝大部分面试题及答案做成了文档和架构资料分享给大家,家希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。
下面是部分资料截图
Java面试专题:
各大厂面试题合集
大厂面经合集:阿里、百度、腾讯、京东、字节跳动、华为、网易、天猫、蚂蚁金服等
一些相关进阶的实战文档
Redis实战+Spring Boot实战+Spring Cloud微服务实战+Netty实战+RabbitMQ实战+JVM虚拟机实战等
最后
欢迎大家一起交流,整理资料不易,觉得有帮助的可以点赞一下这篇文章,让更多有需要的人看到!感谢各位的支持!