自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(659)
  • 收藏
  • 关注

原创 人一生平均900个月

一、时间消耗表 算上每天中午休息,老年和婴儿的时间取平均,75年共计:8.5*365*75/24/30=323个月,27年。刷牙洗脸+泡脚洗澡+换衣服等等,每天1小时,35.5个月,3 年。每天1小时,1*365*70/24/30=35.5个月,3年。每天1.5小时,4.4年。上学,从小学到研究生共计20年,每学期21周,8*5*21*2*20/24/30=46.7个月,4年...

2018-11-01 12:37:34 2057

原创 如果你只想更新一条记录,请在在update语句末尾加个 limit 1

如果你只想更新一条记录,为了安全,请在在update语句末尾加个 limit 1

2023-03-03 14:02:06 1248 1

原创 @NotEmpty、@NotBlank、@NotNull 区别和使用

@NotEmpty、@NotBlank、@NotNull 区别和使用

2023-03-02 09:32:13 340

原创 算法题:开根号

算法题

2022-09-21 23:44:09 543

原创 JAVA中如何调用别人发布的webservice

参考:WebService入门详解_诺浅的博客-CSDN博客_webservice

2022-06-02 17:40:17 261 1

原创 linux命令3剑客(grep、sed、awk)

在操作linux过程中,当熟练掌握了grep、sed、awk这几个命令,可以极大的提升运维效率。==接下来慢慢实践

2022-06-02 17:31:22 184

原创 Linux下使用xargs优雅的kill掉一批相关线程

xargs

2022-06-02 17:28:05 313

原创 023 MySQL索引优化口诀-索引失效的常见情况

索引优化总结口诀:全值匹配我最爱,最左前缀要遵守;带头大哥不能死,中间兄弟不能断;索引列上少计算,范围之后全失效;like 百分写最右, 覆盖索引不写 * ;不等控制还有or,索引失效要少用;var引号不能丢, sql 高级也不难;1、全值匹配 :对索引中所有列都指定具体值。该情况下,索引生效,执行效率高2、最左前缀:又叫做最左匹配原则,最左匹配原则是和MySQL的InnoDB存储引擎的B+Tree的数据结构紧密关联的,可以去看这几篇博客:第1篇:MySQL的InnoDB存储引擎中.

2022-05-23 17:02:03 506

原创 Hive中的窗口函数都忘记了,还好意思说自己搞过大数据?

官网位置:Hive窗口函数-官网地址

2022-04-20 22:18:41 1813

原创 004 ConcurrentHashMap 和 Collections.synchronizedMap(Map<K,V> m)的比较

写在前面的话,最好还是去看源码和源码上面的注释。1、ConcurrentHashMap的源码里面有个重要的:concurrencyLevel就是并发级别/** * A hash table supporting full concurrency of retrievals and * adjustable expected concurrency for updates. This class obeys the * same functional specification as {@

2022-04-18 13:57:07 248

转载 谈谈Java内存模型,你是不是开始说“Java 运行时内存区域”了?

我们常说的JVM内存模式指的是JVM的内存分区;而Java内存模式是一种虚拟机规范。Java虚拟机规范中定义了Java内存模型(Java Memory Model,JMM),用于屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发效果,JMM规范了Java虚拟机与计算机内存是如何协同工作的:规定了一个线程如何和何时可以看到由其他线程修改过后的共享变量的值,以及在必须时如何同步的访问共享变量。原始的Java内存模型存在一些不足,因此Java内存模型在Jav...

2022-04-16 18:00:03 112

原创 014 到官网看Redis分布式锁的实现原理

读读Redis的官网,学第一手的资料:Redid官方文档地址Redis中国用户组:Redis中国用户组网址或者看看书《Redis 深度历险: 核心原理和应用实践》1、Redis官网上关于Redission的描述2、Redisson的GitHub上的说明进去之后内容很多,我们主要看分布式锁的部分:8.4. 红锁(RedLock)基于Redis的Redisson红锁RedissonRedLock对象实现了Redlock介绍的加锁算法。该对象也可以用来将多个RLock对象.

2022-04-16 05:42:37 719

原创 01 Dubbo框架设计

写在前面的话,虽然Dubbo已经发布了3.X的版本,但是很多公司的一些项目仍然使用Dubbo2.x的版本,所以这里我们看的是Dubbo2.x的版本。逛逛Dubbo的官网:Dubbo2.x的框架设计很多的时候面试官可能会问:假如让你设计一个RPC框架,你该如何设计,谈谈你的思路。对于这样的问题,就是些原理的东西,可以参考Dubbo的整体设计图图例说明:图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口,位于中轴线上的为双方都用到的接口。 图中从下至.

2022-04-15 13:31:39 101

原创 02 聊一聊已经停更的Ribbon

去Spring Cloud官网逛逛吧:Spring Cloud官网Ribbon停更了。。。目前为止,Ribbon已经停更,但是仍然有很多公司使用。负载均衡,它分为集中式负载均衡与进程内负载均衡。1、集中式负载均衡即在服务的消费方和提供方之间使用独立的负载均衡设施,可以是硬件,如F5 ,也可以是软件如nginx,由该设施负责把访问请求通过某种策略转发至服务的提供方。2、进程内负载均衡将负载均衡逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出.

2022-04-14 14:21:53 2513

转载 013 Redis单机、主从、哨兵、集群

话说有一名意大利程序员,在 2004 年到 2006 年间主要做嵌入式工作,之后接触了 Web,2007 年和朋友共同创建了一个网站,并为了解决这个网站的负载问题(为了避免 MySQL 的低性能),于是亲自定做一个数据库,并于 2009 年开发完成,这个就是 Redis。这个意大利程序员就是 Salvatore Sanfilippo 江湖人称 Redis 之父,大家更习惯称呼他 Antirez。     Redis 技术越来越火爆,其超高的性能,简洁轻量的设计,易上手,分布式架构的支持,...

2022-04-14 10:39:12 295

转载 001 Kafka如何保证消息的顺序性

kafka的Consumer均衡算法在说顺序性这个问题之前,我们要先搞明白的是消费者是怎么消费分区上的数据。我们这里不详细讨论该算法,这不是本文的重点。简单的说:kafka的消费组的组员最多增加到和partition数量一致,超过的组员只会占用资源,而不起作用;kafka的partition的个数一定要大于消费组组员的个数,并且partition的个数对于消费组组员取模一定要为0,不然有些消费者会占用资源却不起作用;我们一般将消费组里组员的个数设置为和parti

2022-04-13 17:47:31 1645 1

原创 001 替代Eureka、Feign、Ribbon、Zuul、Hystrix、Config的解决方案

1、Spring Cloud官网:spring-cloud官网由于Eureka等闭源问题,不得不思考替代方案了。1、服务注册中心:Eureka:官方停止更新,并且已经有更好的替代产品可以使用。Nacos:来自于SpringCloudAlibaba,在企业中经过了百万级注册考验的,不但可以完美替换 Eureka,还能做其他组件的替换,所以强烈建议使用,是学习的重点。Consul:go语言开发的,也是一个优秀的服务注册框架,但是使用量较少,风头都被Nacos抢了。Zook...

2022-04-13 12:28:53 1418

原创 02 Nginx是如何做高可用集群的?

淘宝服务平台核心人员出品:Nginx开发从入门到精通Nginx的官方网站:Nginx的英文官方网站另外一篇还不错的博客:nginx配置高可用集群Keepalived是一款由C编写的软件,一般解决负载均衡器的高可用性问题,提供了负载均衡、健康检查和高可用的功能,高可用功能是由VRRP协议来实现的。...

2022-04-12 16:36:17 2763

翻译 01 Nginx是如何做限流的

淘宝服务平台核心人员出品:Nginx开发从入门到精通Nginx的官方网站:Nginx的英文官方网站还有一篇好的博文:Nginx限流模块初探1、ngx_http_limit_conn_module 先看看这个模块The ngx_http_limit_conn_module module is used to limit the number of connections per the defined key, in particular, the number of connections

2022-04-12 16:21:19 104

原创 012 Redis 的并发竞争问题是什么?如何解决这个问题(分布式锁)?了解 Redis 事务的 CAS 方案吗(WATCH)?

读读Redis的官网,学第一手的资料:Redid官方文档地址或者看看书《Redis 深度历险: 核心原理和应用实践》1、Redis 的并发竞争问题是什么?看到这个标题,有人可能会有疑问了,redis不是单线程的吗,怎么还会有并发竞争问题?其实是这样的,redis并发竞争是多个客户端并发写一个key,本来应该是先到的请求先写key,但可能由于网络环境差异,先发起的请求后到了,导致value最终被后发起的请求修改,最终数据错乱了。或者是多个客户端同时获取一个key,修改值后再写回去,只要

2022-04-11 10:18:17 2178 1

原创 011 如何保证缓存与数据库的双写一致性?先删缓存后更新数据库的数据不一致问题的处理

读读Redis的官网,学第一手的资料:Redid官方文档地址或者看看书《Redis 深度历险: 核心原理和应用实践》1、剖析一般来说,如果允许缓存可以稍微的跟数据库偶尔有不一致的情况,也就是说如果你的系统不是严格要求 “缓存+数据库” 必须保持一致性的话,最好不要做这个方案,即:读请求和写请求串行化,串到一个内存队列里去。串行化可以保证一定不会出现不一致的情况,但是它也会导致系统的吞吐量大幅度降低,用比正常情况下多几倍的机器去支撑线上的一个请求。2、Cache Aside Pattern

2022-04-09 11:06:35 295

转载 010 如何保证缓存与数据库的双写一致性?双写的四种情况

为了解决高并发的流量问题,通常我们都会添加缓存这一层,来扛住大量的读请求。虽然缓存能够帮数据库分担大量的读请求,但是也伴随着一个问题就是缓存中的数据怎么跟数据库中的数据保持一致,又是一个新问题数据实时性等级这里我们需要保证缓存和数据库的数据一致性,也可以根据数据所要求的实时性等级去评估,并不是所有的数据我们都需要保证强一致性,这里根据数据要求实时性不同大致分为2个等级:强一致性数据,弱一致性数据强一致性数据:比如一些支付数据,金额数据,涉及到钱的数据对实时性要求就比较...

2022-04-08 17:35:21 772

原创 009 谈谈Redis的雪崩、穿透和击穿,以及出现这些情况后的应对方案

读读Redis的官网,学第一手的资料:Redid官方文档地址或者看看书《Redis 深度历险: 核心原理和应用实践》

2022-04-08 10:31:39 181

原创 008 Redis 的持久化有哪几种方式?不同的持久化机制都有什么优缺点?持久化机制具体底层是如何实现的?

读读Redis的官网,学第一手的资料:Redid官方文档地址或者看看书《Redis 深度历险: 核心原理和应用实践》1、RDB、AOF(Redis官网中关于持久化的解释)Redis persistence | RedisHow Redis writes data to disk (append-only files, snapshots, etc.)Persistence refers to the writing of data to durable storage, such as

2022-04-06 16:34:38 1051

原创 007 Redis内存淘汰机制,引出LRU算法问题,简述LRU在常用框架中的使用

读读Redis的官网,学第一手的资料:Redid官方文档地址或者看看书《Redis 深度历险: 核心原理和应用实践》1、之前整理过2篇关于LRU的博客024 Java实现LRU(Least recently used,最近最少使用)算法 之 LinkedHashMap022 LRU算法用在哪些地方,LRU算法如何实现2、Redis官网中关于LRU的描述Approximated LRU algorithmRedis LRU algorithm is not an exact

2022-04-06 09:57:14 2232

原创 006 Redis的过期策略有哪些?内存淘汰机制有哪些?

读读Redis的官网,学第一手的资料:Redid官方文档地址或者看看书《Redis 深度历险: 核心原理和应用实践》1、redis 过期策略是:定期删除+惰性删除所谓定期删除,指的是 redis 默认是每隔 100ms 就随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除。假设 redis 里放了 10w 个 key,都设置了过期时间,你每隔几百毫秒,就检查 10w 个 key,那 redis 基 本上就死了,cpu 负载会很高的,消耗在你的检查过期 key 上了。注意,

2022-04-02 18:00:08 112

原创 005 Redis 都有哪些数据类型?分别在哪些场景下使用比较合适?

读读Redis的官网,学第一手的资料:Redid官方文档地址或者看看书《Redis 深度历险: 核心原理和应用实践》1、Redis官网中介绍各种数据类型 官方地址:Redis data typesRedis is not a plain key-value store, it is actually a data structures server, supporting different kinds of values. What this means is that, while i.

2022-04-02 17:47:46 772

原创 004 select、poll和epoll最简单的解释

从事服务端开发,少不了要接触网络编程。epoll 作为 Linux 下高性能网络服务器的必备技术至关重要,nginx、Redis、Skynet 和大部分游戏服务器都使用到这一多路复用技术。epoll 很重要,但是 epoll 与 select 的区别是什么呢?epoll 高效的原因是什么?网上虽然也有不少讲解 epoll 的文章,但要么是过于浅显,或者陷入源码解析,很少能有通俗易懂的。笔者于是决定编写此文,让缺乏专业背景知识的读者也能够明白 epoll 的原理。文章核心思想是:要让读者清晰明白

2022-04-02 13:48:39 299

原创 003 Redis 的线程模型是什么?为什么Redis单线程却能支撑高并发?

读读Redis的官网,学第一手的资料:Redid官方文档地址或者看看书《Redis 深度历险: 核心原理和应用实践》1、Redis的线程模型( Redis 的网络 IO 和键值对读写是由一个线程来完成)redis 内部使用文件事件处理器 file event handler,这个文件事件处理器是单线程的,所以 redis 才 叫做单线程的模型。它采用 IO 多路复用机制同时监听多个 socket,将产生事件的 socket 压入内存队列 中,事件分派器根据 socket 上的事件类型来选择对应的

2022-04-02 10:25:27 1195

原创 002 Redis 和 memcached 有什么区别?

读读Redis的官网,学第一手的资料:Redid官方文档地址或者看看书《Redis 深度历险: 核心原理和应用实践》1、Redis 支持复杂的数据结构Redis 相比 memcached 来说,拥有更多的数据结构,能支持更丰富的数据操作。如果需要缓存能够支持更 复杂的结构和操作, redis 会是不错的选择。Redis provides data structures such as strings, hashes, lists, sets, sorted sets with range q

2022-04-01 18:02:25 733

原创 001 为什么要用缓存?缓存使用不当会造成什么后果?

读读Redis的官网,学第一手的资料:Redid官方文档地址或者看看书《Redis 深度历险: 核心原理和应用实践》1、用缓存,主要有两个用途,高性能和高并发。1.1 高性能例如一个查询请求,到MySQL数据库中查询花了100ms。现在把数据扔缓存里,一个 key 对应一个 value,下次再有人查,别走 MySQL 耗费 100ms 了,直接从缓存里,通过一个 key 查出来一个 value,2ms 搞定。性能(速度)提升 50 倍。1.2 高并发首先,MySQL 单机支撑到 2

2022-04-01 17:23:48 603

原创 022 由MySQL的Buffer Pool想到的LRU算法用在哪些地方,LRU算法如何实现

1.什么是LRU算法?LRU是一种缓存淘汰机制策略。LRU缓存淘汰算法就是一种常用策略。LRU的全称是Least Recently Used,也就是说我们认为最近使用过的数据应该是有用的,很久都没用过的数据应该是无用的,缓存满了就优先删除那些很久没有用过的数据。计算机的缓存容量有限,如果缓存满了就要删除一些内容,给新的内容腾位置。但是要删除哪些内容呢?我们肯定希望删掉那些没有用的缓存,而把有用的数据继续留在缓存中,方便之后继续使用。那么,什么样的数据我们可以判定为有用的数据呢?2、 LRU用

2022-04-01 10:54:56 326

转载 021 MySQL 的 InnoDB 存储引擎怎么设计的?从Buffer Pool、Change Buffer、Adaptive Hash Index、Log Buffer和Doublewrite说

学软件技术,读第一手资料,去官方网站:MySQL 5.7参考手册也可以看看比较经典的书籍,如《高性能MySQL》等上一讲给大家介绍了 MySQL 中的两个成员 binlog 和 redo log。然而,这只是 MySQL 家族里的两个小喽啰,Mysql 可以做到高性能高可靠,靠的绝对不只有他们俩。MySQL 里还有什么其他成员呢?对于 MySQL,要记住、或者要放在你随时可以找到的地方的两张图,一张是 MySQL 架构图,另一张则是 InnoDB 架构图:MySQL 架构in

2022-03-31 17:05:59 184

转载 020 MySQL中Redo Log、The Binary Log和2阶段提交

假设你执行了一条 sql 语句:update user set age = 18 where user_id = 345981MySQL 会直接去磁盘修改数据吗?明显不会,磁盘IO太慢了,如果每个请求过来 MySQL 都要写磁盘,磁盘肯定扛不住。那就写内存?把数据从磁盘load到内存,然后修改内存里的数据。也不行,万一掉电了,内存就没了,数据就再也找不回来了。这其实是很多中间件都会遇到的问题,一个中间件做的再怎么分布式,怎么高可靠,都会遇到这个问题:数据来了,写磁盘,还是写内存

2022-03-31 11:12:23 192

原创 019 MySQL索引下推(高于5.6的版本,对索引中包含的字段先进行过滤,减少回表次数,提升性能)

1、回表操作对于数据库来说,只要涉及到索引,必然绕不过去回表操作。这是理解索引下推的基础。说到回表,我们需要从索引开始说起。这里只是简单讲下主键索引与普通索引,目的是让大家对回表操作有个认识。这里我们只以 Innodb 存储引擎作为讲解对象。1.1 主键索引主键索引在底层的数据存储是通过 B+ 树来实现的。简单来说,就是除叶子节之外的其他节点都存储的是主键值。而叶子节点上存储的是整行的数据。大体结构如下图所示1.2 非主键索引除了主键索引外,其它的索引都被...

2022-03-29 14:56:04 119

原创 018 通俗易懂解释MySQL的回表

讲到MySQL中的回表就不得不提主键索引和非主键索引。1、对于下面这个表,ID是主键(主键索引,或称为聚簇索引),k字段上创建非主键索引(二级索引)2、主键索引和非主键索引的数据结构示意图如下其中R代表一整行的值。从图中不难看出,主键索引和非主键索引的区别是:非主键索引的叶子节点存放的是主键的值,而主键索引的叶子节点存放的是整行数据,其中非主键索引也被称为二级索引,而主键索引也被称为聚簇索引。根据这两种结构我们来进行下查询,看看他们在查询上有什么区别。1、如果查询语句是 se

2022-03-29 11:13:22 1040

原创 017 MySQL中为什么选择B+Tree这种结构存储索引,从操作系统的磁盘块(block)和InnoDB存储引擎的页(Page)的概念说起

1、操作系统的磁盘块(block)操作系统从磁盘读取数据到内存是以磁盘块(block)为基本单位的,位于同一个磁盘块中的数据会被一次性读取出来,而不是需要什么取什么。即使只需要一个字节,磁盘也会从这个位置开始,顺序向后读取一定长度的数据放入内存。这样做的理论依据是计算机科学中著名的局部性原理:当一个数据被用到时,其附近的数据也通常会马上被使用。预读的长度一般为页(page)的整倍数。页是计算机管理存储器的逻辑块,硬件及操作系统往往将主存和磁盘存储区分割为连续的大小相等的块,每个存储块称为一页(在许多

2022-03-28 18:02:13 1611

原创 016 MySQL中B+Tree,从二叉树、平衡二叉树、B-Tree讲起

MySQL中的索引,以 B+Tree 索引用得最多,B+Tree 索引是 B+Tree 在数据库的一种实现。B+Tree 中的B代表平衡(balance),而不是二叉(binary),因为 B+Tree 是从 “平衡二叉树” 再经过 “B树(B-Tree)” 一步步演化而来的。在讲 B+Tree 之前必须先了解二叉树、平衡二叉树(AVL Tree)和平衡多路查找树(B-Tree)。(1)二叉树(Binary Search Trees,二叉查找树);(2)平衡二叉树(或者叫AVL Tree),是1

2022-03-26 23:47:41 2868

原创 015 MySQL 中 limit 分页偏移量过大导致查询慢的优化

学软件技术,读第一手资料,去官方网站:MySQL 5.7参考手册也可以看看比较经典的书籍,如《高性能MySQL》等1、简单回顾MySQL中的 limit 的用法假如你的需求是:从第几条开始总共返回多少条。这时候你将会用到MySQL中的limit。语法:SELECT * FROM table LIMIT [offset,] rowsmysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15//为了检索从某一个偏移量到记录集的结束所有

2022-03-25 17:28:50 2370

原创 014 MySQL官网 术语汇编/难词汇编(glossary)中的B+Tree解释

学软件技术,读第一手资料,去官方网站:MySQL 5.7参考手册也可以看看比较经典的书籍,如《高性能MySQL》等B+Tree,直接看官网,点我B-tree(从技术上来说,实际上是B+Tree,切记!!!) A tree data structure that is popular for use in database indexes. The structure is kept sorted at all times, enabling fast lookup for exac

2022-03-24 17:36:37 707

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除