國稅辦公系統項目 已看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;       }   }  

相關文章
相關標籤/搜索