国税办公系统项目 已看1

项目撰写

注意:在写下面的项目经验以前;应该在简历前面的我的描述那里把本身在传智播客学的技术点都描述清楚。java

 

 

项目名称android

XX国税局协同办公平台ios

项目描述web

纳税服务系统是XX国税局协同办公平台中的一个子系统。纳税服务系统包括移动客户端和后台管理端。面试

 

一、 客户端ajax

客户端的功能包括会员注册登陆、我的信息维护、查询信息、我要咨询、我要投诉、我要预定、查看易告知信息并可填写调查问卷。(客户端包括有androidios客户端)算法

注册/登陆:用户可使用手机号注册系统并可使用动态验证码和静态密码登陆;spring

我的信息维护:用户能够修更名称、头像、单位、密码等我的信息;数据库

查询信息:能够查询信息发布管理模块发布的是发布状态的信息;编程

我要咨询:注册用户能够在移动端经过填写咨询信息,而后提交到系统的纳税咨询管理中由后台管理员进行处理;若是有处理结果则用户能够查看回复结果;

我要投诉:注册用户能够在移动端经过填写投诉内容,而后提交到系统的投诉受理管理中由后台管理员进行处理;若是有处理结果则用户能够查看回复结果;

我要预定:注册用户能够在移动端经过填写预定事项、预定内容、地点、时间,而后提交预定到系统的服务预定管理中由后台对应事项的处理人员进行处理;若是有处理结果则用户能够查看回复结果;

易告知:能够查看由系统定时发送的催办和催缴税的信息;

调查问卷:能够查看由系统推送的调查问卷和本身填写过的调查问卷内容。

 

二、 后台端

后台端的功能包括会员管理、信息发布管理、纳税咨询管理、投诉受理管理、预定服务管理、易告知管理、服务调查管理。在后台开发中以SSH做为开发框架。在会员管理中利用POI导入大量的初始会员数据和导出系统的会员记录到Excel;在日期输入上选用了WDatePicker做为日期组件高度自定义日期输入功能;灵活使用Struts各种标签,如复选框标签CheckboxlistList/Map等集合的数据迭代并显示;充分使用ajax的同步与异步方式进行系统功能处理;巧妙的利用Spring中提供的工具类进行业务逻辑操做,如HibernateDaoSupport,WebApplicationContextUtils。信息发布管理引入兼容性极佳、配置简易的富文本编辑器UEditor来处理系统的多格式文本内容、图表、地图等;熟练使用PowerDesigner工具进行数据库建模并逆向工程开发功能模块;自定义灵活度较高的查询工具类QueryHelper可自由组合查询并相应下降出错机率。在异步获取二级联动Json数据时分别利用输出流直接输出和利用Struts框架自动输出方式实现;在系统的定时任务调度中利用配置和开发使用都方便的Quartz并没有缝融入Sping中并精确制定任务的执行时间。在系统的投诉数统计图上充分考虑到移动端Flash显示的局限性而使用跨终端的Fusioncharts来展现系统的2d/3d柱状图、饼图、曲线图、块图等几十种统计图表。

会员管理:能够对手机注册的会员信息进行管理并导入导出;

信息发布管理:在后台端能够添加信息,而后由特定管理人员进行信息审核并发布,发布后的信息可在移动端展现;

纳税咨询管理:管理由移动端用户提交的一些咨询纳税信息的问题并能够在后台端进行回复;

投诉受理管理:管理由移动端用户提交的投诉信息并能够在后台端进行受理回复;自动受理历史待受理的投诉;生成年度投诉数3D统计图表;

预定服务管理:由预定事项和预定服务组成;其中事项对应有特定的处理人,当用户预定了事项后由该事项对应的处理人进行预定受理。预定的受理状况将在移动端可查看;

易告知管理:主要是在后台端作一个定时对批量手机号用户进行信息的推送和告知其纳税信息;易告知的信息类型包含催办和催缴,当系统定时任务到发布时机将自动推送信息给移动端用户;

服务调查管理:能够制定系统的调查问卷;问卷形式主要由单选和多选题构成,当问卷制定并发布后用户能够在移动端填写调查问卷;管理员能够在系统管理中查看某一问卷的统计状况。

项目团队组成

后台开发人员3名;客户端开发人员2名(包含android和ios);测试人员1名。

开发时间与计划

鉴于同窗们每每写1年的工做经验;因此项目一在简历中的时间跨度大概能够到4-5个月;周期能够以下分配:

需求调研与分析时间:3

界面设计、美工与数据库、详细设计:3

开发:4

测试:1

上线部署、需求变动修改:4

项目开发环境

操做系统windows server 2008

数据库Oracle 10g

应用服务器tomcat/weblogic

开发工具MyEclipse/EclipseRational RoseEdraw MaxPower Designer

 

项目职责

Team Leader版本

前期需求收集和整理需求文档;辅助系统设计师设计系统原型;配合美工根据系统原型进行切图;根据需求文档进行详细设计、数据库设计;协调项目组开发人员进行开发。在系统功能上开发了会员管理、信息发布管理、投诉受理管理、预定服务管理,编写客户端调用接口和文档;安排测试计划和整合系统的各个功能模块并编写系统相关文档。

 

Team Leader版本

参与并完善需求、设计文档中负责开发的功能模块的UML图形和功能描述、进行数据库设计。在开发阶段按照项目组的要求独立完成会员管理、信息发布管理、纳税咨询管理、投诉受理管理、预定服务管理等功能模块的开发与测试。配合开发团队进行联合调试和编写系统相关文档。

 

项目面试问题

一、 请描述下你作的项目

纳税服务系统是国税协同办公平台的一个子系统;主要目的是给用户在移动端上可快速查询国税相关信息并能够在后台对发布的信息进行管理。整个系统包括了移动端和后台端:在移动端主要是查看国税局发布的信息、通知、维护我的信息等;然后台管理功能包括:会员管理、信息发布管理、纳税咨询管理、投诉受理管理、预定服务管理、易告知管理、服务调查管理。我作了其中的xxx。。。等模块。

springhibernate管理事务有啥区别

1、从编码上说,hibernate的事务管理是硬编码,是写在程序之中的。这就形成了,若是须要调整,就要修改源码,从新编译。

2、从事务控制的位置来讲 hibernate是持久层框架,事务是控制在持久层的,这样就形成了越权操做。事务应放在业务层,而非持久层

3、从代码维护上来讲hibernate控制事务,须要在每一个须要事务支持的地方编写代码,后期维护不便。

简单介绍一下你对spring的理解?

任何框架在植入项目之中都不能带来效率的提高,反而是会带来效率的降低。由于java核心机制的问题,内存中多建立一个对象,就会形成性能下降。

可是,spring带来的好处仍是显而易见的:

1它的核心之一IoC控制反转,下降了咱们程序的耦合度,使咱们能够把项目设计成为一个可插拔的组件式工程

2它的另外一大核心AOP面向切面,使咱们在开发过程当中,精力获得释放,能够更专一的去理解客户的需求。而且在后期维护时,能够只维护不多的一部分。

利用AOP能够对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度下降,能够更专一的去理解客户的需求同时提升了开发的效率。

3、它提供的事务管理机制,采用声明的方式来配置事务,从而在维护时无需改动源码,解决了程序硬编码的弊端。

4、它提供的DAO模板使咱们的持久层开发又多了一种途径。jdbcTemplate

5它能够整合其余时下流行的框架,使咱们在管理项目时,更加清晰,明确。

而且以如今计算机的水平,使用spring框架形成的这点降低对程序的影响是微乎其微的。

因此,整体来讲spring框架的使用仍是利大于弊的。

Spring是干吗的?

它是一个full-stack框架,提供了从表现层到业务层再到持久层的一套完整的解决方案。咱们在项目中能够只使用spring一个框架,它就能够提供表现层的mvc框架,持久层的Dao框架。

它的两大核心IoCAOP更是为咱们程序解耦和代码简洁易维护提供了支持。

你知道依赖注入么?简单介绍一下

首先,明确依赖注入是实现控制反转的一种思想(另外一种是依赖查找)。

其次,在开发过程当中,咱们须要某个类的实例时,是由使用者为咱们提供该类的实例。而不是本身去获取。

最后,实现依赖注入的方式能够是使用构造方法注入或者set方法注入两种方式。

spring中注入的方式就有不少了,好比constructor-arg元素,property元素,p名称空间等等。

你知道控制反转么?简单介绍一下

它是spring的核心之一。或者说是spring的基础核心,spring的其他核心功能都必须有IoC的支持。

控制反转指的是,咱们在获取对象的时候,由以前的主动出击,变成了被动接收。也就是说,在编写某个类时,只须要提供一个接口类型的类成员,并不须要关系具体的实现类,而是由使用者在使用时提供。这就下降了类和类之间的耦合度。

 

二、 结合项目谈谈你对MVC的理解

MVCModelViewControler的简称。即模型—视图—控制器。MVC是一种设计模式,它强制性的把应用程序的输入、处理和输出分开。 

    MVC中的模型、视图、控制器它们分别担负着不一样的任务。 

    视图该部分采用JSP实现,视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并接受用户的输入。视图不进行任何业务逻辑处理。 

    模型Model部分:由JavaBean组成,ActionForm用于封装用户的请求参数,封装成ActionForm对象,该对象被ActionServlet转发给ActionAction根据ActionFrom里面的请求参数处理用户的请求JavaBean则封装了底层的业务逻辑,包括数据库访问等。

一个模型能为多个视图提供数据。这提升了应用程序的重用性 

    控制器控制器接受请求并调用相应的模型去处理请求。             

而后根据处理的结果调用相应的视图来显示处理的结果。 

 

 

 

MVC的处理过程:首先控制器接受用户的请求,调用相应的模型来进行业务处理,并返回数据给控制器。控制器调用相应的视图来显示处理的结果。并经过视图呈现给用户。

如在项目中要对应MVC的话:View 对应项目中JspControler对应ActionModel 对应service+dao层的业务逻辑和持久层的操做。

 

三、 项目中为何使用SSH

1. 使用Struts是由于struts是基于MVC模式的,很好的将应用程序进行了分层,使开发者更关注于业务逻辑的实现;struts有着丰富的标签库,能大大提升开发效率。 

2. 使用Hibernate:由于hibernateJava应用提供了一个易用的、高效率的对象关系映射框架(ORMhibernate是个轻量级的持久性框架,功能丰富。 

 3. 使用Spring:由于spring基于IoC(Inversion of Control,反向控制)AOP构架多层j2ee系统的框架。

 

四、 挑选一个你作的功能说明SSH框架的应用原理

在表现层中,首先经过JSP页面实现交互界面,负责传送请求(Request)和接收响应(Response),而后Struts根据配置文件(*-struts.xml)ActionServlet接收到的Request委派给相应的Action处理。

② 在业务层中,管理服务组件的Spring IoC容器负责向Action提供业务模型(Model)组件和该组件的协做对象数据处理(DAO)组件完成业务逻辑,并提供事务处理、缓冲池等容器组件以提高系统性能和保证数据的完整性。

③ 在持久层中,则依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据,并返回处理结果。

 

结合上面的概述;而后能够把咱们作的信息发布管理模块用上述的方式实例化描述一遍。

 

五、 Struts工做原理

-----------------------------------按照Struts工做原理图地说:

1.客户端发出一个指向servlet容器的请求;

2.请求会通过StrutsPrepareAndExecuteFilter过滤器;

3.过滤器和请求将访问struts2的底层框架结构。在web容器启动时,struts2框架会自动加载配置文件里相关参数,并转换成相应的类。

如:ConfigurationManagerActionMapperObjectFactoryConfigurationManager 存有配置文件的一些基本信息,ActionMapper存有action的配置信息。在请求过程当中全部的对象(ActionResultsInterceptors,等)都是经过ObjectFactory来建立的。过滤器会经过询问ActionMapper类来查找请求中须要用到的Action

4.若是找到须要调用的Action,过滤器会把请求的处理交给ActionProxyActionProxyAction的代理对象。ActionProxy经过ConfigurationManager询问框架的配置文件,找到须要调用的Action类。

5.ActionProxy建立一个ActionInvocation的实例。ActionInvocationActionProxy层之下,它表示了Action的执行状态,或者说它控制的Action的执行步骤。它持有Action实例和全部的Interceptor

6.ActionInvocation实例使用命名模式来调用,1. ActionInvocation初始化时,根据配置,加载Action相关的全部Interceptor2. 经过ActionInvocation.invoke方法调用Action实现时,执行Interceptor。在调用Action的过程先后,涉及到相关拦截器(intercepetor)的调用。

7. 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。

 

 

---------------------------------通俗地说:

è发送http请求

èWeb服务器(tomcat/weblogic...)

è执行struts核心过滤器StrutsPrepareAndExecuteFilter

è加载struts配置文件中配置信息,找到对应的Action类并实例化

è执行各种拦截器和Action中对应方法

è配置文件中找到返回结果

è转发到具体页面或其它操做

 

(9)Spring的隔离级别:Default默认的事务隔离级别

READ_UNCOMMITTED读未提交,一个事务能够操做另一个未提交的事务,不能避免脏读,不可重复读,幻读,隔离级别最低,并发性 能最高

READ_COMMITTED读已提交,一个事务不能够操做另一个未提交的事务, 能防止脏读,不能避免不可重复读,幻读。

repeatable_read可以避免脏读,不可重复读,不能避免幻读

SERIALIZABLE隔离级别最高,消耗资源最低,代价最高,可以防止脏读, 不可重复读,幻读。

6. Struts的工做流程;

工做流程:

(1)客户端提交一个HttpServletRequest请求(actionJSP页面)。

   (2)请求被提交到一系列Filter过滤器,如ActionCleanUpFilterDispatcher等。

   (3)FilterDispatcherStruts2控制器的核心,它一般是过滤器链中的最后一个过滤器.

   (4)请求被发送到FilterDispatcher后,FilterDispatcher询问ActionMapper时候须要调用某个action来处理这个Request

   (5)若是ActionMapper决定须要调用某个actionFilterDispatcher则把请求交给ActionProxy进行处理.

   (6)ActionProxy经过Configuration Manager询问框架的配置文件struts.xml,找到调用的action类。

   (7)ActionProxy建立一个ActionInvocation实例,经过代理模式调用Action

   (8)action执行完毕后,返回一个result字符串,此时再按相反的顺序经过Intercepter拦截器。

   (9)最后ActionInvocation实例,负责根据struts.xml中配置result元素,找到与之相对应的result,决定进一步输出。

基本简要流程:

I.客户端浏览器发出HTTP请求。

II.根据web.xml配置,该请求被FilterDispatcher接收。

III.根据struts.xml配置,找到须要调用的Action类和方法, 并经过IoC方式,将值注入给Aciton

IV.Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。  

    VI.Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。VI.返回HTTP响应到客户端浏览器。 

 

六、 Struts有什么优缺点

优势:

    1. 实现MVC模式,结构清晰;

    2. 丰富的struts的标记库,利用好能大大提升开发效率;

    3. 全局结果与声明式异常;

    4. 可以使用OGNL进行参数传递

    5. 各个类方便使用的拦截器

 

 缺点:

在并发量比较大的场景中,.每次请求都要建立一个Action,资源消耗比较大.

    1. 转到表现层时,须要配置结果页面;页面多了比较繁杂;

    2. Servlet的依赖性过强

        3. struts标签稍微比el表达式繁重

 

使用场景

SSH对于中小型项目提供了一套完整的解决方案.在表关系相对简单,数据量不大,并发量不高的项目中,可以极大的提升开发效率.

表关系复杂或数据量比较大时,可使用Mybatis替换Hibernate.

并发量很高时可使用SpringMVC替换struts

 

Spring优缺点:

Spring是一个轻量级的控制反转(IoC)、面向切面(AOP)、面向接口、事务管理、包容促进其它框架;使系统中用到的其它框架耦合程度大大下降,拓展性强、简单易用好管理。

1、它的核心之一IoC,下降了咱们程序的耦合度,使咱们能够把项目设计成为一个可插拔的组件式工程。

2、它的另外一大核心AOP,使咱们在开发过程当中,精力获得释放,能够更专一的去理解客户的需求。而且在后期维护时,能够只维护不多的一部分。

3、它提供的事务管理机制,采用声明的方式来配置事务,从而在维护时无需改动源码,解决了程序硬编码的弊端。

4、它提供的DAO模板使咱们的持久层开发又多了一种途径。

5、它能够整合其余时下流行的框架,使咱们在管理项目时,更加清晰,明确。

而且以如今计算机的水平,使用spring框架形成的这点降低对程序的影响是微乎其微的。

因此,整体来讲spring框架的使用仍是利大于弊的。

 

 

七、 spring在项目中如何充当粘合剂

1、在项目中利用springIOC(控制反转或依赖注入),明确地定义组件接口(UserDAO),开发者能够独立开发各个组件, 而后根据组件间的依赖关系组装(UserAction依赖于UserService,UserService依赖于UserDAO)运行,很好的把Struts(Action)hibernate(DAO的实现)结合起来;

2spring的事务管理把hibernate对数据库的操做进行了事务配置

 

八、 描述在系统中如何使用了Spring的事务控制

Spring事务包括编程式事务和声明式事务。在系统中使用了声明式的事务管理是用SpringAOP来实现的;配置了只读事务和回滚事务(传播行为为REQUIRED)当出现错误后进行回滚操做。在项目中经过aop切入事务到serivce层,这样作能使一次业务逻辑操做若是包括几个数据库操做都控制在一个事务中。

 

九、 Hibernate工做原理及为何要用

原理: 1.读取并解析配置文件 2.读取并解析映射信息,建立SessionFactory 3.打开Session 4.建立事务Transation 5.持久化操做 6.提交事务 7.关闭Session 8.关闭SesstionFactory

Hibernate优势: 1. JDBC访问数据库的代码作了封装,大大简化了数据访问层繁琐的重复性代码2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工做 3. hibernate使用Java反射机制,而不是字节码加强程序来实现透明性。 4. hibernate的性能很是好,由于它是个轻量级框架。映射的灵活性很出色。它支持各类关系数据库,从一对一到多对多的各类复杂关系。

(7) 简洁的HQL编程

(8) ‘(6) 缓存机制,提供一级缓存和二级缓存

 

hibernate框架是一个ORM的持久层框架,ORM的含义是对象关系映射,简单理解就是经过对象和关系型数据库之间创建映射信息,之后再操做对象就至关于操做数据库了。hibernate框架是对JDBC进行了轻量级的封装,能够更方便简单的对数据库完成增删改查的操做。同时也提供了查询的方式和查询的策略。例如HQL和QBC的查询方式等。还提供了缓存的策略,效率会更高。

 

 Hibernate缺点:
(1)  Hibernate在批量数据处理时有弱势

十、 Hibernate在系统中使用的优化策略

Hibernate 对数据的缓存包括两个级:一级缓存,在Session的级别上进行,主要是对象缓存,以其id为键保存对象,在Session的生命期间存在;二级缓存, 在SessionFactory的级别上进行,有对象缓存和查询缓存,查询缓存以查询条件为键保存查询结果,在SessionFactory的生命期间存 在。默认地,Hibernate只启用一级缓存。

 

关于这个问题答系统使用了Hibernate的二级缓存就好。

 

 

 

 

 

十二、 Jquery异步获取数据的方式有几种?有何区别?

1load 载入远程 HTML 文件代码并插入至 DOM

2get

3post

4ajax

5getJSON

6getScript 经过 GET 方式请求载入并执行一个 JavaScript 文件

 

1三、 简述UML并说明你使用Rose于什么状况,画什么图?

Unified Modeling Language (UML) 统一建模语言;用于在软件开发各个阶段中用图形的方式描述流程和功能需求;IBM Rational Roseuml建模工具之一比较多的在需求阶段,经常使用于画用例图、类图、时序图。

 

1四、 请简述导入导出的工具类;并说明你导出过的最大数据量

POI(合并单元格对象和背景色的应用)

 

1五、 统计图的实现方式

Fusioncharts 图表采用SVG(可缩放矢量图形)实现,无需Flash;跨终端

 

1六、 易告知信息推送方式;如何实现

在后台填写推送信息和推送名单后,系统将自动推送;后台EE开发人员只实现定时的调用由客户端开发人员写的接口推送信息。

 

1七、 简述调查问卷的制做

不在你填写的开发功能内的;只须要描述下功能。能够制定调查题目和提供单选和多选两种类型的选项;并可对调查结果进行统计。

 

1八、 系统的并发量如何?如何解决大并发量的请求?

系统并发量不大;但有在应用服务器中间件Weblogic上作负载均衡的配置。

 

1九、 项目中遇到问题如何解决?

自行解决——网络搜索——团队讨论解决

 

20、 简述你在项目中的开发流程

项目课中的设计和开发都是比较贴近实际开发的,作了的话按照当时的开发状况描述。

 

拓展

一、 使用一种排序算法排序一组数字

冒泡、直接插入、选择

 

二、 编写一个能够体现多线程的例子

 

三、 编写一个Singleton

 

12. 如何将1g的数据最快速度放进C盘中?

(1)public class Test01 {

     

    public static void main(String[] args) throws Exception{

        getInputStream("C:\\setup.log","D:\\a.txt");

    }

    private static void getInputStream(String pathName,String copyName)throws Exception{

        File file = new File(pathName);

        if(!file.exists())

            throw new RuntimeException("文件不存在呀,Copy个屁!");

        else{

            getCopy(copyName,new BufferedInputStream(new FileInputStream(file)));

        }

    }

    private static void getCopy(String copyName,BufferedInputStream bis)throws Exception{

        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(copyName));

        BufferedInputStream biss = bis;

        byte[] b = new byte[biss.available()];

        int len = 0;

        while((len = biss.read(b))!=-1){

            bos.write(b, 0, len);

        }

        bos.close();

        biss.close();

        System.out.println(copyName+"复制成功!");

    }

冒泡排序:

public static void bubbleSort(int[] numbers) {   
    int temp; // 记录临时中间值   
    int size = numbers.length; // 数组大小   
    for (int i = 0; i < size - 1; i++) {   
        for (int j = i + 1; j < size; j++) {   
            if (numbers[i] < numbers[j]) { // 交换两数的位置   
                temp = numbers[i];   
                numbers[i] = numbers[j];   
                numbers[j] = temp;   
            }   
        }   
    }   
}  

选择排序:

public static void selectSort(int[] numbers) {       int size = numbers.length, temp;       for (int i = 0; i < size; i++) {           int k = i;           for (int j = size - 1; j >i; j--)  {               if (numbers[j] < numbers[k])  k = j;           }           temp = numbers[i];           numbers[i] = numbers[k];           numbers[k] = temp;       }   }  

相关文章
相关标签/搜索