1. 程式人生 > >面試題: !=!=未看3

面試題: !=!=未看3

所有 就是 dbo 時也 rc.local name obj tomcat7 基礎

Java基礎

  1. int、byte、char各占幾個位?
    註意這裏說的不是字節,問的是bit位。
    我當時就說int 4個字節,byte 1個字節,char 2個字節。
    每個字節又是8位,各再乘以8就好了。結果那面試官居然還說1個字節是4位,當時我都懵了。回來查查資料發現,我才是對的。1個字節就是8位。。。

    參考資料:
    https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

  2. 一個Map集合是否有方法可以直接取出所有的value,也就是說不通過keySet()entrySet()等間接的方式?
    我當時說沒有,他就給我舉出一個方法了,values()

    。。。事實證明確實是有這個方法的,只不過我們一般用的很少。

  3. 設計模式,單例手寫就不多說了,太簡單。

  4. 一個List集合如何不再添加重復的元素進去?
    在添加的時候,通過if(!lsit.contains())進行判斷就行了,結果引出新的問題,是如何判斷兩個對象是相同的?我接著說重寫類的equals()hashCode()方法即可,因為其底層就是通過equals()進行比較的。
    然後接著問,重寫equals()方法,為什麽還要重寫hashCode()方法呢?我就直接說Java官方規定的。。其實這個也是一個約定的事情,可以查看Object類中的javadoc文檔說明。

    Note that it is generally necessary to override the hashCode method whenever this method is overridden, so as to maintain the general contract for the hashCode method, which states that equal objects must have equal hash codes.

在重寫equals()時也必須要重寫hashCode()方法,以保證相同對象的hash值也是一樣的,否則會出現意想不到的問題的。不明白他為啥要一直追問這個,哎。最後網上在搜了一下資料,說是:
如果我們對一個對象重寫了euqals,意思是只要對象的成員變量值都相等那麽euqals就等於true,但不重寫hashcode,那麽我們再new一個新的對象,
當原對象.equals(新對象)等於true時,兩者的hashcode卻是不一樣的,由此將產生了理解的不一致,如在存儲散列集合時(如Set類),將會存儲了兩個值一樣的對象,
導致混淆,因此,就也需要重寫hashcode()

Java基礎就到這裏吧,當然還問其他很多基礎問題,不過在這裏就不一一說明了。

Java後端框架

因為我說自己用SpringMVC比較多,所以他們問的問題也大都跟這個相關,當然也會結合簡歷問一些其他方面的問題,下面再說一說。

  1. SpringMVC有哪些常用註解?
    比較常用的有:@Controller、@Service、@Repository、@Bean、@RequestMapping,@Autowired、@Resouce、@ResponseBody、@RequestBody等等還有很多,這裏就不一一列舉了。

  2. 如何獲取在@RequestMapping註解中定義的變量?
    這個在RESTFul風格中比較常見,在方法的參數中再加@PathVariable(“var”)參數即可。

  3. 如何在Controller中獲取request請求的變量,非RESTFul那種拼接的參數?
    可以直接在方法參數中,添加HttpServletRequest參數變量就行,然後根據req的getParameter(“var”)獲取相應的參數。

  4. 在SpringMVC中如何通過工廠方法來創建一個bean?
    這個用的好像比較少,不過我當時還真想起來了。直接在sprign配置文件中的bean中就有一個屬性叫:factory-method。

  5. 在使用Hibernate框架時,除了HQL還有什麽方式可以查詢數據?
    這個我當時說的是Criteria,這個單詞不太好讀,我當時也沒讀正確讀全,不過大家都知道是啥意思就好啦。它是采用面向對象的方式封裝了查詢條件。其實還可以直接用Hibernate的session的,當時緊張所以忘了。為啥緊張是因為我瞎說了一個JPA。。通過jpa去操作查詢,結果就是被教訓一頓了,JPA是Java的持久化規範沒錯,不過跟人家Hibernate真沒太大關系,雖然Hibernate也實現了JPA的規範。。。

  6. struts2與struts1有什麽區別?
    額,struts框架我在項目中還真沒用過,也就自己學了點,結果就大搖大擺的也加在簡歷上,結果一問就露餡了吧。後悔,以後不太熟的東西最好不要加在簡歷上吧,不然就等著減分吧。至於到底有哪些區別,在網上查一查一大堆,這裏就不多說了。

好了,後面的框架知識問得我也是淚流滿面,就不多說了。

數據庫

數據庫可以說在後端中是重之又重了,可惜我還沒有達到熟練精通的地步,也就初學者一個吧,結果幾個問題下來直接就over了。。
1. 數據庫一般有哪些優化?
我當時說的是給表字段加索引、拆分表、避免少用子查詢多用連接查詢等等常見的操作吧。
2. 如何優化一條SQL語句,有什麽關鍵字可以用?
當時我就想到explain這個,應該算是正確的吧。
3. 常用的日期字段有哪些?
一般常用的就datetimetimestamp這兩種吧。
4. 如何給查詢出來的日期進行加一天操作?
額,這個我忘記了,記得有一個函數的,當時沒想起來。查了查就是叫date_add(),把查詢出來的日期結果放到函數的參數中就行了。
date_add(my_date, INTERVAL 1 day)

數據庫相關的還有待加強啊,繼續努力。

Linux

作為Java後端開發,Linux可以說是必須要掌握的吧,畢竟開發的軟件都是要運行在服務器上的,現在服務器差不多80-90%都是Linux操作系統了,所以簡歷上肯定也是要寫這方面的東西的。

  1. 如何在重啟開機的時候自動將應用容器如:tomcat啟動?
    直接編輯/etc/rc.local文件,在最後一行exit 0前面加一句${TOMCAT_HOME}/bin/startup.sh就行了,TOMCAT_HOME變量可替換為安裝的路徑,當然了,如果是直接通過apt-get安裝的話,它會自動添加到systemd中的,這樣的話通過# systemctl enable tomcat7也可以做到開機自動啟動的。

差不多就到這裏吧,太多就不想看了。
最後一個問題就是:最近有沒有研究什麽比較新的技術?
我當時說的是Docker,其實這個也不算新吧,2013年的時候就非常火了,不過那時候連大廠都還只是停留在研究狀態,別說直接在生產環境使用了,技術也還沒穩定下來。隨著這兩年過來,逐漸的用的公司才多一點的。我也是在去年就開始學習那個。今年一直也沒怎麽搞,看樣子需要再撿起來了。

面試題: !=!=未看3