Java+Android+數據結構 基礎知識總結 [一]

子曰:“父母之年,不可不知也。一則以喜,一則以懼。”《論語》
見過很多的人為了家庭放棄工作。你是螺絲釘,你可能一輩子就在一個地方,離開了你的地方,就成了廢鐵。 你是金子,鉆石呢??
面試的時間一般是半個小時到一個小時左右,時間很是寶貴,建議只做自己最擅長的那一部分
基礎知識要配合著項目經驗來進行講述,這樣才會給面試官最大的尊重,也給自己一個發光的機會

Java基礎
TCP (Transmission Control Protocol,傳輸控制協議)

1. 一種面向連接的、可靠的、基于字節流的傳輸層通信協議
2. TCP層是位于IP層之上,應用層之下的中間層
3. 三次握手
    1. 客戶端發送SYN(SEQ=x)報文給服務器端,-> SYN_SEND。
    2. 服務器端收到SYN報文,回應一個SYN (SEQ=y)ACK(ACK=x+1)報文,->SYN_RECV。
    3. 客戶端收到服務器端的SYN報文,回應一個ACK(ACK=y+1)報文,-> Established(已建立的)。
    4. 這一過程與打電話很相似,先撥號振鈴,等待對方摘機說“喂”,然后才說明是誰。在一個TCP連接中,僅有兩方進行彼此通信。

4. 握手以后,進行傳(yue)遞(hui)
5. 可靠性保證
    1. 應用數據被分割成TCP認為最適合發送的數據塊(報文)
    2. 當TCP發出一個段后,它啟動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段。
    3. 既然TCP報文段作為IP數據報來傳輸,而IP數據報的到達可能會失序,因此TCP報文段的到達也可能會失序。(自動調整順序)
    4. .TCP還能提供流量控制(緩沖區大小)。

UDP (User Data Protocol,用戶數據報協議)

1. 不面向連(fu)接(ze)
2. 全力發送
3. 一個可以給多個發送
4. 不保證順序
5. 數據報模式
6. 丟包   [ping就是用的這個,所以網不好就丟包]
  • 新浪面試題

寫一個函數,計算兩個文件的相對路徑的遞歸算法

String aPath = "/P/y/z/a/b/a/g/e.php";
String bPath = "/P/y/z/a/b/a/g/c.php"; 
情況的時候貌似不對。 
代碼可改成: 
public String pathARelativePathB(String pathA, String pathB, int i) {
    // A相對于B ../g/e.php
    if (pathA.contains(pathB)) {
        if (i == 1) {
            return pathA.replaceAll(pathB + "/", "");
        } else {
            StringBuffer sb = new StringBuffer();
            for (int j = 1; j < i; j++)
            sb.append("../");
            return sb.append(pathA.replaceAll(pathB + "/", "")).toString();
        }
    } else {
        return pathARelativePathB(pathA, pathB.substring(0, pathB.lastIndexOf("/")), ++i);
    }
}
  • 編寫一個函數用來實現輸入任意一個字符串,實現對該字符串進行反轉

    1. 轉換成char數組,倒著輸出即可[英文數字均可] [簡單(la)粗暴(ji)]
    2. 如果是中文串,編碼問題就不是那么善良了
    3. 這時候,使用字符串截取類,倒著一個一個的截取即可
    4. 也可以使用整個串長度的For循環,輸出指定位置的字符即可
    5. 小技巧split("")可以讓整個串按字符分割
    6. 數據結構高手的想法,整個串分割后壓入棧中,進行彈出就是反轉
    7. 首尾交換法 比如原長度是10,那么 [0][10] | [1][9]進行交換,for循環只用跑 1/2,效率也是非常可觀
    8. 歡迎大家對以上算法進行效率排序,可以在公眾號中給我留言

Android 基礎

  • 場景 [Context]

    1. 源碼分析 Activity、Service、Application都是Context的子類
    2. 分類 Activity ApplicationContext
    3. 兩個有什么區別,需要顯示東西的時候,就用Activity中的Context就可以,不需要顯示的時候,那么使用ApplicationContext就行,當然,注意對象的引用,發生內存泄漏也不好,軟引用空指針了也不好
    4. 場景,就是前臺小蜜要不停的穿梭在老板的辦公室,前臺等地方,所以不同的場景下,小蜜能做的事情也不同
    5. 所以,要分場合的使用你的小蜜
  • 四大組件

    1. 活動(Activity)
      1. 生命周期方法調用,四種啟動方式
    2. 服務(Service)
      1. 生命周期,綁定方法
    3. 廣播接收者(BroadcastReceiver)
      1. 動態注冊(onDestroy中解綁)和靜態注冊的區別,優先級
      2. 廣播分類 有序(優先級大的有權利截斷廣播)/無序
      3. 廣播分類 本地/全局
      4. 廣播分類 Sticky 粘性廣播,延遲廣播 權限 android.permission.BROADCAST_STICKY
      5. 粘性廣播保證后注冊的接收者也可以接收到,但只保持最后一條廣播
      6. 粘性廣播已經很少用
    4. 內容提供者(Content Provider)
      1. Uri格式 [scheme:] [//host:port] [path] [?query][#fragment]
      2. 當外部應用需要對ContentProvider中的數據進行添加、刪除、修改和查詢操作時,可以使用ContentResolver類來完成,要獲取ContentResolver對象,可以使用Context提供的getContentResolver()方法。
      3. 怎么描述他的功能呢,就是給別人開的后門吧
5.  內容觀察者(ContentObserver)(提供者的小弟)
    1.  觀察短信、通話記錄、是否飛行模式
    2.  需要頻繁檢測的數據庫或者某個數據是否發生改變,如果使用線程去操作,很不經濟而且很耗時 
    3.  在用戶不知曉的情況下對數據庫做一些事件,比如:悄悄發送信息、拒絕接受短信黑名單等
    4.  比如,只接受指定用戶的信息
    5.  建議和Handler配合使用更新UI
  • OOM [out of memory 內存溢出]

    1. 一般一個應用使用的內存不能超過默認值 32M ,小米150M..
    2. 國內的黑科技APP就不要吐槽了,大的能占你的手機 1G 運存
    3. 為什么能占這么多還不OOM,解決方式很多
    4. 保持不重要的內存進行軟引用,讓系統的gc自己動起來
    5. 大圖加載(10M以上的大圖) 得到bitmap之前先利用BitmapFactory.Options的inSampleSize的值得到壓縮圖片。
    6. 數據需要的時候再進行加載
    7. LruCache 設計自己的緩存去 數據單獨進行管理 底層使用LinkedHashMap在使用一個對象的時候就把這個對象移動到隊列頭部,而且線程安全
    8. AsyncTask 它封裝了Thread和Handler
  • 內存泄漏 (占用的內存只增不減)-> 合理的使用你的內存

先簡單的泄漏一下
第一種 [JAVA] 泄漏

1. 創建一百個對象
2. 把這一百個對象放入集合中,放入后把原對象引用置為空
3. 使用完集合后,這些對象還是會繼續存在,造成泄漏
4. 將對象也置為空,系統就會自動GC

第二種 [上下文的泄漏]

1. 靜態類中使用的Context
2. 如果靜態類的生命周期長于Context生命周期 -> 泄漏     
3. 可以使用ApplicationContext 在Application中添加一個靜態工廠方法,返回ApplicationContext.
4. Handler 造成的內存泄漏 Handler、Message 和 MessageQueue 都是相互關聯在一起的
5. 如果Handler還有沒處理完的東西Activiy已經被關閉了
6. Handler 中還繼續持有這個 Activity 的引用 -> 泄漏
7. 解決方案,Handler 對 Activity 使用軟引用
8. 使用前判斷非空
    1. 原因,在內存中有一個無法訪問也無法清除的對象
    2. 危險,小的泄漏無所謂,每次泄漏一點,時間久了,手機的內存就被啃光了,明顯感覺到卡頓和發熱的時候,早就積少成多了
    3. 避免這些問題是高端開發人員的核心技能之一
    4. 盡量避免使用 static 成員變量,這些東西和APP生命周期一樣,極其浪費系統資源
    5. 將內部類改為靜態內部類
    6. 靜態內部類中使用弱引用來引用外部類的成員變量
    7. Handler 更新UI使用弱引用
  • ANR [Application Not Responding]

    1. 喜歡玩舊手機的人,經常看到這個
    2. 經常會問你,xx失去響應,該不該把它關了
    3. Activity 5s broadCastReceiver 10s Service 20s
    4. 為什么,你卡到UI線程了
    5. 好的應用是不允許這個問題出現
    6. 所以,[耗時/聯網/數據庫] 等操作就放到工作服務和子線程中
    7. 最好辦法,異步數據處理,多用緩存機制
    8. 微小的卡頓保持在100-200ms中,放心沒人發現
    9. 使用進度條來保持耗時的不尷尬
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,882評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,208評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,746評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,666評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,477評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,960評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,047評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,200評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,726評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,617評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,807評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,327評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,049評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,425評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,674評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,432評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,769評論 2 372

推薦閱讀更多精彩內容

  • Android Studio JNI流程首先在java代碼聲明本地方法 用到native關鍵字 本地方法不用去實現...
    MigrationUK閱讀 11,914評論 7 123
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,608評論 25 708
  • 內存管理的目的就是讓我們在開發中怎么有效的避免我們的應用出現內存泄漏的問題。內存泄漏大家都不陌生了,簡單粗俗的講,...
    宇宙只有巴掌大閱讀 2,382評論 0 12
  • 8月19日,臨沂市羅莊區發生一起電信詐騙案,18歲的準大學生徐玉玉被他人以發放助學金為由,通過銀行ATM機轉賬的方...
    長弓心悅閱讀 288評論 0 0
  • 文/夜奔 “幾十年前,江湖上有位奇人,他的武功出神入化,連戰當時一百零八位高手而毫發無損,但在此后,他便失蹤了,仿...
    一夜星辰閱讀 826評論 0 0