阿里面經(jīng)

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í)候索引失效:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,644評論 18 399
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,789評論 11 349
  • 我們都能認(rèn)同那些人。當(dāng)需要號召支持我們的觀點(diǎn)時(shí),大多數(shù)的我們會深思熟慮,是否真正承認(rèn)自己的觀點(diǎn)。我們設(shè)法提供的只能...
    梁夢婷閱讀 191評論 0 1
  • 作為一個碼農(nóng),除了上班、加班的時(shí)間外,最愿意做的事情就是看書和料理了。 認(rèn)真的做一頓飯并享用之,是對忙碌的自己最大...
    BruceHurrican閱讀 99評論 0 0
  • 轉(zhuǎn)眼已是八月中旬,時(shí)間流逝的速度遠(yuǎn)比想象中的要迅速。 生活狀態(tài)依舊是,上班,下班。 不知道,是我個人狀況如此,還是...
    六月1988閱讀 239評論 0 0

友情鏈接更多精彩內(nèi)容