java面試題(2018最新)

SSM

1.Spring在SSM起什麼作用

Spring是一個輕量級框架,也是一個容器,Spring實質上講就是一個Bean工廠,主要用來管理Bean的生命週期和框架集成。
(1).有IOC控制反轉,對象不用new,交友spring來創建實例
(2).DI依賴注入,控制反轉是把dao依賴注入到servic層,然後service層反轉給action層,Spring的頂層容器爲BeanFactory,常用的ApplicationContext爲它的子接口,實現了工廠模式,
(3).Spring還提供了AOP的支持,方便在切面級開發(如Service層的事務,使用的是動態代理和cglib代理)

2.怎麼樣理解IOC和DI

在使用Spring框架的過程中、一定會用到控制反轉、但是往往所需要的資源還需要其他資源的支持、這個過程就需要依賴注入的支持

3.Spring的事務,事務的作用。

在以往的事務管理中,事務的代碼都是固定的(開啓事務,提交事務,回滾事務),代碼很難維護,而spring的事務,採用的AOP思想,將事務代碼切入到service層,使業務代碼和事務管理相分離,只需要用註解或在XML中配置即可,大大提高了代碼的維護性

4.Spring的IOC你在項目中是怎麼使用的?

IOC主要來解決對象之間的依賴問題,把所有的bean的依賴關係通過配置文件或者註解關聯起來,降低了耦合度

5.Spring的配置文件有哪些內容?

(1).配置數據源
(2).配置SQL會話工廠、映射文件
(3).事務管理器
(4).開啓註解功能,並配置掃描包(或在XML中直接配置)使用的是動態代理和cglib代理
(5).開啓事務註解驅動(或直接在XML配置)

6.說下Spring的註解

1.spring註解
    @Component
    @Service
    @repository
    @Transactional
    @Resource、@Autowired
    @Value(需要在xml文件中配置<context:property-placeholder location="classpath:resources.properties"/>)    
    @Controller
    @RequestMapping
    @ResponseBody@RequestBody(json交互)

7.爲什麼要用Spring

降低對象耦合度,讓代碼更加清晰,提供一些常見的模版

8.Spring DI的幾種方式

(1)構造器注入:通過構造方法初始化 <constructor-arg index="0" value="http://localhost:8080...."/>
(2)setter注入:通過setter方法初始化注入<property name="dao" ref="dao2"></property>
(3)基於註解注入:@Resource、@Autowired
注意:在實際開發中常用setter注入和註解注入。

9.SpringMvc的控制器是不是單例模式,如果是,有什麼問題,怎麼解決

是單例模式,所以在多線程訪問的時候有線程安全問題,不要用同步,會影響性能的,解決方案是不在控制器裏面寫成員變量
(原理是每次請求到達,分配一條線程來訪問方法的副本)

10.SpingMvc中的控制器的註解

@Controller 註解:該註解表明該類扮演控制器的角色,Spring不需要你繼承任何其他控制器基類或引用Servlet API。

11.SpringMvc的三大組件

處理器映射器(用戶請求路徑到Controller方法的映射)-->處理器適配器(用於執行處理器)-->視圖解析器(用於視圖顯示)
注意:springmvc控制器是老大,不怎麼幹活,是指揮這樣的角色

12.@RequestMapping註解用在類上面有什麼作用

用於處理用戶請求URL到Controller方法的映射

13.我想在攔截的方法裏面得到從前臺傳入的參數,怎麼得到

直接在形參裏面聲明這個參數(或包裝參數的javaBean,數組和List集合也可以)就可以,但必須名字和傳過來的參數一樣

14.如果前臺有很多個參數傳入,並且這些參數都是一個對象的,那麼怎麼樣快速得到這個對象

直接在方法中聲明這個對象,SpringMvc就自動會把屬性賦值到這個對象裏面

15.SpringMvc中函數的返回值是什麼

(1) ModelAndView: 封裝的是視圖+域值(一般不用,耦合度高)
(2) String: 返回路徑字符串,一般和Model(向頁面傳參)一起使用(常用)
(3) void:常用於json交互(接收json,在形參前面打@RequestBody註解)
(4) JavaBean或集合:用於發送json數據(在返回值前面或方法上加@ResponseBody註解)

16.SpringMvc怎麼處理返回值的

SpringMvc根據配置文件中InternalResourceViewResolver(內部資源視圖解析器)的前綴和後綴,用前綴+返回值+後綴組成完整的返回值

17.SpringMVC怎麼樣設定重定向和轉發的

在返回值前面加"forward:"就可以讓結果轉發,譬如"forward:user.do?name=method4" 在返回值前面加"redirect:"就可以讓返回值重定向,譬如"redirect:http://www.uu456.com"

18.SpringMvc中有個類把視圖和數據都合併的一起的,叫什麼

ModelAndView

19.怎麼樣把數據放入Session裏面

(1) 可以在形參上聲明一個request,或者session先拿到session,然後就可以放入數據
(2) 可以在類上面加上@SessionAttributes註解,裏面包含的字符串就是要放入session裏面的key,然後在方法形參上設置map,將數據存入map中集合,map的key爲session的key

20.SpringMvc怎麼和AJAX相互調用的

通過Jackson框架就可以把Java裏面的對象直接轉化成js可以識別的Json對象 具體步驟如下 :
    1.加入Jackson.jar
    2.在接受Ajax方法裏面可以直接返回Object,List等,但方法前面要加上@ResponseBody註解

21.當一個方法向AJAX返回對象,譬如Object,List等,需要做什麼處理

要加上@ResponseBody註解

22.講下SpringMvc的執行流程(*)

1、用戶發送請求至前端控制器DispatcherServlet
2、DispatcherServlet收到請求調用HandlerMapping處理器映射器。
3、處理器映射器根據請求url找到具體的處理器,生成處理器對象及處理器攔截器(如果有則生成)(參數封裝)一併返回給DispatcherServlet。
4、DispatcherServlet通過HandlerAdapter處理器適配器執行處理器(Controller,也叫後端控制器)。
5、處理器(Controller)執行完成返回ModelAndView
6、HandlerAdapter將controller執行結果ModelAndView返回給DispatcherServlet
7、DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器
8、ViewReslover解析後返回具體View
9、DispatcherServlet對View進行渲染視圖(即將模型數據填充至視圖中)。
10、DispatcherServlet響應用戶

23什麼是MyBatis的接口綁定,有什麼好處

接口映射就是在IBatis中任意定義接口,然後把接口裏面的方法和SQL語句綁定,我們直接調用接口方法就可以,這樣比起原來了SqlSession提供的方法我們可以有更加靈活的選擇和設置.(接口名要和映射文件名一致)
接口定義規則:
    (0) 映射中的namespace要和接口的全路徑名稱相同
    (1) 接口的方法名要和映射文件中的id值一致
    (2) 接口的形參和映射文件中的ParameterType一致
    (3) 接口的返回值要和映射文件的ResultType要一致

24什麼情況下用註解綁定,什麼情況下用xml綁定

當Sql語句比較簡單時候,用註解綁定,複雜的查詢語句,用xml綁定,一般用xml綁定的比較多

25如果要查詢的表和返回的實體Bean對象當SQL語句比較複雜時候不一致,那你是怎麼處理的?

在MyBatis裏面最主要最靈活的的一個映射對象的ResultMap,在它裏面可以映射鍵值對, 默認裏面有id節點,result節點,它可以映射表裏面的列名和對象裏面的字段名. 並且在一對一,一對多的情況下結果集都要用ResultMap

26MyBatis在覈心處理類叫什麼

MyBatis裏面的核心處理類叫做SqlSession

27講下MyBatis的緩存

MyBatis的緩存分爲一級緩存和二級緩存,一級緩存放在session裏面,默認就有,二級緩存放在它的命名空間裏,
默認是打開的,使用二級緩存屬性類需要實現Serializable序列化接口(可用來保存對象的狀態),可在它的映射文件中配置<cache/>

28MyBatis(IBatis)的好處是什麼

(1) ibatis把sql語句從Java源程序中獨立出來,放在單獨的XML文件中編寫,給程序的維護帶來了很大便利。
(2) ibatis封裝了底層JDBC API的調用細節,並能自動將結果集轉換成JavaBean對象,大大簡化了Java數據庫編程的重複工作。
(3) Ibatis需要程序員自己去編寫sql語句,程序員可以結合數據庫自身的特點靈活控制sql語句,
    因此能夠實現比hibernate等全自動orm框架更高的查詢效率,能夠完成複雜查詢。

29MyBatis怎麼配置一對多?

一對多的關係 :property: 指的是集合屬性的值, ofType:指的是集合中元素的類型

30MyBatis怎樣配置多對一?

多對一的關係:property: 指的是屬性的值, javaType:指的是屬性的類型

SSH

Spring

1.bean在spring的容器中兩種基本行爲是什麼?

Singleton:單例
Non-singleton或prototype:多例

2.BeanFactory的作用是什麼?

BeanFactory是配置、創建、管理bean的容器,有時候也稱爲bean上下文。Bean與bean的依賴關係,也是由BeanFactory負責維護的。

3.spring配置文件中的ref元素的作用是什麼?它的兩個基本屬性是什麼?

用於指定spring容器中的其它bean.兩個基本屬性是bean和local  

4.Spring實現了那幾種模式

工廠模式 單例模式 代理模式   

5.spring 中的depends-on屬性是什麼

Depends-on用於當前Bean初始化之前顯示的強制一個或多個bean被初始化

6.spring 中的BeanWrapper類是什麼

BeanWrapper類是一個對JavaBean進行各種操作的工具類   
BeanWrapper本身是一個接口,BeanWrapperImpl實現了BeanWrapper 

7.寫出使用構造方法進行注入的關鍵代碼

<bean id=”constructBean” class=”com.huang.ConstructBean”>   
    <constructor-arg><ref  bean=”bean_1”/></ constructor-arg >      
</bean> 

8.如何使用靜態工廠方法來創建Bean的實例

<bean id=”staticFactoryBean” class=”com.huang.StaticFactoryBean”  factory-method=”靜態方法名”/>   
相當於: StaticFactoryBean staticFactoryBean=StaticFactoryBean.靜態方法名

9.使用實例化的工廠方法來創建Bean的實例

<bean id=”dynamicFactory”class=”com.DynamicFactory”/>   
<bean id=”dynamiceFactoryBean” factory-bean=”dynamicFactory” Factory-method=”方法名”/>   
相當於: DynamicFactory dynamicFactory=new DynamicFactory();   
       DynamiceFactoryBean dynamiceFactoryBean=dynamicFactory.方法名     

10.spring框架的7個模塊是什麼?

(1)spring  AOP      --面象切面編程(如:事務)   
(2)spring  DAO      --數據訪問對象   
(3)spring  ORM      --對象關係影射(如JdbcTemplate)   
(4)spring  Context  --上下文配置,向Spring框架提供上下文信息   
(5)spring  WEB      --WEB上下文模塊   
(6)spring  WEB-MVC      --實現了MVC   
(7)spring  CORE     --核心容器提供Spring框架基本功能   

11.什麼是AOP 請祥述

 面向切面編程 
 AOP採取橫向抽取機制,取代了傳統縱向繼承體系重複性代碼(性能監視、事務管理、安全檢查、緩存)   
 AOP 把軟件系統分爲兩個部分:核心關注點和橫切關注點。
 所謂的核心關注點,是業務處理的主要流程,也就是說這個解決方案要做的事。
 所謂橫切關注點,是與核心業務無關的部分,它把常發生在覈心關注點的多處,而各處基本相似,如日誌,事務,權限等進行橫向抽取,從而來減少重複的代碼

12.在Spring中給屬性有幾種賦值方式 請祥敘

常用的方式有三種:
(1)setter注入 <property name="" ref=""/>
(2)構造器注入        <contructor><bean class=""/><contructor/>
(3)註解注入         @AutoWare @Resource

13.在Spring說說Bean的alias元素和name屬性有什麼區別

<bean>元素name屬性可以一次爲<bean>定義多個別名   
   例:<bean id=”beanName” name=”alias_1,alias_2”/>   
   <alias>元素一次只能定義一個別名   
     例:<alias name=”beanName” alias=”toName”/>   
  注意: alias元素name屬性是bean實例名

14.Bean的作用域用幾種,請祥敘 [難]

答: 用5種    
分別是:    
(1). singleton  IOC容器只會創建一個Bean的唯一的實例   
(2). prototype  IOC容器在每次請求該Bean的時候都創建一個新的實例   
(3). request    在一次Http請求中 IOC容器會返回該Bean的同一個實例,而對於不同的用戶請求,則會返回不同的實例   
(4). session    在一次Http請求Session中IOC容器會返回該Bean的同一個實例,而對於不同的用戶Session,則會返回不同的實例   
(5). globalsession在一個全局Http請求Session中 

Hibenrate

15. Struts+Hibernate+Spring開發模式中Hibernate扮演的角色

Hibernate扮演的是數據持久層 它的作用是實現持久化對象和數據庫表   
之間的映射,形成持久化對象和數據庫表中數據的一個轉換平臺

16.什麼是Hibernate 的抓取策略

指的是查找到某個對象後,通過這個對象去查詢關聯對象的信息時的一種策略。

17.Hibernate實體對象生命週期的三種狀態

Transient(瞬態) ,persistent(持久態)和Detached(遊離態,託管態)  

18.HQL查詢參數的處理方法

sql拼接(不建議)  
使用通配符,然後用預處理對象給sql語句賦值(建議,防sql注入,加快查詢速度) 

19.Hibernate實體之間的關聯關係的三種形式

   一對一關聯   
   一對多關聯   
   多對多關聯

20.Hibernate具用的三種檢索方式

HQL檢索方式   
QBC檢索方式   
SQL檢索方式

21.元素有一個cascade屬性,如果希望Hibernate級聯保存集合中的對象,casecade屬性應該取什麼值?

save-update  

22.Hibernate中對象什麼時候是遊離態

session.close();方法後    

23.Hibernate中映射文件 inverse屬性和cascade屬性的區別

Cascade代表是否執行級聯操作,Inverse代表是否由己方維護外鍵關係,一般情況下雙向關聯中必須要有一方放棄維護外鍵

24.Hibernate中Session對象的load()方法和get()方法的區別(請列舉出兩點)

(1)get立即加載load延遲加載
(2)get當查詢不到結果時返回null,load會報異常
(3)get返回是實體類,而load返回的是代理對象

25.Hibernate中HQL屬於什麼語言

HQL是面向對象的查詢語言,它會以對象和表進行映射,不過最後發送到數據庫的依舊是sql。   

26.Hibernate簡介以及主要功能

Hibernate是數據持久層的ORM框架,它提供了強大,高效的將JAVA對象進行持久化操作的服務 

27.簡述Hibernate的優點

Hibernate對象/關係映射能力強,數據庫無關性好,對於關係模型要求高的軟件(例如需求固定的定製化軟件)如果用hibernate開發可以節省很多代碼,提高效率。但是Hibernate的學習門檻高,要精通門檻更高

28.怎樣構建SessionFactory

創建配置文件讀取對象Configuration ,然後使用這個對象來創建SessionFactory對象,因爲sessionFactory是重量級的,所以一個項目只創建一個SessionFactoty對象,沒次請求創建一個和線程綁定的Session對象

29.一般情況下,關係數據模型與對象模型之間有哪些匹配關係

表對應類   
記錄對應表的對象   
表的字段對應類的屬性   

30.事務隔離級別是由誰實現的?

數據庫系統    

31.簡述什麼是ORM

ORM的全稱是Object-Relational Mapping 翻譯成中文就是“對象-關係映射”   
ORM組件的主要功能就是實現將對象的持久化並封裝數據庫訪問的細節
ORM本身並不是一個組件,它是具用某種功能的組件的總稱,也可以說是一種框   
架結構         

Struts2

32.Action的作用

Action的作用是接受用戶的請求,通過調用業務方法實現業務處理的功能

33.在通常情況下軟件系統由表現層,業務層,數據持久層組成,Struts屬於哪一層?

Struts屬於表示層的MVC模式的一個框架,它的作用主要體現在以下幾個方面:   
(1)接收並封裝用戶傳過來的參數,以及相應頁面   
(2)調用業務方法,完成業務處理,還要包括處理後的顯示工作。

34:Struts標籤庫由哪些組件組成?

標籤庫是組合在一起的一組JSP自定義標籤。   
標籤庫由以下組件組成:   
1) 標籤處理程序   
2) 標籤庫描述符(TLD)文件   
3) 應用程序部署描述符(web.xml)文件   
4) JSP頁面中標籤庫的聲明      

35.說說struts框架的方法的工作原理或流程

(1).客戶端瀏覽器發出HTTP請求.
(2).根據web.xml配置,該請求被FilterDispatcher接收
(3).然後回家再大量的配置文件,如default.proproties default.xml struts.xml
(3).根據struts.xml中的namespace和action的name和method,找到對象的Action類和方法,並通過IoC方式,將值注入給Aciton
(4).Action調用業務邏輯組件處理業務邏輯。
(5).Action執行完畢根據struts.xml中的配置找到對應的返回結果result,並跳轉到相應頁面
(6).返回HTTP響應到客戶端瀏覽器

36.strust的Action是不是線程安全的?

Struts2的action是線程安全的,因爲每次請求Strtus2都會創建一個Action的實例對象,請求結束之後銷燬Action對象  

37.MVC 分析一下struts是如何實現MVC的

從MVC角度來看看struts的體系結構(Model 2)與工作原理:   
 1)模型(Model)   
    普通的javaBean,用於參數的封裝以及一些功能的處理 
 2)視圖(View)   
   視圖主要由JSP建立,struts包含擴展自定義標籤庫(TagLib),可以簡化創建完全國際化用戶界面的過程。
 3)控制器(Controller)   
  在struts中,基本的控制器組件是ActionServlet類中的實例servelt,實際使用的servlet在配置文件中由一組映射(由ActionMapping類進行描述)進行定義。    

38.Stuts框架中控制器組件的類主要有哪些?

ActionServlet   
RequestProcessor   
Action
ActionMapping  
ActionForward

1.mybatis與hibernate不同

(1).Mybatis和hibernate不同,它不完全是一個ORM框架,因爲MyBatis需要程序員自己編寫Sql語句。mybatis可以通過XML或註解方式靈活配置要運行的sql語句,可嚴格控制sql執行性能,並將java對象和sql語句映射生成最終執行的sql,最後將sql執行的結果再映射生成java對象。
(2).但是靈活的前提是mybatis無法做到數據庫無關性,如果需要實現支持多種數據庫的軟件則需要自定義多套sql映射文件,工作量大。
(3).Hibernate對象/關係映射能力強,數據庫無關性好,對於關係模型要求高的軟件(例如需求固定的定製化軟件)如果用hibernate開發可以節省很多代碼,提高效率。但是Hibernate的學習門檻高,要精通門檻更高
(4).總之,按照用戶的需求在有限的資源環境下只要能做出維護性、擴展性良好的軟件架構都是好架構,所以框架只有適合纔是最好。

2.Springmvc和Struts的不同

1、springmvc的入口是一個servlet即前端控制器,而struts2入口是一個filter過濾器。
2、springmvc是基於方法開發(一個url對應一個方法),請求參數傳遞到方法的形參,可以設計爲單例或多例(建議單例),struts2是基於類開  發,傳遞參數是通過類的屬性,只能設計爲多例。
3、Struts採用值棧存儲請求和響應的數據,通過OGNL存取數據, springmvc通過參數解析器是將request請求內容解析,並給方法形參賦值,    將數據和視圖封裝成ModelAndView對象,最後又將ModelAndView中的模型數據通過request域傳輸到頁面。Jsp視圖解析器默認使用  jstl。

3.Solr與Lucene的區別:

Lucene是一個開放源代碼的全文檢索引擎工具包,它不是一個完整的全文檢索引擎,Lucene提供了完整的查詢引擎和索引引擎,目的是爲軟件開發人員提供一個簡單易用的工具包,以方便的在目標系統中實現全文檢索的功能,或者以Lucene爲基礎構建全文檢索引擎。
Solr的目標是打造一款企業級的搜索引擎系統,它是一個搜索引擎服務,可以獨立運行,通過Solr可以非常快速的構建企業的搜索引擎,通過Solr也可以高效的完成站內搜索功能。

Java 基礎就業題庫

1.類和對象的區別?

類是對象的抽象,是模型概念,代表的是具有相同屬性和行爲的一類事物
對象是類的具體表達,而類則是對象的抽象表達。  

2.Java類庫中八個標準包分別是什麼?

java.lang    提供常用的類、接口、一般異常、系統等編程語言的核心內容。    
java.util    包含日期、日曆、向量、堆棧等實用工具。    
java.io      包含輸入輸出流類、文件類等與輸入輸出I/O有關的類。        
java.awt     包含窗口和屏幕元素類,事件處理接口等與圖形用戶界面有關的內容。       
java.applet  提供爲編寫applet小程序所需要的類。    
java.text    提供與文本有關的類。    
java.net     包含url類等與網絡傳輸有關的東西。        
java.sql     提供與數據庫應用相關的類和接口。   

3.接口和抽象類有什麼區別?

(1)成員特點的區別:抽象類可以有變量、常量、構造方法、一般方法、抽象方法;接口有且只能有常量和抽象方法。
(2)關係特點的區別:
    類與類之間是繼承關係,只能單繼承,不能多繼承,但是能夠多層繼承;
    類與接口之間是實現關係,可以單實現也可以多實現,還可以在繼承一個類的同時實現多個接口。
    接口與接口之間是繼承關係,可以單繼承也可以多繼承;
(3)設計理念的區別:抽象類定義的是該繼承體系的共性功能,是is a的關係。接口定義的是該體系的擴展功能,是like a的關係。  

4.說說java中的內存分配?

1). 寄存器:我們在程序中無法控制
2). 棧:存放基本類型的數據和對象的引用
3). 堆:存放用new產生的數據
4). 靜態域:存放在對象中用static定義的靜態成員
5). 常量池:存放常量
6). 非RAM(隨機存取存儲器)存儲:硬盤等永久存儲空間

5.Character類有哪些常用方法? [難]

isLowerCase()   判斷字符串是否爲小寫
isUpperCase()   判斷字符串是否爲大寫
isDigit()       判斷是否爲數字
isDefined() 確定字符是否爲Unicode字符
isLetter()      是否爲字母
isSpaceChar()   是否爲Unico空白字符
isWhitespace()  根據JAVA標準是否爲空白字符   

6.String s = new String(“xyz”);創建了幾個String Object?

  兩個對象,一個是“xyx”,一個是指向“xyx”的引用對象s 

7.String與StringBuffer StringBuilder有什麼區別?

String是長度固定的字符串,而其他兩個是長度可變的字符串。
StringBuffer和StringBuilder的區別
StringBuffer是JDK1.0版本的,線程是安全的,效率比較低。
StringBuilder是JDK1.5出現的,線程不安全,效率高。
他們的共同點是:都是長度可變的字符串。 

8.是否可以繼承String類?

String類是final類故不可以繼承。   

9.throw與throws有什麼區別?

throws
    定義在方法的聲明上,後面跟的是異常類名;
    可以跟多個異常類名,用逗號隔開;
    表示拋出異常,需要由調用者處理。
Throw
    定義在方法體內,跟的異常對象名;
    只能跟一個異常對象,
    表示拋出異常,由方法內部的語句來處理。

10.說出5個常見的編譯時異常

StringIndexOutOfBoundsException 、
ArrayIndexOutOfBoundsException 、
ArithmeticException 、
IllegaArguementException 、 
NullPointException   

11. ArrayList和Vector的區別,HashMap和Hashtable的區別

就ArrayList與Vector主要從二方面來說.    
一.同步性:Vector是線程安全的,也就是說是同步的,而ArrayList是線程序不安全的,不是同步的    
二.數據增長:當需要增長時,Vector 默認增長爲原來一培,而ArrayList卻是原來的一半    
就HashMap與HashTable主要從三方面來說。   
一.歷史原因:Hashtable是基於陳舊的Dictionary類的,HashMap是Java 1.2引進的Map接口的一個實現    
二.同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的    
三.值:只有HashMap可以讓你將空值作爲一個表的條目的key或value  

12.Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

Math.round(11.5)==12  
Math.round(-11.5)==-11  
round方法返回與參數最接近的長整數.   

13.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

switch(expr1)中,expr1是一個整數表達式。應該是 int、 short、 char byte。   
long,string 都不能作用於swtich

14.GC是什麼? 爲什麼要有GC?

GC是垃圾回收機制(Gabage Collection)   
Java提供的GC功能可以自動監測對象是否超過作用域從而達到自動回收內存的目的,   
Java語言沒有提供釋放已分配內存的顯示操作方法。   

15.方法重載和方法重寫的區別

方法重載發生在一個類中,方法名相同,參數不同(數據類型或順序),與返回值無關
方法重寫是發生在子父類之間,方法聲明必須相同

16.數組有沒有length()這個方法? String有沒有length()這個方法?

數組沒有length()這個方法,有length的屬性。String有length()這個方法   

17.什麼是抽象類

抽象類是僅實現了部分方法的類,並且用abstract修飾的類叫抽象,抽象類中可以存在變量,常量,構造方法,以及普通方法. 

18.抽象類的用途

1) 抽象類目的是增強程序的擴展性和兼容性 
3)抽象類應當擁有儘可能多的共同代碼,以提高代碼的複用率。
4)抽象類應當擁有儘可能少的數據。   

19.java中接口有什麼用?

(1)是程序對外暴露的規則
(2)接口是程序對外的功能擴展
(3)接口是用來多實現的
(4)接口的出現降低了類與類之間的耦合性。        

20. 面向對象的涉及方法有哪些?

OOA-Object Oriented Analysis     面向對象的分析   
OOD-Object Oriented Design      面向對象的設計   
OOI-Object Oriented Implementation  面向對象的實現   

21.構造器Constructor是否可被(覆蓋)override?

構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading。   

22.JAVA反射機制作用是什麼?

(1)JAVA反射機制是在運行狀態中,可以對於任意一個類,都能夠知道這個類的所有屬性和方法
(2)對於任意一個類,都能夠調用它的任意一個方法,以及可以動態獲取類的信息

23.web應用程序體系結構是怎樣的?

一般分爲表示層、業務層、數據持久層   

24.GET和POST有什麼區別?

(1)get提交時參數會在地址欄顯示,post參數在請求體中
(2)post相對get,數據傳出比較安全
(3)get有大小限制(不能大於2kb),而post理論上沒有大小限制(所以在問價上傳中必須要使用post提交)

25.HTTP協議的特點?

1) 支持客戶/服務器模式。
2) 簡單快速 
3) 靈活:HTTP允許傳輸任意類型的數據對象
4) 無連接:無連接的含義是限制每次連接只處理一個請求
5) 無狀態:HTTP協議是無狀態協議。

26.靜態方法有什麼好處?

不需要實例化類的對象,只需要類名點的形式去調用,可以再工具類中定義靜態方法,方便於調用  

27.Set裏的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==還是equals()? 它們有何區別?

Set裏的元素是不能重複的,用iterator()方法來區分重複與否。
==:
    基本類型:比較的是值是否相同
    引用類型:比較的是地址值是否相同
equals():
    引用類型:默認情況下,比較的是地址值,可進行重寫,比較的是對象的成員變量值是否相同

28.JAVA中的靜態方法有什麼理解?

1)靜態方法以類名點的形式調用  
2) 靜態方法不能以任何方式引用this和super關鍵字,因爲加載靜態方法的是否,對象還沒有創建
3) 靜態方法以及變量不屬於任何一個對象   

29.JSP中動態INCLUDE與靜態INCLUDE的區別?

動態INCLUDE用jsp:include動作實現 <jsp:include page="included.jsp" flush="true" />它總是會檢查所含文件中的變化,適合用於包含動態頁面,並且可以帶參數。   
靜態INCLUDE用include僞碼實現,定不會檢查所含文件的變化,適用於包含靜態頁面<%@ include file="included.htm" %>   

30.Java有沒有goto?

java中的保留字,現在沒有在java中使用。   

31.啓動一個線程是用run()還是start()?

啓動一個線程是調用start()方法,處於可運行狀態,這意味着它可以由JVM調度並執行。這並不意味着線程就會立即運行。
run()方法可以產生必須退出的標誌來停止一個線程。   

32.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

byte、short、char、int。JDK1.5以後可以使用枚舉,1.7之後可以使用String  

33.char型變量中能不能存貯一箇中文漢字?爲什麼?

可以,因爲java中以unicode編碼,一個char佔16個字節,所以放一箇中文是沒問題的   

24.Java中的線程有四種狀態分別是是什麼?

新建 就緒 運行 阻塞 死亡   

35.java中有幾種類型的流?JDK爲每種類型的流提供了一些抽象類以供繼承,請說出他們分別是哪些類?

字節流,字符流
字節流繼承於:InputStream OutputStream
字符流繼承於:InputStreamReader OutputStreamWriter

36.靜態變量和實例變量的區別?

(1)靜態變量在類中,不屬於實例對象,屬於類所有,只要程序加載了字節碼,不用創建實例對象靜態變量就會被分配空間,    已經可以使用。
(2)實例變量是某個對象的屬性,只有實例化對象後,纔會被分配空間,才能使用。  

37.什麼是java序列化,如何實現java序列化?

序列化:把Java對象轉換爲字節序列的過程。
反序列化:把字節序列恢復爲Java對象的過程。   
序列化的實現:   
    將需要被序列化的類實現Serializable接口,只是爲了標註該對象是可被序列化  

38.是否可以從一個static方法內部發出對非static方法的調用?

不可以,如果其中包含對象的method();不能保證對象初始化.   

39.在JAVA中,如何跳出當前的多重嵌套循環?

用break; return 方法。   

40.面向對象的特徵有哪些方面

1).繼承     
2).封裝     
3).多態性      

41.String是最基本的數據類型嗎?

java.lang.String類是引用數據類型,被final所修飾,因此不可以繼承這個類、不能修改這個類。爲了提高效率節省空間,我們應該用StringBuffer類  

42. 運行時異常與一般異常有何異同?

運行時異常是不檢查異常,程序中可以選擇捕獲處理,也可以不處理。這些異常一般是由程序邏輯錯誤引起的。
一般異常也叫檢查時異常,這種異常,編譯器強制要求我們去try/catch,否則編譯不通過  

43.&和&&的區別。

&是位運算符,表示按位與運算,兩邊都會運行
&&是邏輯運算符,表示邏輯與(and),如果左邊爲false,右邊不會執行   

44.final, finally, finalize的區別。

final 用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。   
finally是異常處理語句結構的一部分,表示總是執行。   
finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法   

Jsp/servlet面試題

1.四種會話跟蹤技術是什麼?(jsp)

cookie,url重寫,session,隱藏表單域。   

2.不同客戶端可不可以共享Session?

不可以  
Jps和Servlet之間可不可以用session傳值?
可以   

3.簡介cookie的有關知識

cookie是會話跟蹤技術,常常用於傳輸隱私數據,可設置cookie在客戶端保存的時長 
cookies給網站和用戶帶來的好處非常多:   
1、Cookie能使站點跟蹤特定訪問者的訪問次數、最後訪問時間和訪問者進入站點的路徑   
2、Cookie能告訴在線廣告商廣告被點擊的次數 ,從而可以更精確的投放廣告   
3、Cookie有效期限未到時,Cookie能使用戶在不鍵入密碼和用戶名的情況下進入曾經瀏覽過的一些站點   
4、Cookie能幫助站點統計用戶個人資料以實現各種各樣的個性化服務    
JSP是使用如下的語法格式來創建cookie的:   
  Cookie cookie_name =new Cookie(""Parameter"",""Value"");   
  例如:Cookie newCookie =new Cookie(""username"",""zheng""); response.addCookie(newCookie);   

4.在瀏覽器的打開時再新打開一個瀏覽器還是同一個session嗎?

對IE而言不是同一個SESSION
當用戶請求服務器時,服務器會將sessionId保存cookie中,返回給客戶端,對於其他瀏覽器來說,當用戶不主動要求服務刪除session的時候,session會有一個有效時長,默認爲30分鐘,當唱過時長後,服務器會認爲客戶端停止活動,會刪除session(有些時候是kookie丟失了,而不是說session失效了)   

5.描述Cookie和Session的作用,區別和各自的應用範圍 (中)

Cookie和Session都可以用來在多個頁面之間共享數據,區別是Cookie保存在客戶端,可以設置比較長的保存時間.而Session保存在服務器端,通常生存時間較短。如果客戶端禁用了Cookie,Cookie將無法工作,而session不受這一影響。一般來說保密性高、保存時間短的信息適合用session來存放,而Cookie適合存放需要長期保存的非敏感數據。   

6.如何實現購物車添加新項,又不使購物車中原有項目被取消?

可以將購物車(Map集合)存放在session當中   

7.Cookie的過期時間如何設置?

使用setMaxAge(int exp)方法,單位是秒   

8.如果BROWSER已關閉了cookies,在JSP中我如何打開session?

如果Cookie被禁用,session將通過url重寫的方式來傳送,所以不會影響session的使用   

9. Jsp有哪些常用動作?作用分別是什麼?(jsp)

JSP有6種常用基本動作 
    jsp:include:在頁面被請求的時候引入一個文件。    
    jsp:useBean:尋找或者實例化一個JavaBean。    
    jsp:setProperty:設置JavaBean的屬性。    
    jsp:getProperty:輸出某個JavaBean的屬性。    
    jsp:forward:把請求轉到一個新的頁面。    
    jsp:plugin:根據瀏覽器類型爲Java插件生成OBJECT或EMBED標記。   

10.forward與redirect區別?

forward是轉發送,redirect是重定向
(1)重定向地址欄的路徑會發生改變,轉發不會
(2)轉發是服務器端行爲,重定向是瀏覽器端行爲
(3)轉發是一次請求一次響應,而重定向是兩次請求兩次響應
(4)轉發可以使用request傳輸數據,而重定向不能  

11.Jsp和Servlet中的請求轉發分別如何實現?

Jsp中使用<jsp:forward>動作,servlet中使用RequestDistpatcher對象的forward方法"   

12.什麼是web容器?

給處於其中的應用程序組件(JSP,SERVLET)提供一個環境,使JSP,SERVLET直接更容器中的環境變量接口交互,不必關注其它系統問題。主要有WEB服務器來實現。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。該容器提供的接口嚴格遵守J2EE規範中的WEB APPLICATION 標準。我們把遵守以上標準的WEB服務器就叫做J2EE中的WEB容器。
(web容器就是程序運行的環境,該容器提供的接口嚴格遵守J2EE規範中的WEB APPLICATION標準,這樣的容器就是web容器,例如:TOMCAT,WEBLOGIC,WEBSPHERE等)   

13.應用服務器有那些?

BEA WebLogic Server,IBM WebSphere Application Server,Oracle9i Application Server,JBoss,Tomcat。  

14.請說出JSP的內置對象及方法

(1) request表示HttpServletRequest對象。它包含了有關瀏覽器請求的信息,並且提供了幾個用於獲取cookie,      header, 和session數據的有用的方法。   
(2) response表示HttpServletResponse對象,並提供了幾個用於設置送回瀏覽器的響應的方法(如cookies,頭        信息等)   
(3) out對象是javax.jsp.JspWriter的一個實例,並提供了幾個方法使你能用於向瀏覽器回送輸出結果。   
(4) pageContext表示一個javax.servlet.jsp.PageContext對象。它是用於方便存取各種範圍的名字空間、()(5) servlet相關的對象的API,並且包裝了通用的servlet相關功能的方法。   
(6) session表示一個請求的javax.servlet.http.HttpSession對象。Session可以存貯用戶的狀態信息   
(7) applicaton 表示一個javax.servle.ServletContext對象。這有助於查找有關servlet引擎和servlet環境的信息   
(8) config表示一個javax.servlet.ServletConfig對象。該對象用於存取servlet實例的初始化參數。   
(9) page表示從該頁面產生的一個servlet實例。   

15.使用JSP如何獲得客戶瀏覽器的信息?

request對象的getXXXX方法"   

16.B/S與C/S的聯繫與區別。

一、硬件環境
    C/S用戶固定,並且處於相同區域,要求擁有相同的操作系統。
    B/S要有操作系統和瀏覽器就行。與操作系統平臺無關。
二、客戶端要求
    C/S客戶端的計算機電腦配置要求較高。
    B/S客戶端的計算機電腦配置要求較低。
四、軟件安裝
    C/S每一個客戶端都必須安裝和配置軟件,客戶端不必安裝,使用瀏覽器訪問,易推廣。
    B/S最大的優點就是可以在任何地方進行操作而不用安裝任何專門的軟件。
五、軟件升級和維護
    C/S每一個客戶端都要升級程序。可以採用自動升級。BS客戶端不必安裝及維護。
六、安全性
    C/S一般面向相對固定的用戶羣,程序更加註重流程,它可以對權限進行多層次校驗,提供了更安全的存取模式,對信息安全的控制能力很強。一般高度機密的信息系統採用C/S結構適宜。   

17.Ajax的工作原理 ?

在會話的開始,瀏覽器加載Ajax引擎   
請求動作通過JavaScript調用Ajax引擎來代替.    
引擎負責繪製用戶界面以及與服務器端通訊。   
Ajax引擎採用異步交互過程--局部刷新頁面。   

18.XMLHttpRequest對象是什麼,它有哪些常用方法?

一個 JavaScript 對象。是Ajax 的核心。   
該對象的方法和屬性。   
    open():建立到服務器的新請求。    
    send():向服務器發送請求。        
    readyState:提供當前 HTML 的就緒狀態。    
    responseText:服務器返回的請求響應文本。  

19.什麼是Ajax?

客戶端和服務器通過一部交互,從而實現頁面的局部刷新,增強用戶的體驗  

20.同步與異步的區別?

(1)普通B/S模式(同步)AJAX技術(異步)   
(2)同步: 提交請求->等待服務器處理->處理完畢返回 這個期間客戶端瀏覽器不能幹任何事
   異步: 請求通過事件觸發->服務器處理->處理完畢 ,期間用戶可以有其他操作  
(3)同步是阻塞模式,異步是非阻塞模式

21.何爲容器

容器就是符合某種規範的能夠提供一系列服務的管理器     

22. 編程題: 寫一個Singleton出來。

Singleton模式主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。   
第一種形式(惡漢式):  
public class Singleton {   
private Singleton(){}   
private static Singleton instance = new Singleton();   
public static Singleton getInstance() {   
    return instance;      
}    
}    
第二種形式(懶漢式):    
public class Singleton {    
  private static Singleton instance = null;   
  public static synchronized Singleton getInstance() {   
  if (instance==null)   
    instance=new Singleton();   
     return instance;
   }    
}   

23.J2EE是技術還是平臺還是框架?

J2EE本身是一個標準,一個爲企業分佈式應用的開發提供的標準平臺。   
J2EE也是一個框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技術。   

24.我們在web應用開發過程中經常遇到輸出某種編碼的字符,如iso8859-1等,如何輸出一個某種編碼的字符串?

Public String translate (String str) {   
String tempStr = "";   
try {   
  tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");   
  tempStr = tempStr.trim();   
}   
catch (Exception e) {   
  System.err.println(e.getMessage());   
}   
return tempStr;   

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章