java實(shí)習(xí)總結(jié)(實(shí)習(xí)生一年工作經(jīng)驗(yàn)和技術(shù)總結(jié))
4.2 Spring IOC
4.1.1 Spring bean
1.bean注入 注解方式方便易讀,引用第三方(數(shù)據(jù)庫(kù)連接,數(shù)據(jù)庫(kù)連接池,JedisPool等)采用配置文件方式 。
2. bean作用域:Singleton,prototype,request,session,global session
3.bean生命周期:如下圖所示

文章插圖
4.3 Spring AOP
基本概念:關(guān)注點(diǎn)、切面Aspect、切入點(diǎn)pointcut、連接點(diǎn)joinpoint、通知advice、織入weave、引入introduction 。
Spring AOP支持5中類型通知,分別是MethodBeforeAdvice、AfterReturningAdvice、ThrowsAdvice、MethodInterceptor、IntroductionInterceptor(吐槽一下名字太長(zhǎng))
實(shí)現(xiàn)方式如下:
1.基于代理的AOP
2.基于@Aspect注解驅(qū)動(dòng)的切面 。(強(qiáng)烈推薦:可讀性好 , 易維護(hù),易擴(kuò)展,開發(fā)快)
3.純POJO切面 。
4.注入式Aspect切面 。
4.4 Srping事務(wù)
4.4.1 事務(wù)傳播
概念:某些操作需要保證原子性,如果中間出錯(cuò) , 需要事務(wù)回滾 。如果某個(gè)事務(wù)回滾,那么調(diào)用該事務(wù)的方法中的事務(wù)的作出如何的動(dòng)作,就是事務(wù)傳播 。
短時(shí)間內(nèi)寫不清楚 , 建議訪問
http://www.cnblogs.com/yangy608/archive/2010/12/15/1907065.html 查看 。
事務(wù)傳播屬性:
1. PROPAGATION_REQUIRED–支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù) , 就新建一個(gè)事務(wù) 。這是最常見的選擇 。
2. PROPAGATION_SUPPORTS–支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就以非事務(wù)方式執(zhí)行 。
3. PROPAGATION_MANDATORY–支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就拋出異常 。
4. PROPAGATION_REQUIRES_NEW–新建事務(wù),如果當(dāng)前存在事務(wù),把當(dāng)前事務(wù)掛起 。
5. PROPAGATION_NOT_SUPPORTED–以非事務(wù)方式執(zhí)行操作,如果當(dāng)前存在事務(wù),就把當(dāng)前事務(wù)掛起 。
6. PROPAGATION_NEVER–以非事務(wù)方式執(zhí)行,如果當(dāng)前存在事務(wù),則拋出異常 。
【實(shí)習(xí)生一年工作經(jīng)驗(yàn)和技術(shù)總結(jié) ?java實(shí)習(xí)總結(jié)】事務(wù)隔離級(jí)別:
1. ISOLATION_DEFAULT: 這是一個(gè)
PlatfromTransactionManager默認(rèn)的隔離級(jí)別 , 使用數(shù)據(jù)庫(kù)默認(rèn)的事務(wù)隔離級(jí)別.另外四個(gè)與JDBC的隔離級(jí)別相對(duì)應(yīng)
2.
ISOLATION_READ_UNCOMMITTED: 這是事務(wù)最低的隔離級(jí)別 , 充許令外一個(gè)事務(wù)可以看到這個(gè)事務(wù)未提交的數(shù)據(jù) 。這種隔離級(jí)別會(huì)產(chǎn)生臟讀,不可重復(fù)讀和幻像讀 。
3. ISOLATION_READ_COMMITTED: 保證一個(gè)事務(wù)修改的數(shù)據(jù)提交后才能被另外一個(gè)事務(wù)讀取 。另外一個(gè)事務(wù)不能讀取該事務(wù)未提交的數(shù)據(jù)
4. ISOLATION_REPEATABLE_READ: 這種事務(wù)隔離級(jí)別可以防止臟讀,不可重復(fù)讀 。但是可能出現(xiàn)幻像讀 。它除了保證一個(gè)事務(wù)不能讀取另一個(gè)事務(wù)未提交的數(shù)據(jù)外,還保證了避免下面的情況產(chǎn)生(不可重復(fù)讀) 。
5. ISOLATION_SERIALIZABLE 這是花費(fèi)最高代價(jià)但是最可靠的事務(wù)隔離級(jí)別 。事務(wù)被處理為順序執(zhí)行 。除了防止臟讀,不可重復(fù)讀外,還避免了幻像讀 。
4.5 其他Spring 技術(shù)棧
spring boot 輕量級(jí)啟動(dòng)框架
spring security 用戶權(quán)限管理,根據(jù)角色和用戶,實(shí)現(xiàn)UserDetailsService , 進(jìn)行自定義權(quán)限管理 。
spring task 代碼級(jí)定時(shí)任務(wù),注解方式,使用起來非常方便 。需要注意的是,如果某次定時(shí)任務(wù)出了異常而沒有進(jìn)行處理,會(huì)導(dǎo)致接下來定時(shí)任務(wù)失效 。如果各個(gè)任務(wù)相互獨(dú)立,可以簡(jiǎn)單用try , catch包圍(之前就吃過這方面的虧) 。
spring data 注解方式定義實(shí)體,屬性等
spring mvc 簡(jiǎn)單明了的mvc框架 。url傳值、數(shù)組傳值、對(duì)象傳值、對(duì)象數(shù)組等傳值類型,上傳/下載文件類型需要注意 。
spring restful 注意命名,對(duì)命名要求很嚴(yán)格 。
spring shell 命令行方式執(zhí)行命令,救火、導(dǎo)入導(dǎo)出數(shù)據(jù)等用起來非常方便、制作報(bào)表 。
5. Web基礎(chǔ)
5.1 web容器啟動(dòng)
1.web.xml加載順序: listener -> filter -> servlet
2.webt容器啟動(dòng)過程,java新手很怕配置文件 , 理解完這些有助于熟悉配置文件
http://blog.csdn.net/u014431852/article/details/47042895
5.2 Servlet、Interceptor、Listener、Filter
Servlet 接收請(qǐng)求返回響應(yīng),最原始的web業(yè)務(wù)處理類 。
Interceptor 攔截器,可以實(shí)現(xiàn)HandlerInterceptor接口自定義攔截器,在日志記錄、權(quán)限檢查、性能監(jiān)控、通用行為等場(chǎng)景使用,本質(zhì)是AOP 。
Listener 監(jiān)聽器 常用于統(tǒng)計(jì)在線人數(shù)等縱向功能 。
Filter 過濾器 在請(qǐng)求接口處理業(yè)務(wù)之前改變r(jià)equset,在業(yè)務(wù)處理之后響應(yīng)用戶之前改變r(jià)esponse 。如果某些數(shù)據(jù)不加密,很容易用抓包工具加filter作弊 。
5.3 web項(xiàng)目結(jié)構(gòu)
5.3.1 mvn結(jié)構(gòu)
熟練掌握幾種常見的mvn項(xiàng)目結(jié)構(gòu),mvn可以自動(dòng)生成,這里不再詳述 。
5.3.2 mvn包管理
1.版本號(hào)盡量幾種在一個(gè)文件中便于管理 。
2.spring milestone包解決spring包沖突問題 。
3.mvn dependency:tree命令分析所有包依賴,對(duì)于沖突的在pom文件中 包圍起來
5.3.3 版本控制
1.git、svn等
2.代碼沖突解決方案
3.分支管理 。
對(duì)于某個(gè)穩(wěn)定版本上線后,如果在此基礎(chǔ)上開發(fā)新功能,一定要新建分支,在新分支上提交代碼,最后在新版發(fā)布時(shí)合并分支 。修改運(yùn)營(yíng)環(huán)境bug切換到主分支進(jìn)行修改
5.4 Http請(qǐng)求
5.4.1 請(qǐng)求方法
post、get、put、head、delete、copy、move、connect、link、patch,最常用的是前4、5個(gè) 。
5.4.2 請(qǐng)求頭,狀態(tài)碼
常用的請(qǐng)求頭有Accept(下載文件會(huì)特殊使用)、Accept-Charset(設(shè)置utf-8字符集)、Content-Type(json等配置)等
常用的響應(yīng)頭有Content-Type、Content-Type、Content-Length等 , 偏前端,不再詳述 。
6. 系統(tǒng)架構(gòu)
接觸的不是特別多 , 目前用到的只是服務(wù)器主從備份 。Nginx反向代理進(jìn)行配置 。
多個(gè)項(xiàng)目nginx配置
Spring Mvc 用json數(shù)據(jù)進(jìn)行交互,配置json轉(zhuǎn)換的servlet 。
封裝返回值
自定義RunEnvironmentException(狀態(tài)碼,原因),覆蓋原有Exception,切面ExceptionHandler抓取Exception并封裝到返回值中(前后端松耦合)
令人頭疼的用戶重復(fù)(連續(xù)快速點(diǎn)擊)提交問題,前端限制治標(biāo)不治本;后端用sessonid在切面上實(shí)現(xiàn),又需要前端存儲(chǔ) , 對(duì)所有請(qǐng)求數(shù)據(jù)加sessionId 。最后用jedis中存儲(chǔ),用接口名+用戶名當(dāng)做key,根據(jù)不同的接口對(duì)不同的key可以單獨(dú)設(shè)置時(shí)間,不僅保證了重復(fù)提交問題,也避免了惡意請(qǐng)求問題 , 同時(shí)還能自定義請(qǐng)求間隔 。(期初擔(dān)心redis緩存讀寫時(shí)間延誤導(dǎo)致限制失效,后來發(fā)現(xiàn)多慮了 , 對(duì)一般的小系統(tǒng)來說,經(jīng)性能測(cè)試,發(fā)現(xiàn)即使請(qǐng)求頻率再提高100被也不會(huì)導(dǎo)致限制失效)
testNg單元測(cè)試、性能測(cè)試 , 覆蓋測(cè)試 。
切面管理日期、權(quán)限 。緩存等 。
7. Nosql
1.Redis的java庫(kù)Jedis 。
Jedispool配置 。
項(xiàng)目中用到的有任務(wù)隊(duì)列、緩存 。
2. neo4j圖數(shù)據(jù)庫(kù)
處理社交、推薦
8. 服務(wù)端
linux操作系統(tǒng)熟悉以centos為例:
常用簡(jiǎn)單命令:ssh、vim、scp、ps、gerp、sed、awk、cat、tail,df、top,shell、chmod、sh、tar、find、wc、ln、|
目錄結(jié)構(gòu)明細(xì):/etc/、~/、/usr/、/dev/、/home/、/etc/init.d/
服務(wù)端:jdk、tomcat、nginx、mysql、jedis、neo4j啟動(dòng)與配置(特別說明的是該死的防火墻,nginx啟動(dòng)后一直訪問不了 , 查找一下午查不到原因,最后發(fā)現(xiàn)是防火墻問題)
監(jiān)控服務(wù)器狀態(tài)(cpu , 磁盤,內(nèi)存),定位pid , 日志查看
nginx負(fù)載均衡、反向代理、配置
自動(dòng)化部署腳本
簡(jiǎn)單shell腳本書寫,避免大量人力勞動(dòng) 。
監(jiān)控系統(tǒng),代碼拋fatal異常自動(dòng)發(fā)郵件,系統(tǒng)指標(biāo)持續(xù)偏高自動(dòng)發(fā)郵件 。
9. 數(shù)據(jù)庫(kù)相關(guān)
10. 第三方接口對(duì)接
10.1 支付接口
微信支付坑比較多,用將近兩周時(shí)間才把微信支付所有完成 。需要在微信后臺(tái)配置的地方太多 。
而支付寶支付模塊只用了2天時(shí)間就搞定了 。
10.2 推送接口
為用戶定義tag、定義alias,注意當(dāng)數(shù)據(jù)更新時(shí)需要同步更新tag、更新alias 。如果沒采用異步實(shí)現(xiàn)(用戶體驗(yàn)就是好卡?。?
10.3 云存儲(chǔ)
大量文件上傳云端(七牛云),注意創(chuàng)建bucket
10.4 短信驗(yàn)證
很簡(jiǎn)單的第三方接口,引入依賴,直接調(diào)用即可 。需要在第三方后臺(tái)設(shè)置模板等 , 注意限定用戶訪問次數(shù) 。
10.5 郵件
很簡(jiǎn)單小功能,工具類 。

文章插圖
- 什么專業(yè)好找工作
- 春天在哪里作文怎么寫
- Excel公式越長(zhǎng),水平越高嗎?
- 裝修業(yè)務(wù)員提成多少 ?男的去足療店工作好嗎
- 寫事的作文500字怎么寫
- 職場(chǎng)新人怎么學(xué)會(huì)調(diào)節(jié)情緒
- 談?wù)劤啥计凡枳詭Чぷ魇遥_喝茶姿勢(shì)
- 講述成都品茶海選工作室,道之根本茶之精品
- ?趙今麥插隊(duì)風(fēng)波升級(jí)!工作人員放錘反駁,官方解釋被嘲諷
- 工作中簡(jiǎn)單的排序都不會(huì)用,好意思說自己精通Excel?
