摘要:事實上,所謂的同步就是指阻塞式操作,而異步就是非阻塞式操作。中可以通過設值注入方法注入和構造器注入實現(xiàn),推薦使用的方式為設值注入。
寫在前面
春天來了,萬物復蘇的季節(jié)到了. 許多程序猿安奈不住生理需求,我要漲工資,我要跳槽. 畢竟金三銀四嘛. 那么要從眾多的面試者中獲得求職機會,我們就要面對很多的面試題.
程序猿是最煩面試題的.面試的公司也煩,面試的人也煩. 但是沒辦法.面試的人魚龍混雜,好多公司被理論啥都懂,代碼寫不出的人搞的就很傷.所以現(xiàn)在面試題也越來越難,越來越刁鉆.
但是凡事都有雙面性,這樣就促使我們看更多的面試題,掌握了更多的知識.不是嗎 !
先來點開胃的 1.訪問修飾符public,private,protected以及不寫時的區(qū)別?
訪問權限: 修飾符 當前類 同包 子類 其他包 public √ √ √ √ protected √ √ √ × default √ √ × × private √ × × × 類的成員不寫訪問修飾符時,默認的是default.2.Stirng是最基本的數(shù)據(jù)類型嗎?
答: 不是. java中的基本數(shù)據(jù)類型就八種: byte, short, int, long, float, double, char, boolean. 剩下的都是引用類型(reference type).3.float f = 1.1; 正確嗎?
答: 不正確. 1.1是雙精度, 將雙精度賦值給浮點型,屬于向下轉型,會造成精度的丟失.如果要強制 類型轉換,可以寫成這樣 float f = (float)1.1; 或者 float f=1.1F;4.short a = 1; a = a + 1 和 short a = 1 ; a += 1 有什么區(qū)別?
答: 對于a = a + 1 因為1是int值類型,所以計算的結果是int,要賦值給short,需要強制類型裝 換才能賦值給short. 對于a += 1; 其相當于 a = (short)(a+1) ;其中已經做了強制類型裝換.5.下面代碼打印結果?
Integer a = 100, b = 100, c = 130, d = 130 ; System.out.println(a ==> b); System.out.println(c == d); 第一個是true,第二個是false. 因為a,b,c,d四個變量都是integer對象的引用,所以==比較的不是值,而是引用.如果整型字面 量的值在-128到127之間,那么不會new新的Integer對象,而是直接引用常量池中的Integer對 象.6.Java中如何跳出多重嵌套循環(huán)?
答:在最外層循環(huán)前加標記A,利用break A;可以跳出循環(huán)7.String類可以被繼承嗎?
答:不可以. 因為String類是final類.8.String和StringBuilder,StringBuffer的區(qū)別?
答:String是只讀字符串,String引用的字符串內容是不能被改變的.而StringBuffer和 StringBuilder是可變字符串.StringBuilder和StringBuffer的用法相同, 區(qū)別是 StringBuffer被synchronized修飾,效率比StringBuilder低9.構造器是否可以被重寫?
答: 構造器不能被繼承,因此不能被重寫,但是可以被重載.10.int a = 1; int b = 2; 怎么讓a,b值交換?
答: a = a ^ b; b = a ^ b; a = a ^ b;來點中級的 11.抽象類和接口的相同點和不同點.
答: 1.抽象類和接口都不能實例化對象,但是可以定義抽象類和接口類型的引用. 2.繼承抽象類和實現(xiàn)接口都要對其中的抽象方法全部實現(xiàn) 3.接口比抽象類更加抽象,抽象類中可以定義構造器,可以有抽象方法和具體方法. 4.接口中方法全部都是抽象方法. 5.抽象類中的成員可以是private,protected,public,接口全部都是public 6.抽象類中可以定義成員變量,而接口中定義的成員變量實際上都是常量. 7.有抽象方法的類必須聲明為抽象類,而抽象類未必要有抽象方法.12.java中會存在內存泄露嗎?
答:理論上java不會存在內存泄露的問題,應為有垃圾回收機制(GC).然而在實際開發(fā)中,可能會存在 無用但可達的對象,這些對象不能被GC回收,因此會導致內存泄露. 例如hibernated的Session中 的對象屬于持久態(tài),垃圾回收器不會回收這些對象,這些對象中有可能存在無用的垃圾對象.如果關閉 不及時,一級緩存就可能導致內存泄露.13.try{}里面return, finally里的代碼會不會執(zhí)行,什么時候被執(zhí)行?
答:會執(zhí)行. 在方法返回給調用者前執(zhí)行.因為如果存在finally代碼塊, try中的return語句不會 立馬返回調用者,而是記錄下返回值待finally代碼塊執(zhí)行完畢之后在返回.14.List,Map,Set 三個接口存取元素時,各自有什么特點?
答:List以特定的索引來存取元素,可以有重復元素 Set不能存放重復元素. Map保存鍵值對的映射,映射關系可以是一對一或多對一. Set和Map容器都有基于哈希存儲和排序樹的兩種實現(xiàn)版本,基于哈希存儲理論存取時間復雜度是O(1).15.Thread類中的sleep()和對象的wait()有什么區(qū)別?
答:sleep()方法是線程類的靜態(tài)方法,調用此方法會讓當前線程暫停執(zhí)行指定時間.將CPU時間片分 給其他線程,但是對象的鎖依然保持, 休眠時間結束會自動回復到就緒狀態(tài). wait()是Object類的方法,調用對象的wait()方法導致當前線程放棄對象的鎖,線程暫停執(zhí)行, 進入對象的等待池,只有調用對象的notify()方法或notifyAll()方法時,才能喚醒等待池中的 線程進入等鎖池,如果線程重新獲得對象的鎖就可以進入就緒狀態(tài)16.當一個線程進入一個對象的synchronized方法A之后,其它線程是否可進入此對象的synchronized方法B?
答::不能。其它線程只能訪問該對象的非同步方法,同步方法則不能進入。 因為非靜態(tài)方法上的synchronized修飾符要求執(zhí)行方法時要獲得對象的鎖,如果已經進入A方法說 明對象鎖已經被取走,那么試圖進入B方法的線程就只能在等鎖池(注意不是等待池哦)中等待對象的鎖17.說說synchronized關鍵字的用法?
答:synchronized關鍵字可以將對象或者方法標記為同步,以實現(xiàn)對對象和方法的互斥訪問,可以用 synchronized(對象) { … }定義同步代碼塊,或者在聲明方法時將synchronized作為方法的修飾符18.Java如何實現(xiàn)序列化,有什么意義?
答:序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內容進行流化。可以對流化 后的對象進行讀寫操作,也可將流化后的對象傳輸于網絡之間。 序列化是為了解決對象流讀寫操作時可能引發(fā)的問題(如果不進行序列化可能會存在數(shù)據(jù)亂序的問題) 要實現(xiàn)序列化,讓類實現(xiàn)Serializable接口.該接口是一個標識性接口,標注該類對象是可被序列 化的,然后使用一個輸出流來構造一個對象輸出流并通過writeObject(Object)方法就可以將實現(xiàn)對象寫出 如果需要反序列化則可以用一個輸入流建立對象輸入流,然后通過readObject方法從流中讀取對 象。序列化除了能夠實現(xiàn)對象的持久化之外,還能夠用于對象的深度克隆19.線程的sleep()方法和yield()方法有什么區(qū)別?
答:sleep()方法給其他線程運行機會時不考慮線程的優(yōu)先級,因此會給低優(yōu)先級的線程以運行的機會; yield()方法只會給相同優(yōu)先級或更高優(yōu)先級的線程以運行的機會; 線程執(zhí)行sleep()方法后轉入阻塞(blocked)狀態(tài),而執(zhí)行yield()方法后轉入就緒(ready)狀態(tài); sleep()方法聲明拋出InterruptedException,而yield()方法沒有聲明任何異常; sleep()方法比yield()方法(跟操作系統(tǒng)CPU調度相關)具有更好的可移植性20.說說你對同步和異步的理解.
答:如果系統(tǒng)中存在臨界資源(資源數(shù)量少于競爭資源的線程數(shù)量的資源),例如正在寫的數(shù)據(jù)以后 可能被另一個線程讀到,或者正在讀的數(shù)據(jù)可能已經被另一個線程寫過了,那么這些數(shù)據(jù)就必須進行 同步存取(數(shù)據(jù)庫操作中的排他鎖就是最好的例子) 當應用程序在對象上調用了一個需要花費很長時間來執(zhí)行的方法,并且不希望讓程序等待方法的返回 時,就應該使用異步編程,在很多情況下采用異步途徑往往更有效率。事實上,所謂的同步就是指阻 塞式操作,而異步就是非阻塞式操作。好像這也不算高級 21.轉發(fā)(forward)和重定向(redirect)的區(qū)別?
答:forward是容器中控制權的轉向,是服務器請求資源,服務器直接訪問目標地址的URL,把那個 URL 的響應內容讀取過來,然后把這些內容再發(fā)給瀏覽器,瀏覽器根本不知道服務器發(fā)送的內容是從 哪兒來的,所以它的地址欄中還是原來的地址 redirect就是服務器端根據(jù)邏輯,發(fā)送一個狀態(tài)碼,告訴瀏覽器重新去請求那個地址,因此從瀏覽 器的地址欄中可以看到跳轉后的鏈接地址,很明顯redirect無法訪問到服務器保護起來資源,但是 可以從一個網站redirect到其他網站22.說一說spring 中依賴注入和AOP的實現(xiàn)機制。
答:實現(xiàn)依賴注入的方式包括:構造器注入、設值注入和接口(回調)注入。Spring中可以通過設值 注入(setter方法注入)和構造器注入實現(xiàn)IoC,推薦使用的方式為設值注入。 實現(xiàn)AOP的方式包括:編譯時AOP(需要特殊的編譯器)、運行時AOP(代理模式)、加載時AOP(需 要特殊的類加載器)。Spring中使用了運行時的AOP,主要通過代理的方式對原來的代碼進行增強實 現(xiàn)。對于實現(xiàn)了接口的類,Spring通過Java的動態(tài)代理(請參考Proxy類和InvocationHandler 接口)來進行增強;對于沒有實現(xiàn)接口的類,Spring使用第三方字節(jié)碼生成工具CGLIB,通過繼承 的方式對原有代碼進行增強23.什么是ORM?
答:對象關系映射(Object-Relational Mapping,簡稱ORM)是一種為了解決程序的面向對象 模型與數(shù)據(jù)庫的關系模型互不匹配問題的技術;簡單的說,ORM是通過使用描述對象和數(shù)據(jù)庫之間映 射的元數(shù)據(jù)(在Java中可以用XML或者是注解),將程序中的對象自動持久化到關系數(shù)據(jù)庫中或者 將關系數(shù)據(jù)庫表中的行轉換成Java對象,其本質上就是將數(shù)據(jù)從一種形式轉換到另外一種形式。24.簡述一下面向對象的"六原則一法則"
答: 單一職責原則:一個類只做它該做的事情。單一職責原則想表達的就是"高內聚" 開閉原則:軟件實體應當對擴展開放,對修改關閉.要做到開閉有兩個要點:抽象是關鍵,一個系統(tǒng) 中如果沒有抽象類或接口系統(tǒng)就沒有擴展點; 封裝可變性,將系統(tǒng)中的各種可變因素封裝到一個繼承結構中, 依賴倒轉原則: :面向接口編程,就是聲明方法的參數(shù)類型、方法的返回類型、變量的引用類型時, 盡可能使用抽象類型而不用具體類型,因為抽象類型可以被它的任何一個子類型所替代 里氏替換原則::任何時候都可以用子類型替換掉父類型 接口隔離原則:接口要小而專,絕不能大而全。接口也應該是高度內聚的.Java中的接口代表能力、 代表約定、代表角色,能否正確的使用接口一定是編程水平高低的重要標識 合成聚合復用原則:優(yōu)先使用聚合或合成關系復用代碼后記
對程序員來說,普遍的是敲代碼和業(yè)務處理能力強于理論知識的.畢竟我們是用鍵盤吃飯.但是,如果在一個行業(yè)做了五年以上.那么這一個語言基本就寫透了.那么在回頭看這些理論知識就so easy 了.程序員這個行業(yè)是與時進步的,要不斷的學習來充實自己,努力吧.
年輕人就要努力奮斗-----------魯迅
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68873.html
摘要:一基礎接口的意義百度規(guī)范擴展回調抽象類的意義想不想通過一線互聯(lián)網公司面試文檔整理為電子書掘金簡介谷歌求職記我花了八個月準備谷歌面試掘金原文鏈接翻譯者 【面試寶典】從對象深入分析 Java 中實例變量和類變量的區(qū)別 - 掘金原創(chuàng)文章,轉載請務必保留原出處為:http://www.54tianzhisheng.cn/... , 歡迎訪問我的站點,閱讀更多有深度的文章。 實例變量 和 類變量...
摘要:本文介紹一些來自投資銀行的針對三年以上經驗的開發(fā)人員面試題。第七題和這兩個方法有什么不同答案本題取自我的投資銀行針對有經驗的開發(fā)者的五十個多線程面試題列表??偨Y以上就是投資銀行通常會出的面試題。 原文地址: https://dzone.com/articles/10... 有為數(shù)不少的開發(fā)者希望能在像 Barclays、Credit Suisse、Citibank 等等那樣的投資銀行做...
摘要:原文地址這里列出了十個常見而又刁鉆的開發(fā)人員面試題及答案,這些題目是我從上找來的。如果你是初中級開發(fā)人員,而且近期準備面試的話,這些題目可能對你有些幫助。成員即沒有訪問修飾符的成員可以在當前包下的所有類中訪問到。 原文地址:https://dzone.com/articles/10... 這里列出了十個常見而又刁鉆的 Java 開發(fā)人員面試題及答案,這些題目是我從 StackOverf...
摘要:大多數(shù)待遇豐厚的開發(fā)職位都要求開發(fā)者精通多線程技術并且有豐富的程序開發(fā)調試優(yōu)化經驗,所以線程相關的問題在面試中經常會被提到。掌握了這些技巧,你就可以輕松應對多線程和并發(fā)面試了。進入等待通行準許時,所提供的對象。 最近看到網上流傳著,各種面試經驗及面試題,往往都是一大堆技術題目貼上去,而沒有答案。 不管你是新程序員還是老手,你一定在面試中遇到過有關線程的問題。Java語言一個重要的特點就...
閱讀 2620·2021-10-12 10:12
閱讀 778·2019-08-29 17:25
閱讀 2781·2019-08-29 17:24
閱讀 3204·2019-08-29 17:19
閱讀 1792·2019-08-29 15:39
閱讀 3031·2019-08-26 16:50
閱讀 1984·2019-08-26 12:17
閱讀 2694·2019-08-26 12:16