JAVA
1.集合
ArrayList,LinkedList,Vector等區(qū)別
HashMap,LinkedMap,HashTable,SortMap,TreeMap等區(qū)別
2.代理
答:a.靜態(tài)代理:
優(yōu)點(diǎn):不修改目標(biāo)對(duì)象的前提下冒滩,對(duì)目標(biāo)功能進(jìn)行處理。
缺點(diǎn):代理對(duì)象與目標(biāo)對(duì)象實(shí)現(xiàn)相同的接口
b.JDK動(dòng)態(tài)代理:
實(shí)現(xiàn):生成接口的代理類,將AOP邏輯寫入代理類德频,在運(yùn)行時(shí)動(dòng)態(tài)織入AOP,通過反射調(diào)用邏輯。
優(yōu)點(diǎn):代理對(duì)象不需要實(shí)現(xiàn)接口望艺,利用static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces,InvocationHandler h )方法生成代理類
缺點(diǎn):目標(biāo)對(duì)象需要實(shí)現(xiàn)接口
c.Cglib動(dòng)態(tài)代理:
實(shí)現(xiàn):在運(yùn)行期間票腰,目標(biāo)類的字節(jié)碼加載后堕油,生成目標(biāo)類的子類,將切片邏輯加入到子類中乐严。
優(yōu)點(diǎn):不需要實(shí)現(xiàn)接口
代理工廠需要實(shí)現(xiàn)MethodInterceptor接口
缺點(diǎn):final類不能實(shí)現(xiàn)代理
3.線程
1.ThreadLocal:用ThreadLocal修飾的變量瘤袖,都會(huì)為每一個(gè)線程創(chuàng)建一個(gè)副本。yi空間換時(shí)間昂验,保障不發(fā)生并發(fā)問題捂敌。
2.ThreadLocal內(nèi)存泄漏原因:ThreadLocalMap的生命周期與線程相同,若沒有remove()key的話則會(huì)導(dǎo)致內(nèi)存泄漏凛篙。
4.鎖
答:synchronized原理:
a.當(dāng)同步對(duì)象時(shí),通過monitorenter和monitorexist指令實(shí)現(xiàn)栏渺;
b.當(dāng)同步方法時(shí)呛梆,通過方法修飾符ACC_SYNCHRONIZED實(shí)現(xiàn),在字節(jié)碼中沒有體現(xiàn),但是在class文件的方法表中磕诊,將access_flags字段中的synchronized設(shè)置為1填物,鎖的對(duì)象為此方法的類對(duì)象,調(diào)用此方法的對(duì)象霎终;
c.當(dāng)同步代碼塊時(shí)滞磺,monitorenter插入在開始,monitorexist插入在結(jié)束位置莱褒。
redis
1.redis有那些數(shù)據(jù)類型击困?
答:a.字符串類型 - 可以存儲(chǔ)字符串,json字符串等广凸,最大容量為512MB
b.HashMap -已key ,value 形式存儲(chǔ)阅茶,key,value都只能為字符串谅海,hashMap大小為2^31-1
c.list - 為一個(gè)雙向鏈表脸哀,向兩端添加元素的復(fù)雜度為O(1),通過索引訪問就需要從第一個(gè)開始查詢
d.set - 集合扭吁,元素不能重復(fù)
e.sortset - 有序集合
2.redis持久化
答:1.filesnapshotting:設(shè)置一個(gè)save n m ,也就是每過m/n秒后撞蜂,redis fork一個(gè)子進(jìn)程,子進(jìn)程會(huì)將redis中的數(shù)據(jù)寫入一個(gè)RDB的臨時(shí)文件中侥袜,當(dāng)寫完之后蝌诡,覆蓋原來的RDB文件。這樣的好處就是copy-on-write枫吧。
2.Append-only:當(dāng)有數(shù)據(jù)修改時(shí)送漠,就會(huì)將修改命令記錄到AOF文件中。只要設(shè)置appendonly yes
appendfsync everysec //每秒鐘強(qiáng)制寫入磁盤一次由蘑,在性能和持久化方面做了很好的折中闽寡,推薦使用BGREWRITEAOF.
spring
1.spring 容器
2.springMVC
1.多例:@scope,但是多例下普通屬性不會(huì)公用代兵,靜態(tài)屬性會(huì)公用。
2.SpringMVC核心處理流程: a.DispatcherServlet前端控制器接收發(fā)過來的請(qǐng)求爷狈,交給HandlerMapping處理器映射器
b.HandlerMapping處理器映射器植影,根據(jù)請(qǐng)求路徑找到相應(yīng)的HandlerAdapter處理器適配器(處理器適配器就是那些攔截器或Controller)
c.HandlerAdapter處理器適配器,處理一些功能請(qǐng)求涎永,返回一個(gè)ModelAndView對(duì)象(包括模型數(shù)據(jù)思币、邏輯視圖名)
d.ViewResolver視圖解析器,先根據(jù)ModelAndView中設(shè)置的View解析具體視圖
e.然后再將Model模型中的數(shù)據(jù)渲染到View上
3.spring AOP
答:1.before
2.afterretruning
3.around
4.spring IOC
答:對(duì)于spring來說羡微,就是為了控制對(duì)象的生命周期以及依賴谷饿。過程:初始化的時(shí)候,將對(duì)象分解成beanid,beanType,properties.查找的時(shí)候就通過反射去創(chuàng)建這個(gè)對(duì)象實(shí)例妈倔,并將properties注入到對(duì)象屬性博投。
5.spring 事務(wù)
一、傳播屬性:
1.PROPAGATION_REQUIRED :支持當(dāng)前事務(wù)盯蝴,如果沒有毅哗,新建
2.PROPAGATION_SUPPORTS :支持當(dāng)前事務(wù),如果沒有捧挺,以非事務(wù)執(zhí)行
3.PROPAGATION_MANDATORY : 支持當(dāng)前事物虑绵,沒有,拋出異常
4.PROPAGATION_REQUIRES_NEW : 新建事務(wù)闽烙,存在翅睛,掛起當(dāng)前事務(wù)
5.PROPAGATION_NOT_SUPPORTED : 以非事務(wù)執(zhí)行,存在黑竞,掛起當(dāng)前事務(wù)
6.PROPAGATION_NEVER : 以非事務(wù)執(zhí)行宏所,存在,拋出異常
7.PROPAGATION_NESTED : 存在摊溶,則在嵌套的事務(wù)中執(zhí)行爬骤。否則,創(chuàng)建莫换。
二霞玄、隔離級(jí)別:
1.DEFAULT:默認(rèn)隔離級(jí)別
2.READ_UNCOMMITTED:最低的隔離級(jí)別,允許一個(gè)事務(wù)看到另外一個(gè)事務(wù)未提交的數(shù)據(jù)拉岁,產(chǎn)生臟讀坷剧,不可重復(fù)讀,幻象讀取喊暖。
3.READ_COMMITTED:提交后才能讀惫企。
4.REPEATABLE_READ:可能出項(xiàng)幻象讀。
5.SERIALIZABLE:花費(fèi)最高,最可靠狞尔,事務(wù)為順序執(zhí)行丛版。
分布式
1.分布式鎖
redis分布式鎖:1.setNx命令,成功獲取偏序,失敗
2.查詢時(shí)間是否超時(shí)页畦,超時(shí)則重新getSet超時(shí)時(shí)間
2.分布式事務(wù)
a.兩階段提交協(xié)議:首先需要一個(gè)協(xié)調(diào)器。1.客戶端發(fā)請(qǐng)求到協(xié)調(diào)器研儒;2.協(xié)調(diào)器記錄prepare日志豫缨。然后將prepare信息發(fā)送給事務(wù)執(zhí)行器;3.事物執(zhí)行器記錄prepare日志端朵,執(zhí)行本機(jī)事務(wù)好芭,但是不commit。執(zhí)行成功發(fā)送yes,否則no;4.然后協(xié)調(diào)器根據(jù)所以事務(wù)執(zhí)行器的返回結(jié)果來確定是commit,還是rollback.
缺點(diǎn):多次多節(jié)點(diǎn)通信冲呢,通信時(shí)間太長(zhǎng)舍败;相對(duì)的事務(wù)執(zhí)行時(shí)間變長(zhǎng),鎖定的資源也變長(zhǎng)碗硬;
b.三階段提交協(xié)議:比兩階段提交協(xié)議增加了1.cancelCommit,協(xié)調(diào)器發(fā)請(qǐng)求確認(rèn)是否能執(zhí)行事務(wù)瓤湘;2增加了超時(shí)處理瓢颅;
c.利用消息隊(duì)列實(shí)現(xiàn)兩階段提交協(xié)議恩尾;
mysql
1.數(shù)據(jù)庫(kù)引擎
答:innerDB ,MyISAM,
區(qū)別:innerDB有事務(wù)挽懦,MyISAM沒有事物翰意;innerDB支持行級(jí)鎖,MyISAM不支持信柿;innerDB支持外鍵冀偶,MyISAM不支持;
2.數(shù)據(jù)庫(kù)索引
3.數(shù)據(jù)庫(kù)優(yōu)化
協(xié)議
1.http/https
https需要CA證書渔嚷,是SSL安全加密,默認(rèn)端口443形病;
cookies:保存在客戶端客年,內(nèi)容:名稱漠吻,值,過期時(shí)間途乃,域和路徑绍傲。不安全耍共,可以篡改猎塞。保存數(shù)據(jù)大小不能超過4k.
session:保存在服務(wù)端,有服務(wù)端產(chǎn)生枫弟。
Http1.x:同一時(shí)間對(duì)單一的域名訪問數(shù)量有限制;
Http2.x:使用了多路復(fù)用淡诗,對(duì)單一的http鏈接發(fā)起多重的請(qǐng)求,相應(yīng)韩容。在應(yīng)用層(Http2)與傳輸層(TCP/UDP)中間增加了一個(gè)二進(jìn)制分幀款违。
Http2:1.單鏈接多資源的方式群凶,減小服務(wù)端的壓力。內(nèi)存占用更少请梢,吞吐量更高
2.TCP/IP
組成:1.連路層:
3.RESTFUL
RPC框架
設(shè)計(jì)模式
秒殺系統(tǒng)
1.對(duì)現(xiàn)有業(yè)務(wù)的沖擊
2.對(duì)數(shù)據(jù)庫(kù)的負(fù)載
3.對(duì)帶寬的要求
4.直接下單
Rabbitmq
a.生產(chǎn)者確認(rèn):
1.通過事務(wù)保證一致性:channel.txSelect();channel.txCommit();
2.設(shè)置channel的confirm模式:channel上的消息都會(huì)生成一個(gè)唯一id(從1開始),一旦消息推送到隊(duì)列上毅弧,broker代理服務(wù)器就會(huì)像生產(chǎn)者推送一條消息气嫁,保護(hù)消息的唯一id
b.消費(fèi)者確認(rèn):令noAck=false,當(dāng)消費(fèi)者調(diào)用完業(yè)務(wù)邏輯后够坐,會(huì)顯示的調(diào)用basicAck寸宵,這樣mq就會(huì)將隊(duì)列中的消息刪除。如果此時(shí)消費(fèi)者斷開元咙,mq會(huì)將消息重新放入隊(duì)列安排下一次消費(fèi)梯影。