最新最全百度,阿里面試題:Java語言+APP開發+效能優化+NDK+Flutter

Android架構技術分享發表於2019-04-09

前言

本文是群裡的一位資深架構師整理出來的,這些題目是網友去百度、小米、樂視、美團、58、獵豹、360、新浪、搜狐等一線網際網路公司面試被問到的題目。熟悉本文中列出的知識點會大大增加通過前兩輪技術面試的機率。

由於題目很多,不同崗位面試問的深度不一樣,答案尚在繼續整理完善中,後面會持續更新的。

最新最全百度,阿里面試題:Java語言+APP開發+效能優化+NDK+Flutter

面試題

一.java面試題
二.Android面試題
三.高階開發技術面試題
四.跨平臺Hybrid 開發

一、java面試題

熟練掌握java是很關鍵的,大公司不僅僅要求你會使用幾個api,更多的是要你熟悉原始碼實現原理,甚至要你知道有哪些不足,怎麼改進,還有一些java有關的一些演算法,設計模式等等。

(一) java基礎面試知識點

  • java中==和equals和hashCode的區別
  • int、char、long各佔多少位元組數
  • int與integer的區別
  • 探探對java多型的理解
  • String、StringBuffer、StringBuilder區別
  • 什麼是內部類?內部類的作用
  • 抽象類和介面區別
  • 抽象類的意義
  • 抽象類與介面的應用場景
  • 抽象類是否可以沒有方法和屬性?
  • 介面的意義
  • 泛型中extends和super的區別
  • 父類的靜態方法能否被子類重寫
  • 程式和執行緒的區別
  • final,finally,finalize的區別
  • 序列化的方式
  • Serializable 和Parcelable 的區別
  • 靜態屬性和靜態方法是否可以被繼承?是否可以被重寫?以及原因?
  • 靜態內部類的設計意圖
  • 成員內部類、靜態內部類、區域性內部類和匿名內部類的理解,以及專案中的應用
  • 談談對kotlin的理解
  • 閉包和區域性內部類的區別
  • string 轉換成 integer的方式及原理

(二) java深入原始碼級的面試題(有難度)

  • 哪些情況下的物件會被垃圾回收機制處理掉?
  • 講一下常見編碼方式?
  • utf-8編碼中的中文佔幾個位元組;int型幾個位元組?
  • 靜態代理和動態代理的區別,什麼場景使用?
  • Java的異常體系
  • 談談你對解析與分派的認識。
  • 修改物件A的equals方法的簽名,那麼使用HashMap存放這個物件例項的時候,會呼叫哪個equals方法?
  • Java中實現多型的機制是什麼?
  • 如何將一個Java物件序列化到檔案裡?
  • 說說你對Java反射的理解
  • 說說你對Java註解的理解
  • 說說你對依賴注入的理解
  • 說一下泛型原理,並舉例說明
  • Java中String的瞭解
  • String為什麼要設計成不可變的?
  • Object類的equal和hashCode方法重寫,為什麼?

(三) 資料結構

  • 常用資料結構簡介
  • 併發集合瞭解哪些?
  • 列舉java的集合以及集合之間的繼承關係
  • 集合類以及集合框架
  • 容器類介紹以及之間的區別(容器類估計很多人沒聽這個詞,Java容器主要可以劃分為4個部分:List列表、Set集合、Map對映、工具類(Iterator迭代器、Enumeration列舉類、Arrays和Collections),具體的可以看看這篇博文 Java容器類)
  • List,Set,Map的區別
  • List和Map的實現方式以及儲存方式
  • HashMap的實現原理
  • HashMap資料結構?
  • HashMap原始碼理解
  • HashMap如何put資料(從HashMap原始碼角度講解)?
  • HashMap怎麼手寫實現?
  • ConcurrentHashMap的實現原理
  • ArrayMap和HashMap的對比
  • HashTable實現原理
  • TreeMap具體實現
  • HashMap和HashTable的區別
  • HashMap與HashSet的區別
  • HashSet與HashMap怎麼判斷集合元素重複?
  • 集合Set實現Hash怎麼防止碰撞
  • ArrayList和LinkedList的區別,以及應用場景
  • 陣列和連結串列的區別
  • 二叉樹的深度優先遍歷和廣度優先遍歷的具體實現
  • 堆的結構
  • 堆和樹的區別
  • 堆和棧在記憶體中的區別是什麼(解答提示:可以從資料結構方面以及實際實現方面兩個方面去回答)?
  • 什麼是深拷貝和淺拷貝
  • 手寫連結串列逆序程式碼
  • 講一下對樹,B+樹的理解
  • 講一下對圖的理解
  • 判斷單連結串列成環與否?
  • 連結串列翻轉(即:翻轉一個單項鍊表)
  • 合併多個單有序連結串列(假設都是遞增的)

(四) 執行緒、多執行緒和執行緒池

  • 開啟執行緒的三種方式?
  • 執行緒和程式的區別?
  • 為什麼要有執行緒,而不是僅僅用程式?
  • run()和start()方法區別
  • 如何控制某個方法允許併發訪問執行緒的個數?
  • 在Java中wait和seelp方法的不同;
  • 談談wait/notify關鍵字的理解
  • 什麼導致執行緒阻塞?
  • 執行緒如何關閉?
  • 講一下java中的同步的方法
  • 資料一致性如何保證?
  • 如何保證執行緒安全?
  • 如何實現執行緒同步?
  • 兩個程式同時要求寫或者讀,能不能實現?如何防止程式的同步?
  • 執行緒間操作List
  • Java中物件的生命週期
  • Synchronized用法
  • synchronize的原理
  • 談談對Synchronized關鍵字,類鎖,方法鎖,重入鎖的理解
  • static synchronized 方法的多執行緒訪問和作用
  • 同一個類裡面兩個synchronized方法,兩個執行緒同時訪問的問題
  • volatile的原理
  • 談談volatile關鍵字的用法
  • 談談volatile關鍵字的作用
  • 談談NIO的理解
  • synchronized 和volatile 關鍵字的區別
  • synchronized與Lock的區別
  • ReentrantLock 、synchronized和volatile比較
  • ReentrantLock的內部實現
  • lock原理
  • 死鎖的四個必要條件?
  • 怎麼避免死鎖?
  • 物件鎖和類鎖是否會互相影響?
  • 什麼是執行緒池,如何使用?
  • Java的併發、多執行緒、執行緒模型
  • 談談對多執行緒的理解
  • 多執行緒有什麼要注意的問題?
  • 談談你對併發程式設計的理解並舉例說明
  • 談談你對多執行緒同步機制的理解?
  • 如何保證多執行緒讀寫檔案的安全?
  • 多執行緒斷點續傳原理
  • 斷點續傳的實現

(五)併發程式設計有關知識點(這個是一般Android開發用的少的,所以建議多去看看):

平時Android開發中對併發程式設計可以做得比較少,Thread這個類經常會用到,但是我們想提升自己的話,一定不能停留在表面,,我們也應該去了解一下java的關於執行緒相關的原始碼級別的東西。

附;java基礎與原理知識腦圖

最新最全百度,阿里面試題:Java語言+APP開發+效能優化+NDK+Flutter


二、Android面試題

Android面試題包括Android基礎,還有一些原始碼級別的、原理這些等。所以想去大公司面試,一定要多看看原始碼和實現方式,常用框架可以試試自己能不能手寫實現一下,鍛鍊一下自己。

(一)Android基礎知識點

  • 四大元件是什麼
  • 四大元件的生命週期和簡單用法
  • Activity之間的通訊方式
  • Activity各種情況下的生命週期
  • 橫豎屏切換的時候,Activity 各種情況下的生命週期
  • Activity與Fragment之間生命週期比較
  • Activity上有Dialog的時候按Home鍵時的生命週期
  • 兩個Activity 之間跳轉時必然會執行的是哪幾個方法?
  • 前臺切換到後臺,然後再回到前臺,Activity生命週期回撥方法。彈出Dialog,生命值週期回撥方法。
  • Activity的四種啟動模式對比
  • Activity狀態儲存於恢復
  • fragment各種情況下的生命週期
  • Fragment狀態儲存startActivityForResult是哪個類的方法,在什麼情況下使用?
  • 如何實現Fragment的滑動?
  • fragment之間傳遞資料的方式?
  • Activity 怎麼和Service 繫結?
  • 怎麼在Activity 中啟動自己對應的Service?
  • service和activity怎麼進行資料互動?
  • Service的開啟方式
  • 請描述一下Service 的生命週期
  • 談談你對ContentProvider的理解
  • 說說ContentProvider、ContentResolver、ContentObserver 之間的關係
  • 請描述一下廣播BroadcastReceiver的理解
  • 廣播的分類
  • 廣播使用的方式和場景
  • 在manifest 和程式碼中如何註冊和使用BroadcastReceiver?
  • 本地廣播和全域性廣播有什麼差別?
  • BroadcastReceiver,LocalBroadcastReceiver 區別
  • AlertDialog,popupWindow,Activity區別
  • Application 和 Activity 的 Context 物件的區別
  • Android屬性動畫特性
  • 如何匯入外部資料庫?
  • LinearLayout、RelativeLayout、FrameLayout的特性及對比,並介紹使用場景。
  • 談談對介面與回撥的理解
  • 回撥的原理
  • 寫一個回撥demo
  • 介紹下SurfView
  • RecycleView的使用
  • 序列化的作用,以及Android兩種序列化的區別
  • 差值器
  • 估值器
  • Android中資料儲存方式

(二)Android原始碼相關分析

  • Android動畫框架實現原理
  • Android各個版本API的區別
  • Requestlayout,onlayout,onDraw,DrawChild區別與聯絡
  • invalidate和postInvalidate的區別及使用
  • Activity-Window-View三者的差別
  • 談談對Volley的理解
  • 如何優化自定義View
  • 低版本SDK如何實現高版本api?
  • 描述一次網路請求的流程
  • HttpUrlConnection 和 okhttp關係
  • Bitmap物件的理解
  • looper架構
  • ActivityThread,AMS,WMS的工作原理
  • 自定義View如何考慮機型適配
  • 自定義View的事件
  • AstncTask+HttpClient 與 AsyncHttpClient有什麼區別?
  • LaunchMode應用場景
  • AsyncTask 如何使用?
  • SpareArray原理
  • 請介紹下ContentProvider 是如何實現資料共享的?
  • AndroidService與Activity之間通訊的幾種方式
  • IntentService原理及作用是什麼?
  • 說說Activity、Intent、Service 是什麼關係
  • ApplicationContext和ActivityContext的區別
  • SP是程式同步的嗎?有什麼方法做到同步?
  • 談談多執行緒在Android中的使用
  • 程式和 Application 的生命週期
  • 封裝View的時候怎麼知道view的大小
  • RecycleView原理
  • AndroidManifest的作用與理解

(三)常見的一些原理性問題

  • Handler機制和底層實現
  • Handler、Thread和HandlerThread的差別
  • handler發訊息給子執行緒,looper怎麼啟動?
  • 關於Handler,在任何地方new Handler 都是什麼執行緒下?
  • ThreadLocal原理,實現及如何保證Local屬性?
  • 請解釋下在單執行緒模型中Message、Handler、Message Queue、Looper之間的關係
  • 請描述一下View事件傳遞分發機制
  • Touch事件傳遞流程
  • 事件分發中的onTouch 和onTouchEvent 有什麼區別,又該如何使用?
  • View和ViewGroup分別有哪些事件分發相關的回撥方法
  • View重新整理機制
  • View繪製流程
  • 自定義控制元件原理
  • 自定義View如何提供獲取View屬性的介面?
  • Android程式碼中實現WAP方式聯網
  • AsyncTask機制
  • AsyncTask原理及不足
  • 如何取消AsyncTask?
  • 為什麼不能在子執行緒更新UI?
  • ANR產生的原因是什麼?
  • ANR定位和修正
  • oom是什麼?
  • 什麼情況導致oom?
  • 有什麼解決方法可以避免OOM?
  • Oom 是否可以try catch?為什麼?
  • 記憶體洩漏是什麼?
  • 什麼情況導致記憶體洩漏?
  • 如何防止執行緒的記憶體洩漏?
  • 記憶體洩露場的解決方法
  • 記憶體洩漏和記憶體溢位區別?
  • LruCache預設快取大小
  • ContentProvider的許可權管理(解答:讀寫分離,許可權控制-精確到表級,URL控制)
  • 如何通過廣播攔截和abort一條簡訊?
  • 廣播是否可以請求網路?
  • 廣播引起anr的時間限制是多少?
  • 計算一個view的巢狀層級
  • Activity棧
  • Android執行緒有沒有上限?
  • 執行緒池有沒有上限?
  • ListView重用的是什麼?
  • Android為什麼引入Parcelable?
  • 有沒有嘗試簡化Parcelable的使用?

(四)開發中常見的一些問題

  • ListView 中圖片錯位的問題是如何產生的?
  • 混合開發有了解嗎?
  • 知道哪些混合開發的方式?說出它們的優缺點和各自使用場景?(解答:比如:RN,weex,H5,小程式,WPA等。做Android的瞭解一些前端js等還是很有好處的);
  • 螢幕適配的處理技巧都有哪些?
  • 伺服器只提供資料接收介面,在多執行緒或多程式條件下,如何保證資料的有序到達?
  • 動態佈局的理解
  • 怎麼去除重複程式碼?
  • 畫出 Android 的大體架構圖
  • Recycleview和ListView的區別
  • ListView圖片載入錯亂的原理和解決方案
  • 動態許可權適配方案,許可權組的概念
  • Android系統為什麼會設計ContentProvider?
  • 下拉狀態列是不是影響activity的生命週期
  • 如果在onStop的時候做了網路請求,onResume的時候怎麼恢復?
  • Bitmap 使用時候注意什麼?
  • Bitmap的recycler()
  • Android中開啟攝像頭的主要步驟
  • ViewPager使用細節,如何設定成每次只初始化當前的Fragment,其他的不初始化?
  • 點選事件被攔截,但是想傳到下面的View,如何操作?
  • 微信主頁面的實現方式
  • 微信上訊息小紅點的原理
  • CAS介紹(這是阿里巴巴的面試題,我不是很瞭解,可以參考部落格: CAS簡介)

附;Android APP框架知識腦圖;最新最全百度,阿里面試題:Java語言+APP開發+效能優化+NDK+Flutter



三、高階開發技術面試題

這裡講的是大公司需要用到的一些高階Android技術,這裡專門整理了一個文件,希望大家都可以看看。這些題目有點技術含量,需要好點時間去研究一下的。

(一)圖片

  • 圖片庫對比
  • 圖片庫的原始碼分析
  • 圖片框架快取實現
  • LRUCache原理
  • 圖片載入原理
  • 自己去實現圖片庫,怎麼做?
  • Glide原始碼解析
  • Glide使用什麼快取?
  • Glide記憶體快取如何控制大小?

(二)網路和安全機制

  • 網路框架對比和原始碼分析
  • 自己去設計網路請求框架,怎麼做?
  • okhttp原始碼
  • 網路請求快取處理,okhttp如何處理網路快取的
  • 從網路載入一個10M的圖片,說下注意事項
  • TCP的3次握手和四次揮手
  • TCP與UDP的區別
  • TCP與UDP的應用
  • HTTP協議
  • HTTP1.0與2.0的區別
  • HTTP報文結構
  • HTTP與HTTPS的區別以及如何實現安全性
  • 如何驗證證照的合法性?
  • https中哪裡用了對稱加密,哪裡用了非對稱加密,對加密演算法(如RSA)等是否有了解?
  • client如何確定自己傳送的訊息被server收到?
  • 談談你對WebSocket的理解
  • WebSocket與socket的區別
  • 談談你對安卓簽名的理解。
  • 請解釋安卓為啥要加簽名機制?
  • 視訊加密傳輸
  • App 是如何沙箱化,為什麼要這麼做?
  • 許可權管理系統(底層的許可權是如何進行 grant 的)?

(三)資料庫

  • sqlite升級,增加欄位的語句
  • 資料庫框架對比和原始碼分析
  • 資料庫的優化
  • 資料庫資料遷移問題

(四)演算法

  • 排序演算法有哪些?
  • 最快的排序演算法是哪個?
  • 手寫一個氣泡排序
  • 手寫快速排序程式碼
  • 快速排序的過程、時間複雜度、空間複雜度
  • 手寫堆排序
  • 堆排序過程、時間複雜度及空間複雜度
  • 寫出你所知道的排序演算法及時空複雜度,穩定性
  • 二叉樹給出根節點和目標節點,找出從根節點到目標節點的路徑
  • 給阿里2萬多名員工按年齡排序應該選擇哪個演算法?
  • GC演算法(各種演算法的優缺點以及應用場景)
  • 蟻群演算法與蒙特卡洛演算法
  • 子串包含問題(KMP 演算法)寫程式碼實現
  • 一個無序,不重複陣列,輸出N個元素,使得N個元素的和相加為M,給出時間複雜度、空間複雜度。手寫演算法
  • 萬億級別的兩個URL檔案A和B,如何求出A和B的差集C(提示:Bit對映->hash分組->多檔案讀寫效率->磁碟定址以及應用層面對定址的優化)
  • 百度POI中如何試下查詢最近的商家功能(提示:座標映象+R樹)。
  • 兩個不重複的陣列集合中,求共同的元素。
  • 兩個不重複的陣列集合中,這兩個集合都是海量資料,記憶體中放不下,怎麼求共同的元素?
  • 一個檔案中有100萬個整數,由空格分開,在程式中判斷使用者輸入的整數是否在此檔案中。說出最優的方法
  • 一張Bitmap所佔記憶體以及記憶體佔用的計算
  • 2000萬個整數,找出第五十大的數字?
  • 燒一根不均勻的繩,從頭燒到尾總共需要1個小時。現在有若干條材質相同的繩子,問如何用燒繩的方法來計時一個小時十五分鐘呢?
  • 求1000以內的水仙花數以及40億以內的水仙花數
  • 5枚硬幣,2正3反如何劃分為兩堆然後通過翻轉讓兩堆中正面向上的硬8幣和反面向上的硬幣個數相同
  • 時針走一圈,時針分針重合幾次
  • N*N的方格紙,裡面有多少個正方形
  • x個蘋果,一天只能吃一個、兩個、或者三個,問多少天可以吃完?

(五)外掛化、模組化、元件化、熱修復、增量更新、Gradle

  • 對熱修復和外掛化的理解
  • 外掛化原理分析
  • 模組化實現(好處,原因)
  • 熱修復,外掛化
  • 專案元件化的理解
  • 描述清點選 Android Studio 的 build 按鈕後發生了什麼

(六)架構設計和設計模式

  • 談談你對Android設計模式的理解
  • MVC MVP MVVM原理和區別
  • 你所知道的設計模式有哪些?
  • 專案中常用的設計模式
  • 手寫生產者/消費者模式
  • 寫出觀察者模式的程式碼
  • 介面卡模式,裝飾者模式,外觀模式的異同?
  • 用到的一些開源框架,介紹一個看過原始碼的,內部實現過程。
  • 談談對RxJava的理解
  • RxJava的功能與原理實現
  • RxJava的作用,與平時使用的非同步操作來比的優缺點
  • 說說EventBus作用,實現方式,代替EventBus的方式
  • 從0設計一款App整體架構,如何去做?
  • 說一款你認為當前比較火的應用並設計(比如:直播APP,P2P金融,小視訊等)
  • 談談對java狀態機理解
  • Fragment如果在Adapter中使用應該如何解耦?
  • Binder機制及底層實現
  • 對於應用更新這塊是如何做的?(解答:灰度,強制更新,分割槽域更新)?
  • 實現一個Json解析器(可以通過正則提高速度)
  • 統計啟動時長,標準

(七)效能優化

  • 如何對Android 應用進行效能分析以及優化?
  • ddms 和 traceView
  • 效能優化如何分析systrace?
  • 用IDE如何分析記憶體洩漏?
  • Java多執行緒引發的效能問題,怎麼解決?
  • 啟動頁白屏及黑屏解決?
  • 啟動太慢怎麼解決?
  • 怎麼保證應用啟動不卡頓?
  • App啟動崩潰異常捕捉
  • 自定義View注意事項
  • 現在下載速度很慢,試從網路協議的角度分析原因,並優化(提示:網路的5層都可以涉及)。
  • Https請求慢的解決辦法(提示:DNS,攜帶資料,直接訪問IP)
  • 如何保持應用的穩定性
  • RecyclerView和ListView的效能對比
  • ListView的優化
  • RecycleView優化
  • View渲染
  • Bitmap如何處理大圖,如一張30M的大圖,如何預防OOM
  • java中的四種引用的區別以及使用場景
  • 強引用置為null,會不會被回收?

(八)NDK、jni、Binder、AIDL、程式通訊有關

  • 請介紹一下NDK
  • 什麼是NDK庫?
  • jni用過嗎?
  • 如何在jni中註冊native函式,有幾種註冊方式?
  • Java如何呼叫c、c++語言?
  • jni如何呼叫java層程式碼?
  • 程式間通訊的方式?
  • Binder機制
  • 簡述IPC?
  • 什麼是AIDL?
  • AIDL解決了什麼問題?
  • AIDL如何使用?
  • Android 上的 Inter-Process-Communication 跨程式通訊時如何工作的?
  • 多程式場景遇見過麼?
  • Android程式分類?
  • 程式和 Application 的生命週期?
  • 程式排程
  • 談談對程式共享和執行緒安全的認識
  • 談談對多程式開發的理解以及多程式應用場景
  • 什麼是協程?

(九)framework層、ROM定製、Ubuntu、Linux之類的問題

  • java虛擬機器的特性
  • 談談對jvm的理解
  • JVM記憶體區域,開執行緒影響哪塊記憶體
  • 對Dalvik、ART虛擬機器有什麼瞭解?
  • Art和Dalvik對比
  • 虛擬機器原理,如何自己設計一個虛擬機器(記憶體管理,類載入,雙親委派)
  • 談談你對雙親委派模型理解
  • JVM記憶體模型,記憶體區域
  • 類載入機制
  • 談談對ClassLoader(類載入器)的理解
  • 談談對動態載入(OSGI)的理解
  • 記憶體物件的迴圈引用及避免
  • 記憶體回收機制、GC回收策略、GC原理時機以及GC物件
  • 垃圾回收機制與呼叫System.gc()區別
  • Ubuntu編譯安卓系統
  • 系統啟動流程是什麼?(提示:Zygote程式 –> SystemServer程式 –> 各種系統服務 –> 應用程式)
  • 大體說清一個應用程式安裝到手機上時發生了什麼
  • 簡述Activity啟動全部過程
  • App啟動流程,從點選桌面開始
  • 邏輯地址與實體地址,為什麼使用邏輯地址?
  • Android為每個應用程式分配的記憶體大小是多少?
  • Android中程式記憶體的分配,能不能自己分配定額記憶體?
  • 程式保活的方式
  • 如何保證一個後臺服務不被殺死?(相同問題:如何保證service在後臺不被kill?)比較省電的方式是什麼?
  • App中喚醒其他程式的實現方式

附;效能調優+前沿技術+NDK技術大綱

最新最全百度,阿里面試題:Java語言+APP開發+效能優化+NDK+Flutter

四、跨平臺開發

  • Flutter開發環境搭建
  • Dart中變數,函式,操作符,異常等語法
  • 初始化列表規則
  • 佈局分析:Linear佈局,彈性佈局,流水佈局
  • Flutter架構與原生程式碼的互動
  • HTML&CSS&JavaScript 實戰
  • WordPress搭建網站專案實戰
  • 前端Vue架構
  • 前端樣式開發
  • Weex內建能力
  • Weex原生應用
  • Weex擴充套件框架
  • WeexUI架構
  • 介紹你做過的哪些專案
  • 都使用過哪些框架、平臺?
  • 都使用過哪些自定義控制元件?
  • 研究比較深入的領域有哪些?
  • 對業內資訊的關注渠道有哪些?
  • 最近都讀哪些書?
  • 有沒有什麼開源專案?
  • 自己最擅長的技術點,最感興趣的技術領域和技術點
  • 專案中用了哪些開源庫,如何避免因為引入開源庫而導致的安全性和穩定性問題
  • 實習過程中做了什麼,有什麼產出?

附;跨平臺技術腦圖,Flutter視訊合集

最新最全百度,阿里面試題:Java語言+APP開發+效能優化+NDK+Flutter


最新最全百度,阿里面試題:Java語言+APP開發+效能優化+NDK+Flutter

五、總結

由於題目很多,本文知識點展開已經太長,整理的面試題答案,後面會分專題分難度等級,以文章的形式分享給大家。如果你正在找工作,建議逐個過一遍,不懂的可以群裡提問討論,但是請先自行上網查閱相關知識點,對於已經掌握的可以忽略以節省時間。

歡迎從事移動開發3到5年的朋友關注我,我正整理高階的系統提升資料,希望幫更多人突破目前的技術瓶頸進入大廠發展。而想進大廠,要先自身達到大廠的技術水平要求。行百里者半九十,我希望你能堅持到最後。


相關文章