美團面試,360面試 ,滴滴面試,阿里面試,百度面試,京東面試,搜狗面試:

1、基礎知識:
    一、CurrentHashMap的數據結構,Java1.8 與 java 1.7的區別,增長了那些特性
  這個實際上是考了一下編程思路,hashMap(鏈表+數組)==》1.8以後變成了 鏈表+數組+紅黑樹,   php

  參考:ConcurrentHashMap原理分析(1.7與1.8) html

        遍歷Map的方法有四種:java

       參考:Java中如何遍歷Map對象的4種方法    mysql

    HashMap,HashTable的數據結構,不一樣點, HashTable線程安全,HashMap線程不安全;linux

       參考:HashMap的實現原理--鏈表散列web

      參考:Hashtable數據存儲結構-遍歷規則,Hash類型的複雜度爲啥都是O(1)-源碼分析 面試

      參考:HashMap, HashTable,HashSet,TreeMap 的時間複雜度   redis

      參考:HashMap底層實現原理/HashMap與HashTable區別/HashMap與HashSet區別 算法

      參考:ConcurrentHashMap原理分析(1.7與1.8)-put和 get 兩次Hash到達指定的HashEntryspring

 

   二、TreeMap 如何實現快速排序的?

    TreeMap實際上是二叉排序樹的紅黑樹實現,:對於 TreeMap 而言,因爲它底層採用一棵「紅黑樹」來保存集合中的 Entry,這意味這 TreeMap 添加元素、取出元素的性能都比 HashMap 低:當 TreeMap 添加元素時,須要經過循環找到新增 Entry 的插入位置,所以比較耗性能;當從 TreeMap 中取出元素時,須要經過循環才能找到合適的 Entry,也比較耗性能。 

但 TreeMap、TreeSet 比 HashMap、HashSet 的優點在於:TreeMap 中的全部 Entry 老是按 key 根據指定排序規則保持有序狀態,TreeSet 中全部元素老是根據指定排序規則保持有序狀態。

         參考 紅黑樹與AVL樹

  二、設計模式有哪些,關鍵是;舉例在項目中如何使用,它的優缺點,我居然語塞了。 

  參考:Java設計模式 - 單例模式

  參考:Java設計模式之代理模式(Proxy)

  參考:設計模式-代理模式(Proxy)

  參考:設計模式-抽象工廠模式

  參考:設計模式-工廠模式-場景以及優缺點-目的就是應對變化 (國江面試回答的) 

  參考:23種設計模式介紹(三)---- 行爲型模式

  參考:23種設計模式介紹(二)---- 結構型模式

  參考:23種設計模式介紹(一)---- 建立型模式 

    三、介紹JVM內存模型,垃圾回收機制,新生代垃圾回收用Copying算法,老年代用標記清理(Mark-Compact)

  參考:jvm內存模型-回收算法-和內存分配以及jdk、jre、jvm是什麼關係(阿里,美團,京東面試題)

  美團面試官問:JVM的公有區和私有區有啥區別,爲啥叫私有區,把我給問住了,

  後來查了一下:私有區指的是,這個區域的隨着線程的開始而開始,結束而結束,生命週期與線程的生命週期同樣,

         公有區:即便線程結束了,也能夠訪問,不會回收;

   那麼寄存器爲何設計爲線程私有?

   咱們知道所謂的多線程在一個指定的時間段裏只會執行某一個線程的方法,CPU不停切換任務,那麼爲了可以準備的記錄各個線程正在執行的當前的字節碼指令的地址,那麼就設計爲線程私有每一個線程都分配一個寄    存器,這樣各個線程獨自記錄不會干擾。這是java虛擬機惟一一個沒有聲明OutOfMemoryError的內存區。;

  參考:java虛擬機學習之線程共享內存區和線程私有區

      四、 G1會stop-the-world嗎,

  答:會,無論選擇哪一種算法,都會stop-the-world ,GC調優一般就是爲了改善stop-the-world的時間

  參考:CMS收集器和G1收集器優缺點

      五、美團的面試問的太細了,標記-清理法是如何整理的,copying 是如何 劃分兩部分的。爲何年輕代的劃分是8:1:1,具體是如何進行清理內存的。

   六、什麼是代理,反射,以及如何使用?

  參考:深刻理解Java反射+動態代理

  七、一個Tomcat 接收請求 到DB 而後返回到用戶;

  Serverlet是單例的嗎?

  答:Servlet容器默認是採用單實例多線程

  Servlet生命週期,大體分爲4部:Servlet類加載-->實例化-->服務-->銷燬        

一、Web Client向Servlet容器(Tomcat)發出Http請求。

2、Servlet容器接收Client端的請求。

3、Servlet容器建立一個HttpRequest對象,將Client的請求信息封裝到這個對象中。

4、Servlet建立一個HttpResponse對象。

5、Servlet調用HttpServlet對象的service方法,把HttpRequest對象和HttpResponse對象做爲參數傳遞給HttpServlet對象中。

6、HttpServlet調用HttpRequest對象的方法,獲取Http請求,並進行相應處理。

7、處理完成HttpServlet調用HttpResponse對象的方法,返回響應數據。

八、Servlet容器把HttpServlet的響應結果傳回客戶端。

 

        參考:servlet單實例多線程模式

  參考:Servlet 生命週期、工做原理-是單實例多線程

        八、ThreadLocal 變量 的用處,以及 若是想跟蹤一個請求,從接收,處理到返回結果。threadlocal能夠在線程的任何位置傳遞參數,獲取這個參數,

             參考:Threadlocal 傳遞參數(百度二面)

       九、String x="ABC";String y=new String(「ABC」); (a)==,(b) equals是否相等,若是使用HashSet添加是否能把兩個都加上;

      答:   x ,y的內存地址不一樣;所以 (a) x==y的判斷爲false;可是String重寫了equals(),判斷值是否相等,所以(b) a.equals(b)的判斷爲true; HashSet 只能加上一個;

            參考: Java中String直接賦字符串和new String的區別 如String str=new String("a")和String str = "a"有什麼區別?

  

       十、Java 有哪8中基本的數據類型:

  (a)四種整數類型(byte、short、int、long):   

    byte:8 位,用於表示最小數據單位,如文件中數據,-128~127   

    short:16 位,不多用,-32768 ~ 32767   

    int:32 位、最經常使用,-2^31-1~2^31  (21 億)   

    long:64 位、次經常使用    注意事項:    int i=5; // 5 叫直接量(或字面量),即 直接寫出的常數。   

    整數字面量默認都爲 int 類型,因此在定義的 long 型數據後面加 L或 l。    小於 32 位數的變量,都按 int 結果計算。    強轉符比數學運算符優先級高。見常量與變量中的例子。 

  (b)兩種浮點數類型(float、double):   

    float:32 位,後綴 F 或 f,1 位符號位,8 位指數,23 位有效尾數。   

    double:64 位,最經常使用,後綴 D 或 d,1 位符號位,11 位指數,52 位有效尾    

  (c)一種字符類型(char):    char:16 位,是整數類型,用單引號括起來的 1 個字符(能夠是一箇中文字符),使用 Unicode 碼錶明字符,0~2^16-1(65535) 。 

  (d)一種布爾類型(boolean):true 真  和 false 假。

 

2、SPRING知識:

  一、Spring 中的BeanFactory和FactoryBean的區別;,Spring的好處。

    參考:BeanFactory 和FactoryBean的區別

  二、spring MVC 原理,AOP,IOC, 請求如何使用DispatchSolove轉發請求。
  三、Spring Cloud的五大神獸,zookeeper的服務發現,數據移植性。

          zookeeper 如何管理集羣服務的;如何實現高可用性的

    參考:SpringCloud分佈式開發五大神獸

    參考:Spring Cloud 架構 五大神獸的功能

          參考:zookeeper 負載均衡 核心機制 包含ZAB協議(滴滴,阿里面試)

          參考:zookeeper如何實現負載均衡的?(具體鏈接哪個zookeeper服務器的選擇?)阿里面試

       參考:Zookeeper 三、Zookeeper工做原理(詳細)

  四、百度的面試官問我,IOC,AOP的原理,若是讓你本身設計IOC功能如何設計

    其實IOC,AOP都是基於反射的機制的,

    AOP更高級一點,用了動態代理

     參考:Spring IOC AOP的原理(百度二面) 若是讓你本身設計IOC,AOP如何處理

    Spring 的Bean的生命週期(阿里的人問過)

      參考:Spring學習10- bean的生命週期(阿里面試題目兩次面試均提到)

 

3、struct2掌握

  參考:Struts2 入門

  參考:三大框架(struct、spring、hibernate)的優缺點

4、服務器搭建部署:

  一、什麼是Docker,Docker經常使用的命令,Docker的優勢,

    參考下面的文章,注意多看看後面的總結,阿里抓着經常使用命令和優勢不放,好好看

    參考:Docker 入門 到部署Web 程序- (阿里面試經常使用的docker命令和優勢)

    參考:Docker 入門 到部署Web 程序

  二、Dubble,SOAP,重點就是Dubbo,Dubbo不瞭解,這是硬傷,必定要好好看看,不少企業都用Dubbo必定要好好看看

    參考:Dubbo:來自於阿里巴巴的分佈式服務框架

  三、SOA 架構面向服務,那麼他如何提供服務,Web Servcie 包含了三種主流的Web實現方式,他們彼此的區別和聯繫,: 

         (a) REST:表徵狀態轉變 (基於HTTP協議),主要在分佈式框架中使用
      (b) SOAP:簡單對象訪問協議(基於任何傳輸協議,TCP,HTTP,SMTP,MSMQ)
      (c) XML-RPC:遠程過程調用協議 (已經慢慢被SOAP取代)RPC(跨越了傳輸層和應用層,基於HTTP和TCP)

          面試人員問:REST協議與RPC協議的區別和聯繫(sougou ,等等:

    參考:SOA,SOAP,RPC,以及 RPC協議與 REST 協議之間的關係(搜狗)

  四、互聯網分佈式事務,微服務,好比如今有個系統很大,不少不一樣的部門進行開發,語言也不少,就使用微服務。用戶管理之類的;

  五、RPC(是否使用過,這個京東,美團,360 的面試屢次說起)

    參考:RPC-原理及RPC實例分析

    參考:RPC架構-美團,京東面試題目

    參考:Java實現簡單的RPC框架(美團面試)

  六、對高併發的限流措施相似於CDN轉發,反向代理之類的

            限流措施考慮漏桶算法,令牌桶算法,參考:互聯網應對高峯流量控制- 漏桶算法和令牌桶算法(滴滴面試)

           分佈式鎖,參考:分佈式鎖簡單入門以及三種實現方式介紹(滴滴)

  七、LVS如何實現負載均衡的,

     (a)NAT(Virtual Server via Network Address Translation NAT(VS/NAT) 大名鼎鼎的IP負載均衡,工做在傳輸層

       (b)TUN (Virtual Server via IP Tunneling(VS/TUN)

       (c) DR Virtual Server via Direct Routing(VS/DR)  直接修改報文的MAC地址,工做在數據鏈路層

       下面的文章感受不太清楚,可是大致介紹了方向:

       參考:LVS:三種負載均衡方式比較+另三種負載均衡方式

             這個文章更清楚:六大Web負載均衡原理與實現

  八、Zookeeper 如何實現負載均衡的,與kakfa的數據一致性有何區別

    好比兩個IP同時去註冊中心註冊服務,考慮數據移植性的問題。

       參考:zookeeper 負載均衡 核心機制 包含ZAB協議

          參考:zookeeper如何實現負載均衡的?(具體鏈接哪個zookeeper服務器的選擇?)阿里面試

       參考:六大Web負載均衡原理與實現

        與kafka的區別和聯繫:

      參考:kafka 數據一致性-leader,follower機制與zookeeper的區別;

  九、Tomcat,Jboss,Apache,Weblogic的區別,Tomcat,Jboss,Weblogic均可以部署包,有區別嗎?

    參考:Tomcat Jboss Apache WebLogic區別與比較(阿里面試)

   十、Web容器,Servlet容器、SpringMVC容器的區別:

          咱們平時所說的J2EE包含了 標準版:Web容器 (JSF java標準版)和 EJB容器(Java企業版)

         Web容器 裏面包含了JSP和 Servlet容器,Servlet用來處理請求;

         好比Tomcat 是Web容器,只能作JSP和Servlet的Container,不支持EJB

                Jboss  它不可是Servlet容器,並且是EJB容器(同時支持EJB的優化版tomcat)

             WebLogic Server是專門爲企業電子商務應用系統開發的它不可是Servlet容器,並且是EJB容器

         具體Web容器與Servlet容器的區別聯繫:Tomcat Jboss Apache WebLogic區別與比較(阿里面試)

         SpringMVC原理:參考:Spring學習 6- Spring MVC (Spring MVC原理及配置詳解)

  十一、本身定義了一個HashMap,按照tomcat的類加載順序,若是別人寫了個hashmap.jar包,你引用了,會不會有問題呢; 

    答,必定不會,webappclassloader類加載器是相互隔離的,tomcat雖然不遵循類加載機制可是上層的仍是遵循類加載機制

    參考:圖解Tomcat類加載機制(阿里面試題)

       十二、Tomcat 的組成,包含幾部分,如何處理併發數的;

           默認的鏈接是200個 

 

5、數據結構知識:

        一、 ArrayList 和LinkedList 的區別,另外請說明 ArrayList 的數組的默認大小,以及當超出默認大笑以後,內存如何處理;               

  1.ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構。
  2.對於隨機訪問get和set,ArrayList以爲優於LinkedList,由於LinkedList要移動指針。
  3.對於新增和刪除操做add和remove,LinedList比較佔優點,由於ArrayList要移動數據。

    還有個 ArrayList 如何默認  List<String> abc=new ArrayList<String>(); 

    這個默認是10,如今有個問題,若是咱們往下面添加的數據大於10,數組如何存儲:

    這樣,數組會重新拷貝一個新的數組,這個數組的長度以下:

    那麼容量變化的規則是什麼呢?請看下面的公式:
    ((舊容量 * 3) / 2) + 1  
  注:這點與C#語言是不一樣的,C#當中的算法很簡單,是翻倍。

  而後把以前的元素拷貝進來,而後,原來的回收掉,變成如今的數組,若是後續繼續大於如今的新size;則還會按照這個模式進行遞增;


  一、目前數據庫有10億數據,如何設計
    使用單組多讀也就是說,一個主數據庫負責讀寫, 其餘的從數據庫負責讀,不負責寫,否則延遲過高了。
    而後使用BinLog將主數據庫的數據進行實時同步到從數據庫;

  二、紅黑樹,查找樹,二叉遍歷樹概念 ,紅黑樹的樹高是多少?

    答:紅黑樹高是2log(n+1)

    (1)  紅黑樹的樹高度是2log(n+1)

    (2) 左旋,將「x的右孩子」設爲「x的父親節點」;即,將 x變成了一個左節點(x成了爲z的左孩子)!

    (3)右旋:將「x的左孩子」設爲「x的父親節點」;即,將 x變成了一個右節點(x成了爲y的右孩子)!

    (4)紅黑樹的特性:

     R-B Tree,全稱是Red-Black Tree,又稱爲「紅黑樹」,它一種特殊的二叉查找樹。紅黑樹的每一個節點上都有存儲位表示節點的顏色,能夠是紅(Red)或黑(Black)。
  (1)每一個節點或者是黑色,或者是紅色。
  (2)根節點是黑色。
  (3)每一個葉子節點(NIL)是黑色。 [注意:這裏葉子節點,是指爲空(NIL或NULL)的葉子節點!]
  (4)若是一個節點是紅色的,則它的子節點必須是黑色的。
  (5)從一個節點到該節點的子孫節點的全部路徑上包含相同數目的黑節點。   

     參考:紅黑樹(一)之 原理和算法詳細介紹

    參考:紅黑樹與AVL樹

    參考:二叉樹 Java 實現 前序遍歷 中序遍歷 後序遍歷 層級遍歷 獲取葉節點 寬度 ,高度,隊列實現二叉樹遍歷 求二叉樹的最大距離

    參考:平衡二叉樹,AVL樹之圖解篇

     六、單鏈表反轉,兩種方式,迭代和遞歸

       參考:鏈表翻轉的圖文講解(遞歸與迭代兩種實現)

 

6、多線程知識:

       一、什麼是線程池,爲何要用,如何實現的,多線程runnable thread 的區別和聯繫 

  關於runnable和 thread: 參考:Java 多線程 -Thread 和Runnable 的區別和聯繫

  多線程專題:參考:Java-線程池專題 (美團面試題)

  數據庫的鏈接池專題:MySql數據庫鏈接池專題

  一、線程的五個狀態,

    參考:Java線程的5種狀態及切換(透徹講解)-京東面試

  二、如何解決多線程的安全問題,無非兩個方法:synchronized 和 lock,它的如何實現的,

    lock使用了AQS(AbstractQueueSynchronzied)隊列實現,

    reentracelock可重入指的是什麼?  

    答:可重入的意思是某一個線程是否可屢次得到一個鎖,好比synchronized就是可重入的,ReentrantLock也是可重入的,如何實現的,

    參考:解決多線程安全問題-無非兩個方法synchronized和lock 具體原理(百度)

       三、如何用lock 實現一個synchronized方法體;(lock很簡單,拿到鎖以後,作什麼。之類的;)

    參考:使用synchronized實現一個Lock-美團面試題目

    四、線程池的workQueue的拒絕策略是什麼?   

       當線程池的任務緩存隊列已滿而且線程池中的線程數目達到maximumPoolSize,若是還有任務到來就會採起任務拒絕策略,一般有如下四種策略: 

ThreadPoolExecutor.AbortPolicy:丟棄任務並拋出RejectedExecutionException異常。 ThreadPoolExecutor.DiscardPolicy:也是丟棄任務,可是不拋出異常。 ThreadPoolExecutor.DiscardOldestPolicy:丟棄隊列最前面的任務,而後從新嘗試執行任務(重複此過程) ThreadPoolExecutor.CallerRunsPolicy:由調用線程處理該任務

     參考:深刻理解Java之線程池(愛奇藝面試) 

 五、多線程的線程池中,若是是無界隊列那麼MaxPoolSize就沒有意義了;

    六、   線程池如何中止線程的?以及interrupt()函數的理解

  ThreadPoolExecutor提供了兩個方法,用於線程池的關閉,分別是shutdown()和shutdownNow(),其中:

               (a) shutdown():調用了Interrupt(); 不會當即終止線程池,而是要等全部任務緩存隊列中的任務都執行完後才終止,但不再會接受新的任務

               (b) shutdownNow():調用了不安全的stop()函數,強行中止了線程池,相似於斷電關電腦,當即終止線程池,並嘗試打斷正在執行的任務,而且清空任務緩存隊列,返回還沒有執行的任務  

     參考:深刻理解Java之線程池(愛奇藝面試)

     參考:Java結束線程的三種方法(愛奇藝面試)

  

  七、sleep 和wait()區別:

    參考:sleep、yield、wait、join的區別(阿里面試)

     八、 樂觀鎖,悲觀鎖,的使用場景?

    先說樂觀鎖和悲觀鎖的機制:
    1. 樂觀鎖是一種思想,具體實現是,表中有一個版本字段,第一次讀的時候,獲取到這個字段。處理完業務邏輯開始更新的時候,須要再次查看該字段的值是否和第一次的同樣。若是同樣更新,反之拒絕。之因此叫樂觀,由於這個模式沒有從數據庫加鎖。
    2. 悲觀鎖是讀取的時候爲後面的更新加鎖,以後再來的讀操做都會等待。這種是數據庫鎖

樂觀鎖優勢程序實現,不會存在死鎖等問題。它解決不了髒讀的問題,他的適用場景也相對樂觀。阻止不了除了程序以外的數據庫操做。

悲觀鎖是數據庫實現,他阻止一切數據庫操做。

  應用場景:

    悲觀鎖:Synchroinzed 和ReentrantLock 都是悲觀鎖,傳統的關係型數據庫裏邊就用到了不少這種鎖機制,好比行鎖,表鎖等,讀鎖,寫鎖等,都是在作操做以前先上鎖。 

    樂觀鎖:數據庫的多版本併發控制,MVCC,就是典型的樂觀鎖。

    參考:Mysql 的InnoDB事務方面的 多版本併發控制如何實現 MVCC

    MVCC注意:

  只有read-committed和 repeatable-read 兩種事務隔離級別才能使用mVcc

  read-uncommited因爲是讀到未提交的,因此不存在版本的問題

  而serializable 則會對全部讀取的行加鎖。  

  再來講更新數據丟失,全部的讀鎖都是爲了保持數據一致性。樂觀鎖若是有人在你以前更新了,你的更新應當是被拒絕的,可讓用戶重新操做。悲觀鎖則會等待前一個更新完成。這也是區別。具體業務具體分析 

  參考:Mysql 的InnoDB事務方面的 多版本併發控制如何實現 MVCC

      九、分佈式鎖,好比如何高效率的處理秒殺的業務

   參考:分佈式鎖簡單入門以及三種實現方式介紹(滴滴)

7、數據庫知識:

  一、redis與memeched的區別:

    redis 和 memeched 均可以作集羣,可是redis 能夠master-slave備份。(阿里面試)

    參考:Redis和Memcache的區別總結-京東阿里面試

   二、Redis中的Set的時間複雜度是多少,數據結構是什麼樣的,Redis的優勢和缺點,支持哪五種類型。

    時間複雜度是O(1) 由於Set是value爲null的HashMap而已,參考:

  參考:redis 數據類型詳解 以及 redis適用場景場合 

  三、索引掌握,關鍵是啥叫聚簇索引,彙集索引,非彙集索引都是啥啊

    參考:主鍵就是彙集索引嗎?

    參考:索引-數據庫 索引建立默認是非彙集索引

    參考:數據庫-索引 (彙集索引和非彙集索引)

    參考:數據庫索引- 複合索引(多列索引)

    參考: 索引都有哪些類型

    參考:何時用索引

    參考:sql-索引的做用(超詳細)

    參考:SQL有三個類型的索引,惟一索引 不能有重複,但彙集索引,非彙集索引能夠有重複

  四、SQL 後面有個加號,(+)含義是什麼

    參考:oracle的SQL語句中的(+)是幹什麼用的?

  五、SQL優化一個很大的SQL很慢,如何處理;用profile分析;

    參考:MySQL專題3 SQL 優化 

  六、DB鏈接池,經常使用的是兩個:DBCP,C3P0

     DBCP的經常使用參數包含了

    MaxActive:最大鏈接數

    MaxIdle 最大空閒數

    MinIdle 最小空閒數

    InitSize初始化鏈接數

    MaxWait 接池中鏈接用完時,新的請求等待時間,毫秒 MaxWait是最大等待秒鐘數

      參考:MySql數據庫鏈接池專題  

     七、Mysql中InnoDB與MyIsam的區別,以及InnoDB支持的三種鎖,行鎖,間隙鎖,next-key鎖;

           最大的區別是:InnoDB支持事務,MyIsam不支持事務。 

           Mysql的MVCC不能解決幻讀的問題,可是Mysql有間隙鎖功能,Mysql的間隙鎖工做在Repeatable Read隔離級別下面,能夠防止幻讀, 

      參考:Mysql 間隙鎖原理,以及Repeatable Read隔離級別下能夠防止幻讀原理(百度)

    參考:MySql的多存儲引擎架構, 默認的引擎InnoDB與 MYISAM的區別(滴滴)

          八、mysql多版本控制

        原子性(Atomicity), 一致性(Consistency),隔離性(Isolation),持久性(Durability)

       參考:MySql中啓用InnoDB數據引擎簡介 以及 InnoDB與 MYISAM的區別和聯繫

              參考MySql的多存儲引擎架構

           參考:數據庫事務的四大特性以及4種事務的隔離級別-以及對應的5種JDBC事務隔離級別

           參考:Mysql 的InnoDB事務方面的 多版本併發控制如何實現 MVCC

          數據庫鏈接池專題:MySql數據庫鏈接池專題

8、編程技巧知識:

  JVM調優:jstate查看內存使用,jmap的dump導出日誌等

  參考:Jvm dump介紹與使用(內存與線程)

  參考:如何在Windows下查看JAVA端口占用狀況(阿里面試)

   參考:jvm調優-從eclipse開始

  參考:Java JVM- jstat查看jvm的GC狀況[轉]

9、Maven

  一、如何解決Maven的版本衝突問題

  參考:Maven 3-Maven依賴版本衝突的分析及解決小結 (阿里,美團,京東面試)

      二、關於MAVEN的問題:Release 版本與SNAPSHOT之間的區別

   參考:maven snapshot和release版本的區別

    參考:Maven學習——一、安裝與修改Maven的本地倉庫路徑

 

10、ELK日誌收集系統:

  參考:經過ELK快速搭建一個你可能須要的集中化日誌平臺

11、對Hadoop的理解

   hadoop中的HBase,Hive,

12、Hibernate的理解

      一、Hibernate的延遲加載是如何實現的:使用了動態代理

          參考:Hibernate學習--hibernate延遲加載原理-動態代理(阿里電面) 

十3、協議 SOCKET,IO,HTTP ,TCP部分:

     一、 七層架構模型 +和四層架構模型(網絡接口層-->網絡層-->傳輸層 -->應用層)

            TCP三次握手,四次揮手,具體的SYN,ACK指代的含義 

           參考:TCP協議詳解7層和4層解析(美團面試,阿里面試) 尤爲是三次握手,四次揮手 具體發送的報文和狀態都要掌握

    二、BIO,NIO(Non-blocked IO),AIO的區別

    參考:IO複用,AIO,BIO,NIO,同步,異步,阻塞和非阻塞 區別(百度)

   三、select,poll,epoll的區別: 

       select,poll,epoll都是IO多路複用的機制   

        (1)select==>時間複雜度O(n)

       它僅僅知道了,有I/O事件發生了,卻並不知道是哪那幾個流(可能有一個,多個,甚至所有),咱們只能無差異輪詢全部流,找出能讀出數據,或者寫入數據的流,對他們進     行  操做。因此select具備O(n)的無差異輪詢複雜度,同時處理的流越多,無差異輪詢時間就越長。

       (2)poll==>時間複雜度O(n)

       poll本質上和select沒有區別,它將用戶傳入的數組拷貝到內核空間,而後查詢每一個fd對應的設備狀態, 可是它沒有最大鏈接數的限制,緣由是它是基於鏈表來存儲的,可是一樣      有一個缺點:

        (3)epoll==>時間複雜度O(1)

        epoll能夠理解爲event poll,不一樣於忙輪詢和無差異輪詢,epoll會把哪一個流發生了怎樣的I/O事件通知咱們。因此咱們說epoll其實是事件驅動(每一個事件關聯上fd)的,此時        咱們對這些流的操做都是有意義的。(複雜度下降到了O(1))

    參考:select、poll、epoll之間的區別(搜狗面試)

   四、IO 與NIO(New IO)的區別

        參考:Java NIO:IO與NIO的區別 -阿里面試題

     五、Http的數據結構,包含了兩類;response,request;分別是

          (a) Request:請求行,請求頭,空行,請求體

       (b) Response 狀態行,相應頭,空行,相應體

          參考:HTTP協議 結構,get post 區別(阿里面試)

     六、 cookie 和session的區別, session是無狀態的嗎?那如何知道是誰訪問的,怎麼過來的,AppSession;

          參考:Session, Cookie區別

十4、即時問題:

  微信如何作到,用手機的微信掃碼就能夠登陸電腦客戶端的:

  分析:

    如今有三方,服務器,微信手機端,微信電腦端,

  在電腦端點擊使用微信掃碼登陸,會彈出二維碼,這時候,電腦端會跟服務器端創建長鏈接。等待服務器指令。

  微信手機端掃碼後,若是手機端登錄了會將登錄的惟一標識傳給服務器,服務器收到惟一標識後,發送報文給微信電腦端,能夠登錄了。(必定是微信電腦端先去鏈接服務器,不能反過來)

 

十5、框架部署知識:

  一、如今我有mysql 3臺 Master +2 slave; 我想這樣 請求 Master 承擔20% 兩個 Slave 各自承擔40%如何處理:

  使用:DBProxy(),能夠作到這樣,不用改源碼,直接分配請求;

  參考:LVS+Keepalived實現DBProxy的高可用

  咱們知道 主從mysql數據庫,經過BinLog進行同步,究竟是如何同步的

  答:有個IO線程,一個負責拉取log,另外一個負責SQL寫日誌,

  二、Spring Cloud 如何處理服務熔斷的,A->B->C 出了問題,如何處理使用Hystrix,目前C服務 是C1,C2,C3三個服務器提供的負載均衡,C1壞了,請求直接發送到C2,C3如何實現負載均衡的?

   經過長鏈接,心跳的方式,健康檢查,每隔一段時間就發信息若是收不到請求,認爲服務器宕機了。

  三、Spring Cloud 和 Dubble的區別; 

    參考:Dubbo和Spring Cloud微服務架構比較

  四、Dubble支持異步嗎? 是長連接嗎

    答: Dubbo 缺省協議採用單一長鏈接和 NIO 異步通信,適合於小數據量大併發的服務調用,以及服務消費者機器數遠大於服務提供者機器數的狀況。

    參考:Dubbo和Spring Cloud微服務架構比較

  五、目前有個服務器我但願 請求每分鐘3萬次,若是超了自動拒絕,如何處理

    使用漏桶算法算法,令牌桶算法,

    參考:互聯網應對高峯流量控制- 漏桶算法和令牌桶算法(滴滴面試)

  六、我如今想服務器每分鐘接收一個用戶的請求小於60個,如何處理:

    使用Redis 緩存服務器,能夠設置key=用戶ID value不停地加一到了60就中止,而後把 redis的緩存時間設置爲1分鐘,過了一分鐘就 失效;

  七、如今A->B->C 三個服務相互依賴,有個用戶請求訪問了A->B->C,如何跟蹤,使用隱式傳參的方法,傳遞了上下文。 taskmasterid 

使用ThreadLocal參數隱式傳參

 

十6、Java 緩存知識Ehcache,redis

  參考:Hibernate性能優化之EHCache緩存

  參考:ehcache詳細解讀

  參考:5個強大的Java分佈式緩存框架推薦

  參考:ehcache、redis應用場景比較

十7、 Java調度任務:

  可使用Quartz 包含了兩部分:JobDetails 和Trigger,它能夠持久化到硬盤,

  Quartz源碼:

  SchedulerFactory schedFact=new StdSchedulerFactory();
        Scheduler sched=schedFact.getScheduler();
        sched.start();
        //建立一個JobDetail,指明 name,groupname,以及具體的Job類名,該Job負責定義具體的執行任務;
        JobDetail jobDetail=new JobDetail("myJob","myJobGroup",QuartzTest.class);
        jobDetail.getJobDataMap().put("type","FULL"); 
//         定義調度觸發規則,好比每1秒運行一次,共運行8次
           SimpleTrigger simpleTrigger=new SimpleTrigger("simpleTrigger","triggerGroup");
//         立刻啓動
           simpleTrigger.setStartTime(new Date());
//         間隔時間
           simpleTrigger.setRepeatInterval(1000);
//         運行次數
           simpleTrigger.setRepeatCount(8);           
        //用scheduler將JobDetail與Trigger關聯在一塊兒,開始調度任務;
        sched.scheduleJob(jobDetail,simpleTrigger);

  參考:深刻解讀Quartz的原理

  參考:Quartz集成springMVC 的方案二(持久化任務、集羣和分佈式)

  阿里的面試官問,若是如今不少調度任務,如何優化,可使用調度池,Java1.5以後,引入了ScheduledExecutor,參考:ScheduledExecutor,

  源碼:

 ScheduledExecutorService service = Executors.newScheduledThreadPool(10);

  參考:Java 幾種調度任務的Timer、ScheduledExecutor、 開源工具包 Quartz、開源工具包 JCronTab

   十8、消息隊列知識MQ:

       一、Kafka的消息隊列的特徵,kafka實現的原理: 

       參考:Kafka 簡介

       參考:kafka 數據一致性-leader,follower機制與zookeeper的區別;

  十9、Linux知識

     1、Linux 如何查詢上下五行 

    若是在只是想匹配模式的上下幾行,grep能夠實現。      
$grep -5 'parttern' inputfile //打印匹配行的先後5行 
 
$grep -C 5 'parttern' inputfile //打印匹配行的先後5行

$grep -A 5 'parttern' inputfile //打印匹配行的後5行 

$grep -B 5 'parttern' inputfile //打印匹配行的前5行

 查看mysql慢日誌中ip地址爲192.168.0.10發送過來的SQL語句的後面三行

tail -50 /usr/local/mysql/data/sql-slow.log |grep -3 '192.168.0.10'  

匹配PHP錯誤日誌中某一個字段  

tail -100 /data/logs/php/php_error_5.3.log  | grep  "Memcache::get()";

查看某一個文件第5行和第10行

 sed -n '5,10p' filename 這樣你就能夠只查看文件的第5行到第10行。

 

 

 動手題目: 

       (1) 讓兩個有序隊列 合併成一個有序隊列;

 

  

 其餘 

一、修改簡歷,把hadoop去掉;Android去掉;  

二、搜索引擎的架構,如何作到搜素的,原理是什麼?

Mysql索引結構及常見索引的區別

Mybatis的理解;

相關文章
相關標籤/搜索