日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

收集的面试题 一

發(fā)布時(shí)間:2023/12/29 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 收集的面试题 一 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、數(shù)據(jù)庫(kù)語(yǔ)句是如何優(yōu)化的

  • 查詢 SQL時(shí)?盡量不要使用 select *

  • 盡量不使用or關(guān)鍵字

  • 模糊查詢時(shí),不要把%放前面

  • 盡量避免在索引列上使用 MySQL 的內(nèi)置函數(shù)

  • .使用 explain 分析你的查詢過(guò)程

  • 3、你使用SpringBoot的時(shí)候各種配置文件是怎么引入的

    在spring-boot-autoconfigure包下保存大量的自動(dòng)配置類

    類名都保存 META-INFO/spring.factotiries文件下

    自動(dòng)配置類生效需要一定條件,如@ConditionalOnClass,引入某些類時(shí)(導(dǎo)入了對(duì)應(yīng)的框架依賴)

    啟動(dòng)類上的注解:@SpringBootApplication

    包含三個(gè)注解:

    ? ? ?1.@ComponentScan 包的掃描

    ? ? ?2.@SpringBootConfiguration 定義配置類

    ? ? ?3.@EnableAutoConfiguration 啟動(dòng)自動(dòng)配置(將自動(dòng)配置類加載到內(nèi)存)

    怎么加載類到內(nèi)存中? Class.forName("完整類名")

    @EnableAutoConfiguration --> AutoConfigurationImportSelector --> loadFactoryNames --->

    loadSpringFactories --> classLoader.getResources("META-INF/spring.factories")

    6、說(shuō)說(shuō)你做過(guò)的項(xiàng)目和你主要負(fù)責(zé)的模塊

    滴噠在線教育平臺(tái)采用分布式的架構(gòu)設(shè)計(jì),包括后臺(tái)管理、前臺(tái)系統(tǒng)、訂單系統(tǒng)、單點(diǎn)系統(tǒng)、搜索系統(tǒng)、課程系統(tǒng)、廣告系統(tǒng)、支付系統(tǒng)等。教育平臺(tái)包括前臺(tái)模塊與后臺(tái)模塊。前臺(tái)主要包括:個(gè)人信息管理、課程信息查詢、課程信息瀏覽、課程搜索、智能排序、在線支付、購(gòu)物車管理、訂單確定等。后臺(tái)主要包括:用戶管理、角色管理、權(quán)限管理、課程管理、訂單管理等模塊。

  • 課程搜索,使用ES實(shí)現(xiàn),服務(wù)啟動(dòng)時(shí)會(huì)對(duì)ES進(jìn)行初始化,獲得MySQL的數(shù)據(jù),通過(guò)ES進(jìn)行關(guān)鍵字查詢,分頁(yè)查詢,多條件過(guò)濾、排序獲得課程數(shù)據(jù)。
  • 課程添加,當(dāng)課程進(jìn)行修改時(shí)同時(shí)修改Redis緩存,然后向RabbitMQ消息隊(duì)列通知搜索服務(wù),搜索服務(wù)會(huì)進(jìn)行ES的數(shù)據(jù)同步
  • 單點(diǎn)登錄,采用了 JWT 和 RSA 加密算法,鑒權(quán)服務(wù)生成 token 字符串,網(wǎng)關(guān)服務(wù)從前端的請(qǐng)求頭中獲取并解密 token。
  • 訂單模塊:使用Sharding-Sphere進(jìn)行分庫(kù)分表,通過(guò)Seata解決分庫(kù)分表帶來(lái)分布式事務(wù)問(wèn)題。
  • 微信支付,用戶點(diǎn)擊購(gòu)買后臺(tái)會(huì)進(jìn)行下單,后臺(tái)調(diào)用微信支付的統(tǒng)一下單API然后返回一個(gè)支付url,后臺(tái)利用url生成二維碼返回給前端,用戶掃碼支付成功后,微信會(huì)通知后臺(tái)接口,后臺(tái)會(huì)修改訂單狀態(tài),通知微信支付結(jié)果收到。
  • 7、講講Redis,你在項(xiàng)目中有用過(guò)Redis嗎

    Redis是一個(gè)高性能的內(nèi)存數(shù)據(jù)庫(kù),以key-value方式存儲(chǔ)數(shù)據(jù),可以作為緩存使用。

    高并發(fā) ? ? ? ?MySQL的連接數(shù)存在瓶頸,連接過(guò)大可能導(dǎo)致MySQL宕機(jī)

    解決方法 ? ? ? ?部署多個(gè)MySQL服務(wù),主從復(fù)制 ? ? ? ?部署緩存,承擔(dān)一部分的并發(fā)

    高性能 ? ? ? ? 基于內(nèi)存,內(nèi)存IO效率遠(yuǎn)遠(yuǎn)高于磁盤

    Redis的特點(diǎn)

    ? ? ? ? 性能高(讀的速度是110000次/s,寫的速度是81000次/s,單機(jī)redis支撐萬(wàn)級(jí)并發(fā))

    ? ? ? ? 支持多種存儲(chǔ)類型

    ? ? ? ? 豐富的特性(發(fā)布訂閱、事務(wù)、過(guò)期策略等)

    ? ? ? ? 支持持久化

    ? ? ? ? 單線程 (避免上下文切換,線程同步問(wèn)題)


    項(xiàng)目中在查詢及解決消息冪等性時(shí)會(huì)使用到

    9、數(shù)據(jù)庫(kù)建表的時(shí)候int(1)和int(2)的區(qū)別

    在 int(M) 中,M 的值跟 int(M) 所占多少存儲(chǔ)空間并無(wú)任何關(guān)系。 int(1)、int(2) 在磁盤上都是占用 4 btyes 的存儲(chǔ)空間。除了顯示給用戶的方式有點(diǎn)不同外,int(M) 跟 int 數(shù)據(jù)類型是相同的。

    int(2)代表默認(rèn)顯示長(zhǎng)度是2,當(dāng)不足2位時(shí),會(huì)幫你用0補(bǔ)全,超過(guò)時(shí),沒有任何影響。

    1、#和$的區(qū)別

    #{xx}應(yīng)用PreparedStatement的占位符?插入,能防止SQL注入

    ${xx}應(yīng)用字符串的拼接,不能防止SQL注入

    2、SpringMVC的執(zhí)行流程

    1)用戶發(fā)送請(qǐng)求

    2)前端控制器獲得用戶請(qǐng)求的URL,發(fā)送URL給處理器映射

    3)處理器映射將Handler(包裝方法信息)返回給前端控制器

    4)前端控制器發(fā)送Handler給處理器適配器,適配器執(zhí)行Handler方法

    5)執(zhí)行Handler方法后,返回ModelAndView(邏輯視圖)給前端控制器

    6)前端控制器將ModelAndView發(fā)送給視圖解析器,解析出物理視圖返回給前端控制器

    7)前端控制器渲染視圖,發(fā)送視圖給用戶

    3、講講IOC

    IOC(Inverse of Control)控制反轉(zhuǎn)是一種程序設(shè)計(jì)思想。

    控制是什么?

    JavaBean(Java對(duì)象)的創(chuàng)建和管理

    反轉(zhuǎn)是什么?

    一般情況下對(duì)象的創(chuàng)建和管理由開發(fā)者控制,反轉(zhuǎn)是把對(duì)象的創(chuàng)建和管理交給容器完成,然后再交給開發(fā)者。

    4、jvm參數(shù)

    jvm配置參數(shù)分為3大類:

    ????????1.跟蹤參數(shù):跟蹤、監(jiān)控JVM狀態(tài),用于程序員JVM調(diào)優(yōu)及故障排查

    ????????2.堆分配參數(shù):分配堆內(nèi)存

    ????????3.棧分配參數(shù):分配棧內(nèi)存

    5、反射的三種創(chuàng)建方式

  • 類名.class

  • 對(duì)象.getClass()

  • Class.forName("包名+類名")

  • 6、ArrayList和LinkedList的區(qū)別

    1.ArrayList是數(shù)組,LinkedList是雙向鏈表

    2.ArrayList查找性能高(因?yàn)橥ㄟ^(guò)下標(biāo)快速定位),插入和刪除性能低(移動(dòng)大量數(shù)據(jù))

    3.LinkedList查找性能低(因?yàn)橐蚯盎蛳蚝笠来尾檎?#xff09;,插入和刪除姓高(只需要修改前后指針,不用移動(dòng))

    4.LinkedList比ArrayList更占內(nèi)存,因?yàn)長(zhǎng)inkedList的節(jié)點(diǎn)除了存儲(chǔ)數(shù)據(jù),還存儲(chǔ)了兩個(gè)引用,一

    個(gè)指向前一個(gè)元素,一個(gè)指向后一個(gè)元素。

    7、ArrayList一次擴(kuò)容多少

    新容量是原來(lái)容量的1.5倍????????

    使用新容量創(chuàng)建新數(shù)組,將原數(shù)組的數(shù)據(jù)復(fù)制過(guò)去,將新數(shù)組賦值給原數(shù)組的引用

    8、Vector是如何實(shí)現(xiàn)線程安全的

    Vector與ArrayList容器的實(shí)現(xiàn)原理是一樣的,不過(guò)Vector支持多線程并發(fā)訪問(wèn),因?yàn)樾薷娜萜鞯姆椒ǘ技由狭藄ynchronized關(guān)鍵字修飾。

    9、講講你知道哪些排序方法,并說(shuō)一下他們的時(shí)間復(fù)雜度

    1、mysql的優(yōu)化

    2、StringBuild和StringBuffer的區(qū)別

    StringBuffer是線程安全的,StringBuilder是非線程安全的

    StringBuffer的執(zhí)行效率沒有StringBuilder高

    3、HashMap和Hashtable的區(qū)別

    1.Hashtable是線程安全的,HashMap是非線程安全的

    2.HashMap的性能高于Hashtable

    3.Hashtable不能接收null作為鍵和值,HashMap可以

    4、一些常見集合的區(qū)別

    1、list和set是實(shí)現(xiàn)了collection接口的。

    2、list可以允許重復(fù)的對(duì)象。可以插入多個(gè)null元素。是一個(gè)有序容器,保持了每個(gè)元素的插入順

    序,輸出的順序就是插入的順序。Set不允許重復(fù)對(duì)象,無(wú)序容器,你無(wú)法保證每個(gè)元素的存儲(chǔ)順

    序,TreeSet通過(guò) Comparator 或者 Comparable 維護(hù)了一個(gè)排序順序。只允許一個(gè) null 元素。

    3、Map不是collection的子接口或者實(shí)現(xiàn)類。Map是一個(gè)接口。Map 的 每個(gè) Entry 都持有兩個(gè)對(duì)

    象,也就是一個(gè)鍵一個(gè)值,Map 可能會(huì)持有相同的值對(duì)象但鍵對(duì)象必須是唯一的。TreeMap 也通

    過(guò) Comparator 或者 Comparable 維護(hù)了一個(gè)排序順序。Map 里你可以擁有隨意個(gè) null 值但最多

    只能有一個(gè) null 鍵。

    5、Vue子父項(xiàng)目怎么實(shí)現(xiàn)請(qǐng)求同步

    父組件通過(guò) props 傳入狀態(tài)給子組件,子組件通過(guò) props 來(lái)初始化另外一個(gè)內(nèi)部的狀態(tài),子組件每

    次更改狀態(tài)之后都通知父組件,然后由父組件來(lái)更改自己的狀態(tài),就是 props on emit 的應(yīng)用

    6、CSS類選擇器

    類選擇器允許以一種獨(dú)立于文檔元素的方式來(lái)指定樣式。

    該選擇器可以單獨(dú)使用,也可以與其他元素結(jié)合使用。

    只有適當(dāng)?shù)貥?biāo)記文檔后,才能使用選擇器,所以使用這兩種選擇器通常需要先做一些構(gòu)想和計(jì)劃。

    要應(yīng)用樣式而不考慮具體設(shè)計(jì)的元素,最常用的方法就是使用類選擇器。

    7、es的使用 為什么要使用

    Elasticsearch具備以下特點(diǎn):

    ? ? ? ? 分布式,無(wú)需人工搭建集群

    ? ? ? ? Restful風(fēng)格,一切API都遵循Rest原則,容易上手

    ? ? ? ? 近實(shí)時(shí)搜索,數(shù)據(jù)更新在Elasticsearch中幾乎是完全同步的。

    正排索引

    ? ? ? ? 通過(guò)key找到value,如通過(guò)id找到文章

    ? ? ? ? 查詢內(nèi)容時(shí),需要逐條遍歷,速度比較慢

    倒排索引

    ? ? ? ? 通過(guò)value找到key

    ? ? ? ? 對(duì)內(nèi)容進(jìn)行分詞,生成倒排索引

    8、為什么要用Redis

    9、Redis的幾種問(wèn)題和解決方案

    1)緩存擊穿

    高并發(fā)的情況下,短時(shí)間內(nèi)緩存會(huì)被穿過(guò),請(qǐng)求直接打到數(shù)據(jù)庫(kù)上,可能導(dǎo)致數(shù)據(jù)庫(kù)壓力過(guò)大。

    解決方案:對(duì)代碼上鎖(雙重檢查鎖)

    2)緩存穿透

    高并發(fā)的情況下,如果查詢不存在的數(shù)據(jù),因?yàn)榫彺婧蛿?shù)據(jù)庫(kù)都不存在,請(qǐng)求都會(huì)打到數(shù)據(jù)庫(kù)上,可能導(dǎo)致系統(tǒng)崩潰。

    解決方案:

    ????????1) 保存不存在的數(shù)據(jù)到緩存中,設(shè)置一定過(guò)期時(shí)間

    ????????2) 布隆過(guò)濾器(直接過(guò)濾掉不存在數(shù)據(jù)的請(qǐng)求) 不能準(zhǔn)確判斷是否存在數(shù)據(jù),能準(zhǔn)確判斷數(shù)據(jù)不存在

    ????????3)緩存雪崩

    高并發(fā)的情況下,緩存服務(wù)器重啟或熱點(diǎn)數(shù)據(jù)同時(shí)過(guò)期,全部訪問(wèn)數(shù)據(jù)庫(kù),導(dǎo)致數(shù)據(jù)庫(kù)宕機(jī)

    解決方案:

    ????????1)配置緩存集群

    ????????2)盡量給熱點(diǎn)數(shù)據(jù)設(shè)置不一樣的過(guò)期時(shí)間,相對(duì)均勻

    10、消息隊(duì)列的用法

    1.最基本的隊(duì)列模型: 一個(gè)生產(chǎn)者發(fā)送消息到一個(gè)隊(duì)列,一個(gè)消費(fèi)者從隊(duì)列中取消息。

    2.工作隊(duì)列,生產(chǎn)者將消息分發(fā)給多個(gè)消費(fèi)者,如果生產(chǎn)者生產(chǎn)了100條消息,消費(fèi)者1消費(fèi)50條,消費(fèi)者2消費(fèi)50條。

    實(shí)現(xiàn)能者多勞:

    channel.basicQos(1);限制隊(duì)列一次發(fā)一個(gè)消息給消費(fèi)者,等消費(fèi)者有了反饋,再發(fā)下一條

    channel.basicAck 消費(fèi)完消息后手動(dòng)反饋,處理快的消費(fèi)者就能處理更多消息

    basicConsume 中的參數(shù)改為false

    3.發(fā)布/訂閱模式和Work模式的區(qū)別是:Work模式只存在一個(gè)隊(duì)列,多個(gè)消費(fèi)者共同消費(fèi)一個(gè)隊(duì)列中

    的消息;而發(fā)布訂閱模式存在多個(gè)隊(duì)列,不同的消費(fèi)者可以從各自的隊(duì)列中處理完全相同的消息。

    1) 創(chuàng)建交換機(jī)(Exchange)類型是fanout(扇出)

    2) 交換機(jī)需要綁定不同的隊(duì)列

    3) 不同的消費(fèi)者從不同的隊(duì)列中獲得消息

    4) 生產(chǎn)者發(fā)送消息到交換機(jī)

    5) 再由交換機(jī)將消息分發(fā)到多個(gè)隊(duì)列

    4.路由模式的消息隊(duì)列可以給隊(duì)列綁定不同的key,生產(chǎn)者發(fā)送消息時(shí),給消息設(shè)置不同的key,這樣

    交換機(jī)在分發(fā)消息時(shí),可以讓消息路由到key匹配的隊(duì)列中。

    5.主題模式和路由模式差不多,在key中可以加入通配符:

    ? ? ? ? * 匹配任意一個(gè)單詞 com.* ---->com.baidu? com.xxx

    ? ? ? ? # 匹配.號(hào)隔開的多個(gè)單詞 com.* ---> com.xxx.xxx.baidu

    11、常見的設(shè)計(jì)模式知道幾種

    1.裝飾者設(shè)計(jì)模式

    開閉原則:程序開發(fā)過(guò)程中,對(duì)功能的擴(kuò)展開放,對(duì)功能的修改關(guān)閉,提高程序的穩(wěn)定性

    目的:在不修改原有類的代碼基礎(chǔ)上,對(duì)類的功能進(jìn)行擴(kuò)展

    在Java的IO包下,大量應(yīng)用了裝飾者模式

    實(shí)現(xiàn)

    ? ? ? ? 1.裝飾者和被裝飾者都要實(shí)現(xiàn)相同的接口或繼承相同的父類

    ? ? ? ? 2.裝飾者中定義一個(gè)被裝飾者的對(duì)象

    ? ? ? ? 3.給裝飾者傳入被裝飾者對(duì)象

    ? ? ? ? 4.調(diào)用裝飾者的方法時(shí),也調(diào)用被裝飾者的方法,同時(shí)進(jìn)行功能的擴(kuò)展

    2.單例設(shè)計(jì)模式

    目的:保證一個(gè)類只有一個(gè)實(shí)例(對(duì)象)

    應(yīng)用場(chǎng)景:

    對(duì)于某些大的對(duì)象,單例模式能節(jié)省系統(tǒng)資源

    應(yīng)用某些特定業(yè)務(wù)需求,如:保證公司只有一個(gè)CEO

    實(shí)現(xiàn) PS : Runtime類就是單例模式的

    將所有構(gòu)造方法定義為private

    在類中創(chuàng)建一個(gè)靜態(tài)的對(duì)象

    在類中定義一個(gè)靜態(tài)方法來(lái)返回該對(duì)象

    兩種單例模式

    餓漢式:類中一開始就創(chuàng)建對(duì)象,不管后面是否使用對(duì)象,都消耗了內(nèi)存。

    懶漢式:類中一開始不創(chuàng)建對(duì)象,調(diào)用返回對(duì)象方法時(shí)再創(chuàng)建對(duì)象。

    3.代理模式

    代理模式給某一個(gè)對(duì)象提供一個(gè)代理對(duì)象,并由代理對(duì)象控制對(duì)原對(duì)象的引用。

    代理模式的作用

    ????????1)中介的作用,當(dāng)調(diào)用者不能或不方便調(diào)用某個(gè)對(duì)象時(shí),代理起到中介的作用,幫助調(diào)用者間接

    的調(diào)用對(duì)象。

    ????????2)符合開閉原則,在不修改原有類代碼的前提下,對(duì)類的功能進(jìn)行增強(qiáng)。

    代理模式分為兩種:

    ????????1) 靜態(tài)代理,在運(yùn)行前,通過(guò)編寫代碼的方式生成代理類

    ????????2) 動(dòng)態(tài)代理,在運(yùn)行后,通過(guò)反射機(jī)制生成代理類

    靜態(tài)代理

    ????????1)代理者和被代理者都實(shí)現(xiàn)相同的接口

    ????????2)代理者包含被代理者的對(duì)象

    ????????3)創(chuàng)建代理對(duì)象時(shí)傳入被代理對(duì)象

    ????????4)代理者執(zhí)行方法時(shí),會(huì)調(diào)用被代理者的方法,同時(shí)擴(kuò)展新的功能

    靜態(tài)代理的問(wèn)題:一個(gè)代理類只能代理一種業(yè)務(wù),如果有多種業(yè)務(wù),就必須創(chuàng)建大量的代理類。

    動(dòng)態(tài)代理

    和靜態(tài)代理不同,動(dòng)態(tài)代理是在運(yùn)行時(shí),通過(guò)反射機(jī)制動(dòng)態(tài)生成代理類。開發(fā)者不需要手動(dòng)編寫新

    的代理類。

    動(dòng)態(tài)代理分類

    JDK動(dòng)態(tài)代理

    JDK自帶的,前提是:被代理類必須實(shí)現(xiàn)過(guò)接口。

    實(shí)現(xiàn)步驟

    ????????1) 實(shí)現(xiàn)InvocationHandler接口

    ????????2)實(shí)現(xiàn)invoke方法

    ????????3)通過(guò)Proxy.newProxyInstance方法返回代理對(duì)象

    CGLib動(dòng)態(tài)代理

    需要引入CGLib依賴,它的原理是:通過(guò)反射+繼承機(jī)制動(dòng)態(tài)生成被代理類的子類,所以被代理類

    不能是final的。

    實(shí)現(xiàn)步驟

    ????????1)引入cglib

    ????????2)實(shí)現(xiàn)MethodInterceptor接口

    ????????3)實(shí)現(xiàn)intercept方法

    ????????4)通過(guò)Ehancer返回代理對(duì)象

    12、Spring和SpringCloud的區(qū)別

    Spring 框架就像一個(gè)家族,有眾多衍生產(chǎn)品例如 boot、security、jpa等等。但他們的基礎(chǔ)都

    是Spring的ioc、aop等. ioc 提供了依賴注入的容器, aop解決了面向橫切面編程,然后在此兩者的

    基礎(chǔ)上實(shí)現(xiàn)了其他延伸產(chǎn)品的高級(jí)功能;

    SpringCloud是一套目前完整的微服務(wù)框架,它是是一系列框架的有序集合。它只是將目前各家公司開發(fā)的比較成熟、經(jīng)得起實(shí)際考驗(yàn)的服務(wù)框架組合起來(lái),通過(guò)SpringBoot風(fēng)格進(jìn)行再封裝屏蔽掉了復(fù)雜的配置和實(shí)現(xiàn)原理,最終給開發(fā)者留出了一套簡(jiǎn)單易懂、易部署和易維護(hù)的分布式系統(tǒng)開發(fā)工具包。它利用Spring Boot的開發(fā)便利性巧妙地簡(jiǎn)化了分布式系統(tǒng)基礎(chǔ)設(shè)施的開發(fā),如服務(wù)發(fā)現(xiàn)注冊(cè)、配置中心、消息總線、負(fù)載均衡、斷路器、數(shù)據(jù)監(jiān)控等,都可以用SpringBoot的開發(fā)風(fēng)格做到一鍵啟動(dòng)和部署

    1、Vue的生命周期

    Vue 的生命周期總共分為8個(gè)階段:創(chuàng)建前/后,載入前/后,更新前/后,銷毀前/后。

    1、beforeCreate(創(chuàng)建前)

    表示實(shí)例完全被創(chuàng)建出來(lái)之前,vue 實(shí)例的掛載元素$el和數(shù)據(jù)對(duì)象 data 都為 undefined,還未初

    始化。

    2、created(創(chuàng)建后)

    數(shù)據(jù)對(duì)象 data 已存在,可以調(diào)用 methods 中的方法,操作 data 中的數(shù)據(jù),但 dom 未生成,$el

    未存在 。

    3、beforeMount(掛載前)

    vue 實(shí)例的 $el 和 data 都已初始化,掛載之前為虛擬的 dom節(jié)點(diǎn),模板已經(jīng)在內(nèi)存中編輯完成

    了,但是尚未把模板渲染到頁(yè)面中。data.message 未替換。

    4、mounted(掛載后)

    vue 實(shí)例掛載完成,data.message 成功渲染。內(nèi)存中的模板,已經(jīng)真實(shí)的掛載到了頁(yè)面中,用戶

    已經(jīng)可以看到渲染好的頁(yè)面了。實(shí)例創(chuàng)建期間的最后一個(gè)生命周期函數(shù),當(dāng)執(zhí)行完 mounted 就表

    示,實(shí)例已經(jīng)被完全創(chuàng)建好了,DOM 渲染在 mounted 中就已經(jīng)完成了。

    5、beforeUpdate(更新前)

    當(dāng) data 變化時(shí),會(huì)觸發(fā)beforeUpdate方法 。data 數(shù)據(jù)尚未和最新的數(shù)據(jù)保持同步。

    6、updated(更新后)

    當(dāng) data 變化時(shí),會(huì)觸發(fā) updated 方法。頁(yè)面和 data 數(shù)據(jù)已經(jīng)保持同步了。

    7、beforeDestory(銷毀前)

    組件銷毀之前調(diào)用 ,在這一步,實(shí)例仍然完全可用。

    8、destoryed(銷毀后)

    組件銷毀之后調(diào)用,對(duì) data 的改變不會(huì)再觸發(fā)周期函數(shù),vue 實(shí)例已解除事件監(jiān)聽和 dom綁定,

    但 dom 結(jié)構(gòu)依然存在。

    2、list去重,返回去重結(jié)果

    使用stream進(jìn)行set和list轉(zhuǎn)換去重?

    使用for循環(huán)遍歷判斷去重

    4、jq選擇器,如何選中元素

    JQuery特有的過(guò)濾選擇器

    1) 基本過(guò)濾選擇器???????

    ?2)內(nèi)容過(guò)濾選擇器 ????????

    3)可見過(guò)濾選擇器 ????????

    4) 屬性過(guò)濾選擇器

    5) 子標(biāo)簽過(guò)濾選擇器 ????????

    6) 表單屬性過(guò)濾選擇器 ????????

    7) 表單元素過(guò)濾選擇器

    5、Spring事務(wù)配置的具體流程

    (1)事務(wù)的傳播性:@Transactional(propagation=Propagation.REQUIRED)?

    ? ? ? 如果有事務(wù), 那么加入事務(wù), 沒有的話新建一個(gè)(默認(rèn)情況下)

    (2)事務(wù)的超時(shí)性:@Transactional(timeout=30) //默認(rèn)是30秒?

    ? ? ? 注意這里說(shuō)的是事務(wù)的超時(shí)性而不是Connection的超時(shí)性,這兩個(gè)是有區(qū)別的

    (3)事務(wù)的隔離級(jí)別:@Transactional(isolation = Isolation.READ_UNCOMMITTED) ,未提交

    讀,就是一個(gè)事務(wù)可以讀取另一個(gè)未提交事務(wù)的數(shù)據(jù)。讀取未提交數(shù)據(jù)(會(huì)出現(xiàn)臟讀, 不可重復(fù)讀)

    基本不使用;

      @Transactional(isolation = Isolation.READ_COMMITTED),已提交讀,就是一個(gè)事務(wù)要等另

    一個(gè)事務(wù)提交后才能讀取數(shù)據(jù)。可以解決臟讀,可能會(huì)出現(xiàn)不可重復(fù)讀問(wèn)題;

      @Transactional(isolation = Isolation.REPEATABLE_READ),重復(fù)讀,就是在開始讀取數(shù)據(jù)

    (事務(wù)開啟)時(shí),不再允許修改操作,重復(fù)讀可以解決不可重復(fù)讀問(wèn)題。不可重復(fù)讀對(duì)應(yīng)的是修

    改,即UPDATE操作。但是可能還會(huì)有幻讀問(wèn)題。因?yàn)榛米x問(wèn)題對(duì)應(yīng)的是插入INSERT操作,而不

    是UPDATE操作。

      @Transactional(isolation = Isolation.SERIALIZABLE) ,是最高的事務(wù)隔離級(jí)別,在該級(jí)別下,

    事務(wù)串行化順序執(zhí)行,可以避免臟讀、不可重復(fù)讀與幻讀。但是這種事務(wù)隔離級(jí)別效率低下,比較

    耗數(shù)據(jù)庫(kù)性能,一般不使用。

    6、java常見的設(shè)計(jì)模式

    7、面向?qū)ο罅笤瓌t

    1)單一職責(zé)原則,一個(gè)合理的類,應(yīng)該僅有一個(gè)引起它變化的原因,即單一職責(zé),就是設(shè)計(jì)的這個(gè)類

    功能應(yīng)該只有一個(gè);

      優(yōu)點(diǎn):消除耦合,減小因需求變化引起代碼僵化。

    2) 開-閉原則,講的是設(shè)計(jì)要對(duì)擴(kuò)展有好的支持,而對(duì)修改要嚴(yán)格限制。即對(duì)擴(kuò)展開放,對(duì)修改封

    閉。

      優(yōu)點(diǎn):降低了程序各部分之間的耦合性,其適應(yīng)性、靈活性、穩(wěn)定性都比較好。當(dāng)已有軟件系

    統(tǒng)需要增加新的功能時(shí),不需要對(duì)作為系統(tǒng)基礎(chǔ)的抽象層進(jìn)行修改,只需要在原有基礎(chǔ)上附加新的

    模塊就能實(shí)現(xiàn)所需要添加的功能。增加的新模塊對(duì)原有的模塊完全沒有影響或影響很小,這樣就無(wú)

    須為原有模塊進(jìn)行重新測(cè)試。

    3) 里氏代換原則,很嚴(yán)格的原則,規(guī)則是“子類必須能夠替換基類,否則不應(yīng)當(dāng)設(shè)計(jì)為其子類。”也

    就是說(shuō),一個(gè)軟件實(shí)體如果使用的是一個(gè)父類的話,那么一定適用于其子類,而且它察覺不出父類

    對(duì)象和子類對(duì)象的區(qū)別。也就是說(shuō),在軟件里面,把父類都替換成它的子類,程序的行為沒有變

    化。

      優(yōu)點(diǎn):可以很容易的實(shí)現(xiàn)同一父類下各個(gè)子類的互換,而客戶端可以毫不察覺。

    4) 依賴倒換原則,“設(shè)計(jì)要依賴于抽象而不是具體化”。換句話說(shuō)就是設(shè)計(jì)的時(shí)候我們要用抽象來(lái)思

    考,而不是一上來(lái)就開始劃分我需要哪些哪些類,因?yàn)檫@些是具體。

    高層模塊不應(yīng)該依賴低層模塊,它們都應(yīng)該依賴抽象。抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象。

    另一種表述為: 要針對(duì)接口編程,不要針對(duì)實(shí)現(xiàn)編程。

      優(yōu)點(diǎn):人的思維本身實(shí)際上就是很抽象的,我們分析問(wèn)題的時(shí)候不是一下子就考慮到細(xì)節(jié),而

    是很抽象的將整個(gè)問(wèn)題都構(gòu)思出來(lái),所以面向抽象設(shè)計(jì)是符合人的思維的。另外這個(gè)原則會(huì)很好的

    支持(開閉原則)OCP,面向抽象的設(shè)計(jì)使我們能夠不必太多依賴于實(shí)現(xiàn),這樣擴(kuò)展就成為了可

    能,這個(gè)原則也是另一篇文章《Design by Contract》的基石。

    5) 接口隔離原則,“將大的接口打散成多個(gè)小接口”,讓系統(tǒng)解耦,從而容易重構(gòu),更改和重新部

    署。

      優(yōu)點(diǎn):會(huì)使一個(gè)軟件系統(tǒng)功能擴(kuò)展時(shí),修改的壓力不會(huì)傳到別的對(duì)象那里。

    6) 迪米特法則或最少知識(shí)原則,這個(gè)原則首次在Demeter系統(tǒng)中得到正式運(yùn)用,所以定義為迪米特

    法則。它講的是“一個(gè)對(duì)象應(yīng)當(dāng)盡可能少的去了解其他對(duì)象”。

    優(yōu)點(diǎn):消除耦合。

    1、SpringMVC執(zhí)行流程

    2、RabbitMQ的用途

    1)解耦

    服務(wù)之間進(jìn)行解耦,A服務(wù)調(diào)用B服務(wù)時(shí),需要編寫相關(guān)的代碼,調(diào)用情況發(fā)生改變時(shí),需要修改

    調(diào)用的代碼

    2)異步

    傳統(tǒng)的同步調(diào)用方式,需要等待調(diào)用完成,才能進(jìn)行其它業(yè)務(wù)

    異步調(diào)用方法,將消息發(fā)送到隊(duì)列中,就可以返回,執(zhí)行其它業(yè)務(wù),速度大大提升

    3)削峰

    出現(xiàn)流量激增的情況時(shí),消息隊(duì)列可以設(shè)置消息的最大數(shù)量,處理一部分消息,其它消息交給隊(duì)列

    排隊(duì)處理

    3、創(chuàng)建線程的三種方式

    繼承Thread類

    1)繼承Thread類 ? ? ? ?

    2)重寫run方法 ? ? ? ?

    實(shí)現(xiàn)Runnable接口

    1)實(shí)現(xiàn)Runnable接口 ? ? ?

    ?2)實(shí)現(xiàn)run方法

    3)創(chuàng)建實(shí)現(xiàn)Runnable接口的對(duì)象,傳入Thread對(duì)象中 ? ? ?

    實(shí)現(xiàn)Callable接口

    1)實(shí)現(xiàn)Callable接口,實(shí)現(xiàn)call方法 ? ? ? ?

    2)創(chuàng)建Callable對(duì)象,傳入FutureTask對(duì)象

    3)創(chuàng)建FutureTask對(duì)象,傳入Thread對(duì)象 ? ? ? ?

    4)啟動(dòng)線程

    5)調(diào)用get方法得到返回結(jié)果

    4、線程中常用的方法

    方法介紹
    start()啟動(dòng)
    stop()停止(禁用,可能導(dǎo)致線程死鎖等問(wèn)題),停止線程可以讓run執(zhí)行結(jié)束
    String getName()獲得線程的名字
    setName(String)設(shè)置線程名字
    sleep(long)進(jìn)入睡眠,毫秒
    setPriority(int)設(shè)置線程的優(yōu)先級(jí)(1~10從低到高)越高搶CPU幾率更高
    setDaemon(boolean)設(shè)置為后臺(tái)線程 true ,后臺(tái)線程是為其它線程服務(wù)的,如果沒有其它線程存在,就自動(dòng)死亡;使用案例:GC就是一種后臺(tái)線程
    join()線程的加入(合并)讓其它線程先執(zhí)行完,再執(zhí)行自己的指令

    5、list set map 集合特性

    List集合的特點(diǎn):

    - 可以添加重復(fù)的數(shù)據(jù)
    - 數(shù)據(jù)可以通過(guò)下標(biāo)單獨(dú)訪問(wèn)
    - 數(shù)據(jù)可以排序

    Set集合的特點(diǎn):

    - 不能添加重復(fù)的數(shù)據(jù)
    - 數(shù)據(jù)不能單獨(dú)訪問(wèn)

    Map集合的特點(diǎn):

    - 數(shù)據(jù)以鍵值對(duì)保存
    - 鍵不能重復(fù)
    - 數(shù)據(jù)可以通過(guò)鍵訪問(wèn)

    1、SpringMVC的執(zhí)行流程

    2、jdk8比以前有什么新特性

    函數(shù)式接口、Lambda表達(dá)式、Stream接口、方法的引用、新的日期時(shí)間API等

    3、map和list

    4、RabbitMQ

    5、Vue的特性

    1) 輕量級(jí)的框架

    Vue.js 能夠自動(dòng)追蹤依賴的模板表達(dá)式和計(jì)算屬性,提供 MVVM 數(shù)據(jù)綁定和一個(gè)可組合的組件系統(tǒng),具有簡(jiǎn)單、靈活的 API,使讀者更加容易理解,能夠更快上手。

    2) 雙向數(shù)據(jù)綁定

    聲明式渲染是數(shù)據(jù)雙向綁定的主要體現(xiàn),同樣也是 Vue.js 的核心,它允許采用簡(jiǎn)潔的模板語(yǔ)法將數(shù)據(jù)聲明式渲染整合進(jìn) DOM。

    3) 指令

    Vue.js 與頁(yè)面進(jìn)行交互,主要就是通過(guò)內(nèi)置指令來(lái)完成的,指令的作用是當(dāng)其表達(dá)式的值改變時(shí)相應(yīng)地將某些行為應(yīng)用到 DOM 上。

    4) 組件化

    組件(Component)是 Vue.js 最強(qiáng)大的功能之一。組件可以擴(kuò)展 HTML 元素,封裝可重用的代碼。

    在 Vue 中,父子組件通過(guò) props 傳遞通信,從父向子單向傳遞。子組件與父組件通信,通過(guò)觸發(fā)事件通知父組件改變數(shù)據(jù)。這樣就形成了一個(gè)基本的父子通信模式。

    在開發(fā)中組件和 HTML、JavaScript 等有非常緊密的關(guān)系時(shí),可以根據(jù)實(shí)際的需要自定義組件,使開發(fā)變得更加便利,可大量減少代碼編寫量。

    組件還支持熱重載(hotreload)。當(dāng)我們做了修改時(shí),不會(huì)刷新頁(yè)面,只是對(duì)組件本身進(jìn)行立刻重載,不會(huì)影響整個(gè)應(yīng)用當(dāng)前的狀態(tài)。CSS 也支持熱重載。

    5) 客戶端路由

    Vue-router 是 Vue.js 官方的路由插件,與 Vue.js 深度集成,用于構(gòu)建單頁(yè)面應(yīng)用。Vue 單頁(yè)面應(yīng)用是基于路由和組件的,路由用于設(shè)定訪問(wèn)路徑,并將路徑和組件映射起來(lái),傳統(tǒng)的頁(yè)面是通過(guò)超鏈接實(shí)現(xiàn)頁(yè)面的切換和跳轉(zhuǎn)的。

    6) 狀態(tài)管理

    狀態(tài)管理實(shí)際就是一個(gè)單向的數(shù)據(jù)流,State 驅(qū)動(dòng) View 的渲染,而用戶對(duì) View 進(jìn)行操作產(chǎn)生 Action,使 State 產(chǎn)生變化,從而使 View 重新渲染,形成一個(gè)單獨(dú)的組件。

    6、es用的什么查詢

    ElasticSearch常用的幾種查詢方式,terms 查詢是term的擴(kuò)展,可以支持多個(gè)vlaue匹配,只需要一個(gè)匹配就可以了。

    1 term查詢(精準(zhǔn)查詢)

    term是ES中的精準(zhǔn)查詢,不會(huì)參與ES分詞查詢。

    2 math查詢(分詞匹配查詢)

    match查詢是按ES分詞的倒排表進(jìn)行查詢,而keyword不會(huì)被分詞,match的需要跟keyword的完全匹配可以。可以用于一般性的匹配查詢。

    3 fuzzy查詢(模糊查詢)

    fuzzy查詢可以用于糾正去拼寫的問(wèn)題,fuzziness是可以允許糾正錯(cuò)誤拼寫的個(gè)數(shù)

    4 ?wildcard(通配符查詢)

    通配符查詢?cè)试S我們指定一個(gè)模式來(lái)匹配,而不需要指定完整的trem,匹配的方式類似于match的

    分詞匹配查詢。

    ?將會(huì)匹配如何字符;*將會(huì)匹配零個(gè)或者多個(gè)字符。

    5 bool查詢(布爾查詢)

    bool查詢本身沒有查詢功能,而是基于邏輯值使用前面幾種查詢方式進(jìn)行組合查詢。

    7、SpringBoot有什么注解

    1、@SpringBootApplication

    替代 @SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan

    2、@ImportAutoConfiguration

    導(dǎo)入配置類,一般做測(cè)試的時(shí)候使用,正常優(yōu)先使用@EnableAutoConfiguration?

    3、@SpringBootConfiguration

    替代@Configuration

    4、@ImportResource

    將資源導(dǎo)入容器

    5、@PropertySource?

    導(dǎo)入properties文件

    6、PropertySources

    @PropertySource 的集合

    7、@Role

    bean角色定義為ROLE_APPLICATION(默認(rèn)值)、ROLE_SUPPORT(輔助角色)、ROLE_INFRASTRUCTURE(后臺(tái)角色,用戶無(wú)感)
    8、@Scope

    指定bean的作用域,默認(rèn)singleton,其它包括prototype、request、session、globalSession

    9、@Lazy

    使bean懶加載,取消bean預(yù)初始化。

    10、@Primary

    自動(dòng)裝配時(shí)當(dāng)出現(xiàn)多個(gè)Bean候選者時(shí),被注解為@Primary的Bean將作為首選者,否者將拋出異常。

    11、@Profile

    指定Bean在哪個(gè)環(huán)境下被激活

    12、@DependsOn

    依賴的bean注冊(cè)完成,才注冊(cè)當(dāng)前類,依賴bean不存在會(huì)報(bào)錯(cuò)。用于控制bean加載順序

    13、@PostConstruct

    bean的屬性都注入完畢后,執(zhí)行注解標(biāo)注的方式進(jìn)行初始化工作

    14、@Autowired

    默認(rèn)按類型裝配,如果我們想使用按名稱裝配,可以結(jié)合@Qualifier注解一起使用。

    15、@Lookup

    根據(jù)方法返回的類型,去容器中撈出對(duì)應(yīng)

    16、@Qualifier

    申明bean名字,且可以按bean名字加載bean

    17、@Required

    檢查bean的屬性setXXX()方法,要求屬性砸死配置階段必須已配置

    18、@Description

    添加bean的文字描述

    19、@EnableAspectConfiguration

    啟動(dòng)AspectJ自動(dòng)配置

    20、EnableLoadTimeWeaving

    啟動(dòng)類加載器動(dòng)態(tài)增強(qiáng)功能,使用instrumentation實(shí)現(xiàn)

    21、@AutoConfigurationPackage

    包含該注解的package會(huì)被AutoConfigurationPackages注冊(cè)

    22、@AutoConfigureBefore

    在指定配置類初始化前加載

    23、@AutoConfigureAfter

    在指定配置類初始化后加載

    24、@AutoConfigureOrder

    指定配置類初始化順序,越小初始化越早

    25、@ModelAttribute

    @ModelAttribute注解可被應(yīng)用在方法和方法參數(shù)上。

    8、Redis的作用

    9、HashMap+list什么時(shí)候觸發(fā)紅黑樹

    1.鏈表的長(zhǎng)度達(dá)到8個(gè)

    2.數(shù)組的長(zhǎng)度達(dá)到64個(gè)

    10、面向?qū)ο蟮睦斫?/h3>

    封裝:

    裝(把代碼裝起來(lái),把一個(gè)類相關(guān)的屬性和方法裝起來(lái),將一些代碼裝到方法中,方便調(diào)用)

    封(信息的隱藏,將某些屬性和方法隱藏起來(lái),提供公開的屬性和方法供調(diào)用者使用)

    繼承:

    子類能夠繼承父類的屬性和方法,實(shí)現(xiàn)了代碼的重用,多個(gè)類具有相同的屬性和方法,提取出來(lái)放到共同的父類提升了代碼重用性、可維護(hù)性和可擴(kuò)展性。

    多態(tài):

    可以將子類的對(duì)象賦值給父類的引用,可以將子類對(duì)象當(dāng)做父類來(lái)使用,從而屏蔽不同對(duì)象之間的

    差異,可以寫出更加通用和靈活的代碼,以適應(yīng)不同的業(yè)務(wù)需求。


    11.Linux的常用命令

    切換目錄
    cd 目錄名
    查看目錄
    ls 目錄名(不寫就是查看當(dāng)前目錄)
    ? ? -l ?詳細(xì)列表
    ? ? -a ?所有文件
    查看目錄詳情
    ll 目錄名

    創(chuàng)建目錄
    mkdir 目錄名
    刪除目錄
    rm ? ?目錄名
    ? ? -r ?遍歷所有子目錄
    ? ? -f ?強(qiáng)制刪除

    創(chuàng)建\打開文件
    vi ?文件名
    三種模式:
    ? ? 命令模式 ? ?能刪除、復(fù)制、粘貼,無(wú)法編輯
    ? ? 輸入模式 ? ?編輯內(nèi)容
    ? ? 命令行模式 ?退出、保存文件
    ? ? 操作方式:默認(rèn)進(jìn)入命令模式,按i進(jìn)入輸入模式,按esc回到命令模式,按:進(jìn)入命令行模式
    命令模式
    ? ? x ? 刪除一個(gè)字符
    ? ? dd ?刪除一行
    ? ? yy ?復(fù)制一行
    ? ? p ? 粘貼
    ? ? u ? 撤銷
    命令行模式
    ? ? wq ?保存退出
    ? ? q ? 退出 (如果有修改,此方式退出會(huì)出錯(cuò))
    ? ? q! ?強(qiáng)制退出

    cat ?顯示整個(gè)文件內(nèi)容(不支持分頁(yè))
    more 分頁(yè)顯示(只能向前分頁(yè)查詢)
    less 分頁(yè)顯示,功能比more強(qiáng)大。(支持前后分頁(yè)查詢)
    ? ? 支持文本查找,/查找內(nèi)容 ?向下查詢 ; ??查找內(nèi)容 ? 向上查找內(nèi)容
    ? ? 退出less模式,點(diǎn)擊q
    ? ??
    ? ? 對(duì)比vi命令:cat、more、less僅僅是用來(lái)進(jìn)行文本閱讀命令,vi用來(lái)進(jìn)行文本編輯的命令。
    ? ??
    ? ? 查詢當(dāng)前文件中是否包含有java單詞,如果包含有Java單詞的所有行全部顯示出來(lái)。
    ? ? cat 文件名 | grep 查詢文字

    find 查找目錄 -name 文件名稱 ?
    find 查找目錄 | grep 名稱 ?

    which 命令名稱

    移動(dòng)文件
    mv 原文件 目標(biāo)文件
    復(fù)制文件
    cp 原文件 目標(biāo)文件

    解壓指令:tar -zxvf ?
    壓縮指令:tar -zcvf?
    -z:表示壓縮和解壓縮的格式為gz壓縮文件(gzip)
    -c::表示壓縮
    -x:表示解壓縮
    -v:表示顯示壓縮或者解壓縮的詳細(xì)過(guò)程。
    -f:表示指定壓縮或者解壓縮的文件,只能放在命令的最后
    tar -zcvf demo.tar.gz demo2.txt?
    tar -cvf 壓縮后的文件名稱 ?待壓縮的文件?
    tar -xvf 待解壓的解壓包名?
    ?

    12、數(shù)據(jù)庫(kù)的優(yōu)化

    1、mysql跟oracle的區(qū)別

    (1) 對(duì)事務(wù)的提交
    ?? ?MySQL默認(rèn)是自動(dòng)提交,而Oracle默認(rèn)不自動(dòng)提交,需要用戶手動(dòng)提交,需要在寫commit;指令或者點(diǎn)擊commit按鈕

    (2) 分頁(yè)查詢
    ?? ?MySQL是直接在SQL語(yǔ)句中寫"select... from ...where...limit? x, y",有l(wèi)imit就可以實(shí)現(xiàn)分頁(yè);而Oracle則是需要用到偽列ROWNUM和嵌套查詢
    (3) 事務(wù)隔離級(jí)別
    ?? ?? MySQL是read commited的隔離級(jí)別,而Oracle是repeatable read的隔離級(jí)別,同時(shí)二者都支持serializable串行化事務(wù)隔離級(jí)別,可以實(shí)現(xiàn)最高級(jí)別的
    ?? ?讀一致性。每個(gè)session提交后其他session才能看到提交的更改。Oracle通過(guò)在undo表空間中構(gòu)造多版本數(shù)據(jù)塊來(lái)實(shí)現(xiàn)讀一致性,每個(gè)session
    ?? ?查詢時(shí),如果對(duì)應(yīng)的數(shù)據(jù)塊發(fā)生變化,Oracle會(huì)在undo表空間中為這個(gè)session構(gòu)造它查詢時(shí)的舊的數(shù)據(jù)塊
    ??? MySQL沒有類似Oracle的構(gòu)造多版本數(shù)據(jù)塊的機(jī)制,只支持read commited的隔離級(jí)別。一個(gè)session讀取數(shù)據(jù)時(shí),其他session不能更改數(shù)據(jù),但
    ?? ?可以在表最后插入數(shù)據(jù)。session更新數(shù)據(jù)時(shí),要加上排它鎖,其他session無(wú)法訪問(wèn)數(shù)據(jù)
    (4) 對(duì)事務(wù)的支持
    ?? ?MySQL在innodb存儲(chǔ)引擎的行級(jí)鎖的情況下才可支持事務(wù),而Oracle則完全支持事務(wù)
    (5) 保存數(shù)據(jù)的持久性
    ?? ?MySQL是在數(shù)據(jù)庫(kù)更新或者重啟,則會(huì)丟失數(shù)據(jù),Oracle把提交的sql操作線寫入了在線聯(lián)機(jī)日志文件中,保持到了磁盤上,可以隨時(shí)恢復(fù)
    (6) 并發(fā)性
    ?? ?MySQL以表級(jí)鎖為主,對(duì)資源鎖定的粒度很大,如果一個(gè)session對(duì)一個(gè)表加鎖時(shí)間過(guò)長(zhǎng),會(huì)讓其他session無(wú)法更新此表中的數(shù)據(jù)。
    ? 雖然InnoDB引擎的表可以用行級(jí)鎖,但這個(gè)行級(jí)鎖的機(jī)制依賴于表的索引,如果表沒有索引,或者sql語(yǔ)句沒有使用索引,那么仍然使用表級(jí)鎖。
    ? Oracle使用行級(jí)鎖,對(duì)資源鎖定的粒度要小很多,只是鎖定sql需要的資源,并且加鎖是在數(shù)據(jù)庫(kù)中的數(shù)據(jù)行上,不依賴與索引。所以O(shè)racle對(duì)并
    ? 發(fā)性的支持要好很多。
    (7) 邏輯備份
    ?? ?MySQL邏輯備份時(shí)要鎖定數(shù)據(jù),才能保證備份的數(shù)據(jù)是一致的,影響業(yè)務(wù)正常的dml使用,Oracle邏輯備份時(shí)不鎖定數(shù)據(jù),且備份的數(shù)據(jù)是一致
    (8) 復(fù)制
    ?? ?MySQL:復(fù)制服務(wù)器配置簡(jiǎn)單,但主庫(kù)出問(wèn)題時(shí),叢庫(kù)有可能丟失一定的數(shù)據(jù)。且需要手工切換叢庫(kù)到主庫(kù)。
    ?? ?Oracle:既有推或拉式的傳統(tǒng)數(shù)據(jù)復(fù)制,也有dataguard的雙機(jī)或多機(jī)容災(zāi)機(jī)制,主庫(kù)出現(xiàn)問(wèn)題是,可以自動(dòng)切換備庫(kù)到主庫(kù),但配置管理較復(fù)雜。
    (9) 性能診斷
    ?? ?MySQL的診斷調(diào)優(yōu)方法較少,主要有慢查詢?nèi)罩尽?br /> ?? ?Oracle有各種成熟的性能診斷調(diào)優(yōu)工具,能實(shí)現(xiàn)很多自動(dòng)分析、診斷功能。比如awr、addm、sqltrace、tkproof等?? ?
    (10)權(quán)限與安全
    ?? ?MySQL的用戶與主機(jī)有關(guān),感覺沒有什么意義,另外更容易被仿冒主機(jī)及ip有可乘之機(jī)。
    ?? ?Oracle的權(quán)限與安全概念比較傳統(tǒng),中規(guī)中矩。
    (11)分區(qū)表和分區(qū)索引
    ?? ?MySQL的分區(qū)表還不太成熟穩(wěn)定。
    ?? ?Oracle的分區(qū)表和分區(qū)索引功能很成熟,可以提高用戶訪問(wèn)db的體驗(yàn)。
    (12)管理工具
    ?? ?MySQL管理工具較少,在linux下的管理工具的安裝有時(shí)要安裝額外的包(phpmyadmin, etc),有一定復(fù)雜性。
    ?? ?Oracle有多種成熟的命令行、圖形界面、web管理工具,還有很多第三方的管理工具,管理極其方便高效。
    (13)最重要的區(qū)別
    ?? ?MySQL是輕量型數(shù)據(jù)庫(kù),并且免費(fèi),沒有服務(wù)恢復(fù)數(shù)據(jù)。
    ?? ?Oracle是重量型數(shù)據(jù)庫(kù),收費(fèi),Oracle公司對(duì)Oracle數(shù)據(jù)庫(kù)有任何服務(wù)。

    (13)?動(dòng)長(zhǎng)的數(shù)據(jù)處理
    ????????? MYSQL有自動(dòng)增長(zhǎng)的數(shù)據(jù)類型,插入記錄時(shí)不用操作此字段,會(huì)自動(dòng)獲得數(shù)據(jù)值。ORACLE沒有自動(dòng)增長(zhǎng)的數(shù)據(jù)類型,需要建立一個(gè)自動(dòng)增長(zhǎng)的序列號(hào),插入記錄時(shí)要把序列號(hào)的下一個(gè)值賦于此字段。
    ? ? ? ? ?CREATE SEQUENCE?序列號(hào)的名稱?(最好是表名+序列號(hào)標(biāo)記) INCREMENT BY 1??????? START??????? WITH??????? 1 MAXVALUE??????? 99999??????? CYCLE??????? NOCACHE;
    ? ? ? ? ? 其中最大的值按字段的長(zhǎng)度來(lái)定,?如果定義的自動(dòng)增長(zhǎng)的序列號(hào)?NUMBER(6) ,?最大值為999999
    ? ? ? ? ? INSERT?語(yǔ)句插入這個(gè)字段值為:?序列號(hào)的名稱.NEXTVAL
    (14)?引號(hào)的處理
    ????????? MYSQL里可以用雙引號(hào)包起字符串,ORACLE里只可以用單引號(hào)包起字符串。在插入和修改字符串前必須做單引號(hào)的替換:把所有出現(xiàn)的一個(gè)單引號(hào)替換成兩個(gè)單引號(hào)。
    (15)??頁(yè)SQL語(yǔ)句的處理
    ????????? MYSQL處理翻頁(yè)的SQL語(yǔ)句比較簡(jiǎn)單,用LIMIT?開始位置,?記錄個(gè)數(shù);PHP里還可以用SEEK定位到結(jié)果集的位置。ORACLE處理翻頁(yè)的SQL語(yǔ)句就比較繁瑣了。每個(gè)結(jié)果集只有一個(gè)ROWNUM字段標(biāo)明它的位置,?并且只能用ROWNUM<100,?不能用ROWNUM>80。

    (16)?長(zhǎng)字符串的處理
    ????
    長(zhǎng)字符串的處理ORACLE也有它特殊的地方。INSERT和UPDATE時(shí)最大可操作的字符串長(zhǎng)度小于等于4000個(gè)單字節(jié),?如果要插入更長(zhǎng)的字符串,?請(qǐng)考慮字段用CLOB類型,方法借用ORACLE里自帶的DBMS_LOB程序包。插入修改記錄前一定要做進(jìn)行非空和長(zhǎng)度判斷,不能為空的字段值和超出長(zhǎng)度字段值都應(yīng)該提出警告,返回上次操作。

    (17)? 日期字段的處理
    ????
    ?????? MYSQL日期字段分DATE和TIME兩種,ORACLE日期字段只有DATE,包含年月日時(shí)分秒信息,用當(dāng)前數(shù)據(jù)庫(kù)的系統(tǒng)時(shí)間為SYSDATE,?精確到秒,或者用字符串轉(zhuǎn)換成日期型函數(shù)TO_DATE(‘<st1:chsdate isrocdate="False" islunardate="False" day="1" month="8" year="2001">2001-08-01</st1:chsdate>’,’YYYY-MM-DD’)年-月-日?24小時(shí):分鐘:秒?的格式Y(jié)YYY-MM-DD HH24:MI:SS TO_DATE()還有很多種日期格式,?可以參看ORACLE DOC.日期型字段轉(zhuǎn)換成字符串函數(shù)TO_CHAR(‘<st1:chsdate isrocdate="False" islunardate="False" day="1" month="8" year="2001">2001-08-01</st1:chsdate>’,’YYYY-MM-DD HH24:MI:SS’)
    ????日期字段的數(shù)學(xué)運(yùn)算公式有很大的不同。MYSQL找到離當(dāng)前時(shí)間7天用?DATE_FIELD_NAME > SUBDATE(NOW(),INTERVAL 7 DAY)ORACLE找到離當(dāng)前時(shí)間7天用 DATE_FIELD_NAME >SYSDATE - 7;
    (18)?空字符的處理
    ?????????
    ? MYSQL的非空字段也有空的內(nèi)容,ORACLE里定義了非空字段就不容許有空的內(nèi)容。按MYSQL的NOT NULL來(lái)定義ORACLE表結(jié)構(gòu),?導(dǎo)數(shù)據(jù)的時(shí)候會(huì)產(chǎn)生錯(cuò)誤。因此導(dǎo)數(shù)據(jù)時(shí)要對(duì)空字符進(jìn)行判斷,如果為NULL或空字符,需要把它改成一個(gè)空格的字符串。
    (19)字符串的模糊比較
    ?????????
    ?MYSQL里用?字段名?like '%字符串%',ORACLE里也可以用?字段名?like '%字符串%'?但這種方法不能使用索引,?速度不快,用字符串比較函數(shù)?instr(字段名,'字符串')>0?會(huì)得到更精確的查找結(jié)果。

    2、mysql的優(yōu)化

    3、ArrayList和LinkedList區(qū)別

    4、CSS有哪些選擇器

    1、標(biāo)簽選擇器 ? ? ? ?以標(biāo)簽名開頭,選擇所有div元素

    2、類選擇器 ? ? ? ?給標(biāo)簽取class名,以點(diǎn)(.)加class名開頭,選擇所有該class名的元素

    3、id選擇器 ? ? ? ?給標(biāo)簽取id名,以#加id名開頭,具有唯一性,選擇”id = ‘wrap’”的元素

    4、子選擇器 ? ? ? ?以>隔開父子級(jí)元素,(模塊名>模塊名,修飾>前模塊內(nèi)的子模塊)

    5、包含選擇器 ? ? ? ?以空格隔開包含關(guān)系的元素,(模塊名模塊名,修飾空格前模塊內(nèi)所有該模塊)

    6、兄弟選擇器 ? ? ? ?以~隔開兄弟關(guān)系的元素(模塊名~模塊名 修飾~前模塊往下的所有兄弟模塊)

    7、相鄰選擇器 ? ? ? ?以+隔開相鄰關(guān)系的元素(模塊名+模塊名 修飾加號(hào)前模塊往下的相鄰的模塊 只一個(gè))

    8、全局選擇器 ? ? ? ?以*開頭(星號(hào)標(biāo)在大括號(hào)前,修飾了包含body所有的標(biāo)簽)

    9、群選擇器 ? ? ? ?以,分隔(逗號(hào)分隔開需要修飾的模塊名)

    10、屬性選擇器 ? ? ? ?[] ([type=text]修飾屬性為type=text的模塊)

    11、偽類選擇器 ? ? ? ?

    ? ? (1) li:first-child{} (修飾第一個(gè)li) ? ? ? ?修飾第一個(gè)li元素

    ? ? (2) li:last-child{} (修飾最后一個(gè)li) ? ? ? ?修飾最后一個(gè)li元素

    ? ? (3) li:nth-child{} (修飾第()個(gè)li) ? ? ? ?修飾第二個(gè)li元素

    ? ? (4) li:not(){} (不修飾第()個(gè)li,括號(hào)里面可以填以上的選擇器)
    ?

    5、Nginx在項(xiàng)目中具體怎么使用

    Nginx作為反向代理服務(wù)器可以對(duì)服務(wù)器的域名和端口進(jìn)行映射,起到的作用有:

  • 隱藏真正服務(wù)器的地址,提高安全性

  • 解決跨域問(wèn)題,將不同的域名和端口映射為相同的

  • 負(fù)載均衡,將大量請(qǐng)求分發(fā)給不同的服務(wù)器處理

  • 動(dòng)靜分離,將對(duì)不同資源的請(qǐng)求分發(fā)給處理各自資源的服務(wù)器等

  • 在SpringBoot項(xiàng)目中添加控制器,端口是默認(rèn)的8080

    1. 將localhost映射到域名上
    2. 將端口8080映射到80端口上(瀏覽器默認(rèn))

    6、SpringBoot有哪些注解

    7、Radis怎么實(shí)現(xiàn)數(shù)據(jù)同步

    Redis的主從同步機(jī)制可以確保redis的master和slave之間的數(shù)據(jù)同步。按照同步內(nèi)容的多少可以分

    為全同步和部分同步;按照同步的時(shí)機(jī)可以分為slave剛啟動(dòng)時(shí)的初始化同步和正常運(yùn)行過(guò)程中的

    數(shù)據(jù)修改同步;本文將對(duì)這兩種機(jī)制的流程進(jìn)行分析。
    全備份過(guò)程中,在slave啟動(dòng)時(shí),會(huì)向其master發(fā)送一條SYNC消息,master收到slave的這條消息

    之后,將可能啟動(dòng)后臺(tái)進(jìn)程進(jìn)行備份,備份完成之后就將備份的數(shù)據(jù)發(fā)送給slave,初始時(shí)的全同

    步機(jī)制是這樣的:
    (1)slave啟動(dòng)后向master發(fā)送同步指令SYNC,master接收到SYNC指令之后將調(diào)用該命令的處

    理函數(shù)syncCommand()進(jìn)行同步處理;
    (2)在函數(shù)syncCommand中,將調(diào)用函數(shù)rdbSaveBackground啟動(dòng)一個(gè)備份進(jìn)程用于數(shù)據(jù)同

    步,如果已經(jīng)有一個(gè)備份進(jìn)程在運(yùn)行了,就不會(huì)再重新啟動(dòng)了。
    (3)備份進(jìn)程將執(zhí)行函數(shù)rdbSave() 完成將redis的全部數(shù)據(jù)保存為rdb文件。
    (4)在redis的時(shí)間事件函數(shù)serverCron(redis的時(shí)間處理函數(shù)是指它會(huì)定時(shí)被redis進(jìn)行操作的函

    數(shù))中,將對(duì)備份后的數(shù)據(jù)進(jìn)行處理,在serverCron函數(shù)中將會(huì)檢查備份進(jìn)程是否已經(jīng)執(zhí)行完畢,

    如果備份進(jìn)程已經(jīng)完成備份,則調(diào)用函數(shù)backgroundSaveDoneHandler完成后續(xù)處理。
    (5)在函數(shù)backgroundSaveDoneHandler中,首先更新master的各種狀態(tài),例如,備份成功還是

    失敗,備份的時(shí)間等等。然后調(diào)用函數(shù)updateSlavesWaitingBgsave,將備份的rdb數(shù)據(jù)發(fā)送給等

    待的slave。
    (6)在函數(shù)updateSlavesWaitingBgsave中,將遍歷所有的等待此次備份的slave,將備份的rdb文

    件發(fā)送給每一個(gè)slave。另外,這里并不是立即就把數(shù)據(jù)發(fā)送過(guò)去,而是將為每個(gè)等待的slave注冊(cè)

    寫事件,并注冊(cè)寫事件的響應(yīng)函數(shù)sendBulkToSlave,即當(dāng)slave對(duì)應(yīng)的socket能夠發(fā)送數(shù)據(jù)時(shí)就調(diào)

    用函數(shù)sendBulkToSlave(),實(shí)際發(fā)送rdb文件的操作都在函數(shù)sendBulkToSlave中完成。
    (7)sendBulkToSlave函數(shù)將把備份的rdb文件發(fā)送給slave。
    ?

    8、RabbitMQ消息隊(duì)列

    11、Vue怎么實(shí)現(xiàn)中英文切換

    一、安裝 vue-i18n插件

    二、main.js文件的配置

    三、定義兩套中英文的 js 文件,并通過(guò) require 的形式引入到 main.js。
    在 main.js 中的代碼中,可以看到,當(dāng) locale 的值為‘zh-CN’時(shí),版本為中文;當(dāng) locale 的值為‘en-

    US’,版本為英文。當(dāng)然你也可以換成 zh 和 en,這個(gè)自定義就好,對(duì)應(yīng)上就可以。
    四、綁定點(diǎn)擊事件,來(lái)修改 locale 的值去調(diào)用對(duì)應(yīng)的語(yǔ)言包實(shí)現(xiàn)語(yǔ)種切換。

    五、vue-i18n 數(shù)據(jù)渲染的模板語(yǔ)法

    我們知道 vue 中對(duì)于文字?jǐn)?shù)據(jù)的渲染,有以‘’{{}}‘’或者 v-text、v-html等的形式,同樣的使用國(guó)際化

    后,依舊可以沿用,但需要一點(diǎn)修改。
    ?

    12、單點(diǎn)登錄的實(shí)現(xiàn)

    采用了 JWT 和 RSA 加密算法,鑒權(quán)服務(wù)生成 token 字符串,網(wǎng)關(guān)服務(wù)從前端的請(qǐng)求頭中獲取并解密 token

    13、項(xiàng)目開發(fā)時(shí)為什么想要用es,怎么用

    1、#和$的作用

    2、在jdbc中是使用什么實(shí)現(xiàn)占位符

    PreparedStatement 接口:
      1.使用該接口操作的 sql 語(yǔ)句會(huì)先預(yù)先編譯成指令在發(fā)送給數(shù)據(jù)庫(kù), 數(shù)據(jù)庫(kù)就執(zhí)行指令即可, 這樣就提高了一定速度,
      2.該接口可以避開 sql 需要使用字符串拼接的方式, 從而解決 sql 注入的安全風(fēng)險(xiǎn),
      而是使用占位符 (?) 來(lái)代替原來(lái)的字符串拼接.
    ?

    3、vue的生命周期

    5、SpringMVC的執(zhí)行流程,三層的注解

    6、mybatis常用注解

    @Insert : 實(shí)現(xiàn)新增
    @Update: 實(shí)現(xiàn)更新
    @Delete:實(shí)現(xiàn)刪除
    @Select:實(shí)現(xiàn)查詢
    @Result:
    ? ? ? ? ?實(shí)現(xiàn)結(jié)果集封裝
    @Results:
    ? ? ? ? ?可以與@Result 一起使用,封裝多個(gè)結(jié)果集
    @ResultMap:
    ? ? ? ? ?實(shí)現(xiàn)引用@Results 定義的封裝
    @One:
    ? ? ? ? ?實(shí)現(xiàn)一對(duì)一結(jié)果集封裝
    @Many:
    ? ? 實(shí)現(xiàn)一對(duì)多結(jié)果集封裝

    @CacheNamespace:
    ? ? ? ? ?實(shí)現(xiàn)注解二級(jí)緩存的使用
    復(fù)雜關(guān)系映射的注解說(shuō)明
    @Results 注解
    ? ? 代替的是標(biāo)簽<resultMap>
    @Resutl 注解
    ? ? 代替了 <id> 標(biāo)簽和<result> 標(biāo)簽
    @One 注解(一對(duì)一)
    ? ? 代替了<assocation> 標(biāo)簽,是多表查詢的關(guān)鍵,在注解中用來(lái)指定子查詢返回單一對(duì)象
    @Many 注解(多對(duì)一)
    ? ? 代替了<assocation> 標(biāo)簽,是多表查詢的關(guān)鍵,在注解中用來(lái)指定子查詢返回單一對(duì)象

    Redis的執(zhí)行原理
    redis服務(wù)器對(duì)命令的處理都是單線程的,但是I/O層面卻面向多個(gè)客戶端并發(fā)地提供服務(wù),并發(fā)到

    內(nèi)部單線程的轉(zhuǎn)化通過(guò)多路復(fù)用框架來(lái)實(shí)現(xiàn)
    首先從多路服用框架(epoll、evport、kqueue)中select出已經(jīng)ready的文件描述符

    (fileDescriptor)
    ready的標(biāo)準(zhǔn)是已有數(shù)據(jù)到達(dá)內(nèi)核(kernel)、已準(zhǔn)備好寫入數(shù)據(jù)
    對(duì)于上一步已經(jīng)ready的fd,redis會(huì)分別對(duì)每個(gè)fd上已ready的事件進(jìn)行處理,處理完相同fd上的所

    有事件后,再處理下一個(gè)ready的fd。有3中事件類型
    acceptTcpHandler:連接請(qǐng)求事件
    readQueryFromClient:客戶端的請(qǐng)求命令事件
    sendReplyToClient:將暫存的執(zhí)行結(jié)果寫回客戶端
    對(duì)來(lái)自客戶端的命令執(zhí)行結(jié)束后,接下來(lái)處理定時(shí)任務(wù)(TimeEvent)
    aeApiPoll的等待時(shí)間取決于定時(shí)任務(wù)處理(TimeEvent)邏輯
    本次主循環(huán)完畢,進(jìn)入下一次主循環(huán)的beforeSleep邏輯,后者負(fù)責(zé)處理數(shù)據(jù)過(guò)期、增量持久化的文件寫入等任務(wù)
    ?

    7、消息隊(duì)列的作用

    8、常見的設(shè)計(jì)模式

    9、Redis執(zhí)行原理

    11、三個(gè)集合的特性

    12、創(chuàng)建線程的方式

    13、線程中常用的方法

    14、Spring的事務(wù)

    Spring中隔離級(jí)別的配置

    @Transactional注解的屬性isolation

    值:

    Isolation.DEFAULT 默認(rèn),和數(shù)據(jù)庫(kù)隔離級(jí)別一致

    Isolation.Readuncommitted 讀未提交

    Isolation.Readcommitted 讀已提交

    Isolation.Repeatableread 可重復(fù)讀

    Isolation.Serializable 串行化

    1、索引的作用

    加快查詢速度,用戶查詢時(shí),先找索引,通過(guò)索引找到實(shí)際數(shù)據(jù)的位置,再直接定位到實(shí)際數(shù)據(jù)上。

    ????????優(yōu)點(diǎn):

    ????????極大提高查詢速度

    ????????缺點(diǎn):

    ????????1. 也是數(shù)據(jù),需要占存儲(chǔ)空間
    ????????2. 降低增刪改的速度
    ????????3. 創(chuàng)建索引也需要一定的時(shí)間

    2、sql語(yǔ)句的優(yōu)化

    3、Linux常用命令

    4、控制反轉(zhuǎn)和注入方式

    IOC(Inverse of Control)控制反轉(zhuǎn)是一種程序設(shè)計(jì)思想。

    控制是什么?

    JavaBean(Java對(duì)象)的創(chuàng)建和管理

    反轉(zhuǎn)是什么?

    一般情況下對(duì)象的創(chuàng)建和管理由開發(fā)者控制,反轉(zhuǎn)是把對(duì)象的創(chuàng)建和管理交給容器完成,然后再交給開發(fā)者。

    注入屬性的幾種方式:

    1) set方法注入

    2) 構(gòu)造方法注入

    3) 自動(dòng)裝配

    類型:

    • no 默認(rèn),不自動(dòng)裝配

    • byType 通過(guò)類型查找對(duì)象,如果相同類型的對(duì)象有多個(gè),會(huì)出現(xiàn)異常

    • byName 通過(guò)名稱查找對(duì)象,如果找不到對(duì)應(yīng)的id或name的對(duì)象,會(huì)出現(xiàn)空指針異常

    • constructor 通過(guò)構(gòu)造方法裝配

    5、linux查看日志文件

    ?tail: ?

    ? ? ? ?-n ?是顯示行號(hào);相當(dāng)于nl命令;例子如下:

    ? ? ? ? ? ??tail -100f test.log ? ? ?實(shí)時(shí)監(jiān)控100行日志

    ? ? ? ? ? ? tail? -n? 10? test.log ? 查詢?nèi)罩疚膊孔詈?0行的日志;

    ? ? ? ? ? ? tail -n +10 test.log??? 查詢10行之后的所有日志;

    ? ??head:??

    ? ? ? ? 跟tail是相反的,tail是看后多少行日志;例子如下:

    ? ? ? ? ? ? head -n 10? test.log ? 查詢?nèi)罩疚募械念^10行日志;

    ? ? ? ? ? ? head -n -10? test.log ? 查詢?nèi)罩疚募俗詈?0行的其他所有日志;

    ? ??cat:?

    ? ? ? ? tac是倒序查看,是cat單詞反寫;例子如下:

    ? ??? ? ? ? cat -n test.log |grep "debug" ? 查詢關(guān)鍵字的日志

    6、為什么要用FastDFS?相比其他圖片上傳有什么優(yōu)勢(shì)

    FastDFS是阿里巴巴開源的一套輕量級(jí),天生就是分布式設(shè)計(jì)的文件系統(tǒng),FastDFS的源代碼由C語(yǔ)言開發(fā),目前可運(yùn)行在Linux,FreeBSD,Unix等類操作系統(tǒng)上,FastDFS解決了大數(shù)據(jù)量文件存儲(chǔ)和讀寫分離,備份容錯(cuò),負(fù)載均衡,動(dòng)態(tài)擴(kuò)容等問(wèn)題,這也就是原作者所描述的高性能和高擴(kuò)展性的文件系統(tǒng)。適合存儲(chǔ)4KB~500MB之間的小文件,如圖片網(wǎng)站、短視頻網(wǎng)站、文檔、app下載站等。

    優(yōu)勢(shì)

  • 只能通過(guò)專用的API訪問(wèn),不支持posix,降低了系統(tǒng)的復(fù)雜度,處理效率高
  • 支持在線擴(kuò)容,增強(qiáng)系統(tǒng)的可擴(kuò)展性
  • 支持軟RAID,增強(qiáng)系統(tǒng)的并發(fā)處理能力及數(shù)據(jù)容錯(cuò)能力。Storage是按照分組來(lái)存儲(chǔ)文件,同組內(nèi)的服務(wù)器上存儲(chǔ)相同的文件,不同組存儲(chǔ)不同的文件。Storage-server之間不會(huì)互相通信。
  • 主備Tracker,增強(qiáng)系統(tǒng)的可用性。
  • 支持主從文件,支持自定義擴(kuò)展名。
  • 文件存儲(chǔ)不分塊,上傳的文件和os文件系統(tǒng)中的文件一一對(duì)應(yīng)。
  • 相同內(nèi)容的文件只存儲(chǔ)一份,節(jié)約磁盤存儲(chǔ)空間。對(duì)于上傳相同的文件會(huì)使用散列方式處理文件內(nèi)容,假如是一致就不會(huì)存儲(chǔ)后上傳的文件,只是把原來(lái)上傳的文件在Storage中存儲(chǔ)的id和URL返回給客戶端。
  • 7、什么是線程

    線程是CPU資源分配的最小單元

    進(jìn)程包含一個(gè)或多個(gè)線程

    線程需要的資源更少,可以看做是一種輕量級(jí)的進(jìn)程

    線程會(huì)共享進(jìn)程中的內(nèi)存,線程也有獨(dú)立的空間(棧、程序計(jì)數(shù)器)

    線程之間可以相互通信

    8、創(chuàng)建線程的幾種方式

    9、sleep和wait的區(qū)別

  • 調(diào)用對(duì)象不同

    wait() 由鎖對(duì)象調(diào)用

    sleep() 由線程調(diào)用

  • 鎖使用不同

    執(zhí)行wait后,自動(dòng)釋放鎖

    執(zhí)行sleep后,不會(huì)釋放鎖

  • 喚醒機(jī)制不同

    執(zhí)行wait后,可以被通知喚醒

    執(zhí)行sleep后,只能等待時(shí)間結(jié)束后,自動(dòng)喚醒

  • 10、深拷貝和淺拷貝的區(qū)別

    深拷貝復(fù)制出來(lái)的對(duì)象,基本類型和引用類型的屬性,都完全是不同的對(duì)象

    淺拷貝復(fù)制出來(lái)的對(duì)象,能復(fù)制所有基本類型以及String的屬性,對(duì)于引用類型的屬性只能復(fù)制地址

    筆試題

    1、方法中定義的臨時(shí)變量在方法調(diào)用完成之后就不存在了,不需要用修飾符定義

    2、沒問(wèn)題(不知道)

    3、不可以直接調(diào)用toString方法

    4、在接口中只能定義常量,不能為常量賦值

    5、冒泡排序

    for(int i = 0;i < array.length - 1;i++){for(int j = 0;j < array.length - 1 - i;j++){if(array[j] > array[j+1]){int temp = array[j];array[j] = array[j+1];array[j+1] = temp;}} }

    總結(jié)

    以上是生活随笔為你收集整理的收集的面试题 一的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。