面試心得

面試的知識點 java


注意:
一、不少問題是沒有標準答案的。
二、注意我的發揮和引伸。 
三、我的去查找答案。

-----------------------------------------------------------------
主要節點:

我的簡介(口述)?
這個很是重要。
體現表達能力。
別人不是先看簡歷,而是先聽你表達。把重點信息,串起來,簡單、直接地說出來。
重點信息包括,學歷,年限(共幾年,每一個公司幾年),
       哪幾家公司,作過哪些項目(項目名稱),
       知識體系(操做系統、編程語言、數據庫),
       學習方法(知識圖譜,分類法,比較法等),
       最近看什麼書(書的種類豐富),
       我的角色(技術骨幹、小組組長、項目負責人等),
       我的技能(java、c、linux、mysql、dubbo等),
       將來目標(架構師、不甘平凡),
       其餘可能吸引人的東西(學習小組、技術博客等)。
node

簡單、直接,不要冗長。整體說的時間不要長。
聲音洪亮,技術名稱語氣強調。

你的優勢?你的缺點?

作過什麼項目?

哪一個或哪些項目作的比較好?爲何?

遇到過什麼困難,怎麼解決的?有何收穫?

若是要你作這個系統或功能,你怎麼作?爲何?

你公司什麼業務?

你公司技術架構是什麼樣?

你公司技術架構的演進過程?

你的將來目標是?怎麼實現?

-----------------------------------------------------------------
技巧:

最重要的一點
必定要能說


別人看重的東西
思惟敏捷度、學習能力、技術能力、表達能力、團隊協做能力、知識體系、我的理想
重點想一下這些,怎麼表達出來,就能打動人心。

表達能力
說話連貫,聲音洪亮。吐字清晰。不要怯場。
把重點信息說出來,非重點的能夠在後面簡單帶過。

態度謙虛
不會的東西,就說不太清楚、目前還沒學到。不要不懂裝懂。
說錯了,就要認可說錯了,回去查查資料。不要知道說錯了,還不認可。
只知其一;不知其二的東西,不要說絕對了。 
要體現出主動學習的能力。
 
精神集中
面試是個體力活,時間長,不定時,須要精神高度集中。能夠先喝杯咖啡。
目光盯着面試官,或者桌面。表現出認真。

隨機應變能力
可能會遇到各類未知問題,這個太正常了。
主流程是同樣的。把主體把握住。
沉着冷靜,不知道的問題積累起來,回去查資料,下次就會了。

重點和引伸
知識都有重點,把握了重點就把握了大局。
從一個重點引伸出其餘重點,就能夠引導別人。
好比,java併發,重點是cas、aqs、併發集合、鎖、條件變量、原子類等。
          若是問到了併發集合,能夠把其餘幾個都引伸一下,說出來。別人就會繼續問,你就掌握了主動權。

多鍛鍊
在面試這個事上,我也經歷過不少失敗。
用100offer等,多跑幾家公司,各類業務,各類陌生人,各類問題,來鍛鍊情景感受,說話能力,隨機應變能力。
重點都是從這些鍛鍊中,總結出來的。 
多鍛鍊,才能說,必定要能說。

非技術類問題
這個很是多。
你怎麼帶手下的?怎麼codereview?將來目標是什麼?最近看了什麼書?
和boss聊天,要突出,本身的將來目標,作事的主觀能動性,善於學習和分享。 

-----------------------------------------------------------------
知識和重點:

重點的概念?
ioc原理,aop原理
服務化,服務治理
分佈式鎖,分佈式系統
noSql特色
技術選型
高併發,搶購
線程池,集合,併發
反向代理,負載均衡
讀寫分離,分庫分表分區,主從同步
一致性hash
事務,隔離級別
主鍵,索引,複合索引 
面向接口編程
序列化,持久化 
反射,動態代理 

重點的技術?
mysql
linux,shell
java,spring(ioc,aop),struts2,mybatis
redis,memcached,mongodb
zookeeper,dubbo,netty
lucene,solr,elasticSearch

我的素質?
表達能力,學習能力,溝通協調能力,主觀能動性,長遠目標

java?
集合,併發,

java併發?
CAS,AQS,併發集合,線程池,線程鎖,原子類

mysql?
存儲引擎,sql優化,索引原理,

服務化dubbo?
哪些部分

jvm?
經常使用參數,故障診斷工具
 
分佈式鎖?
阻塞式鎖,非阻塞式鎖
 
-----------------------------------------------------------------
Java相關:

Java線程池原理?
線程集合(多線程),阻塞隊列(多任務)
線程鎖,條件變量,線程同步
mysql

ExecutorService linux

ThreadPoolExecutor nginx

Executors web


Java併發包的組成?
java.util.concurrent
CAS,AQS 
併發容器,線程池,線程鎖,原子類

Java併發容器(經常使用的)?
面試

ConcurrentHashMap redis

CopyOnWriteArrayList 算法

CopyOnWriteArraySet spring

LinkedBlockingQueue

PriorityBlockingQueue

DelayQueue

LinkedBlockingDeque

ConcurrentSkipListMap

ConcurrentSkipListSet

ConcurrentHashMap的原理? 
徹底併發讀,部分併發寫。 

鎖分段技術。分而治之,所有數據分紅許多段segment,每一個段一把鎖。
不變性(final)和易變性(volatile)。用final、volatile,結合特殊的寫流程。

spring IOC原理? 
容器
控制反轉,依賴注入
工廠模式,
反射機制,動態代理
運行時建立、組裝對象
對象的關係解耦,用配置文件

spring用到的設計模式?
工廠模式,單例模式,原型模式等

非阻塞鎖和阻塞鎖?
阻塞鎖,鎖的狀態和等待隊列,線程阻塞
非阻塞鎖,原子CAS操做,線程循環

CAS和AQS?
CAS,CompareAndSwap,原子操做,比較和替換
AQS,AbstractQueuedSynchronizer,基於隊列的同步器
這2個是java併發包的基礎。

LinkedBlockingQueue、ArrayBlockingQueue的比較?
都是BlockingQueue的實現。使用鎖和條件變量。
LinkedBlockingQueue,基於列表,用Node包裝元素,大小可填可不填。
         頭尾2把鎖(takeLock、putLock),讀和寫不會相互競爭。併發性能高。
ArrayBlockingQueue,基於數組,用takeIndex、putIndex構建環狀隊列,必須指定大小。
         單線程性能好。1把鎖(lock),讀和寫會相互競爭。併發性能略低。

本身寫個鎖?
一、阻塞鎖,寫個AQS的子類和包裝類
二、非阻塞鎖,使用原子類和CAS

線程死鎖,避免線程死鎖?
2個線程,使用多個資源,加鎖順序不一樣,致使相互等待
梳理業務邏輯,順序執行
把大邏輯拆分紅小邏輯

spring用到的設計模式?
工廠模式,單例模式,原型模式

經常使用的設計模式?
工廠模式,
單例模式,
門面模式,統一對外接口,如 在線支付的入口只有一個,參數是訂單號和具體支付方式
策略模式,多種策略靈活由某種原則來自動選擇,如 在線支付根據具體支付方式來選擇支付方式處理類
責任鏈模式,多個處理節點,竄起來,方式多樣,遞歸法,循環法。
            方式1:處理器對象,有處理方法和下個處理器的引用,在處理方法中判斷是處理仍是調用下個處理器來處理。
            方式2:servlet的Filter和FilterChain,ApplicationFilterChain

-----------------------------------------------------------------
JVM相關:

內存模型?
分代法,新生代,老生代,永久代

GC原理?
分代法,youngGC,fullGC
引用計數法

jvm問題診斷的經常使用命令?
jmap
jstack
jstat

如何處理空白頁問題?
查看linux狀態
查看jvm狀態

jvm經常使用參數配置?

在tomcat的目錄下,找到bin/catalina.sh

在catalina.sh的頭部添加以下內容(具體值根據linux的內存容量修改)

# set jvm memory param 

JAVA_OPTS='-Xms256m -Xmx2048m  -XX:PermSize=128m -XX:MaxPermSize=728m'


-----------------------------------------------------------------
Linux相關:

查看系統負載?
uptime,vmstat,top等

經常使用命令?
略。

epoll原理和使用?
略。

-----------------------------------------------------------------
數據庫相關:

數據庫索引的原理?
平衡樹BTree,3或4層結構,多叉數,節點數據有序,2分查找
平衡樹變體

sql優化?
使用explain查看解釋計劃,從上往下,從左往右
核心是索引,減小全表查詢
注意索引字段,某些操做致使索引失效。如or(用union),in(用exists),not in(用not exists),!=,
        在左側字段用函數,like沒有用左前綴
少用外鏈接,多用內鏈接
減小關聯查詢,減小子查詢
只取出須要的列
用小結果集驅動大結果集
儘可能在索引中完成排序

mysql的存儲引擎和區別?
主要是InnoDB,MyISAM
InnoDB支持事務和行級鎖,MyISAM則不支持。
MyISAM的讀寫性能更高,有表級鎖。
MyISAM是Mysql自帶的,InnoDB是第三方公司的。

mysql的優勢?
開源、免費,定製化
簡單、高效
性能高、功能全
模塊化、插件化,第三方組件多 

mysql的聯合索引(複合索引、多值索引、多列索引)?  
左前綴原則。
所有字段都有,或左邊的字段有。
如 inx(a,b,c,d)
a=x and b=x and c=x and d=x 使用索引
a=x  使用索引
a=x and b=x 使用索引
c=x and d=x 不使用索引 

事務的特性?
ACID,原子性,一致性,持久性,隔離性

事務的隔離級別?
事務併發,可結合java併發編程理解,併發實現高性能,同時很難。
可能的問題,髒讀,不能重複讀,幻讀。
4個級別
Read uncommitted (讀未提交)

Read committed (讀提交),Oracle默認

Repeatable read (重複讀),MySQL默認

Serializable (序列化)


數據庫的分庫、分表、分區?
分庫,一個數據庫分解爲多個數據庫。
分表,大表分解爲多個子表。如order分紅order_1,order_2,order_3
分區,一個表,多個存儲文件,上層透明。區間法(數值區間、時間區間),散列法
垂直切分,按模塊劃分。如商家DB,商品DB,用戶DB。
水平切分,一個表的數據按某規則(如散列)分散到多庫多表。
帶來的問題,事務問題,jion問題,上層複雜度。

-----------------------------------------------------------------
noSql:

主要的noSql產品?
Redis,MongoDB,Memcached,Hbase,

爲什麼使用noSql?
速度快,半結構化,使用靈活,支持複雜業務邏輯,集羣,分佈式

Redis和Memcached的異同?
線程模型,單線程和多線程
事件驅動IO,epoll
數據結構,豐富和簡單
內存模型,即時分配和內存池slab
持久化,有和無
集羣

Redis和Memcached的內存管理的區別?
略。

-----------------------------------------------------------------
架構:

系統架構?
nginx,mysql,dubbo,zookeer,redis,mongodb,solr等
模塊化,分佈式,服務化,應用無狀態
高內聚,低耦合,面向接口
數據庫分庫分表,緩存集羣
時間換空間,空間換時間

dubbo架構?
分層結構,service,config,proxy,registry,cluster,monitor,protocol,exchange,transport,serialize
主要,註冊,提供方,使用方,協議,通訊,序列化,多線程,負載均衡。
NIO netty,對象序列化,線程池,動態代理類,
dubbo網絡協議,註冊管理器zookeeper,
服務提供者列表,服務消費者列表,節點故障檢測等

dubbo配置?
服務提供方,服務使用方,
zookeeper
version,timeout,retries等

dubbo LoadBalance負載均衡算法?
com.alibaba.dubbo.rpc.cluster.loadbalance.XXX
Random隨機算法,random.nextInt(XX),按列表大小或總權重設置隨機機率,默認
ConsistentHash一致性哈希算法,不少個虛擬節點
RoundRobin輪詢算法,按權重設置輪詢比例
LeastActive最少活躍算法,慢的提供者接收更少請求

zookeeper原理?
目錄樹結構,znode節點和子節點,
觀察者模式,事件監聽,主動通知,回調
永久節點(persistent),臨時節點(session),順序節點(sequence)
數據的強一致性,原子性

怎麼負載均衡?
整體上,模塊化,服務化,分佈式,多節點,緩存集羣,靜態數據分離
細節上,精簡邏輯,同步轉異步,請求隊列,線程池

設計個搶購系統?
同步轉異步
前置校驗,後置校驗
請求編號,檢查數量大小,放入請求隊列
緩存


-----------------------------------------------------------------
分佈式:

什麼是分佈式?
分佈式存儲,分佈式計算
突破單機瓶頸,提倡水平擴展
多點故障,容錯
統一配置管理zookeeper
hbase,元數據和具體數據
mapreduce,任務分解和合並

分佈式鎖?
一、用redis的cas操做實現
二、用zookeeper的臨時序列節點實現
鎖節點和請求節點,請求節點序列號遞增
請求節點,正序排,最小的得到鎖

分佈式事務?
分佈式系統的數據一致性?
不考慮分佈式事務,採用弱一致性
局部實時一致,全局最終一致
把事務過程拆分紅多箇中間狀態,定時器掃描,中間狀態都一致就都成功,不然都失敗
兩階段提交法,協調者,事務參與者,請求階段,提交階段
錯誤補償機制

-----------------------------------------------------------------
web相關:

頁面重定向的過程?
一、瀏覽器端,發起頁面請求,如"http://baidu.com"
二、服務器端,寫入狀態碼301或302,寫入一個header location,值爲新的url,如"http://www.baidu.com"三、瀏覽器端,發現是301或302,就把header location取出來,跳轉到這個location-----------------------------------------------------------------完。 

相關文章
相關標籤/搜索