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