![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java面试必考点32个
Java面试必考点32个
Andrew.J
以终为始,闭环迭代,持续提高。
展开
-
何谓悲观锁与乐观锁
乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点,不能不以场景而定说一种人好于另外一种人悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java 中 synchro原创 2020-11-24 20:20:14 · 84 阅读 · 0 评论 -
架构的演进之路与前沿技术
系统架构演进首先以演进的方式来了解不同的系统架构。单体架构一个项目中的多个服务,混合部署在一个进程内,服务之间的交互都是通过进程内调用完成的,正如图中 Service 之间的红色箭头所示。这样做的好处是可以快速开发、部署服务,服务之间调用的性能也最好。当然,这种架构缺点也非常多,比如:●随着业务的增长,项目越来越臃肿;●服务之间因为 JAR 包引用导致频繁的依赖冲突;●服务资源变更困难,因为一个服务可能被多个不同的业务引用,升级资源需要多个业务方同时升级;●因为不同业务方都可以直连服务的数原创 2020-11-20 09:06:59 · 634 阅读 · 1 评论 -
MySQL调优与最佳实践(下)
接上篇详解 MySQL下面来学习互联网行业使用最为广泛的关系型数据库 MySQL,它的知识点结构图如下所示。常用 SQL 语句对于手写常用 SQL 语句,没有什么特殊的技巧,根据所列的语句类型多做一些练习就好。数据类型要知道 MySQL 都提供哪些基本的数据类型,不同数据类型占用的空间大小。可以按给出的分类进行记忆,不一一罗列。引擎介绍 MySQL 中主要的存储引擎。●MyISAM 是 MySQL 官方提供的存储引擎,其特点是支持全文索引,查询效率比较高,缺点是不支持事务、使用表级锁。原创 2020-11-18 16:58:41 · 123 阅读 · 0 评论 -
消息队列Kafka架构与原理(上)
消息队列与数据库知识点先来看看相关知识点汇总,如下图。首先为了防止歧义进行说明,本课时中提到的“队列“就是指“消息队列“。消息队列来看消息队列的应用场景,也就是队列能解决哪些问题。●队列可以对应用进行解耦合,应用之间不用直接调用。●可以通过队列来传递消息,完成通信。●队列也可以用来执行异步任务,任务提交方无需等待结果。●队列的另一个作用是削峰填谷,在突发流量时,可以通过队列做缓冲,不会对后端服务产生较大压力,当峰值过去时,可以逐渐消费堆积的数据,填平流量低谷。●消息队列一般还提供了一写多读原创 2020-11-18 16:04:35 · 424 阅读 · 1 评论 -
高并发架构基石 - 缓存
缓存知识点类型缓存是高并发场景下提高热点数据访问性能的一个有效手段,在开发项目时会经常使用到。缓存的类型分为:本地缓存、分布式缓存和多级缓存。本地缓存就是在进程的内存中进行缓存,比如我们的 JVM 堆中,可以用 LRUMap 来实现,也可以使用 Ehcache 这样的工具来实现。本地缓存是内存访问,没有远程交互开销,性能最好,但是受限于单机容量,一般缓存较小且无法扩展。分布式缓存可以很好得解决这个问题。分布式缓存一般都具有良好的水平扩展能力,对较大数据量的场景也能应付自如。缺点就是需要进行远程请求原创 2020-11-18 10:48:14 · 184 阅读 · 0 评论 -
必会框架 - RPC与ORM(下)
接上篇详解 Netty下面我们来看 Netty 相关的知识点,如下图所示。特点如上图左侧所示,首先了解 Netty 的特点。●Netty 是一个高性能的异步事件驱动的 NIO 框架,它对消息的处理采用串行无锁化设计,提供了对 TCP、UDP 和文件传输的支持。●Netty 内置了多种 encoder 和 decoder 实现来解决 TCP 粘包问题。●Netty 处理消息时使用了池化的缓冲池 ByteBufs,提高性能。●结合内存零 copy 机制,减少了对象的创建,降低了 GC 的压力。原创 2020-11-17 17:03:37 · 345 阅读 · 1 评论 -
必会框架 - Spring全家桶(上)
常用框架汇总先来看常用框架的知识点汇总,如下图所示。如上图所示,左上方是 Spring 系列。很多研发人员把 Spring 看作心目中最好的 Java 项目,没有之一。Spring 系列包含非常多的项目,可以满足 Java 开发中的方方面面。那么来看几个常用的 Spring 框架。SpringSpring Framework,也就是我们常说的 Spring 框架,包括了 IoC 依赖注入,Context 上下文、 Bean 管理、SpringMVC 等众多功能模块,其他 Spring 项目比如 S原创 2020-11-17 15:47:54 · 491 阅读 · 1 评论 -
数据结构与算法
数据结构知识点首先看数据结构的知识点都有哪些,如下图所示。1.队列和栈是经常使用的数据结构,需要了解它们的特点。队列是先进先出,栈是后进先出。2.表,包括很多种,有占用连续空间的数组、用指针链接的单向和双向链表,首尾相接的循环链表、以及散列表,也叫哈希表。3.图,在特定领域使用的比较多,例如路由算法中会经常使用到,图分为有向图、无向图及带权图,这部分需要掌握图的深度遍历和广度遍历算法,了解最短路径算法。4.树的内容,树一般用作查找与排序的辅助结构,剩下两个部分都和树有关,一个是二叉树,一个是多叉原创 2020-11-17 10:56:52 · 230 阅读 · 0 评论 -
并发与多线程
多线程知识点多线程协作时,因为对资源的锁定与等待会产生死锁,这里需要了解产生死锁的四个基本条件,要明白竞争条件与临界区的概念,知道可以通过破坏造成死锁的 4 个条件来防止死锁。前面讲过进程间的通信方式,这里还要知道线程间的通信方式,通信主要指线程之间的协作机制,例如 wait、notify 等。还需要知道 Java 为多线程提供的一些机制,例如 ThreadLocal 用来保存线程独享的数据, Fork/Join 机制用于大任务的分割与汇总,Volatile 对多线程数据可见性的保证,以及线程的中断原创 2020-11-16 15:30:03 · 1053 阅读 · 0 评论 -
深入浅出JVM
JVM 知识点汇总首先看看 JVM 的知识点汇总。如上图所示,JVM 知识点有 6 个大方向,其中,内存模型、类加载机制、GC 垃圾回收是比较重点的内容。性能调优部分偏重实际应用,重点突出实践能力。编译器优化和执行模式部分偏重理论基础,主要掌握知识点。各个部分需要了解的知识点如下。●内存模型:程序计数器、方法区、堆、栈、本地方法栈的作用,保存哪些数据。●类加载:双亲委派的加载机制,以及常用类加载器分别加载哪种类型的类。●GC:分代回收的思想和依据,以及不同垃圾回收算法实现的思路、适合的场景。原创 2020-11-16 10:11:21 · 149 阅读 · 0 评论 -
详解TCP的三次握手(建连)四次挥手(断连)
详解三次握手建连TCP是基于链接的,所以在传输数据前需要先建立链接,TCP在传输上是双工传输,不区分Client端与Server端,为了便于理解,我们把主动发起建连请求的一端称为Client端,把被动建立链接的一端称作Server端。如下图,建连的时序是从上到下,左右两边的绿字代表Client端与Server端当时的链接状态。首先建立链接前需要Server端先监听端口,因此Server端建立链接前的初始状态就是LISTEN状态,这时Client端准备建立链接,先发送一个SYN同步包,发送完同步包后,原创 2020-11-13 10:00:31 · 350 阅读 · 0 评论