1. 程式人生 > >Android菜鳥提升之路---BAT大廠的面試題(Android+Java)

Android菜鳥提升之路---BAT大廠的面試題(Android+Java)

首先宣告 :發此部落格是因為在後續我會學習這些面試用到的題目,一為了方便自己以後找工作複習方便,二也可以方便大家一起學習,這些面試題是我從鴻洋的部落格中轉載來!

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容器類 http://alexyyek.github.io/2015/04/06/Collection/

  • 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執行緒安全總結

    http://www.iteye.com/topic/806990

  • 深入理解java記憶體模型系列文章

    http://ifeve.com/java-memory-model-0/

執行緒狀態:

  • 一張圖讓你看懂JAVA執行緒間的狀態轉換

    https://my.oschina.net/mingdongcheng/blog/139263

鎖:

  • 鎖機制:synchronized、Lock、Condition

    http://blog.csdn.net/vking_wang/article/details/9952063

  • Java 中的鎖

    http://wiki.jikexueyuan.com/project/java-concurrent/locks-in-java.html

併發程式設計:

  • Java併發程式設計:Thread類的使用

    http://www.cnblogs.com/dolphin0520/p/3920357.html

  • Java多執行緒程式設計總結

    http://blog.51cto.com/lavasoft/27069

  • Java併發程式設計的總結與思考

    https://www.jianshu.com/p/053943a425c3#

  • Java併發程式設計實戰-----synchronized

    http://www.cnblogs.com/chenssy/p/4701027.html

  • 深入分析ConcurrentHashMap

    http://www.infoq.com/cn/articles/ConcurrentHashMap#

2Android面試題

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的作用與理解

相關推薦

Android提升---BAT大廠試題Android+Java

首先宣告 :發此部落格是因為在後續我會學習這些面試用到的題目,一為了方便自己以後找工作複習方便,二也可以方便大家一起學習,這些面試題是我從鴻洋的部落格中轉載來!java面試題熟練掌握java是很關鍵的,大公司不僅僅要求你會使用幾個api,更多的是要你熟悉原始碼實現原理,甚至要

Linux起飛【二】Linux基本常識

copy 聯合 das 安裝第三方 所有組 以及 改進 伯克利 版本 一、Unix操作系統基本常識 1.什麽是Unix? Unix是一個計算機操作系統,是一個用來協調、管理和控制計算機硬件與軟件資源的控制程序。 2.Unix操作系統的特點? 多用戶與多任務。多用戶表示在同一

Linux起飛【七】文件合並、歸檔和壓縮

div 結果 執行 img src gzip 圖片 com .com 一、文件合並操作 1.覆蓋符號與追加符號 a)“>”代表將左邊文件的內容覆蓋右邊文件的內容,如果右邊文件不存在則創建這個文件 b)“>>”代表將左邊文件的內容追加到右邊文件中,如果右邊文

程式設計到大佬:C語言程式十二

第十二天學習精要 遞迴初步 遞迴 一個函式,自己呼叫自己,就是遞迴。 # include <iostream> using namespace std; int factorial(int n) // 函式返回n的階乘 { if (n ==

【linux--學習】fread和fwrite

fread 函式名: fread 功  能: 從一個流中讀資料 用  法: int fread(void *ptr, int size, int nitems, FILE *stream); 參  數:用於接收資料的地址(ptr)          單個元素的大小(siz

成長Thread的SetDeamon()守護執行緒原始碼分析(4)

    相信大家的童年都有過《西遊記》的陪伴,唐僧四人一起去西天取經的故事肯定也是耳熟能詳,在西遊記裡唐僧作為整個取經隊伍的領導者,而徒弟們跟隨師傅指引的方向去前進,這裡我們可以把取經當成是Thread執行的終點,師傅作為被守護執行緒,徒弟作為守護執行緒,當取完經後或者師

成長Thread的setPriority()設定優先順序原始碼分析(5)

我們知道執行緒在執行start()之後,如果沒有cpu執行權的話,它是在runnable狀態,而不會進入到running狀態或者exception狀態,而且各個執行緒執行的結果次數也有可能不會是一樣的,這體現了多執行緒的不確定性,那麼我們可以通過設定優先順序來讓執行緒執行

成長Thread的join()原始碼分析(5)

有些業務要求我們當所有執行緒任務執行完後,做下記錄或者是做別的事,那麼我們在Thread裡面是應該怎麼實現呢? 今天我們來看Thread的join(); public final void join(long millis)     等待該執行緒終止的時間最長為 mi

Python,成長,Turtle庫

turtle庫的基本介紹turtle庫概述turtle(海龜)庫是turtle繪圖體系的python實現 turtle繪圖體系:1969年誕生,主要用於程式設計入門的一種繪圖方式,是python語言標準庫之一,入門級的圖形繪製函式庫。標準庫:Python計算生態 = 標準庫

XRMelo的起飛

切正題 我們都知道在使用alertView actionSheet等系統控制元件,他們的共同的特性就是會有一層灰色的view遮蓋了與當前頁面的互動.並且點選控制元件以外的灰色區域,會回到之前的頁面.

ASP.NET MVC4 專案改造示例程式碼擴充套件使用者資訊管理

模板建立示例專案 MVC的基礎內容我就不說了,入門建議看看官方的MvcMovie示例。       開啟VS2012,【新建專案】,選擇【ASP.NET MVC 4 Web應用程式】,名稱叫MyMvc(這隨便取,但常規是公司.專案的名稱空間),按【確定】,模板選【I

android筆記UI執行緒阻塞

最近在學習Android,有些還是需要記錄下來,方便以後查詢 首先 當一個應用程式啟動之後,android系統會為這個應用程式建立一個主執行緒。這個執行緒非常重要,它負責渲染檢視,分發事件到響 應監聽器並執行, 對介面進行輪詢的監聽。因此,一般也叫做“UI”執行緒。andr

嵌入式Linux學習

1.裝置驅動的作用 計算機系統由硬體、軟體組成,而對於實際開發來說,硬、軟體間耦合性應儘量低,即應用開發工程師不需關心 硬體,而硬體開發工程師無暇顧及軟體。為了降低硬、軟耦合性,產生了裝置驅動工程師。 2.作業系統驅動設計架構 在無作業系統時,硬體工

小程式填坑——文字超出部分隱藏已解決

一直使用之前的版本沒有問題,今天在首頁顯示“定位”的地方不能生效,先上程式碼我再說原因 /*文字超出省略*/ { text-overflow: ellipsis; white-space: normal; overflow: hidden; display: -web

架構師成長 5 --如何獲取知識學習境界方法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

毛毛Django修煉3——Django基本框架系統模板

毛毛Django修煉之路3——Django基本框架(系統模板) 一、基本語法 1、變數相關 {{name}} 直接呼叫傳遞的變數 {{name|length}} 呼叫方法 {{name|default:"預設值"}} 呼叫方法 2、邏輯相關 1、if判斷:

自學selenium+python基於web的自動化功能自動化

本人是自動化測試初學者,真正的菜鳥一隻。 實際入坑測試接近2年(截止發文之前)。對自動化測試沒有太深入的瞭解,寫這些只是做個鋪墊,因為能看這篇文章的基本都是小白或者菜鳥。說到這裡,不再繼續侃,直接上菜。 為什麼學自動化,because make so much money!那

史上最全 BAT 大廠試題整理

主要分為以下幾部分:(1)java面試題(2)Android面試題(3)高階技術面試題(4)非技術性問題&HR問題彙總1java面試題熟練掌握java是很關鍵的,大公司不僅僅要求你會使用幾個api,更多的是要你熟悉原始碼實現原理,甚至要你知道有哪些不足,怎麼改進,還有

架構師成長(5)--如何獲取知識學習境界方法

哲學家常思考的問題:" 我是誰?"" 我從哪裡來?"" 要到哪裡去?不只是哲學家,我想每個人都有自己對這三個問題的認知。 如果我們要成為架構師,我們自己要面臨的三大問題: 找準自己定位:我是誰?在哪裡? 怎樣做好架構師:我要做什麼? 如何搭建架構師知識體系:我該怎麼做?

.Net轉Java自學—SpringMVC框架篇四校驗

基本 row str 出錯 edi otn basename value string SpringMVC使用Hibernate的校驗框架validation(和Hibernate沒有關系)。 頁面提交請求的參數,請求到Controller方法中,使用validation