美團面經(jīng)合集

面經(jīng)1

  1. 給一個目標數(shù) t,找出數(shù)組中和為t的組合(集合)有多少?

這個是很典型的貪心算法問題,代碼如下

public class Mj1 {
    //貪心算法,非最優(yōu)解
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()){
            int n = sc.nextInt();
            int[] arr = new int[n];
            for (int i = 0; i < n; i++) {
                arr[i] = sc.nextInt();
            }
            int target = sc.nextInt();
            System.out.println(Arrays.toString(getTypes(arr,target)));
        }
        sc.close();
    }

    private static int[] getTypes(int[] arr, int target) {
        int[] res = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            if(target>arr[i])
                break;
        }
        int index = 0;
        while (target>0&&index<arr.length){
            if(target>=arr[index]){
                target-=arr[index];
                res[index]++;
            }else
                index++;

        }
        return res;
    }
}

求集合的算法暫時還沒想到,如果可以重復使用某一個呢?求解~

  1. 面向?qū)ο蟮暮锰幒捅锥?/li>

好處:基本將繼承、封裝、多態(tài)講清楚就好
弊端·知乎

  1. JMM,volatile關(guān)鍵字及其使用場景

JMM...

  1. Http協(xié)議的get、post和delete區(qū)別。

  2. Linux命令,怎么查看cpu使用情況,cpu load的值代表啥。

查看cpu使用情況:top、cat 和free cpu load的值代表cpu的利用率

  1. tcp-ip模型與osi模型的區(qū)別

面經(jīng)2

1.linux信號機制如何實現(xiàn)的?寫一下偽代碼?
解答:Linux信號(signal) 機制分析
2.電腦開機過程
解答:阮一峰:計算機是如何啟動的
3.printf是怎么實現(xiàn)的?

基本上倒著來說就是printf->sprintf->用戶級別的puts->sys_puts->puts->putchar方法

4.On求鏈表中間結(jié)點

維護兩個指針,一個每次走一步,一個每次走兩步,走的快的指向null的時候,此時慢的就處在mid節(jié)點。

public class Mj2 {
    static class ListNode{
        int val;
        ListNode next;

        public ListNode(int val){
            this.val = val;
        }
    }

    public ListNode getMid(ListNode head){
        ListNode quick = head;
        ListNode slow = head;
        while (quick!=null){
            if(quick.next!=null){
                quick = quick.next.next;
            }else {
                break;
            }
            slow=slow.next;
        }
        return slow;
    }
}

5.瀏覽器訪問meituan.com的過程?

1.在瀏覽器輸入meituan.com
2.DNS把meituan.com解析成IP,如果用戶輸入了端口號,則使用用戶輸入的端口號,否則使用默認的80端口。在解析過程中,DNS會首先通過緩存進行查找,依次按照瀏覽器緩存-操作系統(tǒng)緩存-路由器緩存-ISP DNS緩存的順序。如果緩存中都沒有記載相應(yīng)的IP地址,那么DNS服務(wù)器將按照根域-頂級域-二級域-…的順序進行遞歸查找,并返回查找結(jié)果。
3.瀏覽器向服務(wù)器發(fā)送HTTP請求
4.服務(wù)器返回一個永久重定向響應(yīng)(code:301),即把meituan.com重定向成www.meituan.com
5.瀏覽器申請連接重定向后的地址
6.服務(wù)器響應(yīng)請求,并開始向瀏覽器返回數(shù)據(jù),如果資源路徑不存在,那么會返回404錯誤
7.如果6中返回的是頁面,根據(jù)頁面的外鏈URL,再次進行獲取,然后瀏覽器根據(jù)資源類型進行網(wǎng)頁渲染,將網(wǎng)頁展示給用戶并響應(yīng)用戶的操作,在這個過程中操作是同步進行的。

6.socket是什么?端口是什么,兩者有什么關(guān)系

三者從本質(zhì)上來說沒有可比性,
  socket則是對TCP/IP協(xié)議的封裝和應(yīng)用(程序員層面上)。
  也可以說,TPC/IP協(xié)議是傳輸層協(xié)議,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸,
  而HTTP是應(yīng)用層協(xié)議,主要解決如何包裝數(shù)據(jù)。
  關(guān)于TCP/IP和HTTP協(xié)議的關(guān)系,網(wǎng)絡(luò)有一段比較容易理解的介紹:
  “我們在傳輸數(shù)據(jù)時,可以只使用(傳輸層)TCP/IP協(xié)議,但是那樣的話,如果沒有應(yīng)用層,便無法識別數(shù)據(jù)內(nèi)容。
  如果想要使傳輸?shù)臄?shù)據(jù)有意義,則必須使用到應(yīng)用層協(xié)議。
  應(yīng)用層協(xié)議有很多,比如HTTP、FTP、TELNET等,也可以自己定義應(yīng)用層協(xié)議。
  WEB使用HTTP協(xié)議作應(yīng)用層協(xié)議,以封裝HTTP文本信息,然后使用TCP/IP做傳輸層協(xié)議將它發(fā)到網(wǎng)絡(luò)上。”
  而我們平時說的最多的socket是什么呢,實際上socket是對TCP/IP協(xié)議的封裝,Socket本身并不是協(xié)議,而是一個調(diào)用接口(API)。
  通過Socket,我們才能使用TCP/IP協(xié)議。
  實際上,Socket跟TCP/IP協(xié)議沒有必然的聯(lián)系。
  Socket編程接口在設(shè)計的時候,就希望也能適應(yīng)其他的網(wǎng)絡(luò)協(xié)議。
  所以說,Socket的出現(xiàn)只是使得程序員更方便地使用TCP/IP協(xié)議棧而已,是對TCP/IP協(xié)議的抽象,
  從而形成了我們知道的一些最基本的函數(shù)接口,比如create、listen、connect、accept、send、read和write等等。
  網(wǎng)絡(luò)有一段關(guān)于socket和TCP/IP協(xié)議關(guān)系的說法比較容易理解:
  “TCP/IP只是一個協(xié)議棧,就像操作系統(tǒng)的運行機制一樣,必須要具體實現(xiàn),同時還要提供對外的操作接口。
  這個就像操作系統(tǒng)會提供標準的編程接口,比如win32編程接口一樣,
  TCP/IP也要提供可供程序員做網(wǎng)絡(luò)開發(fā)所用的接口,這就是Socket編程接口?!?/p>

7.手寫代碼題:一個動態(tài)規(guī)劃,一個dfs(寫了很久。)

8.籠統(tǒng)問題

介紹下在頭條實習都干了什么項目中遇到的難點最近讀了什么技術(shù)書籍?我說了三本,面試官一本一本問,要求介紹具體內(nèi)容你大學期間自己做過的印象最深的一件事答:1、自己寫的ipl成功引導啟動了linux kernel2、修改linux0.11源碼,添加了兩個系統(tǒng)調(diào)用你對你的第一份工作有什么期望你有什么問題要問我?談?wù)勀愕穆殬I(yè)規(guī)劃,和最近在看哪方面的書?

面經(jīng)3

1.TCP的連接和斷開過程(這個比較基礎(chǔ)),深入問了為什么斷開的時候服務(wù)器端不是一次性向客戶端發(fā)完應(yīng)答,而是連續(xù)發(fā)兩次信息?(這個真心不會)

TCP的連接和斷開過程就是三次握手,四次揮手

2.數(shù)學題:0-9999中數(shù)字出現(xiàn)6的個數(shù),(每個數(shù)中出現(xiàn)多個6需要進行次數(shù)累加),要求不能通過編程。

總共有四位數(shù),每位數(shù)的可能分別有10種(0~9)。
每一個位,都會出現(xiàn)0-9的交替,實際上在出現(xiàn)6這個角度,各個位是一樣的。
現(xiàn)在假設(shè)個位固定為6,那么其他的位數(shù)的變化數(shù)量是10 * 10 * 10 = 1000種。
就是說數(shù)字6在個位出現(xiàn)的次數(shù)為1000。
以此類推,數(shù)字6在十位、百位、千位出現(xiàn)的次數(shù)也是1000。
故答案為 4 * 1000 = 4000

4.25匹馬選出跑的最快的3匹馬,最少需要多少次.

七次。思路&證明。
<step1>把25匹馬分為五組進行比賽,每一組都按成績編號,1>2>3>4>5??商蕴恳唤M的4,5,故現(xiàn)在還有15匹馬待選。 這樣已經(jīng)比賽5次。
<step2>把每一組的第一名挑選出來比賽,a1>b1>c1>d1>e1,則d,e組都可以淘汰?,F(xiàn)在還有九匹馬待選。這樣已經(jīng)比賽6次。
<step3> a123 b123 c123 由1和2中步驟知上表中a1一定最快,a2,b1可能可以競爭第二名的位置,a3,b2,c1可以競爭第三名,如此,其余的馬匹被淘汰。讓a2,b1,a3,b2,c1這5匹馬比賽即可確定第二名,第三名。
這樣一共比賽7次。

5.java基礎(chǔ) 垃圾回收機制,講一些算法
解答:java垃圾回收機制
6.hashMap與hashtable 還有并發(fā)集合
解答:徹底搞懂HashMap,HashTable,ConcurrentHashMap之關(guān)聯(lián).

7.http基礎(chǔ)(三次握手,代理,緩存機制,method)

http緩存機制

Android相關(guān)面試題

鴻洋微信公眾號
1.java的數(shù)據(jù)類型

void byte short int long char float double boolean

2.重載和重寫的區(qū)別

詳細對比

重載

1.方法重載是讓類以統(tǒng)一的方式處理不同類型數(shù)據(jù)的一種手段,多個同名函數(shù)存在,具有不同的參數(shù)/類型,重載Overloading是java的一個類的多態(tài)性的一種體現(xiàn)。
2.java中方法的重載,就是在java的同一個類中,創(chuàng)建多個方法,他們具有相同的方法名,但是有不同的參數(shù)和不同的定義,調(diào)用方法時通過傳遞給他們不同的參數(shù)個數(shù)和參數(shù)類型來決定具體使用哪個方法,這個就是多態(tài)性。

  1. 重載的時候,方法名要一樣,但是參數(shù)類型和個數(shù)不一樣,返回值類型可以相同也可以不相同。無法以返回型別作為重載函數(shù)的區(qū)分標準.

重寫

1.父類與子類之間的多態(tài)性,對父類的函數(shù)進行重新定義。如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說該方法被重寫 (Overriding)。在java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類并不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要采用方法的重寫。
方法重寫又稱方法覆蓋。
2.若子類中的方法與父類中的某一方法具有相同的方法名、返回類型和參數(shù)表,則新方法將覆蓋原有的方法。如需父類中原有的方法,可使用super關(guān)鍵字,該關(guān)鍵字引用了當前類的父類。
3.子類函數(shù)的訪問修飾權(quán)限不能少于父類的;

3.抽象類和接口的區(qū)別

抽象類和接口的區(qū)別

4.final關(guān)鍵字可以修飾什么,作用什么

final關(guān)鍵字可以修飾java的類,方法,屬性
1.final修飾類,從而這個就不可以被繼承,例如String,StringBuffer或者System類
2.final修飾方法,這個方法不能被重寫,例如OIbject類的getClass方法
3.final修飾屬性,這個屬性就是一個常量,通常是大寫--即該變量不能使用默認初始化??梢燥@示的賦值,代碼塊,構(gòu)造器。

  1. java權(quán)限的四種不同

public protected private default 區(qū)別

類別 public protected default private
同一個類
同一個包
子類
不同包

6.Android中Handler的作用?

實現(xiàn)異步的消息處理機制。包含線程隊列和消息隊列
1.運行在某個線程上,共享線程的消息隊列
2.接收消息、調(diào)用消息、派發(fā)消息和處理消息
3.實現(xiàn)消息的異步處理
具體內(nèi)容

7.Activity生命周期 和四種啟動方式

四種啟動模式的應(yīng)用,試舉例。

  1. Fragment的生命周期


更多可見洋神博客

9.listView優(yōu)化

  • 重用convertView
  • 使用ViewHolder
  • 圖片三級緩存
  • 監(jiān)聽滑動事件,滑動的時候不加載數(shù)據(jù)
  • 開啟硬件加速
<activity android:hardwareAccelerated="true" ...>

10.Android內(nèi)存泄漏,舉個例子

Java內(nèi)存泄漏引起的主要原因:長生命周期的對象持有短生命周期對象的引用就很可能發(fā)生內(nèi)存泄漏
Java內(nèi)存分配策略:
靜態(tài)存儲區(qū):又稱方法區(qū),主要存儲全局變量和靜態(tài)變量,在整個程序運行期間都存在
棧區(qū):方法體的局部變量會在棧區(qū)創(chuàng)建空間,并在方法執(zhí)行結(jié)束后會自動釋放變量的空間和內(nèi)存
堆區(qū):保存動態(tài)產(chǎn)生的數(shù)據(jù),如:new出來的對象和數(shù)組,在不使用的時候由Java回收器自動回收

Android中內(nèi)存泄漏的例子:

  • 單例造成的內(nèi)存泄漏: 在單例中,使用context.getApplicationContext()作為單例的context
    匿名內(nèi)部類造成的內(nèi)存泄漏:由于非靜態(tài)內(nèi)部類持有匿名外部類的引用,必須將內(nèi)部類設(shè)置為static
  • Handler造成的內(nèi)存泄漏:使用static的Handler內(nèi)部類,同時在實現(xiàn)內(nèi)部類中持有Context的弱引用
  • 避免使用static變量:由于static變量會跟Activity生命周期一致,當Activity退出后臺被后臺回收時,static變量是不安全,所以也要管理好static變量的生命周期
  • 資源未關(guān)閉造成的內(nèi)存泄漏:比如Socket、Broadcast、Cursor、Bitmap、ListView等,使用完后要關(guān)閉
  • AsyncTask造成的內(nèi)存泄漏:由于非靜態(tài)內(nèi)部類持有匿名內(nèi)部類的引用而造成內(nèi)存泄漏,可以通過AsyncTask內(nèi)部持有外部Activity的弱引用同時改為靜態(tài)內(nèi)部類或在onDestroy()中執(zhí)行AsyncTask.cancel()進行修復

11.說一下Object的常見方法

clone() toString() equals() hashCode(返回對象的hash碼)notify() wait()

12.ArrayList和HashMapt的底層實現(xiàn),擴容原理

ArrayList的底層實現(xiàn)

13.hashCode的意義,怎么重寫HashCode

理解hashCode

14.RecyclerView的緩存機制

RecyclerView解析

15.Android的手勢檢測,事件分發(fā)

android手勢監(jiān)測
Android事件分發(fā)機制

智力題&算法

  1. 給定一個數(shù)據(jù)流,其中包含無窮盡的搜索關(guān)鍵字(比如,人們在谷歌搜索時不斷輸入的關(guān)鍵字)。如何才能從這個無窮盡的流中隨機的選取1000個關(guān)鍵字?

蓄水池問題

  1. 二叉樹前中后按層遍歷,怎么只遍歷某一層數(shù)據(jù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,112評論 25 709
  • 從三月份找實習到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍閱讀 42,814評論 11 349
  • 1 胖子是一個有啤酒肚的瘦子,是我初中三年最好的哥門兒,他姓劉,胖子這個外號是初二時我送給他的,他胖起來不是因為能...
    大西瓜二寶閱讀 756評論 0 1
  • 這世上的愛情,或相濡以沫,攜手平凡終老;或相忘于江湖,各自婚娶;或難忘滄海,用盡一生去等待。為了愛情,你會等多久?...
    驚鴻獨舞閱讀 501評論 4 6
  • 少年的記憶里 永遠抹不去的 是那輛搖搖晃晃踽踽而行的驢車 一頭溫順的灰驢 一輛木制的架子車 灰驢的四只蹄子相互交替...
    風雨菩提閱讀 448評論 0 1

友情鏈接更多精彩內(nèi)容