首頁>Club>
3
回覆列表
  • 1 # 全網同名IT老哥

    肝了一個月的面試題終於來啦,大家開心不。

    2020年最新Java面試題整理,全網最全一份,包含各個技術棧,Java基礎,Java集合,多執行緒,Java異常,spring,spring MVC,spring boot,spring cloud,netty,dubbo,activemq,Java web,jvm,kafka,MongoDB,mybatis,MySQL,Nginx,rabbitmq,Redis,Tomcat,zookeeper,設計模式,資料結構,演算法,分散式,限流,降級,cap原理等等知識點

    話不多說,直接上圖

    總共80多個PDF

    【BAT必備】計算機網路面試題:

    連結:https://pan.baidu.com/s/1hFggmtdL1ZmE4utBlo8S1g 提取碼:qfkh

    【BAT必備】設計模式面試題

    連結:https://pan.baidu.com/s/1eXJveIVvQe-m3MdvLcT-fQ 提取碼:j0kx

    【BAT必備】資料結構演算法面試題:

    連結:https://pan.baidu.com/s/1daFN9jY03fXsqwc9LeKi2w 提取碼:5ab7

    【BAT必備】多執行緒面試題:

    連結:https://pan.baidu.com/s/1GdvsNESoHPBjWKN2h-iK7Q 提取碼:cqib

    【BAT必備】併發程式設計鎖面試題:

    連結:https://pan.baidu.com/s/1hXPPtMY2dvz-g7QcSTc3PA 提取碼:zhmy

    【BAT必備】tomcat面試題:

    連結:https://pan.baidu.com/s/1qPZXx4lmLynmaF0XjRTzpQ 提取碼:5m16

    【BAT必備】zookeeper面試題:

    連結:https://pan.baidu.com/s/1EhOee9e1Qe-Q6RC8KlthxA 提取碼:p2am

    【BAT必備】spring 全家桶面試題:

    連結:https://pan.baidu.com/s/1DXGO-N5P6QIGKLZ8LIVOuQ 提取碼:m9v7

    【BAT必備】rocketMq面試題:

    連結:https://pan.baidu.com/s/1TEF3yUR4OOaIpj-4ud_79A 提取碼:3g3d

    【BAT必備】redis面試題:

    連結:https://pan.baidu.com/s/1qlanxWBfwvKUObnHulCQiA 提取碼:rjo7

    【BAT必備】rabbitMq面試題:

    連結:https://pan.baidu.com/s/1ywLiq3IUJVyZosPLNrmyTA 提取碼:0td4

    【BAT必備】netty面試題:

    連結:https://pan.baidu.com/s/1Pbv4aelqOt1dUPA2SwEB_Q 提取碼:2w1e

    【BAT必備】Nginx面試題:

    連結:https://pan.baidu.com/s/1r8YNyOz0N6MJ9F0045lEZw 提取碼:49tl

    【BAT必備】MySQL面試題:

    連結:https://pan.baidu.com/s/1GeX6Fs4nNi6fTUHKxJ2SZw 提取碼:8pow

    【BAT必備】mybatis面試題:

    連結:https://pan.baidu.com/s/1xOYiaiQ2JpPt2jb6GdWjaA 提取碼:aqd3

    【BAT必備】MongoDB面試題:

    連結:https://pan.baidu.com/s/1QTVx1TF8tDn6LUJr7wdfOQ 提取碼:j1qt

    【BAT必備】Linux面試題:

    連結:https://pan.baidu.com/s/1veZ3dBJmz1PduCE5tl-e1A 提取碼:txpf

    【BAT必備】kafka面試題:

    連結:https://pan.baidu.com/s/1SWhiBCswleYGsDupSGzE6g 提取碼:o1gv

    【BAT必備】jvm面試題:

    連結:https://pan.baidu.com/s/1xi-QLq_I75kha439EGqELw 提取碼:kxde

    【BAT必備】java web面試題:

    連結:https://pan.baidu.com/s/1r3Bupn9qhJbw5ebR_6h94A 提取碼:qba4

    【BAT必備】Java基礎面試題:

    連結:https://pan.baidu.com/s/1J40nYKIoV_VMCumoRpIyhQ 提取碼:5xo7

    【BAT必備】dubbo面試題:

    連結:https://pan.baidu.com/s/10flnh7Tb0Oxd3yZPQOnjsA 提取碼:5gc9

    【BAT必備】activeMQ面試題:

    連結:https://pan.baidu.com/s/1igNB64dpMCjCQkRzvqCXpQ 提取碼:006a

    【BAT必備】分散式相關面試題大全面試題:

    連結:https://pan.baidu.com/s/1ZcpJDh07B2NPAL4_4VC6jQ 提取碼:w4mw

    【BAT必備】java面試題大全:

    連結:https://pan.baidu.com/s/11jw0Ua4CZiI8-S6EadM_iQ 提取碼:epmp

    【BAT必備】Java面試彙總

    連結:https://pan.baidu.com/s/1vG9_cNoiYBW5TY32S4wGnQ 提取碼:k087

    【BAT必備】2020年多家公司整理的350道Java面試題手冊

    連結:https://pan.baidu.com/s/1FEGQVTgiyKG0kCasYn-n2g 提取碼:f7y1

    【BAT必備】Java全部核心知識點整理

    連結:https://pan.baidu.com/s/1StG-ib70TDAE1Hb4NVLQRQ 提取碼:5rp1

  • 2 # 蘇州上元教育顧老師

    上元Java培訓:Java精英班企業面試題(九)

    1、接 口 是 否 可 繼 承 接 口 ? 抽 象 類 是 否 可 實 現(implements)介面? 抽象類是否可繼承實體類?

    介面可以繼承介面,而且一個介面可以同時繼承多個介面(這點和一個類只能繼承一個類不 同),抽象類也可以實現介面,抽象類可繼承實體類(非 final 的實體類)

    2、Java 中的列舉型別是什麼?有什麼作用?

    列舉型別是 jdk1.5 出現的,是那些由一組固定常量組成的型別,可以理解為一個特殊的類,其中的成員屬性就是當前類的一些以 public static final 進行修飾的例項,所以列舉也兼備了普通類的一些特點,例如,構造方法,成員屬性,成員方法等定義。可以用來定義一組 固定常量的集合。

    例如 Spring 管理事務時用到的@Transactional 註解中,其中涉及到事務的隔離級別,事 務的傳播性等屬性值都是利用列舉來表示的一組固定值。

    3、Java 中實現多型的機制是什麼?

    方法的重寫 Overriding 和過載 Overloading 是 Java 多型性的不同表現。重寫 Overriding

    是父類與子類之間多型性的一種表現,過載 Overloading 是一個類中多型性的一種表現。 另外一個父類可以有不同的子類,一個介面可以有不同的實現類,這也是一種多型的表

    現,這可以使得同一個型別有不同的表現。

    4、一個用 throws 宣告可能丟擲的異常的方法。如果有方法呼叫它,要如何處理?

    如果 throws 宣告的是檢查異常,那麼在呼叫它的方法中可以用 catch 捕獲,也可以在調 用它的方法上加上 throws 繼續向上丟擲。否則會有編譯錯誤!

    如果 throws 宣告的是非檢查異常,那麼可以採用上面處理檢查異常的方式進行處理, 此時就算什麼處理都不做,也不會出現編譯錯誤!

  • 3 # 愛思記憶

    不邀以來。

    在這3年的JAVA開發工作生涯中,從一開始被別人面試,再到後來給別人面試,總結出一些面試心得,也有一些自己的面試技巧。

    對於面試官,會看你的簡歷,會重點問你簡歷上寫的技術,所以你要精心準備自己簡歷上的問題,爭取知道了解80%-90%,自己不會的技術,不瞭解的技術,千萬不要寫在簡歷上,比如,你不會實現分頁技術,就一定不要多寫關於分頁的技術。

    其次,面試官主要還會問一些基礎問題,比如迴圈,字元型別等,還有就是三大框架,資料庫等,三大框架比如Spring,springmvc或struts2,mybatis或hibernate,還有資料庫Oracle,MySQL等。

  • 4 # 中公優就業

    1.不可變物件

    指物件一旦被建立狀態不能再改變。任何修改都會建立一個新的物件,如 String、Integer及其它包裝類。

    2.能否建立一個包含可變物件的不可變物件?

    可以。不要共享可變物件的引用就可以了,如果需要變化就返回原物件的一個複製。最常見的例子是物件中包含一個日期物件的引用.

    3.java 建立物件的方式採用new透過反射採用clone透過序列化機制

    前2者都需要顯式地呼叫構造方法. 造成耦合性最高的恰好是第一種,因此你發現無論什麼框架,只要涉及到解耦必先減少new的使用.

    4.switch中能否使用string做引數

    在idk 1.7之前,switch只能支援byte,short,char,int或者其對應的封裝類以及Enum型別。從idk 1.7之後switch開始支援String.

    5.Object中有哪些公共方法?equals()clone()getClass()notify(),notifyAll(),wait()6. object中定義了哪些方法?

    clone(), equals(), hashCode(), toString(), notify(), notifyAll(), wait(), finalize(), getClass()

    7. HashMap和HashTable的區別HashTable是執行緒安全的HashMap不是HashMap中允許存在null鍵和null值,HashTable中不允許8. HashMap的實現原理

    HashMap的底層實現是“基於拉鍊法的散列表”。

    9.String 是最基本的資料型別嗎?

    不是。Java中的基本資料型別只有8個:byte、short、int、long、float、double、char、boolean;除了基本型別(primitive type)和列舉型別(enumeration type),剩下的都是引用型別(reference type)。

    10.float f=3.4;是否正確?

    不正確。3.4是雙精度數,將雙精度型(double)賦值給浮點型(float)屬於下轉型(down-casting,也稱為窄化)會造成精度損失,因此需要強制型別轉換float f =(float)3.4; 或者寫成float f =3.4F;。

    11.Java有沒有goto?

    goto 是Java中的保留字,在目前版本的Java中沒有使用。《The Java Programming Language》附錄中有goto和const,但這兩個是目前無法使用的關鍵字,因此有些地方將其稱之為保留字,其實保留字這個詞應該有更廣泛的意義,因為熟悉C語言的程式設計師都知道,在系統類庫中使用過的有特殊意義的單詞或單詞的組合都被視為保留字。

    12.http1.0,http1.1,http2.0區別

    1.0相比1.1可以一次傳輸多個檔案,各類瀏覽器大概都支援3~5個請求同時傳送。

    http2.0主要是二進位制的格式替代了原來的文字,增加了多路複用和首部壓縮解決了head of line blocking,另外還有server pushing等新特性。

    協議的東西還是建議看一看官網的說明。

    13.Get/Post對快取的影響

    此題其實是問瀏覽器快取對於HTTP Method中Get和Post的請求是否支援,答案是不支援Post Method。Get可以被瀏覽器快取。

    14.多型的好處

    允許不同類物件對同一訊息做出響應,主要優點:

    可替換性:多型對已存在程式碼具有可替換性;可擴充性:增加新的子類不影響已經存在的類結構;介面性:多型是超累透過方法簽名,想子類提供一個公共介面,由子類來完善或者重寫它來實現的;靈活性;簡化性。15.程式碼中如何實現多型介面實現繼承父類重寫方法同一類中進行方法過載16.虛擬機器是如何實現多型的

    動態繫結技術(dynamic binding),執行期間判斷所引用物件的實際型別,根據實際型別呼叫對應的方法.

    17.介面的意義

    介面的意義用三個詞就可以概括:規範,擴充套件,回撥.

    18.抽象類的意義為其他子類提供一個公共的型別封裝子類中重複定義的內容定義抽象方法,子類雖然有不同的實現,但是定義時一致的19.父類的靜態方法能否被子類重寫

    不能。子類繼承父類後,有相同的靜態方法和非靜態,這是非靜態方法覆蓋父類中的方法,父類的該靜態方法被隱藏,另外子類可整合父類的靜態與非靜態方法,至於方法過載我覺得它其中一要素就是在同一類中,不能說父類中的什麼方法與子類裡的什麼方法是方法過載的體現。

    以上19道java經典面試題。

    最後

    為幫助那些往想網際網路方向轉行想學習,卻因為時間不夠,資源不足而放棄的人。我搜集整理了一套完整的IT學習資料,包括運營技巧、SEO最佳化等,比自己在網上零散收集的結構性和連貫性更強,只為幫助那些想學習的人!需要的同學可私信!私信!回覆“資料”

  • 5 # 首席分享官100

    我也是一直做java開發很多年啦,經歷過的面試很多了,大公司小公司都待過,給你一些建議吧。

    java面試題面還是很廣的,下面給你分類整理下來的。

    1、java基礎知識。比如面向物件的特徵、多型、訪問修飾符範圍、static和final關鍵字、抽象類與介面、深複製與淺複製、序列化與反序列化、幾種資料結構、拆箱與裝箱

    2、java集合相關的。比如集合框架理解、list、set、hashmap底層實現以及區別?hashmap底層原理,put和get方法怎麼實現的?hashmap與hashTable區別?concurrentHashMap底層實現?

    3、java異常處理。異常分類?編譯時異常與執行時異常區別?舉例子有哪些執行時異常?

    4、jvm記憶體模型。以及GC垃圾回收機智和演算法。

    5、spring相關。解釋IOC和AOP,以及他們的原理。bean生命週期

    6、mysql。索引是什麼?索引分類?索引最佳化?

    7、mybaits相關。動態標籤,字串替換,防注入。

    8、dubbo。dubbo服務註冊與發現。服務負載均衡演算法,dubbo配置與使用。

    9、多執行緒。synchronized用法與底層原理,與lock的區別?執行緒池有哪些?執行緒池有哪些引數?執行緒池最佳化?

    10、redis。redis資料型別有哪些,每個型別的使用場景?redis為什麼這麼快?redis怎麼保證高可用?redis怎麼保證與資料庫資料一致?

    11、訊息佇列。activeMQ、rabbitMQ、rocketMQ、kafka,都可以瞭解下,以及怎麼保證高可用和處理高併發。

    12、排序演算法與資料結構。氣泡排序、快速排序、選擇排序、插入排序等等

    大概就有這麼個方面的,好好準備還是有很多機會的。

  • 6 # 碼道成功

    SpringMVC什麼是Spring MVC ?簡單介紹下你對springMVC的理解?SpringMVC的流程?Springmvc的優點SpringMVC和struts2的區別有哪些?如何解決POST請求中文亂碼問題,GET的又如何處理呢?SpringAOP(面向切面程式設計)的原理 AOP的使用場景IOC(控制反轉)的原理Spring框架中的單例bean是執行緒安全的嗎?常用的註解 用到的設計模式Spring的優點(解耦、很多主流框架的整合 低侵入式設計,程式碼的汙染極低 等等)SpringBean的作用域事務機制Spring的核心類,及作用 如BeanFactory、ApplicationContext、BeanWrapperSpring支援的ORM? BeanFactory 介面和 ApplicationContext 介面有什麼區別 ?依賴注入的方式有幾種:介面注入、Setter注入、構造方法注入Mybatis什麼是mybatis?MyBatis與Hibernate有哪些不同?Mybait的優缺點常見的標籤分頁及常用的分頁外掛#{}和${}的區別是什麼? 一對一、一對多的關聯查詢 ? Mybatis的一級、二級快取:Mybatis比IBatis比較大的幾個改進是什麼?IBatis和MyBatis在核心處理類分別叫什麼?IBatis和MyBatis在細節上的不同有哪些?為什麼說Mybatis是半自動ORM對映工具?它與全自動的區別在哪裡?MyBatis與Hibernate有哪些不同?HibernateHibernate工作原理Hibernate是如何延遲載入(懶載入)?快取機制(一級快取、二級快取)Hibernate的查詢方式有幾種Hibernate中save、persist和saveOrUpdate這三個方法的不同之處?get()與load()的區別Hibernate中的SessionFactory有什麼作用? SessionFactory是執行緒安全的嗎?SpringBoot常用的starter有哪些Spring Boot 的配置檔案有哪幾種格式?它們有什麼區別?Spring Boot 的核心註解是哪個?常用的註解(如@EnableEurekaClient@EnableFeignClients @FeignClient @EnableTransactionManagement @RestController @Configuration @Order @ControllerAdvice等)Spring Boot 需要獨立的容器執行嗎?( 可以不需要,內建了 Tomcat/ Jetty 等容器。)執行 Spring Boot 有哪幾種方式?SpringBoot與SpringCloud的關係SpringCloud的各類元件(Feign、Eureka、Hystrix等)的理解及使用NginxNginx作用常用命令負載均衡的幾種常用方式?session不同步怎麼辦前端伺服器集群后做負載均衡和動靜分離其他

    Thymeleaf、freemarker等模板引擎

    NoSQL:Redis、Memcache和MongoDB等的區別、使用

    xml解析(DOM解析、SAX解析、JDOM解析、DOM4J解析)

    POI實現Microsoft Office格式檔案讀和寫的功能

    多執行緒、執行緒池的原理及實現

    設計模式

    Kafka、MQ等訊息機制

    Sql最佳化

    jvm原理

    常用搜索引擎Elasticsearch等

    紮實的java基礎

    程式猿,他們想的是什麼?他們想的永遠都是技術,他們崇尚的也永遠都是技術。

  • 7 # 程式設計師開源社群

    多執行緒、併發及執行緒的基礎問題

    1)Java 中能建立 volatile 陣列嗎?

    能,Java 中可以建立 volatile 型別陣列,不過只是一個指向陣列的引用,而不是整個陣列。我的意思是,如果改變引用指向的陣列,將會受到 volatile 的保護,但是如果多個執行緒同時改變陣列的元素,volatile 標示符就不能起到之前的保護作用了。

    2)volatile 能使得一個非原子操作變成原子操作嗎?

    一個典型的例子是在類中有一個 long 型別的成員變數。如果你知道該成員變數會被多個執行緒訪問,如計數器、價格等,你最好是將其設定為 volatile。為什麼?因為 Java 中讀取 long 型別變數不是原子的,需要分成兩步,如果一個執行緒正在修改該 long 變數的值,另一個執行緒可能只能看到該值的一半(前 32 位)。但是對一個 volatile 型的 long 或 double 變數的讀寫是原子。

    3)volatile 修飾符的有過什麼實踐?

    一種實踐是用 volatile 修飾 long 和 double 變數,使其能按原子型別來讀寫。double 和 long 都是64位寬,因此對這兩種型別的讀是分為兩部分的,第一次讀取第一個 32 位,然後再讀剩下的 32 位,這個過程不是原子的,但 Java 中 volatile 型的 long 或 double 變數的讀寫是原子的。volatile 修復符的另一個作用是提供記憶體屏障(memory barrier),例如在分散式框架中的應用。簡單的說,就是當你寫一個 volatile 變數之前,Java 記憶體模型會插入一個寫屏障(write barrier),讀一個 volatile 變數之前,會插入一個讀屏障(read barrier)。意思就是說,在你寫一個 volatile 域時,能保證任何執行緒都能看到你寫的值,同時,在寫之前,也能保證任何數值的更新對所有執行緒是可見的,因為記憶體屏障會將其他所有寫的值更新到快取。

    4)volatile 型別變數提供什麼保證?

    volatile 變數提供順序和可見性保證,例如,JVM 或者 JIT為了獲得更好的效能會對語句重排序,但是 volatile 型別變數即使在沒有同步塊的情況下賦值也不會與其他語句重排序。 volatile 提供 happens-before 的保證,確保一個執行緒的修改能對其他執行緒是可見的。某些情況下,volatile 還能提供原子性,如讀 64 位資料型別,像 long 和 double 都不是原子的,但 volatile 型別的 double 和 long 就是原子的。

    5) 10 個執行緒和 2 個執行緒的同步程式碼,哪個更容易寫?

    從寫程式碼的角度來說,兩者的複雜度是相同的,因為同步程式碼與執行緒數量是相互獨立的。但是同步策略的選擇依賴於執行緒的數量,因為越多的執行緒意味著更大的競爭,所以你需要利用同步技術,如鎖分離,這要求更復雜的程式碼和專業知識。

    6)你是如何呼叫 wait()方法的?使用 if 塊還是迴圈?為什麼?

    wait() 方法應該在迴圈呼叫,因為當執行緒獲取到 CPU 開始執行的時候,其他條件可能還沒有滿足,所以在處理前,迴圈檢測條件是否滿足會更好。下面是一段標準的使用 wait 和 notify 方法的程式碼:

    參見 Effective Java 第 69 條,獲取更多關於為什麼應該在迴圈中來呼叫 wait 方法的內容。

    7)什麼是多執行緒環境下的偽共享(false sharing)?

    偽共享是多執行緒系統(每個處理器有自己的區域性快取)中一個眾所周知的效能問題。偽共享發生在不同處理器的上的執行緒對變數的修改依賴於相同的快取行,如下圖所示:

    有經驗程式設計師的 Java 面試題

    8)什麼是 Busy spin?我們為什麼要使用它?

    Busy spin 是一種在不釋放 CPU 的基礎上等待事件的技術。它經常用於避免丟失 CPU 快取中的資料(如果執行緒先暫停,之後在其他CPU上執行就會丟失)。所以,如果你的工作要求低延遲,並且你的執行緒目前沒有任何順序,這樣你就可以透過迴圈檢測佇列中的新訊息來代替呼叫 sleep() 或 wait() 方法。它唯一的好處就是你只需等待很短的時間,如幾微秒或幾納秒。LMAX 分散式框架是一個高效能執行緒間通訊的庫,該庫有一個 BusySpinWaitStrategy 類就是基於這個概念實現的,使用 busy spin 迴圈 EventProcessors 等待屏障。

    9)Java 中怎麼獲取一份執行緒 dump 檔案?

    在 Linux 下,你可以透過命令 kill -3 PID (Java 程序的程序 ID)來獲取 Java 應用的 dump 檔案。在 Windows 下,你可以按下 Ctrl + Break 來獲取。這樣 JVM 就會將執行緒的 dump 檔案列印到標準輸出或錯誤檔案中,它可能列印在控制檯或者日誌檔案中,具體位置依賴應用的配置。如果你使用Tomcat。

    10)Swing 是執行緒安全的?

    不是,Swing 不是執行緒安全的。你不能透過任何執行緒來更新 Swing 元件,如 JTable、JList 或 JPanel,事實上,它們只能透過 GUI 或 AWT 執行緒來更新。這就是為什麼 Swing 提供 invokeAndWait() 和 invokeLater() 方法來獲取其他執行緒的 GUI 更新請求。這些方法將更新請求放入 AWT 的執行緒佇列中,可以一直等待,也可以透過非同步更新直接返回結果。你也可以在參考答案中檢視和學習到更詳細的內容。

    11)什麼是執行緒區域性變數?

    當使用ThreadLocal維護變數時,ThreadLocal為每個使用該變數的執行緒提供獨立的變數副本,每個執行緒都可以獨立地改變自己的副本,而不會影響其它執行緒所對應的副本,是執行緒隔離的。執行緒隔離的秘密在於ThreadLocalMap類(ThreadLocal的靜態內部類)

    執行緒區域性變數是侷限於執行緒內部的變數,屬於執行緒自身所有,不在多個執行緒間共享。Java 提供 ThreadLocal 類來支援執行緒區域性變數,是一種實現執行緒安全的方式。但是在管理環境下(如 web 伺服器)使用執行緒區域性變數的時候要特別小心,在這種情況下,工作執行緒的生命週期比任何應用變數的生命週期都要長。任何執行緒區域性變數一旦在工作完成後沒有釋放,Java 應用就存在記憶體洩露的風險。

    ThreadLocal的方法:void set(T value)、T get()以及T initialValue()。

    ThreadLocal是如何為每個執行緒建立變數的副本的:

    首先,在每個執行緒Thread內部有一個ThreadLocal.ThreadLocalMap型別的成員變數threadLocals,這個threadLocals就是用來儲存實際的變數副本的,鍵值為當前ThreadLocal變數,value為變數副本(即T型別的變數)。初始時,在Thread裡面,threadLocals為空,當透過ThreadLocal變數呼叫get()方法或者set()方法,就會對Thread類中的threadLocals進行初始化,並且以當前ThreadLocal變數為鍵值,以ThreadLocal要儲存的副本變數為value,存到threadLocals。然後在當前執行緒裡面,如果要使用副本變數,就可以透過get方法在threadLocals裡面查詢。

    總結:

    a、實際的透過ThreadLocal建立的副本是儲存在每個執行緒自己的threadLocals中的

    b、為何threadLocals的型別ThreadLocalMap的鍵值為ThreadLocal物件,因為每個執行緒中可有多個threadLocal變數,就像上面程式碼中的longLocal和stringLocal;

    c、在進行get之前,必須先set,否則會報空指標異常;如果想在get之前不需要呼叫set就能正常訪問的話,必須重寫initialValue()方法

    12)用 wait-notify 寫一段程式碼來解決生產者-消費者問題?

    請參考答案中的示例程式碼。只要記住在同步塊中呼叫 wait() 和 notify()方法,如果阻塞,透過迴圈來測試等待條件。

    13) 用 Java 寫一個執行緒安全的單例模式(Singleton)?

    請參考答案中的示例程式碼,這裡面一步一步教你建立一個執行緒安全的 Java 單例類。當我們說執行緒安全時,意思是即使初始化是在多執行緒環境中,仍然能保證單個例項。Java 中,使用列舉作為單例類是最簡單的方式來建立執行緒安全單例模式的方式。

    14)Java 中 sleep 方法和 wait 方法的區別?

    雖然兩者都是用來暫停當前執行的執行緒,但是 sleep() 實際上只是短暫停頓,因為它不會釋放鎖,而 wait() 意味著條件等待,這就是為什麼該方法要釋放鎖,因為只有這樣,其他等待的執行緒才能在滿足條件時獲取到該鎖。

    15)什麼是不可變物件(immutable object)?Java 中怎麼建立一個不可變物件?

    不可變物件指物件一旦被建立,狀態就不能再改變。任何修改都會建立一個新的物件,如 String、Integer及其它包裝類。詳情參見答案,一步一步指導你在 Java 中建立一個不可變的類。

    16)我們能建立一個包含可變物件的不可變物件嗎?

    是的,我們是可以建立一個包含可變物件的不可變物件的,你只需要謹慎一點,不要共享可變物件的引用就可以了,如果需要變化時,就返回原物件的一個複製。最常見的例子就是物件中包含一個日期物件的引用。

    資料型別和 Java 基礎面試問題

    17)Java 中應該使用什麼資料型別來代表價格?

    如果不是特別關心記憶體和效能的話,使用BigDecimal,否則使用預定義精度的 double 型別。

    18)怎麼將 byte 轉換為 String?

    可以使用 String 接收 byte[] 引數的構造器來進行轉換,需要注意的點是要使用的正確的編碼,否則會使用平臺預設編碼,這個編碼可能跟原來的編碼相同,也可能不同。

    19)Java 中怎樣將 bytes 轉換為 long 型別?

    String接收bytes的構造器轉成String,再Long.parseLong

    20)我們能將 int 強制轉換為 byte 型別的變數嗎?如果該值大於 byte 型別的範圍,將會出現什麼現象?

    是的,我們可以做強制轉換,但是 Java 中 int 是 32 位的,而 byte 是 8 位的,所以,如果強制轉化是,int 型別的高 24 位將會被丟棄,byte 型別的範圍是從 -128 到 127。

    21)存在兩個類,B 繼承 A,C 繼承 B,我們能將 B 轉換為 C 麼?如 C = (C) B;

    可以,向下轉型。但是不建議使用,容易出現型別轉型異常.

    22)哪個類包含 clone 方法?是 Cloneable 還是 Object?

    java.lang.Cloneable 是一個標示性介面,不包含任何方法,clone 方法在 object 類中定義。並且需要知道 clone() 方法是一個本地方法,這意味著它是由 c 或 c++ 或 其他本地語言實現的。

    23)Java 中 ++ 運算子是執行緒安全的嗎?

    不是執行緒安全的操作。它涉及到多個指令,如讀取變數值,增加,然後儲存回記憶體,這個過程可能會出現多個執行緒交差。

    24)a = a + b 與 a += b 的區別

    += 隱式的將加操作的結果型別強制轉換為持有結果的型別。如果兩這個整型相加,如 byte、short 或者 int,首先會將它們提升到 int 型別,然後在執行加法操作。

    (因為 a+b 操作會將 a、b 提升為 int 型別,所以將 int 型別賦值給 byte 就會編譯出錯)

    25)我能在不進行強制轉換的情況下將一個 double 值賦值給 long 型別的變數嗎?

    不行,你不能在沒有強制型別轉換的前提下將一個 double 值賦值給 long 型別的變數,因為 double 型別的範圍比 long 型別更廣,所以必須要進行強制轉換。

    26)3*0.1 == 0.3 將會返回什麼?true 還是 false?

    false,因為有些浮點數不能完全精確的表示出來。

    27)int 和 Integer 哪個會佔用更多的記憶體?

    Integer 物件會佔用更多的記憶體。Integer 是一個物件,需要儲存物件的元資料。但是 int 是一個原始型別的資料,所以佔用的空間更少。

    28)為什麼 Java 中的 String 是不可變的(Immutable)?

    Java 中的 String 不可變是因為 Java 的設計者認為字串使用非常頻繁,將字串設定為不可變可以允許多個客戶端之間共享相同的字串。更詳細的內容參見答案。

    29)我們能在 Switch 中使用 String 嗎?

    從 Java 7 開始,我們可以在 switch case 中使用字串,但這僅僅是一個語法糖。內部實現在 switch 中使用字串的 hash code。

    30)Java 中的構造器鏈是什麼?

    當你從一個構造器中呼叫另一個構造器,就是Java 中的構造器鏈。這種情況只在過載了類的構造器的時候才會出現。

    JVM 底層 與 GC(Garbage Collection) 的面試問題

    31)64 位 JVM 中,int 的長度是多數?

    Java 中,int 型別變數的長度是一個固定值,與平臺無關,都是 32 位。意思就是說,在 32 位 和 64 位 的Java 虛擬機器中,int 型別的長度是相同的。

    32)Serial 與 Parallel GC之間的不同之處?

    Serial 與 Parallel 在GC執行的時候都會引起 stop-the-world。它們之間主要不同 serial 收集器是預設的複製收集器,執行 GC 的時候只有一個執行緒,而 parallel 收集器使用多個 GC 執行緒來執行。

    33)32 位和 64 位的 JVM,int 型別變數的長度是多數?

    32 位和 64 位的 JVM 中,int 型別變數的長度是相同的,都是 32 位或者 4 個位元組。

    34)Java 中 WeakReference 與 SoftReference的區別?

    Java中一共有四種類型的引用。StrongReference、 SoftReference、 WeakReference 以及 PhantomReference。

    StrongReference 是 Java 的預設引用實現, 它會盡可能長時間的存活於 JVM 內,當沒有任何物件指向它時將會被GC回收

    WeakReference,顧名思義, 是一個弱引用, 當所引用的物件在 JVM 內不再有強引用時, 將被GC回收

    雖然 WeakReference 與 SoftReference 都有利於提高 GC 和 記憶體的效率,但是 WeakReference ,一旦失去最後一個強引用,就會被 GC 回收,而 SoftReference 會盡可能長的保留引用直到 JVM 記憶體不足時才會被回收(虛擬機器保證), 這一特性使得 SoftReference 非常適合快取應用

    35)WeakHashMap 是怎麼工作的?

    WeakHashMap 的工作與正常的 HashMap 類似,但是使用弱引用作為 key,意思就是當 key 物件沒有任何引用時,key/value 將會被回收。

    36)JVM 選項 -XX:+UseCompressedOops 有什麼作用?為什麼要使用?

    當你將你的應用從 32 位的 JVM 遷移到 64 位的 JVM 時,由於物件的指標從 32 位增加到了 64 位,因此堆記憶體會突然增加,差不多要翻倍。這也會對 CPU 快取(容量比記憶體小很多)的資料產生不利的影響。因為,遷移到 64 位的 JVM 主要動機在於可以指定最大堆大小,透過壓縮 OOP 可以節省一定的記憶體。透過 -XX:+UseCompressedOops 選項,JVM 會使用 32 位的 OOP,而不是 64 位的 OOP。

    37)怎樣透過 Java 程式來判斷 JVM 是 32 位 還是 64 位?

    你可以檢查某些系統屬性如 sun.arch.data.model 或 os.arch 來獲取該資訊。

    38)32 位 JVM 和 64 位 JVM 的最大堆記憶體分別是多數?

    理論上說上 32 位的 JVM 堆記憶體可以到達 2^32,即 4GB,但實際上會比這個小很多。不同作業系統之間不同,如 Windows 系統大約 1.5 GB,Solaris 大約 3GB。64 位 JVM允許指定最大的堆記憶體,理論上可以達到 2^64,這是一個非常大的數字,實際上你可以指定堆記憶體大小到 100GB。甚至有的 JVM,如 Azul,堆記憶體到 1000G 都是可能的。

    39)JRE、JDK、JVM 及 JIT 之間有什麼不同?

    JRE 代表 Java 執行時(Java run-time),是執行 Java 應用所必須的。JDK 代表 Java 開發工具(Java development kit),是 Java 程式的開發工具,如 Java 編譯器,它也包含 JRE。JVM 代表 Java 虛擬機器(Java virtual machine),它的責任是執行 Java 應用。JIT 代表即時編譯(Just In Time compilation),當代碼執行的次數超過一定的閾值時,會將 Java 位元組碼轉換為原生代碼,如,主要的熱點程式碼會被準換為原生代碼,這樣有利大幅度提高 Java 應用的效能。

    3 年工作經驗的 Java 面試題

    40)解釋 Java 堆空間及 GC?

    當透過 Java 命令啟動 Java 程序的時候,會為它分配記憶體。記憶體的一部分用於建立堆空間,當程式中建立物件的時候,就從對空間中分配記憶體。GC 是 JVM 內部的一個程序,回收無效物件的記憶體用於將來的分配。

    JVM 底層面試題及答案

    41)你能保證 GC 執行嗎?

    不能,雖然你可以呼叫 System.gc() 或者 Runtime.getRuntime().gc(),但是沒有辦法保證 GC 的執行。

    42)怎麼獲取 Java 程式使用的記憶體?堆使用的百分比?

    可以透過 java.lang.Runtime 類中與記憶體相關方法來獲取剩餘的記憶體,總記憶體及最大堆記憶體。透過這些方法你也可以獲取到堆使用的百分比及堆記憶體的剩餘空間。Runtime.freeMemory() 方法返回剩餘空間的位元組數,Runtime.totalMemory() 方法總記憶體的位元組數,Runtime.maxMemory() 返回最大記憶體的位元組數。

    43)Java 中堆和棧有什麼區別?

    JVM 中堆和棧屬於不同的記憶體區域,使用目的也不同。棧常用於儲存方法幀和區域性變數,而物件總是在堆上分配。棧通常都比堆小,也不會在多個執行緒之間共享,而堆被整個 JVM 的所有執行緒共享。 Difference between stack and heap memory in Java

    關於記憶體的的面試問題和答案

    Java 基本概念面試題

    44)“a==b”和”a.equals(b)”有什麼區別?

    如果 a 和 b 都是物件,則 a==b 是比較兩個物件的引用,只有當 a 和 b 指向的是堆中的同一個物件才會返回 true,而 a.equals(b) 是進行邏輯比較,所以通常需要重寫該方法來提供邏輯一致性的比較。例如,String 類重寫 equals() 方法,所以可以用於兩個不同物件,但是包含的字母相同的比較。

    45)a.hashCode() 有什麼用?與 a.equals(b) 有什麼關係?

    hashCode() 方法是相應物件整型的 hash 值。它常用於基於 hash 的集合類,如 Hashtable、HashMap、LinkedHashMap等等。它與 equals() 方法關係特別緊密。根據 Java 規範,兩個使用 equal() 方法來判斷相等的物件,必須具有相同的 hash code。

    46)final、finalize 和 finally 的不同之處?

    final 是一個修飾符,可以修飾變數、方法和類。如果 final 修飾變數,意味著該變數的值在初始化後不能被改變。Java 技術允許使用 finalize() 方法在垃圾收集器將物件從記憶體中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個物件沒有被引用時對這個物件呼叫的,但是什麼時候呼叫 finalize 沒有保證。finally 是一個關鍵字,與 try 和 catch 一起用於異常的處理。finally 塊一定會被執行,無論在 try 塊中是否有發生異常。

    47)Java 中的編譯期常量是什麼?使用它又什麼風險?

    公共靜態不可變(public static final )變數也就是我們所說的編譯期常量,這裡的 public 可選的。實際上這些變數在編譯時會被替換掉,因為編譯器知道這些變數的值,並且知道這些變數在執行時不能改變。這種方式存在的一個問題是你使用了一個內部的或第三方庫中的公有編譯時常量,但是這個值後面被其他人改變了,但是你的客戶端仍然在使用老的值,甚至你已經部署了一個新的jar。為了避免這種情況,當你在更新依賴 JAR 檔案時,確保重新編譯你的程式。

    Java 集合框架的面試題

    這部分也包含資料結構、演算法及陣列的面試問題

    48) List、Set、Map 和 Queue 之間的區別(答案)

    List 是一個有序集合,允許元素重複。它的某些實現可以提供基於下標值的常量訪問時間,但是這不是 List 介面保證的。Set 是一個無序集合。

    49)poll() 方法和 remove() 方法的區別?

    poll() 和 remove() 都是從佇列中取出一個元素,但是 poll() 在獲取元素失敗的時候會返回空,但是 remove() 失敗的時候會丟擲異常。

    50)Java 中 LinkedHashMap 和 PriorityQueue 的區別是什麼?(答案)

    PriorityQueue 保證最高或者最低優先順序的的元素總是在佇列頭部,但是 LinkedHashMap 維持的順序是元素插入的順序。當遍歷一個 PriorityQueue 時,沒有任何順序保證,但是 LinkedHashMap 課保證遍歷順序是元素插入的順序。

    51)ArrayList 與 LinkedList 的不區別?(答案)

    最明顯的區別是 ArrrayList 底層的資料結構是陣列,支援隨機訪問,而 LinkedList 的底層資料結構書連結串列,不支援隨機訪問。使用下標訪問一個元素,ArrayList 的時間複雜度是 O(1),而 LinkedList 是 O(n)。更多細節的討論參見答案。

    52)用哪兩種方式來實現集合的排序?(答案)

    你可以使用有序集合,如 TreeSet 或 TreeMap,你也可以使用有順序的的集合,如 list,然後透過 Collections.sort() 來排序。

    53)Java 中怎麼列印陣列?(answer答案)

    你可以使用 Arrays.toString() 和 Arrays.deepToString() 方法來列印陣列。由於陣列沒有實現 toString() 方法,所以如果將陣列傳遞給 System.out.println() 方法,將無法打印出陣列的內容,但是 Arrays.toString() 可以列印每個元素。

    54)Java 中的 LinkedList 是單向連結串列還是雙向連結串列?(答案)

    是雙向連結串列,你可以檢查 JDK 的原始碼。在 Eclipse,你可以使用快捷鍵 Ctrl + T,直接在編輯器中開啟該類。

    55)Java 中的 TreeMap 是採用什麼樹實現的?(答案)

    Java 中的 TreeMap 是使用紅黑樹實現的。

    56) Hashtable 與 HashMap 有什麼不同之處?(答案)

    這兩個類有許多不同的地方,下面列出了一部分: a) Hashtable 是 JDK 1 遺留下來的類,而 HashMap 是後來增加的。 b)Hashtable 是同步的,比較慢,但 HashMap 沒有同步策略,所以會更快。 c)Hashtable 不允許有個空的 key,但是 HashMap 允許出現一個 null key。 更多的不同之處參見答案。

    57)Java 中的 HashSet,內部是如何工作的?(answer答案)

    HashSet 的內部採用 HashMap來實現。由於 Map 需要 key 和 value,所以所有 key 的都有一個預設 value。類似於 HashMap,HashSet 不允許重複的 key,只允許有一個null key,意思就是 HashSet 中只允許儲存一個 null 物件。

    58)寫一段程式碼在遍歷 ArrayList 時移除一個元素?(答案)

    該問題的關鍵在於面試者使用的是 ArrayList 的 remove() 還是 Iterator 的 remove()方法。這有一段示例程式碼,是使用正確的方式來實現在遍歷的過程中移除元素,而不會出現 ConcurrentModificationException 異常的示例程式碼。

    59)我們能自己寫一個容器類,然後使用 for-each 迴圈嗎?

    可以,你可以寫一個自己的容器類。如果你想使用 Java 中增強的迴圈來遍歷,你只需要實現 Iterable 介面。如果你實現 Collection 介面,預設就具有該屬性。

  • 8 # 非著名程式設計師

    Java 面試題有哪些?面試經常會問什麼樣的問題?網際網路大廠的面試題是怎麼樣的呢?今天,我們就一起來聊一聊,關於 Java 相關的面試題。

    面試題推薦

    關於 Java 相關的面試題,其實有很多,而且在 GitHub 上,有很多人整理了很多 Java 相關面試題,而且這些面試題裡不僅配有答案,分析,很多面試題都包含了一些類似於 BAT TMD 等大廠的面試題,看這些面試題,可以讓你充分了解大廠面試 Java 會經常為什麼樣的問題。

    所以,今天我就給大家推薦兩個關於 Java 面試的開源專案。裡面就包含了很多 Java 面試題,還有經驗分享。

    JavaGuide

    這個開源專案就是:JavaGuide ,它已經有 6 萬多人 star 了。號稱是:【Java 學習 + 面試指南】,一份涵蓋大部分 Java 程式設計師所需要掌握的核心知識。

    來看一看包含了哪些核心知識吧!看圖:

    上面是整個開源專案的目錄,具體每個目錄下有什麼呢?如下:

    是不是內容很豐富呢?

    這個開源專案地址:

    https://github.com/Snailclimb/JavaGuide

    Java-Interview

    這個開源專案的名稱就是:Java-Interview ,它起的名字更厲害,更唬人,就是:Java 面試必會,直通 BAT 。對,就是這麼誇張,你看完之後,讓你直通 BAT 。

    裡面整合和整理了很多面試題。比如這樣:

    再比如,具體內容:

    不僅有問題,還帶有答案,也是整理很多 Java 相關的面試題。所以,建議大家在上面複習和學習,去應對面試,可以做到充分準備。畢竟,我們不打無準備之仗嘛。

    所以,你可以在 GitHub 上去獲取,一搜,出來一堆。GitHub 對於程式設計師來講,絕對是個好地方。

    怎麼樣,經過我這麼一回答,是不是豁然開朗了呢?如果感覺不錯,記得給個贊哦!

  • 9 # 陳三歲98

    正常人第一步肯定都會看面試題,我也不例外,在看的過程中,我發現有些文章寫的不錯,對我幫助不小值得推薦,如下:

    Java面試題全集(上) 很多基礎的東西,建議先看。

    各大公司Java後端開發面試題總結

    面試心得與總結—-BAT、網易、蘑菇街

    關於Java面試,你應該準備這些知識點

    深入學習

    在看面試題的過程,你會遇到一些自己沒接觸過的或者以前沒深入學習過的知識,例如最常問的HashMap內部實現原理,這就促使你得開始去看jdk的原始碼或者是學習一些新的東西。看原始碼是很重要的一步,起步很難,但是會讓你收益良多,看原始碼的過程如果碰到無法理解的地方,可以百度看下別人的理解。我學習原始碼的過程中,看過幾個人的關於原始碼的文章寫的很不錯,如下:

    熟悉專案

    找出自己工作以來開發過的最叼的功能,將整個功能的流程和涉及的東西吃透。專案是面試中必問的環節,一般是以一個功能點為基礎展開問,因此你必須對這個功能有很深的認識,不能有模糊的地方。如果有時間,能把涉及到的知識點也搞懂最好。

    做面試題

    有不少公司是有面試的,如果你沒有準備過,很容易在各種小地方犯錯,建議去一些面試題網站多做些題目,我自己是用的牛客網。

    學習記錄

    把自己每天的學習時間和學習內容記錄下來,可以讓自己更有動力的學習,學習是一個枯燥的過程,你必須讓自己時刻保持有動力。

    投簡歷、約面試環節

    在哪些網站投?

    拉勾網、BOSS直聘、獵聘網。

    是否該海投?

    投簡歷分為兩個情況。

    1)沒有社招面試經驗:建議採取海投的方式,只要職位要求跟自己比較匹配都可以投,累計面試經驗。這個環節可以把投簡歷的網站增加兩家:智聯和無憂。

    2)自認為社招面試經驗已經足夠:投那些職位匹配、公司滿意的職位。公司評價可以去看準網、百度、知乎等查詢。

    一天約幾家面試合適?

    最理想的情況為2家面試,上午一般在10點左右,下午一般在2點左右。建議把理想的公司放下午,因為下午的時間比較充足,可以讓公司更充分的瞭解你。我開始面的時候,每次都是上午面的不好,下午面的不錯。

    投簡歷經常沒下文?

    我當初也沒想到簡歷篩選這關有這麼難,可能是我的簡歷確實亮點不多,再者HR很多都不是行內人,因此他們看得最直接的就是你上家的公司和你畢業的學校,如果你不是從牛逼的公司/學校出來,可能會碰到和我一樣的情況,應對的辦法就是多投。

    是否該裸辭?

    我一開始是邊上班邊投,然後利用調休時間,或者請假去面試。後來,面試機會越來越多,請假太頻繁了,自己都不好意思了,並且自己也已經有足夠的信心,這個時候我選擇了裸辭。裸辭還有一個原因是,在面試過程中你會發現,有的公司要人要的緊,如果你的辭職流程過長可能會導致你錯過這個公司。

    注意事項

    1)面試前一天把路線和時間算好,最好別遲到。

    2)背個書包,帶好簡歷、充電寶、紙巾、雨傘。

    面試環節

    筆試常見的問題?

    面試常見的問題上面給的面試題連結基本都有。我只提幾點:1)寫SQL:寫SQL很常考察group by、內連線和外連線。2)手寫程式碼:手寫程式碼一般考單例、排序、執行緒、消費者生產者。我建議排序演算法除了氣泡排序,最好還能手寫一種其他的排序程式碼。試想:如果一般面試者都寫的氣泡排序,而你寫的是快速排序/堆排序,肯定能給面試官留下不錯的印象。

    面試流程?

    1)讓你自我介紹

    2)問Java基礎知識

    3)問專案

    4)情景問題,例如:你的一個功能上了生產環境後,伺服器壓力驟增,該怎麼排查。

    5)你有什麼想問面試官的

    一、Java基礎部分

    1、使用length屬性獲取陣列長度,public、private、protected、friendly區別

    2、Collection和Collections區別

    3、String s=new String(‘xyz’);建立了幾個object物件

    4、short s1;

    s1=s1+1;是否有錯?

    5、Overriding和Overloading區別

    6、Set裡面的元素不能重複,用什麼方法區分重複與否。

    7、給出一個常見的runtime exception。

    8、error和exception區別。

    9、List和Set是否繼承自Collection介面。

    10、abstract class和interface 的區別。

    11、是否可以繼承String類。

    12、try{}裡有一個return語句,緊跟在try後的finally裡的code會不會被執行,什麼時候執行,return前執行還是return後執行。

    13、最有效率的方法算2*8等於幾

    14、兩個物件值相同,x.equal(y)==true,但是卻可有不同的hashcode,這句話對不對。

    15、值傳遞和引用傳遞

    16、switch是否作用在byte、long、string上。

    17、ArrayList和Vector區別,HashMap和Hashtable區別(瞭解這幾個類的底層jdk中的編碼方式)。

    18、GC是什麼,為什麼要有GC,簡單介紹GC。

    19、float f=3.4是否正確。

    20、介紹Java中的Collection framework。

    21、Collection框架中實現比較方法

    22、String和Stringbuffer的區別

    23、final、finally、finalize區別

    24、面向物件的特徵

    25、String是最基本的資料型別嗎。

    26、執行時異常和一般異常的區別

    27、說出ArrayList、Vector、Linkedlist的儲存效能和特性

    28、heap和stack區別

    29、Java中的異常處理機制的簡單原理和應用

    30、垃圾回收的原理和特點,並考慮2種回收機制

    31、說出一些常用的 集合類和方法

    32、描述一下JVM載入Class檔案的原理和機制

    33、排序的幾種方法,瞭解。(演算法和資料結構在面試的時候還沒有被問到)

    34、Java語言如何進行異常處理,throws,throw,try catch finally代表什麼意義,try塊中可以丟擲異常嗎

    35、一個’.java’原始檔是否可以包括多個類,有什麼限制。

    36、Java中有幾種型別流,jdk為每種型別的流提供了一些抽象類以供繼承,請分別說出它們是哪些類。

    37、Java中會存在記憶體洩漏嗎,請簡單描述。

    38、靜態變數和例項變數的區別。

    39、什麼是Java序列化,如何實現java序列化。

    40、是否可以從一個static方法內部發生對非static方法呼叫。

    41、寫clone方法,通常都有一行程式碼。

    42、Java中如何跳出多重巢狀迴圈

    43、說出常用類、包、介面,各舉5個。

    44、Java中實現執行緒的方法,用關鍵字修飾同步方法。

    45、同步和非同步區別。

    46、執行緒同步的方法。

    47、字串常用方法,字串轉化為整型數方法,整型數轉化為字串方法。

    二、Java高階

    1、簡述面向物件的理解,並舉例說出你的理解。

    2、寫出單例模式。

    3、寫出一種11位手機號的正則表示式

    4、實現字串多個空格轉換一個空格

    5、字串常用方法,substring(),split()。

    6、start()和run()區別。

    7、寫出知道的設計模式。

    8、Webservice介紹。(這個我自己沒用過,渣渣了)

    9、說出Servlet生命週期,Servlet和CGI區別。

    10、sleep和wait的區別。

    11、什麼是發射,如何實現。

    12、檢查字串迴文,實現英文中單詞個數和單詞次數統計(部分公司要求較高,需要手動程式設計,百度查詢一些面試常用程式設計題即可)。

    13、tcp/ip協議三次握手。

    14、http協議幾種請求方式,區別。

    15、Ajax請求是否可以實現同步。

    16、隱藏URL方式。

    17、描述取到一個網頁內容的實現步驟,不需要具體實現過程(就是爬蟲:取到網頁的URL,然後從URL中國獲取網頁內容),考察邏輯思維能力。

    18、簡述form表單提交post方法與get方法在字元編碼、http協議方面的區別。

    19、一個http請求從開始到結束都經歷了哪些過程,簡寫流程圖。

    三、框架(只介紹自己熟悉)

    1、Spring中的事務管理,支援哪幾種方式,以及每種方式具體方法。

    2、Spring常用註解。

    3、Hibernate的快取級別。

    4、hibernate是什麼,工作原理。

    5、hibernate如何實現延遲載入。

    6、hibernate如何怎樣類之間的關係。

    7、struts1是什麼,工作流程。

    8、struts2工作流程。

    9、spring是什麼。

    10、介紹IOC和AOP。

    11、springmvc工作原理。

    12、Mybatis工作流程。

    13、Mybatis與Hibernate區別。

    14、Mybatis框架傳遞引數方式。

    15、簡述Spring事務管理,使用什麼設計模式實現。

    四、資料庫

    1、資料庫裡面的索引和約束是什麼。

    2、用SQL語句實現oracle分頁查詢。

    3、學生成績表的常用查詢(百度即可查到,常用的查詢語法)

    4、資料庫效能最佳化常用基礎知識,百萬級資料最佳化(百度搜搜即可)。

    5、left join ,right join用法。

    6、瞭解redis,memcache,mongodb等,最好有專案使用經驗。

    7、如何防止SQL注入。

    9、簡述悲觀鎖和樂觀鎖。

    五、linux基礎

    1、修改系統時間命令、修改許可權命令、

    六、前端基礎

    1、javascript中怎樣選中一個checkbox,設定它無效的方式。

    2、form表單 的input可以設定readonly和disable區別。

    3、javascript變數範圍有什麼不同,全域性變數和區域性變數。

    4、列舉3種資料型別。

    5、javascript常用物件

    7、jquery取值賦值基本方法。

    9、jquery的append與appendTo區別。

    10、CSS盒子模型的4個順序。

    一些經驗:

    1.先投一些普通公司,等面出了心得再去投理想的公司。

    2.不熟悉的技術不要主動提。

    3.對於那種實習期6個月還打8折的公司,除非你沒有其他選擇了,否則不要去。

    4.小公司喜歡在薪水上壓你,開的時候適當提高。

    5.不要去參加招聘會,純粹是浪費時間。

    6.把面試當作一次技術的交流,不要太在意是否能被錄取。

    7.公司一般面完就決定是否錄取了,讓你回去等訊息這種情況一般沒戲,無論你自己覺得面的有多好。

    8.儘量少透過電話面試,效果不好。

    9.在面試的日子裡,要保持每天學習,無論是學習新東西還是複習舊東西。

    10.拿到offer了,問問自己這個公司讓自己100%滿意了嗎,如果不是,請繼續努力找更好的。

    11.透過面試官可以大概判斷這家公司的情況。

    13.理想的公司可以多投幾次,我有好幾次都是第一次投被篩掉,多投幾次就過的經驗。

    14.問到自己有深入研究過的知識,抓住機會好好表現,不要輕易放過。

  • 10 # JavaCoder67

    1.HashMap底層+擴容

    JDK1.8的HashMap的底層是陣列+連結串列+紅黑樹,發生hash碰撞採用拉鍊法解決衝突。陣列中存放的是連結串列。連結串列的每一個節點是一個Entry,每個Entry中存放了Key,Value,hash值,還有指向下一個元素的引用。

    當hashMap中的元素個數超過 [陣列大小*負載因子] ,並且新的Entry落在了非空的位置,就會進行陣列擴容,將會建立原來HashMap大小的兩倍的陣列,將原來的物件放入新的位置上。預設情況下,陣列的大小為16,負載因子的預設值是0.75。

    需要注意的是,hashmap擴容的判斷,不一定是數量佔比超過0.75就會擴容,如果初始陣列16的時候,直接插入8個hashcode一樣的不同的元素,此時連結串列並不會轉換成紅黑樹,而是擴容,直到容量至少擴容到了64。

    參考文章:

    https://www.jianshu.com/p/c3633291ecdahttps://blog.csdn.net/wanderlustLee/article/details/80747860https://blog.csdn.net/wdyliuxingfeiyang/article/details/109162150

    2.MySQL索引資料結構

    MySQL中是使用B+樹作為索引。它是B樹的變種,因此是基於B樹來改進的。

    B+數的特性B+樹索引的所有資料全部儲存在葉子節點,並且資料是按照順序排列的。B+樹非葉子節點上不儲存資料,僅儲存索引。因為資料是按照順序排列的。所以B+樹在範圍查詢,排序查詢,分組查詢以及去重查詢這些操作上效率很高。

    參考文章:

    https://cloud.tencent.com/developer/article/1543335

    3.索引失效的情況

    如果條件中有or,即使其中有條件帶索引也不會使用(要想使用or,又想讓索引生效,只能將or條件中的每個列都加上索引)對於多列索引,不是使用的第一部分(第一個),則不會使用索引(最左字首原則)like查詢以%開頭如果列型別是字串,沒有加單引號會導致失效如果mysql估計使用全表掃描要比使用索引快,則不使用索引索引列上做計算、函式、型別轉換等操作

    參考文章

    https://cloud.tencent.com/developer/article/1704743https://blog.csdn.net/guoxingege/article/details/51034387https://segmentfault.com/a/1190000021464570

    4.最左匹配原則(abcd聯合索引,查bcd可以嗎)

    最左匹配原則就是指在聯合索引中,如果你的 SQL 語句中用到了聯合索引中的最左邊的索引,那麼這條 SQL 語句就可以利用這個聯合索引去進行匹配。

    5.資料庫併發事務產生的問題

    Read uncommitted 讀未提交Read committed 讀提交Repeatable read 重複讀Serializable 序列化

    參考文章

    https://cloud.tencent.com/developer/article/1833688

  • 中秋節和大豐收的關聯?
  • 為什麼大宗交易大多數都折價?大宗交易是機構收割散戶的利器嗎?