老蔣的Java杭州面經(jīng)-高級版

來到北京帶孩子看病一年最后也沒看好,一地雞毛,撤了撤了,回杭州過日子了,所以最近在看杭州的機會,因為北京的薪資待遇是比杭州高的,所以回去為了不降薪只能往更高的級別上面了,以下是自己近一個多月來面試是十幾家的面試記錄,老規(guī)矩先寫為敬,但是大家要注意了:

以下為p7+以上面試題,工作年限未滿3-5年或者Java級別未到p7及以上的不建議繼續(xù)閱讀!

魔點(釘釘人臉考勤機)2022.7.14 20:00 研發(fā)效能(私有化項目怎么不重復(fù)開發(fā))
用戶服務(wù)中心是怎么設(shè)計的,要考慮哪些設(shè)計
灰度通過什么東西實現(xiàn)的,cookie被禁用怎么辦
介紹一下個性化項目拿到的結(jié)果系統(tǒng)QPS 多少50-500(1000萬pv)

分別介紹一下springclould和kafka分別是什么東西

騰訊springclould剛開源嗎?是,Spring Cloud Tencent于2022年 6 月 14 日正式對外開源,主要是結(jié)合北極星提供了一整套的k8s解決方案,感興趣的同學(xué)可以去看看Github

springclould能集成Dubbo嗎?可以
使用Spring Cloud Alibaba中的Nacos來作為服務(wù)注冊中心,并且在此之下可以如傳統(tǒng)的Spring Cloud應(yīng)用一樣地使用Ribbon或Feign來實現(xiàn)服務(wù)消費

說一下Fegin,超時時間怎么設(shè)置,負載均衡怎么實現(xiàn)
Fegin,Ribbon,Hystrix超時時間執(zhí)行順序(包裹關(guān)系,調(diào)度邏輯),如果都設(shè)置了的話實際以哪個為準(zhǔn)
如果hystrix.command.default.execution.timeout.enabled為true,則會有兩個執(zhí)行方法超時的配置,一個就是ribbon的ReadTimeout,一個就是熔斷器hystrix的timeoutInMilliseconds, 此時誰的值小誰生效
如果hystrix.command.default.execution.timeout.enabled為false,則熔斷器不進行超時熔斷,而是根據(jù)ribbon的ReadTimeout拋出的異常而熔斷,也就是取決于ribbon
ribbon的ConnectTimeout,配置的是請求服務(wù)的超時時間,除非服務(wù)找不到,或者網(wǎng)絡(luò)原因,這個時間才會生效
ribbon還有MaxAutoRetries是單個實例的重試次數(shù),MaxAutoRetriesNextServer對切換實例的次數(shù)(是切換次數(shù),不是重試次數(shù)), 如果ribbon的ReadTimeout超時,或者ConnectTimeout連接超時,會進行重試操作
由于ribbon的重試機制,通常熔斷的超時時間需要配置的比ReadTimeout長,ReadTimeout比ConnectTimeout長,否則還未重試,就熔斷了
為了確保重試機制的正常運作,理論上(以實際情況為準(zhǔn))建議hystrix的超時時間為:(1 + MaxAutoRetries)*(1+ MaxAutoRetriesNextServer) * ReadTimeout.

用kafka做了些什么,它的優(yōu)點(精巧)有哪些,怎么做到速度快,做了哪些優(yōu)化:http://www.itdecent.cn/p/8b00d7167b46,

它保證最少消費一次還是最多消費一次:https://www.cnblogs.com/yn-huang/p/11684688.html
通常來講,kafka可以做到至少消費一次,但是可能會出現(xiàn)多次消費
也可以做到做多消費一次,但是可能會出現(xiàn)數(shù)據(jù)丟失。
剛好消費一次,必須在至少消費一次基礎(chǔ)上,對冪等性進行判斷,同時還需手動維護偏移量。主要是利用數(shù)據(jù)庫的唯一主鍵以及保存相應(yīng)偏移量做到的。其中最重要的是有rebalance方法需要重寫監(jiān)聽器。
這種方案適合用于集群消費,屬于比較成熟的生產(chǎn)運用方案。

它的offset存在哪里(Kafka把對offset的保存放在了一個topic里面:https://www.cnblogs.com/chaiyu2002/p/12045087.html),

它和RecketMQ在服務(wù)器存儲上有什么區(qū)別:https://zhuanlan.zhihu.com/p/163759210,

kafka怎么實現(xiàn)ISR(副本復(fù)制,高可用保證機制)https://zhuanlan.zhihu.com/p/528619168
每個 Leader 會動態(tài)維護一個 ISR 列表,該列表里存儲的是和 Leader 基本同步的 Follower。如果有 Follower 由于網(wǎng)絡(luò)、GC 等原因而沒有向 Leader 發(fā)起拉取數(shù)據(jù)請求,此時 Follower 相對于 Leader 是不同步的,則會被踢出ISR列表。所以說,ISR 列表中的 Follower 都是跟得上 Leader 的副本
當(dāng)宕機后會從所有副本中順序查找,如果查找到的副本在 ISR 列表中,則當(dāng)選為 Leader。另外還要保證前任 Leader 已經(jīng)是退位狀態(tài)了,否則會出現(xiàn)腦裂情況(有兩個 Leader)。怎么保證?Kafka 通過設(shè)置了一個 controller 來保證只有一個 Leader
某一個toicp副本全掛掉了是不是就不可用了

Redis名稱的由來,全名是什么https://blog.csdn.net/weixin_39503283/article/details/125637081
Redis全稱 - Remote Dictionary Server(遠程字典服務(wù)器)
Redis數(shù)據(jù)結(jié)構(gòu):
string(字符串)
list(列表)
hash(字典)
set(集合)
zset(有序集合)
Zset數(shù)據(jù)結(jié)構(gòu):
zset(有序集合)是Redis中最常問的數(shù)據(jù)結(jié)構(gòu)。它類似于Java語言中的SortedSet和HashMap的結(jié)合體,它一方面通過set來保證內(nèi)部value值的唯一性,另一方面通過value的score(權(quán)重)來進行排序。這個排序的功能是通過Skip List(跳躍列表)來實現(xiàn)的。
跳表全稱叫做跳躍表,簡稱跳表。跳表是一個隨機化的數(shù)據(jù)結(jié)構(gòu),實質(zhì)就是一種可以進行二分查找的有序鏈表。跳表在原有的有序鏈表上面增加了多級索引,通過索引來實現(xiàn)快速查找。跳表不僅能提高搜索性能,同時也可以提高插入和刪除操作的性能。

Redis可以用來做什么?做分布式鎖會有什么問題https://zhuanlan.zhihu.com/p/413682456
Redis持久化有哪兩種(RDB 、AOF),常用怎么設(shè)置

加密狗能做什么
怎么防止客戶破解使用未購買的功能
接口聚合層怎么做https://zhuanlan.zhihu.com/p/79525360
激活方式是什么

深度科技(互聯(lián)網(wǎng)票據(jù))2022.7.15 10:00
Kafk的生產(chǎn)消費模型是什么?https://blog.csdn.net/qq_44862918/article/details/124421477
http://www.javashuo.com/article/p-bwprasrr-b.html
分區(qū)存在的意義是什么?
分區(qū)對于 Kafka 集群的好處是:實現(xiàn)負載均衡。分區(qū)對于消費者來說,可以提高并發(fā)度,提高效率。若沒有分區(qū),一個topic對應(yīng)的消息集在分布式集群服務(wù)組中,就會分布不均勻,即可能導(dǎo)致某臺服務(wù)器A記錄當(dāng)前topic的消息集很多,若此topic的消息壓力很大的情況下,服務(wù)器A就可能導(dǎo)致壓力很大,吞吐也容易導(dǎo)致瓶頸。
有了分區(qū)后,假設(shè)一個topic可能分為10個分區(qū),kafka內(nèi)部會根據(jù)一定的算法把10分區(qū)盡可能均勻分布到不同的服務(wù)器上,比如:A服務(wù)器負責(zé)topic的分區(qū)1,B服務(wù)器負責(zé)topic的分區(qū)2,在此情況下,Producer發(fā)消息時若沒指定發(fā)送到哪個分區(qū)的時候,kafka就會根據(jù)一定算法上個消息可能分區(qū)1,下個消息可能在分區(qū)2。當(dāng)然高級API也能自己實現(xiàn)其分發(fā)算法

多消費者之間和topic的關(guān)系是什么?https://blog.csdn.net/liaomingwu/article/details/122977564除了Kafka外還了解其他的消息中間件嗎?
RecketMQ消費模型,相對于Kafka順序消費https://blog.csdn.net/weixin_47082274/article/details/106194391,事務(wù)消費https://baijiahao.baidu.com/s?id=1705546875648352210&wfr=spider&for=pc
https://www.likecs.com/show-1022520.html
消費模型有兩種:廣播消費消息模型,集群消費消息模型。
廣播消費消息模型,指消費這消費某主題的所有隊列的消息,消費組在該消息模型下不起作用,類似JMS的publish/subscribe.
集群消費消息模型,是指同一個消費組的消費者各自消費某一主題的消費隊列的消息,比如有一個主題 topicA,該主題有4個隊列(創(chuàng)建主題的時候可以指定該主題的隊列的數(shù)量),有一個消費組testConsumerGroup,該消費組有四個消費者(四個機器或者四個進程),則四個消費者各自消費一個消息隊列。
情景回顧:在做RocketMQ的監(jiān)控時,測試消息的消費情況,發(fā)現(xiàn)不同消費組,都會消費掉同一條消息,這和我對當(dāng)時集群消費模型的理解(即:集群模式,消息隊列中的消息只能被消費一次)不符。在查閱資料及代碼驗證后得出結(jié)論:
1. 在Rocket集群消費模式下,(訂閱)同一個主題(Topic)下的消息,對于不同的消費組是一種“廣播形式”,即每個消費組的都會消費消息。
2. 在Rocket集群消費模式下,(訂閱)同一個主題(Topic)下的消息,對于相同的消費組的消費者而言是一種集群模式,即消費者平分消息并消費。

SpringCloudGateway怎么做消息解析?https://baijiahao.baidu.com/s?id=1717126366440376459&wfr=spider&for=pc
我要怎么在網(wǎng)關(guān)把請求摟出來,過濾關(guān)鍵字,異步處理
https://www.cnblogs.com/dalianpai/p/12288884.html

mysql索引為什么只支持左匹配而不支持右匹配?二叉樹支持右查詢么?https://blog.csdn.net/ibigboy/article/details/104571930/

使用netty怎么寫一個http-client
https://www.freesion.com/article/6329179461/
https://www.cnblogs.com/xinsheng/p/5546603.html

redis復(fù)雜命令有哪些,比如時間復(fù)雜度大于log(n)的有哪些?
https://blog.csdn.net/wf_feng/article/details/121526392

k8s上載應(yīng)用部署時,怎么做存活檢測和就緒檢測
https://blog.csdn.net/xueqinglalala/article/details/121906019

說說適配器模式,解決的問題
https://blog.csdn.net/Liuxiangming1314/article/details/124605237
命令模式,狀態(tài)模式和策略模式有什么區(qū)別
https://blog.csdn.net/netyeaxi/article/details/88809729
https://www.cnblogs.com/Yunrui-blogs/p/15189860.html

springboot啟動過程中引導(dǎo)tomcat啟動
https://blog.csdn.net/weixin_43955575/article/details/123413206

Java并發(fā)編程包中有哪些我們常用的工具類
我們通常所說的并發(fā)包也就是 java.util.concurrent 及其子包,集中了 Java 并發(fā)的各種基礎(chǔ)工具類,具體主要包括幾個方面:
1.提供了比 synchronized 更加高級的各種同步結(jié)構(gòu),包括 CountDownLatch、CyclicBarrier、Semaphore 等,可以實現(xiàn)更加豐富的多線程操作,比如利用 Semaphore 作為資源控制器,限制同時進行工作的線程數(shù)量。
2.各種線程安全的容器,比如最常見的 ConcurrentHashMap、有序的 ConcunrrentSkipListMap,或者通過類似快照機制,實現(xiàn)線程安全的動態(tài)數(shù)組 CopyOnWriteArrayList 等。
3.各種并發(fā)隊列實現(xiàn),如各種 BlockedQueue 實現(xiàn),比較典型的 ArrayBlockingQueue、 SynchorousQueue 或針對特定場景的 PriorityBlockingQueue 等。
4.強大的 Executor 框架,可以創(chuàng)建各種不同類型的線程池,調(diào)度任務(wù)運行等,絕大部分情況下,不再需要自己從頭實現(xiàn)線程池和任務(wù)調(diào)度器。

Kafka topic 調(diào)優(yōu)參數(shù)有哪些?
https://blog.csdn.net/qq_43692950/article/details/125101044

mysql軟件自身的調(diào)優(yōu)參數(shù)有哪些?
https://blog.csdn.net/weixin_33586619/article/details/113555982

jvm在Java8啟動參數(shù)有哪些?
https://blog.csdn.net/weixin_36237278/article/details/114509836

杭州小蜴網(wǎng)絡(luò)技術(shù)有限公司(阿里奢侈品電商)2022.7.18 19:00
之前工作中比較難的或者比較有挑戰(zhàn)性的技術(shù)點/工作/實現(xiàn)
qps多少,數(shù)據(jù)量多少,歸檔表怎么做的,判斷分表是基于什么
為什么沒有考慮sharding-proxy
https://www.sohu.com/a/389465088_411876

分庫分表方案對比1.png

分庫分表方案對比2.png

數(shù)據(jù)分片怎么做的,數(shù)據(jù)怎么遷移,分表鍵怎么設(shè)置
存量數(shù)據(jù)和增量數(shù)據(jù)怎么切換到線上

說一下mysql索引的類型?

b樹索引和hash索引在使用過程中有什么區(qū)別,hash索引有什么優(yōu)勢?

b+樹和b-樹區(qū)別,為什么用b+樹?b+樹存儲什么結(jié)構(gòu),最底下葉子結(jié)點存儲的什么,數(shù)據(jù)保存在哪里

你用了哪些redis緩存技巧?

緩存使用的注意點?需要考慮什么?

有沒有一些不能過期的場景,內(nèi)存滿了怎么辦

aof(日志)和rdb(快照)什么區(qū)別?有什么優(yōu)點?怎么選擇使用,
恢復(fù)備份哪個更快?哪個數(shù)據(jù)更完整?

ThreadLocal用過嗎?使用過程中有什么問題(內(nèi)存泄露),需要注意什么?
它使用的弱引用還是強引用,為什么?除了及時remove還有注意什么?

gc是怎么判斷是否該回收的?

并發(fā)cas了解過沒有?

樂觀鎖和悲觀鎖分別是什么?

講一下分布式c(一致性)a(高可用)p(分區(qū)容錯性)的概念,nacos是cp還ap
什么業(yè)務(wù)要保證cp,什么場景要保證ap,談?wù)勀愕睦斫?/p>

分布式事務(wù)怎么用,兩階段提交的流程和三階段提交的區(qū)別,有什么優(yōu)缺點?
怎么彌補數(shù)據(jù)不一致的問題
https://blog.csdn.net/leftfist/article/details/123031310

據(jù)你所知的分布式事務(wù)解決方案?全局唯一ID怎么設(shè)計,雪花什么結(jié)構(gòu)
https://blog.csdn.net/JavaShark/article/details/125350886

消息隊列用過什么?https://zhuanlan.zhihu.com/p/451672054
kafka為什么速度快?Kafka讀盤的時候做了哪些優(yōu)化?說一下零拷貝
http://www.itdecent.cn/p/0af1b4f1e164
Kafka有半事務(wù)的概念嗎
http://www.itdecent.cn/p/e1831c883e54

小遠機器人 2022.7.19 17:00
map.get和put做了些什么
int和Integer在MySQL存儲上有什么不同
int的最大長度是多少?2的31次方
消息隊列的存儲機制
spring Mvc
spring Aop
springboot 自己寫start
類加載機制
雙親委派模型
jvm內(nèi)存模型,有哪些垃圾回收算法
sisp協(xié)議
https怎么做的,公鑰私鑰怎么用

個推 2022.7.20 19:00
配置中心怎么同步配置到項目
spring啟動流程
消息MQ怎么持久化

吉喵云(東南亞跨境電商-蕭山) 2022.7.25 19:30
說說過去開發(fā)6年最自豪的事情

jdk源碼,map為什么要用鏈表:
用鏈表是為了應(yīng)對哈希沖突這種情況的

用數(shù)組不行嗎?說說數(shù)組擴容的過程
https://www.jb51.net/article/220323.htm

紅黑樹長度少于多少時轉(zhuǎn)回鏈表,為什么;
6和8是指:表示若桶中鏈表元素超過8時,會自動轉(zhuǎn)化成紅黑樹;若桶中元素小于等于6時,樹結(jié)構(gòu)還原成鏈表形式。

1)原因:
  紅黑樹的平均查找長度是log(n),長度為8,查找長度為log(8)=3,鏈表的平均查找長度為n/2,當(dāng)長度為8時,平均查找長度為8/2=4,這才有轉(zhuǎn)換成樹的必要;鏈表長度如果是小于等于6,6/2=3,雖然速度也很快的,但是轉(zhuǎn)化為樹結(jié)構(gòu)和生成樹的時間并不會太短。

2)選擇6和8的原因1:
如果是小于等于6,6/2=3,雖然速度也很快的,但是轉(zhuǎn)化為樹結(jié)構(gòu)和生成樹的時間并不會太短。

2)選擇6和8的原因2:
  中間有個差值7可以防止鏈表和樹之間頻繁的轉(zhuǎn)換。假設(shè)一下,如果設(shè)計成鏈表個數(shù)超過8則鏈表轉(zhuǎn)換成樹結(jié)構(gòu),鏈表個數(shù)小于8則樹結(jié)構(gòu)轉(zhuǎn)換成鏈表,如果一個HashMap不停的插入、刪除元素,鏈表個數(shù)在8左右徘徊,就會頻繁的發(fā)生樹轉(zhuǎn)鏈表、鏈表轉(zhuǎn)樹,效率會很低。

負載因子為什么是0.75 https://blog.csdn.net/m0_64355285/article/details/122343224
https://www.cnblogs.com/theRhyme/p/10609207.html
負載因子是0.75的時候,空間利用率比較高,而且避免了相當(dāng)多的Hash沖突,使得底層的鏈表或者是紅黑樹的高度比較低,提升了空間效率

說一下類加載機制,為什么要用雙親委派模型,什么時候用自定義類加載器,什么時候卸載
https://blog.csdn.net/qq_27706119/article/details/119838302

AQS讀寫鎖怎么分別實現(xiàn)的 https://blog.csdn.net/qq_44377709/article/details/121571109

Sping自動配置是怎么實現(xiàn)的
https://blog.csdn.net/weixin_46394920/article/details/121879443
https://blog.csdn.net/zjcjava/article/details/84028222

FactoryBean(是什么)和BeanFactory區(qū)別
https://blog.csdn.net/weixin_46034896/article/details/123813245
BeanFactory是個Factory,也就是IOC容器或?qū)ο蠊S,F(xiàn)actoryBean是個Bean。在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器)來進行管理的。但對FactoryBean而言,這個Bean不是簡單的Bean,而是一個能生產(chǎn)或者修飾對象生成的工廠Bean,它的實現(xiàn)與設(shè)計模式中的工廠模式和修飾器模式類似

說說SpringMVC的過程
https://blog.csdn.net/qq_45069944/article/details/122301502

Spring怎么解決循環(huán)依賴,為什么二級緩存不行
https://blog.csdn.net/f80407515/article/details/123166627
https://blog.csdn.net/weixin_40701758/article/details/123569043

什么場景下用AOP https://blog.csdn.net/qq_22169603/article/details/106236301

Netty對線程做了哪些優(yōu)化
https://www.cnblogs.com/luoxn28/p/11875340.html

你有什么問題要問我?

邦盛科技 2022.07.26 19.30

元空間有什么用
多現(xiàn)程怎么用,除了線程池還能怎么創(chuàng)建線程
線程池有幾個參數(shù),默認什么拒絕策略,達到最大線程數(shù)會怎么樣?
雙親委派模型
threadlocal底層是什么數(shù)據(jù)結(jié)構(gòu),map的hash碰撞怎么辦,hash算法用的哪種 內(nèi)存溢出怎么辦
jvm啟動參數(shù)
g1(jdk9開始默認)和cms還有之前的區(qū)別
對象回收計數(shù)默認多少
mybatis緩存,怎么讀取xml
aop用到的注解
老年代怎么回收對象

中電金信研究院(自研) 2022.08.01 14.00
單機/docker監(jiān)控檢查是怎么做的
怎么做自動重啟
vue用的hash還是hstory模式,hstory模式下/怎么避免接口404
jekis怎么配置prod
vue入口在哪里,加個頁面放哪個目錄下
probfful協(xié)議包含哪些,msg,server和rpc分別什么意思,string=1是什么意思

浙江安廚 2022.08.01 17.00
theadlocal什么數(shù)據(jù)結(jié)構(gòu),怎么做的
類加載集制,雙親委派,怎么跳出雙親委派
jvm對象從新生代到老年代的過程
MySQL事物的隔離級別,mvcc和傳播級別
如何排查cpu100%
怎么做定位排序
布隆過濾器什么數(shù)據(jù)結(jié)構(gòu)
Redis的aof怎么重寫優(yōu)化壓縮的
緩存擊穿,緩存穿透與緩存雪崩
多線程怎么保證線程安全

溪數(shù)科技 2022/08/03 18.05
Linux里fock一個子線程什么原理
編碼題:組織樹怎么遞歸分組,結(jié)束節(jié)點是什么

杭州星辰 2022/08/03 19.00
AQS
cms和g1的三原色區(qū)別
MySQL的mvcc中rc和c區(qū)別
synic怎么鎖住的
rocketmq怎么樣會丟失數(shù)據(jù),怎么避免,
存儲和Kafka持久化
布隆過濾器怎么修改一個值
IOC和aop用到Java的哪些原理
springboot自動裝載的過程
volta原理
spring事務(wù)傳播

認養(yǎng)一頭牛(二開) 2022/08/05 13.40
dobble底層怎么提供服務(wù),調(diào)用者怎么調(diào)用服務(wù)提供者的接口的

mq是怎么保證不丟失消息的,持久化機制

MySQL數(shù)據(jù)持久化的過程,redulog和undulog怎么執(zhí)行的

2022/08/05 15.00
tcp的四次揮手
https://blog.csdn.net/u013328965/article/details/124129387

四次揮手過程.png

tcp沾包拆包. 粘包原因
發(fā)送的數(shù)據(jù)包(消息)小于一次tcp報文所能傳輸?shù)淖畲笾?,由于發(fā)送速度過快,此時TCP在封裝過程中會將多個完整的消息封裝成一個TCP數(shù)據(jù)包;
接收方不及時讀取套接字緩沖區(qū)數(shù)據(jù)(應(yīng)用層緩沖區(qū)),這將發(fā)生粘包。
主要的原因是數(shù)據(jù)發(fā)送過快,數(shù)據(jù)堆積導(dǎo)致緩沖區(qū)積壓多個數(shù)據(jù)后打包才一次性發(fā)送出去(如果客戶端每發(fā)送一條數(shù)據(jù)就睡眠一段時間就不會發(fā)生粘包)。出現(xiàn)粘包會導(dǎo)致接受端沒有辦法解析粘包(粘在一塊的消息),因為在TCP的首部沒有表示數(shù)據(jù)長度的字段。

  1. 拆包原因
    發(fā)送的數(shù)據(jù)包(消息)超過一次tcp報文所能傳輸?shù)淖畲笾禃r,就會將一個數(shù)據(jù)包拆成多個最大tcp長度的tcp報文分開傳輸。進行MSS(最大報文長度)大小的TCP分段,當(dāng)(TCP報文長度-TCP頭部長度)>MSS的時候?qū)l(fā)生拆包。
    MSS:Maximum Segment Size ,TCP提交給IP層最大分段大小,不包含TCP Header和 TCP Option,只包含TCP Payload ,MSS是TCP用來限制application層最大的發(fā)送字節(jié)數(shù)。如果底層物理接口MTU= 1500 byte,則 MSS = 1500- 20(IP Header) -20 (TCP Header) = 1460 byte(一般來說還需要減去12“tcp option” = 1460-12 = 1448),如果application層 有2000 byte發(fā)送,需要兩個segment才可以完成發(fā)送,第一個TCP segment = 1460,第二個TCP segment = 540。
  2. 解決方案
    發(fā)送端給每個數(shù)據(jù)包添加TCP首部時,首部中應(yīng)該至少包含數(shù)據(jù)包的長度,這樣接收端在接收到數(shù)據(jù)后,通過讀取包首部的長度字段,便知道每一個數(shù)據(jù)包的實際長度(簡單理解就是,應(yīng)用層下來的報文前面加上一個報文長度字段);
    發(fā)送端將每個數(shù)據(jù)包封裝為固定長度(不夠的可以通過補0填充),這樣接收端每次從接收緩沖區(qū)中讀取固定長度的數(shù)據(jù)就自然而然的把每個數(shù)據(jù)包拆分開來;
    可以在數(shù)據(jù)包之間設(shè)置邊界,如添加特殊符號,這樣,接收端通過這個邊界就可以將不同的數(shù)據(jù)包拆分開。
    為什么UDP沒有粘包?
    粘包拆包問題在數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層以及傳輸層都有可能發(fā)生。日常的網(wǎng)絡(luò)應(yīng)用開發(fā)大都在傳輸層進行,由于UDP有消息保護邊界,不會發(fā)生粘包拆包問題,因此粘包拆包問題只發(fā)生在TCP協(xié)議中。
    具體原因是由于UDP發(fā)送的時候,沒有經(jīng)過Negal算法優(yōu)化,不會將多個小包合并一次發(fā)送出去。另外,在UDP協(xié)議的接收端,采用了鏈?zhǔn)浇Y(jié)構(gòu)來記錄每一個到達的UDP包;
    UDP是基于報文發(fā)送的,從UDP的幀結(jié)構(gòu)可以看出,在UDP首部采用了16bit來指示UDP數(shù)據(jù)報文的長度,因此在應(yīng)用層能很好的將不同的數(shù)據(jù)報文區(qū)分開,從而避免粘包和拆包的問題。

負載均衡高可用keeplive
https://blog.csdn.net/qq_45737042/article/details/119934812

beanfactory和factorybean的區(qū)別 https://blog.csdn.net/qq_20161461/article/details/125033055
BeanFactory: 是 IOC 容器,并且提供方法支持外部程序?qū)@些 bean 的訪問,在程序啟動時 根據(jù)傳入的參數(shù)產(chǎn)生各種類型的 bean,并添加到 IOC容器(實現(xiàn) BeanFactory 接口的類) 的 singletonObject 屬性中。
1、負責(zé)生產(chǎn)和管理bean的一個工廠。
2、事IOC容器的核心接口,它的職責(zé)包括:實例化、定位、配置應(yīng)用程序中的對象及建立這些對象的依賴。
3、多種實現(xiàn):如 DefaultListableBeanFactory、XmlBeanFactory、ApplicationContext等,其中XmlBeanFactory就是常用的一個,該實現(xiàn)將以XML方式描述組成應(yīng)用的對象及對象間的依賴關(guān)系。
FactoryBean:是個接口,它的實現(xiàn)類首先是個 bean,也存放在 BeanFactory 中。它具有工廠方法的功能,可以讓我們自定義Bean的創(chuàng)建過程,并添加到了 IOC容器中的factoryBeanObjectCache 屬性中。

bean的生命周期:https://blog.csdn.net/weixin_45723046/article/details/124546319
簡單的來說,一個Bean的生命周期分為四個階段:
1、 實例化(Instantiation)
2、 屬性設(shè)置(populate)
3、 初始化(Initialization)
4、 銷毀(Destruction)

jvm調(diào)優(yōu) https://blog.csdn.net/weixin_45735355/article/details/121397268

io多路復(fù)用的原理 https://blog.csdn.net/qq_25086397/article/details/124432092

AQS的獲取獨占鎖 https://www.cnblogs.com/wurao/p/15815158.html

juc下的四并發(fā)工具類

RocketMQ消息發(fā)送

Redis——緩存擊穿、穿透、雪崩https://blog.csdn.net/admans/article/details/123971680

Spring Data JPA 與 MyBatis對比 https://blog.csdn.net/qq_28289405/article/details/83503343

Spring循環(huán)依賴為什么需要三級緩存?https://blog.csdn.net/m0_46546381/article/details/124534149

暄暄科技(二面CTO)2022/08/06 14.00
jvm三色標(biāo)記法
卡表是用來干嘛的
java內(nèi)存模型(主線程,副線程)
除了cms和g1還知道哪些垃圾回收算法
類加載機制
加載 >> 驗證 >> 準(zhǔn)備 >> 解析 >> 初始化 >> 使用 >> 卸載
加載:在硬盤上查找并通過IO讀入字節(jié)碼文件,使用到類時才會加載,例如調(diào)用類的main()方法,new對象等等,在加載階段會在內(nèi)存中生成一個代表這個類的java.lang.Class對象,作為方法區(qū)這個類的各種數(shù)據(jù)的訪問入口
驗證:校驗字節(jié)碼文件的正確性
準(zhǔn)備:給類的靜態(tài)變量分配內(nèi)存,并賦予默認值
解析:將符號引用替換為直接引用,該階段會把一些靜態(tài)方法(符號引用,比如main()方法)替換為指向數(shù)據(jù)所存內(nèi)存的指針或句柄等(直接引用),這是所謂的靜態(tài)鏈接過程(類加載期間完成),動態(tài)鏈接是在程序運行期間完成的將符號引用替換為直接引用,下節(jié)課會講到動態(tài)鏈接
初始化:對類的靜態(tài)變量初始化為指定的值,執(zhí)行靜態(tài)代碼塊
怎么打破雙親委派模型

怎么實現(xiàn)熱加載

zk怎么保持數(shù)據(jù)一致性的

用zk怎么實現(xiàn)分布式鎖

2022.9.7 上行創(chuàng)盈
kafka消費者和提供者怎么在zk中推送和消費消息
Redis用過哪些數(shù)據(jù)結(jié)構(gòu)
怎么保證Redis和MySQL的數(shù)據(jù)一致性
Redis持久化過程中rdb快照模式時會阻塞嗎?bgsave在fock子線程時會阻塞一小段時間,
新版本多線程也只是接收時多線程接收后面還是默認單線程處理的,需要手動開啟多線程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容