1.自我介紹
2.問你做過的項(xiàng)目,涉及的框架技術(shù)。
3.具體介紹Java四個基本屬性(抽象,繼承,多態(tài),封裝)這時(shí)他可能就會問你對多態(tài)的理解及哪個地方用到了多態(tài)。
抽象:說白就是把對象共同特征總結(jié)出來,構(gòu)造類的一個過程,其中抽象有兩個方面,1.數(shù)據(jù)抽象和行為抽象,抽象和類是一樣的也是只關(guān)注屬性和方法。不關(guān)心方法中做了什么。
繼承:要清楚是從已有的類的繼承信息創(chuàng)造新的類的一個過程,強(qiáng)調(diào)一下是已有的類。其中提供信息的一方稱之為父類,超類及基類。得到繼承信息的一方稱之為子類,有了繼承讓系統(tǒng)有了一定的延續(xù)性,子類可以有自己的個性。
封裝:人們通常會把封裝認(rèn)為是把數(shù)據(jù)和操作數(shù)據(jù)的方法進(jìn)行綁定在一起,要想訪問你只能通過訪問已定義好的接口,這也表明了面向?qū)ο蟮乃枷刖褪前熏F(xiàn)實(shí)存在的世界進(jìn)行一個完全治理,封閉式的這么一個對像,也可以這么說封裝是想把隱藏一些要隱藏的東西,只向外面提供一個可以調(diào)用的接口。
多態(tài):指的是允許不同子類對象對同一信息做出不同的響應(yīng)。
多態(tài)的實(shí)現(xiàn)方式有哪些:
重載:也稱為前綁定,實(shí)現(xiàn)的是編譯時(shí)的多態(tài)性
重寫:也稱為后綁定,運(yùn)行時(shí)的多態(tài)性
這里簡單舉一個例子,我們知道現(xiàn)實(shí)中有兩種人一個是買房人一個是賣房人,他們在登陸界面成功時(shí)會出現(xiàn)不同的界面,但是他們登陸的方法都是同一個父類只是一個不同操作罷了。
4.考官經(jīng)常會問的一個問題也是初學(xué)者難以口頭表達(dá)出來的東西,或許你知道怎么回事就是說不出來。
面向?qū)ο蠛兔嫦蜻^程的區(qū)別:
面向過程:相當(dāng)于管家對細(xì)節(jié)的事無微不至。
面向?qū)ο螅菏潜扔鳛榧矣秒娖?,只要知道她的功能就行只知道怎么用就可以,不要搞清楚她的原理?/p>
這里舉個例子:面向過程注重的是事件,比如你開車到學(xué)校,車子發(fā)動時(shí)是一個事車 子到達(dá)學(xué)校時(shí)又是一個事件。注重的是事件。面向?qū)ο箨P(guān)心的是對象的本身也就是汽車,從汽車到達(dá)學(xué)校只不過是他的行為。
面向過程時(shí)能不能實(shí)現(xiàn)面向?qū)ο瘢?/p>
那是不是表示不能面向?qū)ο螅?/p>
5.重寫和從載,我們怎么確定用哪個:
重載:發(fā)生在同一個類中,方法名相同只不過是參數(shù)不同。
重寫:
6.面向?qū)ο箝_發(fā)時(shí)的六個基本原則:
單一職責(zé):不管項(xiàng)目多大,功能多么復(fù)雜。一個類只能做他該做的事也是所謂的高內(nèi)聚。
開放封閉: 開放指的是擴(kuò)展開放,封閉指的是修改封閉。開放和封閉要做到兩點(diǎn),1.要有抽象類或接口,那么你就很難去擴(kuò)展其功能點(diǎn)也就是業(yè)務(wù)層。2.封裝的可變性:把一個可變的因素封裝到一個繼承體系當(dāng)中。
里氏替換:子類繼承父類,在類當(dāng)中子類的能力一定是父類之上,這樣子類也就可以替換掉父類。
依賴倒置:是我們后面學(xué)到的面向接口的一個編程,也就一些聲明方法的參數(shù)類型,我們回憶下高中數(shù)學(xué)通常都會用一個未知數(shù)X來替代,解出方程。那么接口也就相當(dāng)于這個X,當(dāng)我們還不知道這個子類型時(shí)通常會用抽象類型來替代。
合成聚合復(fù)用:優(yōu)先使用聚合。
接口隔離:接口我們一定要做到小而專心。不可讓他變得過于臃腫那簡直時(shí)對接口的侮辱,我們要深刻明白一種接口我們只能用為一種功能,也常常表示為接口的高內(nèi)聚。
7.static和final的區(qū)別和用途
Static:1.靜態(tài)變量隨著累加載時(shí)會被初始化,內(nèi)存中也就只能有一個,jvm也只分配她一次內(nèi)存,所有的類都可以共享她的靜態(tài)變量。2.static方法必須實(shí)現(xiàn),當(dāng)然也就不能抽象方法來修飾。
Final:分為兩種常量,一種叫編譯時(shí)的常量:完成了初始化后帶入計(jì)算機(jī)中,一種基本常量。
另一種是運(yùn)行時(shí)的常量,也是叫基本數(shù)據(jù)類型或叫引用數(shù)據(jù)類型。記住引用是不能變,變得是她的對象。同時(shí)不能被繼承更不能被子類修改。
8.java實(shí)現(xiàn)多線程的三種不同方式及區(qū)別在哪里
8.1.繼承Thread類,重寫run函數(shù)。
繼承Thread類和runnable方法開啟線程使用的是start方法。虛擬機(jī)會對這線程放入隊(duì)列中,如果說有處理機(jī)可以用,會優(yōu)先運(yùn)行run方法。
8.1.2.實(shí)現(xiàn)他的Runnable接口
8.1.3.實(shí)現(xiàn)他的Callable接口
9.Jsp&Servlet
Servlet的生存周期中Servlet接口定義的五種方法。
9.1.-void init(ServletConfig config)throws ServletException
9.2.void servlet(ServletRequest req,ServletResponse resp)。。。
9.3.void destory()
9.4.java.lang.String.getSercletInfo()
9.5.ServletConfig getServletConfig()
Web容器要加載service()方法讓他進(jìn)行實(shí)力化之后也就表明她的生命周期就開始了init()方法讓其初始化,請求達(dá)到時(shí)調(diào)用Servlet的service方法,會根據(jù)其對應(yīng)的請求調(diào)用doget和dopost方法。瀏覽器是無腦子的,卸載時(shí)Servlet實(shí)例就會摧毀,這時(shí)就會調(diào)用Servlet的destroy方法。
10.了解Jsp&Servlet區(qū)別
Servlet無疑是一個特殊的Java程序,他是運(yùn)行在虛擬機(jī)上的,是通過服務(wù)器像瀏覽器提供并顯示內(nèi)容,JSP本質(zhì)上就是Servlet簡易的一種形態(tài),此時(shí)JSP就會被服務(wù)器處理變成一個可處理的類,為的是簡化頁面內(nèi)容的生成。JSP和Servlet不同之是處在于,Servlet應(yīng)用邏輯是在Java文件中,他是從HTML分離開來的。但JSP是在HTML加上java組成一個擴(kuò)展名為.jsp文件。jsp注重的更是視圖一個表現(xiàn)層的東西而Sevlet注重的則是邏輯方面,后面如果我們學(xué)到框架中SpringMvc就會深刻理解到JSP注重的是視圖(view)而里面的Servlet充當(dāng)?shù)氖强刂破鳌?/p>
11.cookie和session的區(qū)別
session是在服務(wù)器端的,cookie呢是在客戶端的。
session和cookie是有緊密關(guān)系的,當(dāng)我們session運(yùn)行依賴的是session中的id但id又是存在于cookie當(dāng)中是不是很玄妙,也就是你要是禁止了cookie同時(shí)session肯定會失效,但是,不是絕對的因?yàn)槲覀兛梢杂闷渌姆椒ū热缬寐窂降男问酵ㄟ^路徑url聚載他的id。
比較常見session的時(shí)候應(yīng)該就是用戶驗(yàn)證了吧。
你要明白cookie是不安全的因?yàn)槲覀兌伎梢钥吹剿钥紤]到安全問題我們要用session。但session也不是最好的因?yàn)槲覀冎纒ession是保存在服務(wù)器上的,要是訪問量多了你。你的性能就會下降,只能說看情況辦事。
12.Spring&Hibernate
詳細(xì)介紹SpringIOC和IOP的理解和工作原理
1.SpringIOC:IOC也為控制反轉(zhuǎn)全名如果不記錯應(yīng)該驕傲Inversion of Control。有一個叫DI的也就我們經(jīng)常說的依賴注入,控制反轉(zhuǎn)的概念我更喜歡解譯為把傳統(tǒng)的代碼對,對像的操控交給了容器,通過容器對其裝配和管理。所以控制反轉(zhuǎn)就是把控制權(quán)的轉(zhuǎn)移。從代碼的本身交給了外部容器,這樣容器就可以創(chuàng)建他的對像并且管理對像與對像的依賴關(guān)系,這樣容器就可以動態(tài)的將這種依賴關(guān)系注入到組件當(dāng)中去。
Spring IOC 的實(shí)現(xiàn)原理:
1.通過反射去創(chuàng)造實(shí)例的
2獲取她要注入的接口實(shí)現(xiàn)類并將返回給接口。
Spring AOP:
AOP全稱為Aspect-Oriented Programing?一種設(shè)計(jì)范型,他是面向切面為基礎(chǔ)的,切面說白點(diǎn)就是一個機(jī)制一個具有模塊化的機(jī)制,用來描述分散在對象、類或方法中的橫切關(guān)注點(diǎn)(crosscutting concern)。 ○ "橫切關(guān)注"是會影響到整個應(yīng)用程序的關(guān)注功能,它跟正常的業(yè)務(wù)邏輯是正交的,沒有必然的聯(lián)系,但是幾乎所有的業(yè) 務(wù)邏輯都會涉及到這些關(guān)注功能。通常,事務(wù)、日志、安全性等關(guān)注就是應(yīng)用中的橫切關(guān)注功能。?
Spring AOP實(shí)現(xiàn)原理:
動態(tài)代理:他是將代理模式變成動態(tài)的,利用的是反射和動態(tài)編譯原理
JDK動態(tài)代理:JDKProxy返回動態(tài)代理類,是目標(biāo)類所實(shí)現(xiàn)接口的另一個實(shí)現(xiàn)版本,它實(shí)現(xiàn)了對目標(biāo)類的代理(如同 UserDAOProxy與UserDAOImp的關(guān)系
cglib動態(tài)代理 :CGLibProxy返回的動態(tài)代理類,則是目標(biāo)代理類的一個子類(代理類擴(kuò)展了UserDaoImpl類) 59. Ioc容器的加載過程?
IOC容器加載過程
創(chuàng)建他的IOC配置文件里的抽象資源
創(chuàng)建一個bean工廠
13.動態(tài)代理與cglib實(shí)現(xiàn)的區(qū)別
JDK代理是不需要第三方庫的,只要JDK環(huán)境就可以運(yùn)行代理
JDK動態(tài)代理只是實(shí)現(xiàn)接口類的生成,并不是針對類的
CGLIB是主要針對類的,由指定的類生成她應(yīng)有的子類,要想覆蓋她最好的辦法是繼承,所已我們就不能用final。
CGLIB她是依賴類庫的,他是通過欸來實(shí)現(xiàn)接口。
14.HIbernate一級緩存與二級緩存之間的區(qū)別
Hibernate的Session提供了一級緩存的功能,默認(rèn)總是有效的,當(dāng)應(yīng)用程序保存持久化實(shí)體、修改持久化實(shí)體時(shí),Session 并不會立即把這種改變提交到數(shù)據(jù)庫,而是緩存在當(dāng)前的Session中,除非顯示調(diào)用了Session的flush()方法或通過close()方 法關(guān)閉Session。通過一級緩存,可以減少程序與數(shù)據(jù)庫的交互,從而提高數(shù)據(jù)庫訪問性能。 ? SessionFactory級別的二級緩存是全局性的,所有的Session可以共享這個二級緩存。不過二級緩存默認(rèn)是關(guān)閉的,需要顯 示開啟并指定需要使用哪種二級緩存實(shí)現(xiàn)類(可以使用第三方提供的實(shí)現(xiàn))。一旦開啟了二級緩存并設(shè)置了需要使用二級緩 存的實(shí)體類,SessionFactory就會緩存訪問過的該實(shí)體類的每個對象,除非緩存的數(shù)據(jù)超出了指定的緩存空間。 ? 一級緩存和二級緩存都是對整個實(shí)體進(jìn)行緩存,不會緩存普通屬性,如果希望對普通屬性進(jìn)行緩存,可以使用查詢緩存。查 詢緩存是將HQL或SQL語句以及它們的查詢結(jié)果作為鍵值對進(jìn)行緩存,對于同樣的查詢可以直接從緩存中獲取數(shù)據(jù)。查詢緩 存默認(rèn)也是關(guān)閉的,需要顯示開啟。
Spring MVC的工作原理:
接下里如圖所示

SpringMVC 的好處在于她的所有請求都是交給前端控制器的也就是DispatcherServlet來處理的。她會扶著系統(tǒng)的其他模塊來處理用戶請求。
前端控制器接到請求后就會根據(jù)請求的信息可以是URL,HTML協(xié)議,請求頭,參數(shù),Cookit等等。
看著上面的圖,那么HandlerMapping配置就會找到處理請求中的handler,Spring就會通過HandlerAdapter來對其處理進(jìn)行主要封裝
HandlerAdapter是一個適配器作用是她由一個統(tǒng)一的接口對各種請求進(jìn)行調(diào)用
當(dāng)Handler請求完成對用戶請求處理完后就會返回給視圖也就是ModelAndView。視圖對象就會又交給了DispatcherServlet。
當(dāng)?shù)玫秸嬲晥D對象后DispatcherServlet就會利用視圖對象對模型數(shù)據(jù)進(jìn)行渲染
這樣客戶端接收到響應(yīng)后可能只是一個普通的HTML頁面,也可以是XML或者是JSON,還可以是一張圖片
簡述Hibernate常見優(yōu)化策略:
? 制定合理的緩存策略(二級緩存、查詢緩存)。 ? 采用合理的Session管理機(jī)制。 ? 盡量使用延遲加載特性。 ? 設(shè)定合理的批處理參數(shù)。 ? 如果可以,選用UUID作為主鍵生成器。 ? 如果可以,選用基于版本號的樂觀鎖替代悲觀鎖。 ? 在開發(fā)過程中, 開啟hibernate.show_sql選項(xiàng)查看生成的SQL,從而了解底層的狀況;開發(fā)完成后關(guān)閉此選項(xiàng)。 ? 考慮數(shù)據(jù)庫本身的優(yōu)化,合理的索引、恰當(dāng)?shù)臄?shù)據(jù)分區(qū)策略等都會對持久層的性能帶來可觀的提升,但這些需要專業(yè)的 DBA(數(shù)據(jù)庫管理員)提供支持。
15.線程安全問題:
線程安全分為兩點(diǎn),1.類的行為是否規(guī)范一致。2.訪問該類時(shí)不需要額外的同步處理或者協(xié)調(diào),我們就認(rèn)為。他是線程安全的。
上面講什么時(shí)線程安全下面講如何保證線程就是安全的:
對變量用volitate,對程序進(jìn)行加鎖。
16.多線程如何進(jìn)行信息交互:
用的時(shí)Object中的方法,wait()? notify() nitifyAll();
17.
31.數(shù)據(jù)庫
說到數(shù)據(jù)庫我們先了解一下常見數(shù)據(jù)庫有哪些;1.Mysql,2.SQLServer
對Redis簡介:Redis是一個十分快訊的非關(guān)系型數(shù)據(jù)庫,他是工具key與不同類型v的值valua中的映射。把儲蓄在內(nèi)存的鍵值對數(shù)據(jù)持久化到硬盤當(dāng)中。
32.數(shù)據(jù)庫索引優(yōu)缺點(diǎn),及什么時(shí)候索引失效: