springboot+mybatis+mysql实现的个人博客管理系统(功能包含登录,栏目管理、文章管理、评论管理、系统设置、用户管理、发布博客、评论等)

news2024/11/24 4:22:29

博客目录

  • springboot+mybatis实现的个人博客管理系统
    • 实现功能截图
    • 系统功能
    • 使用技术
    • 代码
    • 完整源码

springboot+mybatis实现的个人博客管理系统

本系统是一个个人博客管理系统,比较新的框架springboot+mybatis实现,分为普通用户和管理员,普通用户可以发布博客、发表评论、查看博客,管理员可以对栏目、文章、评论、用户等进行管理。
(文末查看完整源码)

实现功能截图

前台首页
请添加图片描述

博客详情’
请添加图片描述

留言
请添加图片描述
栏目管理
请添加图片描述
博客文章管理
请添加图片描述
博客评论管理
请添加图片描述
系统设置
请添加图片描述
用户管理
请添加图片描述

系统功能

本系统实现了以下功能:
1、登录
2、文章管理、新增文章
3、栏目管理
4、评论管理
5、系统设置
6、用户管理
7、留言管理
8、博客详情
9、博客评论

使用技术

数据库:mysql
开发工具:Idea(Myeclispe、Eclipse也可以)
知识点:springboot+mybatis

项目结构
在这里插入图片描述

代码

java端
实体类
Admin.java

package com.lee.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.baomidou.mybatisplus.annotation.TableId;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotEmpty;
import java.io.Serializable;

/**
 * <p>
 * 
 * </p>
 *
 * @author lee
 * @since 2020-02-19
 */
public class Admin extends Model<Admin> {

    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    /**
     * 管理员账户
     */
    @NotEmpty(message = "用户名不能为空!")
    private String username;

    /**
     * 密码
     */
    @NotEmpty(message = "密码不能为空!")
    private String password;

    /**
     * 昵称
     */
    @NotEmpty(message = "昵称不能为空!")
    private String nickname;

    /**
     * 邮箱
     */
    @NotEmpty(message = "邮箱不能为空!")
    @Email(message = "邮箱格式不正确")
    private String email;

    /**
     * 状态
     */
    private Integer status;

    /**
     * 是否超级管理员
     */
    private Integer isSupper;

    /**
     * 创建时间
     */
    private String createTime;

    /**
     * 更新时间
     */
    private String updateTime;

    /**
     * 软删除时间
     */
    private String deleteTime;

    @TableLogic
    private Integer isdel;//逻辑删除字段 0 未删除 1已删除

    public Integer getIsdel() {
        return isdel;
    }

    public void setIsdel(Integer isdel) {
        this.isdel = isdel;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }
    public Integer getIsSupper() {
        return isSupper;
    }

    public void setIsSupper(Integer isSupper) {
        this.isSupper = isSupper;
    }
    public String getCreateTime() {
        return createTime;
    }

    public void setCreateTime(String createTime) {
        this.createTime = createTime;
    }
    public String getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(String updateTime) {
        this.updateTime = updateTime;
    }
    public String getDeleteTime() {
        return deleteTime;
    }

    public void setDeleteTime(String deleteTime) {
        this.deleteTime = deleteTime;
    }

    @Override
    protected Serializable pkVal() {
        return this.id;
    }

    @Override
    public String toString() {
        return "SbAdmin{" +
        "id=" + id +
        ", username=" + username +
        ", password=" + password +
        ", nickname=" + nickname +
        ", email=" + email +
        ", status=" + status +
        ", isSupper=" + isSupper +
        ", createTime=" + createTime +
        ", updateTime=" + updateTime +
        ", deleteTime=" + deleteTime +
        "}";
    }
}

Article.java

package com.lee.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;

import javax.validation.constraints.NotEmpty;
import java.io.Serializable;

/**
 * <p>
 * 
 * </p>
 *
 * @author lee
 * @since 2020-02-22
 */
public class Article extends Model<Article> {

    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    /**
     * 标题
     */
    @NotEmpty(message = "文章标题不能为空")
    private String title;

    /**
     * 概要
     */
    private String artdesc;

    /**
     * 标签
     */
    @NotEmpty(message = "文章标签不能为空")
    private String tags;

    /**
     * 内容
     */
    private String content;

    /**
     * 是否推荐
     */
    private Integer isTop;

    /**
     * 所属导航id
     */
    private Integer cateId;

    /**
     * 创建时间
     */
    private String createTime;

    /**
     * 更新时间
     */
    private String updateTime;

    /**
     * 软删除
     */
    private String deleteTime;

    /**
     * 软删除标记位
     */
    @TableLogic
    private Integer isdel;

    /**
     * 添加用户id
     */
    private Integer memberId;
    /**
     * 作者
     */
    @NotEmpty(message = "文章作者不能为空")
    private String authorname;
    /**
     * 浏览次数
     */
    private Integer viewnum;

    /**
     * 评论次数
     */
    private Integer commentnum;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }
    public String getTitle() {
        return title;
    }

    public String getArtdesc() {
        return artdesc;
    }

    public void setArtdesc(String artdesc) {
        this.artdesc = artdesc;
    }

    public void setTitle(String title) {
        this.title = title;
    }
    public String getTags() {
        return tags;
    }

    public void setTags(String tags) {
        this.tags = tags;
    }
    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
    public Integer getIsTop() {
        return isTop;
    }

    public void setIsTop(Integer isTop) {
        this.isTop = isTop;
    }
    public Integer getCateId() {
        return cateId;
    }

    public void setCateId(Integer cateId) {
        this.cateId = cateId;
    }
    public String getCreateTime() {
        return createTime;
    }

    public void setCreateTime(String createTime) {
        this.createTime = createTime;
    }
    public String getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(String updateTime) {
        this.updateTime = updateTime;
    }
    public String getDeleteTime() {
        return deleteTime;
    }

    public void setDeleteTime(String deleteTime) {
        this.deleteTime = deleteTime;
    }
    public Integer getIsdel() {
        return isdel;
    }

    public void setIsdel(Integer isdel) {
        this.isdel = isdel;
    }
    public Integer getMemberId() {
        return memberId;
    }

    public void setMemberId(Integer memberId) {
        this.memberId = memberId;
    }
    public Integer getViewnum() {
        return viewnum;
    }

    public void setViewnum(Integer viewnum) {
        this.viewnum = viewnum;
    }
    public Integer getCommentnum() {
        return commentnum;
    }

    public void setCommentnum(Integer commentnum) {
        this.commentnum = commentnum;
    }

    public String getAuthorname() {
        return authorname;
    }

    public void setAuthorname(String authorname) {
        this.authorname = authorname;
    }

    @Override
    protected Serializable pkVal() {
        return this.id;
    }

    @Override
    public String toString() {
        return "Article{" +
        "id=" + id +
        ", title=" + title +
        ", desc=" + artdesc +
        ", tags=" + tags +
        ", authorname" + authorname +
        ", content=" + content +
        ", isTop=" + isTop +
        ", cateId=" + cateId +
        ", createTime=" + createTime +
        ", updateTime=" + updateTime +
        ", deleteTime=" + deleteTime +
        ", isdel=" + isdel +
        ", memberId=" + memberId +
        ", viewnum=" + viewnum +
        ", commentnum=" + commentnum +
        "}";
    }
}

service层
AdminServiceImpl.java

package com.lee.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lee.entity.Admin;
import com.lee.mapper.AdminMapper;
import com.lee.service.AdminService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Map;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author lee
 * @since 2020-02-19
 */
@Service
public class AdminServiceImpl extends ServiceImpl<AdminMapper, Admin> implements AdminService {
    @Autowired
    private AdminMapper adminMapper;

    /**
     * 根据用户名和密码获取管理员信息
     * @param username
     * @param password
     * @return
     */
    public Admin getInfoByUsernameAndPassword(String username, String password){
       Admin admin =  adminMapper.selectOne(new QueryWrapper<Admin>().eq("username",username).eq("password",password));
        return admin;
    }

    /**
     * 根据查询条件获取管理员列表信息
     * @param queryParam
     * @param offset
     * @param size
     * @return
     */
    public  IPage<Map<String, Object>> getPageInfo(Map<String, Object> queryParam,int offset,int size){
        QueryWrapper<Admin> queryWrapper = new QueryWrapper();
        if(queryParam.get("username") != null) {
            queryWrapper.like("username",queryParam.get("username"));
        }
        if(queryParam.get("nickname") != null) {
            queryWrapper.like("nickname",queryParam.get("nickname"));
        }

        if(queryParam.get("email") != null) {
            queryWrapper.like("email",queryParam.get("email"));
        }
        queryWrapper.orderByDesc("create_time");
        Page<Admin> page = new Page<Admin>(offset/size +1,size);
        IPage<Map<String, Object>> mapIPage = adminMapper.selectMapsPage(page, queryWrapper);
        return mapIPage;
    }

    /**
     * 根据用户名查询信息,只取一条
     * @param username
     * @return
     */
    public Admin getByUsername(String username){
       return  adminMapper.selectOne(new QueryWrapper<Admin>().eq("username",username));
    }

    /**
     * 验证用户名规则
     * @param username
     * @return
     */

}

ArticleServiceImpl.java

package com.lee.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.lee.entity.Article;
import com.lee.entity.Comment;
import com.lee.mapper.ArticleMapper;
import com.lee.mapper.CommentMapper;
import com.lee.service.ArticleService;
import com.lee.service.CommentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author lee
 * @since 2020-02-22
 */
@Service
public class ArticleServiceImpl extends ServiceImpl<ArticleMapper, Article> implements ArticleService {
    @Autowired
    ArticleMapper articleMapper;
    @Autowired
    CommentMapper commentMapper;

    public IPage<Map<String,Object>> getPageInfo(Map<String,Object> queryParam,int offset,int size){
        QueryWrapper<Article> queryWrapper = new QueryWrapper<>();
        if(queryParam.get("title") != null) {
            queryWrapper.like("title",queryParam.get("title"));
        }
        queryWrapper.orderByDesc("create_time");
        Page<Article> page = new Page<Article>(offset/size+1,size);
        IPage<Map<String,Object>> mapIPage = articleMapper.selectMapsPage(page,queryWrapper);
        return mapIPage;
    }
    public IPage<Map<String,Object>> getPageInfoByPageNum(Map<String,Object> queryParam,int pagenum,int size){
        QueryWrapper<Article> queryWrapper = new QueryWrapper<>();
        if(queryParam.get("title") != null) {
            queryWrapper.like("title",queryParam.get("title"));
        }
        if(queryParam.get("cateid") != null) {
            queryWrapper.eq("cate_id",queryParam.get("cateid"));
        }
        queryWrapper.orderByDesc("create_time");
        Page<Article> page = new Page<Article>(pagenum,size);
        IPage<Map<String,Object>> mapIPage = articleMapper.selectMapsPage(page,queryWrapper);
        return mapIPage;
    }

    public boolean deleteArticleAndCommentById(Integer id){
        commentMapper.deleteByArticleId(id);
        return SqlHelper.delBool(articleMapper.deleteById(id));
    }

    public Article getNextInfo(Map<String,Object> searchParam){
        return this.articleMapper.getNextInfo(searchParam);
    }
    public Article getPreInfo(Map<String,Object> searchParam){
        return this.articleMapper.getPreInfo(searchParam);
    }
}

controller层
ArticleController.java

package com.lee.controller.admin;


import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.lee.common.DataGrid;
import com.lee.common.DateTimeUtil;
import com.lee.common.Message;
import com.lee.entity.Admin;
import com.lee.entity.Article;
import com.lee.service.ArticleService;
import com.lee.service.CateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import org.springframework.stereotype.Controller;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author lee
 * @since 2020-02-22
 */
@Controller
@RequestMapping("/admin/article")
public class ArticleController extends BasicController {
    @Autowired
    ArticleService articleService;
    @Autowired
    CateService cateService;
    @GetMapping("list")
    public String list(){
        return "admin/article/list";
    }
    @PostMapping("findList")
    @ResponseBody
    public DataGrid findList(@RequestBody JSONObject jsonObject){
        Map<String, Object> searchParams = (HashMap<String, Object>) jsonObject.get("search");
        int offset = "".equals(jsonObject.getString("offset")) ? 0 : jsonObject.getIntValue("offset");
        int size = "".equals(jsonObject.getString("limit")) ? 10 : jsonObject.getIntValue("limit");

        IPage<Map<String, Object>> page = articleService.getPageInfo(searchParams, offset, size);

        DataGrid result = new DataGrid();
        result.setTotal(page.getTotal());
        result.setRows(page.getRecords());
        return result;
    }
    @GetMapping("add")
    public String add(Model model) {
        model.addAttribute("cateInfos",cateService.getList());
        return "admin/article/add";
    }

    @PostMapping("add")
    @ResponseBody
    public Message doAdd(@Validated Article article, HttpServletRequest request){
        try {
            Admin admin = getCurrentUser(request);
            if(admin != null) {
                if(article.getIsTop() == null) {
                    article.setIsTop(0);
                }
                article.setCreateTime(DateTimeUtil.nowTimeStr());
                article.setMemberId(admin.getId());
                articleService.save(article);
                return Message.success("文章添加成功!");
            } else {
                return Message.fail("登录超时,请重新登录!",null,"/admin/login");
            }
        } catch (Exception e) {
            return Message.fail("文章数据保存异常,保存失败!");
        }

    }
    @PostMapping("top")
    @ResponseBody
    public Message top(@RequestParam(value = "id")Integer id,@RequestParam(value = "istop")Integer istop){
        try{
           Article article =  articleService.getById(id);
           if(article != null) {
               if(istop == 1) {
                   article.setIsTop(0);
               } else if(istop == 0) {
                   article.setIsTop(1);
               }
               articleService.updateById(article);
               return Message.success("操作成功!");
           } else {
               return Message.fail("文章不存在或已被删除,操作失败!");
           }
        } catch (Exception e) {
            return Message.fail("文章推荐操作处理异常!");
        }
    }
    @GetMapping("/update/{id}")
    public String update(@PathVariable Integer id,Model model){
       Article article =  articleService.getById(id);
        model.addAttribute("cateInfos",cateService.getList());
        model.addAttribute("articleInfo",article);
       return "admin/article/update";
    }
    @PostMapping("/update")
    @ResponseBody
    public Message doUpdate(@Validated Article article){
        try{
            Article articleInfo = articleService.getById(article.getId());
            if(articleInfo != null) {
                if(article.getIsTop() == null) {
                    articleInfo.setIsTop(0);
                } else {
                    articleInfo.setIsTop(article.getIsTop());
                }

                articleInfo.setTitle(article.getTitle());
                articleInfo.setAuthorname(article.getAuthorname());
                articleInfo.setTags(article.getTags());
                articleInfo.setArtdesc(article.getArtdesc());
                articleInfo.setContent(article.getContent());
                articleInfo.setCateId(article.getCateId());
                articleInfo.setUpdateTime(DateTimeUtil.nowTimeStr());
                articleService.updateById(articleInfo);
                return Message.success("文章修改成功!");
            } else {
                return Message.fail("文章不存在或已被删除!");
            }
        } catch (Exception e) {
            return Message.fail("文章修改保存异常,操作失败!");
        }
    }
    @PostMapping("delete")
    @ResponseBody
    public Message delete(@RequestParam(value = "ids") List<Integer> ids) {
        try {
            for (int id : ids) {
                articleService.deleteArticleAndCommentById(id);
            }
            return Message.success("文章删除成功");
        } catch (Exception e) {
            return Message.fail("文章删除异常!");
        }
    }

}

UserController.java

package com.lee.controller.admin;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.lee.common.DataGrid;
import com.lee.common.DateTimeUtil;
import com.lee.common.Message;
import com.lee.entity.Admin;
import com.lee.service.AdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
@RequestMapping("/admin/user")
public class UserController extends BasicController {
    @Autowired
    AdminService adminService;
    /**
     * 管理员管理列表页面跳转
     * @return
     */
    @RequestMapping("list")
    public String list(HttpServletRequest request){
        //TODO 超级管理员权限控制
        if(getCurrentUser(request).getIsSupper() == 1) {
            return "admin/user/list";
        } else {
            return "admin/home";
        }

    }

    /**
     * 加载列表数据
     * @param jsonObject
     * @return
     */
    @RequestMapping("findList")
    @ResponseBody
    public  DataGrid findList(@RequestBody JSONObject jsonObject){
        //获取查询参数
        Map<String, Object> searchParams = (HashMap<String, Object>)jsonObject.get("search");
        int offset = "".equals(jsonObject.getString("offset"))?0:jsonObject.getIntValue("offset");
        int size = "".equals(jsonObject.getString("limit"))?10:jsonObject.getIntValue("limit");

        IPage<Map<String, Object>> page = adminService.getPageInfo(searchParams,offset,size);
        DataGrid result = new DataGrid();
        result.setRows(page.getRecords());
        result.setTotal(page.getTotal());
        return result;
    }

    /**
     * 管理员添加页面跳转
     * @return
     */
    @GetMapping("add")
    public String add(){

        return "admin/user/add";
    }
    @PostMapping("add")
    @ResponseBody
    public Message doAdd(@Validated Admin admin,@RequestParam(value = "confirmpassword") String confirmpassword){
        try{
            //TOTO 可以在service里添加条件验证规则
            if(adminService.getByUsername(admin.getUsername()) != null) {
                return Message.fail("该用户已存在!");
            }
            if(!confirmpassword.equals(admin.getPassword())) {
                return Message.fail("密码和确认密码不一致!");
            }
            admin.setCreateTime(DateTimeUtil.nowTimeStr());
            adminService.save(admin);
            return Message.success("管理员创建成功!");
        } catch (Exception e) {
            return Message.fail("创建保存异常!");
        }
    }


    /**
     * 用户名重复验证
     * @param username
     * @return
     */
    @PostMapping("check")
    @ResponseBody
    public boolean check(@RequestParam String username){
        if(StringUtils.isEmpty(username)){
            return false;
        }
        Admin admin = adminService.getByUsername(username);
        if(admin != null) {
            return false;
        }
        return true;
    }

    @PostMapping("status")
    @ResponseBody
    public Message status(@RequestParam Integer id){
        try {
            Admin admin = adminService.getById(id);
            if (admin != null) {
                String message = admin.getStatus() == 0 ? "管理员禁用成功!" : "管理员启用成功!";
                admin.setStatus(admin.getStatus() == 0 ? 1 : 0);
                adminService.updateById(admin);
                return Message.success(message);
            } else {
                return Message.fail("管理员信息不存在或已被删除!");
            }
        }catch ( Exception e) {
            return Message.fail("数据操作异常");
        }
    }

    /**
     * 修改页面跳转
     */
    @GetMapping("update/{id}")
    public String update(@PathVariable Integer id, Model model){
        Admin admin = adminService.getById(id);
        if(admin != null) {
            model.addAttribute("adminInfo",admin);
        } else {
            //TODO 对象已删除,跳转到错误页面
        }
        return "admin/user/update";
    }

    /**
     * 管理员修改数据提交
     * @param admin
     * @return
     */
    @PostMapping("update")
    @ResponseBody
    public Message doUpdate(@Validated Admin admin, HttpServletRequest request){
        try {
            String oldpassword = request.getParameter("oldpassword");
            String newpassword = request.getParameter("newpassword");
           Admin adminInfo = adminService.getById(admin.getId());
           if(StringUtils.isEmpty(newpassword)) {//TODO 增加密码规则验证
               return Message.fail("新密码不能为空");
           }
           if(adminInfo != null) {
               if(oldpassword.equals(adminInfo.getPassword())) {
                   adminInfo.setPassword(newpassword);
                   adminInfo.setNickname(admin.getNickname());
                   adminInfo.setEmail(admin.getEmail());
                   adminInfo.setIsSupper(admin.getIsSupper());
                   adminInfo.setUpdateTime(DateTimeUtil.nowTimeStr());
                   adminService.updateById(adminInfo);
                   return Message.success("管理员信息修改成功");
               } else {
                   return Message.fail("原密码输入错误");
               }
           } else {
               return Message.fail("管理员不存在或已被删除");
           }
        } catch (Exception e) {
            return Message.fail("修改失败");
        }

    }

    @GetMapping("view/{id}")
    public String view(@PathVariable Integer id,Model model){
        Admin adminInfo = adminService.getById(id);
        if(adminInfo != null) {
            model.addAttribute("adminInfo",adminInfo);
        } else{
            //TODO 跳转错误页面
        }
        return "admin/user/view";
    }
    @PostMapping("delete")
    @ResponseBody
    public Message delete(@RequestParam(value = "ids") List<Integer> ids){
        try {
            for (int id :ids) {
                adminService.removeById(id);
            }
            return Message.success("删除成功");
        } catch (Exception e){
           return Message.fail("删除异常!");
        }
    }
}

完整源码

觉得有用,记得一键三连哦!

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

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

相关文章

【软件测试】测试人接手新应用程序怎么测?看看这几个方法......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 应用程序很复杂的&a…

三、数据链路层(三)差错控制

目录 3.1检错编码 3.1.1奇偶校验码 3.1.2循环冗余码&#xff08;CRC&#xff09; 3.2纠错编码 3.2.1海明码 传输差错可分为两种&#xff1a; 位错&#xff1a;帧中某些位出现了差错&#xff0c;也称比特差错、误码。帧错&#xff1a;帧的丢失、重复或失序等错误。 通常利…

面试题:数据结构和算法

1、时间复杂度解释一下 算法的时间复杂度&#xff0c;用来度量算法的运行时间&#xff0c;记作: T(n) O(f(n))。它表示随着 输入大小n 的增大&#xff0c;算法执行需要的时间的增长速度可以用 f(n) 来描述。 当 T(n) c&#xff0c;c 为一个常数的时候&#xff0c;我们说这个…

[附源码]Python计算机毕业设计Django基于vue+mysql开发的考试系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Java web 2022跟学尚硅谷(九)书城项目

Java web 2022跟学尚硅谷九书城项目需求分析数据库设计ER图书城1.0简单部署项目类图相关代码UserControllerUserDAOImplUserDAOBookCartItemOrderOrderItemUserUserServiceImplUserServiceapplicationContext.xml书城1.1实现功能1. 用户登录2. 首页图书列表展示3. 首页价格筛选…

Vue3-ElemenPlu,全栈开发后台系统1-1-2-9第一章,第二章前端系统架构设计

Vue3+ElementPlus Lo2+MongoDB 菜单按钮权限,JWT认证,审批流,常规的CRUD,模块化,组件化 技术栈: 架构设计,vue3全家桶,koa2, 权限: Role-Based A

[附源码]Node.js计算机毕业设计辅导员班级量化管理系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

IMX6启动流程

目录 1. 流程图 2. u-boot.imx的构造 1. 流程图 正常情况下&#xff0c;一台IMX6设备的启动路径就是图中自上而下最左边那条路&#xff1a; 启动/复位后先检查CPU的ID(每颗芯片独一无二) ------> 检查复位状态(有没有按下复位键) ------> 检查boot模式(mmc? USB? SPI…

ARM寄存器组织(常见专用寄存器、控制寄存器CPSR)

目录 一、寄存器的概念 1、什么是寄存器&#xff1f; 2、寄存器的分类 3、不同工作模式下使用的寄存器 二、常见专用寄存器 1、R15&#xff08;PC,Program Counter&#xff09; 2、R14&#xff08;LR,Link Register&#xff09; 3、R13&#xff08;SP,Stack Pointer&am…

FineReport大数据分析工具- 统一切换轮播图表接口

1. 概述 1.1 版本 报表服务器版本 功能变动 11.0 - 1.2 预期效果 某些场景下&#xff0c;需要让一张报表内的多个轮播图表同时切换。那么该如何实现呢&#xff1f;效果如下图所示&#xff1a; 1.3 实现思路 按钮添加点击事件&#xff0c;通过 JS 脚本调用接口统一切换轮播…

【模拟电路】431基准电压源

项目简介 概述 431电压基准芯片为3脚稳压集成电路&#xff0c;431基准电压源具有良好的热稳定性能的&#xff0c;三端可调分流&#xff0c;也被称为电压调解器或三端取样集成电路。凭借体积小、重量轻、精度高、稳定可靠、基准电压精密可调、输出电流大&#xff0c;且价格便宜…

LightDock、PatchDock蛋白蛋白对接软件linux端命令行使用

本文实在ubuntu下操作 DDB1-CRBN.pdb 、brd4.pdb 是需要对接的两个pdb蛋白文件 1、PatchDock 网页版&#xff1a;https://bioinfo3d.cs.tau.ac.il/PatchDock/php.php PatchDock有网页版&#xff0c;如下&#xff1b;软件版需要申请获取下载链接 参考&#xff1a;https://bioi…

QT4.8.7 打开Mupdf

一.Win10环境 1.Win10 Visual Studio 2017 安装 这个直接安装了 a.打开mupdf 源码 b.编译源码 参考这几个贴子 在Qt中调用Mupdf库进行pdf显示 mupdf-1.17.0 源代码编译、下载 qt vc pdf阅读器 我用的是mupdf-1.11-source的&#xff0c;用VS2017打开会有这个问题 c.修改配…

移植MQTT-C库(附源码)

Software (mqtt.org)中mqtt客户端的c库里面有一个叫MQTT-C的库&#xff0c;就2个实现文件&#xff0c;算比较简单的了&#xff0c;实现了基本的mqtt客户端功能&#xff0c;移植一下试试。 我的移植代码放在我的资源里面&#xff1a;https://download.csdn.net/download/oushao…

BigInteger类和BigDecimal类

BigInteger类 BigInteger适合保存比较大的整型 当在编程中遇到需要保存一个特别大的数字&#xff0c;比如地球的人口。 这时如果用long类型保存可能都不够了&#xff0c;此时就需要用到BigInteger BigInteger不能直接*/add()加subtract()减multiply()乘divide()除 使用演示&…

推荐系统学习笔记-论文研读--渐进分层抽取的多任务学习模型

研究背景 多任务相关性的复杂性和竞争性&#xff0c;MTL模型往往会出 现性能退化和负迁移跷跷板现象&#xff0c;即一项任务的性能往往会因影响其他任 务的性能而得到提高 研究成果 跷跷板现象的发现&#xff0c;MTL由于复杂的内在关联性而没有优于相应的单任务模型从联合表…

[附源码]Node.js计算机毕业设计仿咸鱼二手物品交易系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

11月CPI超预期放缓,下一步加息基调且看今晚

随着2022年最后一次美国“通胀报告”的公布&#xff0c;美联储未来政策走向决议将迎来关键时刻&#xff01;12月13日晚&#xff0c;美国劳工部公布的报告显示&#xff0c;美国11月CPI同比增长7.1%&#xff0c;超预期放缓&#xff0c;增速低于预期值7.3%和前值 7.7%。美国11月核…

SSM个人饮食管理系统

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 个人饮食管理系统 网站前台&#xff1a;关于我们、联系我们、新闻信息、食谱信息、交流信息 管理员功能&#xff1a; 1、…

JavaScript(四):流程控制

流程控制if语句if else 语句&#xff08;双分支语句&#xff09;if -else if语句&#xff08;多分支语句&#xff09;三元表达式switch语句for循环while循环do while 循环continue关键字break关键字if语句 语法结构 if&#xff08;条件表达式&#xff09;{ //条件成立执行的代…