招聘求职系统|基于Springboot+Vue+Nodejs实现求职招聘系统

news2024/12/26 20:51:22

作者主页:编程指南针

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

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

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

文末获取源码 

项目编号:BS-PT-080

前言:

由CNNIC最新数据表明,截止2022年7月,互联网普及率达78.6%[数据来源于中国互联网络信息中心、中国互联网络发展状况统计报告]。相较于传统的招聘方式,越来越多的人选择网络招聘的渠道进行求职和招聘,这将进一步促进网络招聘行业的进步。开发求职招聘平台更加具有意义,网络招聘有着诸多的优势,主要体现在覆盖面广、信息传递快,资源丰富,招聘职位多样化,下面从以下五个点具体介绍网络招聘的优势:

1、覆盖面广。互联网的覆盖是以往任何媒介都无法比拟的,它的触角可以轻易地延伸到世界的每一个角落。网络招聘依托于互联网的这个特点,达到了传统招聘方式无法获得的效果。

2、时效性强。网络招聘的双方通过交互式的网上登陆和查询完成信息的交流。这种方式与传统招聘方式不同,它不强求时间和空间上的绝对一致,方便了双方时间的选择。互联网本身不受时间、地域限制,也不受服务周期和发行渠道限制。它不仅可以迅速、快捷地传递信息,而且还可以瞬问更新信息。这种基于招聘双方主动性的网上交流,于无声无息之间,完成了及时、迅捷的互动。

3、成本更低。网络招聘在节约费用上有很大的优势。对于毕业生来说,通过轻点鼠标即可完成个人简历的传递,原本一个月才能完成的信息整理、发布工作,现在可能只要半天就能够完成。这既节约了复印、打印费用,还省却了一番鞍马劳顿。对用人单位来讲,网络招聘的成本更低。

4、针对性强。网络招聘是一个跨时空的互动过程,对供求双方而言都是主动行为,无论是用人单位还是个人都能根据自己的条件在网上进行选择。这种积极的互动,减少了招聘和应聘过程中的盲目行为。一些大型的人才招聘网站都提供了个性化服务,如快捷搜索方式,条件搜索引擎等,这进一步加强了网络招聘的针对性。

5、筛选功能。构成“网民”主体的是一个年轻、高学历、向往未来的群体。通过上网,招聘者就已经对应聘者的基本素质有了初步的了解,相当于已经对他们进行了一次小型的计算机和英文的测试,对应聘者作了一次初步筛选。

一,项目简介

(1)EKKO招聘平台系统的用户共分为三类类:个人用户、企业用户、管理员。

  1. 求职用户可以管理自己的信息,管理自己的简历,也可以实时浏览企业发布的招聘信息,按自己的要求筛选出合适的企业从而决定报名,并可以在企业应答之后收到相应的回复。求职用户的用例图如图3-2所示。

图3-2  求职用户用例图

  1. 企业用户可以管理本公司的登记信息,管理企业用户信息,进行企业认证,发布招聘岗位,也可以实时浏览求职者投递的简历进行筛选,简历通过的就可以发送面试通知。企业用户的用例图如图3-3所示。

图3-3  企业用户用例图

  1. 管理员可以进行用户管理、增删改查二级管理员、为后台系统的用户分配权限、对后台的公告进行增删改查、手动操作企业认证审核的流程、可以对求职用户和企业用户信息和公司信息进行导入导出,方便统计数据。管理员的用例图如图3-4所示。

图3-4  管理员用例图

本系统的功能主要有求职用户管理功能,企业用户管理功能、管理员管理功能,简历管理功能,求职申请管理功能,招聘管理功能,权限管理,企业入驻管理,用户信息统计管理,公告管理。

10大核心功能描述如下:

求职用户管理功能:用户信息注册、修改信息、求职用户登录、查看个人信息、上传简历附件。

企业用户管理功能:企业信息注册、修改信息、企业认证、企业用户登录、查看个人信息。

简历管理功能:求职用户生成简历、修改简历、查看简历、上传简历附件。

求职管理功能:求职用户查看已投递岗位,选择投递岗位。

招聘管理功能:企业用户发布招聘岗位、撤销招聘岗位、筛选用户已投递的简历、发送面试通知。

权限管理功能:管理员给用户分配角色、给角色分配权限。

企业入驻管理功能:管理员审核企业提交的认证材料(企业Logo、营业执照)企,审核通过则认证成功,反之认证失败。

用户统计管理功能: 管理员导入用户信息、导出用户信息、下载导入用户信息模板。

公告管理功能: 管理员发布公告、修改公告、删除公告。

管理员管理功能:创建二级管理员、删除二级管理员、修改二级管理员、查询二级管理员、管理员登录。

功能具体信息分析如下:

二,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

后台开发技术:Springboot+Mybatis

前台开发技术:Vue+Nodejs+EelementUI

三,系统展示

6.1 登录界面原型

6.2 注册界面原型

6.3 首页界面原型

6.4 岗位展示页面原型

6.5 岗位详情页面原型

6.6 个人中心页面原型

6.7 简历信息页面原型

6.8 后台管理登录原型

6.9 后台管理首页原型

6.10 公司管理页面原型

6.11 岗位分类页面原型

6.12 招聘信息原型

6.13 简历投递信息原型

四,核心代码展示

package com.zeus.web.controller.system;

import com.zeus.common.annotation.Log;
import com.zeus.common.constant.UserConstants;
import com.zeus.common.core.controller.BaseController;
import com.zeus.common.core.domain.AjaxResult;
import com.zeus.common.core.domain.entity.SysMenu;
import com.zeus.common.enums.BusinessType;
import com.zeus.common.utils.StringUtils;
import com.zeus.system.service.ISysMenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 菜单信息
 * 
 * @author
 */
@RestController
@RequestMapping("/system/menu")
public class SysMenuController extends BaseController
{
    @Autowired
    private ISysMenuService menuService;

    /**
     * 获取菜单列表
     */
    @PreAuthorize("@ss.hasPermi('system:menu:list')")
    @GetMapping("/list")
    public AjaxResult list(SysMenu menu)
    {
        List<SysMenu> menus = menuService.selectMenuList(menu, getUserId());
        return AjaxResult.success(menus);
    }

    /**
     * 根据菜单编号获取详细信息
     */
    @PreAuthorize("@ss.hasPermi('system:menu:query')")
    @GetMapping(value = "/{menuId}")
    public AjaxResult getInfo(@PathVariable Long menuId)
    {
        return AjaxResult.success(menuService.selectMenuById(menuId));
    }

    /**
     * 获取菜单下拉树列表
     */
    @GetMapping("/treeselect")
    public AjaxResult treeselect(SysMenu menu)
    {
        List<SysMenu> menus = menuService.selectMenuList(menu, getUserId());
        return AjaxResult.success(menuService.buildMenuTreeSelect(menus));
    }

    /**
     * 加载对应角色菜单列表树
     */
    @GetMapping(value = "/roleMenuTreeselect/{roleId}")
    public AjaxResult roleMenuTreeselect(@PathVariable("roleId") Long roleId)
    {
        List<SysMenu> menus = menuService.selectMenuList(getUserId());
        AjaxResult ajax = AjaxResult.success();
        ajax.put("checkedKeys", menuService.selectMenuListByRoleId(roleId));
        ajax.put("menus", menuService.buildMenuTreeSelect(menus));
        return ajax;
    }

    /**
     * 新增菜单
     */
    @PreAuthorize("@ss.hasPermi('system:menu:add')")
    @Log(title = "菜单管理", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@Validated @RequestBody SysMenu menu)
    {
        if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu)))
        {
            return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
        }
        else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath()))
        {
            return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
        }
        menu.setCreateBy(getUsername());
        return toAjax(menuService.insertMenu(menu));
    }

    /**
     * 修改菜单
     */
    @PreAuthorize("@ss.hasPermi('system:menu:edit')")
    @Log(title = "菜单管理", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@Validated @RequestBody SysMenu menu)
    {
        if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu)))
        {
            return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
        }
        else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath()))
        {
            return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
        }
        else if (menu.getMenuId().equals(menu.getParentId()))
        {
            return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己");
        }
        menu.setUpdateBy(getUsername());
        return toAjax(menuService.updateMenu(menu));
    }

    /**
     * 删除菜单
     */
    @PreAuthorize("@ss.hasPermi('system:menu:remove')")
    @Log(title = "菜单管理", businessType = BusinessType.DELETE)
    @DeleteMapping("/{menuId}")
    public AjaxResult remove(@PathVariable("menuId") Long menuId)
    {
        if (menuService.hasChildByMenuId(menuId))
        {
            return AjaxResult.error("存在子菜单,不允许删除");
        }
        if (menuService.checkMenuExistRole(menuId))
        {
            return AjaxResult.error("菜单已分配,不允许删除");
        }
        return toAjax(menuService.deleteMenuById(menuId));
    }
}

package com.zeus.web.controller.system;

import com.zeus.common.annotation.Log;
import com.zeus.common.constant.UserConstants;
import com.zeus.common.core.controller.BaseController;
import com.zeus.common.core.domain.AjaxResult;
import com.zeus.common.core.domain.entity.SysDept;
import com.zeus.common.core.domain.entity.SysRole;
import com.zeus.common.core.domain.entity.SysUser;
import com.zeus.common.core.domain.model.LoginUser;
import com.zeus.common.core.page.TableDataInfo;
import com.zeus.common.enums.BusinessType;
import com.zeus.common.utils.StringUtils;
import com.zeus.common.utils.poi.ExcelUtil;
import com.zeus.framework.web.service.SysPermissionService;
import com.zeus.framework.web.service.TokenService;
import com.zeus.system.domain.SysUserRole;
import com.zeus.system.service.ISysDeptService;
import com.zeus.system.service.ISysRoleService;
import com.zeus.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 角色信息
 * 
 * @author 
 */
@RestController
@RequestMapping("/system/role")
public class SysRoleController extends BaseController
{
    @Autowired
    private ISysRoleService roleService;

    @Autowired
    private TokenService tokenService;

    @Autowired
    private SysPermissionService permissionService;

    @Autowired
    private ISysUserService userService;

    @Autowired
    private ISysDeptService deptService;

    @PreAuthorize("@ss.hasPermi('system:role:list')")
    @GetMapping("/list")
    public TableDataInfo list(SysRole role)
    {
        startPage();
        List<SysRole> list = roleService.selectRoleList(role);
        return getDataTable(list);
    }

    @Log(title = "角色管理", businessType = BusinessType.EXPORT)
    @PreAuthorize("@ss.hasPermi('system:role:export')")
    @PostMapping("/export")
    public void export(HttpServletResponse response, SysRole role)
    {
        List<SysRole> list = roleService.selectRoleList(role);
        ExcelUtil<SysRole> util = new ExcelUtil<SysRole>(SysRole.class);
        util.exportExcel(response, list, "角色数据");
    }

    /**
     * 根据角色编号获取详细信息
     */
    @PreAuthorize("@ss.hasPermi('system:role:query')")
    @GetMapping(value = "/{roleId}")
    public AjaxResult getInfo(@PathVariable Long roleId)
    {
        roleService.checkRoleDataScope(roleId);
        return AjaxResult.success(roleService.selectRoleById(roleId));
    }

    /**
     * 新增角色
     */
    @PreAuthorize("@ss.hasPermi('system:role:add')")
    @Log(title = "角色管理", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@Validated @RequestBody SysRole role)
    {
        if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role)))
        {
            return AjaxResult.error("新增角色'" + role.getRoleName() + "'失败,角色名称已存在");
        }
        else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role)))
        {
            return AjaxResult.error("新增角色'" + role.getRoleName() + "'失败,角色权限已存在");
        }
        role.setCreateBy(getUsername());
        return toAjax(roleService.insertRole(role));

    }

    /**
     * 修改保存角色
     */
    @PreAuthorize("@ss.hasPermi('system:role:edit')")
    @Log(title = "角色管理", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@Validated @RequestBody SysRole role)
    {
        roleService.checkRoleAllowed(role);
        roleService.checkRoleDataScope(role.getRoleId());
        if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role)))
        {
            return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,角色名称已存在");
        }
        else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role)))
        {
            return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,角色权限已存在");
        }
        role.setUpdateBy(getUsername());
        
        if (roleService.updateRole(role) > 0)
        {
            // 更新缓存用户权限
            LoginUser loginUser = getLoginUser();
            if (StringUtils.isNotNull(loginUser.getUser()) && !loginUser.getUser().isAdmin())
            {
                loginUser.setPermissions(permissionService.getMenuPermission(loginUser.getUser()));
                loginUser.setUser(userService.selectUserByUserName(loginUser.getUser().getUserName()));
                tokenService.setLoginUser(loginUser);
            }
            return AjaxResult.success();
        }
        return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,请联系管理员");
    }

    /**
     * 修改保存数据权限
     */
    @PreAuthorize("@ss.hasPermi('system:role:edit')")
    @Log(title = "角色管理", businessType = BusinessType.UPDATE)
    @PutMapping("/dataScope")
    public AjaxResult dataScope(@RequestBody SysRole role)
    {
        roleService.checkRoleAllowed(role);
        roleService.checkRoleDataScope(role.getRoleId());
        return toAjax(roleService.authDataScope(role));
    }

    /**
     * 状态修改
     */
    @PreAuthorize("@ss.hasPermi('system:role:edit')")
    @Log(title = "角色管理", businessType = BusinessType.UPDATE)
    @PutMapping("/changeStatus")
    public AjaxResult changeStatus(@RequestBody SysRole role)
    {
        roleService.checkRoleAllowed(role);
        roleService.checkRoleDataScope(role.getRoleId());
        role.setUpdateBy(getUsername());
        return toAjax(roleService.updateRoleStatus(role));
    }

    /**
     * 删除角色
     */
    @PreAuthorize("@ss.hasPermi('system:role:remove')")
    @Log(title = "角色管理", businessType = BusinessType.DELETE)
    @DeleteMapping("/{roleIds}")
    public AjaxResult remove(@PathVariable Long[] roleIds)
    {
        return toAjax(roleService.deleteRoleByIds(roleIds));
    }

    /**
     * 获取角色选择框列表
     */
    @PreAuthorize("@ss.hasPermi('system:role:query')")
    @GetMapping("/optionselect")
    public AjaxResult optionselect()
    {
        return AjaxResult.success(roleService.selectRoleAll());
    }

    /**
     * 查询已分配用户角色列表
     */
    @PreAuthorize("@ss.hasPermi('system:role:list')")
    @GetMapping("/authUser/allocatedList")
    public TableDataInfo allocatedList(SysUser user)
    {
        startPage();
        List<SysUser> list = userService.selectAllocatedList(user);
        return getDataTable(list);
    }

    /**
     * 查询未分配用户角色列表
     */
    @PreAuthorize("@ss.hasPermi('system:role:list')")
    @GetMapping("/authUser/unallocatedList")
    public TableDataInfo unallocatedList(SysUser user)
    {
        startPage();
        List<SysUser> list = userService.selectUnallocatedList(user);
        return getDataTable(list);
    }

    /**
     * 取消授权用户
     */
    @PreAuthorize("@ss.hasPermi('system:role:edit')")
    @Log(title = "角色管理", businessType = BusinessType.GRANT)
    @PutMapping("/authUser/cancel")
    public AjaxResult cancelAuthUser(@RequestBody SysUserRole userRole)
    {
        return toAjax(roleService.deleteAuthUser(userRole));
    }

    /**
     * 批量取消授权用户
     */
    @PreAuthorize("@ss.hasPermi('system:role:edit')")
    @Log(title = "角色管理", businessType = BusinessType.GRANT)
    @PutMapping("/authUser/cancelAll")
    public AjaxResult cancelAuthUserAll(Long roleId, Long[] userIds)
    {
        return toAjax(roleService.deleteAuthUsers(roleId, userIds));
    }

    /**
     * 批量选择用户授权
     */
    @PreAuthorize("@ss.hasPermi('system:role:edit')")
    @Log(title = "角色管理", businessType = BusinessType.GRANT)
    @PutMapping("/authUser/selectAll")
    public AjaxResult selectAuthUserAll(Long roleId, Long[] userIds)
    {
        roleService.checkRoleDataScope(roleId);
        return toAjax(roleService.insertAuthUsers(roleId, userIds));
    }

    /**
     * 获取对应角色部门树列表
     */
    @PreAuthorize("@ss.hasPermi('system:role:query')")
    @GetMapping(value = "/deptTree/{roleId}")
    public AjaxResult deptTree(@PathVariable("roleId") Long roleId)
    {
        AjaxResult ajax = AjaxResult.success();
        ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId));
        ajax.put("depts", deptService.selectDeptTreeList(new SysDept()));
        return ajax;
    }
}

五,项目总结

EKKO招聘平台系统采用MVVM对其整体进行划分,这样做的好处是:一方面,可以使整个系统结构清晰,功能明确,从而使开发人员对特定功能模块的针对性得到提高,开发效率大大增加。另一方面,也可以大大增强系统后期的可维护性,可扩展性。该系统架构如图4-1所示。

图4-1 系统部署图

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

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

相关文章

电脑系统更新后桌面的文件全部不见了怎么恢复?

电脑系统更新是很常见的一种情况&#xff0c;自动更新电脑系统后我们可以进行更优质的使用体验&#xff0c;但是最近有位小伙伴&#xff0c;出现了win10电脑系统更新后桌面文件丢失情况&#xff0c;那么电脑系统更新桌面文件没了怎么办&#xff1f;电脑系统更新桌面文件不见了怎…

实验二十三 基于时间的ACL配置及策略

实验二十三 基于时间的ACL配置及策略实验要求&#xff1a; 某公司通过router实现各部门之间的互连。公司要求禁止销售部门在上班时间(8:00 至18:00)访问工资查询服务器(IP地址为192.168.10.10)&#xff0c;财务部门不受限制&#xff0c;可以 随时访问。网络拓扑图&#xff1a;实…

如何定义算法?10分钟带你弄懂算法的基本概念

算法是指完成一个任务所需要的具体步骤和方法。也就是说给定初始状态或输入数据&#xff0c;经过计算机程序的有限次运算&#xff0c;能够得出所要求或期望的终止状态或输出数据。 编程界的“Pascal之父”Nicklaus Wirth有一句人尽皆知的名言&#xff1a;“算法数据结构程序”…

【目标检测】G-GhostNet

1、论文 论文题目&#xff1a;《GhostNets on Heterogeneous Devices via Cheap Operations》 论文地址&#xff1a; https://arxiv.org/pdf/2201.03297.pdf 代码地址&#xff1a; https://github.com/huawei-noah/CV-Backbones 2、引言 本文针对网络部署时面临的内存和资源…

python提取excel文本框内容

就提取excel文本框的内容&#xff0c;提供两种方法 一、 转成pdf&#xff0c;识别pdf文字 该方法需要注意两点&#xff1a; 1.似乎只能识别选中的文字&#xff08;图片不行&#xff09; 2.会受到精度影响&#xff08;即有可能识别出错字&#xff09; 以下是代码 先转存为pdf格…

IB中文解析,助力冲7分

我们知道&#xff0c;IB、AP、A Level三大国际课程体系都有中文&#xff0c;尤其IB学生&#xff0c;由于必选一门母语与语言&#xff0c;中文成了必选项。IB中文可以说是很多IB学子的心头大患了&#xff0c;引发焦虑的文章比比皆是。 不少家长看到这可能会问&#xff0c;中国学…

【Linux 进程地址空间】

1.程序地址空间的概率&#xff08;C/C的说法不够准确&#xff09;写一段代码来来证明C/C程序地址空间是按上图分布的&#xff1a;#include<stdio.h> #include<string.h> #include<stdlib.h> int uninit; int init100; int main() {printf("code addr:%p…

Anaconda中安装CUDA版本的PyTorch

Question: GPU是一种擅长处理专业计算的处理器。这与中央处理器&#xff08;CPU&#xff09;形成鲜明对比&#xff0c;中央处理器是一种擅长处理一般计算的处理器。CPU是为我们电子设备上大多数典型计算提供动力的处理器。GPU的计算速度比CPU快得多。但是&#xff0c;情况并非…

经验证短视频账号每天最多发3个视频,超过的不予推荐

经验证短视频账号每天最多发3个视频&#xff0c;超过的不予推荐 前两天我在刷短视频的时候&#xff0c;看到一个博主推荐一天可以发几十个视频&#xff0c;感觉有点不对&#xff0c;决定还是自己试一下。 于是&#xff0c;在死亡边缘疯狂试探了好几天&#xff0c;终于得到想要…

在ESXi系统上安装pve

pve是基于debian的&#xff0c;在ESXi上选择系统时建议选择debian并开启虚拟化一、下载下载&#xff1a;https://www.proxmox.com/en/downloads点进下载网站后选择 Proxmox Virtual Environment-->ISO Images-->Proxmox VE 7.3 ISO Installer 下的download按钮二、安装系…

React组件

React组件1.组件基本介绍2.React创建组件的两种方式2.1 函数组件2.2 类与继承2.2.1 class 基本语法2.2.2 extends 实现继承1.组件基本介绍 组件是React中最基本的内容&#xff0c;使用React就是在使用组件组件表示页面中的部分功能多个组件可以实现完整的页面功能组件特点&…

【无人机路径规划】基于IRM和RRTstar进行无人机路径规划(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

java后端第二阶段:JavaWeb

一、Mysql 定义&#xff1a;关系型数据库&#xff0c;存储在硬盘数据安全。 1.SQL通用语法 注释&#xff1a; 单行注释 -- 注释内容 或 #注释内容&#xff08;MySQL特有&#xff09; 多行注释 /* 注释 */ DDL&#xff1a;操作数据库&#xff0c;表等 DML&#xff1…

PCB设计如何防止阻焊漏开窗

PCB的阻焊层&#xff08;solder mask&#xff09;&#xff0c;是指印刷电路板子上要上绿油的部分。阻焊开窗的位置是不上油墨的&#xff0c;露出来的铜做表面处理后焊接元器件的位置&#xff0c;不开窗的位置都是印上油墨的防止线路氧化、漏电。 PCB阻焊层开窗的三个原因 1.孔…

【架构设计】如何让你的应用做到高内聚、低耦合?

前言 最近review公司的代码&#xff0c;发现代码耦合程度特别高&#xff0c;修改一处&#xff0c;不知不觉就把其他地方影响到了&#xff0c;这就让我思考该如何让我们写的代码足够内聚&#xff0c;减少耦合呢&#xff1f; "高内聚、松耦合"是一个非常重要的设计思…

Idea插件之日志管理神器(Grep Console)

1.简介Grep Console是一款方便开发者对idea控制台输出日志进行个性化管理的插件。2.功能特性Grep Console的主要功能特性&#xff1a;支持自定义规则来过滤日志信息&#xff1b;支持不同级别的日志的输出样式的个性化配置&#xff1b;总结&#xff1a;通过过滤功能、输出日志样…

经典卷积神经网络-AlexNet

AlexNet 学习目标 知道AlexNet网络结构能够利用AlexNet完成图像分类2012年&#xff0c;AlexNet横空出世&#xff0c;该模型的名字源于论文第一作者的姓名Alex Krizhevsky 。AlexNet使用了8层卷积神经网络&#xff0c;以很大的优势赢得了ImageNet 2012图像识别挑战赛。它首次证…

为何瑞达利欧的《原则一》这么难读懂?

开始搞不懂&#xff0c;为何一个桥水基金创始人&#xff0c;一位投资人&#xff0c;却写了一本这样的书&#xff0c;书中的内容初看时觉得与他从事的投资事业几乎毫无关系&#xff1f; 《原则》其副标题为《生活和工作的原则》 乍看&#xff0c;此书黑色的封皮&#xff0c;让我…

【自学C++】C++ std命名空间

C std命名空间 C std命名空间教程 在 C 中 std 命名空间 是 C 中标准库类型对象的命名空间。我们常用的输入和输出 函数 都是定义在 std 命名空间中的&#xff0c;因此&#xff0c;我们需要使用输入和输出&#xff0c;必须要引入 std 命名空间。 要引用一个命名空间中的内容…

电脑自动删除文件怎么恢复?分享4种方法

电脑出现文件丢失的情况常有发生&#xff0c;但是出现电脑自动删除文件的情况是怎么回事呢&#xff1f;电脑自动删除的文件怎么恢复呢&#xff1f;本文将详细阐述电脑自动删除文件原因和文件恢复方法。一、电脑自动删除文件是什么原因1.可能不是删除而是电脑开机用户名更改后导…