遇到過的面試題

自我介紹:
1.簡單的背景介紹 (Background)
第一部分,簡單介紹相似於「我叫xxx,xxx大學xxx專業研究生在讀,本科畢業於xxxx。目前我在xxx組織擔任xxx職位,在xxx公司兼任xxx職位……」這樣的信息。
2.相關工做經驗介紹 (Professional)javascript


我叫XXX,來自XX,就讀於XX,專業,畢業於, 編程是一項興趣愛好,後來就轉行進入這行,
平時喜歡接觸下各類各樣的技術,看下各類教程等 像C#A ,U3D等。
以前在前一個公司擔當批處理功能的開發,和Excel方面的交互,今天面試這個崗位是由於對金融或者支付
這方面的工做比較感興趣,css

0.說明下java的封裝,多態,和繼承有啥區別。前端

封裝:經過訪問修飾符來限制對類的屬性和方法的訪問,java

子類繼承父類的特徵和行爲,使得子類具備父類的各類屬性和方法。或子類從父類繼承方法,使得子類具備父類相同的行爲。
特色:在繼承關係中,父類更通用、子類更具體。父類具備更通常的特徵和行爲,而子類除了具備父類的特徵和行爲,還具備一些本身特殊的特徵和行爲。mysql

若是在子類中須要訪問父類中定義的同名成員變量或方法,須要用的關鍵字super


多態就是以一種類型來,表現出多種狀態
好比,車下,有寶馬,有奇瑞,他們都屬於車,定義一個車接口,兩種車都實現這個接口
在new出來,均可以用車接收,調用的時候,倒是調用的自己本身的方法。


1.簡單說明下java的設計模式。nginx

單例模式:在類自己就經過一個方法給new出來,外部經過這個方法去實例化,
加synchronized會線程安全,但是會影響效率。web

2.left join ,inner join ,right join 的差異,他們抽出的數據是否相同。
inner join 基於鏈接條件兩邊都有會抽出。
left join 若是右邊沒有對應的數據,那麼左邊會抽出,右邊爲null
right join若是左邊沒有對應的數據那麼右邊會抽出,左邊爲null面試

3.mybatis如何批量刪除和插入。
先在mybatis組裝成insert into tablename()value(),()的數據。
提交的時候能夠手動提交,每次提交1000個,以避免出現內存不足。

批量刪除的畫,也能夠採用一樣的方法,delete from emp where empno in ()要刪除的數據。ajax

4.session的生命週期,存放在哪裏。redis

Session存儲在服務器端,通常爲了防止在服務器的內存中(爲了高速存取),
Sessinon在用戶訪問第一次訪問服務器時建立,
須要注意只有訪問JSP、Servlet等程序時纔會建立Session,
只訪問HTML、IMAGE等靜態資源並不會建立Session,
可調用request.getSession(true)強制生成Session。

session的生命週期分爲建立、活動、銷燬三個階段

session的銷燬方式:
1.自動註銷,invalidate
2.過時,超時,默認時間爲30分鐘,
3.服務器重啓

5.如何解決兩個用戶同時操做一條數據,如何A 修改商品X爲20 元,B同時修改商品X爲30元。
能夠加一個last_update,來肯定最後的操做時間,可經過觸發器去實現。

6.說下spring的好處。
1.方便集成各類優秀框架,如Struts,Hibernate、mybatis均可以兼容
2.AOP編程的支持,方便進行面向切面的編程。

 

7.在一個方法體傳入一個list,在裏面進行修改,以後這個list會改變麼。爲何
集合這個東西跟數組同樣,你把它做爲實參傳過去,實際上並非傳的集合對象自己,而是它的地址(或者是引用,能夠這麼理解),
而後你在方法中操做集合,都是直接做用於集合自己而不是集合的值。


這跟普通的變量不同,普通的變量是值傳遞,你在方法內部操做一個變量只是在操做值,
原來的變量還在那裏不會改變。


8.目前寫過最複雜的SQL

with a_tablename as(
select xx as 1 ,ss as 2 where tablename id = 0 union all
select xx as 3 ,ss as 4 where tablename id != 0
)insert into b_tablename (xx,ss)select xx,ss from a_tablename


9.strtus攔截器

攔截器能夠作到在已有的業務中插入一塊共通的,
一個功能的時候記錄一下客戶的操做,這樣與其在一個個的action分別記錄,
直接在攔截器去記錄會更加的方便。攔截器,能夠設置默認,也能夠去設置攔截某些action。

執行後必定要invoke出去,這樣才能走到action


10.strtus 過濾器

過濾器實現Filter接口 ,在doFilter中寫實現

11.說下重定向問題
重定向能看到頁面上的地址的變化。
重定向,實際上是兩次request,第一次,客戶端request A,
服務器響應,並response回來,告訴瀏覽器,你應該去B。這個時候IE能夠看到地址變了,
並且歷史的回退按鈕也亮了。重定向能夠訪問本身web應用之外的資源。

12.strtus攔截器 和過濾器的區別
一、攔截器是基於java的反射機制的,而過濾器是基於函數回調 。
二、過濾器依賴與servlet容器,而攔截器不依賴與servlet容器 。
三、攔截器只能對action請求起做用,而過濾器則能夠對幾乎全部的請求 起做用 。
四、攔截器能夠訪問action上下文、值棧裏的對象,而過濾器不能 。
五、在action的生命週期中,攔截器能夠屢次被調用,而過濾器只能在容 器初始化時被調用一次


13.Servlet 是什麼,簡單的說明一下,
Servlet 是最簡單的用於進行web開發的工具,經過繼承HttpServlet,可以在doget或者dopost的狀況下,輸出web頁面。

生命週期:
Servlet 經過調用 init () 方法進行初始化。
Servlet 調用 service() 方法來處理客戶端的請求。
Servlet 經過調用 destroy() 方法終止(結束)


14.mysql性能優化

1.充分使用索引
2.開啓緩存 query_cache_type 爲 ON 表示已經開啓
3.當只要一行數據時使用 LIMIT 1,或者加上order by
4.爲搜索字段建索引
5. 千萬不要 ORDER BY RAND()
6. 避免 SELECT *

15.遞歸
public class Main {
public static void main(String[] args) {
fun(1);
}

public static void fun(int n) {
System.out.printf("1-lexe:%d \n", n); //#1
if (n < 3)
fun(n + 1);
System.out.printf("2-lexe:%d \n", n); //#2
}

}
16.ajax如何解決js腳本緩存問題
第一種:
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
17.性能分析的命令
1.show indexes 查看錶的索引
2.explain 分析表執行計劃
3.information_schema 包含的表的數量和mysql的版本和存儲引擎有關係。
4.show table status 能夠查看錶的存儲引擎
19.springmvc和Struts2的區別
因爲SpringMVC基於方法的攔截,有加載一次單例模式bean注入。
而Struts2是類級別的攔截,每次請求對應實例一個新的Action,須要加載全部的屬性值注入,
SpringMVC開發效率和性能高於Struts2。

spring MVC和Spring是無縫的。從這個項目的管理和安全上也比Struts2高(固然Struts2也能夠經過不一樣的目錄結構和相關配置作到SpringMVC同樣的效果,可是須要xml配置的地方很多)。
SpringMVC能夠認爲已經100%零配置。

20.掌握Spring mvc架構;


21.Hibernate的優缺點

優勢:兼容,和各類數據庫的兼容性好
Hibernate功能強大,數據庫無關性好,O/R映射能力強,
缺點:沉重,繁雜


22. 瞭解經常使用的軟件工具:MQ,Redis,Memcache,
Redis 是徹底開源免費的,遵照BSD協議,是一個高性能的key-value數據庫。

redis緩存,爲何要用緩存呢,舉個例子,假如系統中有2千萬用戶信息,用戶信息基本固定,一旦錄入不多變更,
那麼你每次加載全部用戶信息時,若是都要請求數據庫,數據庫編譯並執行你的查詢語句,這樣效率就會低下不少,針對這種信息不常常變更而且數據量
較大的狀況,一般作法,就是把他加入緩存,每次取數前先去判斷,若是緩存不爲空,那麼就從緩存取值,若是爲空,再去請求數據庫,並將數據加入緩存,
這樣大大提升系統訪問效率


經過該set,get來存取

 

2三、熟悉經常使用設計模式,有大型分佈式、高併發、高負載、高可用性系統設計開發經驗;

24.二、熟練掌握Spring、SpringMVC、MyBatis、SpringBoot、Zookeeper、Duboo等經常使用當前流行的技術及框架;

 


25. Struts2的工做流程
客戶端初始化一個指向Servlet容器(例如Tomcat)的請求
這個請求通過一系列的過濾器(Filter)(這些過濾器中有一個叫作ActionContextCleanUp的可選過濾器,這個過濾器對於Struts2和其餘框架的集成頗有幫助,例如:SiteMesh Plugin);
接着StrutsPrepareAndExecuteFilter被調用,StrutsPrepareAndExecuteFilter詢問ActionMapper來決定這個請求是否須要調用某個Action;
若是ActionMapper決定須要調用某個Action,StrutsPrepareAndExecuteFilter把請求的處理交給ActionProxy;
ActionProxy經過ConfigurationManager詢問框架的配置文件,找到須要調用的Action類;
ActionProxy建立一個ActionInvocation的實例。
ActionInvocation實例使用命名模式來調用,在調用Action的過程先後,涉及到相關攔截器(Intercepter)的調用。
一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果。
返回結果一般是(但不老是,也多是另外的一個Action鏈)一個須要被表示的JSP或者FreeMarker的模版。在表示的過程當中可使用Struts2框架中繼承的標籤。在這個過程當中須要涉及到ActionMapper。

 

26. 熟悉Struts/Spring/Hibernate等框架,能在開發環境中配置和使用Tomcat/nginx等;


27.Linux經常使用命令大全
cd /home 進入 '/ home' 目錄'
pwd 顯示工做路徑
ls 查看目錄中的文件
mkdir dir1 建立一個叫作 'dir1' 的目錄'
cp dir/* . 複製一個目錄下的全部文件到當前工做目錄



28.JavaScript中說明「==」和「===」之間的區別?
「==」僅檢查值相等,而「===」是一個更嚴格的等式斷定,若是兩個變量的值或類型不一樣,則返回false。

29. MySQL鎖

MySQL各存儲引擎使用了三種類型(級別)的鎖定機制:
表級鎖定,行級鎖定和頁級鎖定。

樂觀鎖

樂觀鎖不是數據庫自帶的,須要咱們本身去實現。
樂觀鎖是指操做數據庫時(更新操做),想法很樂觀,認爲此次的操做不會致使衝突,在操做數據時,並不進行任何其餘的特殊處理(也就是不加鎖),而在進行更新後,再去判斷是否有衝突了。

一般實現是這樣的:在表中的數據進行操做時(更新),
先給數據表加一個版本(version)字段,每操做一次,將那條記錄的版本號加1。
也就是先查詢出那條記錄,獲取出version字段,若是要對那條記錄進行操做(更新),
則先判斷此刻version的值是否與剛剛查詢出來時的version的值相等,
若是相等,則說明這段期間,沒有其餘程序對其進行操做,則能夠執行更新,
將version字段的值加1;若是更新時發現此刻的version值與剛剛獲取出來的version的值不相等,
則說明這段期間已經有其餘程序對其進行操做了,則不進行更新操做。



悲觀鎖
共享鎖

排它鎖

30.HashMap 和 HashTable的區別
HashMap是非線程安全的,只是用於單線程環境下,多線程環境下能夠採用concurrent併發包下的concurrentHashMap。
hashmap 是線程不安全的

HashTable的區別 是線程安全的,。

31.單一索引和聯合索引的區別

單一列索引能夠出如今where 條件中的任何位置,而聯合索引須要按必定的順序來寫.
在多條件查詢時,聯合索引效率要高.
32.冒泡排序

33.遞歸

34.整數
22 , 022 , 0x22
35.Tomcat優化

內存優化
配置優化

3、組件優化

36.spring 工做原理及事物機制

內部最核心的就是IOC了,動態注入,讓一個對象的建立不用new了,能夠自動的生產,
這其實就是利用java裏的反射,反射其實就是在運行時動態的去建立、調用對象,Spring就是在運行時,
跟xml Spring的配置文件來動態的建立對象,和調用對象裏的方法的
最明顯的一個例子就是sessionfactiory配置後,能夠直接的調用。不用再去new

 

AOP(Aspect-Oriented Programming): 面向方面編程
一、 代理的兩種方式:
靜態代理:
 針對每一個具體類分別編寫代理類;
 針對一個接口編寫一個代理類;
動態代理:
針對一個方面編寫一個InvocationHandler,而後借用JDK反射包中的Proxy類爲各類接口動態生成相應的代理類

 


37.css加載優先級
瀏覽器缺省 < 外部樣式表 < 內部樣式表 < 內聯樣式
38.mybatis工做原理
MyBatis應用程序根據XML配置文件建立SqlSessionFactory,SqlSessionFactory在根據配置,
配置來源於兩個地方,一處是配置文件,一處是Java代碼的註解,獲取一個SqlSession。
SqlSession包含了執行sql所須要的全部方法,能夠經過SqlSession實例直接運行映射的sql語句,
完成對數據的增刪改查和事務提交等,用完以後關閉SqlSession。

39.servlet 九大內置對象
request,response ,session ,application ,out ,page,config , exception , pageContext



40.ajax工做原理

Ajax的原理簡單來講經過XmlHttpRequest對象來向服務器發異步請求,從服務器得到數據,
而後用javascript來操做DOM而更新頁面。這其中最關鍵的一步就是從服務器得到請求數據。
要清楚這個過程和原理,咱們必須對 XMLHttpRequest有所瞭解。

缺點:1.即對瀏覽器後退機制的破壞。 二、安全問題 三、對搜索引擎的支持比較弱。

41.隊列
隊列是一種特殊的線性表,它只容許在表的前端進行刪除操做,而在表的後端進行插入操做。

 

42.java arraylist 和linklist區別
1.ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構。 (LinkedList是雙向鏈表,有next也有previous)
2.對於隨機訪問get和set,ArrayList以爲優於LinkedList,由於LinkedList要移動指針。
3.對於新增和刪除操做add和remove,LinedList比較佔優點,由於ArrayList要移動數據。


43.java操做xml用什麼
用SAXReader建立一個xml解析器對象

44.spring常見的註解
@Resource
@Autowired
@Service
@Repository
@Service註解,其實作了兩件事情:
(1)、聲明Zoo.java是一個bean,這點很重要,由於Zoo.java是一個bean,其餘的類纔可使用@Autowired將Zoo做爲一個成員變量自動注入。
(2)、Zoo.java在bean中的id是"zoo",即類名且首字母小寫。
@Controller
@Scope 默認是"singleton"即單例,"prototype"表示原型即每次都會new一個新的出來。

@Repository、@Service 和 @Controller。 @Component 是等效的
@Service用於標註業務層組件
@Controller用於標註控制層組件(如struts中的action)
@Repository用於標註數據訪問組件,即DAO組件
@Component泛指組件,當組件很差歸類的時候,咱們可使用這個註解進行標註。

45.消息中間件


46.spring 好處:
輕量:Spring 是輕量的,基本的版本大約2MB。
控制反轉:Spring經過控制反轉實現了鬆散耦合,對象們給出它們的依賴,而不是建立或查找依賴的對象們。
面向切面的編程(AOP):Spring支持面向切面的編程,而且把應用業務邏輯和系統服務分開。
容器:Spring 包含並管理應用中對象的生命週期和配置。
MVC框架:Spring的WEB框架是個精心設計的框架,是Web框架的一個很好的替代品。
事務管理:Spring 提供一個持續的事務管理接口,能夠擴展到上至本地事務下至全局事務(JTA)。

 

47.Spring框架中的單例bean是線程安全的嗎?

不,Spring框架中的單例bean不是線程安全的。
在 Spring中如何注入一個java集合?

48.Spring提供如下幾種集合的配置元素:

<list>類型用於注入一列值,容許有相同的值。
<set> 類型用於注入一組值,不容許有相同的值。
<map> 類型用於注入一組鍵值對,鍵和值均可覺得任意類型。
<props>類型用於注入一組鍵值對,鍵和值都只能爲String類型。

49. Spring支持的事務管理類型

Spring支持兩種類型的事務管理:

編程式事務管理:這意味你經過編程的方式管理事務,給你帶來極大的靈活性,可是難維護。
聲明式事務管理:這意味着你能夠將業務代碼和事務管理分離,你只需用註解和XML配置來管理事務。

50.ajax 跨域的問題 

一、使用jsonp

二、服務器代理

三、在服務端設置response header中Access-Control-Allow-Origin字段。

51.前++ 和後++ 的問題 首先,無論前++ 仍是後++,被+ 的變量都是會變化的,而,他們的區別就是賦值int b = 6;int a = b++; 後加加的話,就是在賦值後,再執行++;這裏a=6;b= 7 int c = ++b; 而前加是指在賦值前就加上,這裏c=7 ;b=7

相關文章
相關標籤/搜索