随笔分类 - 面试
摘要:
原文链接:https://www.jb51.net/article/251428.htm 在单体应用中,如果我们对共享数据不进行加锁操作,会出现数据一致性问题,我们的解决办法通常是加锁。 在分布式架构中,我们同样会遇到数据共享操作问题,本文章使用Redis来解决分布式架构中的数据一致性问题。 1.
阅读全文
原文链接:https://www.jb51.net/article/251428.htm 在单体应用中,如果我们对共享数据不进行加锁操作,会出现数据一致性问题,我们的解决办法通常是加锁。 在分布式架构中,我们同样会遇到数据共享操作问题,本文章使用Redis来解决分布式架构中的数据一致性问题。 1.
阅读全文
摘要:## 知识点 1. class 文件结构 2. classloader 3. JVM 运行时数据区 4. 垃圾回收器和垃圾回收算法 5. JIT ## 类加载机制 JVM把`.class`文件加载到内存中时,创建对应的`class`对象,这个过程称之为类的加载机制。 ## 类的加载过程 Loadin
阅读全文
摘要:放眼望去,`java.util.concurrent`包下类大致包括:atomic 原子类、锁、并发集合、线程池、工具类。我们挑重要的了解一下。 ## Atomic 原子类 Java针对并发编程已经有了各种锁,为什么还需要原子类?原子类一定有些特别的应用场景? 在很多时候,我们需要的仅仅是一个简单的
阅读全文
摘要:想搞清楚这个问题,需要先看线程池原理:👉线程池原理 原因是,Worker线程启动后,会不断轮询,从阻塞队列中取任务,因为取不到任务,一直阻塞,Worker线程一直在运行。看代码: private Runnable getTask() { ... boolean timed = allowCoreT
阅读全文
摘要:## 是什么 * 浅拷贝:通常来讲,一个对象使用`Object.clone()`方法属于浅拷贝,浅拷贝只拷贝基本类型和`String`类型的成员变量。它的特点是,一个对象如果有引用类型的成员变量(`String`除外),浅拷贝只是拷贝这个成员变量的引用到新的对象,即两个对象中的这两个成员变量,共用一
阅读全文
摘要:## 面向对象三大特征 1. 封装 - 对外隐藏复杂的实现,暴露出简单的使用方法 - 可以隔离变化,内部的变化外部不知道 - 提高代码重用性 - 保护数据 2. 继承 * 提高代码重用性(如果仅仅是为了重用,则优先考虑组合) * 多态的前提 3. 多态 * 前提:继承 * 作用:提高代码的扩展性 *
阅读全文
摘要:下面我将围绕这几个问题,来讨论一下线程池。 线程池是什么? 为什么使用线程池,或者说使用线程池的好处是什么? 线程池怎么使用? 线程池的原理是什么,它怎么做到重复利用线程的? 1. 是什么 线程池(Thread Pool)是一种基于池化思想的管理线程的工具,它内部维护了多个线程,目的是能重复利用线程
阅读全文
摘要:什么是消息队列 消息队列是一种进程间通信或者同一个进程中不同线程间的通信方式。主要解决异步处理、应用耦合、流量消峰等问题,实现高性能、高可用、可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件。 我们可以把消息队列看作是一个存放消息的容器,当我们需要使用消息的时候,直接从容器中取出消息供自己使
阅读全文
摘要:## 1. Redis 是什么? Redis 是一种基于内存的数据库,对数据的读写操作都是在内存中完成,因此**读写速度非常快**,常用于**缓存,消息队列、分布式锁等场景**。 ## 2. Redis 有哪些数据类型? * **5 种基础数据结构**:String(字符串)、List(列表)、Se
阅读全文
摘要:## 1. Mybatis 的特点是什么? 1. Mybatis是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,加载驱动、创建连接、创建 statement 等繁杂的过程,开发者开发时只需要关注如何编写 SQL 语句,可以严格控制 SQL 执行性能,灵活度高。 2. 由于 MyBati
阅读全文
摘要:本文转载自:[Mybatis一级缓存与二级缓存的区别你知道吗,作者 Java小叮当](https://blog.csdn.net/m0_48795607/article/details/127001754 "Mybatis一级缓存与二级缓存的区别你知道吗") ## MyBatis 缓存是什么 缓存就
阅读全文
摘要:垂直应用架构 也叫单体架构。以 MVC 的垂直架构举例,MVC 架构通常分为 3 层,展示层、控制层、模型层。通常基于 MVC 架构开发的应用代码会打成一个 war 包,部署在 Tomcat 等 Web 容器中。不同的业务模块间通过本地 API 进行调用,基本不存在跨进程的远程服务调用。 垂直应用架
阅读全文
摘要:1. ThreadLocal 是什么 JDK 对ThreadLocal的描述为: 此类提供线程局部变量。这些变量与普通变量的不同之处在于,每个访问一个变量的线程(通过其get或set方法)都有自己的、独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段,这些字段希望将状态与线程
阅读全文
摘要:基础概念 进程(process):进程是计算机中的一个任务,比如打开浏览器、IntelliJ IDEA。 线程(thread):线程是进程内部的子任务。比如IDEA在敲代码的同时还能自动保存、自动导包,都是子线程做的。 进程和线程的关系就是一个进程包含一个或多个线程。 线程是操作系统调度的最小任务单
阅读全文
摘要:Java 中,数组是保存一组对象的最有效的方式,但是数组的大小是固定的,通常在写代码时,我们不知道对象的确切个数,这个时候,JDK 提供的容器类帮我们解决这个问题。 Java 的容器类分为两类:Collection和Map。所有元素序列对象都实现了Collection接口,键值对对象则实现Map接口
阅读全文
摘要:## 基础知识点 1. 使用双引号创建字符串时,JVM会先在字符串常量池中查找是否已存在该字符串,存在则返回,不存在则在池中创建后再返回。使用String的`intern()`方法也是类似处理。 2. 使用`new String`的方式创建,或者使用`+`拼接变量时,JVM都会重新创建一个新对象。比
阅读全文

浙公网安备 33010602011771号