2016年12月23號(hào) 持之以恒最重要
CSDN主頁(yè):破光之流風(fēng)
面試中遇到的算法問(wèn)題
原文地址:面試中遇到的算法問(wèn)題
算法
文章中作者提到了2個(gè)算法題:
- 斐波那契數(shù)列問(wèn)題-兔子產(chǎn)子經(jīng)典問(wèn)題
- java統(tǒng)計(jì)出字符串中的英文字母,空格,數(shù)字和其他字符的個(gè)數(shù)
這兩個(gè)算是比較基礎(chǔ)的算法題目祠饺,斐波那契采用遞歸的方式解決讼稚,字符統(tǒng)計(jì)通過(guò)判斷char的編碼范圍來(lái)做統(tǒng)計(jì)功舀。
讀后感:
個(gè)人感覺(jué)這是一個(gè)不錯(cuò)的個(gè)人博客,頁(yè)面風(fēng)格簡(jiǎn)潔组贺,美觀丸边,但愿不要哪天不再支持訪問(wèn)了叠必。已加入到訂閱列表。以前我也喜歡自己搞個(gè)人網(wǎng)站妹窖,現(xiàn)在感覺(jué)沒(méi)那么多時(shí)間去維護(hù)了~
理解 Thread.Sleep 函數(shù)
Java基礎(chǔ)
首先我們知道Thread.sleep(timeout); 函數(shù)用于將線程掛起一段時(shí)間纬朝。
作者提出了2個(gè)問(wèn)題:
- 假設(shè)現(xiàn)在是 2008-4-7 12:00:00.000,如果我調(diào)用一下 Thread.Sleep(1000) 骄呼,在 2008-4-7 12:00:01.000 的時(shí)候共苛,這個(gè)線程會(huì) 不會(huì)被喚醒?
- 某人的代碼中用了一句看似莫明其妙的話:Thread.Sleep(0) 蜓萄。既然是 Sleep 0 毫秒隅茎,那么他跟去掉這句代碼相比,有啥區(qū)別么绕德?
作者首先回顧了一些操作系統(tǒng)原理:Unix系統(tǒng)使用時(shí)間片算法患膛,Windows使用搶占式。
作者用分蛋糕的場(chǎng)景來(lái)做比喻耻蛇,蛋糕(時(shí)間)踪蹬、刀叉CPU、吃蛋糕的人(進(jìn)程)臣咖。
Thread.sleep的作用就是告訴操作系統(tǒng)未來(lái)多少毫秒內(nèi)不參與CPU競(jìng)爭(zhēng)跃捣。
- 第一題:不一定。只是告訴操作系統(tǒng)自己開始參與CPU競(jìng)爭(zhēng)夺蛇,但是不保證立刻獲取執(zhí)行權(quán)疚漆。
- 第二題:有區(qū)別,Thread.Sleep(0)的作用,就是“觸發(fā)操作系統(tǒng)立刻重新進(jìn)行一次CPU競(jìng)爭(zhēng)”娶聘。
提到一個(gè)概念:其實(shí)在Windows原理層面闻镶,CPU競(jìng)爭(zhēng)都是線程級(jí)的
。
讀后感:
涉及到操作系統(tǒng)中CPU資源分配的原理丸升,以及Thread.sleep();在此過(guò)程中起到的作用铆农。希望可以通過(guò)閱讀《Java編程思想》、《操作系統(tǒng)實(shí)現(xiàn)與原理》2本書做更深入的了解狡耻。前一本已經(jīng)讀過(guò)幾遍墩剖,后一本正在讀。
觀察者模式和Spring的結(jié)合:
原文地址:觀察者模式和Spring的結(jié)合
設(shè)計(jì)模式
模式實(shí)例
本文作者提到的一個(gè)需求:每次熱部署后夷狰,對(duì)查詢回來(lái)的數(shù)據(jù)進(jìn)行各種各樣的過(guò)濾岭皂,將過(guò)濾的數(shù)據(jù)保存到不同的容器中。一開始的思路是沼头,使用定時(shí)器爷绘,定義一個(gè)過(guò)濾類,將數(shù)據(jù)進(jìn)行過(guò)濾分發(fā)进倍。
初始思路的弊端:
- 不利于擴(kuò)展揉阎,如果后續(xù)新增其他過(guò)濾方式的話,需要改處理類中的代碼背捌。
解決思路:
將每個(gè)過(guò)濾條件作為一個(gè)觀察者對(duì)象。通過(guò)spring的方式將多個(gè)過(guò)濾條件注冊(cè)到主題上洞斯。當(dāng)主題內(nèi)容發(fā)生變化時(shí)毡庆,notify所有的觀察者對(duì)象。
原文作者感悟:
很多的知識(shí)不是會(huì)了就會(huì)了烙如,在自己的腦子里存著是一回事么抗,能在特定的業(yè)務(wù)場(chǎng)景下能用上是另一回事。有些知識(shí)沒(méi)用時(shí)覺(jué)得難亚铁,但是用過(guò)了之后就覺(jué)得真的不是很難蝇刀。多實(shí)踐。
讀后感:
個(gè)人感覺(jué)徘溢,文章中的實(shí)例代碼的類名會(huì)有些誤導(dǎo)吞琐,總會(huì)把Filter和web的Filter想到一塊去,其實(shí)里面Filter是上面提到的過(guò)濾的意思然爆。以前的理解站粟,觀察者模式中,要有主題曾雕、觀察者奴烙。本文中的主題就是熱部署對(duì)象HotDeployManager,它繼承自抽象主題AbstractPriceFilter。
抽象主題中有個(gè)存放觀察者的容器切诀,這個(gè)容器的初始化是通過(guò)spring的MethodInvokingFactoryBean方式來(lái)注入的揩环。這樣做的好處是當(dāng)有新的觀察時(shí),不需要修改代碼幅虑,只有在spring的配置文件中新增一個(gè)ref的觀察者對(duì)象即可丰滑。做到了符合開閉原則。不過(guò)文中作者提到的解耦翘单,我感覺(jué)并不是因?yàn)槭褂昧擞^察者模式才解決的吨枉,而是因?yàn)槭褂昧藄pring容器。作者使用觀察者模式只是解決了業(yè)務(wù)的基本需求哄芜。
PS: 我目前對(duì)觀察者模式還沒(méi)有深入研究貌亭,以后再看。