2019.1.21

  今天的任务是完成会计是否在岗配置表格增加操作记录,任务描述:1.  【会计是否在岗配置】 查询结果界面: 修改人编码/修改人/修改时间 字段;2.      字段取值为【会计是否在岗配置】 新增/修改操作记录,更改坐席状态,添加记录。

 结果界面:

  • 第一步 通过界面寻找任务相关代码,分析功能逻辑。

    • 将鼠标放到【会计是否在岗配置表】,确定当前页面为getTprocAccountantteamUserStateList.jsp,在eclipse中通过快捷键Ctrl+H找到jsp页面。jsp代码如下:
    • <form id="queryForm" name="queryForm" method="post" action="commonbizajax2report.do?requestId=FindTodoList">
      <div id="wrapper" class="gray-bg">
      <%--<div id="page-wrapper" class="gray-bg">--%>
      <div class="">
      <div class="p-w-md m-t-sm">
      <div class="row">
      <div class="row" style="margin: 10px 0px"><!--面包屑开始-->
      <ol class="breadcrumb">
      <li class="active"><a style="color: #232323;">会计是否在岗配置表</a></li>
      </ol>
      </div><!--面包屑结束-->
      <div class="ibox">
      <div class="ibox-content">
      <div id="tt" style="display: block;">
      <div class="row">
      <div class="col-sm-3">
      <div class="form-group">
      <label class="font-noraml">会计组名称</label>
      <input type="text" id="teamname" name="teamname" class="form-control" style="width: 100%;height: auto">
      </div>
      <div class="display-none">
      <div class="form-group">
      <label class="font-noraml">坐席状态</label>
      <select name="seatstate" id="seatstate" class="form-control">
      <option value="">请选择</option>
      <option value="1">在岗</option>
      <option value="0">不在岗</option>
      </select>
      </div>
      </div>
      </div> <div class="col-sm-3">
      <div class="form-group">
      <label class="font-noraml">会计组编号</label>
      <input type="text" id="teamid" name="teamid" class="form-control" style="width: 100%;height: auto">
      </div>
      </div>
      <div class="col-sm-3">
      <div class="form-group">
      <label class="font-noraml">员工姓名</label>
      <input type="text" id="fullname" name="fullname" class="form-control" style="width: 100%;height: auto">
      </div>
      </div>
      <div class="col-sm-3">
      <div class="form-group">
      <label class="font-noraml">员工编号</label>
      <input type="text" id="userid" name="userid" class="form-control" style="width: 100%;height: auto">
      </div>
      </div>
      </div>
      <div class="row">
      <div class="col-sm-12">
      <div class="text-center"
      style="border-bottom: 1px solid rgba(183,212,246,0.50); padding-bottom: 20px">
      <button id="showAndHide" type="button"
      style="background-color: #48A0FF;height: 28px;width: 28px;border: 0px; background: url(${pageContext.request.contextPath}/newstatic/img/icon/group_12.png) 50% 50%; border-radius: 2px;color: #FFFFFF;font-size: 14px;">
      &nbsp;</button>
      <button style="background-color: #48A0FF;height: 28px;width: 100px;border: 0px;border-radius: 2px;color: #FFFFFF;font-size: 14px;" type="button" onclick="onQuery()">查询 </button>
      <button type="button" onclick="reset001()" style="background-color: #B7B9BB;height: 28px;width: 100px;border: 0px;border-radius: 2px;color: #FFFFFF;font-size: 14px;">重置</button>
      </div>
      </div>
      </div> </div>
      <div style="margin: 10px 0px 20px 0px; padding-top: 10px">
      <span style="border: 1px solid #48A0FF;margin-left: -20px;"></span>
      <span style="font-family: MicrosoftYaHei;font-size: 15px;color: #0B112A;margin-left: 13px;">查询结果</span>
      </div>
      <div class="checkListDiv q_mpsdc_body" style="margin-top: -20px;">
      <table id="dtClaimTodo"
      class="table table-striped table-hover q_table table_td_left"
      data-classes="table-no-bordered"
      data-id-field="" data-click-to-select="true" data-striped="true"
      data-ajax="claimTodoListSearchAjax"
      data-side-pagination="server" data-pagination="true" data-page-size="10"
      data-height="480" data-show-jumpto="true" data-resizable="false">
      <thead>
      <tr>
      <th data-width="150" data-field="str0" data-formatter="createTdTitle">
      员工姓名
      </th>
      <th data-width="150" data-field="str1" data-formatter="createTdTitle">
      员工编号
      </th>
      <th data-width="150" data-field="str2" data-formatter="createTdTitle">
      会计组编号
      </th>
      <th data-width="250" data-field="str3" data-formatter="createTdTitle">
      会计组名称
      </th>
      <th data-width="100" data-field="str7" data-formatter="createTdTitle">
      修改人编码
      </th>
      <th data-width="100" data-field="str6" data-formatter="createTdTitle">
      修改人
      </th>
      <th data-width="100" data-field="str8" data-formatter="createTdTitle">
      修改时间
      </th>
      <th data-width="100" data-field="str4" data-formatter="renderOption">
      座席状态
      </th>
      </tr>
      </thead>
      </table>
      </div>
      </div>
      </div>
      </div>
      </div>
      </div>
      <br/><br/><br/>
      <div class="navbar-fixed-bottom"
      style="height: 80px;width:100%;background: #FFFFFF;box-shadow: 0 -2px 10px 0 #C0DFFF;padding: 20px 60px;z-index: 10000;">
      </div>
      <%-- </div>--%>
      </div>
      </form>

      getTprocAccountantteamUserStateList.jsp

      <script>
      var curPortalUserGroupId = "";
      var user;
      var commonUiDataBindService4QueryList = new CommonUiDataBindService4QueryList("myTodo");
      $(function () {
      $("#showAndHide").click(function () {
      $(".display-none").slideToggle(function () {
      });
      $(this).toggleClass('showAndHide-active'); });
      $('#hh').click(function () {
      $('#tt').slideToggle();
      });
      $("#seatstate").chosen();
      $("#dtClaimTodo").bootstrapTable();//初始化表格
      });
      //=================================================查询条件========================================================================
      function onQuery(){
      $('#dtClaimTodo').bootstrapTable('refresh');
      }
      function reset001(){
      $("#queryForm input").val("");
      $("#queryForm select").val("");
      $("#queryForm select").trigger("chosen:updated");
      }
      //====================================================列表=======================================================
      function claimTodoListSearchAjax(params) {//数据查询ajax
      var paramUrl = contextPath + "/commonbizajax2report.do?requestId=listProcAccountantStateService";
      var queryResultModel = "str0,str1,str2,str3,str4,str5,str7,str6,str8";
      var data ={queryResultModel : queryResultModel};
      data = generateSearchConditionAndUpd2Ui(commonUiDataBindService4QueryList,this,"queryForm",data);
      loadBootstrapTableData(this, paramUrl, params, $('#queryForm'),data,setParam);//ajax加载表格
      }
      function setParam(data) {
      curPortalUserGroupId = JSON.parse(data.user).curGroupId;
      user = data.user;
      }
      function renderOption(value, row, index, field) {
      var result="";
      if(value =='1'){
      result += '<input type="radio" name=\"'+index+'\" checked="checked" onclick="update(\''+row.str5+'\',1);" value="1" /><label class="font-noraml">在岗</label>&nbsp;&nbsp;&nbsp;';
      result += '<input type="radio" name=\"'+index+'\" onclick="update(\''+row.str5+'\',0);" value="0" /><label class="font-noraml">不在岗</label>';
      }else{
      result += '<input type="radio" name=\"'+index+'\" onclick="update(\''+row.str5+'\',1);" value="1" /><label class="font-noraml">在岗</label>&nbsp;&nbsp;&nbsp;';
      result += '<input type="radio" name=\"'+index+'\" checked="checked" onclick="update(\''+row.str5+'\',0);" value="0" /><label class="font-noraml">不在岗</label>';
      }
      return result;
      } function update(id,obj){
      var url=doProcessUrl(contextPath +"/commonbizajax.do?requestId=updateTprocAccountantteamUserState&id="+id+"&seatstate="+obj);
      return ajaxService.post({ url: url, data: null}).done(function (ajaxResponse) {
      if (ajaxResponse.result == AjaxResultFlag.OK) {
      MessageBox.notice("更新坐席状态成功!");
      $('#dtClaimTodo').bootstrapTable('refresh');
      }else{
      MessageBox.error("更新坐席状态失败!");
      }
      });
      }
      </script>

      getTprocAccountantteamUserStateList.jsp的js代码

    • 要完成这个功能需要对两个功能做修改,【更新】和【查询】,对应jsp方法为update(id,obj)claimTodoListSearchAjax(params),可以看到两个方法拼接了URL,"/commonbizajax2report.do?requestId=listProcAccountantStateService",因为项目使用Struts1,通过requestId寻找控制器xxxaction.xml,相关代码如下:
      <!-- 会计是否在岗配置表  开始 -->
      <action requestId="listProcAccountantStateService" service="tprocAccountantteamService" method="getTprocAccountantteamUserStateList" path="/pages/workflow/getTprocAccountantteamUserStateList.jsp" />
      <action requestId="updateTprocAccountantteamUserState" service="tprocAccountantteamService" method="updateTprocAccountantteamUserState" >
      <result name="SUCCESS" type="redirect" path="/service.do?requestId=listProcAccountantStateService"/>
      <result name="ERROR" path="/newPages/efinance/common/errors.jsp" />
      </action>
      <!-- 会计是否在岗配置表 结束 -->

      Action-config-workflow.xml

    • 通过service以及method找到对应的serviceImpl:tprocAccountantteamServiceImpl,相关内容如下:
      public void getTprocAccountantteamUserStateList(IMessageObject mo)
      throws BusinessException, UnsupportedEncodingException {
      Map inputMap = mo.getInputMap();
      PageModel pm = PageUtil.getPageModel(mo);
      try {
      tprocAccountantteamDAO.getTprocAccountantteamUserStateList(pm, mo);
      } catch (DBException e) {
      e.printStackTrace();
      throw new BusinessException(e.getMessage());
      }
      mo.setOutput(pm);
      } public void updateTprocAccountantteamUserState (IMessageObject mo) throws BusinessException {
      String id =(String) mo.getInput("id");
      TProcAccountantteamUser user =tprocAccountantteamDAO.get(TProcAccountantteamUser.class, Long.parseLong(id));
      String seatstate =(String) mo.getInput("seatstate");
      String modifierName = mo.getUser().getFullname();
      String modifierId = mo.getUser().getUsername(); tprocAccountantteamDAO.updateComsegcodeStatus(id,seatstate,modifierId,modifierName);
      if(seatstate!=null&&seatstate.equals("1")){ Long handleCount=tprocAccountantteamDAO.matchCurrentOrder(String.valueOf(user.getTeamId()));
      user.setHandleCount(handleCount);
      user.setModifierName(modifierName);
      user.setModifierId(modifierId);
      tprocAccountantteamDAO.update(user); }
      SysLogUtils.saveSysLog("T_PROC_ACCOUNTANTTEAM_USER", "会计组人员", mo.getUser().getUserid(), modifierId, mo.getUser().getFullname(),
      new Date(), "修改", mo.getUser().getUserid()+"","会计组Id:"+ user.getTeamId()+"人员Id:"+user.getUserId()+" 改在岗状态为"+seatstate);
      }

      tprocAccountantteamServiceImpl.java

      相应的实体类和数据层为:TProcAccountantteamUser和tprocAccountantteamDAOImpl,相关代码如下:

      import java.io.Serializable;
      import java.util.Date; @SuppressWarnings("serial")
      public class TProcAccountantteamUser implements Serializable { private Long id;
      private Long compId;
      private Long teamId;
      private String teamName;
      private Long userId;
      private String userName;
      private String fullName;
      private Long groupId;
      private String groupName;
      private Long order; private String operatorUsername;
      private Date operatorDate;
      private String operatorIp; private String modifierId;
      private String modifierName;
      private Date modifierTime; private String seatState;
      private String groupLeader;
      private String userNo;
      private String teamNo; private String isReviewAccount;
      private String reviewAccountNo;
      private String reviewAccount;
      private Long handleCount; private Long index;

      TProcAccountantteamUser.java

      public void getTprocAccountantteamUserStateList(PageModel pageModel, IMessageObject mo) throws DBException{
      try{
      Map inputMap = mo.getInputMap();
      String compId = mo.getUser().getCurCompId();
      StringBuffer sql = new StringBuffer("");
      sql.append("select tu.full_name as fullname, ");//
      sql.append(" tu.user_name as username, ");//
      sql.append(" t.team_no as teamno,");//
      sql.append(" t.team_name as teamname, ");//
      sql.append(" tu.seatstate as seatstate, ");//
      sql.append(" tu.id as id ,");//
      sql.append(" tu.modifier_Id as modifierId ,");//
      sql.append(" tu.modifier_Name as modifierName ,");//
      sql.append(" tu.modifier_Time as modifierTime");// sql.append(" from t_Proc_Accountantteam_user tu");
      sql.append(" left join t_proc_accountantteam t ");
      sql.append(" on tu.team_id = t.id ");
      sql.append(" where t.comp_id = "+compId);
      sql.append(" and t.isenable = '1' "); String fullname = (String)inputMap.get("fullname");
      if (fullname!=null && !"".equals(fullname)){
      sql.append(" and tu.full_name like '%"+fullname.trim()+"%' ");
      }
      String userid = (String)inputMap.get("userid");
      if (userid!=null && !"".equals(userid)){
      sql.append(" and tu.user_name = '"+userid.trim()+"' ");
      }
      String teamid = (String)inputMap.get("teamid");
      if (teamid!=null && !"".equals(teamid)){
      sql.append(" and t.team_no like '%"+teamid.trim()+"%' ");
      }
      String teamname = (String)inputMap.get("teamname");
      if (teamname!=null && !"".equals(teamname)){
      sql.append(" and t.team_name like '%"+teamname.trim()+"%' ");
      }
      String seatstate = (String)inputMap.get("seatstate");
      if (seatstate!=null && !"".equals(seatstate)){
      sql.append(" and tu.seatstate = '"+seatstate+"' ");
      }
      sql.append(" order by t.id");
      System.out.println(sql);
      this.findsqlPageModel(pageModel, sql.toString());
      }catch(Exception e){
      e.printStackTrace();
      }
      } public boolean updateComsegcodeStatus(String id,String status,String modifierId,String modifierName) {
      boolean ret = true;
      StringBuilder sql = new StringBuilder();
      sql.append("update t_Proc_Accountantteam_user set ");
      sql.append(" seatstate = ?, ");
      sql.append(" modifier_Name = ?, ");
      sql.append(" modifier_Id = ?, ");
      sql.append(" modifier_Time = sysdate ");
      sql.append(" where id = ? ");
      try {
      this.excuteSql(sql.toString(),new Object[]{status,modifierId,modifierName,id});
      } catch (DBException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      }
      return ret;
      }

      tprocAccountantteamDAOImpl.java

    • 任务相关主要代码查找完毕,分析业务逻辑知,需要的工作为对service层、Dao层和前台代码做相应的修改,将用户的修改操作记录到数据库,并且通过list方法从数据库将信息取出,同时在点击【在岗】/【不在岗】刷新页面显示结果。简单的来说,首先在数据库、实体类【TProcAccountantteamUser】和jsp【getTprocAccountantteamUserStateList.jsp】分别增加关于操作记录的三条字段。然后在tprocAccountantteamDAOImpl对查询和更新方法修改sql语句。最后关于修改【坐席状态】时页面刷新,在jsp做相应的修改。
  • 第二步 根据需求修改代码
    • 在数据库(oracle数据库)增加三条字段

      alter table t_Proc_Accountantteam_user add(MODIFIER_ID varchar2(50));
      alter table t_Proc_Accountantteam_user add(MODIFIER_NAME varchar2(50));
      alter table t_Proc_Accountantteam_user add(MODIFIER_TIME timestamp);
    • 在实体类(TProcAccountantteamUser)增加三条字段
      private String modifierId;//修改人
      private String modifierName;//修改人编码
      private Date modifierTime;//修改时间
    • 在jsp(getTprocAccountantteamUserStateList)增加三条信息
      <th data-width="100" data-field="str6" data-formatter="createTdTitle">
      修改人编码
      </th>
      <th data-width="100" data-field="str7" data-formatter="createTdTitle">
      修改人
      </th>
      <th data-width="100" data-field="str8" data-formatter="createTdTitle">
      修改时间
      </th>
    • 对tprocAccountantteamDAOImpl修改sql代码,并在tprocAccountantteamServiceImpl进行相应的修改,修改【更新】方法时,【修改人操作时间】使用的是数据库提供的时间sysdate,所以在serviceImpl也就不需要提取用户的当前时间,
      String modifierName = mo.getUser().getFullname();
      String modifierId = mo.getUser().getUsername();
      public boolean updateComsegcodeStatus(String id,String status,String modifierId,String modifierName) {
      boolean ret = true;
      StringBuilder sql = new StringBuilder();
      sql.append("update t_Proc_Accountantteam_user set ");
      sql.append(" seatstate = ?, ");
      sql.append(" modifier_Name = ?, ");
      sql.append(" modifier_Id = ?, ");
      sql.append(" modifier_Time = sysdate ");
      sql.append(" where id = ? ");
      try {
      this.excuteSql(sql.toString(),new Object[]{status,modifierName,modifierId,id});
      } catch (DBException e) {
      e.printStackTrace();
      }
      return ret;

      TprocAccountantteamDAOImpl

      拼接三条更新字段的sql

      sql.append(" modifier_Name = ?, ");
      sql.append(" modifier_Id = ?, ");
      sql.append(" modifier_Time = sysdate ");

      修改【查询】方法,拼接select三条字段的sql

      public void getTprocAccountantteamUserStateList(PageModel pageModel, IMessageObject mo) throws DBException{
      try{
      Map inputMap = mo.getInputMap();
      String compId = mo.getUser().getCurCompId();
      StringBuffer sql = new StringBuffer("");
      sql.append("select tu.full_name as fullname, ");//
      sql.append(" tu.user_name as username, ");//
      sql.append(" t.team_no as teamno,");//
      sql.append(" t.team_name as teamname, ");//
      sql.append(" tu.seatstate as seatstate, ");//
      sql.append(" tu.id as id ,");//
      sql.append(" tu.modifier_Id as modifierId ,");//
      sql.append(" tu.modifier_Name as modifierName ,");//
      sql.append(" tu.modifier_Time as modifierTime");// sql.append(" from t_Proc_Accountantteam_user tu");
      sql.append(" left join t_proc_accountantteam t ");
      sql.append(" on tu.team_id = t.id ");
      sql.append(" where t.comp_id = "+compId);
      sql.append(" and t.isenable = '1' "); String fullname = (String)inputMap.get("fullname");
      if (fullname!=null && !"".equals(fullname)){
      sql.append(" and tu.full_name like '%"+fullname.trim()+"%' ");
      }
      String userid = (String)inputMap.get("userid");
      if (userid!=null && !"".equals(userid)){
      sql.append(" and tu.user_name = '"+userid.trim()+"' ");
      }
      String teamid = (String)inputMap.get("teamid");
      if (teamid!=null && !"".equals(teamid)){
      sql.append(" and t.team_no like '%"+teamid.trim()+"%' ");
      }
      String teamname = (String)inputMap.get("teamname");
      if (teamname!=null && !"".equals(teamname)){
      sql.append(" and t.team_name like '%"+teamname.trim()+"%' ");
      }
      String seatstate = (String)inputMap.get("seatstate");
      if (seatstate!=null && !"".equals(seatstate)){
      sql.append(" and tu.seatstate = '"+seatstate+"' ");
      }
      sql.append(" order by t.id");
      System.out.println(sql);
      this.findsqlPageModel(pageModel, sql.toString());
      }catch(Exception e){
      e.printStackTrace();
      }
      }

      TprocAccountantteamDAOImpl

      sql.append(" tu.modifier_Id  as  modifierId ,");//
      sql.append(" tu.modifier_Name as modifierName ,");//
      sql.append(" tu.modifier_Time as modifierTime");//
    • 这里可以看到使用的是典型的MVC设计模式思想,orm框架使用的是hibernate,通过Struts的action.xml耦合前台页面和后台系统。

    • 该需求还有一个功能是当操作人修改【坐席状态】要求页面响应,刷新出操作记录,这个功能需要对jsp页面的js代码进行修改,更新坐席状态成功时,使用bootstrap更新页面
      function update(id,obj){
      var url=doProcessUrl(contextPath +"/commonbizajax.do?requestId=updateTprocAccountantteamUserState&id="+id+"&seatstate="+obj);
      return ajaxService.post({ url: url, data: null}).done(function (ajaxResponse) {
      if (ajaxResponse.result == AjaxResultFlag.OK) {
      MessageBox.notice("更新坐席状态成功!");
      $('#dtClaimTodo').bootstrapTable('refresh');
      }else{
      MessageBox.error("更新坐席状态失败!");
      }
      });
      }

      update

      $('#dtClaimTodo').bootstrapTable('refresh');
  • 第三步 测试代码

IBM实习工作(一)的更多相关文章

  1. IBM实习工作(二)

    2019年秋招前夕再次到ibm项目组参加实习两周,这次主要负责的需求是建立牛奶数据池,在二级菜单建立对账单数据池,数据由Excel导入生成. 分析整个需求,主要分为以下几块: 1.牛奶数据池前台页面, ...

  2. 技术之美[程序人生]我在IBM实习的日子

    写这篇文章的时候,我已经在IBM正式工作了,看看上一篇博文的发布日期,才发现,我已经将近三个月没有更新博客了,多么惊人!为什么这么久?期间发生了很多事情.最重要的一件就是我大学毕业了!毕业的那么平淡, ...

  3. IBM实习

    来到北京,进入IBM实习已经好多天了,两个月的暑假,两个月夏日在这里度过了,并将在未来个一个月里面,仍将在这里走过,但是我却一无所成,现在仍然只在徘徊中游走,丹迪什么时候能真正懂得实习的难得可贵,懂得 ...

  4. 【SQL】数据库运维实习工作经验

    1.导入表格的时候回出现类型不对应的问题,T-SQL代码如下: USE zzzj2017 ALTER TABLE CJ ALTER COLUMN 付款时间 datetime    2.删除 USE s ...

  5. 因为 MongoDB 没入门,我丢了一份实习工作

    有时候不得不感慨一下,系统升级真的是好处多多,不仅让我有机会重构了之前的烂代码,也满足了我积极好学的虚荣心.你看,Redis 入门了.Elasticsearch 入门了,这次又要入门 MongoDB, ...

  6. 如果IBM再给我一次实习机会

    2014年,我拿到了IBM斯图加特R&D的实习机会.在连续被索尼和博世拒掉之后,这个实习对我来说弥足珍贵.我学的是通信专业,在这之前与编程相关的活动只有一学期的安卓Lab,还是靠抱队友大腿才及 ...

  7. 此文记录了我从研二下学期到研三上学期的找工历程,包括百度、腾讯、网易、移动、电信、华为、中兴、IBM八家企业的面试总结和心得--转

    感谢电子通讯工程的研究生学长为大家整理了这么全面的求职总结,希望进入通信公司和互联网公司做非技术类岗位的学弟学妹们千万不要错过哦~ ---------------------------原文分割线-- ...

  8. IBM中国研究院、SAP、网易游戏、IBM2015应届生招聘笔试面试问题分享

    IBM中国研究院实习生 早在今年4月份.我面试的是IBM中国研究院的实习生岗位.主要是自然语言处理和语义网方向.那时我还在香港上学,两个考官对我进行的是电话面试,大概持续半个多小时,首先是我的自我介绍 ...

  9. Atitit 硬件 软件 的开源工作 差异对比

    Atitit 硬件 软件 的开源工作 差异对比 1.1. 模块化,标准化,以及修改的便捷性1 1.2. 生产和发布成本 1 1.3.   3. 入行门槛搞2 1.4.  在软件业极度发达的今天,任何具 ...

随机推荐

  1. java-NIO-DatagramChannel(UDP)

    Java NIO中的DatagramChannel是一个能收发UDP包的通道.因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入.它发送和接收的是数据包. 打开 DatagramChann ...

  2. 小白开学Asp.Net Core 《六》

    小白开学Asp.Net Core <六> —— 探究.Net Core 跨平台的奥秘 1.写这篇文章的初衷 有好多朋友反馈看不懂我写的开源的一个练手项目(GitHub:https://gi ...

  3. MySQL数据库设计与开发规范

    目录 1. 规范背景与目的 2. 设计规范 2.1. 数据库设计 2.1.1. 库名 2.1.2. 表结构 2.1.3. 列数据类型优化 2.1.4. 索引设计 2.1.5. 分库分表.分区表 2.1 ...

  4. Java设计模式学习笔记(二) 简单工厂模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 正文开始... 1. 简介 简单工厂模式不属于GoF23中设计模式之一,但在软件开发中应用也较为 ...

  5. pdfminer获取每页的layout

    #! python2 # coding: utf-8 import sys from pdfminer import pdfparser from pdfminer import pdfdocumen ...

  6. [HNOI2012]矿场搭建 题解

    [HNOI2012]矿场搭建 时间限制: 1 Sec  内存限制: 128 MB 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出 ...

  7. 【题解】P2916 [USACO08NOV]安慰奶牛Cheering up the Cow-C++

    原题传送门 这道题用最小生成树来完成,我选用的是kruskal(克鲁斯卡尔)来完成.这道题目在克鲁斯卡尔模板的基础上,有变动的地方只有2处:1.因为必须从一个点出发,而最小生成树最后会让所有点都连通, ...

  8. [原创]lvs+ospf+nginx实现高可用大流量web架构

    lvs+ospf+nginx实现高可用大流量web架构配置总概述 架构图: 配置如下: .quagga之zebra配置: # cat /etc/quagga/zebra.conf ! ! Zebra ...

  9. iOS程序员如何提升核心竞争力,防止自己被裁员?

    前言: 核心竞争力最早由普拉哈拉德和加里·哈默尔两位教授提出,通常认为核心竞争力,即企业或个人相较于竞争对手而言所具备的竞争优势与核心能力差异,说白了就是你的优势,而且最好是独一无二的的优势,这就是核 ...

  10. 在工作中常用的Linux命令

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 之前写过一篇 < 在公司做的项目和自己在学校做 ...