(我的算法刷题笔记(3.18-3.22)) 1. 螺旋矩阵 原题链接 1. total是总共走的步数 2. int[][] directions = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};方位 3. visited[row][column] = true;用于判断是否走完一圈 class Solution { public List<Integer&g
(MongoDB快速⼊⻔) 转自 黑马 MongoDB简介 通过docker安装MongoDB MongoDB基本操作 基本概念 数据库以及表的操作 新增数据 更新数据 删除数据 查询数据 索引 执⾏计划 UI客户端⼯具 SpringBoot整合MongoDB
(Lombok) 配置安装 常用注解 常用注解 @Data:注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法 @Setter:注解在属性上;为属性提供 setting 方法 @Getter:注解在属性上;为属性提供 getting 方法 @Slf4j:注解在类上;为类提供一个 属性名为
(Nginx-概述) 介绍 下载和安装 目录结构 Nginx-命令 Nginx-应用 配置文件结构 部署静态资源 反向代理
(项目实战 MySQL读写分离) 转自-黑马 在前面基础功能实现的过程中,我们后台管理系统及移动端的用户,在进行数据访问时,都是直接操作数据库MySQL的。结构如下图: 而在当前,MySQL服务器只有一台,那么就可能会存在如下问题: 1). 读和写所有压力都由一台数据库承担,压力大 2). 数据库服务器磁盘损坏则数据丢失,单点故障 2). 解决方案 为了解决上述提到的两个问题,我们可以准备两台My
(Redis缓存示例【一篇看懂数据库缓存的技术redis】) 因为服务器和数据库直接读写,性能消耗大 我们可以用redis缓存 当服务器想访问数据库时,可以先访问redis,看是否之前访问过想要的数据,这样就可以直接拿到想要的数据,而不需要再次访问读写数据库 环境准备 1). 在项目的pom.xml文件中导入spring data redis的maven坐标 <dependency>
(JVM参数:标准参数、非标准参数、不稳定参数) 在JVM调整过程中,主要是对JVM参数做调整。JVM参数有很多,其实我们直接使用默认的JVM参数,不去修改可以满足大多数情况。 但是如果你想在有限的硬件资源下,部署的系统达到最大的运行效率,那么进行相关的JVM参数设置是必不可少的。 下面我们就来对JVM参数进行介绍。 JVM参数主要分为以下三种:标准参数、非标准参数、不稳定参数。 标准参数 非标
(JVM相关工具) 转自 《极客时间》 JDK工具包 jps jstat jinfo jmap jhat jstack VisualVM 第三方工具【GCEasy、MAT、GCViewer、Arthas】
(JVM垃圾收集器) 转自《极客时间》 GC基本原理 垃圾回收 如果不进行垃圾收集,内存数据很快就会被占满 理论计算: 计算题:256byte * 400w / 1024 /1024 = 976.5625 MB 400百万256byte请求 约等于对象 1GB 什么是垃圾? 如何找到这个垃圾? 引用计数法和根可达算法 1)引用计数法(Reference Counting) 通过引用计数方法,找到
(MySQL集群架构搭建以及多数据源管理实战) 转自《图灵课堂》 应用中如何将单数据库升级为集群 分库分表是一个很复杂的问题,因此在实际上手ShardingSphere这样的框架之前,我们其实有必要了解一下在实际开发中,我们如何将一个MySQL服务扩展成一个MySQL集群,这样,在后续面对ShardingSphere各种复杂的配置以及API时,才能弄明白到底在干些什么事情。 接下来会一步一
自定义类加载器,加载指定路径在D盘下的lib文件夹下的类。 步骤: 新建一个需要被加载的类Test.jave 编译Test.jave到指定lib目录 自定义类加载器HeroClassLoader继承ClassLoader: 重写findClass()方法 调用defineClass()方法 测试自定义类加载器 实现: (1)新建一个 Test.java 类,代码如下: pa
DBUtil package common; import com.mysql.jdbc.jdbc2.optional.MysqlDataSource; import javax.sql.DataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; im
(大厂生产级Redis高并发分布式锁实战) 转自https://blog.csdn.net/qq_32681589/article/details/132794656 一个分布式案例引发的思考 先假设,我们当前线上有一个项目,使用nginx分别轮循到2个tomcat上。它的模型如下: 如上图,为了减缓节点压力,我们把项目部署成了2个tomcat,分别是8080端口和8081端口。并且采用的是轮询
(Redis缓存设计与性能优化) 转自 图灵课堂 缓存设计 缓存穿透 缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据则不写入缓存层。 ==缓存穿透将导致不存在的数据每次请求都要到存储层去查询, 失去了缓存保护后端存储的意义。== 造成缓存穿透的基本原因有两个: 第一, 自身业务代码或者数据出现问题。 第二, 一些恶意攻击、 爬虫等造
(线程和进程【并发和并行、线程上下文切换、线程的状态】) 转自 极客时间 进程:是指内存中运行的一个应用程序,每个进程都有自己独立的内存空间;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创建、运行到消亡的过程。 线程:是进程中的一个执行单元,负责当前进程中任务的执行。一个进程在其执行过程中,会产生很多个线程。 什么是并发与并行? 什么是线程上下文切换?
春节回来 回顾一下春节前实习的第二和第三周 导师给分配了一个测试任务,就是简单的功能测试。自己补充了一些测试点,总体难度很小 了解了部门的主要链路,业务执行的全流程 大体就是这两个任务 工作难度不大 感悟就是:实习需要大量时间,融入部门业务。如果部门业务有具体的学习视频,这样工作入手就会快捷一些。 最后希望自己可以坚持,努力的坚持下去,学习到一些知识,和部门的正式员工学习到技术和精神。 抱着学
(阅读《极客时间 | Kafka核心技术与实战》) 为什么要学习Kafka 如果你是一名软件开发工程师的话,掌握 Kafka 的第一步就是要根据你掌握的编程语言去寻找对应的 Kafka 客户端。当前 Kafka 最重要的两大客户端是 Java 客户端和 libkafka 客户端,它们更新和维护的速度很快,非常适合你持续花时间投入。 一旦确定了要使用的客户端,马上去官网上学习一下代码示例,如果能够正
(Future和FutureTask) Future类 FutureTask叫未来任务,可以将一个复杂的任务剔除出去交给另外一个线程来完成 Future主要方法 get() get方法的行为取决于Callable任务的状态,只有以下5种情况: 任务正常完成:get方法会立刻返回结果 任务尚未完成:任务还没有开始或进行中,get将阻塞并直到任务完成。 任务执行过程中抛出Exception:get
(ThreadLocal) 什么是ThreadLocal? ThreadLocal 被译为==线程本地变量”类==,在 Java 的多线程并发执行过程中,为保证多个线程对变量的安 全访问,可以将变量放到ThreadLocal 类型的对象中,使变量在每个线程中都有独立值,不会出现一个 线程读取变量时而被另一个线程修改的现象。 ThreadLocal 是解决线程安全问题一个较好方案,它通过为每个线程提
顺序打印-进阶版 方法一:三个线程竞争同一个锁,通过count判断是否打印 三个线程分别打印A,B,C 方法一:通过count计数打印(三个线程上同样的锁,打印一个,召唤所有锁,如果不满足条件,则wait等待,锁自动解锁) 方法二: /** * 有三个线程,分别只能打印A,B和C * 要求按顺序打印ABC,打印10次 * 输出示例: * ABC * ABC * ABC * ABC
(并发容器) 转自极客时间 什么是并发容器? 在JUC包中,有一大部分是关于并发容器的,如ConcurrentHashMap,ConcurrentSkipListMap, CopyOnWriteArrayList及阻塞队列。这里将介绍使用频率、面试中出现频繁的最高的 ConcurrentHashMap和阻塞队列。 注意:这里说到的容器概念,相当于我们理解中的集合的概念。 同步容器: Java中的集
(线程协作工具类) 转自 极客时间 线程协作工具类就是帮助程序员更容易的让线程之间进行协作,来完成某个业务功能。 CountDownLatch倒数门闩 import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; /** * CountDownLatch案例:6个程序猿加班 * 当计数器
(kafka系列 一) 一、消息队列 1. 消息队列的来源 在高并发的应用场景中,由于来不及同步处理请求,接收到的请求往往会发生阻塞。 例如,大量的插入、更新请求同时到达数据库,这会导致行或表被锁住,最后会因为请求堆积过多而触发“连接数过多的异常”(TooMany Connections)错误。 因此,在高并发的应用场景中需要一个缓冲机制,而消息队列则可以很好地充当这样一个角色。==消息队列通过异
ReentrantLock类图 我们看一下重入锁ReentrantLock类关系图,它是实现了Lock接口的类。NonfairSync和FairSync都继承 自抽象类Sync,在ReentrantLock中有非公平锁NonfairSync和公平锁FairSync的实现。 在重入锁ReentrantLock类关系图中,我们可以看到NonfairSync和FairSync都继承自抽象类Sync,
减少锁持有时间 减少锁粒度 将大对象拆分成小对象,增加并行度,降低锁竞争。 ConcurrentHashMap允许多个线程同 时进入 锁分离 根据功能进行锁分离 ReadWriteLock在读多写少时,可以提高性能。 锁消除 锁消除是发生在编译器级别的一种锁优化方式。 有时候我们写的代码完全不需要加锁,却执行了加锁操作。 锁粗化 通常情况下,为了保证多线程间的有效并发,会要求每个线程
转自 极客时间 Redis主从架构 redis主从架构搭建,配置从节点步骤: 1、复制一份redis.conf文件 2、将相关配置修改为如下值: port 6380 pidfile /var/run/redis_6380.pid # 把pid进程号写入pidfile配置的文件 logfile "6380.log" dir /usr/local/redis-5.0.3/da
(Java锁简介) JUC包中提供的锁 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。 JUC包中提供的锁: ReentrantLock重入锁,它是一种可重入的独享锁,具有与使用 synchronized 相同的一些基本行 为和语义,但是它的API功能更强大,==ReentrantLock 相当于synchronized 的增强版,具有 synchron
(从Kafka系统中读取消息数据——消费) 转自《 Kafka并不难学!入门、进阶、商业实战》 消费者是读取kafka分区中信息的一个实例 注意: 一个消费者可以读取多个分区 一个分区不能被多个消费者读取 消费 Kafka 集群中的主题消息 检查消费者是不是单线程 Kafka 系统的消费者接口是向下兼容的,即,在新版 Kafka 系统中老版的消费者接口仍可以使用。在新版本的 Kafka 系统中,消
(redis持久化) 转自 图灵课堂 RDB快照(snapshot) 在默认情况下, Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中。 你可以对 Redis 进行设置, 让它在“ N 秒内数据集至少有 M 个改动”这一条件被满足时, 自动保存一次数据集。 比如说, 以下设置会让 Redis 在满足“ 60 秒内有至少有 1000 个键被改动”这一条件时, 自动保存一次数
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号