摘要:面試總結最近兩周面試了幾家公司高級工程師的職位,主要有宜信網信金融阿里高德口袋購物。目前有部分公司已經面試通過,兩家在等消息。今天趁熱把常見面試內容總結一下。可以用來完成統一命名服務狀態同步服務集群管理分布式應用配置項等管理工作。
面試總結
最近兩周面試了幾家公司Java高級工程師的職位,主要有宜信、網信金融、阿里高德、口袋購物。目前有部分公司已經面試通過,兩家在等消息。今天趁熱把常見面試內容總結一下。
Java基礎Hashtable和HashMap的區別。
抽象類與接口的區別。
final關鍵字的使用和區別。
異常分類和處理機制。
JDK版本區別。
StringBuilder內部實現機制。
反射機制的使用。
匿名內部類的使用。
泛型的概念和使用。
弱引用和虛引用的概念和使用方式。
SpringMVC和Struts2的區別
Spring IOC和AOP的概念以及實現方式
Spring事務的管理
Hibernate與MyBatis的比較
Hibernate延遲加載的機制
GC算法有哪些
垃圾回收器有哪些
如何調優JVM
緩存的使用場景
緩存命中率的計算
Memcache與Redis的比較
如何實現Redis的分片
MongoDB的特點
zookeeper的用途
dubbo的用途以及優點
dubbo的實現原理
單向鏈表的逆序排列
雙向鏈表的操作
1億個整數的倒序輸出
找出給定字符串中最長回文(回文:abcdcba,兩端對稱)
Get和Post的區別
Https協議的實現
長連接的管理
Socket的基本方法
inner join和left join的區別
復雜SQL語句
數據庫優化方式
數據庫拆分方式
如何保證不同數據結構的數據一致性
什么是XSS攻擊,具體如何實現?
開放問題:如何保障系統安全?
寫出一個設計模式的類圖
設計模式的意義是什么
寫個單例模式的代碼
如何避免Quartz重復啟動任務
線程池滿了如何處理額外的請求
同一個對象的連個同步方法能否被兩個線程同時調用
待更
2017年03月04日更新:距離發布文章已經很久,恰逢求職季,遂整理部分面試問題的答案,不甚完整,僅供參考。
部分答案 Java基礎 HashMap和Hashtable的區別HashMap是非線程安全的,Hashtable是線程安全的。
HashMap的鍵值都可以為null,Hashtable的鍵值都不可以為null值。
HashMap繼承自AbstractMap類,Hashtable繼承自Dictionary類。
ps : Properties類繼承自Hashtable類。
異常分類和處理機制分類:
運行時異常(Runtime Exception)
受檢查異常(Checked Exception)
運行時異常:
必須繼承RuntimeException類,
定義方法時不必聲明會拋出運行時異常。
調用方法時不必捕獲運行時異常。
受檢查異常:
不繼承自RumtimeException類
定義方法時需要拋出可能會拋出的Checked Exception
調用方法時需要捕獲Checked Exception或者繼續向上拋出。
邏輯上:
運行時異常:一般不需要或者不知道如何處理此類異常;
受檢驗異常:一般需要知道如何處理可能發生的異常情況。
StringBuilder內部實現機制StringBuilder內部有一個字符數組,代碼如下
char[] value; //字符數組 int count; //字符串長度
每一次append操作都是將新的字符串加入到可變長的字符數組中,長度計算方式與ArrayList類似。調用toString()方法時,new一個String對象即可。
public String toString() { return new String(value, 0, count);// Create a copy, don"t share the array }
ps: StringBuffer是線程安全的,StringBuilder是非線程安全的。
匿名內部類的使用匿名內部類是沒有名字的類,只在某一處被使用,不會被多處調用,一般是某個父類或接口的特定實現。
強引用、軟引用、弱引用和虛引用強引用: 一般的引用都是強引用,即使OutOfMemory也不會回收這部分被把持的引用內存。
軟引用(SoftReference): 如果內存空間足夠,垃圾回收器就不會回收它;如果內存空間不足了,就會回收這些對象的內存。只要垃圾回收器沒有回收它,該對象就可以被使用。++軟引用可以用來實現內存敏感的高速緩存。++
弱引用(WeakReference):弱引用的對象擁有更短暫的生命周期。當垃圾回收期發現只有若引用的對象,不論內存空間足夠與否,都會回收它。
虛引用():虛引用不會決定對象的生命周期,如果一個對象僅持有一個虛引用,那么它隨時可能被回收。++虛引用主要用來跟蹤對象被垃圾回收器回收的活動。++
更多關于『強、軟、弱和虛引用』參考文章:http://zhangjunhd.blog.51cto....
開源框架 SpringMVC和Struts2的區別SpringMVC的方法級別的攔截,Struts2是類級別的攔截;
SpringMVC是基于Servlet實現Controller,Struts2是基于Filter實現;
SpringMVC性能和安全性高于Struts2;
SpringMVC更加組件化和流程化,易于擴展,比如返回JSON通過設置@ResponseBody即可;
Struts2更加無耦合,比較純粹,但是需要更多的自行開發的代碼以支持更多功能。
Spring事務的管理 分類:聲明式事務、編程式事務聲明式事務:通過統一配置實現事務的統一管理,一般配置TransactionMananger以及相關屬性即可。
編程式事務(注解方式):在需要事務的方法上配置相關的注解(包括事務類型、回滾策略等)
事務類型:PROPAGATION_REQUIRED
PROPAGATION_SUPPORTS
PROPAGATION_MANDATORY
PROPAGATION_REQUIRES_NEW
PROPAGATION_NOT_SUPPORTED
PROPAGATION_NEVER
PROPAGATION_NESTED
事務隔離級別ISOLATION_DEFAULT
ISOLATION_READ_UNCOMMITTED
ISOLATION_READ_COMMITTED
ISOLATION_REPEATABLE_READ
ISOLATION_SERIALIZABLE
Hibernate與MyBatis的比較Hibernate完全實現對象關系映射(ORM),MyBatis實現的是SQL Mapping
MyBatis可以進行更為細致的SQL優化,可以減少查詢字段。比Hibernate容易掌握,Hibernate門檻較高。
Hibernate的DAO層開發比MyBatis簡單,Mybatis需要維護SQL和結果映射。
Hibernate對對象的維護和緩存要比MyBatis好,對增刪改查的對象的維護要方便。
Hibernate數據庫移植性很好,MyBatis的數據庫移植性不好,不同的數據庫需要寫不同SQL。
Hibernate有更好的二級緩存機制,可以使用第三方緩存。MyBatis本身提供的緩存機制不佳。
JVM虛擬機 GC算法有哪些引用計數
復制
標記-清除
標記-壓縮
分代(新生代、老年代、永久代)
垃圾回收器有哪些串行回收器:新生代串行回收器、老年代串行回收器
并行回收器:新生代ParNew回收器、新生代ParallelGC回收器、老年代ParallelGC回收器
CMS回收器:(Concurrent Mark Sweep、并發標記清除)
G1回收器(1.7以后代替CMS回收器)
如何調優JVM標準參數:
-client -server模式
-Xmn、-Xms、-Xmx
監控:jps、jstat、jinfo、jmap、jhat、jstack…
Java 中堆和棧有什么區別?JVM 中堆和棧屬于不同的內存區域,使用目的也不同。
棧常用于保存方法幀和局部變量,而對象總是在堆上分配。
棧通常都比堆小,也不會在多個線程之間共享,而堆被整個 JVM 的所有線程共享。
緩存和NoSQL 緩存命中率的計算命中緩存次數/(命中緩存次數+未命中緩存次數) = 命中率
Memcache與Redis的區別memcache把數據存在內存之中,斷電后會掛掉;Redis部分數據持久化在硬盤上,斷電不會丟失。
memcache存的是key-value對,redis支持更多的數據結構和數據類型
memcache可以使用一致性hash做分布式,redis可以做主從同步
redis單線程,只使用1個cpu
如何實現Redis的分片使用一致性哈希對數據進行映射
實現方式:客戶端分片(每個客戶端對應一個分片)、代理協助分片、查詢路由分片;
使用redis集群,如codis(豌豆莢,依賴zookeeper);
分布式 zookeeper的用途zookeeper作為分布式應用協調系統,已經用到很多分布式項目中。
可以用來完成統一命名服務、狀態同步服務、集群管理、分布式應用配置項等管理工作。
zookeeper的主要操作分一下幾種:
創建節點
讀取節點數據
更新節點數據
刪除節點
監控節點變化
應用場景:
統一命名服務,使用create自動創建節點編號;
配置管理,多個節點的共享配置,當配置發生變化時,可利用zookeeper讓使用這些配置的節點獲得通知,進行重新加載等操作。如dubbo服務。
集群管理:集群選舉主節點,資源定位。
共享鎖
負載均衡
應用項目:
dubbo服務集群、redis集群、Hadoop集群等
Dubbo是一個分布式服務框架,致力于提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。
數據結構和算法 將單項鏈表逆序排列將單向鏈表逆序輸出,方法有三種:
遍歷鏈表,將每個節點的內容存入一個數組中,然后逆序輸出數組(最簡單的做法)
使用棧來逆序輸出
直接將鏈表(指針)逆序然后輸出
單向鏈表詳細信息參考文章:http://blog.csdn.net/jianyuer...
海量數據操作十道面試題與十個海量數據處理方法總結
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65686.html
摘要:多線程不僅是后端開發面試中非常熱門的一個問題,也是各種高級工具框架與分布式的核心基石。有興趣的讀者可以參考本系列的第一篇文章來了解一下并發相關的基本概念當我們在說并發多線程,說的是什么。 多線程不僅是Java后端開發面試中非常熱門的一個問題,也是各種高級工具、框架與分布式的核心基石。但是這個領域相關的知識點涉及到了線程調度、線程同步,甚至在一些關鍵點上還涉及到了硬件原語、操作系統等更底...
摘要:數據結構和算法樹快速排序,堆排序,插入排序其實八大排序算法都應該了解一致性算法,一致性算法的應用的內存結構。如何存儲一個的。八大排序算法一定要手敲一遍快排,堆排尤其重要。面試是一個雙向選擇的過程,不要抱著畏懼的心態去面試,不利于自己的發揮。 前言 16年畢業到現在也近兩年了,最近面試了阿里集團(菜鳥網絡,螞蟻金服),網易,滴滴,點我達,最終收到點我達,網易offer,螞蟻金服二面掛掉,...
摘要:手寫深拷貝這個問題也是被問到了不止一遍,就連美團也問到了。個人能力有限,沒能挺到美團的最后一輪面試,不過面試的幾家公司也是涉及到了各行各業,這篇文章只是對即將面試的前端小伙伴們一個參考,最后效果還是要看個人努力的。 最近想著去市場中試試水,看看自己的幾斤幾兩。哈哈,然后大概遇到了這么幾類問題吧。寫出來和大家分享一下。 原生類 1.原型及原型鏈的問題 這個問題面試的公司都有問。其實這...
閱讀 2064·2023-04-25 22:58
閱讀 1408·2021-09-22 15:20
閱讀 2694·2019-08-30 15:56
閱讀 1986·2019-08-30 15:54
閱讀 2101·2019-08-29 12:31
閱讀 2728·2019-08-26 13:37
閱讀 592·2019-08-26 13:25
閱讀 2097·2019-08-26 11:58