使用Redis位图实现12306分段购票

系列文章目录


文章目录

  • 系列文章目录
  • 前言


前言

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。
在这里插入图片描述


很多编程语言都有位运算符,Java语言也不例外。在Java语言中,提供了7种位运算符,分别是按位与(&)、按位或(|)、按位异或(^)、取反(~)、左移(<<)、带符号右移(>>)和无符号右移(>>>)。

这些运算符当中,仅有~是单目运算符,其他运算符均为双目运算符。

在讲解这些运算符的使用之前,必须了解一个常识,那就是:位运算符是对long、int、short、byte和char这5种类型的数据进行运算的,我们不能对double、float和boolean进行位运算操作。
在这里插入图片描述
如果你要理解本文章的理论和逻辑,可以参考,有人写了我就不啰嗦了

全网首发:12306抢票算法大曝光?(十张图搞定)

https://segmentfault.com/a/1190000023534009

如果你对Redis位图不理解,可以参考

使用Bitmaps位图实现Redis签到

https://www.javacui.com/DB/703.html

其他知识内容可以参考

https://www.javacui.com/index.php?keyword=redis

如果你已经了解运算符和Redis位图,那么按照上面文章说法,逻辑其实很简单,就是把所有座位初始化为位图,当你购买车站A到车站B的票时,把中间车站的位图进行计算,如果最终计算有票,则为有票。

当然这边只是在技术上对于这个逻辑进行了实现,12306实际的逻辑的话,大家都懂的,天花板。

相关逻辑的解释,都在注释里面了,直接运行一下即可理解,上代码:

package com.example.springboot;
 
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.connection.BitFieldSubCommands;
import org.springframework.data.redis.core.RedisTemplate;
 
import java.util.ArrayList;
import java.util.List;
 
/**
 * 12306分段购票模拟
 */
@SpringBootTest
public class A12306 {
   
    @Autowired
    private RedisTemplate redisTemplate;
    private final static int cz = 5; // 几个站点
    private final static int zw = 5; // 几个坐位
 
    @Test
    public void test1() {
   
        init();
 
        // 购买 2 张 1-3的票,此时有票
        int from = 1, to = 3;
        for (int i = 0; i < 2; i++) {
   
            qp(from, to);
        }
 
        from = 2;
        to = 4;
        // 购买 2 张 2-4的票,此时有票
        for (int i = 0; i < 2; i++) {
   
            qp(from, to);
        }
 
        from = 1;
        to = 5;
        // 购买 2 张 1-5的票,此时有 1 张票
        for (int i = 0; i < 2; i++) {
   
            qp(from, to);
        }
 
        from = 1;
        to = 3;
        // 购买 1 张 1-3的票,此时 无票
        qp(from, to);
    }
 
    public void qp(int from, int to

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/491816.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

通信原理QPSK OQPSK MSK 信道编码 GMSK

通信原理 通信QPSKOQPSKMSK信道编码GMSK需要的联系qq&#xff1a;2329738917 通信 QPSK OQPSK MSK 信道编码 GMSK 需要的联系qq&#xff1a;2329738917

小黑开始了芙蓉路岔气恰巧看到芙蓉脱单,假期东方时尚的学车生活,跟尚香骑车去北大微电子学院,在雪天考科目二的leetcode之旅: 43. 字符串相乘

小黑代码1:暴力转换 class Solution:def multiply(self, num1: str, num2: str) -> str:num1 int(num1)num2 int(num2)return str(num1 * num2)小黑代码2:转化为多位数x一位数 class Solution:def multiply(self, num1: str, num2: str) -> str:# 定义多位数x一位数的…

Github简单入门教程

文章目录 使用前提查看项目内容查看项目介绍打包下载项目查看项目作者项目搜索复制项目分支项目创建向项目中添加文件对项目进行评论 使用前提 想要使用Github&#xff0c;首先需要学会科学上网&#xff0c;不然用国内的网在正规情况下是无法访问Github滴~ 查看项目内容 打开…

解决错误LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to

react native pod第三方包或者git clone的时候遇到 OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443两种解决方案 方法一 修改计算机网络配置 由于使用 IPv6 的原因&#xff0c;可能会导致这一问题的出现 系统在解析hostname时使用了ipv6 可以配…

联合体类型

结构体我们已经介绍在 自定义类型&#xff1a;结构体 中&#xff0c;今天我们来介绍另一种 自定义类型&#xff1a;联合体 目录 1.联合体的声明 2.联合体的特点 3.联合体大小的计算 4.联合体的应用 5.联合体的一个练习 1.联合体的声明 联合体与结构体类似&#xff0c;它也…

webpack练习之手写loader

手写一个style-loader来把样式文件插入head里面&#xff0c;准备工作 vue webpack就自己弄了&#xff0c;webpack的一些配置也自己配置好 一、创建index.css文件 .box{width: 100px;height: 100px;background-color: red; }然后在vue的main.js文件中引入它 二、创建自定义l…

深度学习知识【CSPNet网络详解】

CSPNet的贡献 1.增强了CNN的学习能力&#xff0c;能够在轻量化的同时保持准确性。 2.降低计算瓶颈。 3.降低内存成本。 CSPNet介绍 在神经网络推理过程中计算量过高的问题是由于网络优化中的梯度信息重复导致的。CSPNet通过将梯度的变化从头到尾地集成到特征图中&#xff0c…

2024水业大会|水会|水务投资与EOD模式论坛

论坛召集人&#xff1a;邹权 上海大学研究员 丁贞玉 生态环境部环境规划院研究员(拟请) EOD模式&#xff1a;生态环境导向的开发模式 《生态环保金融支持项目储备库入库指南&#xff08;试行&#xff09;》文件精神与上述逻辑并不完全一致。《指南》提出&#xff0c;EOD模…

阿里云服务器 -- 为网站配置域名

思考&#xff1a;小云已经成功的通过云服务器ECS完成了网站的架设和测试工作&#xff0c;那么是否可以让他的网站直接对外提供服务&#xff1f; 小云&#xff1a;我已经成功的通过云服务器ECS完成了网站的架设和测试&#xff0c;那么是不是就可以正式对所有用户开放我的网站了…

MySql实战--行锁功过:怎么减少行锁对性能的影响

在上一篇文章中&#xff0c;我跟你介绍了MySQL的全局锁和表级锁&#xff0c;今天我们就来讲讲MySQL的行锁。 MySQL的行锁是在引擎层由各个引擎自己实现的。但并不是所有的引擎都支持行锁&#xff0c;比如MyISAM引擎就不支持行锁。不支持行锁意味着并发控制只能使用表锁&#xf…

国产半导体公司

1、移远通信---通信模组 物联网解决方案供应商&#xff0c;可提供完备的IoT产品和服务&#xff0c;涵盖蜂窝模组(5G/4G/3G/2G/LPWA)、车载前装模组、智能模组&#xff08;5G/4G/边缘计算&#xff09;、短距离通信模组(Wi-Fi&BT)、GNSS定位模组、卫星通信模组、天线等硬件产…

发送请求- header配置

请求头里是客户端的要求&#xff0c;把你的诉求告诉服务端&#xff0c;服务端按照你的要求返回数据 &#xff0c; 请求header需要严格全配置&#xff0c;把请求header全部传入&#xff0c;不能频繁访问&#xff0c;让后端知道它是正常请求 一般只配置User-Agent和Content Typ…

如何备份和恢复微信、企业微信的数据文件

备份和恢复微信、企业微信的数据文件&#xff0c;特别是聊天记录和微盘中的文件&#xff0c;可以通过以下方式进行&#xff1a; 备份微信个人版数据&#xff1a; 聊天记录备份&#xff1a; 目前微信客户端自身并不直接支持导出聊天记录至电脑查看&#xff0c;但可以通过手机微…

Clip Converter - 视频在线下载方法

Clip Converter - 视频在线下载方法 1. Video URL to Download2. Continue3. StartReferences YT to MP4 & MP3 Converter! https://www.clipconverter.cc/ Clip Converter is a free online media conversion application, which allows you to reocord, convert and do…

Go语言学习Day3:数据类型、运算符与流程控制

名人说&#xff1a;莫愁千里路&#xff0c;自有到来风。 ——钱珝 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 1、数据类型①布尔类型②整型③浮点型④string⑤类型转换 2、运算符①算术运算符②逻辑运算符③关…

FPGA内部资源介绍(1)-逻辑资源块

近期有许多小伙伴私信小编&#xff0c;希望小编出一些FPGA基础知识&#xff0c;能对FPGA有初步的认识。小编立马奋笔疾书&#xff0c;熬夜整理了一些学习FPGA必备的基础知识&#xff0c;双手呈上~~&#xff0c;每天一个干货&#xff0c;一星期带你入门FPGA&#xff01; 敲黑板…

如何查询电脑是否被锁定了IP地址?锁定IP会出现什么问题?

前言 电脑刚到手的时候&#xff0c;基本上是通过路由器DHCP进行IP分配的。路由器DHCP分配IP给电脑的好处是网络不会出现IP冲突&#xff0c;网络能正常使用。 有些电脑可能在DHCP自动获取IP时出现错误&#xff0c;所以小伙伴就会通过手动设置IP让电脑可以正常上网。 这样的操…

springboot企业级抽奖项目业务四(缓存预热)

缓存预热 为什么要做预热: 当活动真正开始时&#xff0c;需要超高的并发访问活动相关信息 必须把必要的数据提前加载进redis 预热的策略: 在msg中写一个定时任务 每分钟扫描一遍card_game表 把(开始时间 > 当前时间)&& (开始时间 < 当前时间1分钟)的活动及相…

扫描电子显微镜如何对焦

扫描电子显微镜&#xff08;SEM&#xff09;的对焦过程是确保获得清晰、高分辨率图像的关键步骤。与传统光学显微镜相比&#xff0c;SEM使用电子束来照射样品&#xff0c;并通过检测样品发射的二次电子或背散射电子来生成图像。因此&#xff0c;对焦方法和原理也有所不同。以下…

模板设计模式经典案例

模板设计模式讲究的是将不变的设置为基类&#xff0c;将变的设置为虚函数来让子类实现。下面就以这样的写下模板设计模式的例子。 例子场景 一个工程步骤分为step1,step2&#xff0c;其中step1由总工程指定&#xff0c;step2由子工程指定&#xff0c;最后由一个函数串起来&am…