最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

2020.7.6 籬笆墻網(wǎng)絡(luò)科技公司面試

2021-04-11 22:12 作者:童年影視驛站  | 我要投稿


Java中如何保證線程安全性

?

什么是線程安全:

當(dāng)多個線程訪問某個方法時,不管你通過怎樣的調(diào)用方式、或者說這些線程如何交替地執(zhí)行,我們在主程序中不需要去做任何的同步,這個類的結(jié)果行為都是我們設(shè)想的正確行為,那么我們就可以說這個類是線程安全的。?

?

1.首先說明并發(fā)編程的三個特性

  • ????原子性

  • ????可見性

  • ????有序性

2.在說明保證并發(fā)編程安全的方法

?

1.使用atomic


解釋CAS:

CAS操作包括三個操作數(shù):需要讀寫的內(nèi)存位置(V)、預(yù)期原值(A)、新值(B)。如果內(nèi)存位置與預(yù)期原值的A相匹配,那么將內(nèi)存位置的值更新為新值B。如果內(nèi)存位置與預(yù)期原值的值不匹配,那么處理器不會做任何操作。無論哪種情況,它都會在 CAS 指令之前返回該位置的值。

?

運行原理:

沖突檢測和數(shù)據(jù)更新。當(dāng)多個線程嘗試使用CAS同時更新同一個變量時,只有一個線程可以更新變量的值,其他的線程都會失敗,失敗的線程并不會掛起,而是告知這次競爭中失敗了,并可以再次嘗試。


2.加鎖synchronized和lock

?

3.在變量上加final關(guān)鍵字

?

?

?

攔截器與過濾器的區(qū)別 :

?

1.過濾器:

依賴于servlet容器。在實現(xiàn)上基于函數(shù)回調(diào),可以對幾乎所有請求進(jìn)行過濾,但是缺點是一個過濾器實例只能在容器初始化時調(diào)用一次。使用過濾器的目的是用來做一些過濾操作,獲取我們想要獲取的數(shù)據(jù),比如:在過濾器中修改字符編碼;在過濾器中修改HttpServletRequest的一些參數(shù),包括:過濾低俗文字、危險字符等

2.攔截器:

依賴于web框架,在SpringMVC中就是依賴于SpringMVC框架。在實現(xiàn)上基于Java的反射機(jī)制,屬于面向切面編程(AOP)的一種運用。由于攔截器是基于web框架的調(diào)用,因此可以使用Spring的依賴注入(DI)進(jìn)行一些業(yè)務(wù)操作,同時一個攔截器實例在一個controller生命周期之內(nèi)可以多次調(diào)用。但是缺點是只能對controller請求進(jìn)行攔截,對其他的一些比如直接訪問靜態(tài)資源的請求則沒辦法進(jìn)行攔截處理

?

總結(jié):

1. 攔截器是基于java的反射機(jī)制的,而過濾器是基于函數(shù)回調(diào)。

2. 攔截器不依賴與servlet容器,過濾器依賴與servlet容器。

3. 攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。

4. 攔截器可以訪問action上下文、值棧里的對象,而過濾器不能訪問。

5. 在action的生命周期中,攔截器可以多次被調(diào)用,而過濾器只能在容器初始化時被調(diào)用一次

?

關(guān)于解決分布式集群環(huán)境下定時任務(wù)執(zhí)行多次

?

問題:由于我們項目同時部署在多臺集群機(jī)器上,因此到達(dá)指定的定時時間時,多臺機(jī)器上的定時器可能會同時啟動,造成重復(fù)數(shù)據(jù)或者程序異常等問題,

?

1. 借助Redis的過期機(jī)制和分布式鎖

?

解決方法:為你的定時器在Redis中定義一個鍵值對,可以用項目名稱和服務(wù)器ip,執(zhí)行任務(wù)前先從Redis中讀取鍵,若沒有值代表任務(wù)未被執(zhí)行,同樣的該臺機(jī)器先更新redis,再觸發(fā)定時任務(wù)。由于Redis存在過期機(jī)制,因此可以設(shè)置過期時間保證下次判斷正常

?

優(yōu)缺點:該方法個人比較推薦,簡單,對業(yè)務(wù)邏輯的改變也會少很多,只需要在原來的定時器上加上簡單判斷即可

?

?

redis存儲熱點數(shù)據(jù)思路?

1. 用戶點擊商品,將商品點擊數(shù)存入redis庫中,再使用redis的淘汰策略

?

2. 當(dāng)redis使用的內(nèi)存超過了設(shè)置的最大內(nèi)存時,會觸發(fā)redis的key淘汰機(jī)制,在redis 3.0中有6種淘汰策略

?

  • noeviction: 不刪除策略:當(dāng)達(dá)到最大內(nèi)存限制時, 如果需要使用更多內(nèi)存,則直接返回錯誤信息。(redis默認(rèn)淘汰策略)

  • allkeys-lru: 在所有key中優(yōu)先刪除最近最少使用(less recently used ,LRU) 的 key。

  • allkeys-random:?在所有key中隨機(jī)刪除一部分 key。

  • volatile-lru:?在設(shè)置了超時時間(expire )的key中優(yōu)先刪除最近最少使用(less recently used ,LRU) 的 key。

  • volatile-random:?在設(shè)置了超時時間(expire)的key中隨機(jī)刪除一部分 key。

  • volatile-ttl:?在設(shè)置了超時時間(expire )的key中優(yōu)先刪除剩余時間(time to live,TTL) 短的key。


如果你有想到更好的辦法,歡迎在下面留言!



2020.7.6 籬笆墻網(wǎng)絡(luò)科技公司面試的評論 (共 條)

分享到微博請遵守國家法律
德钦县| 通江县| 奉贤区| 穆棱市| 墨脱县| 始兴县| 蕉岭县| 油尖旺区| 钦州市| 西安市| 潢川县| 阳西县| 阿拉尔市| 石泉县| 民权县| 凤冈县| 桦南县| 长宁区| 漳浦县| 绥芬河市| 陵川县| 奉节县| 万全县| 武汉市| 成武县| 阿尔山市| 年辖:市辖区| 响水县| 瓦房店市| 宜宾市| 河北省| 宣城市| 北川| 郎溪县| 同江市| 徐水县| 海伦市| 金沙县| 北京市| 林甸县| 横山县|