程序员工作经验谈之商贸平台

程序员工作经验谈
1、怎样顺利找到工作,并稳稳当当坐下来呢br> ①如何通过面试br> 答:态度要积极,要听话、积极并且有热情。
表达能力要良好,能够流利介绍个人情况,例如工作情况,为何离职等。
专业基础要扎实,包括理论知识、J2EE基础知识并且能够熟练使用开发工具。
项目能力要展示出来,需要介绍项目背景,介绍核心业务模块及设计上的难点(特色、亮点)并且表述在项目中的工作职责及成就。
②如何通过试用期br> 答:注重团队协作,要跟团队领导和同事打成一片。
快速适应岗位要求,要动手能力强,快速、高质量完成领导交给的任务,熟悉业务、编写文档,并且能够培训客户。
③如何升职加薪br> 答:要能够独当一面,业务要精通,能够独立完成项目,技术难点要能够攻克或者能够当小组长带新人。

2、架构重要吗br> 企业经过长年积累,都有资深的程序人员,都有成型的开发框架,这些框架基本在主流框架上做封装,我们开发人员第一要务就是在这些框架上来实现用户需求。所以,在学习框架的时候要学习其中的思想,从而能够举一反三,不要拘泥于任何具体的框架。

3、编码是程序员的所有工作吗br> 初级程序员要求:业务(30%)、编码(25%)、沟通(20%)、设计(10%)、文档(10%)。
所谓的项目经验=业务+设计思路,所以程序员要认识到编码只是工作的一部分,要多熟悉业务,要注重设计并且加强沟通,提升自己写文档的能力。
02 学习项目预热阶段
1、如何学习此项目br> ①通过此项目,熟悉项目开发流程。
成立项目组、分工合作、需求调研、设计、编码、交付客户、上线运行、维护。
②通过此项目,熟悉业务需求。
加深对物流行业、出口贸易、货运管理的业务理解。
③通过此项目,拓展设计思路。
考虑如何将用户的需求转化为数据库表和代码实现br> 考虑如何优化设计,以最小的代价得到最高的运行和开发效率,同时业务逻辑清晰简洁。
综上:学习本项目,要主攻业务以及设计思路,而不是编码。

2、分组开发此项目(如下图)

3、项目的开发架构(减少关注点)

4、项目开发环境

5、课程安排(模拟软件企业开发环境,分组开发)

6、项目要求
要把握三图:用例图、结构图、模型图
要把握三句:背景、业务、亮点
要把握三块:合同、打印、 表
03 熟悉项目背景和项目需求
1、项目背景
①杰信商贸是物流行业一家专门从事进出口玻璃器皿贸易的公司。公司总部位于十一个朝代的帝王之都西安,业务遍及欧美。随着公司不断发展壮大,旧的信息系统已无法满足公司的快速发展需求,妨碍公司成长,在此背景下,公司领导决定研发《杰信商贸综合管理平台》。
②《杰信商贸综合管理平台》分三期完成。一期完成仓储管理(包括:采购单、仓库、货物、条形码、入库、出库、退货、盘点、库存、库存上限 警、统计查询)和展会管理(包括:展会管理、出单管理),形成货物统一数字化管理。二期完成货运全流程管理,包括购销合同、出货表统计、出口 运、HOME装箱单、装箱单、委托单、发票、财务统计等。三期完成决策分析(包括:成本分析图、销售情况统计、重点客户、经营情况同期比对统计、工作绩效),为公司经营决策提供数据支持。
附:HOME装箱单是给客户看的单子,相当于预装箱单。
③系统上线后,解决了客户的实际问题,促进了公司的发展,得到公司认可和赞誉。
【仓储子系统】:实现仓储的信息化管理,公司管理层随时了解进货、出货、损耗及库存情况,为公司精细化管理,0库存的经营目标奠定了扎实的基础。
【展会子系统】:在展会上快速打印出客户关心的产品,为客户节约了宝贵的时间,赢得客户的认可,促进了销售人员现场签单的几率。当其它公司还在手工画图,我们已经将精美的文件递到了客户手中。
【货运子系统】:使业务流程更加顺畅,信息传递更加迅速,提高了办理效率,提高了分散全球各地部门协作能力。充分利用计算机的快速计算,将客户从日常琐事解放出来,可以将更多精力投入到公司经营上。用户相当满意,给予很高评价。

2、项目需求
①用例图

②系统功能结构图

04 了解系统特色(面试重点)
1、系统升级改造,由struts1.1升级为struts2.3(整合)
按领导要求,对本项目进行升级改造。将struts1升级为struts2,工作量巨大,3个人修改了半个月,并经过大量测试。struts1和struts2不能完全共存,不能简单的映射.do到上struts2。Action层几乎颠覆性的进行改造。由于jsp中未使用struts1的标签,这部分不需要大改。经过改造,减少了大量的struts-config-模块.xml配置文件,减少了大量的action,action内方法调用更加简洁。但由于本系统访问人数在百人内,也没有集中的业务访问,因此性能提升不明显。

2、流程控制,合同、 运、装箱、委托、发票、财务
简洁的流程控制设计,实现流程的流转,同时可以实现流程的退回。例如: 运模块。录入时状态为“草稿”,此时下一个流程“装箱”将无法看到新录入的信息,当录入者确定录入的 运信息无误时,点击“保存”,状态变为“已上 ”,此时负责装箱单处理的专责才可以看到其信息。其选择多个 运,进行【装箱】。保存后状态变为“装箱”,委托专责才可以看到装箱信息,进行【委托】,保存后状态变为“委托“,发票专责才可以看到装箱和委托信息,进行【发票】,保存后状态变为”发票,财务专责才可以看到装箱、委托和发票信息,进行【财务】,保存后状态变为“财务”。此时合同管理员才可以进行归档,进行【归档】,流程完成,信息变为历史信息,只能在历史信息中进行检索。这样减少当前信息检索的数据,加快信息的查询和显示。

3、信息复制,合同、货物、附件信息快速复制
系统实现信息快速复制功能,充分方便使用者。例如:通常建立购销合同后,合同中会包含数十个货物,每个货物有多个附件。这样一个购销合同包括合同下的货物和附件的信息近百项。有时客户在录入新合同时,信息会基本和某个旧合同非常近似。如果手工录入,录入量非常繁重,同时很低效。而系统实现点击【复制】功能,自动复制合同的信息,合同下货物信息,对应货物下的附件信息。原来数10分钟完成的事情,半秒中就完成。用户只需在复制的合同上修改相应信息,使用起来方便许多。系统上线后,此功能深受客户欢迎。

4、模板打印,基于excel模板的打印,poi的全面应用
实现用户复杂业务单据的打印,利用第三方工具poi实现数据输出到excel中,并在线下载打印。包括按用户模板打印,包括数据的自动计算。例如购销合同的分页打印, 运单自动计算分工作簿打印,出货月统计表的页眉自动设置,财务 表的自动小计、合计功能,同时系统还实现了根据单元格内容,自动调整其单元格高度。由于使用excel,用户无需安装第三方打印插件。同时系统支持excel2003、excel2007、excel2010多个版本。同时,无需花钱购买第三方 表工具,为客户节约了系统资金上的投入。系统上线后,打印出彩色单据,非常漂亮,在展会上给国外客户看,老外很新奇,吸引不少订单。并且数据统计分毫不差,用户非常满意。

5、防止文件打印并发,基于windows文件处理机制
系统为多部门人员互联 上使用,难免出现并发情况,在架构设计上,充分考虑到这种情况。例如当两个用户打印同一个购销合同时,系统会判断是否临时目录中是否有打印文件存在,有则换名称,再次判断,直到不存在时,才会执行打印。这样充分防止多用户并发访问下的打印。同时,为防止临时目录下文件过多,难以维护,自动按打印时的日期分成多个目录。

6、统一查询,清空机制
实现字符串字段简单配置即可实现灵活组合的类似google搜索条的模糊多条件查询效果。同时在页面中实现统一的查询条。利用js对查询条数据快速清空,由于利用js,进行本地操作,快速,不耗费服务器资源。此功能大大提高了查询功能开发的效率,复制代码,简单配置即可。

7、统一数据字典,一张表,树形n级分类支持【难点】
传统数据字典设计为两张表,一个分类、一个内容。维护时也不方便。两张表分别维护。本系统采用一张表设计,使数据字典维护非常便捷。同时支持n级树形结构,支持内容的排序。同时树支持截断树,这样方便权限控制。

8、用户个性化配置,用户根据自己的需要可以动态定制自己的信息
用户录入数据时,很多内容都相同,特别很多大段的文字内容,数百字,如果每次都录入,既耗时,也耗力。系统支持用户将常录入的信息可以用户自行配置,这样在新建页面时,系统自动填充这些内容,用户只需修改。减少了用户的录入。同时当信息发生变化时,用户只需自行修改,就适应了新的变化。不仅加快了信息录入的速度和录入的准确率,减少了错误,还有很好的适应性,快速适应用户需求的变化。而且根据每个操作用户的不同,他们都可以自行配置。

9、数据挖掘,业务增值,挖掘基础数据的价值,为高层提高决策数据
充分利用用户的基础数据,深挖用户潜在需求和充分发挥数据的价值。例如合同数据。合同中有客户信息,有货物信息,有附件信息,有货物的生产厂家信息。从合同的签订日期,我们实现公司一年签单气泡图,从中直观的看到企业签单旺季和淡季。从货物信息,我们实现按月、季度、年度统计公司最受欢迎产品和最不受欢迎的产品,同时进行近3年产品受欢迎趋势图。从货物销售的客户中分析全球货物销售比例饼图。从生产厂家分析出公司合作的厂家生产比例图。这些数据的深度分析结果为公司的经营提供了直接的一手的决策信息支持。此功能客户公司高层给予高度肯定。
05 系统搭建(非Maven搭建)
1、新建web project,发布到ROOT下(项目为UTF-8编码)

修改JSP编码为UTF-8。

2、引入jar包
①拷贝{资料/4-jar包/ALL所有包}下内容到工程的lib目录中,所有jar包包含:
Hibernate 3.5.6
Spring 3.0.2
Struts 2.3
数据库驱动 mysql 5.0.87
基础包 junit,poi,log4j,c3p0
②配置jre环境,选择jdk1.6,选择用1.6编译

3、拷贝工具类、拷贝界面原型
拷贝{代码/02-工具类/cn}下内容到工程的src下
拷贝{资料/3-界面原型/ROOT}下内容到工程的WebRoot下

附:目录结构

4、配置文件 hibernate.cfg.xml ,beans.xml ,struts.xml ,web.xml
查看{资料/4-查看配置文件}中的文件,拷贝这些文件然后进行修改。
注:
找工作过程中如果碰到了机试,那么最好带上U盘,提前准备好jar包以及配置文件。
hibernate.cfg.xml

beans.xml

struts.xml

web.xml

5、建立数据库&测试表
建立数据库,编码格式为uft8
CREATE DATABASE IF NOT EXISTS itcastjkdb DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

6、发布、测试(没有 错,说明系统搭建成功)

附:
将他人的项目导入MyEclipse的时候,可能由于某些原因会莫名奇怪的 错,并且找不到原因。这时候可以点击Project–>Clean,进行重新编译。但是重新进行编译,MyEclipse会做语法校验,比如xml、js等校验,会影响编译进度,因此最好将校验关闭掉。

但也可以单独对某个文件或者文件夹进行Validation操作。

06 系统代码
1、业务逻辑
数据字典是系统的基础,其作用是减少重复信息,保证数据的唯一性。
本系统包括人员级别、厂家类型、附件类型、货物类型等。用户可以自行扩充,提高系统的灵活性和程序的扩展性。

2、拿到问题,怎么样去做br> ①分析
②设计(转换成数据库表、业务控制)、可行性分析
③编码

3、功能描述及其分析

4、数据库设计,执行SQL,创建数据库表

附:
1、数据库表主键用什么类型br> int long 处理速度快
varchar(uuid) 使用uuid,可以在项目整合的时候,防止主键冲突
2、建立数据库表的时候创建外键否br> 测试、调试阶段:不需要创建外键关系,使用代码来维护。
系统上线稳定维护阶段:创建外键。防止用户不小心改动数据造成外键关系错误。

5、创建映射文件ClassCode.hbm.xml、TextCode.hbm.xml
ClassCode.hbm.xml

TextCode.hbm.xml

6、创建PO文件ClassCode.java、TextCode.java
ClassCode.java
public class ClassCode{
public Set getTextCodes() {
return textCodes ;
}
public void setTextCodes (Set textCodes) {
this.textCodes = textCodes;
}
private Set textCodes ;
private String id ;
private String name ;
public String getId() {
return id ;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name ;
}
public void setName(String name) {
this.name = name;
}
}

TextCode.java
public class TextCode {
private ClassCode classCode ;
public ClassCode getClassCode() {
return classCode ;
}
public void setClassCode(ClassCode classCode) {
this.classCode = classCode;
}
private String id ;
private String name ;
public String getId() {
return id ;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name ;
}
public void setName(String name) {
this.name = name;
}
}

7、创建dao
TextCodeDAO.java
public class TextCodeDAO extends _RootDAO {

}

ClassCodeDAO.java
public class ClassCodeDAO extends _RootDAO {

}

8、声明
hibernate.cfg.xml

beans.xml


9、创建action:列表(方法命名规则:to+动作;转向页面命名规则:p+动作)
TextCodeAction.java
public class TextCodeAction extends _BaseStruts2Action implements ModelDriven {
private TextCode model = new TextCode();
public TextCode getModel() {
return model ;
}

}

ClassCodeAction.java
public class ClassCodeAction extends _BaseStruts2Action implements ModelDriven {
private ClassCode model = new ClassCode();
public ClassCode getModel() {
return model ;
}

}

附:
1、为什么保存、修改后不返回list页面而返回的是action的list方法br> 答:为了准备列表的数据。可以直接返回页面,那样列表页面就没有数据可供显示。
2、上面的getDao方法继承自_BaseStruts2Action.java,目的就是获取DAO对象。
public Object getDao(String dao){
return AppContext.getInstance().getAppContext().getBean(dao); //获取DAO对象
}

注:
如果对action进行拦截控制,那最好不直接调用,因为内部调用,拦截器无法发挥作用。

10、创建jsp页面WebRoot/baseinfo/classcode/jClassCodeList.jsp、jClassCodeUpdate.jsp、jClassCodeCreate.jsp(全码见源代码,这里只列出重点代码)
拷贝“资料3-界面原型JSP文件模板”下的模板文件,此模板通常由美工提供,主要是定系统的样式。

修改模板文件,加入业务内容:
jClassCodeList.jsp

${id} ${name}

jClassCodeUpdate.jsp

action保存时就靠它来区分是新增还是修改。

附:
1、为何新建、修改时转向的是action的tocreate、toupdate方法,而不直接转向页面呢/p>

  • 新建
  • 修改
  • 答:为了准备数据,就是在为新建页面上的下拉框准备数据。 注: 上面的formSubmit方法是从common.js中引入的,目的是为页面中的第一个表单属性赋值。

    2、将信息放在request中,页面该如何获取呢br> ClassCodeAction.java
    public String list(){
    List dataList = oDao.find(“from ClassCode”);
    HttpServletRequest request = ServletActionContext.getRequest();
    request.setAttribute(“dataList”, dataList);

    }
    jClassCodeList.jsp

    修改left.jsp添加访问入口:
    代码分类 a>

    11、创建struts-baseinfo.xml

    12、测试系统
    向数据库中插入两条数据,然后登录系统进行测试。

    测试列表显示

    测试新增

    测试修改

    测试删除

    13、实现textCode:复制action,复制页面
    替换ClassCode相关的Action与页面中信息为TextCode的信息

    添加分类列表
    TextCodeAction中实现tocreate方法,为分类准备数据。
    TextCodeAction.java
    //转向新增页面
    public String tocreate(){
    //准备数据 获取代码分类 下拉表
    TextCodeDAO oDao = (TextCodeDAO) this .getDao(“daoTextCode” );
    List classCodeList = oDao.find( “from ClassCode o”);
    ActionContext. getContext().put( “classCodeList”, classCodeList);

    }

    修改create页面

    分类:

    测试新增分类下拉列表

    附:
    由于修改页面中也需要分类下拉列表,因此做与上面相似的操作,此处略。

    增加查看功能
    TextCodeAction中实现toview方法。
    TextCodeAction.java
    public String toview(){
    //准备数据
    TextCodeDAO oDao = (TextCodeDAO) this.getDao(“daoTextCode” );
    TextCode obj = (TextCode) oDao.get(TextCode. class, model.getId());
    ActionContext.getContext().getValueStack().push(obj);

    }

    加查看按钮 jTextCodeList.jsp

  • 查看
  • 新建jTextCodeView.jsp查看页面

  • 返回 注: 如果用浏览器的“回退”按钮返回,那么如果其他用户对数据库进行了更新,则不会显示出来。
  • 修改view页面

    分类 $ {classCode.name}

    测试查看

    注:
    通过在列表记录上增加快捷链接

    ${classCode.name } 就可以实现通过直接点击分类名就可以查看本条记录的详细信息。

    实现批量删除
    TextCodeAction中实现delete方法。
    TextCodeAction.java
    //批量删除
    public String delete(){
    //注意分隔符,struts2中,如果页面上有多个元素id相同,那么它们提交后,值就会以“, ”组织起来存入model中。
    String[] ids = model .getId().split( “, ” );
    TextCodeDAO oDao = (TextCodeDAO) this .getDao(“daoTextCode” );
    oDao.deleteAllById(ids, TextCode. class );

    }

    测试批量删除

    附:
    什么时候使用Serializablebr> ①复合主键
    ②文件上传下载

    注:
    如果使用EditPlus直接修改JSP,MyEclipse中的项目文件夹一定要刷新一次,否则Tomcat无法部署修改过的JSP。
    07 厂家信息
    1、业务逻辑
    基础模块:维护常用信息,目的也是减少信息重复,保证信息的一致性。和数据字典的区别是,数据字典结构简单,一般为编 +内容,常用于下拉框。而基础信息较复杂,多个业务字段。常用于业务中管理信息。
    厂家信息:管理与公司合作的生产厂家,包括厂家名称、联系人、地址、电话等信息。用在购销合同中货物、附件可选择对应的厂家。

    2、功能描述及其分析

    3、技术要点

    4、数据库设计,执行SQL,创建数据库表

    5、创建PO文件
    public class Factory {
    private String id ;
    private String ctype ;
    private String typeName ;
    private String fullName ;
    private String factoryName ;
    private String contractor ;
    private String phone ;
    private String mobile ;
    private String fax ;
    private String cnote ;
    private String inspector ;
    private String state ;
    //成员变量不要用int类型,采用包装类
    private Integer orderNo ;
    private String createBy ;
    private String createDept ;
    private Date createTime ;
    …//get、set方法
    }

    6、创建映射文件Factory.hbm.xml

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年4月8日
下一篇 2022年4月8日

相关推荐