面經整理-2019.8.12

來源:
@構造函數(秋招offer:百度上海、拼多多)html

7.20筆試;8.8遠程電話面試一小時(30基礎30算法)

@程序猿小哲(春招實習)java

攜程,4月23號北京現場面試, 一輪技術面(一個半小時), 上來面試官先讓給了一張紙,上面有一些題目,讓寫一下。 等了一週,4.30號收到郵件說技術面試已經經過,讓作了一套測評題目,5月6號上午終於收到了offer call

美團面試:電腦面試,牛客網的視頻面試功能,由於要手撕代碼python

@趕忙給我個offer呀(非科班今年秋招,持續跟蹤);秒殺項目
百度、猿輔導


手撕算法(白板編程Google doc)

1.求一維數組極大值的索引(假設A[0]以前和A[n-1]以後都是負無窮)

2.二分法優化到O(lgn)複雜度mysql

3.二維數組的極大值索引(二分法)linux

二維數組的最優時間複雜度是O(n),在二分法的基礎上還有不少能夠優化的地方
求二維數組極大值的O(n)複雜度算法請見博客:
blog.csdn.net/m0_37747541…

4.判斷鏈表有環(頭條)
golang

//用哈希表
import java.util.*;
public class Solution {
    public boolean hasCycle(ListNode head) {
        Set set = new HashSet<>();
        while(head!=null){
            if(set.contains(head)){
                return true;
            }else{
                set.add(head);
            }
            head=head.next;
        }
        return false;
    }
}複製代碼

5.判斷有環鏈表的環的入口(明明知道是劍指offer原題,可是沒想起來TAT)(頭條)面試

//用哈希表
public class Solution {
    public ListNode detectCycle(ListNode head) {
        Set set=new HashSet<>();
        while(head!=null){
            if(set.contains(head)){
                return head;
            }else{
                set.add(head);
            }
           head=head.next;
        }
        return null;      
    }
}複製代碼

6.反轉鏈表(頭條)——反轉部分鏈表怎麼作?redis

頭插法
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode newList=new ListNode(-1);//建立出來的單節點它的下一個節點是null
        while(head!=null){
            ListNode next=head.next;
            head.next=newList.next;
            newList.next=head;
            head=next;
        }
        return newList.next;
    }
}複製代碼

7.大量數字如何排序(數字量遠大於內存)算法

8.100萬整數輸出top100spring

9.大整數求和

10.二叉樹求最長路徑(實際上是把二叉樹當作圖,求圖中最長的路徑)

11.阻塞隊列,隊列長度有限,隊列爲空時消費者阻塞,隊列滿時生產者阻塞。要求線程安全

12.兩個鏈表合併(攜程)

13.臺階跳問題(青蛙一次能夠跳一個或者兩個臺階,問有多少種方法,劍指offer原題),比較簡單就不說了(美團實習)

14.買股票的問題,能夠任意次買入賣出最大收益是多少;若是隻能買入賣出一次收益是多少(說思路的時候表述不是太清楚,弄的面試官一直以爲個人思路有問題,後來寫出來代碼才發現是我表述的有問題)

15.最小連續子序列(美團)

16.實現一個字符串全排列 ,可能有重複的,要去重,我直接一個set完事了。。人家說,能不用set嘛。。而後我不會。。人家提示大半天,我也沒想起來。(猿輔導)

17.實現一個collection,提供append 和 pull方法 pull裏返回這裏面的最大值,而且刪除。。我直接一個max()+remove()出來了。。人家說,能不能不用python內置函數,那我說直接遍歷找最大值。。人家說還能不能優化,學過的數據結構有啥能用。 最後提示我用堆,而後我就開始建堆,結果人家說不須要每次都建呀,由於我用的是下浮,我也只寫過下浮。上浮沒寫過,人家最後讓用上浮,吭哧吭哧把上浮寫出來了,最後可能沒時間了,人家說你就說一下思路吧。。貌似最後時間複雜度沒有達到他想要的。。

18.找一個數組中最大的元素,能說出幾種方法(我說直接循環一次不就好了嘛,問我還有沒有別的,我說python直接max,或者排序一下?

19.兩個棧實現一個隊列(問怎麼保證元素是按照你想要的順序放的??我就說難道併發狀況下是加鎖的意思嘛?面試官也沒說啥,就下一個了)

20.字符串逆序,能想到幾種方法,(最後經提示,主要想讓我用棧)

21.給你兩個文件(字符串形式的)如何找出他們之間的不一樣地方?

Java基礎

1.抽象類和接口如何選擇

2.Java中的值傳遞和引用傳遞;java傳遞的是值仍是地址,若是兩個變量引用的是一個複雜的對象,其中一個變量對對象進行修改,會影響到另一個的變量的結果嘛?

3.基本數據類型 和包裝類

4.string 爲何不可變,final能夠修飾什麼

5.建立對象有幾個方法(四種,問我反射和自省的區別,我說我沒據說自省。。。)

Java集合

1.說一下hashmap(這個題都問爛了,我說到1.7hashmap裏的put操做時候,可能我話太多了,不讓我說了,說這個問題過吧)

2.還問了一致性哈希是什麼,有什麼好處

3.arraylist和linkedlist

4.array和arryalist

5.hashmap介紹一下,線程安全嗎?怎麼辦?(期間問了,put操做,鏈表裏判重是是根據key仍是value,怎麼判斷的,我應該是回答錯了,說根據value判斷,應該是根據key判斷,用equal判斷,看來理解仍是不深呀 特意找出來了源碼看了一下, if (e.hash == hash && ((k = e.key) == key || key.equals(k))))爲何線程不安全(1.7擴容由於頭插成環,或者put覆蓋相同的元素啥的),怎麼辦?我就說了hashtable或者直接鎖住,而後還能夠用chp,我就主動介紹chp1.7和1.8的區別啥的,原本我想往synchronized那方面引,繼而介紹鎖升級,和lock的區別,而後volatile,threadlocal啥的(原本想介紹一下底層原理啥的)我就在那說,面試官也不打斷我,我說一會他也不提問,我就沒再說下去了,最後就問了一下chp和synchronizedhashmap有什麼不同的地方。

Java虛擬機

1.java中的四種引用以及區別?分別在何時使用?java的四種引用說一下,軟引用和弱引用用在什麼場景(以前看到過,可是忘了是啥應用場景了)(查了一下答案,假若有一個應用須要讀取大量的本地圖片,若是每次讀取圖片都從硬盤讀取,則會嚴重影響性能,可是若是所有加載到內存當中,又有可能形成內存溢出,此時使用軟引用能夠解決這個問題。弱引用能夠用來實現一些規範化映射,如WeakHashMap,當key或者value再也不被引用時能夠自動被回收。)

1.強引用
2.軟引用
3.弱引用
4.虛引用
5.區別
6.使用場景

2.說一下jvm 的各個區域和堆上垃圾回收?(我就講了一下堆分區,minor gc和full gc,那一系列東西,當我講到老年代回收G1的時候,他說不用講這麼細了,就問了一下垃圾回收用的方式(年輕代-複製,老年代cms是標記清除)這個題就過了)感受面試官很着急問,一個問題接着一個問題走

3.類的加載(加載,驗證,鏈接,準備,初始化,我最後準備和初始化那個地方有點記不清了,畢竟好多天沒看了,就說這個地方忘了),而後問了一下實例化和初始化啥區別

4.User user = new User()如何在內存裏存

Java多線程

1.線程和進程

2.線程池的使用,爲何用,如何加鎖

3.說一下建立線程的幾種方式,4種,runnalbe和thread什麼區別,runnable和callable啥區別,線程池的參數,爲何要有等待隊列嗎,直接建立非核心線程很差嘛?(這個地方我不知道,瞎扯的)

4.建立線程的幾種方式,爲何要用線程池

5.線程的狀態

6.死鎖是啥(我說我昨天剛寫了一個能夠致使死鎖的程序,就把那個程序主要過程說了一下,而後又主動介紹了一下活鎖)

MySQL

1.說說b樹和b+樹

www.cnblogs.com/George1994/…
2.數據庫的併發安全問題、怎麼避免

3.數據庫索引做用,有哪些,怎麼用

4.寫sql,很久沒寫了,沒答上,太應該了,明明很簡單。。還問了一個表有3個行,另外一個表有四行啥的,兩個錶鏈接最多有多少項,我都不知道啥意思。。。涼了

5.Mysql的隔離級別,幻讀和不可重複讀的區別,怎麼避免的幻讀的,nextkey鎖加在哪裏了

6.索引的原則,何時能夠加索引(我就說常常要查的要加索引,並且得是重複度低的,他問還有什麼狀況嘛?我就不知道了。。。還問我怎麼看重複度,我說mysql有個參數,可是名字給忘了。。。)

7.like %zhang 用到索引了嘛?

8.看我代碼能力題,寫個java bean,有兩張表每個父親表,一個兒子表,而後打印路徑啥的,我都沒明白題,說給我5分鐘想象,要僞代碼。。。放棄了,不會了,沒遇到過這個題。

9.sql方面,給了三個場景,口述該怎麼寫sql,一開始想複雜了,各類left join group by啥的 經提示發現 就是最簡單的where 就好了 (基本沒咋寫過sql,面試官有提示還,勉強答對了)

10.事務的理解,能夠用在什麼地方(我說了acid啥的,而後是怎麼實現的,想往日誌和鎖上引,結果面試官不往那方面走,就問了一下事務能夠幹嗎用。。。我說交易下單扣費啥的)

11.若是想查找一個文件,能夠用什麼方法,說出能想到的各類(我就想到了grep,後來試探性的問難道是bfs,dfs,仍是b+樹?由於我沒用java查文件。。)

Redis

redis面試問題(一)www.nowcoder.com/discuss/926…

redis面試問題(二)www.nowcoder.com/discuss/926…

設計模式

1.單例模式有幾種?

有7種。
1.懶漢模式:比較懶,在類加載時不建立實例,所以類加載速度很快,但運行時獲取對象的速度相對較慢
2.餓漢模式:在類加載時就完成了初始化,因此類加載較慢,但獲取對象的速度快。
3.懶漢模式線程不安全
4.懶漢模式線程安全
5.餓漢模式
6.變種的餓漢模式
7.雙重檢查加鎖
8.靜態內部類
9.枚舉類型

2.設計模式的開放封閉原則你是怎麼理解的,有什麼好處?

3.生產者消費者簡單歸納

4.阻塞隊列了解嗎(我說具體那幾個名稱記不清了,不過我說我昨天寫生產着消費者模式的時候用到了阻塞隊列)

5.瞭解的設計模式(我就主動說了雙重校驗的單例,加了volatile,鎖住了類,雙重判斷啥的),別的設計模式由於還沒複習,就說工廠和生產者消費者啥的,怕我說別的只知道名字,他一問具體我答不上來。

計算機網絡

計算機網絡基礎知識彙總www.nowcoder.com/discuss/214…

操做系統

1.用戶態和內核態

內核態:cpu能夠訪問內存的全部數據,包括外圍設備,例如硬盤,網卡,cpu也能夠將本身從一個程序切換到另外一個程序。
用戶態:只能受限的訪問內存,且不容許訪問外圍設備,佔用cpu的能力被剝奪,cpu資源能夠被其餘程序獲取。
爲何要有用戶態和內核態?
因爲須要限制不一樣的程序之間的訪問能力, 防止他們獲取別的程序的內存數據, 或者獲取外圍設備的數據, 併發送到網絡, CPU劃分出兩個權限等級 -- 用戶態和內核態。 www.cnblogs.com/maxigang/p/…

2.java程序,主進程須要等待多個子進程結束以後再執行後續的代碼,有哪些方案能夠實現?(百度)
3.shell命令找出查看進程

4.Linux系統負載怎麼查看

5.考linux的具體操做 linux查日誌中的某個內容,而且是第幾大,不會。。。

6.linux用過嘛?說說複製和重命名命令?最後我補充了一大堆以前記得命令(ls,grep,top,ps,pstree,tail,cat,more,less,chmod,cd,mv),主要就是爲了看我用沒用過linux。

框架

1.問了一下spring,spring bean有幾種建立方式,生命週期,spring aop和ioc

2.分佈式最終一致性和強一致性

3.cap裏咱們能夠不要p嘛?(這是給我挖坑嘛,都分佈式了,不要p怎麼行,只能在a和c裏選呀)

4.框架方面,如何統計controller層全部方法的調用時間(我不會)

系統設計&情景題

1.微博上,大V發微博點贊迅速上升,該如何統計點贊數量?說出詳細的系統設計

2.設計一個電商企業的架構。說思路。

3.情景題,好比淘寶統計這個頁面有多少訪問量(沒答上)

智力題

1.智力題,2我的拿一百個東西,一我的一次能拿1-5個,有沒有必勝的方法?(記得在哪裏看過,可是忘了,沒答上,我只記得要是最後能剩下6個,前面那我的就能贏,而後問我怎麼才能剩下6個呢,我想了一下,放棄了,不會)說一面的就問的這個,你沒答上,此次我再問你一下,看此次會了嘛?我說會了。。(百度)

自我介紹&項目

1.除了java還有沒有其餘熟悉的語言?

主要熟悉的語言是Java,golang語言我知道XXX(提早突擊一下),沒有深刻了解。若是能拿到offer願意轉語言。

2.對簡歷上的項目開始詢問了,由於簡歷上的項目寫的比較多,因此面試官挨個問了一遍項目,大約面試了一個多小時。

3.先自我介紹,而後問了問簡歷上的項目以及項目中碰到的問題及如何解決得,面試的小哥哥一看就特別認真,我說的時候他會關注項目設計的每一塊是否合理。項目中由於說用到了redis數據庫,就問我redis數據庫的優點,爲何選擇redis,是怎麼操做的,redis數據庫支持哪些數據類型。

4.看到我項目裏面寫到了用過線程池,就問我線程池的實現原理,任務隊列的做用,中間有些地方答得不太好,面試官就結合美團的使用場景引導我怎麼實現,學到了不少

5.直接問我項目裏的問題,問我優化了tomcat的參數,問依據的是什麼(???我給忘了,只記得應該優化這個,具體參數忘了)

6.項目裏你有什麼收穫,(我就說,redis和mysql同步的問題,若是隻讓redis庫存減,mysql不減,可是redis不可靠,他說redis咋就不可靠了,沒有持久化機制嘛?我說有呀,可是耗性能呀,因此用mq進行消息同步對吧,而後介紹了一下rocketmq的事務性消息,他問我你知道底層咋實現的嘛 ?很差意思,不知道。。。)

7.先自我介紹,說看你這個專業跟計算機一點關係都沒有呀,爲啥要轉計算機呢,學了多久呀,怎麼學的,而後介紹項目(他說我才學了半年,時間有點短,而且項目沒有實際上線,只是一個小demo)

8.項目裏redis如何保證高併發同時獲得數據問題?(蒙了,redis不是單線程嘛?怎麼會有這個問題?我就不會了)

9.Rokctmq的事務性消息怎麼用的?(主要想問我redis咋回滾,我說mysql能夠回滾,redis不能回滾呀,那他說那你這個不就出問題了嘛庫存不一致。。而後最後我才說,redis的回滾是我本身手動把庫存數據加回去的,原來他一直想問個人這個)

10.令牌桶介紹一下吧

11.看我優化了tomcat的keepalive,問我知道tcp的keepalive嘛,我給達成了http的keepalive,而後人家說是tcp的,問我知道tcp嘛。。我說不知道。。尷尬了

12.問我redis做爲緩存裏存的是什麼(由於兩月以前的項目了,都給忘了。。。我說的是所有商品信息,如今一想貌似就是商品的數量的信息吧),還問我怎麼看優化後的性能提高嗎,我說就用Jmeter壓測看tps,比以前提升了。。。。
基礎部分的順序我沒記住,全憑印象寫吧

13.介紹項目(慕課網上找的秒殺項目,感受挺low的,大佬勿噴)(第一次介紹項目,很久沒看了,講的有點磕磕絆絆的)項目裏redis用的哪一種數據結構。先後端分離是什麼意思。怎麼防止頁面連續點擊按鈕不停的提交(我說好像沒有考慮這個問題,實際上是我忘了應該)。如何面對高併發。如何防止超賣

相關文章
相關標籤/搜索