在线阅读网站|基于Springboot+Vue开发实现小说阅读网站

news2025/1/16 18:06:54

作者主页:编程指南针

作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师

主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助

收藏点赞不迷路  关注作者有好处

文末获取源码 

项目编号:BS-PT-086

前言:

随着互联网的到来,人们对网络的使用不单单是停留在简单的浏览网页,更多的是得寻找精神上的需求,在这种情况下,人们阅读名著的方式也逐渐发生了改变。而且随着现在人们的工作节奏的加快,人们整块时间减少,碎片化时间增多。在信息社会链接下,我们从互联网接收更多的信息内容。通过开发新颖的名著阅读网站,我们可以实现书籍的信息传播,让用户只在有网络的情况下就可以享受书籍带来的丰富内容。今天,阅读名著也是大量互联网用户的爱好。名著内容多样,可以满足用户对不同情节的追求,并根据用户的喜好选择内容。随之,数字阅读行业热潮到来,渐渐名著网站出现在人们的视线中。

传统的小说网站的特点,前台页面过于复杂以及很多与阅读小说无关的广告弹窗。导致用户点击想看的小说却常常点击到广告,充斥着许多与小说主题、小说内容无关的元素。本身此小说网站就是为了让用户在碎片化的时间里阅读,而现在大多数的网站中观看小说都需要繁琐的注册账号以及观看广告解锁下一章内容。导致违背了小说网站的快捷性和快速获取阅读内容的初衷。

本名著阅读网站的特点,既包含了小说网站的多样性和丰富性,而且剔除了无关阅读的弹窗和繁琐的验证注册等麻烦的流程。对于用户想快速阅读自己想看的内容,只需要利用游客的身份登录即可快速看到名著内容。且本网站包含了名著上传的功能,让用户不仅可以自由阅读的情况下,还可以化身为作者上传自己编写的名著。本网站还包含了分类和搜索功能,可以让用户快捷的找到自己想阅读的名著。假如是不经常在网上看书的游客用户也没有关系,本网站包含热门名著的排行榜,而排行版是根据名著的收藏人数数量实时变化的,让用户不用麻烦的找书本,就可以阅读到当下最受欢迎的名著读本。

一,项目简介

在线名著网站主要给用户提供多种类型的名著进行阅读,用户可以根据自己的喜好,自行根据名著分类去查找自己喜欢阅读的书籍。同时还具有成为作者的机会,用户可以申请成为作者进行名著的编写。还可以根据名著章节的阅读量来获取该网站的虚拟币。本网站包含前后端功能,用户使用前台来阅读书籍,以及书籍的编写。后端管理员可以管理用户人员,审核名著,审核作者,提现审核,广告管理以及名著管理。

登录模块:用户的登录注册可以使用手机号或者邮箱号,来获取验证码,进行账号的登录注册验证。退出登录。

名著阅读模块:用户可以使用分类和搜索框的功能快速的找到自己想阅读的书本,根据名著的收藏量来查看热门名著的排行榜进行阅读。

个人中心模块:有用户个人信息的增删改查,以及用户到作者身份的转变。和钱包的管理,作者可以根据自己名著章节的点击量获取网站的虚拟币、有查看余额、提现的功能。

名著新增模块:作者身份可以编写名著,可以自定义名著的名字,和投放的名著分类。可以编写章节在添加相应的内容进行发布。

名著审核模块:在作者完成作品进行发布之后,后台管理员需要进行审核,审核通过才可以在前台页面查看名著的内容。

作者审核:用户申请成为作者后,后台管理员需要进行审核,审核通过用户才可以转变成作者的身份。

提现管理:作者提现金额后,需要后台审核通过,金额才会提现成功。在未提现成功之前,提现的金额部分都会处于冻结状态。直到通过提现审核才恢复。

广告管理:对于主页面的轮播图中的广告内容进行增删改查操作。

用户管理:对用户信息的增删改查。

名著管理:对名著的删改查。

二,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

后台开发:Springboot+Mybatis

前台开发:Vue+ElementUI

三,系统展示

系统首页

详情信息

在线阅读

个人中心

后台管理

小说审核

作者审核

提现审核

广告管理

用户管理

小说管理

评论管理

分类管理

四,核心代码展示

package com.hua.controller;

import ch.qos.logback.core.joran.util.beans.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hua.handler.Result;
import com.hua.mapper.TypeMapper;
import com.hua.mapper.UserMapper;
import com.hua.pojo.*;
import com.hua.service.NovelService;
import com.hua.service.TypeService;
import com.hua.service.UserService;
import com.hua.service.impl.AuthorToexamineServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

@RestController
//@Controller
@RequestMapping("/novel")
//@ConditionalOnMissingBean(AuthorToexamineServiceImpl.class)  //当缺失这个AuthorToexamineServiceImpl的时候,条件成立 ->NovelController ->bean
//@Conditional    mybatis plus springdatasource
public class NovelController {

    @Resource
    private NovelService novelService;

    @Resource
    private UserService userService;

    @Autowired
    private TypeMapper typeMapper;

    @Autowired
    private UserMapper userMapper;


    /**
     * 条件分页查询Novel
     * @param pageNum
     * @param pageSize
     * @param search
     * @return
     */
    @GetMapping
    /**
     * @RequestParam用于将请求参数区数据映射到功能处理方法的参数上。defaultValue:默认值,表示如果请求中没有同名参数时的默认值
     *
     */
    @ResponseBody
    public Result<?> NovelFindPage(@RequestParam(defaultValue = "1") Integer pageNum,
                                  @RequestParam(defaultValue = "10") Integer pageSize,
                                  @RequestParam(defaultValue = "") String search){
        //mybatis-plus中的构造器,创建一个构造器
        LambdaQueryWrapper<Novel> wrapper=new LambdaQueryWrapper<Novel>();
        //StuUtil工具类内置了很多方法,isNotBlamk判断字符串是否为空
//        if (StrUtil.isNotBlank(search)){
            //where  "novelName"  like "123" limit 2,5  1
            wrapper.like(StrUtil.isNotBlank(search),Novel::getNovelName,search);
//        }
        //TODO
        Page<NovelVO> resPage = new Page<>(pageNum,pageSize);
        //limit
        Page<Novel> page = novelService.page(new Page<>(pageNum, pageSize), wrapper);
        //DO=>VO
        BeanUtils.copyProperties(page,resPage,"records");
            //TODO 把DO records也给赋值给VO
        List<Novel> records = page.getRecords();
//        records.stream().map()
        List<NovelVO> list = records.stream().map((item)->{
            NovelVO novelVO = new NovelVO();
            BeanUtils.copyProperties(item,novelVO);
            //根据分类id查询分类名称
            Type type = typeMapper.selectById(novelVO.getTypeId());
            novelVO.setTypeName(type.getTypeName());
            User user = userMapper.selectById(novelVO.getUserId());
            novelVO.setNickName(user.getNickName());
            return novelVO;
        }).collect(Collectors.toList());
        resPage.setRecords(list);
        resPage.setTotal(page.getTotal());
        return Result.success(resPage);
    }

    @DeleteMapping
    //Delete为删除,removeByIds为批量删除
    public Result<?> NovelDelete(@RequestBody Set<String> ids){
        novelService.removeByIds(ids);
        return Result.success();
    }

    //新增一条小说的数据
    @PostMapping("addNovel")
    public Result<?> addNovel(@RequestBody Novel novel){
        novelService.save(novel);
        return Result.success();
    }

    //根据用户id查询多行数据
    @PostMapping("/selectNovel/{userId}")
    public Result<?> selectUser(@PathVariable String userId){
        LambdaQueryWrapper<Novel> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(Novel::getUserId,userId);
        List<Novel> list = novelService.list(wrapper);
        return Result.success(list);
    }

    //根据用户id查询多行数据,点击量全部相加
    @PostMapping("/selectNovelDjl/{userId}")
    public Result<?> selectNovelDjl(@PathVariable String userId){
        LambdaQueryWrapper<Novel> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(Novel::getUserId,userId);
        List<Novel> list = novelService.list(wrapper);
        Integer zongDjl=0;
        for (Novel novel : list) {
            Integer novelHits = novel.getNovelHits();
            zongDjl=novelHits+zongDjl;
        }
        return Result.success(zongDjl);
    }

    //根据分类id查询数据
    @PostMapping("/selectImgName/{typeId}")
    public Result<?> selectImgName(@PathVariable String typeId){
        LambdaQueryWrapper<Novel> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(Novel::getTypeId,typeId);
        List<Novel> list = novelService.list(wrapper);
        return Result.success(list);
    }
    //根据小说id查询内容
    @PostMapping("/selectTitle/{novelId}")
    public Result<?> selectNovel(@PathVariable String novelId){
        Novel byId = novelService.getById(novelId);
        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(User::getUserId,byId.getUserId());
        String nickName = userService.getOne(wrapper).getNickName();
        byId.setUserId(nickName);
        return Result.success(byId);
    }

    根据小说id查询内容,(点击量加1)
    @PostMapping("/selectJiaNovelHits/{novelId}")
    public Result<?> selectJiaNovelHits(@PathVariable String novelId){
        Novel byId = novelService.getById(novelId);
        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(User::getUserId,byId.getUserId());
//        设置点击量加1
        int novelHits = byId.getNovelHits();
        novelHits++;
        byId.setNovelHits(novelHits);
        novelService.updateById(byId);
        String nickName = userService.getOne(wrapper).getNickName();
        byId.setUserId(nickName);
        return Result.success(byId);
    }

    //查询出点击量最高的6位
    @PostMapping("/selectMaxHits")
    public Result<?> selectMaxHits(){
        LambdaQueryWrapper<Novel> wrapper = new LambdaQueryWrapper<>();
        wrapper.orderByDesc(Novel::getNovelHits);
        List<Novel> list = novelService.list(wrapper );
        return Result.success( list.subList(0,6));

    }

    @PutMapping
    //put为更新
    public Result<?> novelUpdate(@RequestBody Novel novel){
        novelService.updateById(novel);
        return Result.success(novel);
    }
}

package com.hua.controller;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hua.handler.Result;
import com.hua.pojo.Novel;
import com.hua.service.NovelService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.Set;

@RestController
@RequestMapping("/novelToexamine")
public class NovelToexamineController {

    @Resource
    private NovelService novelToexamineService;


    @GetMapping
    //Get为查询
    public Result<?> novelToexamineFindPage(@RequestParam(defaultValue = "1") Integer pageNum,
                                  @RequestParam(defaultValue = "10") Integer pageSize,
                                  @RequestParam(defaultValue = "") String search){
        LambdaQueryWrapper<Novel> wrapper= Wrappers.<Novel>lambdaQuery();
        if (StrUtil.isNotBlank(search)){
            wrapper.like(Novel::getNovelId,search);
        }
        Page<Novel> page = novelToexamineService.page(new Page<>(pageNum, pageSize), wrapper);
        return Result.success(page);
    }

    @PutMapping
    //put为更新
    public Result<?> novelToexamineUpdate(@RequestBody Novel novelToexamine ){
        novelToexamineService.updateById(novelToexamine);
        return Result.success();
    }


    @DeleteMapping
    //Delete为删除,removeByIds为批量删除
    public Result<?>WithdrawalDelete(@RequestBody Set<String> ids){
        novelToexamineService.removeByIds(ids);
        return Result.success();
    }
}
package com.hua.controller;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hua.handler.Result;
import com.hua.pojo.User;
import com.hua.service.UserService;
import com.hua.service.WalletService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;
import java.util.Set;


@RestController
@RequestMapping("/user")
public class UserController {

    @Resource
    private UserService userService;
    @Resource
    private WalletService walletService;

    @PostMapping
    //post为新增
    public Result<?> usersave(@RequestBody User user){
        //拿一个User类型的查询条件 where
        LambdaQueryWrapper<User> usersLambdaQueryWrapper = new LambdaQueryWrapper<>();
        //如何查询出数据库中没有该usernam则成功注册,否则用户名重复
        User serviceOne = userService.getOne(usersLambdaQueryWrapper.eq(User::getUserName,user.getUserName()));
        if (serviceOne == null){
            userService.save(user);
            return Result.success(user.getUserId());
        }
        return Result.error("401","用户名存在请重新设置!");
    }

    @PutMapping
    //put为更新
    public Result<?> userUpdate(@RequestBody User user){
        userService.updateById(user);
        return Result.success(user);
    }


    @GetMapping
    //Get为查询
    public Result<?> userFindPage(@RequestParam(defaultValue = "1") Integer pageNum,
                              @RequestParam(defaultValue = "10") Integer pageSize,
                              @RequestParam(defaultValue = "") String search){
        LambdaQueryWrapper<User> wrapper= Wrappers.<User>lambdaQuery();
        if (StrUtil.isNotBlank(search)){
            wrapper.like(User::getNickName,search);
        }
        Page<User> page = userService.page(new Page<>(pageNum, pageSize), wrapper);
        //您可以使用 getRecords 方法来获取 API 请求中指定的所有用户数据。records里面保存了User表中的所有数据
        List<User> records = page.getRecords();
        //循环查询
        records.forEach(item -> {
            /**
             *             selectBanlance的作用是查询出wallet表中的walletId和user表中的的walletId,
             *             传入(user表中的walletId)item.getWalletId()
             *             Long along返回的是wallet表中的余额值
             */
            Long aLong = walletService.selectBalance(item.getWalletId());
            //由于要使用balance(余额)来替换之前表格中的walletId所以要对aLong进行数据类型转换
            item.setWalletId(String.valueOf(aLong));
        });
        return Result.success(page);
    }

    @DeleteMapping
    //Delete为删除,removeByIds为批量删除
    public Result<?> userDelete(@RequestBody Set<String> ids){
        userService.removeByIds(ids);
        return Result.success();
    }
    //根据id查询单行数据
    @PostMapping("/selectUser/{userId}")
    public Result<?> selectUser(@PathVariable String userId){
        User byId = userService.getById(userId);
        return Result.success(byId);
    }
    //查询用户表中所有数据
    @GetMapping("/selectUser")
    public Result<?> selectUser(){
        List<User> list = userService.list();
        return Result.success(list);
    }
}

五,项目总结

1.技术要求

在线名著网站系统采用前后端分离的架构思想,极大的简化了系统的复杂结构,同时前端和后端的分离部署,优化了系统的系统,降低前端和后端之间的耦合性,也为后续的二次开发提供良好的开发环境。

通过观察市场类似的系统以及目前流行的技术,同时参考与开源平台上的开源项目,本系统模块设计的编程语言设计采用java作为基础语言,前端基于VUE实现,后端基于SpringBoot的基础上采用SSM框架集实现。

(1)技术实施方案

通过调研,了解在线名著网站系统的内容及其特点,存在和需要解决的主要问题。确定在线名著网站系统的建设目标、意义及功能需求,分析整个系统架构的组成、设计特点、安全特性。对在线名著网站系统的模块进行分析,用UML图给出相应模块的用例图。然后从简到繁一步步完成功能点,首先编写最基础的登陆注册以及退出登录功能,之后完善前端页面。根据前端功能模块一个个完善功能,在实现后台对用户以及名著的管理。以及前后端数据的交互。

(2)系统测试方案

对系统的实验分为三个阶段。第一阶段对单个功能模块进行实验,确认单个功能模块功能完善,功能点可以正常使用。第二阶段对有交互的功能模块进行两两一对的联动实验,确认多个模块之间数据交互、运行正常。第三阶段对整个系统进行细致的实验与测试,在系统搭建完成之后,模拟正常运营的情况下系统是否存在问题与隐患。

2.工作要求

(1)操作可行性:本系统操作简单,设计了良好的用户交换界面与用户引导,操作简洁明了。操作上可行。

(2)技术可行性:本系统使用Java基础语言和成熟的SSM框架集开发,资料文档齐全。并且系统在市场上已经有成熟的同类型系统案例。技术上可行。

(3)经济可行性:本系统需要的是名著的内容资源,名著的初始内容可以引用我国古代的名著内容,这样就不存在内容侵权。以及后期名著内容是用户自主编写就更加不存在搬运侵权的问题了,还可以通过获取点击量来投放广告达到盈利的效果,因此经济上可行。

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

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

相关文章

探索SpringMVC-HandlerAdapter之RequestMappingHandlerAdapter

前言 在RequestMappingHandlerAdapter的第一篇文章《探索SpringMVC-HandlerAdapter之RequestMappingHandlerAdapter-参数解析》我们从方法调用的角度提出了三个问题。前面两篇分别回答了方法入参、返回值处理这两个问题。而第三个问题则是由异常处理器负责的&#xff0c;不属于…

栈的讲解及实现(图解+代码/C语言)

今天为大家分享的是栈的模拟实现&#xff0c;本文主要讲解如何以数组的形式模拟实现&#xff0c;同时给出链表模拟实现栈的代码。 目录 图解栈的结构数组模拟栈的分步实现 创建并初始化入栈检测栈是否为空出栈获取栈顶元素获取栈内有效元素个数销毁栈 链表模拟实现栈 模拟思…

学习笔记:统计建模方法的比较分析

前言本文介绍了隐马尔可夫模型 (HMM)、最大熵马尔可夫模型 (MEMM) 和条件随机场 (CRF) 的比较分析。 HMM、MEMM 和 CRF 是三种流行的统计建模方法&#xff0c;通常应用于模式识别和机器学习问题。 让我们更详细地探讨每种方法。一、隐马尔可夫模型 (HMM)“隐藏”一词象征着只有…

node ~ zip压缩 文件加密

我们知道zip压缩,文件加密都是基于http的,下面我用用node实现着几个功能 zip压缩/解压 let zlib require(zlib); // 核心 let path require(path); let fs require(fs);// 压缩流 将1.txt压缩成1.txt.gz function gzip(source){ //source文件目录let gzip zlib.createGzi…

[Android]View的事件分发机制(源码解析)

目录 1.分发对象-MotionEvent 2.如何传递事件 1.传递流程 2.事件分发的源码解析 3.主要方法&#xff1a; 4.事件传递中listener 5.滑动冲突如何用事件分发处理 1.分发对象-MotionEvent 事件类型有&#xff1a; 1.ACTION_DOWN-----手指刚接触屏幕 2.ACTION_MOVE------手…

ASIC和FPGA,选择哪种设计比较好?

很多人都觉得同样都是写Verilog的&#xff0c;ASIC和FPGA其实并没有什么区别&#xff0c;其实并不是这样。那么ASIC和FPGA&#xff0c;选择哪种设计比较好&#xff1f;接下来IC修真院就来为大家细细分析。 ASIC (Application Specific Integrated Circuit)&#xff0c;即专用集…

盘点:2022年勒索金额超百万美元的攻击事件

1、哥斯达黎加政府 勒索赎金&#xff1a;2000万美元 这是2022年最受关注的攻击事件&#xff0c;因为这是一个国家首次宣布进入“国家紧急状态”以应对勒索软件攻击。调查显示&#xff0c;从4月中旬到5月初&#xff0c;27个政府机构成为第一波攻击活动的目标。国家财政部数TB数…

生物化学 SY001盘尼西林

盘尼西林的发现与作用原理 发现历史略 青霉素 青霉素Penicillinβ&#xff0d;内酰胺类抗生素&#xff08;β&#xff0d;lactams&#xff09;青霉素类抗生素水溶性好&#xff0c;血消除半衰期大多不超过2小时音译盘尼西林抑制胞壁粘肽合成酶&#xff0c;从而使细菌胞壁缺损…

MOS管的<控制电路>与<防反接电路>

为了方便记忆&#xff0c;我不管D与S&#xff0c;只说MOS管中的二极管方向。 另外G是控制端 这是一篇只管结果的文章&#xff0c;大家只要记住就行。 懂原理vs记结果 懂原理以分析一切现象&#xff0c;但每次使用都要分析一次&#xff1b; 记结果方便使用&#xff0c;但出现问题…

1.1.1-了解什么是计算机

文章目录1 什么是计算机2 计算机硬件3 计算机软件3.1 应用软件3.2 系统软件3.3 主流的电脑操作系统有哪些4 Linux系统4.1 Linux系统介绍4.1 Linux系统版本5 计算机语言5.1 机器语言5.2 汇编语言5.3 人机交互6 计算机操作命令-DOS命令1 什么是计算机 计算机全称&#xff1a;电子…

Java基础学习笔记(十二)—— 数据结构

数据结构1 栈2 队列3 数组4 链表5 二叉树5.1 二叉树5.2 二叉查找树5.3 平衡二叉树5.4 红黑树6 哈希表数据结构是计算机存储、组织数据的方式。是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下&#xff0c;精心选择的数据结构可以带来更高的运行或者存储效率。…

【C++】stack queue priority_queue ...

&#x1f308;感谢阅读East-sunrise学习分享——stack & queue & 容器适配器 & prioity_queue & 反向迭代器 博主水平有限&#xff0c;如有差错&#xff0c;欢迎斧正&#x1f64f;感谢有你 码字不易&#xff0c;若有收获&#xff0c;期待你的点赞关注&#x1f…

SAP ABAP增强 BADI的增强全解析

BADI的全称是Business Add-in&#xff0c;它的主要技术是基于ABAP的对象来实现增强。SAP中BADI的维护事务代码是SE18和SE19&#xff0c;SE18主要是创建及维护BADI对象&#xff0c;而SE19用于维护BADI的实例&#xff0c;即如何来实现BADI对象的功能。 SAP的BADI因系统版本的差别…

K8S Deployment 使用 更新 回滚 扩容

K8S Deployments 使用 & 更新 & 回滚 & 扩容 K8S Deployments 提供比 Replication Controller 、ReplicaSet 更高一级的抽象&#xff0c;也具备更丰富的功能。Deployment对象不仅创建pod&#xff0c;还确保集群中始终运行正确数量的pod&#xff0c;处理可伸缩性&a…

Esp8266+TFT太空人天气时钟

开源项目&#xff0c;只对动手能力有要求&#xff0c;有现成程序 b站演示视频: https://www.bilibili.com/video/BV1ND4y1W7oS/?spm_id_from333.999.0.0 效果图 模块和接线方法 使用ESP8266-12F模块&#xff0c;4M空间。OLED使用1.3寸IPS 240*240点阵彩屏&#xff0c;ST7789…

【Java集合】ArrayList源码分析

目录 一、ArrayList介绍 1.1 简介 1.2 继承体系 二、源码剖析 2.1 成员属性 2.2 构造方法 2.2.1 带int类型的构造方法&#xff1a;ArrayList(int initialCapacity) 2.2.2 无参构造方法&#xff1a;ArrayList() 2.2.3 Collection型构造方法&#xff1a;ArrayList(Collection c) …

flink规则引擎设计思路

在日常工作中我们经常收到一些诸如此类需求&#xff1a;“用户给点击了开屏广告&#xff0c;给用户下发私信”、“用户进入了推荐线&#xff0c;但在60秒内没有任何点击操作&#xff0c;弹框引导用户选择感兴趣的内容”、“用户点赞了某位作者的两篇以上的内容&#xff0c;但并…

C++入门----缺省参数和函数重载

C入门第一讲&#xff1a; 文章目录C入门第一讲&#xff1a;1.C关键字&#xff08;C98&#xff09;2.命名空间2.1命名空间的定义3.C的输入和输出4.缺省参数4.1缺省参数的概念4.2缺省参数的分类4.2.1全缺省参数4.2.2半缺省参数5.函数重载5.1函数重载的概念5.2C支持函数重载的原理…

在 SpringBoot 中 初步使用 MyBatis

这篇文章简单介绍如何初步使用MyBatis框架。MyBatis官网&#xff1a;mybatis – MyBatis 3 | 简介。本文中介绍MyBatis使用在SpringBoot中&#xff0c;Spring帮我们进行了管理&#xff0c;省去了获取sql的步骤。 什么是 MyBatis&#xff1f; MyBatis 是一款优秀的持久层框架&a…

XAML控件宽度为另一控件的一半、静态属性绑定、ObjectDataProvider

控件上当某些数据需要根据其他数据的变化而变化 很多时候&#xff0c;想让某个控件的宽度或者高度是另一个已有控件的一半&#xff0c;一开始打算使用ObjectDataProvider来实现&#xff0c;因为在控件上当某些数据需要根据其他数据的变化而变化时&#xff0c;可以使用ObjectDa…