1. 程式人生 > >一篇不錯的面試文章

一篇不錯的面試文章

前言

      打算換個工作,近一個月面試了不少的公司,下面將一些面試經驗和思考分享給大家。另外校招也快要開始了,為在校的學生提供一些經驗供參考,希望都能找到滿意的工作。  

      剛開始面試的幾家公司,就是備受各種打擊、就是一頓狂問,結果答上來的問題沒幾個,開始給自己的信心造成了一定的影響,後來經過調整後,又恢復到了信心滿滿的狀態。一方面是工作經驗有限,另一方面是沒有進行系統的複習。後者佔主要地位。所以如何複習好技術要點是找到好工作的必要前提(但也有很大一部分的運氣成分在裡面)。對於應屆生而言,由於在校能學的技術有限,所以在開始面試完幾家公司後,感覺備受打擊是很正常的,這時一定不要灰心,要從每次面試中總結自己的不足,把自己不會的知識都彌補上,到後來你就會發現,找工作其實沒那麼難的,問來問去就那些東西。

      我也不具體說哪家公司的面試,那樣對公司不好。首先,總結一些最主要的知識點;然後,分析部分知識點;最後,列出能夠回憶起來的面試題和筆試題。希望對大家有所幫助。

重點知識

   由於我面試的Java開發工程師,針對於JAVA,需要理解的重點內容有:

       JVM記憶體管理機制和垃圾回收機制(基本每次面試都會問,一定要搞得透徹)

       JVM記憶體調優(瞭解是怎麼回事,一般做專案過程中使用較多)

       設計模式(熟悉常見設計模式的應用場景,會畫類圖,實在不行背幾個也是有用的)

       多執行緒(每次都會問,包括執行緒和程序、執行緒狀態、執行緒併發的操作等,需要深入複習)

       JAVA集合類框架(理解框架圖、HashMap、ArrayList、HashSet等的關係和區別,其中HashMap的儲存機制幾乎每次都有問)

       JAVA的異常處理機制(異常的分類、常見的異常有哪些、Try catch finally的使用)

       JVM執行機制(理解JVM是如何執行的)

       Linux基礎(面試筆試中對linux也有一定的要求,建議最好搭建一個linux虛擬機器,並練習常用的命令)

資料結構和演算法

     常見的排序演算法就不說了,需要理解其原理和會寫程式碼,還有時間空間複雜度也要知道

     佇列、棧:需要理解其存取結構,並能在某些場景下使用

     二叉樹:樹的遍歷、樹的深度、按層次輸出、平衡二叉樹、逆序列印樹等

     連結串列:逆序、合併兩有序的連結串列、判斷連結串列是否又環、連結串列倒數第K個元素等

     字串:KMP演算法、動態規劃(這個是重點,需要好好理解動態規劃,常見的題有:求解最長迴文子串、求解最長公共子串等)

     海量資料處理:現在好多大公司都會問海量資料的處理,所以需要掌握常見的處理方法,比如Bit-map、分而治之、hash對映等,可以百度看看相關的文章,加深理解

資料庫相關(資料庫是面試的重點,每家公司都會問)

     最基本的資料庫CRUD操作要熟悉,能夠根據表寫出需要的SQL語句

     事務、零時表、索引、表鎖、行列鎖、檢視、儲存過程等都要深入理解

     網際網路公司處理的資料量都很大,所以有必要對資料庫優化和大資料的處理進行了解和熟悉

     建議看看Nosql和Redis等非關係資料庫相關的書籍和資料

開源框架

     像SSH等的開源框架在面試過程中問的很少,但是也是有必要了解SSH的執行原理和使用。面試主要考察的是基礎,所以更加偏向於考察資料結構、演算法、資料庫、JAVA基礎知識等。所以,如果你時間有限,可以把精力放在基礎知識的學習和複習上,如果你時間充裕,可以學習和複習開源框架相關知識。對於開源框架:最好還是看看原始碼,對自己的好處是很大的。

個人建議

     上面比較詳細地列出和分析了最近面試過程中的問題,由於時間長久,不可能全部都回憶起來,但是大體上相差不大。對於面試,個人的一些建議:

     (1)心態要放好,不能著急。不要看到被人拿到offer,自己沒有就抱有心裡壓力,其實工作誰都可以找到,就看滿意不滿意,所以著急也是沒有用。

     (2)身體很重要。不要熬通宵複習、學習,把身體搞垮了得不償失。保持良好的睡眠。

     (3)善於總結面試中的問題。每一次筆試、面試完後,需要進行總結,將自己不會的知識點一定要搞清楚,如果不搞清楚,下次還有可能會問的。其實找工作的過程就是積累知識的過 程,所以善於總結很重要。

     (4)不要盲目投遞簡歷。不要看見大公司就投遞,也不要投遞自己不想去的城市,那樣就是在瞎折騰,公司就算要你了,你也不去,還不如把時間放在自己想去的地方呢。

     (5)複習需要持續。由於記憶過後會遺忘,所以複習過程中,需要反覆進行,一邊理解一邊記憶,達到閉上眼就能看見知識的體系結構。

最後,希望找工作的朋友都能找到一份滿意的工作。下面具體列出了面試常見的知識點,供大家參考,希望對你有所幫助。

主要詳細知識點

常用演算法考察

氣泡排序

快速排序

插入排序

希爾排序

歸併排序

堆排序

桶排序

動態規劃

最長公共子串

最長迴文子串

陣列的最大k個值

數字的最大連續子陣列之和

左旋轉字串

字串匹配演算法:KMP演算法

二分查詢

連結串列

單鏈表逆序

兩個有序單鏈表合併

兩個單鏈表是否相交

相交處的節點

單鏈表倒數第K個數

單鏈表排序

棧和佇列

兩個佇列實現棧

兩個棧實現佇列

一個數組實現棧和佇列

前序、中序、後續遍歷

求二叉樹的深度

按層次遍歷二叉樹

判斷二叉樹是否為完全二叉樹

判斷二叉樹是否鏡面對稱

判斷兩顆樹是否相等

卡特蘭數

出棧順序

n個節點構成的二叉樹個數

括號化

設計模式

Java原始碼中有哪些設計模式

常見的設計模式類圖

常見的設計模式的示例:

資料庫

資料庫的crud語句的書寫

資料庫優化策略、如何優化

海量資料優化

事務

事務中鎖分類

事務特性

資料庫表鎖

行列鎖

臨時表

索引

儲存空間

檢視

Linux常用命令(最好實戰)

linux上搭建伺服器

常用的網路埠

Nosqlredis等的熟悉、瞭解

海量資料的處理

Bit-map、分而治之、hash對映、分散式處理(Hadoop)、Trie樹、雙層桶排序等

Java基礎

HashMap的儲存機制(很重要,必看)

Set、map區別

Set、list區別

Arraylist、LinkedList區別

String、Stringbufer、StringBuilder區別

HashSet、LinkedHashSet區別

HashMap、TreeMap、LinkedHashMap

熟悉Java集合類的框架圖

HashMap、ArrayList、StringBuffer、String等原始碼的熟悉

執行緒和程序

執行緒的特性

執行緒的狀態

多執行緒併發的實現

執行緒的建立方式

執行緒池的使用

Java作用域

final、static、native、等特殊關鍵字的使用

Java按值傳遞的過程

重構和過載

抽象類和介面

內部類的使用:匿名內部類、靜態內部類等

Java多執行緒併發、生產者消費者的實現

Java連線資料庫的過程

JVM記憶體管理和儲存機制

JVM垃圾回收機制,垃圾回收演算法

JVM載入類過程

JVM記憶體調優

框架相關

對框架的熟悉:SSH (面試過程中問的很少,像jsp、servlet基本不問)

spring框架組成、AOP、IOC 、用到的設計模式

hibernate執行機制、快取的使用、最好看看原始碼

javaIONIO

Java NIO和IO之間第一個最大的區別是,IO是面向流的,NIO是面向緩衝區的。 java IO面向流意味著每次從流中讀一個或多個位元組,直至讀取所有位元組,它們沒有被快取在任何地方。此外,它不能前後移動流中的資料。如果需要前後移動從流中讀取的資料,需要先將它快取到一個緩衝區。 Java NIO的緩衝導向方法略有不同。資料讀取到一個它稍後處理的緩衝區,需要時可在緩衝區中前後移動。這就增加了處理過程中的靈活性。但是,還需要檢查是否該緩衝區中包含所有您需要處理的資料。而且,需確保當更多的資料讀入緩衝區時,不要覆蓋緩衝區裡尚未處理的資料。

IO流包括位元組流和字元流:

位元組流:對應抽象類為InputStream(輸入流)和 OutputStream(輸出流)。 FileInputStream、FileOutputStream

字元流:對應抽象類為Reader(輸入流)和Writer(輸出流)。BufferedReader、InputStreamReader、 StringReader

java中異常的分類及結構

Java中的異常類,包括內建的異常類以及自定義的異常類,都直接或者間接地繼承至java.lang.Throwable類。在java.lang包中,Throwable類有兩個直接子類:Error類和Exception類,Error類及其子類描述了java執行時系統的內部錯誤和資源耗盡錯誤。出現這樣的錯誤的,除了通知使用者,並接盡力使程式安全地終止之外,沒有更好的辦法。Exception類的層次結構又分為兩個分支:一個分支由RuntimeException派生,另外一個分支包含除RuntimeException類之外的異常類。

執行時異常、非執行時異常

執行時異常:RuntimeException類及其子類異常,如NullPointerException、IndexOutOfBoundsException、classCastException等,這些異常是不檢查異常,程式中可以選擇捕獲處理,也可以不處理。這些異常一般是由程式邏輯錯誤引起的,程式應該從邏輯角度儘可能避免這類異常的發生。

非執行時異常:RuntimeException以外的異常,型別上都屬於Exception類及其子類。從程式語法角度講是必須進行處理的異常,不處理程式不能編譯通過。如IOException、SQLException等以及使用者自定義的Exception異常。

動態代理機制

動態代理可以提供對另一個物件的訪問,同時隱藏實際物件的具體事實。代理一般會實現它所表示的實際物件的介面。代理可以訪問實際物件,但是延遲實現實際物件的部分功能,實際物件實現系統的實際功能,代理物件對客戶隱藏了實際物件。客戶不知道它是與代理打交道還是與實際物件打交道。動態代理主要包含以下角色:動態代理類(以下簡稱為代理類)是一個實現在建立類時在執行時指定的介面列表的類,該類具有下面描述的行為。代理介面 是代理類實現的一個介面。代理例項 是代理類的一個例項。每個代理例項都有一個關聯的呼叫處理程式 物件,它可以實現介面 InvocationHandler。通過其中一個代理介面的代理例項上的方法呼叫將被指派到例項的呼叫處理程式的 Invoke 方法,並傳遞代理例項、識別呼叫方法的java.lang.reflect.Method 物件以及包含引數的 Object 型別的陣列。呼叫處理程式以適當的方式處理編碼的方法呼叫,並且它返回的結果將作為代理例項上方法呼叫的結果返回。

try catch finally的使用

1. finally 裡 始終會被執行到, System.exit(0); 除這種被執行外。
2. 即使try中有return ,也是先執行 return 後面的語句完了之後,不立馬return,而是去執行finally中的語句。

3. 當try中與finally裡,同時出現return , 則只會返回 finally 中的return 結果。
4. finally中的值不能影響try中 即將返回的結果值。
注意: 若finally中沒有return在try或catch中有return,那麼在執行return跟著語句之後,會把語句的結果新開闢一記憶體空間,直接把結果的存放此記憶體空間中。所以,finally中的值不能影響try或catch中即將return的結果。

靜態成員、非靜態成員

(1)類的靜態成員(變數和方法)屬於類本身,在類載入的時候就會分配記憶體,可以通過類名直接去訪問;非靜態成員(變數和方法)屬於類的物件,所以只有在類的物件產生(建立類的例項)時才會分配記憶體,然後通過類的物件(例項)去訪問。

(2)在一個類的靜態成員中去訪問其非靜態成員之所以會出錯是因為在類的非靜態成員不存在的時候類的靜態成員就已經存在了,訪問一個記憶體中不存在的東西當然會出錯

抽象類遵循的原則:

(1)abstract關鍵字只能修飾類和方法,不能修飾字段。

(2)抽象類不能被例項化(無法使用new關鍵字建立物件例項),只能被繼承。

(3)抽象類可以包含屬性,方法,構造方法,初始化塊,內部類,列舉類,和普通類一樣,普通方法一定要實現,變數可以初始化、不初始化但不能初始化後在抽象類中重新賦值或操作該變數(只能在子類中改變該變數)。

(4)抽象類中的抽象方法(加了abstract關鍵字的方法)不能實現。

(5)含有抽象方法的類必須定義成抽象類。

擴充套件:抽象類和介面的區別:

(1)介面是公開的,裡面不能有私有的方法或變數,是用於讓別人使用的,而抽象類是可以有私有方法或私有變數的。

(2)abstractclass 在Java 語言中表示的是一種繼承關係,一個類只能使用一次繼承關係。但是,一個類卻可以實現多個interface,實現多重繼承。介面還有標識(裡面沒有任何方法,如Remote介面)和資料共享(裡面的變數全是常量)的作用。

(3)在abstractclass 中可以有自己的資料成員,也可以有非abstarct的成員方法,而在interface中,只能夠有靜態的不能被修改的資料成員(也就是必須是static final的,不過在interface中一般不定義資料成員),所有的成員方法預設都是 public abstract 型別的。

(4)abstractclass和interface所反映出的設計理念不同。其實abstractclass表示的是"is-a"關係,interface表示的是"has-a"關係。

(5)實現介面的一定要實現接口裡定義的所有方法,而實現抽象類可以有選擇地重寫需要用到的方法,一般的應用裡,最頂級的是介面,然後是抽象類實現介面,最後才到具體類實現。抽象類中可以有非抽象方法。介面中則不能有實現方法。

(6)介面中定義的變數預設是publicstatic final 型,且必須給其初值,所以實現類中不能重新定義,也不能改變其值。抽象類中的變數預設是friendly 型,其值可以在子類中重新定義,也可以在子類中重新賦值。

相關推薦

看到不錯文章 轉載一下:原碼, 反碼, 補碼 詳解

本篇文章講解了計算機的原碼, 反碼和補碼. 並且進行了深入探求了為何要使用反碼和補碼, 以及更進一步的論證了為何可以用反碼, 補碼的加法計算原碼的減法. 論證部分如有不對的地方請各位牛人幫忙指正! 希望本文對大家學習計算機基礎有所幫助! 一. 機器數和真值 在學習原碼, 反碼和補碼之前, 需要先了解

oracle之sequence的cache解析,不錯文章

SQL> oradebug setmypid; 已處理的語句 SQL> oradebug unlimit; 已處理的語句 SQL> oradebugevent 10046 trace name context forever, level 12 已處理的

不錯面試文章

前言       打算換個工作,近一個月面試了不少的公司,下面將一些面試經驗和思考分享給大家。另外校招也快要開始了,為在校的學生提供一些經驗供參考,希望都能找到滿意的工作。         剛開始面試的幾家公司,就是備受各種打擊、就是一頓狂問,結果答上來的問題沒

無意中找到的關於面試文章,感覺寫的很好!

“身邊總是存在各種各樣的可能,而自身又具備這樣的能力,就忍不住想試一試。” ---《挪威的森林》 經歷過Honeywell(霍尼維爾)、CA(冠群)、Nortelnetworks(北電網路)、HP(惠普)、RocketSoftware(凌翔創意)和Qilinsoft(麒麟遠創)的面試,也參加過微軟亞洲研究院的

不錯的講解Java異常的文章

六種異常處理的陋習 你覺得自己是一個Java專家嗎?是否肯定自己已經全面掌握了Java的異常處理機制?在下面這段程式碼中,你能夠迅速找出異常處理的六個問題嗎?

不錯的Fresco文章

今天只是入門級別的,改天會出一個深度一點的文章介紹用法。 題外話:最近消沉了有快三個月了,這幾天都不知道自己在幹嘛,這是春節之後的第一篇博文,從今天開始讓一切都不一樣: Code Behavior, one can.t be less. Fres

Python多執行緒程式設計,執行緒鎖,以及補充上多程序文章

程序補充 程序間的訊號 訊號是唯一的非同步通訊方法 一個程序向另一個程序傳送一個訊號來傳遞某種資訊,接受者根據傳遞的資訊來做相應的事 $ kill -l檢視系統訊號說明 $ kill -9 pid號對程序傳送訊號 訊號名稱 說明

CSDN如何轉載好的文章

轉載CSDN部落格步驟: 1.CSDN部落格頁面右鍵,點選【檢查】 點選檢查後,頁面右側出現html程式碼,如下圖 2.如果需要轉載全文,則在html程式碼下側點選選中article_content 即可,會在程式碼框中自動選中article_

14點最新方法教你如何偽原創高質量文章

一、從寫首尾段 首段和尾端對搜尋引擎來說,判斷原創度至關重要,因此偽原創一篇文章必須處理首尾段。 處理方法1:直接刪除首尾段重寫,讀懂文章中心意思,寫出摘要內容作為首段,寫出總結內容作為尾端,此為最佳偽原創方法。 處理方法2:在原始首尾段上面做修改,比如詞語替換,結

不錯的libevent入門教程

首先給出官方文件吧:http://libevent.org ,首頁有個Programming with Libevent,裡面是一節一節的介紹libevent,但是感覺資訊量太大了,而且還是英文的-。-(當然,如果想好好用libevent,看看還是很有必要的

不錯的fvwm入門教程.

原文出處: http://learn.tsinghua.edu.cn/homepage/2003214890/publish/GNU/fvwm.html FVWM 的旅程 先去看看王垠寫的 Fvwm簡明使用手冊 ,然後到 FVWM 看看 screenshots ,最好挑

【Android】資料儲存資料庫SQLite(之前有看到的關於SQLite文章,簡單明瞭、覆蓋較全面適合學習)

一:前言 之前介紹過Android中儲存資料的兩種方式:SharedPreferences和File,這篇介紹另一種儲存資料的方式——資料庫SQLite——輕量級資料庫系統。 資料庫:簡單來說可視為電子化的檔案櫃——儲存電子檔案的處所,使用者可以對檔案中的資料執行新增、擷取

對微軟的敵視何時休? 從語言評論文章對C#的評價說起

看到一篇公眾號文章《2020年什麼程式語言最受歡迎,待遇最高?》,其中對C#的描述如下: 點選閱讀原文,看到這是一篇翻譯文章:https://codinginfinite.com/top-programming-languages-2020-stats-surveys/ 這篇文章裡列出的那些語言之中,明顯的G

文章搞定前端面試

ron miss 就是 節點數 網頁 那是 png html 性能優化 本文旨在用最通俗的語言講述最枯燥的基本知識 面試過前端的老鐵都知道,對於前端,面試官喜歡一開始先問些HTML5新增元素啊特性啊,或者是js閉包啊原型啊,或者是css垂直水平居中怎麽實現啊之類的基礎問題

文章徹底搞定所有GC面試問題

眾所周知,在C++,記憶體的管理是程式設計師的任務,包括物件的建立和回收(記憶體的申請和釋放),而在java中,我們可以通過以下四種方式建立物件(面試考點): new關鍵字建立物件 clone方法克隆產生物件 反序列化獲得物件 通過反射建立物件 而

面試專欄|文章搞定ArrayList和LinkedList所有面試問題

在面試中經常碰到:ArrayList和LinkedList的特點和區別? 個人認為這個問題的回答應該分成這幾部分: 介紹ArrayList底層實現 介紹LinkedList底層實現 兩者個適用於哪些場合 本文也是按照上面這幾部分組織的。 ArrayList的原始碼解析

我讀過關於面試最好的文章

 – NOVEMBER 4, 2011 Joel Spolsky曾經感嘆:招聘難,難於上青天(此處筆者稍加演繹:))。他有兩個辛辣但不乏洞察力的斷言:真正的牛人也許一輩子就投大概4次簡歷,這些傢伙一畢業就被好公司搶走了,並且他們的僱主會給他們不賴的待遇,所以他們也

寫的不錯雲資料庫的文章

本文作者:許中清,騰訊雲自研資料庫CynosDB的分散式儲存CynosStore負責人。從事資料庫核心開發、資料庫產品架構和規劃。曾就職於華為,2015年加入騰訊,參與過TBase(PGXZ)、CynosDB等資料庫產品研發。專注於關係資料庫、

文章搞定面試中的連結串列題目(java實現)

連結串列的資料結構 class ListNode { ListNode next; int val; ListNode(int x){ val = x; next = null;

文章搞定面試中的二叉樹題目(java實現)

結構 cer dea mat lastcomm ++ mir let balanced 最近總結了一些數據結構和算法相關的題目,這是第一篇文章,關於二叉樹的。 先上二叉樹的數據結構: class TreeNode{ int val; //左孩子 Tr