职工人事管理系统_项目整合以及salary模块逻辑整理

news2024/11/24 4:01:14

 项目:

  • groupId 在所有项目中唯一标识您的项目。
  • artifactId 是没有版本的 jar 的名称。
  • Maven 中groupId 和artifactId 的主要区别在于,groupId 指定项目组的id,而artifactId 指定项目的id

配置完环境,如何测试自己的依赖安装完毕?添加一个文件 java下创建一个application

 解释:

@SpringBootTest注解用于表示这是一个Spring Boot应用的集成测试。它加载完整的应用程序上下文,并提供与正在运行的应用程序相同的配置。

ApplicationTests类是一个测试类,其中包含一个名为contextLoads()的测试方法。该方法使用@Test注解进行标记,表示这是一个应该由测试框架执行的测试用例。

contextLoads()测试方法的目的是验证应用程序上下文是否能够成功加载。这是一个简单的测试,检查应用程序是否能够启动而不会抛出任何异常。

运行这个测试类时,测试框架将初始化Spring Boot应用程序上下文并调用contextLoads()方法。如果应用程序上下文成功加载且没有抛出任何异常,测试将通过。否则,测试将失败,表示应用程序的配置或依赖项可能存在问题。

需要注意的是,这只是一个基本的测试类,并不包含任何断言或实际的测试逻辑。在实际情况中,你通常会添加额外的测试方法,并使用具体的断言来验证应用程序的行为。

效果如图 完成依赖搭建:

 如图,环境搭建完成。

启动代码;

成功!

解释:

系统默认有两个角色:管理员,普通用户

  • 管理员(admin/admin123):可以操作所有功能、增加用户
  • 普通用户(test/test):只可查看记录、无法修改

salary模块解释:

前端:

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8" />
  <title>职工薪资管理</title>
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <link rel="stylesheet" href="../../layuimini/lib/layui-v2.5.5/css/layui.css" media="all" />
  <link rel="stylesheet" href="../../layuimini/css/public.css" media="all" />
</head>

<body>
  <!--搜索信息框内容-->
  <div class="layuimini-container">
    <div class="layuimini-main">
      <fieldset class="table-search-fieldset">
        <legend>搜索信息</legend>
        <div style="margin: 10px 10px 10px 10px">
          <form class="layui-form layui-form-pane" action="">
            <div class="layui-form-item">
              <label class="layui-form-label">部门选择</label>
              <div class="layui-input-inline">
                <select id="selectId" lay-filter="select">
                  <option value="0">请选择部门</option>
                </select>
                <input type="hidden" name="departmentName" id="departmentName" />
              </div>

              <label class="layui-form-label">职工选择</label>
              <div class="layui-input-inline">
                <select name="personalId" id="selectPersonal" lay-filter="selectPersonal">
                  <option value="0">请选择职工</option>
                </select>
              </div>

              <div class="layui-inline">
                <label class="layui-form-label">薪资日期:</label>
                <div class="layui-input-inline">
                  <input type="text" id="searchRewardDate" autocomplete="off" class="layui-input" />
                  <input type="hidden" name="year" id="searchyear" />
                  <input type="hidden" name="month" id="searchmonth" />
                </div>
              </div>
              <div class="layui-inline">
                <button type="submit" class="layui-btn layui-btn-primary" lay-submit lay-filter="data-search-btn">
                  <i class="layui-icon layui-icon-search"></i> 搜 索
                </button>
              </div>
              <div class="layui-inline">
                <a type="button" class="layui-btn layui-btn-primary" id="data-reset-btn">
                  <i class="layui-icon"></i> 重 置
                </a>
              </div>
            </div>
          </form>
        </div>
      </fieldset>
      <!--四个不同颜色的按钮-->
      <script type="text/html" id="toolbarDemo">
          <div class="layui-btn-container">
            <button
              class="layui-btn layui-btn-normal layui-btn-sm"
              lay-event="add"
            >
              添加
            </button>
            <button
              class="layui-btn layui-btn-sm layui-btn-danger"
              lay-event="delete"
            >
              删除
            </button>
            <button
              class="layui-btn layui-btn-sm layui-btn-sucess"
              lay-event="refresh"
            >
              刷新
            </button>
            <button
              class="layui-btn layui-btn-sm layui-btn-warm"
              lay-event="export"
            >
              导出全部数据
            </button>
          </div>
        </script>
      <!--右上三个小标-->
      <table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
    </div>
  </div>

  <script type="text/html" id="userEditDialog">
      <form
        id="userEditForm"
        lay-filter="userEditForm"
        class="layui-form layui-form-pane"
        style="padding-left:20px;margin-top: 20px;"
      >
        <div class="layui-row">
          <div class="layui-col-md12">
            <div class="layui-form-item">
              <div class="layui-inline">
                <label class="layui-form-label">职工名称:</label>
                <div class="layui-input-inline">
                  <select
                    name="personalId"
                    id="personalId"
                    lay-search
                    lay-verType="tips"
                    lay-verify="required"
                  >
                    <option value="">请选择职工</option>
                  </select>
                </div>
              </div>
              <div class="layui-inline">
                <label class="layui-form-label">发薪日期:</label>
                <div class="layui-input-inline">
                  <input
                    type="text"
                    name="salaryDate"
                    id="salaryDate"
                    autocomplete="off"
                    class="layui-input"
                    lay-verType="tips"
                    lay-verify="required"
                  />
                </div>
              </div>
            </div>

            <div class="layui-form-item">
              <div class="layui-inline">
                <label class="layui-form-label">基本工资:</label>
                <div class="layui-input-inline">
                  <input
                    name="basisSalary"
                    placeholder="请输入基本工资"
                    class="layui-input"
                    lay-verType="tips"
                    lay-verify="number"
                  />
                </div>
              </div>
              <div class="layui-inline">
                <label class="layui-form-label">补助工资:</label>
                <div class="layui-input-inline">
                  <input
                    name="subsidySalary"
                    placeholder="请输入补助工资"
                    class="layui-input"
                    lay-verType="tips"
                    lay-verify="number"
                  />
                </div>
              </div>
            </div>

            <div class="layui-form-item">
              <div class="layui-inline">
                <label class="layui-form-label">社保:</label>
                <div class="layui-input-inline">
                  <input
                    name="socialSalary"
                    placeholder="请输入社保"
                    class="layui-input"
                    lay-verType="tips"
                    lay-verify="number"
                  />
                </div>
              </div>
              <div class="layui-inline">
                <label class="layui-form-label">公积金:</label>
                <div class="layui-input-inline">
                  <input
                    name="providentFund"
                    placeholder="请输入公积金"
                    class="layui-input"
                    lay-verType="tips"
                    lay-verify="number"
                  />
                </div>
              </div>
            </div>

            <div class="layui-form-item">
              <div class="layui-inline">
                <label class="layui-form-label">奖金:</label>
                <div class="layui-input-inline">
                  <input
                    name="bonus"
                    placeholder="请输入奖金"
                    class="layui-input"
                    lay-verType="tips"
                    lay-verify="number"
                  />
                </div>
              </div>
            </div>
          </div>
        </div>
        <div class="layui-form-item layui-input-block">
          <button class="layui-btn" lay-filter="userEditSubmit" lay-submit>
            提交
          </button>
          <button class="layui-btn layui-btn-primary" type="button" id="Cancel">
            取消
          </button>
        </div>
      </form>
    </script>

  <script type="text/html" id="currentTableBar">
      <a class="layui-btn layui-btn-normal layui-btn-sm" lay-event="edit"
        >编辑</a
      >
      <a class="layui-btn layui-btn-sm layui-btn-danger" lay-event="delete"
        >删除</a
      >
    </script>

  <script src="../../layuimini/lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
  <script src="../../layuimini/js/lay-config.js" charset="utf-8"></script>
  <script>
    var tableIns
    layui.use(
      ['layer', 'form', 'table', 'laydate', 'common', 'excel'],
      function (args) {
        var $ = layui.jquery,
          form = layui.form,
          laydate = layui.laydate,
          table = layui.table,
          common = layui.common,
          excel = layui.excel

        tableIns = table.render({
          elem: '#currentTableId',
          url: common.api + '/salary/list',
          where: { token: common.getToken },
          toolbar: '#toolbarDemo',
          title: '职工薪资信息',
          limits: [1, 5, 10, 15, 20],
          limit: 15,
          page: true,
          skin: 'row',
          even: true,
          cols: [
            [
              {
                type: 'checkbox',
                width: 50,
              },
              {
                field: 'id',
                title: 'ID',
                width: 80,
                sort: true,
                align: 'center',
              },
              {
                field: 'personalName',
                width: 100,
                title: '职工姓名',
                align: 'center',
              },
              {
                field: 'departmentName',
                width: 150,
                title: '所属部门',
                align: 'center',
              },
              {
                field: 'positionName',
                width: 150,
                title: '所属岗位',
                align: 'center',
              },
              {
                field: 'basisSalary',
                width: 150,
                title: '基本工资',
                align: 'center',
                templet: function (d) {
                  return d.basisSalary + '元'
                },
                sort: true,
              },
              {
                field: 'subsidySalary',
                width: 100,
                title: '补助工资',
                align: 'center',
                templet: function (d) {
                  return d.subsidySalary + '元'
                },
              },
              {
                field: 'socialSalary',
                width: 100,
                title: '社保',
                align: 'center',
                templet: function (d) {
                  return d.socialSalary + '元'
                },
              },
              {
                field: 'providentFund',
                width: 100,
                title: '公积金',
                align: 'center',
                templet: function (d) {
                  return d.providentFund + '元'
                },
              },
              {
                field: 'bonus',
                width: 100,
                title: '奖金',
                align: 'center',
                templet: function (d) {
                  return d.bonus + '元'
                },
              },
              {
                field: 'allSalary',
                width: 150,
                title: '应发工资',
                align: 'center',
                templet: function (d) {
                  return d.allSalary + '元'
                },
                sort: true,
              },
              {
                field: 'salaryDate',
                width: 200,
                title: '发薪日期',
                align: 'center',
                templet: function (d) {
                  var time = layui.util.toDateString(
                    d.salaryDate,
                    'yyyy-MM-dd'
                  )
                  return '<div>' + time + '</div>'
                },
                sort: true,
              },
              {
                title: '操作',
                minWidth: 150,
                toolbar: '#currentTableBar',
                align: 'center',
              },
            ],
          ],
          parseData: function (res) {
            if (res.code != 200) {
              common.login()
            }
            return {
              code: res.code, //解析接口状态
              msg: res.msg, //解析提示文本
              count: res.data.total, //解析数据长度
              data: res.data.list, //解析数据列表
            }
          },
          response: {
            statusCode: 200, //重新规定成功的状态码为 200,table 组件默认为 0
          },
          request: {
            pageName: 'page', //页码的参数名称,默认:page
            limitName: 'size', //每页数据量的参数名,默认:limit
          },
        })

        // 监听搜索操作
        form.on('submit(data-search-btn)', function (data) {
          var param = data.field
          console.log(param)
          // 执行搜索重载
          tableIns.reload({
            url: common.api + '/salary/list',
            method: 'get',
            where: param,
          })
          return false
        })

        //监听工具栏添加删除刷新
        table.on('toolbar(currentTableFilter)', function (obj) {
          if (obj.event === 'add') {
            // 监听添加操作
            showEditModel()
          } else if (obj.event === 'delete') {
            // 监听删除操作
            var data = table.checkStatus('currentTableId').data
            if (data.length === 0) {
              layer.msg('请选择要删除的数据', { icon: 2 })
              return
            }
            var ids = data.map(function (d) {
              return d.id
            })
            doDel(ids)
          } else if (obj.event === 'refresh') {
            tableIns.reload({
              url: common.api + '/salary/list',
              where: { departmentName: '' },
            })
          } else if (obj.event === 'export') {
            common.ajax(common.api + '/salary/all', null, function (res) {
              var data = res.data
              data = common.compare(data)
              console.log(data)
              data = excel.filterExportData(data, [
                'id',
                'personalName',
                'departmentName',
                'positionName',
                'basisSalary',
                'subsidySalary',
                'socialSalary',
                'providentFund',
                'bonus',
                'allSalary',
                'salaryDate',
              ])
              data.unshift({
                id: '薪资编号',
                personalName: '员工姓名',
                departmentName: '所属部门',
                positionName: '所属岗位',
                basisSalary: '基本工资',
                subsidySalary: '补助工资',
                socialSalary: '社保',
                providentFund: '公积金',
                bonus: '奖金',
                allSalary: '应发工资',
                salaryDate: '发薪日期',
              })
              var timestart = Date.now()
              excel.exportExcel(
                {
                  sheet1: data,
                },
                '薪资信息.xlsx',
                'xlsx'
              )
              var timeend = Date.now()

              var spent = (timeend - timestart) / 1000
              layer.msg('单纯导出耗时 ' + spent + ' s')
            })
          }
        })

        //监听编辑删除
        table.on('tool(currentTableFilter)', function (obj) {
          if (obj.event === 'edit') {
            showEditModel(obj.data)
          } else if (obj.event === 'delete') {
            doDel([obj.data.id])
          }
        })

        function showEditModel (formData) {
          var idx = layer.open({
            type: 1,
            area: ['50%', '50%'],
            title: formData ? '编辑' : '添加',
            anim: 1,
            shade: 0.6,
            content: $('#userEditDialog').html(),
            success: function (layero, dIndex) {
              // 回显表单数据
              form.val('userEditForm', formData)
              //加载日期
              laydate.render({
                elem: '#salaryDate',
                format: 'yyyy-MM-dd',
                value: formData ? formData.salaryDate : '',
              })
              //职工select加载
              $.each(personalDate, function (index, item) {
                var option = new Option(item.name, item.id)
                $('#personalId').append(option)
              })
              //设置select控件指定text的值为选中项
              if (formData) {
                $('#personalId').val(formData.personalId)
              }
              form.render('select')
              // 表单提交事件
              form.on('submit(userEditSubmit)', function (data) {
                console.log(formData)
                common.ajax(
                  formData
                    ? common.api + '/salary/' + formData.id
                    : common.api + '/salary',
                  JSON.stringify(data.field),
                  function (res) {
                    if (res.code === 200) {
                      layer.close(dIndex)
                      layer.msg(res.msg, { icon: 1 })
                      table.reload('currentTableId')
                    } else {
                      layer.msg(res.msg, { icon: 2 })
                    }
                  },
                  formData ? 'put' : 'post',
                  function (data) {
                    layer.msg(data.msg, { icon: 2 })
                  }
                )
                return false
              })

              $('#Cancel').click(function () {
                layer.close(idx)
              })
            },
          })
        }

        function doDel (ids) {
          layer.confirm(
            '确定要删除选中数据吗?',
            {
              skin: 'layui-layer-admin',
              shade: 0.1,
            },
            function (i) {
              common.ajax(
                common.api + '/salary',
                JSON.stringify(ids),
                function (res) {
                  if (res.code === 200) {
                    layer.msg(res.msg, { icon: 1 })
                    tableIns.reload()
                  } else {
                    layer.msg(res.msg, { icon: 2 })
                  }
                },
                'DELETE', // 提交方式
                function (data) {
                  console.log(data)
                  layer.msg(data.msg, { icon: 2, time: 1000 })
                  return
                }
              )
              layer.close(i)
            }
          )
        }

        form.on('select(select)', function (obj) {
          var txtval = obj.elem[obj.elem.selectedIndex].text
          $('#departmentName').val(txtval)
          $('#selectPersonal').val(0)
          form.render('select')
        })

        form.on('select(selectPersonal)', function (obj) {
          $('#selectId').val(0)
          $('#departmentName').val('')
          form.render('select')
        })

        var selectData, personalDate
        layer.ready(function () {
          //select 框的数据动态加载
          common.ajax(
            common.api + '/department/select',
            null,
            function (data) {
              selectData = data.data
              $.each(selectData, function (index, item) {
                var option = new Option(item.departmentName, item.id)
                $('#selectId').append(option)
              })
              form.render('select')
            }
          )
          common.ajax(common.api + '/personal/select', null, function (data) {
            personalDate = data.data
            $.each(personalDate, function (index, item) {
              var option = new Option(item.name, item.id)
              $('#selectPersonal').append(option)
            })
            form.render('select')
          })
          // 监听重置操作
          $('#data-reset-btn').click(function () {
            $('#selectId').val(0)
            $('#selectPersonal').val(0)
            $('#departmentName').val('')
            $('#searchyear').val('')
            $('#searchmonth').val('')
            form.render('select')
            tableIns.reload({
              url: common.api + '/salary/list',
              method: 'get',
              where: {
                departmentName: '',
                personalId: 0,
                year: '',
                month: '',
              },
            })
          })
          //加载日期
          laydate.render({
            elem: '#searchRewardDate',
            format: 'yyyy-MM',
            type: 'month',
            done: function (value) {
              var date = value.split('-')
              $('#searchyear').val(date[0])
              $('#searchmonth').val(date[1])
            },
          })
        })
      }
    )
  </script>
</body>

</html>

、 

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

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

相关文章

TDengine 成功“晋级” Percona Live 2023 银牌赞助商,开发者驻足关注

带着创新的数据技术走遍全球 这一次 陶建辉带着 TDengine 飞到了丹佛...... 2023 年 5 月 22-24 日&#xff0c;一年一度的开源数据库领域全球最具影响力峰会 Percona Live 2023 在丹佛技术中心万豪酒店举办。Percona Live 是全球持续举办最久的独立开源数据大会&#xff0c…

jsp测试题:

jsp测试选择题 题号答案1C2A3A4A5A6A7B8C9B10A11A12A13A14A15C 简答题&#xff1a; 1.在JSP中&#xff0c;<% int a 3; %>与<%! int b 3; %>中定义的变量有何不同&#xff1f;若要在某一JSP页面中定义一个方法void f()&#xff0c; 应用什么样的语法&#xff1…

社团管理系统

文章目录 社团管理系统一、项目演示二、项目介绍三、系统运行界面图四、系统部分功能截图五、部分代码展示六、底部获取源码 社团管理系统 一、项目演示 社团管理系统 二、项目介绍 基于SpringBoot2Vue的前后端分离的社团管理系统 前后端分离 前端开发 : Vue2 ElementUl 后…

“小白也能玩转Python数据分析,快速掌握技巧!

最近收到好几条私信&#xff0c;想要了解数据分析方面的学习教程。 Python如今势头很猛&#xff0c;但是结合市场环境来说&#xff0c;Python开发岗位的需求还是要低于其他后端语言&#xff0c;但是Python爬虫和数据分析的技能确是实实在在可以用到很多工作中去&#xff0c;所…

Linux 操作系统原理 — netfilter/iptables 流量处理框架

目录 文章目录 目录Netfilter 流量处理框架Netfilter 的实现原理Netfilter 的工作原理规则&#xff08;Rules&#xff09;链&#xff08;Chains&#xff09;表&#xff08;Tables&#xff09;数据包处理流程图 iptables CLIiptables-service指令应用查看规则添加规则删除规则修…

java按照模板导出pdf或者word

一、java按照模板导出pdf &#xff08;一&#xff09;制作模板 1、在word里制作模板 因为PDF常用的软件不支持编辑&#xff0c;所以先用Word工具&#xff0c;如WPS或者Office新建一个空白Word文档&#xff0c;里面制作出自己想要的样式。 2、 将Word转换成PDF形式 将设置好的W…

120G课程内容!龙讯旷腾为您的课题组打造专属空间

我们介绍了龙讯旷腾资源中心&#xff08;http://login.lonxun.com/login&#xff09;是一个知识管理与服务型的综合社区&#xff0c;但资源中心仅仅是一个简单的内容展示平台吗&#xff1f;对于高校课题组的教师和企业管理者来说&#xff0c;资源中心提供了多种辅助教学和建站功…

Ubuntu TDengine集群搭建

我这里用三台服务器搭建集群 1、如果搭建集群的物理节点上之前安装过TDengine先卸载清空&#xff0c;直接执行以下4条命令 rmtaos rm -rf /var/lib/taos rm -rf /var/log/taos rm -rf /etc/taos2、确保集群中所有主机开放端口 6030-6043/tcp&#xff0c;6060/tcp&#xff0c;…

Spring Boot 中如何使用 Spring Data MongoDB 来访问 MongoDB

Spring Boot 中如何使用 Spring Data MongoDB 来访问 MongoDB 简介 MongoDB 是一个流行的 NoSQL 数据库&#xff0c;其以灵活的数据模型和可扩展性而闻名。Spring Data MongoDB 是 Spring 框架的一个子项目&#xff0c;它提供了一种简单的方式来使用 MongoDB 数据库。在本文中…

ChatGPT工作提效之小鹅通二次开发批量API对接解决方案(学习记录同步、用户注册同步、权益订购同步、开发文档)

ChatGPT工作提效系列 ChatGPT工作提效之初探路径独孤九剑遇强则强ChatGPT工作提效之在程序开发中的巧劲和指令(创建MySQL语句、PHP语句、Javascript用法、python的交互)ChatGPT工作提效之生成开发需求和报价单并转为Excel格式 ChatGPT工作提效之小鹅通二次开发批量API对接解决…

TIA博途-32位浮点数大小端存储-高低字节转换的具体方法示例(4种字节排列顺序)

TIA博途-32位浮点数大小端存储-高低字节转换的具体方法示例(4种字节排列顺序) 如下图所示,新建一个项目后,添加一个1215PLC,添加一个FB块,块的接口变量如下, 如下图所示,该FB块的具体程序可参考下面的内容: 如下图所示,在数据块种添加3个变量用于FB块的功能测试,…

Java SPI 二 之 Java APT原理及APT实战 - 一步步教你写ButterKnife

一、定义 Java APT 是 Java 技术设计的一个 APT 架构&#xff0c; APT&#xff08;Annotation Processing Tool&#xff09;即注解处理器&#xff0c;它是一种处理注解的工具&#xff0c;也是javac中的一个工具&#xff0c;用于在编译阶段未生成class之前对源码中的注解进行扫…

小红书数据分析:首播卖6亿,小红书直播开启新纪元!

5月22日&#xff0c;章小蕙在小红书开启了第一场带货直播。继董洁之后&#xff0c;小红书又迎来一位超级带货KOL。 据千瓜数据显示&#xff0c;相关话题#章小蕙小红书直播#上线不到30天&#xff0c;话题浏览量就高达2814.89万&#xff0c;笔记互动量达22.24万。 图 | 千瓜数据…

Android 12.0下拉状态栏通知栏的通知设置默认展开

1.概述 在12.0的产品定制化中,对于SystemUI的定制也是常用的功能,而在下拉状态栏中的通知栏部分也是极其重要的部分,每条通知实时更新在通知栏部分,由于通知栏高度的限制,每条通知是默认收缩的,功能开发需要要求通知默认展开,所以就要从通知的加载流程分析 如图: 2.…

化工生产制造企业实施技术变革前要问自己的 6 个问题

化工企业将新技术&#xff08;大数据、人工智能、云计算、RFID、PDA、GIS&#xff09;引入到业务中&#xff0c;通过填补技术基础设施中的空白来帮助企业团队成员更高效、更有效地完成工作&#xff0c;是一项卓有成就的事情。但是&#xff0c;企业在急于快速实施新解决方案以获…

数字化时代,如何规范化搭建数据仓库?

数据仓库作为商业智能BI系统中的一部分&#xff0c;已经成长为了企业信息化建设中必不可少的重要支撑&#xff0c;在可见的未来&#xff0c;数据仓库还会随着信息化、数字化技术、理念、应用的落地&#xff0c;继续成长。 数据仓库是一个面向主题的、集成的、随时间变化但信息…

纽约时报对全球HR选出他们最想招聘的毕业生所来自的前150所大学

美国《纽约时报》对全球2500个HR部门和2000位企业的CEO发出了问卷&#xff0c;排名选出他们最想招聘的毕业生所来自的大学 1哈佛大学。 美国 2耶鲁大学。 美国 3 剑桥大学 英国 4 牛津大学 英国 5 斯坦福大学。 美国 6 马萨诸塞州理工学院 美国 7 哥伦比亚大学。 美国 8 普林斯…

JavaEE(系列17) -- 线程安全的集合类

目录 1. 多线程环境使用ArrayList 1.1 使用同步机制 (synchronized 或者 ReentrantLock) 1.2 Collections.synchronizedList(new ArrayList); 1.3 使用 CopyOnWriteArrayList 2. 多线程环境使用队列 3. 多线程环境使用哈希表 3.1 Hashtable 3.2 ConcurrentHashMap 4. 相关面试…

北邮22信通:利用BF算法解决实际问题:题目实战(超详解)设计函数 char *locatesubstr(char *str1,char *str2)

北邮22信通一枚~ 跟随课程进度每周更新数据结构与算法的代码和文章 持续关注作者 解锁更多邮苑信通专属代码~ 获取更多文章 请访问专栏~ 北邮22信通_青山如墨雨如画的博客-CSDN博客 目录 题干描述 解析 1.string库函数 2.使用KMP算法思想 注解1 注解2 注解3 题…

Mysql基础 — DDL、DML、DQL、DCL、函数、约束

文章目录 Mysql基础一、数据模型1.1 关系型数据库与非关系型数据库1.2 Mysql 数据模型 二、SQL2.1 SQL 通用语法2.2 SQL分类2.3 DDL2.3.1 数据库操作2.3.2 表操作 — 创建 & 查询2.3.3 表操作— 修改&删除2.3.4 数据类型2.3.4.1 数值类型2.3.4.2 字符串类型2.3.4.3 日期…