计算机毕业设计选题推荐-网上产品商城-Python项目实战

作者主页:IT研究室✨
个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。
☑文末获取源码☑
精彩专栏推荐⬇⬇⬇
Java项目
Python项目
安卓项目
微信小程序项目

文章目录

  • 一、前言
  • 二、开发环境
  • 三、系统界面展示
  • 四、代码参考
  • 五、论文参考
  • 六、系统视频
  • 结语

一、前言

随着互联网技术的普及和移动设备的广泛使用,网上产品商城已经成为消费者购物的重要渠道。在这样的背景下,研究和开发一个功能完善、易于使用且具有良好用户体验的网上产品商城具有重要的现实意义。课题的必要性在于满足消费者多样化的购物需求,同时为商家提供一个便捷的在线销售平台。

尽管现有的网上商城解决方案在一定程度上满足了用户和商家的需求,但仍然存在一些问题。例如,部分商城的用户界面不够友好,导致用户在购物过程中遇到困难;商品分类和信息管理不够清晰,影响用户的购物体验;订单处理功能不完善,可能导致用户在购物过程中产生不满。这些问题进一步强调了开发一个更加便捷的网上产品商城的必要性。

本课题旨在研究和开发一个集成用户管理、商品分类管理、商品信息管理、订单管理、公告管理等主要功能的网上产品商城。通过实现这些功能,我们希望能够为用户带来更加便捷、愉悦的购物体验,同时为商家提供一个便捷易用的在线销售和管理工具。本课题的研究目的在于提高网上产品商城的整体性能,满足用户和商家的需求。

本课题的研究意义主要体现在以下几个方面:首先,它有助于推动电子商务行业的发展,为消费者提供更好的购物体验;其次,通过解决现有解决方案中存在的问题,本课题有助于提高网上产品商城的竞争力;再次,本课题的研究成果将为相关领域的研究者提供有益的参考,进一步增进计算机科学与技术领域的发展。

二、开发环境

  • 开发语言:Java/Python两个版本
  • 数据库:MySQL
  • 系统架构:B/S
  • 后端:SSM/SpringBoot/Django三个版本
  • 前端:Vue

三、系统界面展示

  • 网上产品商城界面展示:
    网上产品商城-产品信息
    网上产品商城-产品详情
    网上产品商城-购物车
    网上产品商城-我的订单
    网上产品商城-产品类型管理
    网上产品商城-产品信息管理
    网上产品商城-订单管理

四、代码参考

  • Python项目实战代码参考:
def add_order(request):
    uid = request.session.get('uid')
    cart_ids = request.POST.getlist('cart_id')
    cart_list = []
    cart_id_list_str = ''
    # 购物车数据
    for cart_id in cart_ids:
        cart = CartInfo.objects.get(id=cart_id)
        cart_list.append(cart)
        cart_id_list_str += cart_id+','
    # 收货地址信息
    address_list = AddressInfo.objects.filter(uid=uid).order_by('-is_default')
    context = {
        'cart_list': cart_list,
        'address_list': address_list,
        'cart_id_list': cart_id_list_str,
        'title': '提交订单',
        'app_name': '提交订单'
    }
    return render(request, 'order/place_order.html', context)


@transaction.atomic()
def handle_order(request):
    address_id = request.POST.get('address')
    cart_id_list = request.POST.get('cart_id_list').split(',')
    sp = transaction.savepoint()
    try:
        # 订单表
        order = Order()
        now_str = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
        order.id = '%s%s' % (now_str, random_str())
        order.user_id = request.session['uid']
        order.address_id = address_id
        order.save()
        total_price = 0
        # 订单详情表
        cart_list = CartInfo.objects.filter(id__in=cart_id_list)
        for cart in cart_list:
            if cart.count <= cart.goods.store:
                detail = OrderDetail()
                detail.order = order
                detail.goods = cart.goods
                detail.count = cart.count
                detail.price = cart.goods.price*detail.count
                detail.save()

                goods = cart.goods
                goods.store -= cart.count
                goods.save()

                cart.delete()
                total_price += detail.price
        order.total_price = total_price
        order.save()
        transaction.savepoint_commit(sp)
        return HttpResponseRedirect('/user/order/')
    except Exception:
        transaction.savepoint_rollback(sp)
        return HttpResponseRedirect('/cart/')


def random_str(random_len=6):
    str = ''
    chars = '0123456789'
    # 依据长度,随机chars中下标,依据随机下标获取数据
    for i in range(random_len):
        str += chars[random.randint(0, (len(chars) - 1))]
    return str
def register(request):
    """
    用户注册
    :param request:
    :return:
    """
    if request.method == 'POST':
        post = request.POST
        username = post.get('username')
        password = post.get('password')
        email = post.get('email')
        is_username_exist = UserInfo.objects.filter(username=username).count() == 0
        is_email_exist = UserInfo.objects.filter(email=email).count() == 0
        if is_email_exist and is_username_exist:
            user = UserInfo()
            user.username = username
            user.email = email
            user.password = sha1(password.encode('utf8')).hexdigest()
            user.save()
            # 发送验证邮件
            token = uuid.uuid1()
            redis = StrictRedis()
            key = 'user_verify_email_key_' + str(user.id)
            redis.set(key, token)
            html_message = "<a href='http://127.0.0.1:8000/user/verify_email/?id=%d&token=%s'>激活邮箱</a>" % (user.id, token)
            task.send_verify_email.delay('生鲜商城用户注册邮箱激活', user.email, html_message)
            return render(request, 'tips.html', {'info': '请登录邮箱进行激活操作'})
        else:
            return render(request, 'user_center/register.html', {'error': '用户名或邮箱已经存在'})
    else:
        return render(request, 'user_center/register.html', {'title': '注册', 'hide_header': True})


def login(request):
    """登录处理"""
    if request.method == 'POST':
        # pre_url = request.session.get('pre_url')  # 上次访问的URL
        pre_url = request.session.get('pre_url', '/')
        try:
            post = request.POST
            username = post.get('username')
            password = post.get('password')
            user = UserInfo.objects.get(username=username)
            remember = post.get('remember')
            if sha1(password.encode('utf8')).hexdigest() == user.password:
                # 密码校验成功
                # 邮箱激活校验
                if user.verification is False:
                    code = 403
                    msg = '请您登录邮箱点击激活邮箱链接'
                else:
                    code = 200
                    msg = '登录成功'
                    # 保存用户信息到session
                    request.session['uid'] = user.id
                    request.session['username'] = user.username
            else:
                # 密码校验失败
                code = 401
                msg = '密码错误'
        except:
            # 密码校验失败
            code = 402
            msg = '用户名错误'
        # 返回数据
        response = JsonResponse({'code': code, 'msg': msg, 'pre_url': pre_url})
        if code == 200 and remember == '1':
            # 登录成功设置cookies
            now = datetime.datetime.now()
            date = now + datetime.timedelta(days=7)
            response.set_cookie('username', user.username, expires=date)
        return response
    else:
        username = request.COOKIES.get('username', '')
        from_url = request.GET.get('from', '')
        context = {
                   'title': '登录',
                   'username': username,
                   'hide_header': True,
                    'from_url': from_url
        }
        return render(request, 'user_center/login.html', context)


def username_exist(request):
    """
    检测用户名是否重名
    :param request:
    :return:
    """
    username = request.GET.get('username')
    num = UserInfo.objects.filter(username=username).count()
    if num > 0:
        return JsonResponse({'code': 400, 'msg': '该用户名已存在,请您更换用户名注册'})
    else:
        return JsonResponse({'code': 200, 'msg': '该用户名可以注册'})


def email_exist(request):
    """
    检测邮箱是否重名
    :param request:
    :return:
    """
    email = request.GET.get('email')
    num = UserInfo.objects.filter(email=email).count()
    if num > 0:
        return JsonResponse({'code': 400, 'msg': '该邮箱已被占用,请您更换邮箱注册'})
    else:
        return JsonResponse({'code': 200, 'msg': '该邮箱可以注册'})


def verify_email(request):
    try:
        get = request.GET
        uid = get.get('id')
        key = 'user_verify_email_key_' + str(uid)
        user_token = get.get('token')
        redis = StrictRedis()
        redis_token = redis.get(key)
        verify_flag = False # 邮箱激活成功与否flag
        if user_token == bytes.decode(redis_token):
                user = UserInfo.objects.get(id=uid)
                if user.verification is False:
                    user.verification = True
                    user.save()
                    verify_flag = True
                    # 激活成功后,删除token
                    redis.delete(key)
    except:
        pass
    if verify_flag is True:
        return HttpResponseRedirect('/user/login/')
    else:
        return render(request, 'tips.html', {'info': '邮箱验证失败,请您重试'})


def find_password(request):
    """
    找回密码
    :param request:
    :return:
    """
    if request.method == 'POST':
        post = request.POST
        username = post.get('username')
        email = post.get('email')
        try:
            user = UserInfo.objects.get(username=username)
            if user.email == email:
                # 发送验证邮件
                token = uuid.uuid1()
                redis = StrictRedis()
                key = 'user_verify_fpwd_email_key_' + str(user.id)
                redis.set(key, token)
                html_message = "<a href='http://127.0.0.1:8000/user/verify_fpwd_email/?id=%d&token=%s'>找回密码验证</a>" % (user.id, token)
                task.send_verify_email.delay('生鲜商城用户找回密码邮箱验证', user.email, html_message)
                code = 200
                msg = '请您登录邮箱,点击邮件里的邮箱验证链接'
            else:
                code = 401
                msg = '输入的邮箱不正确'
        except:
            code = 400
            msg = '该用户名尚未注册'
        return JsonResponse({'code': code, 'msg': msg})
    else:
        return render(request, 'user_center/find_password.html')


def reset_password(request):
    try:
        post = request.POST
        uid = post.get('id')
        key = 'user_verify_fpwd_email_key_' + str(uid)
        user_token = post.get('token')
        pwd = post.get('pwd')
        cpwd = post.get('cpwd')
        redis = StrictRedis()
        redis_token = redis.get(key)
        if user_token == bytes.decode(redis_token) and pwd == cpwd:
            user = UserInfo.objects.get(id=uid)
            user.password = sha1(pwd.encode('utf8')).hexdigest()
            user.save()
            redis.delete(key)
            info = '密码重置成功'
        else:
            info = '密码重置失败'
    except:
        info = '密码重置失败'

    return render(request, 'tips.html', {'info': info})


def verify_fpwd_email(request):
    """
    验证找回密码邮箱链接
    :param request:
    :return:
    """
    try:
        get = request.GET
        uid = get.get('id')
        key = 'user_verify_fpwd_email_key_' + str(uid)
        user_token = get.get('token')
        redis = StrictRedis()
        redis_token = redis.get(key)
        verify_flag = False  # 邮箱验证成功与否flag
        if user_token == bytes.decode(redis_token):
            verify_flag = True
            # redis.delete(key)
    except:
        pass
    if verify_flag is True:
        return render(request, 'user_center/reset_password.html', {'title': '重置密码', 'id': uid, 'token':user_token})
    else:
        return render(request, 'tips.html', {'info': '邮箱验证失败,请您重试'})


def center(request):
    """
    用戶中心
    :param request:
    :return:
    """
    # 用户信息
    user = UserInfo.objects.get(id=request.session.get('uid'))
    # 浏览记录
    view_goods = []
    view_goods_str = request.COOKIES.get('view_goods', '')
    view_goods_list = view_goods_str.split(',')
    view_goods_list.pop()
    if view_goods_str != '':
        for goods_id in view_goods_list:
            goods = GoodsInfo.objects.get(id=goods_id)
            view_goods.append(goods)
    context = {
             'title': '用户中心',
             'app_name': '用户中心',
             'user': user,
             'view_goods': view_goods
    }
    return render(request, 'user_center/user_center_info.html', context)


def logout(request):
    """
    退出登录
    :param request:
    :return:
    """
    request.session.flush()
    return HttpResponseRedirect('/')


def address(request):
    """地址列表"""
    uid = request.session.get('uid')
    address_list = AddressInfo.objects.filter(uid=uid)
    if len(address_list) > 0:
        new_list = list()
        for add in address_list:
            province_name = AreaInfo.get_province_name(add.province_id)
            city_name = AreaInfo.get_city_name(add.province_id, add.city_id)
            district_name = AreaInfo.get_district_name(add.province_id, add.city_id, add.district_id)
            data={
                'area': province_name + city_name + district_name,
                'address': add.address,
                'realname': add.realname,
                'phone': add.phone,
                'is_default': add.is_default,
                'id': add.id,
                'app_name': '用户中心',
                'title': '收货地址列表',
            }
            new_list.append(data)
        return render(request, 'user_center/user_center_site.html', {'address_list': new_list})
    else:
        return HttpResponseRedirect('/user/add_address/')


def add_address(request):
    """添加或编辑收货地址"""
    if request.method == 'POST':
        uid = request.session.get('uid')
        post = request.POST
        address_id = post.get('address_id')
        if address_id != '':
            # 编辑
            address = AddressInfo.objects.get(id=address_id)
        else:
            # 新增
            address = AddressInfo()
        address.uid = uid
        address.realname = post.get('realname')
        address.province_id = post.get('province')
        address.city_id = post.get('city')
        address.district_id = post.get('district')
        address.address = post.get('detail')
        address.phone = post.get('phone')
        address.save()
        return HttpResponseRedirect('/user/address/')
    else:
        # 查询全部省份
        # province = AreaInfo.objects.filter(Q(city_id=0) & Q(district_id=0))
        province = AreaInfo.objects.filter(city_id=0, district_id=0)
        context = {
            'app_name': '用户中心',
            'title': '添加收货地址',
            'province': province
        }
        return render(request, 'user_center/user_center_site_edit.html', context)


def get_address_city(request):
    """ajax获取一个省下的城市"""
    province_id = request.GET.get('province_id')
    city_list = AreaInfo.objects.filter(province_id=province_id, city_id__gt=0, district_id=0).values('city_id', 'name')
    return JsonResponse({"city_list": list(city_list)})


def get_address_district(request):
    """ajax获取一个市下的县区"""
    city_id = request.GET.get('city_id')
    district_list = AreaInfo.objects.filter(city_id=city_id,district_id__gt=0).values('district_id', 'name')
    return JsonResponse({'district_list': list(district_list)})


def edit_address(request, address_id):
    """编辑收货地址信息"""
    province = AreaInfo.objects.filter(city_id=0, district_id=0)
    address_info = AddressInfo.objects.get(id=address_id)
    city = AreaInfo.objects.filter(province_id=address_info.province_id,city_id__gt=0, district_id=0)
    district = AreaInfo.objects.filter(province_id=address_info.province_id, city_id=address_info.city_id, district_id__gt=0)
    context = {
        'province': province,
        'address_info': address_info,
        'city': city,
        'district': district,
        'app_name': '用户中心',
        'title': '编辑收货地址',
    }
    return render(request, 'user_center/user_center_site_edit.html',context)


def del_address(request, address_id):
    """删除地址"""
    try:
        AddressInfo.objects.filter(id=address_id).delete()
        return JsonResponse({'code': 200, 'msg': '删除成功'})
    except Exception:
        return JsonResponse({'code': 400, 'msg': '删除失败'})


@transaction.atomic
def set_default_address(request, address_id):
    """设置默认地址"""
    address = AddressInfo.objects.get(id=address_id)
    # 记录事务开始保存点
    save_point = transaction.savepoint()
    try:
        # 设置(取消)默认地址
        address.is_default = not address.is_default
        address.save()
        undefault_address_id = 0  # 记录被取消默认地址的id
        if not address.is_default:
            # 如果当前选中的不是默认地址
            # 就要考虑有没有其他地址是默认地址
            uid = request.session.get('uid')
            address_list = AddressInfo.objects.filter(uid=uid, is_default=True)
            # 如果有其他地址是已经被设置为默认地址,就把这个取消掉
            if len(address_list) == 1:
                address_list[0].is_default = False
                undefault_address_id = address_list[0].id
                address_list[0].save()
        # 事务提交
        transaction.savepoint_commit(save_point)
        return JsonResponse({'code': 200, 'msg': '设置成功', 'undefault_address_id': undefault_address_id})
    except Exception:
        # 事务回滚
        transaction.savepoint_rollback(save_point)
        return JsonResponse({'code': 400, 'msg': '设置失败'})


def order(request):
    """用户订单列表"""
    current_page = int(request.GET.get('page', '1'))

    uid = request.session['uid']
    order_list = Order.objects.filter(user_id=uid).order_by('-add_time')

    paginator = Paginator(order_list, 1)
    order_list = paginator.page(current_page)

    context = {
               'title': '用户中心',
               'order_list': order_list
    }
    return render(request, 'user_center/user_center_order.html', context)


def del_view_goods(request):
    """删除浏览记录"""
    try:
        response = JsonResponse({'code': 200, 'msg': '删除成功'})
        goods_id = request.POST.get('goods_id')
        view_goods = request.COOKIES.get('view_goods').split(',')
        # goods_id 为0 时,删除全部
        # 不为0时,删除某一个
        if goods_id != '0':
            if goods_id in view_goods:
                view_goods.remove(goods_id)
            view_goods_str = ','.join(view_goods)
            response.set_cookie('view_goods', view_goods_str, max_age=7 * 86400)
        else:
            response.set_cookie('view_goods', '', max_age=7 * 86400)
        return response
    except Exception:
        return JsonResponse({'code': 400, 'msg': '删除失败'})

五、论文参考

  • 计算机毕业设计选题推荐-网上产品商城论文参考:
    计算机毕业设计选题推荐-网上产品商城论文参考

六、系统视频

网上产品商城项目视频:

结语

计算机毕业设计选题推荐-网上产品商城-Python项目实战
大家可以帮忙点赞、收藏、关注、评论啦~
源码获取:⬇⬇⬇

精彩专栏推荐⬇⬇⬇
Java项目
Python项目
安卓项目
微信小程序项目

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

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

相关文章

云原生Docker系列 | Docker私有镜像仓库公有镜像仓库使用

云原生Docker系列 | Docker私有镜像仓库&公有镜像仓库使用 1. 使用公有云镜像仓库1.1. 阿里云镜像仓库1.2. 华为云镜像仓库1.3. 腾讯云镜像仓库2. 使用Docker Hub镜像仓库3. 使用Harbor构建私有镜像仓库4. 搭建本地Registry镜像仓库1. 使用公有云镜像仓库 1.1. 阿里云镜像…

七、HDFS文件系统的存储原理

1、总结 之所以把总结放在文件开头&#xff0c;是为了让读者对这篇文章有更好的理解&#xff0c;&#xff08;其实是因为我比较懒……&#xff09; 对于整个HDFS文件系统的存储原理&#xff0c;我们可以总结为一句话&#xff0c;那就是&#xff1a; 分块备份 2、存储结构和问题…

O-Star|再相识

暑去秋来&#xff0c;岁月如梭&#xff0c;几名"O-Star"们已经入职一段时间&#xff0c;在这期间他们褪去青涩&#xff0c;逐渐适应了公司的工作环境和文化&#xff0c;迈向沉稳&#xff5e; 为了进一步加深校招生之间的交流与了解&#xff0c;提高校招生的凝聚力和…

易航网址引导系统 v1.9 源码:去除弹窗功能的易航网址引导页管理系统

易航自主开发了一款极其优雅的易航网址引导页管理系统&#xff0c;后台采用全新的光年 v5 模板开发。该系统完全开源&#xff0c;摒弃了后门风险&#xff0c;可以管理无数个引导页主题。数据管理采用易航原创的JsonDb数据包&#xff0c;无需复杂的安装解压过程即可使用。目前系…

第4章 向量、SIMD和GPU体系结构中的数据级并行

4.1 引言 有多少应用程序拥有大量的数据级并行DLP&#xff1f;SIMD分类Flyn被提出后5年。答案不仅包括科学运算中的矩阵运算&#xff0c;还包括面向多媒体的图像和声音处理以及机器学习算法。 由于SIMD可以执行多个数据操作&#xff0c;能效比MIMD要高&#xff0c;使得SIMD对…

小红书全自动加群引流脚本「 软件工具+引流技术教程」

软件介绍&#xff1a; 小红书群聊最新玩法&#xff0c;可自动检测群人数加群&#xff0c;不会加到垃圾群。定时发送广告&#xff0c;红书群聊的引流玩法回来了 功能一、自动搜索关键词加群&#xff0c;比如创业、项目、鞋子、包包、考公、考研… 功能二、自动检测群人数&…

电子学会C/C++编程等级考试2022年09月(一级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:指定顺序输出 依次输入3个整数a、b、c,将他们以c、a、b的顺序输出。 时间限制:1000 内存限制:65536输入 一行3个整数a、b、c,以空格分隔。 0 < a,b,c < 108输出 一行3个整数c、a、b,整数之间以一个空格分隔。样例输入…

03-基于Feign的远程调用,详解Feign的自定义配置和优化,创建Feign模块

Feign远程调用 Feign替代RestTemplate 利用RestTemplate发起远程调用的代码的缺点 代码可读性差编程体验不统一 , 面对参数复杂的URL难以维护 String url "http://user-service/user/" order.getUserId(); User user restTemplate.getForObject(url, User.cla…

【Proteus仿真】【Arduino单片机】多功能数字时钟设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用PCF8574、LCD1602液晶、DS1302温度传感器、DS1302时钟、按键、蜂鸣器等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显示当前日期…

【DevOps】Git 图文详解(六):Git 利器 - 分支

Git 利器 - 分支 1.分支 Branch2.分支指令 &#x1f525;3.分支的切换 checkout4.合并 merge & 冲突4.1 &#x1f538; 快速合并&#xff08;Fast forward&#xff09;4.2 &#x1f538; 普通合并4.3 处理冲突 <<<<<<< HEAD 5.变基 rebase 分支是从主…

【C++进阶之路】第十一篇:C++的IO流

文章目录 1. C语言的输入与输出2. 流是什么3. CIO流3.1 C标准IO流3.2 C文件IO流 4.stringstream的简单介绍 1. C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键盘)读取数据&#xff0c;并将值存放在变量中。prin…

【鸿蒙应用ArkTS开发系列】- 灌水区,鸿蒙ArkTs开发有问题可以在该帖中反馈

大家好, 这是一篇水贴&#xff0c;给大家提供一个交流沟通鸿蒙开发遇到问题的地方。 新增新增这个文章呢&#xff0c;大家在开发使用ArkTS开发鸿蒙应用或者鸿蒙服务的时候&#xff0c;有遇到疑问或者问题&#xff0c;可以在本文章评论区提问&#xff0c;我看到了如果知道怎么…

【内网穿透】在Ubuntu搭建Web小游戏网站,并将其发布到公网访问

目录 前言 1. 本地环境服务搭建 2. 局域网测试访问 3. 内网穿透 3.1 ubuntu本地安装cpolar 3.2 创建隧道 3.3 测试公网访问 4. 配置固定二级子域名 4.1 保留一个二级子域名 4.2 配置二级子域名 4.3 测试访问公网固定二级子域名 前言 网&#xff1a;我们通常说的是互…

Ubuntu文件系统损坏:The root filesystem on /dev/sda5 requires a manual fsck

前言 Ubuntu在启动过程中&#xff0c;经常会遇到一些开故障&#xff0c;导致设备无法正常开机&#xff0c;例如文件系统损坏等。 故障描述 Ubuntu系统启动过程中&#xff0c;出现以下文件系统损坏错误&#xff1a; 产生原因 该故障是由磁盘检测不能通过导致&#xff0c;可能是因…

竞赛 题目:基于深度学习的手势识别实现

文章目录 1 前言2 项目背景3 任务描述4 环境搭配5 项目实现5.1 准备数据5.2 构建网络5.3 开始训练5.4 模型评估 6 识别效果7 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的手势识别实现 该项目较为新颖&#xff0c;适合作为竞赛课题…

基于C#实现AC自动机算法

我要检查一篇文章中是否有某些敏感词&#xff0c;这其实就是多模式匹配的问题。当然你也可以用 KMP 算法求出&#xff0c;那么它的时间复杂度为 O(c*(mn))&#xff0c;c&#xff1a;为模式串的个数。m&#xff1a;为模式串的长度,n:为正文的长度&#xff0c;那么这个复杂度就不…

Macs Fan Control Pro:掌握您的Mac风扇,提升散热效率

在Mac的世界里&#xff0c;每一个细节都显得格外重要。而其中&#xff0c;风扇的控制与调节则显得尤为重要。然而&#xff0c;原生的Mac系统并不提供直观的风扇控制工具&#xff0c;这使得许多Mac用户在处理高负荷任务时&#xff0c;风扇无法有效地进行散热&#xff0c;导致机器…

TensorFlow实战教程(十八)-Keras搭建卷积神经网络及CNN原理详解

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前一篇文章详细讲解了Keras实现分类学习,以MNIST数字图片为例进行讲解。本篇文章详细讲解了卷积神经网络CNN原理,并通过Keras编写CNN实现了MNIST分类学习案例。基础性文章,希望对您有所帮助! 一…

体感互动游戏VR游戏AR体感游戏软件开发

随着科技的不断发展&#xff0c;体感互动游戏正逐渐成为游戏行业的一个重要趋势。这类游戏通过利用传感器、摄像头和运动控制器等技术&#xff0c;使玩家能够通过身体动作与游戏进行实时互动&#xff0c;极大地提升了娱乐体验。 1. 游戏设计与互动元素 体感互动游戏的核心在于…

使用kafka_exporter监控Kafka

prometheus 监控 kafka 常见的有两种开源方案,一种是传统的部署 exporter 的方式,一种是通过 jmx 配置监控, 项目地址: kafka_exporter:https://github.com/danielqsj/kafka_exporterjmx_exporter:https://github.com/prometheus/jmx_exporter本文将采用kafka_exporter方…