本文主要是介绍写得太好了!记得把每一次面试当做经验积累,帮你解决90%的问题!,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言
Spring Data JPA 是在 JPA 规范的基础上进行进一步封装的产物,和之前的 JDBC、slf4j 这些一样,只定义了一系列的接口。具体在使用的过程中,一般接入的是 Hibernate 的实现,那么具体的 Spring Data JPA 可以看做是一个面向对象的 ORM。虽然后端实现是 Hibernate,但是实际配置和使用比 Hibernate 简单不少,可以快速上手。如果业务不太复杂,个人觉得是要比 Mybatis 更简单好用。
本文就简单列一下具体的知识点,详细的用法可以见参考文献中的博客。本文具体会涉及到 JPA 的一般用法、事务以及对应 Hibernate 需要掌握的点。
4 年经验应该具备哪些技能
首先,简单的聊一下我认为的 4 年经验左右、优秀的 Java 程序员应该具备的技能有哪些,按“专业技能”和“项目”两块,包括但不限于以下内容。
专业技能方面
基础:JDK 常用类的原理、源码、使用场景。 设计模式:常用几种的原理、使用场景,单例、动态代理、模板、责任链等。 数据结构:数组、链表、栈、队列、树。 网络:TCP、HTTP、HTTPS、负载均衡算法。 框架:Spring IoC 原理、Spring AOP 原理和使用、Spring 常用的扩展点、MyBatis 的核心流程。 中间件:常用中间件的核心原理与最佳实践,并对其中的 1 到 2 个有深入的学习,Redis、Kafka(RocketMQ、RabbitMQ)、Dubbo、Zookeeper。 数据库(MySQL):索引原理、隔离级别、锁机制、分库分表、慢 SQL 定位及优化、线上问题解决。 Netty:NIO 原理、核心组件、I/O 多路复用(epoll)、零拷贝。 JVM:运行时数据区、垃圾回收算法、垃圾回收器(CMS、G1)、常用配置参数、线上问题定位及解决。 稳定性保障:隔离、限流、熔断、降级等。 Linux:基本命令的使用、快速定位和排查问题。 分布式理论:CAP、BASE、2PC、3PC、TCC。
项目方面
能独立完成一个复杂模块的需求分析、方案设计和最终落地实现。 能不断思考,寻找更优的设计和解决方案,积极优化慢 SQL、慢服务。 具备排查问题的能力,遇到线上问题能及时定位和修复上线,例如:数据库死锁、服务器宕机、服务器 Full GC 频繁等。 具备难题攻关的能力,能不断解决项目遇到的挑战,能给予初级工程师技术上的指导。 初步具备带领团队(1-3人左右)的能力,能合理分配需求,做好进度把控、风险评估、Code Review。
严格来说,要完全做到上面这些有点难,我自己也并不具备,但是,我们可以将其视为目标,不断去努力。
面试常见形式
大厂面试通常是“连环炮”的形式,举个栗子:
面试官:用过哪些 Map
我:LinkedHashMap、ConcurrentHashMap、HashMap、TreeMap
面试官:这四种 Map 的区别
我:ConcurrentHashMap 线程安全,LinkedHashMap 可以记录插入顺序和访问顺序,TreeMap 可以自定义排序,除了这几个场景,其他场景基本都可以使用 HashMap
面试官:ConcurrentHashMap 怎么保证线程安全
我:JDK 1.8 以前通过分段锁,JDK 1.8 以后通过 CAS + Synchronized
面试官:ConcurrentHashMap 在 JDK 1.8 前后的锁有什么区别
我:JDK 1.8 以前锁分段,JDK 1.8 以后锁单个节点,锁粒度降低,并发度变高
这种模式的问法,其实就是想了解候选人对一个知识点的理解是仅仅停留在表面,还是真的去深入研究过。
面试内容
下面介绍下一些常见的面试内容,其中的面试题不一定是我真实遇到的,有可能是从别人的面试题中收集的,也有可能是我自己觉得重要的知识点,仅供参考。
1、项目
项目对于一个 3 - 5 年经验的开发来说是非常重要的,面试官也非常看重这一块。这个经验的开发基本是各大公司的编码主力,因此面试这个年限的候选人,通常项目是很重要的一块。面试官通常会让你先自己介绍下自己参与度最高(或者最牛逼)的项目,然后从中进行提问。常见的如以下:
介绍下你参与度最高的项目 画下项目的架构图 如果核心流程处理到一半,服务器崩溃了,会怎么处理 项目中遇到过哪些挑战或问题,怎么解决的 项目的稳定性和可用性怎么保障 数据安全这块怎么设计 项目的技术选型,为什么选这些 …
2、场景题
越到后面的面试官,越喜欢问场景题,场景题比较考验候选人平时的积累和解决问题能力。这个环节很容易挂掉一批人,特别是容易紧张的同学,很容易脑子会一片空白。场景题的核心一般是处理大数据量的问题、解决性能方面的问题。
场景题本质上是比较开放的,没有什么标准答案,只要自己的方案能够解决问题,能够“自圆其说”就行。
这个环节面试官可能会将线上真实的场景拿出来提问,我自己就遇到过。
3、专业技能
集合
经常用到哪些 Map 这几种 Map 的区别 CocurrentHashMap 怎么保证线程安全 CocurrentHashMap 在 JDK 1.8 前后的锁有什么区别 聊下 HashMap 的原理 HashMap 在 Put 时,新链表节点是放在头部还是尾部 HashMap 扩容时的流程 HashMap 在 JDK 1.8 有什么改变 CocurrentHashMap 在 JDK 1.8 有什么改变 TreeMap 的原理 Map、List、Set 分别说下你知道的线程安全类和线程不安全的类
多线程、锁
线程池使用的是哪种 线程池参数怎么配置 线程池各个参数的作用 线程池的参数配置要注意什么 线程池的工作流程 JDK 中的并发类知道哪些 AQS 的底层原理 介绍下悲观锁和乐观锁 使用过哪些锁 synchronized 和 Lock 的区别、使用场景 synchronized 原理 synchronized 作用于静态方法、普通方法、this、Lock.class 的区别 为什么引入偏向锁、轻量级锁,介绍下升级流程 死锁的必要条件,如何预防死锁 介绍下 CountDownLatch 和 CyclicBarrier 介绍下 CAS,存在什么问题 介绍下 ThreadLocal,存在什么问题
网络
HTTPS 是怎么加密的 普通 Hash 和一致性 Hash 原理 一致性 Hash 的缺点 TCP 三次握手过程,为什么需要三次握手 为什么 TIME_WAIT 状态需要经过 2MSL 才能返回到 CLOSE 状态 TCP 的拥塞控制 TCP 如何解决流控、乱序、丢包问题 为什么会出现粘包和拆包,如何解决
Spring、Mybatis
Mybatis 中 # 和 $ 的区别 怎么防止 SQL 注入 使用 Mybatis 时,调用 DAO(Mapper)接口时是怎么调用到 SQL 的 介绍下 Spring IoC 的流程 BeanFactory 和 FactoryBean 的区别 Spring 的 AOP 是怎么实现的 Spring 的事务传播行为有哪些,讲下嵌套事务 什么情况下对象不能被代理 Spring 怎么解决循环依赖的问题 要在 Spring IoC 容器构建完毕之后执行一些逻辑,怎么实现 @Resource 和 @Autowire 的区别 @Autowire 怎么使用名称来注入 bean 的 init-method 属性指定的方法里用到了其他 bean 实例,会有问题吗 @PostConstruct 修饰的方法里用到了其他 bean 实例,会有问题吗 Spring 中,有两个 id 相同的 bean,会报错吗,如果会报错,在哪个阶段报错 Spring 中,bean 的 class 属性指定了一个不存在的 class,会报错吗,如果会报错,在哪个阶段 Spring 中的常见扩展点有哪些
MySQL
MySQL 索引的数据结构 为什么使用 B+ 树,与其他索引相比有什么优点 各种索引之间的区别 B+ 树在进行范围查找时怎么处理 MySQL 索引叶子节点存放的是什么 联合索引(复合索引)的底层实现 MySQL 如何锁住一行数据 SELECT 语句能加互斥锁吗 多个事务同时对一行数据进行 SELECT FOR UPDATE 会阻塞还是异常 MySQL 使用的版本和执行引擎 MySQL 不同执行引擎的区别 MySQL 的事务隔离级别 MySQL 的可重复读是怎么实现的 MySQL 是否会出现幻读 MySQL 的 gap 锁 MySQL 的主从同步原理 分库分表的实现方案 分布式唯一 ID 方案 如何优化慢查询 explain 中每个字段的意思 explain 中的 type 字段有哪些常见的值 explain 中你通常关注哪些字段,为什么
JVM
运行时数据区 服务器使用的什么垃圾收集器 CMS 垃圾收集的原理 G1 垃圾收集的特点,为什么低延迟 有哪些垃圾回收算法,优缺点 哪些对象可以作为 GC Roots 有哪些类加载器 双亲委派模式,哪些场景是打破双亲委派模式 线上服务器出现频繁 Full GC,怎么排查 定位问题常用哪些命令 介绍下 JVM 调优的过程
Kafka
为什么使用 Kafka 介绍下 Kafka 的各个组件 如何保证写入 Kafka 的数据不丢失 如何保证从 Kafka 消费的数据不丢失 Kafka 为什么性能这么高 零拷贝技术使用哪个方法实现 Java 中也有类似的零拷贝技术,是哪个方法 Kafka 怎么保证消息的顺序消费 Kafka 怎么避免重复消费 什么是 HighWatermark 和 LEO 什么是 ISR,为什么需要引入 ISR
Redis
项目中使用的 Redis 版本 Redis 在项目中的使用场景 Redis 怎么保证高可用 Redis 的选举流程 Redis 和 Memcache 的区别 Redis 的集群模式 Redis 集群要增加分片,槽的迁移怎么保证无损 Redis 分布式锁的实现 Redis 删除过期键的策略 Redis 的内存淘汰策略 Redis 的 Hash 对象底层结构 Redis 中 Hash 对象的扩容流程 Redis 的 Hash 对象的扩容流程在数据量大的时候会有什么问题吗 Redis 的持久化机制有哪几种 RDB 和 AOF 的实现原理、优缺点 AOF 重写的过程 哨兵模式的原理 使用缓存时,先操作数据库还是先操作缓存 为什么是让缓存失效,而不是更新缓存 缓存穿透、缓存击穿、缓存雪崩 更新缓存的几种设计模式
Zookeeper
Zookeeper 的使用场景 Zookeeper 怎么实现分布式锁 Zookeeper 怎么保证数据的一致性 ZAB 协议的原理 Zookeeper 遵循 CAP 中的哪些 Zookeeper 和 Eureka 的区别 Zookeeper 的 Leader 选举 Observer 的作用 Leader 发送了 commit 消息,但是所有的 follower 都没有收到这条消息,Leader 就挂了,后续会怎么处理
分布式
CAP 理论 BASE 理论 分布式事务 2PC 和 TCC 的原理 TCC 在 cancel 阶段如果出现失败怎么处理 Paxos 算法、Raft 算法
4、Hr 面
如果你一路过五关斩六将,最终来到了 Hr 面,那么恭喜你,你已经离 offer 非常非常近了。可以开始畅想自己升职加薪,当上总经理,出任 CEO,迎娶白富美,走上人生巅峰的场景了。
Hr 面主要是了解候选人的一些通用素质,经常会问的问题如下:
介绍下自己投入最多的项目(当时我就惊了,Hr 也开始问项目了 ) 离职的原因 当前的薪资、绩效 当前在面试的其他公司的情况 平时有没有学习的习惯,怎么学习的,现在在学习什么 未来的规划
写在最后
作为一名即将求职的程序员,面对一个可能跟近些年非常不同的 2019 年,你的就业机会和风口会出现在哪里?在这种新环境下,工作应该选择大厂还是小公司?已有几年工作经验的老兵,又应该如何保持和提升自身竞争力,转被动为主动?
就目前大环境来看,跳槽成功的难度比往年高很多。一个明显的感受:今年的面试,无论一面还是二面,都很考验Java程序员的技术功底。
最近我整理了一份复习用的面试题及面试高频的考点题及技术点梳理成一份“Java经典面试问题(含答案解析).pdf 和一份网上搜集的“Java程序员面试笔试真题库.pdf ”(实际上比预期多花了不少精力),包含分布式架构、高可扩展、高性能、高并发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、Mycat、Netty、Kafka、Mysql、Zookeeper、Tomcat、Docker、Dubbo、Nginx等多个知识点高级进阶干货!
由于篇幅有限,为了方便大家观看,这里以图片的形式给大家展示部分的目录和答案截图!有需要的朋友可以戳这里免费获取
Java经典面试问题(含答案解析)
阿里巴巴技术笔试心得
cker、Dubbo、Nginx等多个知识点高级进阶干货!**
由于篇幅有限,为了方便大家观看,这里以图片的形式给大家展示部分的目录和答案截图!有需要的朋友可以戳这里免费获取 [外链图片转存中…(img-9h08EXG2-1619601752435)]
Java经典面试问题(含答案解析)
[外链图片转存中…(img-y8xNiZZ9-1619601752436)]
阿里巴巴技术笔试心得
[外链图片转存中…(img-ux2sb7sJ-1619601752436)]
这篇关于写得太好了!记得把每一次面试当做经验积累,帮你解决90%的问题!的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!