小伙四面美团终拿下Offer,全靠刷了这1000道互联网高频面试笔记 我一铁哥们从去年到今年先后面试了 4次美团,外卖、订单、商旅面试了好几个部门,终于在今年年初成功拿下offer,总结下来各部门面试的大体思路基本都一致。比如: JVM 参数配置、常用调试工具、分区、类加载,还会问你有需要线上的调试问题吗?遇到死循环 CPU 飙升怎么解决?Java 并发包常用工具用法和原理、会配合集合类一起考,对了还会有 volatile、CAS 原理等。M...
小伙四面美团终拿下Offer,全靠刷了这1000道互联网高频面试笔记 我一铁哥们从去年到今年先后面试了 4次美团,外卖、订单、商旅面试了好几个部门,终于在今年年初成功拿下offer,总结下来各部门面试的大体思路基本都一致。比如: JVM 参数配置、常用调试工具、分区、类加载,还会问你有需要线上的调试问题吗?遇到死循环 CPU 飙升怎么解决?Java 并发包常用工具用法和原理、会配合集合类一起考,对了还会有 volatile、CAS 原理等。M...
为什么用分布式锁? 系统 A 是一个电商系统,目前是一台机器部署,系统中有一个用户下订单的接口,但是用户下订单之前一定要去检查一下库存,确保库存足够了才会给用户下单。 由于系统有一定的并发,所以会预先将商品的库存保存在 Redis 中,用户下单的时候会更新 Redis 的库存。 此时系统架构如下:但是这样一来会产生一个问题:假如某个时刻,Redis 里面的某个商品库存为 1。 此时两个请求同时到来,其中一个请求执行到上图的第 ...
可靠的分布式锁,要具备以下几个特性 1.互斥性。在任意时刻,只有一个客户端能持有锁 2.不会发生死锁,即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。 3.具有容错性。只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。 4.解铃还须系铃人。加速和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了。 5.锁不能自己失效。正常执行程序过程中,锁不能因为某些原因失效。 加锁流程...
分布式为什么使用Redis,以及他的好处 1.为什么我们要使用Redis 在项目中使用Redis,主要考虑的就是两个方面,一个是性能,还有一个是高并发,如果只是为了分布式锁这些其他的功能,还有其他中间件代替,并非必须使用Redis,比如常见的Zookpeer。 性能: 如下图所示,我们在碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓存。这样,后面的请求就回去缓存中读取,使请求快速响应。 特别是在秒杀系统中,...
一,Redis Cluster 分布式集概述 1)Redis集群是一个可以在多个Redis节点之间进行数据共享的设施(installation)。 2)Redis集群不支持那些需要同时处理多个键的Redis命令,因为执行这些命令需要在多个Redis节点之间移动数据,并且在高负载的情况下,这些命令将降低Redis集群的性能,并导致不可预测的行为。 3)Redis集群通过分区(partition)来提供一定程度的可用性(availability):即使集群中有一部分节点失效或者无法进行通...
github地址 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>redisIncrTest</groupId><artifactId>redisIncr</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>redisIncrTest</name><...
1、基础知识: 通过HttpServletRequest获取对方请求的IP地址 request.getRemoteAddr()直接请求到服务器,获取对方的IP地址 request.getHeader("")通过nginx负载均衡访问的服务器,获取对方的IP地址。 @RequestMapping("{skuId}.html") public String item(@PathVariable String skuId, ModelMap modelMap, HttpServletRequest request){String IP = request.getRemoteAddr(); //直接请求到服务器,获取对方的IP地址//request.ge...
前言: 项目需求,搞了搞 实现了锁的重入参考了别人的博文实现了AOP注解形式的锁、统一配置 参考博文地址: https://www.cnblogs.com/lijiasnong/p/9952494.html这边看了下比较主流几个分布式锁的应用,最终选择的redis 原因是: 1、懒(服务器已有redis做缓存,不想再去安装zuukeeper) 2、评估认为redis的分布式锁已能满足当下应用 正文 - 摘录核心代码: RedisReentrantLockimport org.springframework.beans.factory.annotatio...
1、分布式锁的目的 分布式锁能够实现以下两种功能 a、提高效率,避免重复计算。比如多节点同时执行一个批量任务。如果一个节点已经在执行某个任务,其他节点就没必要重复执行这个任务。这时允许存在少量的重复计算,也就是说允许存在偶尔的失败。 b、保证正确性。比如两个客户购买同一件商品,如果一个客户购买了,其他客户就不能购买。这种情况对分布式锁的要求很高,如果重复计算,会对业务的正确性产生影响。也就是不允许失败。...
Hydra 是一个轻量级的 NodeJS 库,用于构建分布式计算应用程序,比如微服务。我们对轻量级的定义是:轻处理外部复杂性和基础设施依赖 —— 而不是有限的轻处理。 Hydra 声称对基础设施的依赖很轻,这是因为它唯一的外部依赖是 Redis。 Hydra 利用 Redis 丰富的数据结构来实现重要的微服务所需的功能。 如 presence(在线状态)、service discovery (服务发现)、load balancing (负载平衡)、messaging(消息传递)、queuing(队...
前言 我的京东价格监控网站需要不间断爬取京东商品页面,爬虫模块我采用了Scrapy+selenium+Headless Chrome的方式进行商品信息的采集。 由于最近爬虫用的服务器到期,需要换到新服务器重新部署,所以干脆把整个模块封装入Docker,以便后续能够方便快速的进行爬虫的部署。同时,由于我的Scrapy整合了redis,能够支持分布式爬取,Docker化后也更方便进行分布式的拓展。 任务需求将爬虫代码打包为Docker镜像 在全新的服务器上安装Dock...
作者的话 对Python爬虫如何实现大批量爬取感兴趣的读者可以看下scrapy爬虫框架,并且使用本文的scrapy-redis将你的爬虫升级为分布式爬虫。 前言 阅读本文章,您需要:了解scrapy爬虫框架,知道scrapy的基本使用,最好已经有了可以单机运行的scrapy爬虫。了解scrapy-redis可以用来干嘛。已经尝试了一些反反爬措施后仍然觉得爬取效率太低。已经看了无数scrapy-redis文章,却和我一样不得要领。(自己太笨)已经看了无数scrapy-redis文...
本文是使用 golang 实现 redis 系列的第八篇, 将介绍如何在分布式缓存中使用 Try-Commit-Catch 方式来解决分布式一致性问题。 godis 集群的源码在Github:Godis/cluster 在上一篇文章中我们使用一致性 hash 算法将缓存中的 key 分散到不同的服务器节点中,从而实现了分布式缓存。随之而来的问题是:一条指令(比如 MSET)可能需要多个节点同时执行,可能有些节点成功而另一部分节点失败。 对于使用者而言这种部分成功部分失败的情况非...
1、为什么使用redis 分析:博主觉得在项目中使用redis,主要是从两个角度去考虑:性能和并发。当然,redis还具备可以做分布式锁等其他功能,但是如果只是为了分布式锁这些其他功能,完全还有其他中间件(如zookpeer等)代替,并不是非要使用redis。因此,这个问题主要从性能和并发两个角度去答。 回答:如下所示,分为两点 (一)性能 如下图所示,我们在碰到需要执行耗时特别久,且结果不频繁变动的SQL,就特别适合将运行结果放入缓...