一、引入
先来看一个实际问题:
编写的五子棋程序中,有存盘退出和续上盘的功能
如上图,0表示没有棋子,1表示黑色棋子,2表示蓝色棋子
问题分析:因为该二维数组很多值是默认值0,因此记录了很多没有意义的数据。
解决方案:用稀疏数组代替二维数组
二、稀疏数组
基本介绍:当一
前面我们分析了AQS的基本原理,然后也试着基于AQS实现了一个可重入的锁了,现在我们再来看看官方的ReentrantLock锁,这个锁是可重入的独占锁,也就是说同时只有一个线程可以获取该锁,而且这个线程还能继续尝试获取锁;
一.简单的使用
我们先根据ReentrantLock来
img:
<img src="/upload/${good.photo}" style="width: 120px;height: 120px;" alt="图片" class="img-thumbnail"><br>
${good.photo}值为: c
Spring Boot可以更为方便地搭建一个Web系统,之后服务器上部署也较为方便
此篇有些细节未提及,我新写了一篇Spring框架学习笔记(8)——spring boot+mybatis plus+mysql项目环境搭建来进行补充,可以两篇博文进行参考
创建Spring boot项目
1
1.概述
Redis Sentinel是一个分布式系统,为Redis提供高可用性解决方案。可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip protocols)来 接收关于主服务器是否下线的信息, 并使用投票协议(agre
本文介绍 如何在pom.xml中使用distributionManagement将项目打包上传到nexus私服1、pom.xml文件添加distributionManagement节点
<!-- 使用分发管理将本项目打成jar包,直接上传到指定服务器 --&g
这篇文章主要讲解实现线程的方式到底有几种?以及实现 Runnable 接口究竟比继承 Thread 类实现线程好在哪里?
实现线程是并发编程中基础中的基础,因为我们必须要先实现多线程,才可以继续后续的一系列操作。所以本文就先从并发编程的基础如何实现线程开始讲起。
实现线程的方式到底有几种?
之前写的那篇Spring框架学习笔记(5)——Spring Boot创建与使用,发现有多小细节没有提及,,正好现在又学习了mybatis plus这款框架,打算重新整理一遍,并将细节说清楚
1.通过IDEA创建spring boot
2.项目相关配置
只需要修改第一个和第二个,下面的其
MyBatis是一个Java的持久层框架,和Hibernate一样,都是ORM框架。
MyBaits的前身是iBatis,可以将数据库中记录映射为pojo,是开发人员以面向对象编程的思想来操作数据库。
MyBatis消除了几乎所有的JDBC代码、参数的手动设置、对结果集的检索,开发人员
本文介绍通过java程序在excel中操作形状(图形)的方法,包括:
1. 添加形状(如设置形状类型/位置/大小、形状颜色填充(单色/渐变色/纹理/图片填充)、形状显示或隐藏、形状倾斜角度、添加文本到形状、形状阴影等)
2. 读取形状中的文本和图片
3. 删除形状(删除指定或全部形状)
Redis详解(六)——哨兵机制
一、概述
Redis Sentinel是一个分布式系统,为Redis提供高可用性解决方案。可以在一个架构中运行多个 Sentinel 进程(progress), 这些进程使用流言协议(gossip protocols)来 接收关于主服务器是否下线的信息,
时间序列数据库(TSDB)初识与选择
本文作者由 MageByte 团队的 「借来方向」编写,关注公众号 给你更多硬核技术
背景
这两年互联网行业掀着一股新风,总是听着各种高大上的新名词。大数据、人工智能、物联网、机器学习、商业智能、智能预警啊等等。
以前的系统,做数据可视化,信息管
网络原理是工程师的必须了解的计算机基础知识,先推荐下两本好书,《图解HTTP》和《图解TCP/IP》。
《图解TCP/IP》讲解网络基础知识、TCP/IP基础知识、数据链路、IP协议、IP协议相关技术、TCP与UDP、路由协议、应用协议、网络安全等内容,《图解HTTP》对HTTP协议进行了
Redis详解(七)——集群
Redis3.0版本之前,可以通过Redis Sentinel(哨兵)来实现高可用 ( HA ),从3.0版本之后,官方推出了Redis Cluster,它的主要用途是实现数据分片(Data Sharding),不过同样可以实现HA,是官方当前推荐的方案。
Redis详解(八)——企业级解决方案
缓存预热
缓存预热就是系统上线后,提前将相关的缓存数据直接加载到缓存系统。避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题!用户直接查询事先被预热的缓存数据!
缓存预热解决方案:
缓存雪崩
缓存雪崩就是在一个较短的时间内,缓存中较多的ke
原理
项目的数据库字典表是一个很重要的文档。通过此文档可以清晰的了解数据表结构及开发者的设计意图。
通常为了方便我都是直接在数据库中建表,然后通过工具导出数据字典。
在Mysql数据库中有一个information_schema库,它提供了访问数据库元数据的方式。
什么是元数据呢?就
Vue.js 路由允许我们通过不同的 URL 访问不同的内容。通过 Vue.js 可以实现多视图的单页Web应用(single page web application,SPA)。
需要引入vue-router.js
<script src="https://unpkg.com
前面说了这个多,我们可以自己尝试实现一个同步器,我们可以简单的参考一下ReentrantLock这个类的实现方式,我们就简单的实现一个不可重入的独占锁吧!
一.简单分析ReentrantLock的结构
下图所示,直接实现了Lock这个接口,然后定义了一个内部类继承AQS,暂时
1.字符串/图片/map集合
@GetMapping("/hello")
public String test(Model model){
String message="first thymeleaf !!";
model.addAt
把自己的项目发布到maven仓库并在maven和gradle中开始使用
上一条博客中提到的日志打印项目总算是维护的差不多了, 不过现在使用它还是打成jar包放到其他项目内, 所以决定把项目传到maven仓库内, 使用时只需要配置一下即可了
我使用的是阿里云的maven仓库服务, 如何购买阿