- 博客(110)
- 收藏
- 关注
原创 Java 细聊JVM之堆与GC
JVM内存体系结构堆体系结构一个JVM实例只存在一个堆内存,堆内存的大小是可以调节的。类加载器读取了类文件后,需要把类、方法、常变量放到堆内存中,保存所有引用类型的真实信息,以方便执行器执行,堆内存分为三部分:Young Generation Space 新生区 Young/New Tenure generation space 养老区 ...
2020-03-22 17:29:45 355
原创 Java 细聊JVM之类加载器
什么是JVMJVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM所处的位置JVM是运行在操作系统之上的,它与硬件没有直接的交互,但是它可以通过 native 本地方法调用硬件接口JVM体系结构类加载器负责加载 class 文件,...
2020-03-11 19:16:32 180
原创 Java 面试题-生产者和消费者模式(传统到进阶)
什么是生产者和消费者?就是你去吃包子,包子铺就是生产者,你就是消费者。简单的说就是生产者负责造,消费者负责耗。需要解决的问题生产者过度生产问题 通知机制 消费者过度消费 避免产生死锁传统写法...
2020-02-27 13:47:55 1644
原创 Java 谈谈什么是 volatile
随着互联的飞速发展,互联网公司也越来越高,并发多线程,内存管理,JVM调优等成为面试必问题。1. 什么是 volatile?volatile 是 Java 虚拟机提供的轻量级的同步机制。他的三大特性:保证可见性 不保证原子性 禁止指令重排1.1 可见性在解释可见性之前需要先看一下什么是 JMM?JMM(Java 内存模型 Java Memory Model,简称 ...
2020-02-15 17:20:47 1622
原创 Redis 手把手教你搭建Redis集群
Redis Cluster 即 Redis 集群,是 Redis 官方在 3.0 版本推出的一套分布式存储方案。完全去中心化,由多个节点组成,所有节点彼此互联。Redis 客户端可以直接连接任何一节点获取集群中的键值对,不需要中间代理,如果该节点不存在用户所指定的键值,其内部会自动把客户端重定向到键值所在的节点。Redis 集群是一个网状结构,每个节点都通过 TCP 连接跟其他每个节点连接。在一个有 N 个节点的集群中,每个节点都有 N-1 个流出的 TCP 连接,和 N-1 个流入的连接,这些 TCP
2020-12-14 16:49:02 293
原创 Spring Boot优雅关闭之Redisson中ExecutorService的关闭流程源码追溯
起因起源:在使用Redisson实现分布式定时调度的过程中,遇到一个非常奇怪的问题:经过一些操作后,调度器会报一个莫名其妙的错误,status is shutdown,经过多次观察发现是在rancher平台重新发布Spring Boot项目后就会报这个错误,怀疑和Spring Boot优雅关闭有关系,所以进行一个追溯确认的过程。报错信息:Reids数据:然后翻阅RScheduledExecutorService 的方法,发现shutdown方法代码执行的 lua 脚本和目前...
2020-11-25 12:00:57 4384 3
原创 利用Redisson实现分布式延时任务调度功能
定时任务定时任务是在编码世界中经常遇到的问题,比如定时备份数据库、定时刷新缓存等,可以通过Linux定时任务完成,也可以通过框架如Spring完成,但是在分布式场景中传统单机可以完成功能就不太行了,所以需要借助其他工具来实现任务调度的功能场景:在一些订单场景中,用户下单后会锁定一些资源,然后用户非正常退出(没有触发取消订单操作),导致订单资源占用无法释放的问题。借助工具:redisson分布式服务中的分布式调度任务服务(Scheduler Service)代码关单任务定时执..
2020-11-23 16:52:34 3382 3
原创 zookeeper 手把手教你搭建zk伪分布式
由于资金和电脑配置的问题,只能搭建个伪分布式玩玩了,建议有理想的新青年尝试搭建分布式。服务器:阿里云shell:finalShellzk:zookeeper-3.4.10(可以直接在官网下载,其他版本应该也可以)# 解压一下,目录看个人,这里用的是 ~/softwaretar -xvf zookeeper-3.4.10.tar.gz重点关注一下 "bin"和"conf"这两个目录,是存储zk命令和配置文件的地方# 修改配置文件cp zoo_sample.cfg zoo...
2020-10-12 12:01:16 521
原创 Redis 数据结构——字典
字典一个键(key)可以和一个值(value)进行关联(或者说将键映射为值), 这些关联的键和值就被称为键值对。字典在 Redis 中的应用相当广泛, 比如 Redis 的数据库就是使用字典来作为底层实现的, 对数据库的增、删、查、改操作也是构建在对字典的操作之上的。除了用来表示数据库之外, 字典还是哈希键的底层实现之一: 当一个哈希键包含的键值对比较多, 又或者键值对中的元素都是比较长的字符串时, Redis 就会使用字典作为哈希键的底层实现。Redis 的字典使用哈希表作为底层实现, 一
2020-06-28 10:12:15 182
原创 Redis 数据结构——链表
链表链表在Redis中的应用非常广泛,比如列表键的底层实现之一就是链表。当一个列表键包含了数量比较多的元素,又或者列表中包含的元素都是比较长的字符串时,Redis就会使用链表作为列表键的底层实现。除了链表键之外, 发布与订阅、慢查询、监视器等功能也用到了链表, Redis 服务器本身还使用链表来保存多个客户端的状态信息, 以及使用链表来构建客户端输出缓冲区(output buffer)。每个链表节点使用一个 adlist.h/listNode 结构来表示:typedef struct li
2020-06-28 10:09:42 283
原创 Redis 数据结构——SDS
简单动态字符串(sds)定义Redis没有直接使用C语言传统的字符串表示(以空字符结尾的字符数组),而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型,并将SDS用作Redis的默认字符串表示。struct sdshdr { //记录buf 数组中已使用字节的数量 //等于SDS 所保存字符串的长度 int len; //记录buf 数组中未使用字节的数量 int free; ...
2020-06-27 09:46:49 205
原创 MySQL 简单聊聊并发控制、事务及多版本并发控制(MVCC)
并发控制读写锁在处理并发读或者写时,可以通过实现一个由两种类型的锁组成的锁系统来解决问题。这两种类型的锁通常被称为共享锁. (shared lock)和排他锁(exclusive lock),也叫读锁(read lock)和写锁(write lock)。读锁是共享的,或者说是相互不阻塞的。多个客户在同一时刻可以同时读取同一个资源,而互不干扰。写锁则是排他的,也就是说一个写锁会阻塞其他的写锁和读锁,这是出于安全策略的考虑,只有这样,才能确保在给定的时间里,只有一个用户能执行写入,并防止其他用户读取
2020-06-18 21:34:14 426
原创 Nginx 原理及配置文件
master&worker机制work方式master-workers 的机制的好处首先,对于每个 worker 进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销,同时在编程以及问题查找时,也会方便很多。其次,采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不会中断,master 进程则很快启动新的 worker 进程。当然,worker 进程的异常退出,肯定是程序有 bug 了,异常退出,会导致当前 worker 上的所有请求失败,不过
2020-06-01 19:48:03 186
原创 Redis 主从配置
就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主主要功能 读写分离 容灾恢复 配置方法 配从(库)不配主(库) 从库配置:slaveof 主库IP 主库端口 每次与master断开之后,都需要重新连接,除非你配置进redis.conf文件 Info replication:可以查看Redis主从情况 修改配置文件细节操作 拷贝多个red
2020-05-28 18:42:55 214
原创 MySQL MySQL 性能分析之show profile基本使用
Show ProfileShow Profile 是mysql提供可以用来分析当前会话中语句执行的资源消耗情况。可以用于SQL的调优测量。默认情况下,参数处于关闭状态,并保存最近15次的运行结果分析步骤1. 是否支持,看看当前的SQL版本是否支持Show variables like 'profiling';# 默认是关闭,使用前需要开启2. 开启功能set profiling=on;3.运行sql我已经提前使用脚本在emp表中插入50w数据,所以这个直接写SQL.
2020-05-28 16:25:42 256
原创 MySQL 性能分析之慢查询日志、日志分析工具
查询优化分析过程=========分析==========1.观察,至少跑1天,看看生产的慢SQL情况。2.开启慢查询日志,设置阈值,比如超过5秒钟的就是慢SQL, 并将它抓取出来。3.explain+慢SQL分析4.show profile5.运维经理orDBA,进行SQL数据库服务器的参数调优。==========总结==========1.慢查询的开启并捕获2.explain+慢SQL分析3.showprofile查询SQL在Mysql服务器里面的执行细节和生命周期情况4.
2020-05-28 16:09:51 1664
原创 MySQL 性能分析之ExPlain的基本使用
MySQL Query OptimizerMysql中有专门负责优化SELECT语句的优化器模块,主要功能:通过计算分析系统中收集到的统计信息,为客户端请求的Query提供他认为最优的执行计划(他认为最优的数据检索方式,但不见得是DBA认为是最优的,这部分最耗费时间)当客户端向MySQL请求一条Query,命令解析器模块完成请求分类,区别出是SELECT并转发给MySQL Query Optimizer时,MySQL Query Optimizer首先会对整条Query进行优化,处理掉一些 常量表达
2020-05-28 15:28:16 178
原创 MySQL 聊聊索引
索引索引(Index)是帮助MySQL高效获取数据的数据结构。可以得到索引的本质:索引是数据结构。可以简单理解为"排好序的快速查找数据结构"。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。优劣优势 类似大学图书馆建书目索引,提高数据检索效率,降低数据库的IO成本 通过索引列对数据进行排序,降低数据排序成本,降低了CPU的消耗 劣势 实际上索引也
2020-05-28 15:11:57 214
原创 MySQL MySQL主从配置——一主一从
master将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件,binary log events; slave 将 master 的 binary log events 拷贝到它的中继日志(relay log) ; slave重做中继日志中的事件,将改变应用到自己的数据库中。MySQL复制是异步的且串行化的 slave会从master读取binlog来进行数据同步 复制的原则 每个slave只有一个master 每个slave...
2020-05-28 11:19:44 6577
原创 MySQL 聊聊MySQL锁机制及事务
锁机制锁是计算机协调多个进程或线程并发访问某一资源的机制。 在数据库中,除传统的计算资源( 如CPU、RAM、 I/O等) 的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。分类 从数据操作的类型(读、写)分 读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响 写锁(排它锁):当前写操
2020-05-27 20:14:35 289
原创 Java JDK内置实用工具——监视工具、故障排除工具
监视工具JConsoleJConsole 图形用户界面是一种符合 Java 管理扩展 (JMX) 规范的监视工具。JConsole 使用 Java 虚拟机 (Java VM) 的广泛检测来提供有关在 Java 平台上运行的应用程序的性能和资源消耗的信息。使用方法本地使用jconsole命令:监视本地运行的所有 Java 应用程序,JConsole 可以连接到这些应用程序。使用jconsole PID命令:监视指定PID的Java应用程序。获取java PID的方法:通过任务管理
2020-05-26 10:41:39 316
原创 MySQL 基础知识——配置文件、逻辑架构、存储引擎
配置文件二进制日志log-bin用于主从复制错误日志log-error默认是关闭的,记录严重的警告和错误信息,每次启动和关闭的详细信息等。查询日志log默认关闭,记录查询的sql语句,如果开启会减低mysql的整体性能,因为记录日志也是需要消耗系统资源的数据文件frm文件存放表结构myd文件存放表数据myi文件存放表索引逻辑架构和其它数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存..
2020-05-15 20:56:30 277
原创 MySQL 入门及安装
简介概述MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。 MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而不是将所有数据放在一个大仓库内, 这样就增加了速度并提高了灵活 性。 Mysql是开源的,所以你不需要支付额外的费用。 Mysql支持大型的数据库。可以处理拥有上千万条记录的大型数据库。 MySQL使用标准的SQL数据语言形式。 Mysq可以允许于多个系统上,并且支持多种语言。这些编程语言包括C、C++、Python、 Java、 P
2020-05-15 20:52:48 194
原创 Git 教程看这一篇就够了
基础杂项Git基础概念* 客户端并不只是提取最新版本的文件快照,而是把代码仓库完整的镜像下来* git核心本质上是一个键值对数据库。可以向该数据库插入任意类型的内容,他会返回一个键值,通过该值可以在任意时刻再次检索该内容。区域&对象区域* 工作区 (沙箱环境 git不会管理 随便更改操作)git add* 暂存区 (记录文件的操作)git commit * 版本库 (最终的代码实现提交到这里 .git目录就是版本库)对象* Git对.
2020-05-15 20:11:22 284
原创 Redis 聊聊两种持久化机制
Redis的持久化有两种方式:RDB和AOFRDB(Redis database)。在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。Rdb 保存的是dump.rdb文件简单介绍Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持...
2020-05-05 08:24:07 296
转载 Redis 聊聊配置文件
配置文件是每个程序的重点文件,同时也是进行性能调整的重点。 Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定 pidfile /var/run/redis.pid 指定Re...
2020-05-05 08:20:03 270
原创 Redis 五大数据类型及常用API
五大数据类型简介String(字符串) string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。 string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象。 string类型是Redis最基本的数据类型,一个redisl中 字符串value最多可以是512...
2020-05-05 08:16:34 646
原创 Java 使用Redis实现秒杀功能
秒杀功能秒杀场景现在已经非常常见了,各种电商平台都有秒杀的产品,接下来我们模拟一个秒杀的项目,最终能够确保高并发下的线程安全。界面比较简单,但是功能基本实现。界面点击“秒杀点我”按钮后台就会输出秒杀结果。第一版使用Redis缓存数据库,使用一个key-value存储秒杀商品数量,使用set集合存储秒杀成功的用户。我们以商品0101为示例,设置商品的初始数量为200件。不...
2020-04-16 21:48:25 8076 6
原创 腾讯互娱web后端面经分享
1. 自我介绍这个环节每次面试基本都会遇到,是个加分项,注意扬长避短2.Linux基本命令ls、cd、pwd、chmod、move、cp、tar、ps、top等等3.进程比较卡,怎么定位查看分析进程的问题?top命令可以实时查看进程的运行情况以及消耗的资源pstack PID命令可以追踪程序运行的堆栈情况GDB可以对程序进程调试4. 进程和线程的区别? 进...
2020-04-10 11:06:27 701
原创 Java HashMap和HashTable的区别
UML结构图从这个图中我们可以看到:HashMap和HashTable都实现了Map接口,但是HashMap继承了AbstractMap,而HashTable继承了Dictionary类。其实HashMap还有一个内部类Node,Node实现了Map.Entry<K,V>,HashMap存储的每一个节点都是一个Node对象。区别HashMap 线程安全 允许...
2020-04-07 17:10:36 176 2
原创 NoSQL
NoSQL简介NoSql(NoSQL=Not Only SQL),意思是不仅仅是SQL,泛指非关系型数据库。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题,包括超大规模数据的存储。这些类型的数据存储不需要固定模式,无需多余操作就可以横向扩展。特点易扩展NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特征;数据之...
2020-04-07 14:47:13 138
原创 阿里菜鸟实习生面经分享
因为是实习生面试,而且是一面,所以问的问题也不算太难,面试时间也没有太长,只有半个小时,总共问了18个问题。1.问简历中的项目这个基本每场面试都会问的,一般都问最近做的项目,主要用到什么技术,功能是什么,遇到什么问题,怎么解决的,有什么亮点等等,只要项目确实是你自己亲自参与开发的,这个一般都没什么问题。2.Redis 实现并发的几种方式 设置主从节点 分布式锁3.Redis 相...
2020-04-03 10:03:03 939
原创 正则表达式 | 分类记忆法
正则正则表达式是编程人员日常工作的非常重要的一个工具,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。但是正则中的字符有很多,比较难记忆,这里我们对它进行分类,帮助我们更好的以及这些字符。功能检验数据的有效性 从文本中提取数据 文本内容替换分类元字符基础基础字符是最重要的,同时也是最常用的,需要注意的是基础字符都只能...
2020-04-02 09:02:10 1114
原创 leetcode 300 最长上升子序列
给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是[2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为O(n2) 。进阶: 你能将算法的时间复杂度降低到O(n log n) 吗?来源:力扣...
2020-03-26 18:16:42 158
原创 设计模式 适配器模式的写法及分析
设计模式分类 创建型模式:单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式。 结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter 模式)、状态模式、策略模式、职责链模式(责任链模式)。 适配器模式...
2020-03-25 20:01:05 246
原创 leetcode 面试题17.16按摩师
一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回总的分钟数。注意:本题相对原题稍作改动示例 1:输入: [1,2,3,1]输出: 4解释: 选择 1 号预约和 3 号预约,总时长 = 1 + 3 = 4。示例 2:输入: [...
2020-03-24 18:11:57 304
原创 Java 聊聊Spring框架AOP和IoC
Spring框架Spring 框架是当前主流的 Java 应用程序开发框架。Spring使Java编程对每个人来说都更快、更简单、更安全。Spring对速度、简单性和生产力的关注使它成为世界上最流行的Java框架。spring 的优点?降低了组件之间的耦合性 ,实现了软件各层之间的解耦 可以使用容易提供的众多服务,如事务管理,消息服务等 容器提供单例模式支持 容器提供...
2020-03-23 18:27:36 430
原创 leetcode 945 使数组唯一的最小增量
给定整数数组 A,每次move操作将会选择任意A[i],并将其递增1。返回使A中的每个值都是唯一的最少操作次数。示例 1:输入:[1,2,2]输出:1解释:经过一次 move 操作,数组将变为 [1, 2, 3]。示例 2:输入:[3,2,1,2,1,7]输出:6解释:经过 6 次 move 操作,数组将变为 [3, 4, 1, 2, 5, 7]。可...
2020-03-22 12:44:01 156
原创 leetcode 2 | 两数相加
给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -...
2020-03-17 22:11:33 105
原创 leetcode 658 | 找到 K 个最接近的元素
给定一个排序好的数组,两个整数 k 和 x,从数组中找到最靠近 x(两数之差最小)的 k 个数。返回的结果必须要是按升序排好的。如果有两个数与 x 的差值一样,优先选择数值较小的那个数。示例1:输入: [1,2,3,4,5], k=4, x=3输出: [1,2,3,4]示例 2:输入: [1,2,3,4,5], k=4, x=-1输出: [1,2,3,4]说明:...
2020-03-16 18:31:08 237
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人