摘要:
生产者和消费者问题是线程模型中老生常谈的问题,也是面试中经常遇到的问题。今天我们就盘它!!! 一、生产者消费者模型 何为生产者消费者模型呢? 生产者消费者模型是由两类线程构成: 生产者线程:“生产”产品,并把产品放到一个缓冲区里; 消费者线程:“消费”产品。 如图所示: 小贴士: 生产者持续生产,直 阅读全文
摘要:
前面我们说过了进程的调度算法,今天我们继续来盘内存页面的置换算法,给你整的明明白白的🤪🤪🤪。 内存页面置换算法主要有下面这么几种: 最佳页面置换算法(OPT) 先进先出置换算法(FIFO) 最近最久未使用的置换算法(LRU) 时钟页面置换算法(Lock) 最不常用置换算法(LFU) 最佳页面置 阅读全文
摘要:
在讲解具体的磁盘调度算法之前,我们先看看磁盘的结构,如下图所示: 磁盘调度算法的目的很简单,就是为了提高磁盘的访问性能,一般是通过优化磁盘的访问请求顺序来做到的。寻道的时间是磁盘访问最耗时的部分,如果请求顺序优化的得当,必然可以节省一些不必要的寻道时间,从而提高磁盘的访问性能。 为了下面的讲解,我们 阅读全文
摘要:
进程的概念 试想一下这样的场景:我们编写好的代码是怎么运行起来的呢? 我们编写好的代码只是一个存储在硬盘的静态文件,通过编译后就会生成二进制可执行文件,当我们运行这个可执行文件后,它会被装载到内存中,接着 CPU 会执行程序中的每一条指令,那么这个运行中的程序,就被称为「进程」。 那进程的定义就是: 阅读全文
摘要:
前言 进程调度算法也称 CPU 调度算法,当 CPU 空闲时,操作系统就从就绪队列中按照一定的算法选择某个就绪状态的进程,并给其分配 CPU。通常以下几种情况会发生进程的调度: 当进程从运行状态转到等待状态; 当进程从运行状态转到就绪状态; 当进程从等待状态转到就绪状态; 当进程从运行状态转到终止状 阅读全文
摘要:
JMM 内存模型 为什么需要内存模型? 我们知道 CPU 的运算速度是很快的,与内存也有几个数量级上的差距,所以一般现代计算机系统都会在内存与 CPU 之间加入一层或多层读写速度尽可能接近 CPU 运算速度的高速缓存来作为缓冲。 将运算需要使用的数据复制到缓存中,让运算能快速进行,当运算结束后再从缓 阅读全文
摘要:
吊打面试官之 ThreadLocal 详解 ThreadLocal 的基本原理 我们先看一下 ThreadLocal 的简单使用: ThreadLocal<String> localName = new ThreadLocal(); localName.set("帅枫"); String name 阅读全文
摘要:
为什么要有 happens-before happe-before 是 JMM 最核心的概念,对应 Java 程序员来说,理解 happens-before 是理解 JMM 的关键。 从 JMM 设计者的角度来看,可见性和有序性其实是互相矛盾的两点: 一方面,对于程序员来说,我们希望内存模型易于理解 阅读全文
摘要:
一文带你撸懂AQS、ReentrantLock原理及源码 一、前言 Java中的大部分同步类(Lock、Semaphore、ReentrantLock等)都是基于AbstractQueuedSynchronizer(简称为AQS)实现的。AQS是一种提供了原子式管理同步状态、阻塞和唤醒线程功能以及队 阅读全文
摘要:
题目:起两个线程交替打印0~100的奇偶数 这个问题大家可能在面试的时候遇到过,虽然学过多线程相关的知识,可能当时一时半会还写不出来,现在就让我带大家写一遍吧! 方法一 首先,我们可以观察到打印的是奇数和偶数,那么我们就可以通过这个特点去写代码。假如我们有一个全局变量 count,当 count 等 阅读全文
摘要:
1. ZooKeeper 安装和使用 1.1. 使用Docker 安装 zookeeper a.使用 Docker 下载 ZooKeeper docker pull zookeeper:3.5.8Copy to clipboardErrorCopied b.运行 ZooKeeper docker r 阅读全文
摘要:
1. 什么是ZooKeeper ZooKeeper 由 Yahoo 开发,后来捐赠给了 Apache ,现已成为 Apache 顶级项目。ZooKeeper 是一个开源的分布式应用程序协调服务器,其为分布式系统提供一致性服务。其一致性是通过基于 Paxos 算法的 ZAB 协议完成的。其主要功能包括 阅读全文
摘要:
1. ZooKeeper 介绍 1.1. ZooKeeper 由来 正式介绍 ZooKeeper 之前,我们先来看看 ZooKeeper 的由来,还挺有意思的。 下面这段内容摘自《从 Paxos 到 ZooKeeper 》第四章第一节,推荐大家阅读一下: ZooKeeper 最早起源于雅虎研究院的一 阅读全文
摘要:
概述 SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于 Spring FrameWork 的后续产品,已经融合在 Spring Web Flow 里面。 Spring 框架提供了构建 Web 应用程序的全功 能 MVC 模块。使用 Spri 阅读全文
摘要:
🍖 SpringBoot 集成 Redis(Lettuce) 1. Jedis 和 Lettuce Jedis 和 Lettuce 是 Java 操作 Redis 的客户端。在 Spring Boot 1.x 版本默认使用的是 jedis ,而在 Spring Boot 2.x 版本默认使用的就是 阅读全文
摘要:
📧 异步、定时、邮件任务 在我们的工作中,常常会用到异步处理任务,比如我们在网站上发送邮件,后台会去发送邮件,此时前台会造成响应不动,直到邮件发送完毕,响应才会成功,所以我们一般会采用多线程的方式去处理这些任务。还有一些定时任务,比如需要在每天凌晨的时候,分析一次前一天的日志信息。还有就是邮件的发 阅读全文
摘要:
🎨 自定义 starter 💡 分析完了源码以及自动装配的过程,我们可以尝试自定义一个启动器 1. 说明 启动器模块是一个 空 jar 文件,只用来做依赖导入,我们需要专门来写一个自动配置模块,启动器依赖自动配置。使用时只需要引入启动器 starter 即可。 命名归约: 官方命名: 前缀:sp 阅读全文
摘要:
⏰ SpringBoot 前后端数据交互的几种常用方式 1. 用于获取参数的几种常用注解 @PathVariable: 获取 URL 后所携带的参数,即 url/{param} 这种形式。也就是一般我们使用的 GET,DELETE,PUT方法会使用到的 @RequestParam:一般我们使用该注解 阅读全文
摘要:
📠 SpringBoot 与数据访问 1. SpringData 简介 对于数据访问层,无论是 SQL (关系型数据库) 还是 NoSql (非关系型数据库),Spring Boot 底层都是采用 Spring Data 的方式进行统一处理。 Spring Boot 底层都是采用 Spring D 阅读全文
摘要:
🍳 Web开发实战案例:员工信息 CRUD 本案例采用 SpringBoot + Thymeleaf,没有使用 Mybatis,全程模拟数据。 只是一个小 Demo,很多功能都没有完善,只实现了最基本的 CRUD 和登录,登录的密码写死了是123456,用户名随意。 由于实际开发中一般不使用 Th 阅读全文