mac M1上Python2.7安装pip报SyntaxError

解法 步骤1 python --version 确认系统安装python的版本号 步骤2 查找对应版本的官方文档,获取 https://docs.python.org/release/2.7.16/installing/index.html?highlight=pip 步骤3 根据文档,执行命令 sudo python -m ensurepip --default-pip 搞定


MQ消息队列三个典型应用场景

MQ消息队列三个典型的应用场景 1. 异步处理 使用前:注册--->发邮件--->发短信 如果连续处理,每个动作为50ms,那么一共花费150ms 使用后:注册--->MQ队列 MQ队列-->发邮件 (异步) MQ队列--->发短信 (异步) 用MQ队列服务缩短为55ms,注册50ms,写入MQ 5ms 2. 应用接耦 使用前:订单系统--->库存系统 下单后减去库存,订单系统会依赖库存 More


redisson分布式锁原理学习笔记整理

整理完毕的笔记,收获很大 视频 https://www.bilibili.com/video/av667586995/ 提交订单 1. Redis里查库存-库存充足-扣减成功-更新库存 并发测试三单,从50变成49(其实为47),库存会超卖 2. synchroinzed(productID) 上锁 单机可以,多机器就拉倒了 synchroinzed JVM级别的锁 3. 分布式锁 锁标记productID,多方机器共享锁标记 More


Java中wait方法和sleep的不同之处

章节1:Java中wait方法和sleep的不同之处 区别1: a.wait来自Object方法 b.sleep来自Thread方法 区别2: a.sleep 让当前方法休眠1000毫秒,休眠后自动醒来,不一定要是锁对象 b.wait 传入毫秒参数,效果和sleep方法相似,但是比较麻烦,wait方法必须由锁对象调用 锁对象必须存放在同步当中 (不建议wait(1000) )建议wait() More


电商秒杀系统设计

秒杀活动对稀缺或者特价的商品进行定时定量售卖,吸引成大量的消费者进行抢购,但又只有少部分消费者可以下单成功。因此,秒杀活动将在较短时间内产生比平时大数十倍,上百倍的页面访问流量和下单请求流量。 秒杀活动可以分为3个阶段: 秒杀前:用户不断刷新商品详情页,页面请求达到瞬时峰值。 秒杀开始:用户点击秒杀按钮,下单请求达到瞬时峰 More


redis的分布式锁实现

总结: 单机互斥锁 1. SET KEY Value PX milliseconds NX SET 商品ID 线程ID PX 30000 NX 1.PX 防止锁过期,NX互斥 2.线程ID 记录下来,作为唯一值 3.释放锁验证value,不能让别人的线程,解了别人的锁。 2. 集群锁 RedLock 假设集群5个节点 P1.获取当前Unix时间,毫秒为单位 P2.依次从5台机器,相同的KEY 和 唯一性的Value请求锁,为每 More


REDIS缓存穿透,缓存击穿,缓存雪崩

REDIS缓存穿透,缓存击穿,缓存雪崩原因+解决方案 缓存穿透:程序绕过缓存,不停的查询数据库 key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会到数据源,从而可能压垮数据源。比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。 举例子:查询id=-1 这条数据库不 More


订单过期30分钟,不支付自动取消方案

订单过期30分钟,不支付自动取消方案 1. 扫描数据库 最简单,粗暴的办法。开个任务,每3分钟扫描一次数据库 select orderid from table where .... 服务器开启crontab 定时扫描 优点:容易实现,支持集群服务 缺点: 1. 服务器消耗大 2. 存在延迟,并不是精确的3分钟 3. 如果订单量很大,比如1000万条没有付款,数据库压力很大 2. JDK延迟 More


JVM运行基础原理

1 什么是JVM 1.1 定义: JVM:Java Virtual Machine 直接翻译java虚拟机,就是java虚拟了一个机器,安装在你的电脑上,java跨平台属性全靠JVM Java Runtime Environment (JRE) is the implementation of the Java Virtual Machine (JVM). JVM analyze the bytecode, interprets it, and execute the same bytecode to display the output. JRE是一个JVM的 More


JAVA 堆栈存储运行例子

寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。) 堆:存放所有new出来的对象。 静态域:存放静态成员(static定义的) 常量池:存放字符串常量和基本类型常量(public More