摘要:
Synchronized 简介 在某些多线程场景下,如果不进行同步会导致数据不安全,为了解决线程安全的问题,引入了锁的概念。 java中常用的锁有synchronized和lock两种,本文来分析synchronized关键字的原理。 作用: 保证被Synchronized修饰的方法或代码同一时刻最 阅读全文
摘要:
下载 redis 镜像 访问 Redis 镜像库地址 可以通过 Sort by 查看其他版本的 Redis,默认是最新版本 redis:latest。 命令 描述 docker pull redis 下载最新版Redis镜像 (其实此命令就等同于 : docker pull redis:latest 阅读全文
摘要:
概述 Java 5之后新增了Lock接口,自定义类可实现Lock接口,并通过内部静态类继承AQS抽象类的方式实现独占锁、共享锁。 锁是面向使用者的,它定义了使用者与锁交互的接口,隐藏了实现细节;同步器面向的是锁的实现者,它简化了锁的实现方式,屏蔽了同步状态管理、线程的排队、等待与唤醒等底层操作。用户 阅读全文
摘要:
线程池简介 线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机的整体性能。 线程池(Thread Pool)是一种基于池化思想管理线程的工具,它维护多个线程。在线程池中,总有几个活跃线程。当需要使用线程来执行任务时,可以从池子中随便拿一个空闲线程来用,当完成 阅读全文
摘要:
分库分表概述 在业务量不大时,单库单表即可支撑。 当数据量过大存储不下、或者并发量过大负荷不起时,就要考虑分库分表。 本文总结了分库分表的相关概念、全局ID的生成策略、分片策略、平滑扩容方案、以及流行的方案。 分库分表相关术语 读写分离: 不同的数据库,同步相同的数据,分别只负责数据的读和写。 分区 阅读全文
摘要:
这是一个常见的面试场景题,考验的是面试准备范围的广度,见过就会答。 思路 基于数据库 如果之前没有遇见过,最容易想到的就是平时接触的最多的数据库排序。前端每隔一段时间调用接口去查询数据库,然后更新排行榜表。 在一个用户量非常的小的具体场景,这是可行的。 如果是一个游戏排行榜的话,随着游戏玩家的增加, 阅读全文
摘要:
剑指 Offer 20. 表示数值的字符串 思路 确定有限状态自动机 确定有限状态自动机(以下简称「自动机」)是一类计算模型。它包含一系列状态,这些状态中: 有一个特殊的状态,被称作「初始状态」。 还有一系列状态被称为「接受状态」,它们组成了一个特殊的集合。其中,一个状态可能既是「初始状态」,也是「 阅读全文
摘要:
1447. 最简分数 思路 欧几里得算法 问题转化为:如何快速判断两个数组成的分数是否为最简(即判断两个数的最大公约数是否为 1)。 快速求得 a 和 b 的最大公约数的主要方式有两种 :「更相减损法」和「欧几里得算法」,其中「欧几里得算法」的递归实现最为好写。 代码 class Solution 阅读全文
摘要:
384. 打乱数组 思路 洗牌算法 共有 n 个不同的数,根据每个位置能够选择什么数,共有 n! 种组合。 题目要求每次调用 shuffle 时等概率返回某个方案,或者说每个元素都够等概率出现在每个位置中。 我们可以使用 Knuth 洗牌算法,在 O(n) 复杂度内等概率返回某个方案。 从前往后尝试 阅读全文