題目來自網上面試過人的記錄,個人總結,個人總結,請勿轉載
面向對象的特征?
(答的封裝繼承多態)
面向對象編程的優點?
1、易維護
采用面向對象思想設計的結構,可讀性高,由於繼承的存在,即使改變需求,那么維護也只是在局部模塊,所以維護起來是非常方便和較低成本的。
2、質量高
在設計時,可重用現有的,在以前的項目的領域中已被測試過的類使系統滿足業務需求並具有較高的質量。
3、效率高
在軟件開發時,根據設計的需要對現實世界的事物進行抽象,產生類。使用這樣的方法解決問題,接近於日常生活和自然的思考方式,勢必提高軟件開發的效率和質量。
4、易擴展
由於繼承、封裝、多態的特性,自然設計出高內聚、低耦合的系統結構,使得系統更靈活、更容易擴展,而且成本較低。
你熟悉哪些設計模式?
(答的單例,Builder,abstract工廠,策略,適配器,代理)
單例用了面向對象的什么特性?
(封裝。。。)
你會寫幾種單例?
(這個問題答的還算不錯,總共回答了4種寫法,前段時間剛好做了總結,詳情可以看博客
單例模式學習總結)
線程有哪幾種實現方式?
(一直沒懂他問的是什么意思,事后想想可能是想問
1. 繼承runnable
2. 繼承Thread
3. 利用線程池
)
知道線程池嗎?
(不熟悉,如實告訴面試官。只知道是線程管理的方式,比如Android的AsyncTask)
HTTP和HTTPS的區別?
(不熟悉,如實告知..但是也提到了https是加密傳輸的,安全性更可靠。但是監聽端口不同,https需要ssl證書之類的沒說)
GET和POST的區別?
(GET直接在url后面,相當於明文傳輸;POST在報文實體,相當於暗文。兩者限制的長度不一樣。POST的長度限制遠大於POST,具體長度忘記了,面試官也沒多問)
說一下ArrayList的實現?
(數組封裝,主要講了下add的時候擴容1.5倍的問題)
一般大家都知道ArrayList和LinkedList的大致區別:
1.ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構。
2.對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指針。
3.對於新增和刪除操作add和remove,LinedList比較占優勢,因為ArrayList要移動數據。
ArrayList刪除操作的時間復雜度?具體過程?
(線性時間復雜度,解釋了一下,順帶提到了一下鏈表的刪除是常數)
接口和抽象類的區別?
(主要從is a和like a的角度去答,還有一些語法上的區別,比如抽象類可以有含具體實現的非abstract方法,接口不能有具體實現的方法一類的)
在高級語言上,一個類只能繼承一個類(抽象類)(正如人不可能同時是生物和非生物),但是可以實現多個接口(吃飯接口、走路接口)。
第一點. 接口是抽象類的變體,接口中所有的方法都是抽象的。而抽象類是聲明方法的存在而不去實現它的類。
第二點. 接口可以多繼承,抽象類不行
第三點. 接口定義方法,不能實現,而抽象類可以實現部分方法。
第四點. 接口中基本數據類型為static 而抽類象不是的。
當你關注一個事物的本質的時候,用抽象類;當你關注一個操作的時候,用接口。
I/0的常見對象
下圖說明相關體系:
線程互斥的方法?
四種進程或線程同步互斥的控制方法
1、臨界區:通過對多線程的串行化來訪問公共資源或一段代碼,速度快,適合控制數據訪問。
2、互斥量:為協調共同對一個共享資源的單獨訪問而設計的。
3、信號量:為控制一個具有有限數量用戶資源而設計。
4、事 件:用來通知線程有一些事件已發生,從而啟動后繼任務的開始。
tomcat 運行機制
先不去關技術細節,對一個servlet容器,我覺得它首先要做以下事情:
1:實現Servlet api規范。這是最基礎的一個實現,servlet api大部分都是接口規范。如request、response、session、cookie。為了我們應用端能正常使用,容器必須有一套完整實現。
1:實現Servlet api規范。這是最基礎的一個實現,servlet api大部分都是接口規范。如request、response、session、cookie。為了我們應用端能正常使用,容器必須有一套完整實現。
2:啟動Socket監聽端口,等待http請求。
3:獲取http請求,分發請求給不同的協議處理器,如http和https在處理上是不一樣的。
4:封裝請求,構造HttpServletRequest。把socket獲取的用戶請求字節流轉換成java對象httprequest。構造httpResponse。
5:調用(若未創建,則先加載)servlet,調用init初始化,執行servlet.service()方法。
6:為httpResponse添加header等頭部信息。
7:socket回寫流,返回滿足http協議格式的數據給瀏覽器。
8:實現JSP語法分析器,JSP標記解釋器。JSPservlet實現和渲染引擎。
9:JNDI、JMX等服務實現。容器一般額外提供命名空間服務管理。
10:線程池管理,創建線程池,並為每個請求分配線程。
Tcp三次握手
在TCP/IP協議中,TCP協議提供可靠的連接服務,采用三次握手建立一個連接.
第一次握手:建立連接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認;
SYN:同步序列編號(Synchronize Sequence Numbers)
第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手.
完成三次握手,客戶端與服務器開始傳送數據
並發
用過哪些數據庫?
(移動端sqlite,寫服務端的時候用過MySQL)
用復雜sql語句的實踐經驗嗎?
(沒有)
那一般寫過什么?
(增插刪改...)
那你寫一個,根據字段分組查詢的語句
(用是用了group by,但是太長時間不接觸數據庫,面試官說語法有問題)
看了下我簡歷上的實習和項目
問我手機上也沒有可以看的
(暑假之后換了手機,調試都用的舊手機,去之前也忘記在新手機上裝一編,這個Android,iOS或者web前端的同學可以記得以后把項目給面試官展示。沒有機會給面試官展示一下聊一會項目,算是個遺憾,就算能拿到offer,估計也拿不到高的薪資了)
最后照舊是面試官問我有沒有什么要問他的
(問了平時的內部培訓,技術交流與分享機制)
