基于SSM的宠物领养系统的设计与实现

news2024/11/19 17:33:37

1.引言

动物作为人类的宠物已经有几千年的历史了,尤其是猫和狗因其天性被人类所喜爱和推崇,好多的成语故事、俗语等都及它们有关。但是,近几年来由于生活节奏的加快,人们的压力增大,没有时间和空间去照顾宠物,所以弃养宠物的家庭增加,越来越多的流浪动物不仅对动物的生活甚至生存造成影响而且也对人类的生活造成影响。据北京《娱乐信报》报道,兽医专家称流浪猫狗更易传播疾病,“街头流浪的猫狗身上携带鼠疫等病毒、跳蚤等寄生虫的几率要远远高于家养宠物”。除此之外,大量的流浪猫、狗对城市环境、交通以及公共卫生安全也构成了严重的隐患,也是对生命的不尊重。同时有些家庭却因为没有找到合适的宠物而遗憾。

目前,动物的救助存在救助的区域受限制、投资较大、场地偏僻、信息更新发布困难等诸多问题。这些情况导致动物救助所的动物处于“入多出少”的情况,这种情况导致收容所的经济、场地等问题日益严峻。在网络技术飞速发展的今天,电子商务对人们的影响越来越大,小到衣物的买卖,大到房屋的交易都可以通过电子商务来进行。人们也越来越习惯足不出户,完成很多的个人事务。依赖于Internet的优势,将动物的领养助养及其相结合,开发一个基于网络的宠物领养助养系统,刻不容缓。

本论文描述了基于SSM的流浪猫狗救助系统开发的整个流程。用户通过在互联网访问该平台,用户可以根据自身需要、家庭环境、宠物的情况等因素来决定救助方式。当然考虑到动物本身和会用户本身的条件,网站管理员有权利阻止用户的救助方式也可以对动物的受救助情况进行动态管理,并依据国家法律规定确定会员是否有领养的权利;最后,领养人可以通过平台上传动物的生活照进行领养反馈。

2.开发技术

2.1 B/S框架

B/S架构是软件系统体系结构,是指 浏览器-Web服务器( Broswer-Server ), 采用三层架构,即表现层、业务逻辑层、数据访问层 。B/S架构中,用户界面完全通过浏览器实现,一部分事务逻辑在前端实现,但是主要的事务逻辑在服务器端实现,形成所谓的三成架构。在B/S体系结构系统中,用户通过浏览器向分布在网络上的许多服务器发出请求,服务器对浏览器的请求进行处理,将用户所需信息返回到浏览器。而其余如数据请求、加工、结果返回以及动态网页生成、对数据库的访问和应用程序的执行等工作全部由Web Server完成。随着Windows将浏览器技术植入操作系统内部,这种结构已经成为当今应用软件的首选结构体系。

2.2 JSP技术

JSP全称JavaServer Pages,是由Sun Microsystems公司创建的动态网页技术标准,它构建在网络服务器上,可以接收客户端发送的指令,根据指令的内容动态生成HTML等格式的网页,然后返回给请求者。JSP可根据研发人员的需要自主创建,敲出的各式语言可用其他方式运行,具有普遍性。

由于JSP动态标准,所以它较于普通的静态标准有着很多优点,例如,JSP可以在静态页面内部中嵌入代码并可随时更改,并以静态页面为模板实现部分内容的动态生成,同时它还有更为强大的交互性。它还引入了一个名为"动作"的XML标签,用来用于调用内置函数。标签库可以随平台动态使用,对于平台外有着多种环境的适应性,这些简单易用的功能受到很多开发者的喜爱。

2.3 MVC框架

MVC 全名是Model View Controller,是模型-视图-控制器的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

2.4 MySQL

MySQL是一个中小型关系数据库管理系统,可以在支持多线程的Web服务器上处理[13],它是由ORACLE公司开发的软件的旗下软件,是目前WEB应用中最好的RDBMS应用之一。

MySQL可以将数据保存在不同的表中,这些表相当于一个个小库房,各种库房相互交织,这种“交织”的连接方式大大提高了数据的灵活性。MySQL使用SQL语言,有免费版本,可对大众开放,配合Apache可以搭建一个很好的开发环境。MySQL具有低成本、高速度、体积微小等优势。在应用方面,它还有着安全性好,开发速率快等优点,对于一些想节约成本的企业和个人用户来说,选择MySQL是一种非常不错的选择。

3.功能设计

本系统会员分为游客、用户、管理员三个角色。系统结构图所示:

管理员权限:

(1)管理员具有管理用户的权限主要是:删除违反协议、长时间不登录等用户的用户信息。

(2)管理员具有管理宠物的权限主要是发布新宠物信息、删除已死亡宠物信息、修改宠物领养助养状态信息、审核用户发布的宠物等。

(2)管理员具有管理订单的权限,包括:修改订单状态、审核订单、取消不合理订单、确认订单等

(3)管理员具有管理宠物类别的权限,包括:添加、删除、修改宠物类别信息。

(4)管理员具有管理货运类别的权限,包括:添加、删除、修改货运类别信息。

(5)管理员具有管理领养宠物的权限,主要是修改领养信息。

用户权限:

(6)用户具有浏览网站中所有的宠物信息、留言发布需要救助的宠物信息的权限。

(7)用户具有按关键字检索宠物的权限。

(8)个人信息管理:修改个人注册信息。

(9)密码管理:找回密码、修改密码。

(10)添加、查看或删除个人收藏。

(11)将选中的宠物放入宠物车。

(12)查看、增删宠物车中的宠物

(13)若领养则直接提交订单;领养提交订单并填写必要的收件信息。

(14)若直接助养则直接修改宠物助养金信息。

(15)查看包括运费在内的总金额

(16)查看助养宠物的月消费明细单。

(17)上传领养宠物的近况照片,以便管理员回访。

(18)留言信息管理:添加留言

(19)退出登录

游客权限:

(1)游客具有浏览网站中所有的宠物信息的权限,主要是查看宠物信息。

(2)游客具有按关键字检索宠物的权限。

(3)游客具有注册为会员的权限。

4.功能效果图

4.1 首页

4.2 领养中心

 4.3 登录

 4.4 注册

4.5 后台管理员登录 

5.核心代码

@Controller
@RequestMapping("adopt")
public class AdoptAnimalController {

    @Autowired
    private AdoptAnimalService animalService;

    @Autowired
    private PetService petService;

    @Autowired
    private UsersService usersService;

    @RequestMapping("adopts.action")
    @ResponseBody
    public Message getAdoptAnimals(@RequestParam(value = "pn",defaultValue = "1") Integer pn){
        PageHelper.startPage(pn,4);
        AdoptAnimal animal=new AdoptAnimal();
        List<AdoptAnimal> adoptAnimals = animalService.findByState(1);
        PageInfo page=new PageInfo(adoptAnimals,2);
        return Message.success().add("pageInfo",page);
    }


    @RequestMapping("ByAgree.action")
    @ResponseBody
    public Message getAdoptStates(@RequestParam(value = "pn",defaultValue = "1") Integer pn){
        PageHelper.startPage(pn,4);
        int state=2;
        List<AdoptAnimal> adoptAnimals = animalService.findByState(state);
        PageInfo page=new PageInfo(adoptAnimals,2);
        return Message.success().add("pageInfo",page);
    }

    @RequestMapping("ByDisAgree.action")
    @ResponseBody
    public Message getAdoptDisagress(@RequestParam(value = "pn",defaultValue = "1") Integer pn){
        PageHelper.startPage(pn,4);
        int state=0;
        List<AdoptAnimal> adoptAnimals = animalService.findByState(state);
        PageInfo page=new PageInfo(adoptAnimals,2);
        return Message.success().add("pageInfo",page);
    }

    @RequestMapping("create.action")
    @ResponseBody
    public Message createAdopt(HttpServletRequest request){
        Pet pet = (Pet)request.getSession().getAttribute("pet");
        Users user = (Users)request.getSession().getAttribute("user");
        pet.setState(1);
        AdoptAnimal animal=new AdoptAnimal();
        animal.setUser(user);
        animal.setPet(pet);
        animal.setState(1);
        animal.setAdoptTime(new Date());
        int i = animalService.addAdoptAnimal(animal);
        int t=petService.updateState(pet);
        if(i>0&&t>0){
            return Message.success();
        }else{
            return Message.fail();
        }
    }

    @RequestMapping("delete.action")
    @ResponseBody
    public Message deleteAdopt(Integer id){
        if(animalService.deleteAdoptAnimal(id)>0){
            return Message.success();
        }else{
            return Message.fail();
        }
    }

    @RequestMapping("update.action")
    @ResponseBody
    public Message updateAdoptAnimal(AdoptAnimal animal){
        if(animalService.updateAdoptAnimal(animal)>0){
            return Message.success();
        }else{
            return Message.fail();
        }
    }

    @RequestMapping(value = "disAgree.action", method = RequestMethod.GET)
    @ResponseBody
    public Message updateAdoptState(Integer id) throws MessagingException {
        AdoptAnimal animal = animalService.findById(id);
        animal.setState(0);
        Pet pet = animal.getPet();
        pet.setState(0);
        int i = animalService.updateAdoptState(animal);
        int t=petService.updateState(pet);
        if(i>0&&t>0){
            return Message.success();
        }else{
            return Message.fail();
        }
    }

    @RequestMapping(value = "agree.action",method = RequestMethod.GET)
    @ResponseBody
    public Message updateAdoptStates(Integer id) throws MessagingException {
        AdoptAnimal animal = animalService.findById(id);
        animal.setState(2);
        Pet pet = animal.getPet();
        pet.setState(2);
        int a = animalService.updateAdoptState(animal);
        int b=petService.updateState(pet);
        if(a>0&&b>0){
            return Message.success();
        }else{
            return Message.fail();
        }
    }

    @RequestMapping("findById.action")
    @ResponseBody
    public Message findById(Integer id){
        AdoptAnimal animal = animalService.findById(id);
        if(animal!=null){
            return Message.success().add("animal",animal);
        }else{
            return Message.fail();
        }
    }


    @RequestMapping("findByAdoptTime.action")
    @ResponseBody
    public Message findByAdoptTime(String adoptTime) throws ParseException {
        PageHelper.startPage(1,4);
        List<AdoptAnimal> adoptAnimals = animalService.findByAdoptTime(adoptTime);
        if(adoptAnimals!=null){
            PageInfo page=new PageInfo(adoptAnimals,3);
            return Message.success().add("pageInfo",page);
        }else{
            return Message.fail();
        }

    }

    @RequestMapping("findByName.action")
    @ResponseBody
    public Message findByName(@RequestParam(value = "pn",defaultValue = "1")Integer pn,@RequestParam(value = "userName") String userName,@RequestParam(value = "state") Integer state) throws ParseException {
        PageHelper.startPage(1,4);
        List<Users> users = usersService.findByName(userName);
        List<AdoptAnimal> adoptAnimals = animalService.findByName(users,state);
        if(adoptAnimals!=null){
            PageInfo page=new PageInfo(adoptAnimals,3);
            return Message.success().add("pageInfo",page);
        }else{
            return Message.fail();
        }

    }
}
@Controller
@RequestMapping("pet")
public class PetController {

    @Autowired
    private PetService petService;

    @RequestMapping("pets.action")
    @ResponseBody
    public Message getPets(@RequestParam(value = "pn",defaultValue = "1")Integer pn){
        PageHelper.startPage(pn,3);
        List<Pet> pets = petService.getPets();
        System.out.println(pets);
        PageInfo page=new PageInfo(pets,2);
        return Message.success().add("pageInfo",page);
    }

    @RequestMapping("petState.action")
    @ResponseBody
    public Message findByState(@RequestParam(value = "pn",defaultValue = "1")Integer pn){
        PageHelper.startPage(pn,3);
        int state=0;
        List<Pet> pets = petService.findByState(0);
        System.out.println(pets);
        PageInfo page=new PageInfo(pets,2);
        return Message.success().add("pageInfo",page);
    }

    @RequestMapping(value = "create.action")
    @ResponseBody
    public Message createPet(Pet pet,@RequestParam(value = "file") MultipartFile file, HttpServletRequest request){
        String load = FileLoad.load(file,request);
        pet.setPic(load);
        if(petService.addPet(pet)>0){
            return Message.success();
        }else{
            return Message.fail();
        }
    }

    @RequestMapping("delete.action")
    @ResponseBody
    public Message deletePet(Integer id){
        if(petService.deletePet(id)>0){
            return Message.success();
        }else {
            return Message.fail();
        }
    }

    @RequestMapping("update.action")
    @ResponseBody
    public Message updatePet(Pet pet){
        if(petService.updatePet(pet)>0){
            return Message.success();
        }else{
            return Message.fail();
        }
    }

    @RequestMapping("findById.action")
    @ResponseBody
    public Message findById(Integer id){
        Pet pet = petService.findById(id);
        if(pet!=null){
            return Message.success().add("pet",pet);
        }else{
            return Message.fail();
        }
    }
    @RequestMapping("findByPet.action")
    @ResponseBody
    public Message findByPet(Integer id, HttpServletRequest request){
        Pet pet = petService.findById(id);
        System.out.println(pet);
        String pic = pet.getPic();
        String[] split = pic.split(",");
        List<String> pics=new ArrayList<>();
        for(int i=0;i<split.length;i++){
            pics.add(split[i]);
        }

        request.getSession().setAttribute("pics",pic);
        request.getSession().setAttribute("pet",pet);
        if(pet!=null){
            return Message.success().add("pet",pet);
        } else{
            return Message.fail();
        }

    }
    @RequestMapping("findByPetType.action")
    @ResponseBody
    public Message findByName(@RequestParam(value = "pn",defaultValue = "1")Integer pn,String petType){
        PageHelper.startPage(pn,4);
        List<Pet> pets = petService.findByPetType(petType);
        if(pets!=null){
            PageInfo page=new PageInfo(pets,3);
            return Message.success().add("pageInfo",page);
        }else{
            return Message.fail();
        }
    }

}
@Controller
@RequestMapping("apply")
public class ApplyController {

    @Autowired
    private ApplyService applyService;


    @RequestMapping("applys.action")
    @ResponseBody
    public Message getBlog(@RequestParam(value = "pn",defaultValue = "1") Integer pn){
        // 引入PageHelper分页插件
        // 在查询之前只需要调用,传入页码,以及每页的大小
        PageHelper.startPage(pn,3);
        List<Apply> applys = applyService.getApply();
        System.out.println(applys);
        // startPage后面紧跟的这个查询就是一个分页查询
        // 使用pageInfo包装查询后的结果,只需要将pageInfo交给页面就行了。
        // 封装了详细的分页信息,包括有我们查询出来的数据,传入连续显示的页数
        PageInfo page=new PageInfo(applys,2);
        return Message.success().add("pageInfo",page);
    }

    @RequestMapping("create.action")
    @ResponseBody
    public Message addApply(Apply apply){
        apply.setApplyTime(new Date());
        apply.setState(2);
        int i = applyService.addApply(apply);
        if(i>0){
            return Message.success();
        }else{
            return Message.fail();
        }
    }

    @RequestMapping("delete.action")
    @ResponseBody
    public Message deleteApply(Integer id){
        int i = applyService.deleteApply(id);
        if(i>0){
            return Message.success();
        }else {
            return Message.fail();
        }
    }

    @RequestMapping("update.action")
    @ResponseBody
    public Message updateApply(Apply apply){
        if(applyService.updateApply(apply)>0){
            return Message.success();
        }else{
            return Message.fail();
        }
    }

    @RequestMapping("findById.action")
    @ResponseBody
    public Message findById(Integer id){
        Apply apply=applyService.findById(id);
        if(apply!=null){
            return Message.success().add("apply",apply);
        }else{
            return Message.fail();
        }

    }

    @RequestMapping("findByState.action")
    @ResponseBody
    public Message findByTime(@RequestParam(defaultValue ="1",value = "pn") Integer pn,Integer state){
        PageHelper.startPage(pn,4);
        List<Apply> states = applyService.findByState(state);
        if(states!=null){
            PageInfo page=new PageInfo(states,3);
            return Message.success().add("pageInfo",page);
        }else{
            return Message.fail();
        }

    }

}

6.参考论文

 摘  要

ABSTRACT

第1章 绪论

1.1 引言

1.2 课题的来源及意义

1.3 国内外发展情况

第2章 系统开发工具及技术

2.1 系统开发工具

2.2 系统开发技术

第3章 需求分析

3.1 系统总体分析

3.2数据描述

第4章 系统详细设计

4.1 用户登录模块

4.2 用户注册模块

4.3 宠物查询模块

4.4 宠物详细信息

4.5 宠物车

4.6 会员订单管理

4.7 管理员登录模块

4.8 宠物信息添加模块

4.9 宠物信息修改模块

4.10 管理员订单管理模块

4.11 管理员报表功能

第5章 系统功能详细设计与实现

5.1 用户详细实现

5.2 管理员详细实现

第6章 功能测试

6.1 客户端功能测试

6.2 后台管理端功能测试

6.3 测试结果分析

第7章 总结与展望

参考文献

致 谢

7.总结

本系统实现了基于JSP的流浪猫狗救助系统的功能。在本系统的开发过程中,本人受益匪浅。首先,本人认识到了代码规范的重要性,特别是在一些大型项目中,用到的函数可能有数百个,如果编写的代码不规范会给后期的检查带来极大的麻烦。而且完整的代码测试也非常重要,有些错误可能在很久以后才能发现。其次,本人意识到了软件设计的重要性,原来接触的项目往往是快速开发类型的,几乎不需要在软件的逻辑设计上花费太多时间,往往可以边开发边进行下一步的设计。但是这一次本人意识到做软件设计很重要,当初一个设计没注意,可能造成后来的编码大面积的返工。最后就是调试方法的重要性,系统的调试过程要比开发过程繁琐的多。每个操作、每次向服务器提交请求,其实都包括了很多小段代码的执行,如果不能够采用正确的调试方法,就很难找出程序中的错误。

该系统还有许多可扩充的功能,比如加入动物救助站的角色。来管理宠物,还有明细表的管理存在很多不足的地方,订单的管理也存在一定的缺陷等等。由于时间有限,本人暂时还无法使功能完善,但是本人想日后的努力中肯定能做出更完善的系统。

喜欢的点赞收藏加关注私信作者沟通交流

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ProGuard 进阶系列(三) Java 类文件解析

书接上文&#xff0c;当我们从用户的配置文件中读取到所有的配置信息后&#xff0c;下一步便是将配置中的指定的类文件进行读取&#xff0c;构建需要混淆的 Java 类文件的语法树。在阅读类文件之前&#xff0c;先来看一下输入输出参数中的内容&#xff0c;我使用的是一个 Andro…

大一下暑期计划 + 2023字节青训营预告直播

目录 &#x1f33c;前言 &#x1f339;后端学习方法 &#x1f333;1&#xff0c;层次 &#x1f333;2&#xff0c;体系 &#x1f333;3&#xff0c;算法和数据结构 &#x1f333;4&#xff0c;总结 &#x1f339;前端学习方法 &#x1f333;基础 &#x1f339;求职中如…

如何在Microsoft Excel中使用LEN函数

如果你曾经想尝试查找一行文本中的字符数&#xff0c;你可以使用Microsoft Excel来查找&#xff0c;这要归功于LEN函数。以下是如何使用它。 一、什么是 LEN 函数 LEN函数是一个简单的计算函数&#xff0c;用于计算给定文本字符串中的所有字符&#xff0c;包括数字、字母、特…

【数据库课设】图书馆资源管理系统 源码+流程图+结构设计(借还图书 逾期罚款 图书管理 读者管理 信息查询)python实现

文章目录 一 实现功能&#xff08;1&#xff09;管理员功能&#xff08;2&#xff09;读者功能 二 数据流图三 概念结构设计四 文件目录五 源码&#xff1a;main.py六 运行截图 一 实现功能 &#xff08;1&#xff09;管理员功能 一个管理员编号对应一个密码&#xff0c;且需…

redis—安装以及可视化

前言 redis 是一种非关系型数据库&#xff0c;什么是非关系型数据库&#xff0c;之前我们在mysql专栏 也有提到过&#xff0c;这边就不再过多的赘述&#xff0c;忘记了的小伙伴可以再次阅读这篇文章 终于明白了数据库的【关系型】与【非关系型】 其实这还是挺重要的&#xff…

ruoyi+vue回显数字的问题,解决方案

在项目中用ruoyi框架和前端vue进行开发&#xff0c; 需求是在前端生成下拉框&#xff0c;下拉框中的内容需要调用后端接口进行数据返回&#xff0c; 现在新增的时候&#xff0c;数据已经返回了&#xff0c;但是再修改的时候&#xff0c;进行回显数据导致前端列表中展示出来的…

城市排水监测系统为城市排水防涝提质增效

城市化进程中&#xff0c;城市排水系统成为城市基础设施建设的重要组成部分。然而&#xff0c;随着气候变化和城市建设规模的扩大&#xff0c;极端天气和内涝风险不断增加&#xff0c;城市的排水系统面临巨大挑战。因此&#xff0c;建立一套智能化城市排水监测系统&#xff0c;…

【python】一些常用的pandas技巧

有了gpt之后&#xff0c;确实很多代码都可以让gpt给改错。嘎嘎香 merge多个dateframe https://stackoverflow.com/questions/44327999/how-to-merge-multiple-dataframes data_net [a,b,c,d] net_merged reduce(lambda left,right: pd.merge(left,right,on[key column],ho…

小程序安全指南:保护用户数据的最佳实践

第一章&#xff1a;引言 近年来&#xff0c;小程序已成为移动应用开发的重要组成部分。它们为用户提供了方便的功能和个性化的体验&#xff0c;然而&#xff0c;与此同时&#xff0c;小程序安全问题也引起了广泛的关注。保护用户数据是开发者应该高度重视的问题。在本指南中&a…

JavaScript ES11新特性

文章目录 导文可选链操作符&#xff08;Optional Chaining Operator&#xff09;空值合并操作符&#xff08;Nullish Coalescing Operator&#xff09;动态 import() 函数BigInt 类型Promise.allSettled() 导文 JavaScript ES11&#xff0c;也被称为ES2020&#xff0c;引入了一…

经纬度、时差知识整理(理解与应用)

经纬度是经度与纬度的合称组成一个坐标系统&#xff0c;称为地理坐标系统&#xff0c;它是一种利用三度空间的球面来定义地球上的空间的球面坐标系统&#xff0c;能够标示地球上的任何一个位置。初一的同学在学地理这门课的时候&#xff0c;一上来很快就会学到经纬度这个概念。…

PC市场寒冬,大众还需要PC吗?

PC市场寒冬&#xff0c;大众还需要PC吗&#xff1f; PC&#xff08;个人电脑&#xff09;市场从2016年智能手机兴起之时便进入下滑态势&#xff0c;到2020年疫情发生后&#xff0c;居家办公、在线教育等需求曾给PC市场带来连续六个季度的增长。⁴ 好景不长&#xff0c;进入202…

mybatisplus分页total总数为0

mybatisplus分页total总数为0 背景&#xff1a;最近初始化新项目时&#xff0c;使用mybatisplus分页功能发现 records 有记录&#xff0c;但是 total 总是为0&#xff0c;于是开启了一顿“知识寻求”之路SpringBoot版本 <parent><groupId>org.springframework.boo…

Makerbase CANable V2.0 固件升级或替换

第1部分 应用软件与固件 应用软件CANable V2.0CANable V1.0cangaroocandleLight/slcan(支持CAN FD)candleLight/slcan/cantactBUSMASTER V3.2.2candleLightcandleLight/pcan/cantactTSMastercandleLightcandleLight/pcan/cantactPCAN-Explorer 5、pcan view不支持pcancantacts…

一文带你全面理解 MySQL 中的常用函数

0️⃣前言 MySQL是一种常用的关系型数据库管理系统&#xff0c;它提供了许多内置函数来处理数据。本文将介绍MySQL中的各种常用函数&#xff0c;包括字符串函数、日期函数、数学函数、聚合函数等。 文章目录 0️⃣前言1️⃣字符串函数1.1CONCAT函数1.2SUBSTRING函数1.3REPLACE函…

建设一个网站需要多长时间?

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言网站建设的基本步骤…

【Leetcode60天带刷】day10栈与队列—— 232.用栈实现队列,225. 用队列实现栈

题目&#xff1a; 232. 用栈实现队列 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a; void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移…

Spring Boot 集成 Redisson分布式锁

Redisson 是一种基于 Redis 的 Java 驻留集群的分布式对象和服务库&#xff0c;可以为我们提供丰富的分布式锁和线程安全集合的实现。在 Spring Boot 应用程序中使用 Redisson 可以方便地实现分布式应用程序的某些方面&#xff0c;例如分布式锁、分布式集合、分布式事件发布和订…

旷视研究院获 CVPR 2023 自动驾驶国际挑战赛 OpenLane Topology 赛道冠军

近日&#xff0c;为期三个月的 CVPR 2023 自动驾驶国际挑战赛比赛结果揭晓。旷视研究院在OpenLane Topology 赛道中击败 30 余支国内外队伍&#xff0c;夺得冠军。 自动驾驶技术已经渗透到人们的日常生活中&#xff0c;但是传统的感知方法仍不能满足大家对 L5 级自动驾驶的追逐…

傻瓜式教程--基于FPGA的CYUSB3014双向通信

一、概述 CYUSB3014是赛普拉斯在近几年推出的新一代USB3.0的外设控制器&#xff0c;可以解决USB2.0带宽限制&#xff0c;或者单独开发USB协议和驱动的难题。赛普拉斯将CYUSB3014简称为EZ-USB FX3&#xff0c;具有高度的灵活特性&#xff0c;开发人员只需要下载FX3的固件库&…