老鐵們,大家好,相信還有很多朋友對于redis面試中經常被問到的問題和mysql死鎖的原因和處理方法的相關問題不太懂,沒關系,今天就由我來為大家分享分享redis面試中經常被問到的問題以及mysql死鎖的原因和處理方法的問題,文章篇幅可能偏長,希望可以幫助到大家,下面一起來看看吧!
神奇面試官一般都問什么
1.神奇面試官一般會問關于應聘者個人背景、經歷和技能方面的問題,以了解他們是否適合公司的需求。2.原因是因為公司需要找到最適合的人才來完成工作,并且面試官需要盡可能了解應聘者的背景和技能,以便作出最佳決策。3.神奇面試官也可能會問一些與公司文化、價值觀和團隊合作有關的問題,以確保應聘者與公司的價值觀相符,能夠與團隊融洽合作。此外,他們也可能會問一些案例和場景問題,以測試應聘者的解決問題和承受壓力的能力。
你在java面試中被問過什么讓你覺得對方逼格很高的問題
分享一位牛友(★霸道可愛的?小盼子)的去哪兒java面經,體驗一下什么叫做B格……
以下正文:廢話不多說,前幾天參加去哪網面試,面經如下:
去哪網java實習生面總共分為四輪(我也不知道為什么這么多)。
一面(技術面)
1.自我介紹,并分析簡歷上的項目,并發(fā)情況,數(shù)據(jù)量大的情況你怎么辦
2.分析悲觀鎖和樂觀鎖
3.數(shù)據(jù)庫索引(btree,b+tree)
4.出題建表,寫sql,mybatis標簽拆分判斷。
5.hashmap詳細說明,底層數(shù)據(jù)結構。
6.concurrenthashmap詳細說明。
7.treeset(畫紅黑樹)
8.線程常見狀況。
9.maven生命周期。
10.linux常用命令。
二面(技術面)
1.各種排序以及應用場景(快排,歸并,堆排,選擇排)。
2.給你10億個數(shù),選擇10個最小的,最優(yōu)算法。
3.時間復雜度,空間復雜度。
4.線程池,callable,ExecutorService源碼,參數(shù)含義。
5.Springmvc的DispatcherServlet源碼,工作機制。
6.Springboot工作機制
7.簡單說下redis。
8.服務器集群。
9.數(shù)據(jù)庫事務,事務隔離級別
10.git常用命令,是否用過github。
三面(技術面)
1.最近在學什么。
2.如果學習一個新框架
3.設計一塊緩存的數(shù)據(jù)結構,實現(xiàn)快速增加,刪除,查找等操作,并判斷時間空間復雜度。
4.項目并發(fā)如何解決。
四面(hr面)
簡單的聊一下薪資待遇。
說了一件大學難忘的事。
發(fā)offer。
現(xiàn)階段能想起來的就這么多,以后再補充,大家加油。
——————————
牛客網(www.nowcoder.com)
-專業(yè)IT筆試面試備考平臺
-最全C++JAVA前端等互聯(lián)網技術求職題庫
-全面提升IT編程能力
-程序員交友圣地
面試中經常被問到的Redis持久化與恢復該如何解決
首先搞清楚:除非你修改源碼,否則redis從算法上沒有完備的持久化和恢復方案,所有的方案都建立在“發(fā)生意外時盡量減少數(shù)據(jù)丟失”的前提下,所以真正至關重要的數(shù)據(jù),至少不能只用redis保存。
其它就很簡單了,配置文件可以打開持久化,設置好數(shù)據(jù)文件和存儲策略,大部分事redis會自己做好,注意selinux或apparmor策略不要跟redis沖突。需要還原時可以用redis-port
面試java崗位的時候,你被提過哪些問題
程序員朋友由于每天面對和電腦溝通的語言,有時候可能忽略了一些自然語言的技巧,而在面試中,一些說話的套路往往會幫求職者增分不少,Java就業(yè)課中,就有關于面試技巧的分析和參考:
一、面試官:在我們這兒工作,您希望有什么樣的薪資待遇?
提示:了解該公司所在地區(qū)、所屬行業(yè)、公司規(guī)模等信息,你的薪水要求應該在該公司所在地區(qū)、行業(yè)、公司規(guī)模相應的薪水范圍之內。盡可能提供一個你期望的薪水范圍,而不是具體的薪金數(shù)。
求職者:其實工資并不是我決定工作機會的唯一因素,如果您一定要我回答這個問題,只能說我希望以我所受的教育背景及工作經驗,我希望我的工資不低于年薪50,000元。
二、面試官:你認為每年加薪的幅度是多少?
提示:通常,比較可靠的回答是:你希望收入的增長和生活水平的提高保持一致。你還應該提到,你的業(yè)績將是加薪的主要因素。
求職者:總體來說,取決于我個人的業(yè)績和公司的業(yè)績(盈利狀況)。但一般而言,至少和生活水平的提高保持一致。
三、面試官:你上一份工作的收入是多少?
提示:有時候面試人員希望得到一個比較明確的答案。記住,在陳述你的收入時,要把你的整個福利收入也加在上面。在有的公司福利收入可以使你的年收入增加30%或更多。
求職者:我過去的三年內一直在ABC公司工作,我是大學一畢業(yè)就在這個公司的,當時并沒有管理經驗。這三年中,我積累了很多管理和財務方面的技巧。現(xiàn)在ABC公司給我的薪水是非常富有競爭性的。
四、面試官:你愿意降低你的標準嗎?
提示:如果這確實是你非常希望得到的工作,那么,你應該考慮在開始時工資有所降低。
應強調你可以把工作做得很好,并設法了解公司調整你薪水的時間。另外,對你能夠接受的極低數(shù)額應心里有數(shù),但千萬不要把這個數(shù)字告訴給面試人員。
求職者:由于我對該職位非常感興趣,我可以考慮接受低一些的薪水,你也需要時間讓我證明我的能力。我相信我可以干得十分出色,如果我能證明我的能力,你是否會考慮對我的薪水作一些調整呢,比如說,在三個月后。
五、面試官:你認為我們提供給你的薪水如何?
提示:在回答這個問題之前,首先確定這是否是正式聘用的工資數(shù)額,也許面試人只是想了解你的工資要求。如果是正式聘用的工資數(shù)額,你要確定自己是否能夠接受這個數(shù)額。
在西方國家,多數(shù)雇主希望你能跟他們進一步商量;而在亞洲國家,則相反。如果這個數(shù)目大大低于你的期望,可以有技巧性地詢問其它的福利項目是怎樣的。
求職者:這個數(shù)字跟我期望的非常接近,不過我的期望值要稍高些。您是否可以提供一個大致的薪資范圍?
六、面試官:能否告訴我,你的工資調整紀錄?
提示:在這個問題中,面試人員只是想知道是否你一直原職不變,或者說是否你不斷得到晉升的機會。所以,盡量避免提供薪資具體數(shù)額,除非他們要求。
求職者:N年來,我一直在ABC公司工作,曾得到X次職務提升。ABC公司每年薪資調整的幅度不是太大,但由于我的工作總是十分優(yōu)秀,每年的薪資調整都接近調整的很高水平。我目前的工資已比我開始工作的頭一年提高XX%。
mq面試必背知識點
主要有3點:解耦、異步、削峰(限流)。
其實就是在服務與服務之間增加了一個中間件,可以實現(xiàn)上面的三種用途。
?
解耦:我們看到,服務A強依賴服務B和C,當服務B或者C掛掉后,會直接導致服務A的不可用,這顯然不是我們所期望的。比如服務的最后一步是記錄日志,但是該服務掛了,雖然日志服務和主流服務沒有必然的業(yè)務聯(lián)系,但是因為代碼的耦合性過高,直接導致整個服務響應失敗。
異步:假如服務A本身執(zhí)行只需要10ms,服務B需要5ms,服務C(日志服務)需要1s。同樣的,一個和業(yè)務本身無關的服務過長的響應時間導致了整體服務的響應超時。
削峰:假如由于服務C只是記錄日志的,服務器配置較低,1s只能處理2000條數(shù)據(jù),但是高峰時段,每秒的請求高達10萬筆,過高的請求會導致服務器崩潰。
可以看到,其實上面所講的三種情況,都很類似,連起來可以這么理解。高峰時段導致服務C運行越來越慢,產生了“異步”所說的問題,如果長時間沒解決,可能會導致“解耦”所說的情況,即服務掛掉。
在增加了MQ以后,我們可以在服務A執(zhí)行完核心業(yè)務后,將后續(xù)處理的業(yè)務數(shù)據(jù)打入消息隊列中,然后就可以返回成功。然后日志服務從消息隊列中取到對應的消息進行處理即可。這樣就實現(xiàn)了“解耦”和“異步”。在高峰時段,所有的數(shù)據(jù)都會打入消息隊列中,而日志服務只需要按照自己的消費水平(2000條/s)取數(shù)據(jù)就好,保證了服務的平滑穩(wěn)定。
二、MQ選型
主流的MQ有4種,ActiveMQ、RabbitMQ、RocketMQ和Kafka。不過ActiveMQ雖然框架成熟、曾經是MQ中的王牌,但是現(xiàn)在官方的維護頻率越來越低,國內各大公司已經很少才用了,再加上吞吐量不高(比kafka低一個數(shù)量級),存在消息丟失的情況,所以現(xiàn)在新項目很少會采用了。
RabbitMQ是用ErLang語言開發(fā)的,性能上是最好的,但是由于ErLang語言不是主流語言,二次開發(fā)難度較高,很多想要根據(jù)實際情況進行二次開發(fā)的公司很少采用。不過如果只是簡單使用的話,還是不錯的,畢竟它的延時是最少的;并且RabbitMQ有一個最大的好處是它具有可視化界面,操作維護很方便。
RocketMQ是阿里開源的產品,經過了很多高并發(fā)項目的考驗(如雙十一),性能上是有保證的。純Java編寫,維護性高。我理解的它和kafka最大的不同有兩點,一是它支持事務;二是集群結構不一致,它沒有主從切換,當leader掛掉后,存在一定的感知時間,然后切換到follower上。
kafka的特點就是高吞吐量,一般配合大數(shù)據(jù)類的系統(tǒng)來進行實時數(shù)據(jù)計算、日志采集,在日志收集領域是事實上的標準。
另外,springCloud全家桶中,有一個springCloudStream消息驅動框架,該框架很好的封裝了MQ操作的相關API,減輕了開發(fā)者在MQ方面的代碼量,不過該框架只封裝了RabbitMQ和kafka這兩種MQ。
綜上,如果需要對MQ傳輸提供事務支持或者解決高并發(fā)下的業(yè)務解耦,建議采用RocketMQ,微服務框架是dubbo的話,應該也建議用RocketMQ(這個沒測過,個人猜測,畢竟都是阿里的產品)。如果是要做日志收集等工作,建議采用kafka。中小型公司使用springCloud全家桶開發(fā)的項目中,建議采用RabbitMQ(或者kafka)。
以上是查資料總結的,由于我平時都是使用的kafka,所以后面都以kafka為例了。
三、重復消費
重復消費在MQ中是一個重點問題,該問題是如何產生的?
kafka中有一個消息偏移量offset,每當消費者消費完一條消息時,執(zhí)行commit,會將offset+1。如果一條消息在消費完以后尚未commitoffset,突發(fā)宕機,會讓zookeeper認為該條消息沒有被消費。導致消費者重啟后重復消費之前的數(shù)據(jù)。
如何避免?
避免重復消費的問題,與同一個服務被多次調用的問題類似,就是如何解決服務的冪等性。大致有如下幾個方案:
1、利用數(shù)據(jù)庫的唯一性約束。
2、將數(shù)據(jù)存入redis中,利用redis天然的冪等性,然后再將數(shù)據(jù)從redis同步到數(shù)據(jù)庫中
3、生產者發(fā)消息時增加一個唯一id(比如UUID),消費者消費成功后將該UUID存入redis中,每次消費前先查看該UUID是否存在。
四、消息丟失
消息丟失同樣也是MQ中是一個重點問題。由于系統(tǒng)中存在生產者、消費者和MQ本身三個組件,所以需要從這三個方面分別討論。
MQ本身丟失:由于kafka的集群是leader/follower模式,leader先接受消息后,再同步給follower,如果leader接收到消息后發(fā)生宕機,沒來得及同步數(shù)據(jù)給follower,這時依靠選舉機制產生了新的leader,但是它已經永遠的失去了這條消息。為了避免這種情況發(fā)生,就需要修改kafka的配置,利用kafka自身的特性來解決。
首先給topic設置replication.factor參數(shù):這個值必須大于1,要求每個partition必須有至少2個副本。
然后在kafka服務端設置min.insync.replicas參數(shù):這個值必須大于1,這個是要求一個leader至少感知到有至少一個follower還跟自己保持聯(lián)系,沒掉隊,這樣才能確保leader掛了還有一個follower。
然后在producer端設置acks=all:這個是要求每條數(shù)據(jù),必須是寫入所有replica之后,才能認為是寫成功了
最后在producer端設置retries=MAX(很大很大很大的一個值,無限次重試的意思):這個是要求一旦寫入失敗,就無限重試,卡在這里了。
這樣配置以后,就可以保證只有所有的副本數(shù)據(jù)都同步成功后,才認為消息發(fā)送成功,避免了leader掛掉的情況。
消費者丟失:kafka有一個自動提交機制,每次接受到消息后自動提交offset。如果消息還未處理就掛掉了,但zk卻已經接收到消費成功的通知,顯然不合理,所以要避免使用kafka的自動提交,改為手動提交。
生產者丟失:顯然,如果配置了acks=all以后,生產者是不會發(fā)生消息丟失的。
另外,查資料發(fā)現(xiàn)RabbitMQ和kafka的消息丟失情況不同,這里補充一個RabbitMQ的處理方式。
MQ本身丟失:由于RabbitMQ沒有集群配置,所以只能依靠持久化到本地的方式來進行備份。如果接收到消息還沒來得及備份就掛掉了,就會導致消息丟失。不過這個概率很低。如果發(fā)生了,可以利用生產者丟失的方式處理,見下。
消費者丟失:產生原因不說了。可以采用RabbitMQ提供的ack機制,即關閉RabbitMQ自動ack,然后通過api來調用就行,在確認處理完消息后,手動提交ack通知MQ。
生產者丟失:可能存在的問題就是生產者發(fā)送消息后,網絡傳輸有問題導致了數(shù)據(jù)丟失。為了避免這種情況,一般會開啟事務機制,保證數(shù)據(jù)一致性,但是事務機制由于是同步的,會造成系統(tǒng)性能下降,所以可以借鑒分布式事務的理念,即confirm機制。生產者發(fā)送消息后,開啟異步接受MQ的反饋,收到后,默認消息發(fā)送成功,超時后觸發(fā)消息重發(fā)機制。
五、如何確保消息順序消費。
這個很簡單,只要保證每個消費者或者每個處理線程都對應一個隊列即可。
六、消息積壓如何處理。
畢竟流量高峰的時間存在不長,只要最初規(guī)劃MQ的空間時考慮到流量高峰的容量,一般是不會出現(xiàn)積壓的,除非由于代碼bug或者消費者宕機。
這時為了快速處理積壓的消息,我們除了修正bug和重啟服務器以外,還需要有提前定好的應急方案,即臨時擴容消費者,增加消費者處理速度。并且不能設置消息的TTL,保證消息一直存在。
實在沒辦法了的終極解決方案,就是拋棄部分消息,然后過了高峰以后,依靠日志等方式人肉維護。。。
最后,說一個我之前的公司,為了避免重復消費和消息丟失的解決方案,就是在生產者發(fā)送消息前和消費者接收消息后,在本地記錄一條數(shù)據(jù),然后定時對比兩者的差異,來確保這兩個問題不會發(fā)生。同樣該方案也可用于處理積壓,完全可以拋棄消息,最后依靠生產者記錄的數(shù)據(jù)進行維護。這種方式比較適合業(yè)務分離狀態(tài)的,如購物場景,只要保證用戶下單成功即可,后續(xù)的出庫,贈加積分,贈送優(yōu)惠券等功能稍緩緩也不礙事,但是如果是時效性較高的業(yè)務,比如商品查詢,可能商品描述、商品價格、商品圖片都是不同的服務在處理,如果一個服務不能正常返回,那這個業(yè)務就無法正常開展。這種情況,就建議采用限流策略了。
如果你還想了解更多這方面的信息,記得收藏關注本站。