BATJ面试知识点以及学习大纲:JVM+Redis+设计模式+并发编程+SpringMVC等等
前言
金九银十已经到来,作为一个开发人员,你是否面上了自己理想的公司,薪资达到心中理想的高度?
面试:如果不准备充分的面试,完全是浪费时间,更是对自己的不负责。
今天给大家分享下我整理的Java架构面试专题及答案,其中大部分都是大企业面试常问的面试题,可以对照这查漏补缺,当然了,这里所列的肯定不可能覆盖全部方式,不过也希望能对即将找工作的朋友起到一些帮助!
Java面试的重点:
数据结构与算法,JVM内存结构、垃圾回收器、回收算法、GC、并发编程相关(多线程、线程池等)、NIO/BIO、性能优化、设计模式、Spring框架:分布式相关:Redis缓存、一致Hash算法、分布式存储、负载均衡等,微服务以及Docker容器等。在这由于文字很多,我总结了java面试所涉及到的常问范围及常问面试题分享给大家,文末有领取!
部分面试常问的面试专题
一、JVM与性能优化
- 描述一下 JVM 加载 Class 文件的原理机制?
- 什么是类加载器?
- 类加载器有哪些?
- 什么是tomcat类加载机制?
- 类加载器双亲委派模型机制?
- Java 内存分配?
- Java 堆的结构是什么样子的?
- 简述各个版本内存区域的变化?
- 说说各个区域的作用?
- Java 中会存在内存泄漏吗,简述一下?
- Java 类加载过程?
- 什么是GC? 为什么要有 GC?
- 简述一下Java 垃圾回收机制?
- 如何判断一个对象是否存活?
- 垃圾回收的优点和原理,并考虑 2 种回收机制?基本原理是什么?
- 深拷贝和浅拷贝?
- 什么是分布式垃圾回收(DGC)?它是如何工作的?
- 在 Java 中,对象什么时候可以被垃圾回收?
- 简述Minor GC 和 Major GC?
- Java 中垃圾收集的方法有哪些?
- 讲讲你理解的性能评价及测试指标?
- 常用的性能优化方式有哪些?
- 说说分布式缓存和一致性哈希?
- 什么是GC调优?
答案文档资料
二、Redis
- redis数据结构有哪些?
- Redis缓存穿透,缓存雪崩?
- 如何使用Redis来实现分布式锁?
- Redis的并发竞争问题如何解决?
- Redis持久化的几种方式,优缺点是什么,怎么实现的?
- Redis的缓存失效策略?
- Redis集群,高可用,原理?
- Redis缓存分片?
- Redis的数据淘汰策略?
- redis队列应用场景?
- 分布式使用场景(储存session)?
三、SpringMVC
- 什么是 Spring MVC ?简单介绍下你对 springMVC 的理解?
- SpringMVC 的流程?
- Springmvc 的优点?
- Spring MVC 的主要组件?
- springMVC 和 struts2 的区别有哪些?
- SpringMVC 怎么样设定重定向和转发的?
- SpringMvc 怎么和 AJAX 相互调用的?
- 如何解决 POST 请求中文乱码问题,GET 的又如何处理呢?
- Spring MVC 的异常处理 ?
- SpringMvc 的控制器是不是单例模式,如果是,有什么问题,怎么解决?
- SpringMVC 常用的注解有哪些?
- SpingMvc 中的控制器的注解一般用那个,有没有别的注解可以替代?
- 如果在拦截请求中,我想拦截 get 方式提交的方法,怎么配置?
- 怎样在方法里面得到 Request,或者 Session?
- 如果想在拦截的方法里面得到从前台传入的参数,怎么得到?
- 如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象?
- SpringMvc 中函数的返回值是什么?
- SpringMvc 用什么对象从后台向前台传递数据的?
- 怎么样把 ModelMap 里面的数据放入 Session 里面?
- SpringMvc 里面拦截器是怎么写的?
- 注解原理?
答案文档截图
四、设计模式与重构
- 说说几个常见的设计模式(23种设计模式)?
- 设计一个工厂的包的时候会遵循哪些原则?
- 列举一个使用了 Visitor/ Decorator模式的开源项目/库?
- 如何实现一个单例?
- 代理模式(动态代理)?
- 单例模式(懒汉模式,恶汉模式,并发初始化如何解决, volatile与lock的使用)?
- JDK源码里面都有些什么让你印象深刻的设计模式使用,举例看看?
五、并发编程:
- 什么是多线程并发和并行?
- 什么是线程安全问题?
- 什么是共享变量的内存可见性问题?
- 什么是Java中原子性操作?
- 什么是Java中的CAS操作,AtomicLong实现原理?
- 什么是Java指令重排序?
- Java中Synchronized关键字的内存语义是什么?
- Java中Volatile关键字的内存语义是什么?
- 什么是伪共享,为何会出现,以及如何避免?
- 什么是可重入锁、乐观锁、悲观锁、公平锁、非公平锁、独占锁、共享锁?
- 讲讲ThreadLocal 的实现原理?
- ThreadLocal 作为变量的线程隔离方式,其内部是如何做的?
- 说说InheritableThreadLocal 的实现原理?
- InheritableThreadLocal 是如何弥补 ThreadLocal 不支持继承的特性?
- CyclicBarrier内部的实现与 CountDownLatch 有何不同?
- 随机数生成器 Random 类如何使用 CAS 算法保证多线程下新种子的唯一性?
- ThreadLocalRandom 是如何利用 ThreadLocal 的原理来解决 Random 的局限性?
- Spring 框架中如何使用 ThreadLocal 实现 request scope 作用域 Bean?
- 并发包中锁的实现底层(对AQS的理解)?
- 讲讲独占锁 ReentrantLock 原理?
- 谈谈读写锁 ReentrantReadWriteLock 原理?
- StampedLock 锁原理的理解?
- 谈下对基于链表的非阻塞无界队列 ConcurrentLinkedQueue 原理的理解?
- ConcurrentLinkedQueue 内部是如何使用 CAS 非阻塞算法来保证多线程下入队出队操作的线程安全?
- 基于链表的阻塞队列 LinkedBlockingQueue 原理。
- 阻塞队列LinkedBlockingQueue 内部是如何使用两个独占锁 ReentrantLock 以及对应的条件变量保证多线程先入队出队操作的线程安全?
- 分析下JUC 中倒数计数器 CountDownLatch 的使用与原理?
- CountDownLatch 与线程的 Join 方法区别是什么?
- 讲讲对JUC 中回环屏障 CyclicBarrier 的使用?
- CyclicBarrier内部的实现与 CountDownLatch 有何不同?
- Semaphore 的内部实现是怎样的?
- 并发组件CopyOnWriteArrayList 是如何通过写时拷贝实现并发安全的 List?
最后
针对于上面的面试题我总结出了互联网公司java程序员面试涉及到的绝大部分面试题及答案做成了文档和架构视频资料免费分享给大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术资料),希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!文末分享架构资料,关注文末公众号领取
kafka:
kafka
Spring原理:
spring源码
Netty:
Netty
获取方式:资料整理不易,对你有用请点个赞,关注下方公众号获取