Interesting things
今天公司的圣誕老人給我們每一個人發(fā)了一個精致的蘋果禮盒揭糕,里面有蘋果和德芙巧克力(可惜我沒有幸運的小紙條),美滋滋锻霎。
What did you do today
CSRF(Cross-site request forgery) 跨站請求偽造是一類常見的編程漏洞著角。對于存在CSPF漏洞的應(yīng)用/網(wǎng)站,攻擊者可以事先構(gòu)造好URL旋恼,只要受害者用戶已訪問吏口,后臺便在用戶不知情情況下對數(shù)據(jù)庫中用戶參數(shù)進(jìn)行相應(yīng)的修改。
Thread.yield()會讓當(dāng)前線程主動讓出時間片蚌铜,并讓OS調(diào)度其他處于Runnable狀態(tài)的線程使用時間皮娜锨侯。調(diào)用yield,只會把當(dāng)前線程放入到就緒隊列,而不是阻塞隊列冬殃,如果沒有找到其他就緒狀態(tài)的線程囚痴,則當(dāng)前線程繼續(xù)運行,比Thread.sleep(0)速度要快审葬,可以讓低于當(dāng)前優(yōu)先級的線程得以運行深滚。
之前我寫一個Filter奕谭,都是去實現(xiàn)Filter接口。今天發(fā)現(xiàn)這種方法不太好痴荐。繼承OncePerRequestFilter這個抽象類血柳,是一個不錯的選擇,這種方式可以兼容各種不同運行環(huán)境和版本生兆。OncePerRequestFilter能確保在一次請求只通過一次Filter难捌,而不需要重復(fù)執(zhí)行。在Servlet-2.3中鸦难,F(xiàn)ilter會過濾一切請求根吁,包括forward和include的情況。在Servlet-2.4中Filter默認(rèn)下只攔截外部提交的請求合蔽,forward和include這些內(nèi)部轉(zhuǎn)發(fā)都不會被過濾击敌,但是有時候我們需要forward的時候也會用到Filter。
CAS有三個操作數(shù):內(nèi)存值V拴事,舊的預(yù)期值A(chǔ)沃斤,要修改的值B,當(dāng)且僅當(dāng)預(yù)期值A(chǔ)和內(nèi)存值V相同的時候刃宵,將內(nèi)存值修改為B并返回true衡瓶,否則什么都不做并返回false。
volatile解決多線程內(nèi)存不可見的問題组去,對于一寫多讀鞍陨,是可以解決變量同步問題,如果是多寫多讀从隆,那么就無法解決線程安全問題诚撵,如果是count++,可以這樣去解決键闺,AtomicInteger count = new AtomicInteger(); count.addAndGet(10)寿烟。
返回類型為基本數(shù)據(jù)類型,return是包裝數(shù)據(jù)類型辛燥,那么在自動拆箱的時候可能會產(chǎn)生NPE筛武。使用JDK8的Optional類來防止NPE的問題,我們項目組就是采用這種策略挎塌。
數(shù)據(jù)庫的int類型字段映射到實體類中為什么要用Integer? 這在阿里巴巴Java開發(fā)規(guī)范手冊以及各大Java筆試題徘六,還有各大公司的Java開發(fā)規(guī)范都有提及過。因為int類型的默認(rèn)值為0榴都,Integer類型的默認(rèn)值為null待锈,如果返回字符值為null,int類型會報錯嘴高,而Integer類型則不會竿音。(新手要注意)
好久都沒有碰SpringMVC項目的代碼和屎,今天發(fā)現(xiàn)了好多錯誤。比如“404春瞬,找不到合適的Handler處理mapping“柴信,這個錯誤是因為在spring-servlet.xml沒有配置 <mvc:annotation-driven />,具體的問題分析下一篇博客會講解到宽气。
What to do tomorrow
今天Filter随常、Listener、Interceptor代碼基本完成抹竹,但是今天4點下班线罕,晚上要趕火車,就來不及記錄具體細(xì)節(jié)窃判,星期一回廣州,再寫一篇博客喇闸。(delay一天了) 本來準(zhǔn)備寫完這一篇博客再下班袄琳,沒辦法女朋友催著下班。
關(guān)于Spring Security的demo又要delay一天了(已經(jīng)delay兩天了)
明天回武漢燃乍。
Summary
不得不說唆樊,我的效率真的太低了。下個星期開始規(guī)劃一下時間表刻蟹。