心安

心安

一个致力于用最简单生动的例子来讲述抽象问题的菜鸡程序员

细说Java关键字synchronized(二) -- 详解synchronized的用法
前言在上一篇入门案例的文章中,我们简单的演示了synchronized的作用,本篇文章我们就来详细的讲解一下synchronized关键字的用法。 synchronized的两个用法 对象锁对象锁包括了方法锁和同步代码块锁。其中方法锁默认的锁对象是当前的实例对象,而同步代码块锁可以手动指定锁对象。 类锁类锁包括静态方法锁和锁对象为Class对象。 对象锁1. 代码块锁123456789...
细说Java关键字synchronized(一) -- 入门案例
前言本系列博文主要讲解Java高并发中常见的关键字synchronized。Java并发编程属于中高级的知识,在读本系列博文之前,希望读者具有良好的java基础以及多线程基础。如果你连多线程都不懂,希望读者先去了解一下多线程的基本概念以及多线程的实现方式等基础内容再来阅读本博文,才能使你有所收获。话不多说,下面我们就进入正题吧。 synchronized的作用先看一下官方的解释,以下内容来自...
缓存一致性原理
前言在计算机中,计算机的指令都是由 cpu(Central Processing Unit,中央处理器)来执行的,而指令执行的过程中就会涉及到数据的读取与写入。程序运行过程中的临时数据都是存储在主存(物理内存)中的,随着cpu的速度变快,主存的速度就跟不上cpu的速度了,于是就有了“高速缓存”,从名字上面我们就可以知道,这个缓存速度是很快的。这样在程序的运行过程中,会将运算中需要的数据复制一...
数据结构(五)-- AVL树的左旋与右旋
“不平衡”出现的时机在上一篇 AVL树基础 文章中我们最后说到“平衡因子”概念。在插入新元素后,就可能出现“不平衡”,所以我们就需要去维护平衡。首先我们图解分析“不平衡”出现的时机。 可以看到,在插入新的节点之后,导致了父节点的高度值变化,从而导致父节点或者祖先节点(父节点的父节点)的左右子树的高度差变化,也就出现了“不平衡”的状态。所以,我们就应该每次插入新节点的时候通过平衡因子的变化来...
数据结构(四)-- AVL树基础
AVL树介绍在介绍AVL树之前,我们需要先了解一个概念,那就是平衡二叉树。上面链接是百度百科的解释,不过我个人还是喜欢用简单易懂的话来解释一些拗口的概念,平衡二叉树首先它是一棵二叉树。那么平衡指的是什么平衡呢?其实就是树的左右子树相对平衡,如果说左子树很大,右子树很小,那么这个树就不平衡,就往一边“倒”。不过在平衡二叉树中这个平衡限制的没有那么严格,它只要求任意一个节点的左子树与右子树的高度...
解决Shiro多次从redis中读取session的问题
前言Shiro是Apache提供的一个非常强大的Java安全框架,提供身份校验、授权、会话管理等功能。本文示例所使用的框架是Spring boot + Shiro + Redis。其中Shiro作为权限框架,redis负责缓存用户的session。 问题的发现笔者实现了自定义的SessionDAO,也就是自定义了对于session的增删改查操作,其中关于读取session的代码如下:1234...
LeetCode no.347 Solution
一、题目简介及问题分析原题链接:中文版、英文版 问题描述 给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1: 12输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2] 示例 2: 12输入: nums = [1], k = 1输出: [1] 说明: 你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。 ...
Docker安装Redis
Docker安装Redisdocker-compose.yml12345678version: '2'services: redis: container_name: redis image: redis:5.0.6 restart: always ports: - '6379:6379' 启动命令:1docker-...
修改Docker时区
解决Docker时区和宿主机不同步的问题前言之前在公司用docker没有注意时区的问题,导致了很多服务处理时间很蛋疼。因为宿主机,也就是我们的服务器时间是+8时区的,但是Docker默认是0时区的。我们的测试数据库和Java服务用的docker起的,是0时区的,而正式数据库是阿里云的数据库,是+8时区的。这样时区不统一,处理起来就麻烦,本地没问题、测试没问题、上正式就出问题。废话不多说,下面...
聊一聊mysql索引
索引前言在mysql中,假设我们在user表中查询一个名为“test01”的用户,那么我们使用的sql语句应该是SELECT * FROM user WHERE username = 'test01'。在没有建立索引的情况下,mysql会扫描整张表来查找这条数据,然后返回结果。如果数据量非常大,那么响应所消耗的时间也是非常多的。但是在“username”这一列上面建立了索引,...
avatar
XinAnzzZ
愿用十年换你一句好久不见