這幾天22年考研初試成績即將公布,我們的考生下一步即將面臨的就是復試,我 們知道復試中面試一項是起著最最至關重要的作用,那么,在復試面試時大家應該注意哪些 事項呢?總結多年來學員的經驗,提供以下高頻出現的問題,
還為大家準備了復試相關視頻,如下圖所示,看第三張圖,回復【考研復試】即可拿去學習了,

1.談談你為什么要考計算機/軟工專業研究生?
答:我大四在北京實習期間,進入的是一家大資料公司,接觸的就是大資料、云計算,由于我所在組負責開發的就是政府專案,最看重的就是安全和穩定,因此我對大資料、云計算和資訊安全產生了極大的興趣,但是因為沒有系統學習這方面的渠道和方法,無法在這方面更進一步,為了能夠系統的學習這一方面,我選擇了繼續攻讀研究生,

2.如果你能順利的考入我校研究生,你對今后2年/3年的學習規劃是什么?
答:我將會專注于在這一領域的學習與研究,在大資料、云計算和資訊安全方面建立自己的知識結構體系,我目前對于大資料、云計算和資訊安全的理解不全面不深刻,對于這方面的應用了解的不多,為了彌足自己的不足,在研究生期間,我將會努力閱讀國內外的先進論文和了解該領域在我們日常生活中的最新應用,希望在研究生畢業之后,為自己在這一領域的未來職業生涯打下堅實的基礎,如果能夠獲得攻讀博士的機會,我更愿意更進一步,繼續學習,
【鏡像問題】如果你不幸被刷,你會怎么辦?你愿意來讀非全日制嗎?
答:我選擇考取研究生,就是為了對大資料、云計算和資訊安全有一個自己的知識體系結構,如果讀非全日制的話,可能自己沒有那么多的時間和熱情安心學習和研究,所以本人不太愿意讀非全日制,
【陷阱問題】如果我們錄取你,你一定會來嗎?
答:貴校有的雄厚的師資力量和良好的科研環境,校園環境優美,學風濃厚,而且海洋對我也具有莫大的吸引力,貴校的研究方向和我的個人興趣十分契合,如果貴校錄取我,我愿意來這里繼續學習,
3.你為什么選擇我們學校?/為什么選擇這座城市(例如深圳)?
答:貴校有的雄厚的師資力量和良好的科研環境,校園環境優美,學風濃厚,而且海洋對我也具有莫大的吸引力,貴校的研究方向和我的個人興趣十分契合,上海是我從小到大一直想要來的城市,這里有一流的教育醫療體系,相對公平的競爭環境,是中國的金融中心,這些都對我有著很大的吸引,
4.你是否有過專案經驗?
答:我在本科期間做過xx系統等,在作業期間主要做的是xx系統,涉及C語言、Java語言、Groovy語言和C++語言,涉及C/S架構和B/S架構,在每個專案中,我都識訓頗豐,
如果有專案經驗,你在該專案中所擔當的角色、本人完成的作業、該專案的亮點是什么?
答:根據自己的實際情況回答,
5.你在過去的編程中,遇到的最困難的事是什么?你是如何解決的?
答:遇到最大的困難就是所做專案中涉及到新的知識和自己從未接觸過的新技術,當遇到這類困難時,我首先閱讀官方檔案或者請教有經驗的前輩,對所使用的技術有一個大概的了解,然后在根據自己的需求研究這類知識的具體使用,并自己著手寫一些demo加深理解,在徹底掌握該類技術的使用后,再使用到專案中,
6.你是否有個人技術博客?
答:有CSDN和博客園的博客,在GitHub上也有自己的小demo,在作業期間會在博客園寫一些對技術使用的心得,一般都是在這兩個技術論壇閱讀別人寫的一些技術理解,
7.本科畢設做的怎么樣了?請詳細說明,
答:根據自己的實際情況回答,
8.你學習過什么編程語言?你為什么學習該編程語言?
答:學過C語言,C++語言,Java語言和Groovy語言,HTML,JavaScript等,在本科期間通過C語言入門,然后通過C++語言學習面向物件語言的特點,最后以C語言和C++語言的了解,學習Java語言,用于作業,在作業中,由于所使用的專案插件是用Groovy語言寫的,為了滿足羨慕需要,所以學習了Groovy語言,
9.簡述你學習過的框架技術,(SSM,微服務框架,MVC)
答:SSM:
Spring
Spring就像是整個專案中裝配bean的大工廠,在組態檔中可以指定使用特定的引數去呼叫物體類的構造方法來實體化物件,Spring的核心思想是IoC(控制反轉),即不再需要程式員去顯式地`new`一個物件,而是讓Spring框架幫你來完成這一切,
SpringMVC
SpringMVC在專案中攔截用戶請求,它的核心Servlet即DispatcherServlet承擔中介或是前臺這樣的職責,將用戶請求通過HandlerMapping去匹配Controller,Controller就是具體對應請求所執行的操作,SpringMVC相當于SSH框架中struts,
mybatis
mybatis是對jdbc的封裝,它讓資料庫底層操作變的透明,mybatis的操作都是圍繞一個sqlSessionFactory實體展開的,mybatis通過組態檔關聯到各物體類的Mapper檔案,Mapper檔案中配置了每個類對資料庫所需進行的sql陳述句映射,在每次與資料庫互動時,通過sqlSessionFactory拿到一個sqlSession,再執行sql命令,
微服務框架:
MSF4J 是 Java 輕量級高性能的 WSO2 微服務框架,微服務架構是一種將單應用程式作為一套小型服務開發的方法,每種應用程式都在其自己的行程中運行,并與輕量級機制(通常是HTTP資源的API)進行通信,這些服務是圍繞業務功能構建的,可以通過全自動部署機制進行獨立部署,這些服務的集中化管理已經是最少的,它們可以用不同的編程語言撰寫,并使用不同的資料存盤技術,
10.你本科成績怎么樣?本科排名怎么樣?
答:我的本科采用五分制績點計算演算法,我的GPA是xx,對應百分制是xx分,本科排名在我所學對應專業排名前12%,
11.你是否有過競賽獲獎經歷?
答:根據自己的實際情況回答,
12.你本科學的最好的一門課是什么?說一說你對這個課程一些自己的理解,
答:學得較好的課程是資料結構,
首先為什么要開發各種各樣的軟體,目的只有一個:就是利用計算機來為人們處理各種資料并以一定的形式展現出來供用戶使用,隨著計算機的應用范圍的不斷擴大,計算機所需要處理的資料越來越復雜,并且規模越來越大,計算機所處理的資料已不再是單純的數值資料,而更多的是非數值資料,
另一方面,現實中需要處理的資料并不是雜亂無章的,它們一定有內在的各種聯系,但這需要演算法設計人員去總結、歸納、建模、然后抽象出一個具體的模型來表示—,我們將這個模型成為資料的邏輯結構,然后聰明的設計師再圍繞這個創建的邏輯結構總結設計出一套處理方法,這樣,資料有了,模型有了,演算法有了,在理論上問題就可以解決了,剩下的就應該交給計算機去做了,但以上都是基于邏輯上的設計,計算機才不懂這些,所以接下來還需要對應的存盤結構來將要處理的資料先存盤到計算機中,再將那些處理邏輯(演算法)用相應的代碼實作,計算機才能對資料進行有效的處理,
13.你今后想從事什么方向的學習?為什么?
【近似問題】你怎么看待你今后研究的方向與發展前途?
【近似問題】你想研究的方向與你本科所學有什么相關嗎?
【近似問題】你在該方向上做過什么作業?
答:今后想從事大資料,云計算和資訊安全這一方向的學習,我大四在北京實習期間,進入的是一家大資料公司,接觸的就是大資料、云計算,由于我所在組負責開發的就是政府專案,最看重的就是安全和穩定,因此我對大資料、云計算和資訊安全產生了極大的興趣,
【近似問題】你認為計算機/軟工方向在未來5年發展最好的領域是什么?
(1)網路化趨勢,網路化是資訊時代的基本特征,軟體產業的發展也由“以機器為中心”向“以網路為中心”的變革,隨著泛在網、物聯網的發展及“云計算”、“移動計算”等技術的成熟,軟體網路化成為新趨勢,網路化軟體產品分發迅速、使用便捷、收費靈活、防盜版等特點正改變著軟體的模式,
(2)服務化趨勢,軟體服務化的一種主流模式就是元計算,它是指在高層系統軟體控制下各種服務器形成一個具有計算資料處理能力的服務“環境”,被看作是下一代Internet技術發展的目標,推進了軟體系統的發展趨勢開始從集中的主機環境轉變為客戶網路結構,在此趨勢下,軟體服務所提供給客戶的體驗成為市場競爭的關鍵性因素,
(3)智能化趨勢,嵌入式系統的方興未艾為軟體產業智能化發展帶來巨大機會,隨之智能化的研發和應用,提高了資源配置效率,提高了資訊系統的自適能力,擴大了意識思維的領域,多媒體、數字化等資訊技術促進了計算機網、通信網和電視網日趨融合,也推進了軟體開發語言高級化、發工集成化的發展,
(4)開放化趨勢,開放化的主要表現是軟體產品標準化和軟體源代碼開放,開放源代碼軟體,降低了軟體技術和知識產權壁壘,為打破作業系統領域的壟斷創造了條件,Linux就是一個開放式的作業系統,具有代碼開放、分布式開發環境的特點,以開放源代碼軟體為基礎發展軟體產業是推動我國軟體產業開放化的重要途徑,
(5)融合化趨勢,傳統產業的改造升級將推動應用軟體需求的增長,傳統意義上的機械化、電氣化、自動化等“硬裝備”轉化為數字化、智能化、網路化的“軟裝備”的核心技術,促進了軟體產業與其他產業之間的融合不斷深化,軟體企業適應市場需要不斷拓展并升級其產品領域、推進產業鏈和集群式發展,以形成行業競爭的新優勢,
【近似問題】計算機軟體技術發展現狀?
(1)國外軟體技術發展現狀,在目前全球軟體產業發展領域,美國無疑是發展最為成熟的,近年來,印度、中國軟體產業的發展也比較迅速,世界各國對計算機軟體技術發展都十分重視,并出臺了一系列國家級別的軟體開發的政策,并投資了相應的人力物力,大多數國家把開發重點優先放在了對基礎軟體的研發以及計算機軟體開發方法上,當前備受國際關注的IT前沿技術與關鍵技術主要有:大規模網路體系;高端計算(虛擬計算、網格計算、云計算、泛在計算);系統芯片(集成芯片);軟體工程;知識處理(海量資料庫和資料挖掘);高效系統;高可靠軟體和系統;移動和無線通信;開放原始碼;面向服務的體系結構等,
(2)國內軟體技術發展現狀,我國軟體產業自上世紀70年代中期起步,隨著改革開放40年來的發展,我國軟體業從無到有、從小到大,現在己發展成為國家戰略性先導產業,2000年中國軟體產業規模達到5834億元,到2009年達到9513億元 ,2010年超過1萬億元,在全國范圍內初步形成了北京、上海、江蘇、杭州、濟南等國家軟體產業基地,我國軟體產業在規模高速增長的同時,產業結構不斷完善,逐步形成了軟體科研和技術、基礎軟體和應用軟體、軟體應用、軟體人才培養全面覆寫、產業鏈配置相對齊全、完整的產業結構體系,目前,我國軟體產業發展正處于良性發展階段,軟體產業的規模、效益和出口額不斷擴大,軟體產品結構和層次不斷優化,從業人員素質和水平不斷提升,
14.比較熟悉的開發工具是什么?
答:Eclipse,WebStorm,IDEA,Navicat,Postman等,
15.如果和老師發生矛盾怎么解決,你的研究興趣和老師的要求方向沖突怎么辦?
答:找出矛盾的根源,根據矛盾對癥下藥,如果是學術上的矛盾,我可能尋找多種方法和證據,以理說服老師,若無確切的結論,暫且以老師的建議為主,打好基本功,若是生活上的矛盾,我將會做好自己的生活規劃,努力克服不好的習慣,第二個問題我覺得興趣都是培養出來的,如果自己對該領域一點都不了解,何來興趣可談,因此,我將會努力學習和了解該方向,說不定發現了自己不知道的興趣呢,
16.準備考研的程序中,你認為在哪個方面提升最大?
答:忍受寂寞和堅持這個方面提升最大吧,首先,在考研期間,都是自己一個人看書生活,這讓我自己真的獲益匪淺,在忍受孤獨方面提高了很多,以往自己對長時間的寂寞是忍受不了的,但是考研改變了我對這方面的看法,第二就是堅持,考研打得是持久戰,不知道結果是怎么樣,唯有堅持下來,才能看到勝利的曙光,
17.你認為研究生相對于本科會有什么改變?
答:首先,個人素養方面的提升,畢竟一篇學位論文不是輕輕松松就能寫出來的,需要各方面知識的積累和能力的提升,在寫作程序中,還會遇到很多困難,戰勝困難的經歷也會讓自己受益終生,第二,學習的專業更深并且研究方向可能更窄一點,所以需要閱讀大量書籍和論文,在學習和生活中比本科要更自律,
18.你想出去實習找作業,但實驗室不允許,你會怎么做?
答:我覺得既然選擇讀研,那就努力做一名研究生該做的事情,做好自己當前階段最主要的事情才是對自己的人生最大的尊重,
19.你認為一個計算機/軟工專業的學生應該具備哪些能力?
答:團隊精神和溝通能力:計算機專業的學生開發一個大型專案的時候往往是幾個人小組合作開發,如果沒有團隊精神和溝通能力,專案往往完成的不盡人意,
學習和總結能力:計算機專業的學生只有在不斷犯錯誤的程序中才能成長,所以一定要有學習和總結能力,錯誤盡量不犯第二次,
抗壓能力:開發專案時,往往時間緊任務重,在開發程序中還往往遇到各種bug和問題,因此需要一定的抗壓能力,
動手能力:計算機是一門實踐性和應用性較強的學科,學生不僅需要扎實掌握理論知識,同時還需要學會如何將其運用到實踐操作中去,并能夠運用所學知識解決實際問題,使得自身的能力不斷增強,
創新能力:社會的快速發展離不開計算機技術的提升,因此,高校學生還需要具備較強的創新能力,
資訊獲取能力:只有對時代資訊保持敏銳的察覺力,才能根據科技和社會發展的大方向進行相應的創新,在學習和作業取得更多的成就,同時也會社會的進步貢獻自身的力量,
20.【陷阱問題】你有沒有讀博士的打算?
答:我家里人是支持我讀博的,如果有機會,我愿意繼續深造,
21.你認為你最大的優勢/缺點是什么?
答:優勢:有嚴謹、踏實的的作業態度, 善于溝通交流,做事認真,抗壓能力強,良好的專業基礎和專業動手能力,較強的自學和技術應用能力,有較強的執行力和紀律性,
缺點:有的時候遇到困難想要自己獨立解決,會浪費大量時間
22.【作業】聊聊你的作業經歷
答:根據自己的實際情況回答,
23.【作業】為什么放棄作業考研?為什么不考慮換作業而是選擇考研?
答:根據自己的實際情況回答,
24.【前沿知識】你對人工智能有什么了解?強人工智能可能實作嗎?
答:人工智能是計算機科學的一個分支,它企圖了解智能的實質,并生產出一種新的能以人類智能相似的方式做出反應的智能機器,該領域的研究包括機器人、語言識別、影像識別、自然語言處理和專家系統等,人工智能從誕生以來,理論和技術日益成熟,應用領域也不斷擴大,可以設想,未來人工智能帶來的科技產品,將會是人類智慧的“容器”,人工智能可以對人的意識、思維的資訊程序的模擬,人工智能不是人的智能,但能像人那樣思考、也可能超過人的智能,
強人工智能:人類級別的人工智能,強人工智能是指在各方面都能和人類比肩的人工智能,人類能干的腦力活它都能干,創造強人工智能比創造弱人工智能難得多,我們現在還做不到,Linda Gottfredson教授把智能定義為“一種寬泛的心理能力,能夠進行思考、計劃、解決問題、抽象思維、理解復雜理念、快速學習和從經驗中學習等操作,”強人工智能在進行這些操作時應該和人類一樣得心應手,
弱人工智能:弱人工智能是擅長于單個方面的人工智能,比如有能戰勝象棋世界冠軍的人工智能,但是它只會下象棋,你要問它怎樣更好地在硬碟上儲存資料,它就不知道怎么回答你了,
每一個弱人工智能的創新,都在給通往強人工智能和超人工智能的旅途添磚加瓦,
25.【前沿知識】什么是機器學習?講講具體的演算法,
答:傳統上如果我們想讓計算機作業,我們給它一串指令,然后它遵照這個指令一步步執行下去,有因有果,非常明確,但這樣的方式在機器學習中行不通,機器學習根本不接受你輸入的指令,相反,它接受你輸入的資料! 也就是說,機器學習是一種讓計算機利用資料而不是指令來進行各種作業的方法,
機器學習是一種能夠賦予機器學習的能力以此讓它完成直接編程無法完成的功能的方法,但從實踐的意義上來說,機器學習是一種通過利用資料,訓練出模型,然后使用模型預測的一種方法,
監督學習演算法:線性回歸,邏輯回歸,神經網路,SVM
無監督學習演算法:聚類演算法,降維演算法
特殊演算法:推薦演算法
【近似問題】你認為你本科學的數學有哪些會用到機器學習中?
概率論,高等數學,線性代數
26.【前沿知識】什么是大資料?你接觸到的最大的資料有多大?
答:大資料(big data),指無法在一定時間范圍內用常規軟體工具進行捕捉、管理和處理的資料集合,是需要新處理模式才能具有更強的決策力、洞察發現力和流程優化能力的海量、高增長率和多樣化的資訊資產, 大資料是一個籠統的概念暫未發現和準確的定義,
大資料的核心是利用資料的價值,機器學習是利用資料價值的關鍵技術,對于大資料而言,機器學習是不可或缺的,相反,對于機器學習而言,越多的資料會越 可能提升模型的精確性,同時,復雜的機器學習演算法的計算時間也迫切需要分布式計算與記憶體計算這樣的關鍵技術,因此,機器學習的興盛也離不開大資料的幫助, 大資料與機器學習兩者是互相促進,相依相存的關系,
27.【前沿知識】什么是資料挖掘?
答:1、什么是資料挖掘/分析
簡單地說就是,在大型資料庫中,自動發現有用資訊的程序,加以分析,其中資料庫中的知識發現是重要的環節,也就是人們說的KDD,knowledge discovery in database,2、KDD是什么其實就是一個資料處理的程序,從輸入資料開始,進行預處理作業,包括特征選擇,維歸約規范化和選擇資料子集等等,隨后進行分析和挖掘,再經過處理,例如模式過濾,可視化,模式表示等,最后形成可用資訊的程序,
3、資料挖掘要解決什么問題
具體的講主要是以下幾個,首先是資料的可伸縮性,提高或改變資料的可伸縮度,其次是解決資料高維性的問題,處理異種資料和復雜資料,解決資料所有權與分布問題,對非傳統的分析進行合理處理,
4、資料挖掘的任務
其實主要包括四個大塊,可以獨立運行,也可以聯合操作,分別是聚類分析,預測建模,關聯分析,例外檢測,聚類分析實用的技術包括K均值,凝聚層次聚類,dbscan,簇評估等,主要目的是通過基于原型,密度,圖等的聚類,發現其間的關系,預測建模則更多的是一種可視化角度分析方法,利用分類,回歸等方法,來建立模型解決問題,關聯分析顧名思義,更多強調資料中的特征強關聯,例如說過一萬次的啤酒與尿布等,例外檢驗則主要是識別不同于其他資料的具有顯著特征值的資料,
5、基礎知識有什么
想學習資料挖掘,幾個基礎知識是必備,首先是線性代數,包括向量,矩陣等,否則你根本不會是用科學工具,其次是維歸約,包括PCA,SVD等技術的使用,還有概率統計,回歸方程,優化,也是必備知識,暫時寫這么多,有時間再多說些,
28.【前沿知識】大資料和機器學習之前有什么聯系?
答:機器學習與大資料緊密聯系,但是,必須清醒的認識到,大資料并不等同于機器學習,同理,機器學習也不等同于大資料,大資料中包含有分布式計算,記憶體資料庫,多維分析等等多種技術,單從分析方法來看,大資料也包含以下四種分析方法:
1.大資料,小分析:即資料倉庫領域的OLAP分析思路,也就是多維分析思想,
2.大資料,大分析:這個代表的就是資料挖掘與機器學習分析法,
3.流式分析:這個主要指的是事件驅動架構,
4.查詢分析:經典代表是NoSQL資料庫,
也就是說,機器學習僅僅是大資料分析中的一種而已,
29.【前沿知識】什么是云計算?
答:隨著并行計算、分布計算、網格計算、虛擬化、SOA、容錯技術、網路帶寬等關鍵技術日趨成熟,通過網路訪問非本地的計算服務(包括資料處理、存盤和資訊服務等)的條件越來越成熟,多種技術的融合就產生了“云計算”,之所以稱之為“云”,是因為計算設施不在本地而是在網路中,用戶不需要關心它們所處的具體位置,但它確實存在在某個地方,
云計算不是一種新技術,而是一種在并行計算、分布計算、網格計算、虛擬化、SOA、容錯技術、網路帶寬等關鍵技術日趨成熟而催生出的新的商業服務模式,它通過大量廉價硬體軟體以集群方式來降低成本換取使用量以達到營利的目的,
通過網路將龐大的計算處理程式自動分拆成無數個較小的子程式,再由多部服務器所組成的龐大系統搜索、計算分析之后將處理結果回傳給用戶,通過這項技術,遠程的服務供應商可以在數秒之內,達成處理數以千萬計甚至億計的資訊,達到和“超級電腦”同樣強大性能的網路服務,
30.【前沿知識】什么是深度學習?
答:深度學習(Deep learning)是通過構建具有很多隱層的機器學習模型和海量的訓練資料,來學習更有用的特征,從而最終提升分類或預測的準確性,因此,“深度模型”是手段,“特征學習”是目的,區別于傳統的淺層學習,深度學習的不同在于:
1)強調了模型結構的深度,通常有5層、6層,甚至10多層的隱層節點;
2)明確突出了特征學習的重要性,也就是說,通過逐層特征變換,將樣本在原空間的特征表示變換到一個新特征空間,從而使分類或預測更加容易,與人工規則構造特征的方法相比,利用大資料來學習特征,更能夠刻畫資料的豐富內在資訊,
常見的深度學習演算法包括:
受限波爾茲曼機(Restricted Boltzmann Machine, RBN)
深度置信網路(Deep Belief Networks,DBN)
卷積神經網路(Convolutional Neural Network, CNN)
堆疊式自動編碼器(Stacked Auto-encoders,SAE),
31.【前沿知識】 什么資訊安全?
答:資訊安全主要包括以下五方面的內容,即需保證資訊的保密性、真實性、完整性、未授權拷貝和所寄生系統的安全性,資訊安全本身包括的范圍很大,其中包括如何防范商業企業機密泄露、防范青少年對不良資訊的瀏覽、個人資訊的泄露等,網路環境下的資訊安全體系是保證資訊安全的關鍵,包括計算機安全作業系統、各種安全協議、安全機制(數字簽名、訊息認證、資料加密等),直至安全系統,如UniNAC、DLP等,只要存在安全漏洞便可以威脅全域安全,資訊安全是指資訊系統(包括硬體、軟體、資料、人、物理環境及其基礎設施)受到保護,不受偶然的或者惡意的原因而遭到破壞、更改、泄露,系統連續可靠正常地運行,資訊服務不中斷,最終實作業務連續性,
資訊安全學科可分為狹義安全與廣義安全兩個層次,狹義的安全是建立在以密碼論為基礎的計算機安全領域,早期中國資訊安全專業通常以此為基準,輔以計算機技術、通信網路技術與編程等方面的內容;廣義的資訊安全是一門綜合性學科,從傳統的計算機安全到資訊安全,不但是名稱的變更也是對安全發展的延伸,安全不再是單純的技術問題,而是將管理、技術、法律等問題相結合的產物,本專業培養能夠從事計算機、通信、電子商務、電子政務、電子金融等領域的資訊安全高級專門人才,
32.什么是多執行緒?反射?NIO?集合?
答:多執行緒:多執行緒就是指一個行程中同時有多個執行路徑(執行緒)正在執行,在一個程式中,有很多的操作是非常耗時的,如資料庫讀寫操作,IO操作等,如果使用單執行緒,那么程式就必須等待這些操作執行完成之后才能執行其他操作,使用多執行緒,可以在將耗時任務放在后臺繼續執行的同時,同時執行其他操作,
反射:JAVA中的反射是運行中的程式檢查自己和軟體運行環境的能力,它可以根據它發現的進行改變,通俗的講就是反射可以在運行時根據指定的類名獲得類的資訊,
NIO:
面向流與面向緩沖
Java NIO和IO之間第一個最大的區別是,IO是面向流的,NIO是面向緩沖區的, Java IO面向流意味著每次從流中讀一個或多個位元組,直至讀取所有位元組,它們沒有被快取在任何地方,此外,它不能前后移動流中的資料,如果需要前后移動從流中讀取的資料,需要先將它快取到一個緩沖區, Java NIO的緩沖導向方法略有不同,資料讀取到一個它稍后處理的緩沖區,需要時可在緩沖區中前后移動,這就增加了處理程序中的靈活性,但是,還需要檢查是否該緩沖區中包含所有您需要處理的資料,而且,需確保當更多的資料讀入緩沖區時,不要覆寫緩沖區里尚未處理的資料,
阻塞與非阻塞IO
Java IO的各種流是阻塞的,這意味著,當一個執行緒呼叫read() 或 write()時,該執行緒被阻塞,直到有一些資料被讀取,或資料完全寫入,該執行緒在此期間不能再干任何事情了, Java NIO的非阻塞模式,使一個執行緒從某通道發送請求讀取資料,但是它僅能得到目前可用的資料,如果目前沒有資料可用時,就什么都不會獲取,而不是保持執行緒阻塞,所以直至資料變的可以讀取之前,該執行緒可以繼續做其他的事情, 非阻塞寫也是如此,一個執行緒請求寫入一些資料到某通道,但不需要等待它完全寫入,這個執行緒同時可以去做別的事情, 執行緒通常將非阻塞IO的空閑時間用于在其它通道上執行IO操作,所以一個單獨的執行緒現在可以管理多個輸入和輸出通道(channel),
選擇器(Selectors)
Java NIO的選擇器允許一個單獨的執行緒來監視多個輸入通道,你可以注冊多個通道使用一個選擇器,然后使用一個單獨的執行緒來“選擇”通道:這些通道里已經有可以處理的輸入,或者選擇已準備寫入的通道,這種選擇機制,使得一個單獨的執行緒很容易來管理多個通道,
集合:集合就是一個放資料的容器,準確的說是放資料物件參考的容器,
33.面向物件語言與面向程序語言的區別?面向物件語言有什么優點?
答:面向程序就是分析出解決問題所需要的步驟,然后用函式把這些步驟一步一步實作,使用的時候一個一個依次呼叫就可以了,
面向物件是把構成問題事務分解成各個物件,建立物件的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為,
封裝
封裝最好理解了,封裝是面向物件的特征之一,是物件和類概念的主要特性,
封裝,也就是把客觀事物封裝成抽象的類,并且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏,
繼承
面向物件編程 (OOP) 語言的一個主要功能就是“繼承”,繼承是指這樣一種能力:它可以使用現有類的所有功能,并在無需重新撰寫原來的類的情況下對這些功能進行擴展,
通過繼承創建的新類稱為“子類”或“派生類”,
被繼承的類稱為“基類”、“父類”或“超類”,
繼承的程序,就是從一般到特殊的程序,
要實作繼承,可以通過“繼承”(Inheritance)和“組合”(Composition)來實作,
在某些 OOP 語言中,一個子類可以繼承多個基類,但是一般情況下,一個子類只能有一個基類,要實作多重繼承,可以通過多級繼承來實作,
繼承概念的實作方式有三類:實作繼承、介面繼承和可視繼承,
? 實作繼承是指使用基類的屬性和方法而無需額外編碼的能力;
? 介面繼承是指僅使用屬性和方法的名稱、但是子類必須提供實作的能力;
? 可視繼承是指子表單(類)使用基表單(類)的外觀和實作代碼的能力,
在考慮使用繼承時,有一點需要注意,那就是兩個類之間的關系應該是“屬于”關系,例如,Employee 是一個人,Manager 也是一個人,因此這兩個類都可以繼承 Person 類,但是 Leg 類卻不能繼承 Person 類,因為腿并不是一個人,
抽象類僅定義將由子類創建的一般屬性和方法,創建抽象類時,請使用關鍵字 Interface 而不是 Class,
OO開發范式大致為:劃分物件→抽象類→將類組織成為層次化結構(繼承和合成) →用類與實體進行設計和實作幾個階段,
多型
多型性(polymorphisn)是允許你將父物件設定成為和一個或更多的他的子物件相等的技術,賦值之后,父物件就可以根據當前賦值給它的子物件的特性以不同的方式運作,簡單的說,就是一句話:允許將子型別別的指標賦值給父型別別的指標,
實作多型,有二種方式,覆寫,多載,
覆寫,是指子類重新定義父類的虛函式的做法,
多載,是指允許存在多個同名函式,而這些函式的引數表不同(或許引數個數不同,或許引數型別不同,或許兩者都不同),
其實,多載的概念并不屬于“面向物件編程”,多載的實作是:編譯器根據函式不同的引數表,對同名函式的名稱做修飾,然后這些同名函式就成了不同的函式(至少對于編譯器來說是這樣的),如,有兩個同名函式:function func(p:integer):integer;和function func(p:string):integer;,那么編譯器做過修飾后的函式名稱可能是這樣的:int_func、str_func,對于這兩個函式的呼叫,在編譯器間就已經確定了,是靜態的(記住:是靜態),也就是說,它們的地址在編譯期就系結了(早系結),因此,多載和多型無關!真正和多型相關的是“覆寫”,當子類重新定義了父類的虛函式后,父類指標根據賦給它的不同的子類指標,動態(記住:是動態!)的呼叫屬于子類的該函式,這樣的函式呼叫在編譯期間是無法確定的(呼叫的子類的虛函式的地址無法給出),因此,這樣的函式地址是在運行期系結的(晚邦定),結論就是:多載只是一種語言特性,與多型無關,與面向物件也無關!參考一句Bruce Eckel的話:“不要犯傻,如果它不是晚邦定,它就不是多型,”
那么,多型的作用是什么呢?我們知道,封裝可以隱藏實作細節,使得代碼模塊化;繼承可以擴展已 存在的代碼模塊(類);它們的目的都是為了——代碼重用,而多型則是為了實作另一個目的——介面重用!多型的作用,就是為了類在繼承和派生的時候,保證使用“家譜”中任一類的實體的某一屬性時的正確呼叫,
34.說一說OSI各層協議,HTTP?TCP?UDP?IP?
答:應用層
與其它計算機進行通訊的一個應用,它是對應應用程式的通信服務的,例如,一個沒有通信功能的字處理程式就不能執行通信的代碼,從事字處理作業的程式員也不關心OSI的第7層,但是,如果添加了一個傳輸檔案的選項,那么字處理器的程式就需要實作OSI的第7層,示例:TELNET,HTTP,FTP,NFS,SMTP等,
表示層
這一層的主要功能是定義資料格式及加密,例如,FTP允許你選擇以二進制或ASCII格式傳輸,如果選擇二進制,那么發送方和接收方不改變檔案的內容,如果選擇ASCII格式,發送方將把文本從發送方的字符集轉換成標準的ASCII后發送資料,在接收方將標準的ASCII轉換成接收方計算機的字符集,示例:加密,ASCII等,
會話層
它定義了如何開始、控制和結束一個會話,包括對多個雙向訊息的控制和管理,以便在只完成連續訊息的一部分時可以通知應用,從而使表示層看到的資料是連續的,在某些情況下,如果表示層收到了所有的資料,則用資料代表表示層,示例:RPC,SQL等,
傳輸層
這層的功能包括是否選擇差錯恢復協議還是無差錯恢復協議,及在同一主機上對不同應用的資料流的輸入進行復用,還包括對收到的順序不對的資料包的重新排序功能,示例:TCP,UDP,SPX,
網路層
這層對端到端的包傳輸進行定義,它定義了能夠標識所有結點的邏輯地址,還定義了路由實作的方式和學習的方式,為了適應最大傳輸單元長度小于包長度的傳輸介質,網路層還定義了如何將一個包分解成更小的包的分段方法,示例:IP,IPX等,
資料鏈路層
它定義了在單個鏈路上如何傳輸資料,這些協議與被討論的各種介質有關,示例:ATM,FDDI等,
物理層
OSI的物理層規范是有關傳輸介質的特性,這些規范通常也參考了其他組織制定的標準,連接頭、幀、幀的使用、電流、編碼及光調制等都屬于各種物理層規范中的內容,物理層常用多個規范完成對所有細節的定義,示例:Rj45,802.3等,
TCP/IP五層模型的協議:
應用層
傳輸層
網路層
資料鏈路層
物理層
TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)協議屬于傳輸層協議,其中TCP提供IP環境下的資料可靠傳輸,它提供的服務包括資料流傳送、可靠性、有效流控、全雙工操作和多路復 用,通過面向連接、端到端和可靠的資料包發送,通俗說,它是事先為所發送的資料開辟出連接好的通道,然后再進行資料發送;而UDP則不為IP提供可靠性、 流控或差錯恢復功能,一般來說,TCP對應的是可靠性要求高的應用,而UDP對應的則是可靠性要求低、傳輸經濟的應用,TCP支持的應用協議主要 有:Telnet、FTP、SMTP等;UDP支持的應用層協議主要有:NFS(網路檔案系統)、SNMP(簡單網路管理協議)、DNS(主域名稱系 統)、TFTP(通用檔案傳輸協議)等.
HTTP協議,即超文本傳輸協議(Hypertext transfer protocol),是一種詳細規定了瀏覽器和萬維網(WWW = World Wide Web)服務器之間互相通信的規則,通過因特網傳送萬維網檔案的資料傳送協議,
IP協議是將多個包交換網路連接起來,它在源地址和目的地址之間傳送一種稱之為資料包的東西,它還提供對資料大小的重新組裝功能,以適應不同網路對包大小的要求,
35.說一說http請求程序,
答:
- 瀏覽器查找域名的 IP 地址,這一步包括 DNS 具體的查找程序,包括:瀏覽器快取 -> 系統快取 -> 路由器快取……
- 瀏覽器向 web 服務器發送一個 http 請求:三次握手、傳送資料、四次揮手;
- 服務器的永久重定向回應:回傳真正訪問的地址;
- 瀏覽器跟蹤重定向地址:另發一個 http 請求;
- 服務器處理請求;
- 服務器回傳一個 http 回應;
- 瀏覽器顯示 html 頁面:決議 html 以構建 DOM 樹 –> 構建渲染樹 –> 布局渲染樹 –> 繪制渲染樹;
- 瀏覽器發送請求,獲取嵌入在 html 中的資源(如圖片、音頻、視頻、CSS 、JS 等等);
- 瀏覽器發送異步請求,
三次握手建立 TCP 連接:
在 http 作業開始之前,瀏覽器首先要通過網路與服務器建立連接,該連接是通過 TCP 來完成的,該協議與 IP 協議共同構建 Internet ,即著名的 TCP/IP 協議族,因此 Internet 又被稱作是 TCP/IP 網路, http 是比 TCP 更高層次的應用層協議,根據規則,只有低層協議建立之后才能進行更高次層協議的連接,因此,首先要建立 TCP 連接,一般 TCP 連接的埠號是 80 ,在 TCP/IP 協議中,TCP 協議提供可靠的連接服務,采用三次握手建立一個連接:
第一次握手:建立連接時,客戶端發送 SYN 包(syn=j)到服務器,并進入 SYN_SENT 狀態,等待服務器確認;SYN:同步序列編號(Synchronize Sequence Numbers)
第二次握手:服務器收到 SYN 包,必須確認客戶的 SYN(ack=j+1),同時自己也發送一個 SYN 包(syn=k),即 SYN+ACK 包,此時服務器進入 SYN_RECV 狀態;
第三次握手:客戶端收到服務器的 SYN+ACK 包,向服務器發送確認包 ACK(ack=k+1),此包發送完畢,客戶端和服務器進入 ESTABLISHED(TCP連接成功)狀態,完成三次握手,
完成三次握手,客戶端與服務器開始傳送資料,
一旦建立了 TCP 連接,瀏覽器就會向服務器發送 http 請求命令,瀏覽器發送其請求命令之后,還要以頭資訊的形式向服務器發送一些別的資訊,此后,瀏覽器發送了一空白行來通知服務器,它已經結束了該頭資訊的發送,
四次揮手終止連接
由于 TCP 連接是全雙工的,因此每個方向都必須單獨進行關閉,原則是當一方完成它的資料發送任務后,就能發送一個 FIN 來終止這個方向的連接,收到一個 FIN 只意味著這一方向上沒有資料流動,一個 TCP 連接在收到一個 FIN 后仍能發送資料,首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉,
第一次揮手:TCP 客戶端發送一個 FIN,用來關閉客戶端到服務器的資料傳送,
第二次揮手:服務器收到這個 FIN,它發回一個 ACK,確認序號為收到的序號加 1 ,和 SYN 一樣,一個 FIN 將占用一個序號,
第三次揮手:服務器關閉客戶端的連接,發送一個 FIN 給客戶端,
第四次揮手:客戶端發回 ACK 報文確認,并將確認序號設定為收到序號加 1 ,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/421679.html
標籤:AI
