Java面試總結

来源:https://www.cnblogs.com/taojietaoge/archive/2019/03/23/10575857.html
-Advertisement-
Play Games

背景:人生不可以後悔,但它卻可以轉彎。不知不覺到新的公司上班已經一個多星期了,然而之前面試了好幾家公司都沒有好好總結下;新公司給我的總體印象還不錯,是一家非外包的創業型企業,就是公司是做大數據項目的,之前我是搞Java開發的,然後現在自己hadoop不瞭解、Linux不熟悉、測試用例也沒寫過等,搞得 ...


背景:人生不可以後悔,但它卻可以轉彎。不知不覺到新的公司上班已經一個多星期了,然而之前面試了好幾家公司都沒有好好總結下;新公司給我的總體印象還不錯,是一家非外包的創業型企業,就是公司是做大數據項目的,之前我是搞Java開發的,然後現在自己hadoop不瞭解、Linux不熟悉、測試用例也沒寫過等,搞得一臉被嫌棄的樣子,心疼自己兩秒;但是我每天上班也是堅持硬著頭皮搞,邊搞邊學,希望自己不要成長太慢,被公司開了就尷尬了;總之,2019乾就完了。

 

Java面試總結:

本人2017年畢業的,面試的是Java初級開發,拿到的offer有9k、10k、11k和12k,多面試幾家,總有一家眼瞎,儘管都是低開,但面試總結對我此等初級開發段位還是管用的。

1、為什麼辭職?

這個問題幾乎每次面試都被問到了,蛋疼,感覺對企業忠誠度太低不怎麼OK,然後論人是非者必是非之人;於是我就說想換個更niubility的公司,同時工資也要往上漲,所以辭職了。

2、最近做了什麼項目,主要負責哪些模塊?

簡單講了最近做的一個智慧園區的項目:我們這個智慧園區項目主要服務於政府、教育、地產和化工廠行業,她重新定義了園區,幫助客戶更高效、更敏捷地解決傳統技術手段很難甚至無法解決的業務問題,使智能、安全、便捷、高效以及低能耗真正落地園區;其內部還有一個響亮的口號“平行移動 批量複製 有競爭力”;主要模塊有綜合態勢、事件中心、安防管理、設備管理、人員通行、車輛通行、設備主數據和配置中心;用的是SpringCloud微服務架構開發的,我主要負責人員通行和車輛通行模塊;車輛通行的主要業務邏輯如:一輛車到距離攝像頭5米左右的距離,攝像頭就會對該範圍內對移動車輛抓拍,然後把拍到的視頻流發送到EI,EI快速分析視頻流,然後再通過kafka消息隊列把成功識別之後到車輛信息(包括車輛圖片url、車牌號、車輛進車時間等)發送到IOC平臺進行處理,IOC監聽到消息後,首先通過Redis對消息進行去重,然後根據車牌號判斷該車輛是否有許可權進出,鑒權結束後一方面把車輛圖片上傳到文件存儲伺服器,另一方面通過Websocket時時推送把當前的車輛信息發送給前端頁面展示。

3、為什麼平常用String拼接字元串,而不用StringBuffer/StringBuilder?如:String gateKey = "font110"+"_520"

沒答上,回來面試官說String是不可變對象,在後面拼接字元串不好重新創建對象;而用StringBuffer的話,太多就會占用過多的記憶體,特別是迴圈添加時,主要是考慮JVM記憶體才用的String。

4、工作之外下班後喜歡做些什麼?

學習英語、打球、寫博客、看博客和研究新技術。

5、對未來的職業有什麼規劃?

3-5年內進BAT,不過公司平臺和福利都足夠好也沒誰想進BAT。

6、你認為進入BAT的要求有哪些?

1)基礎部分:Java語言基礎部分、Java運行時環境、併發知識於Concurrent包、設計模式和反射、文件IO/NIO、網路IO及網路協議;

2)加薪部分:SpringCloud、Spring、Mybatis等主流框架、Linux伺服器、資料庫優化、緩存服務、負載均衡;

3)加分部分:數據結構與演算法、電腦操作系統、電腦網路、熟練使用一種腳本語言如python、JS等、Github和博客。

7、有研究什麼新的技術?

Apache Camel。

8、項目中對你最具有挑戰的事情或問題?

我認為在項目中溝通和扯皮時最重要的,諸如智慧園區這個項目我們有上游合作伙伴,他們消息隊列時以GBK格式給我們發送消息的,然後我們這邊是以UTF-8接收消息的,造成了車牌號亂碼等問題,還有我們需要調用上游合作伙伴的介面,他們有隨意改動介面的出參格式或是改IP等,此類問題影響惡劣。

9、手寫單例模式?

10、Mysql有哪些引用函數?

When、Then、If、Concat、Field、Format、Lower、ABS等。

11、讀取一個有100萬條數據的文件,並且把著100萬條數據插入資料庫需要註意些什麼?

1)JVM是否可以承受住這麼大的數據量;

2)每當放入1000條數據就提交一次,然後重新new一個Table,賦值給原來的變數、再繼續放入下一個1000條記錄;

3)先取消資料庫表的索引、外鍵和觸發器等會加大寫入的速度。

12、Python基本數據類型?

Stiring、Digit(數字)、List、Tuple(元組)、Sets(集合)、Dictionary、date。

13、說說你對Socket通信的理解?

服務端先初始化Socket,然後與埠綁定,對埠進行監聽,調用accept阻塞,等待客戶端連接;在這時如果有個客戶端初使化了一個Servlet,然後連接伺服器(connect),如果連接成功,這時客戶端與服務的的連接就建立了;客戶端發送數據請求,伺服器端接收請求並處理,然後把回應數據發送給客戶端,客戶端讀取數據,最後關閉連接,一次交互結束。

14、Websocket怎麼建立連接並保證長鏈接?

Websocket進行全雙工的通信,只需要建立一次連接(長連接);其不像xml(AJAX)請求實現長輪詢,因為不停的連接,HTTP連接始終打開,效率低且浪費資源。

15、介面interface和程抽象類Abstract?

1)抽象類是對一種事物的抽象即對類抽象,而介面是對行為的抽象;

2)抽象類和介面都不能直接實例化,若要實例化,抽象類變數必須指向實現所有抽象方法的自類對象,介面變數則必須指向實現所有介面方法的類對象;

3)抽象類要被子類繼承,介面要被類實現;

4)介面中定義的變數只能是公共的靜態的常量,抽象類中的變數則是普通變數;

5)介面可以繼承介面,並支持多繼承,但類只能當根繼承;

6)當關註一個事物的本質時,用抽象類,而當關註一個操作時,用介面。

16、Mysql什麼情況下會造成表鎖死?

1)alter table 大表操作會死鎖;

2)高併發插入可能會死鎖;

3)多個事務同時鎖定一個資源時也會造成死鎖。

17、用Redis怎麼做一個排名?

用Redis的排序集合類型Sortset()實現排行榜。

18、資料庫表主鍵又何作用?

主鍵可以保證數據不會重覆。

19、REST是什麼?

REST描述的是一種網路中Client與Server的一種交互形式;REST本身不實用,實用的是如何設計RESRful API(REST風格的網路介面)。

20、什麼是微服務?

微服務Microservice的核心就是將傳統的一站式應用,根據業務拆分成一個一個的服務,徹底的去耦合,每一個微服務提供單個業務功能的服務,一個服務做一件事情;從技術角度看就是一種小而獨立的處理過程,類似進程的概念,能夠獨立啟動或銷毀,擁有自己獨立的資料庫。(業務拆分、單獨進程、獨立資料庫)

21、什麼是SpringCloud?

SpringCloud是一個基於SpringBoot的快速構建分散式系統的工具集;其基於SpringBoot提供類一套微服務一站式解決方案,包括服務註冊與發現Eureka、配置中心Config、全鏈路監控、服務網關Zuul、負載均衡Ribbon、熔斷器Hystrix等組件的微服務協調治理框架。

22、微服務優缺點?

優點:

1)每個服務足夠內聚,足夠小,代碼容易理解,這樣能聚焦一個置頂的業務功能或業務需求;

2)開發簡單、效率高,一個服務可能就是專門做一件事;

3)微服務能夠被小團隊開發,這個小團隊可由2-5個開發人員組成;

4)微服務是松耦合的,是具有功能意義的服務,無論在開發還會是部署階段都是獨立的;

5)微服務可以使用不同的語言開發;

6)易於和第三方集成,微服務允許容易且靈活的方式集成自動部署,通過持續集成工具如Jenkins、Hudson等;

7)微服務只是業務代碼的邏輯,不會與HTML、CSS或其他界面組件混合;

8)每個微服務都有自己獨立的存儲,可以有獨立的資料庫,也可以有統一的資料庫;

缺點:

1)開發人員要處理分散式系統的複雜性;

2)多服務運維難度大,隨著服務的增加,運維的壓力也在增大;

3)系統部署依賴;

4)服務間通信成本;

5)數據一致性。

23、Listen & Filter兩者的作用和區別?

首先知道web.xml的載入順序是:Context-Param --> Listener --> Filter --> Servlet

1)Listner是一種觀察者模式的實現,我們在web.xml中配置Listner時就是把一個被觀察者放入觀察者的觀察對象隊列中,當被觀察者觸發了對象事件時,觀察者做出相應的相應Response;具體的實現(在jsp/Servlet中)是在web.xml中註冊Listener,由Container在特定事件發生時呼叫特定的實現Listener類;應用場景:統計網站線上人數、清除過期session。

2)Filter過濾器的使用可以改變一個Request或改一個Response,Filter不是一個Servlet,它不能產生一個Response,但是能夠在一個Reqeust到達Servlet之前預先處理Request,也可以在一個相應Response離開Servlet時處理一個Response;應用場景:設置字元編碼、過濾敏感辭彙、URL級別的許可權訪問控制、壓縮相應信息。

24、悲觀鎖 & 樂觀鎖?

悲觀鎖:總是假設最壞的情況,每次去拿數據的時候都認為somebody會修改,所以每次在拿數據的時候都會上鎖;傳統的關係型資料庫里就用到了很多的這種鎖機制,如行鎖、表鎖、讀鎖和寫鎖等,都是在操作之前先上鎖;Java中Synchronized和ReetranLock等獨占鎖就是悲觀鎖實現的;

樂觀鎖:總是假設最好的situation,每次去拿數據時都believe別人不會修改,所以不會上鎖,但是更新的時候會判斷一下在此期間別人有沒有去更新了這個數據(用版本號機制和CAS演算法實現);樂觀鎖適用於多讀的應用類型,這樣可以提高吞吐量,像資料庫提供的類似於write-condition機制,其實都是提供的樂觀鎖。

25、抗住千萬級流量系統的架構思路?

1)實現高併發

服務拆分:將整個項目拆分成多個子項目或模塊,將項目平行擴展;

服務化:使用服務註冊與發現;

消息隊列:解耦、非同步處理;

緩存:各種緩存帶來的併發;

2)實現高可用

集群、限流、降級、資料庫(讀寫分離、主從分離);

3)業務設計

Nginx代理等。

26、Spring最主要的兩大特性?

AOP & IOC

IOC(控制反轉)是Spring的一個容器,他不是一種技術,而是一種思想,是基於面向對象編程的,可以設計出松耦合、更優秀的程式;簡而言之,如A類要引用B類中某個方法,傳統編程是在A類中實例化一個B類,也就是通過new,然後打點調方法,而代碼的高度耦合最大的原因就是用了new;But利用Spring框架就可以將實例化的過程交給IOC容器,通過配置文件中的設置Bean或者B類中添加註解,A類可不通過new而通過ApplicationContext的getBean方法得到實例,然後打點調用方法,如此就減少了兩個類的耦合;IOC三種註入方式:介面註入、構造方法註入、賦值方法註入(Setter)。

AOP(面向切麵/介面編程),同樣是一種思想非技術;和OOP(面向對象編程)相比,AOP是對OOP的補充;OOP是靜態的抽象,AOP是動態的抽象;簡而言之,就是將一個工程中與源代碼無關,但是很多地方都需要用到,抽出來也不影響源代碼上下文的那一部分代碼抽出來,然後要用的時候就織入,進行使用;就比如我們打算結婚,婚禮的整個流程我們可以自己負責,但是會spend我們的時間和精力,這是我們可以選擇將婚禮交給婚慶公司,而自己不再負責婚禮的籌備過程,只需要在婚禮當天使用婚慶公司給我們的成果,So也說AOP是基於代理模式下進行的。

27、一些Spring常用的註解的含義?

@RequstParam:參數拼接在URL後面才可以接收;

@ReqeustBody:請求正文里的Json字元串;

@RequestPart:上傳文件接收用的;

@RequestBody是把返回的實體轉為字元串;

@RestController包含了@ResponseBody和@Controller。

28、動態代理 & 靜態代理?

動態代理是在程式運行期間,由Java反射等機制動態生成,也就是在將class文件載入到JVM時期完成的工作,此方式不會修改位元組碼;

靜態代理是在程式運行前已經存在代理的位元組碼文件,也就是編譯時期已經完成代理工作了。

29、SpringMVC運行原理?

①用戶向伺服器發送請求,請求被Spring前端控制Servlet DispatchServlet捕獲;

②DispatcherServlet對請求URL進行解析,得到請求資源標識符(URI),然後根據該URI調用HandlerMaping活的Handler配置相關的對象,以HandlerExecutionChain對象的形式返回;

③DispatherServlet根據獲得的Handler,選擇一個 合適的HandlerAdapter;

④提取Request中的模型參數,填充Handler入參,開始執行Handler(Controller),在填充Handler的過程中,Spring會做一些額外的工作如:數據格式化、數據轉換和驗證等;

⑤Handler填充完畢後,向DispatherServelt返回一個ModelAndView對象;

⑥根據返回的ModelAndView,選擇一個合適的ViewResolver視圖解析器,並返回給DispatherServlet;

⑦ViewResovler結合Model和View來渲染視圖;

⑧將渲染的結果返回給客戶端。

30、SpringAOP動態代理實現步驟?

動態代理:https://www.cnblogs.com/taojietaoge/p/10463649.html

①實現InvocationHandler介面,重寫invoke方法,創建自己的調用處理器;

②通過Proxy類指定ClassLoader對象和一組interface來創建動態代理類;

③通過反射機制獲得動態代理的構造函數,其唯一參數類型是調用處理器介面類型;

④通過構造函數創建動態代理類實例,構造時調用處理器對象作為參數傳入。

31、談談對HashTable和HashMap理解?

HashMap + HashTable:https://www.cnblogs.com/taojietaoge/p/10301711.html

32、談談對Java記憶體的理解?

Java記憶體:https://www.cnblogs.com/taojietaoge/p/10264416.html

33、@Autowire和@inject有什麼區別?

相同點:二者同樣可以註入對象,在屬性域上面註入、在set方法或者其他需要註入點方法上註入、在構造器上面註入;

不同點:@Autowire有@required標簽,允許對象為空;@inject沒有@required標簽,強制要求對象不能為空。

34、BeanFactory和ApplicationContext的區別?

1)BeanFactory是Spring的心臟,Spring使用BeanFactory來實例化、配置和管理bean,BeanFactory是IOC容器的核心介面;

2)ApplicationContext是IOC容器的另外一個重要介面,他繼承了BeanFactory的基本功能,同時也繼承了容器的高級功能,如MessageSource國際化資源介面、ResourceLoad等;

3)BeanFactory採用的是延遲載入形式來註入Bean等,只有在使用到某個Bean時才會調用getBean方法對該Bean進行載入實例化,這樣就不能發現一些存在的Spring配置問題;

4)ApplicationContext則會在容器啟動時,一次性創建所有的Bean,這樣在容器啟動的時就可以發現Spring中存在的錯誤配置,但ApplicationContext占用記憶體空間,且程式配置Bean較多時啟動緩慢。

 

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • jQuery動畫 1.hide([speed,[easing],[fn]]) 方法:隱藏顯示的元素 參數: ①speed[,fn] speed:三種預定速度之一的字元串("slow","normal", or "fast")或表示動畫時長的毫秒數值(如:1000) fn:在動畫完成時執行的函數,每個 ...
  • transition屬性目的是讓css的一些屬性(如background)的以平滑過渡的效果出現。它是一個合併屬性,是由以下四個屬性組合而成: transition-property:設置應用過渡的CSS屬性,如background。 transition-duration:設置過渡效果花費的時間。 ...
  • CSS3圓角#css3-circle{ width: 150px; height: 150px; border-radius: 50%; }CSS3 橢圓形css3 radius#css3-elipse{ width: 200px; height: 100px; border-radius: 50% ...
  • 一、程式設計思路 在我的三次作業中都採用了類的分層結構,採用逐項匹配,分層求導的思路。 (一)、 第一次作業中構建了Polynimial(多項式)類,在類的構造器中就完成了對非法空格的判斷並對合法表達式進行刪除空格處理。由於第一次作業僅含有帶有繫數的冪函數與常數項,因而我就沒有專門構建針對每一個項的 ...
  • 一,解決類與類之間代碼允餘問題有兩種方案: 1,繼承 2,組合 1,繼承:描述的是類與類之間,什麼是什麼的關係 2,組合:描述的是類與類之間的關係,是一種什麼有什麼關係 一個類產生的對象,該對象擁有一個屬性,這個屬性的值是來自另一個類的對象 二,組合練習: ...
  • 說來慚愧,在很久之前修這門課程的時候總是不能理解面向對象辯證思想的精髓所在,又沒有用軟體開發的標準嚴格要求自己,所以導致寫了一些類C程式後草草收場。時隔多年,課程的風格變化與老師和平臺提供的幫助,加上今年對於Java語言上更熟練的使用,讓我在第一個單元的學習中得到了很多,雖然並不能像大神一樣總結出技 ...
  • C++ 標準:維基百科 C 標準:維基百科 【K&R C】 1978 年,Dennis Ritchie 和 Brian Kernighan 合作推出了《The C Programming Language》的第一版(按照慣例,經典著作一定有簡稱,該著作簡稱為 K&R),書末的參考指南 (Refere ...
  • 一. 系統和JDK版本 系統:Windows10 JDK版本:1.8 二. 配置步驟 1. 右鍵單擊“我的電腦” >> 屬性 >> 高級系統設置 2. 環境變數 3. 系統變數 >>新建 4.新建變數名“JAVA_HOME”,變數值為JDK的安裝路徑 5. 編輯Path環境變數,添加“%JAVA_H ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...