一. Java的八大基本數據類型
答:可以分4種類型:布爾類型(boolean),字符類型(char),浮點類型(double,float),整型(byte,short,int,long)。
二. String,StringBuffer與StringBuilder的區別?
- string:是字符串常量,一旦創建就不能修改,對於已經創建的字符串如要改變就會重新創建再保存,string是定義final類型的,string不是數據類型,它是一個類。
- stringbuffer:是一個字符串可變的的,對於已經創建的字符串修改是不會重新保存的,執行效率較慢,線程安全。
- stringbuilder:也是字符串可變對象,同StringBuffer一樣,可以對字符串進行操作,也不會新建對象。執行效率高效,但是線程不安全。
三. ArrayList和LinkedList的有什么不一樣?
1.ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構。
2.對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指針。
3.對於新增和刪除操作add和remove,LinedList比較占優勢,因為ArrayList要移動數據。
總結:新增和刪除LinedList比較好,查找ArrayList比較好。
六. Java中的==的equals有什么區別?
答:==比較的是2個對象的地址,而equals比較的是2個對象的內容。
七. 面向對象的特征
答: 繼承,封裝,多態。
八. 接口和抽象類的區別是什么?
接口是只能寫方法。
實現接口,要重寫它的方法
九. public、private、protected,default的區別
public:public表明該數據成員、成員函數是對所有用戶開放的,所有用戶都可以直接進行調用。
private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有財產神聖不可侵犯嘛,即便是子女,朋友,都不可以使用。
十. Overload和Override的區別
重寫(Override):是一個類中多態性的一種表現。
1.List Set Map的區別
list是一個有序列表,允許重復元素,允許 null
Set是一個無序列表,不允許重復元素,元素的位置是由hashCode決定的,最多包含一個null
list 和 set是存儲單列數據的集合,Map是存儲鍵值對這樣的雙列數據的集合
map存儲結構是沒有順序的,鍵不能重復,值可以重復,hashmap可以有一個null鍵
2.JAVA 語言如何進行異常處理
Java 的異常處理是通過 5 個關鍵詞來實現的:try、catch、throw、throws 和 finally。一般情況下是用 try 來執行一段程序,如果出現異常,系統會拋出(throws)一個異常,這時候你可以通過它的類型來捕捉(catch)它,或最后(finally)由缺省處理器來處理;
- try 用來指定一塊預防所有“異常”的程序;
- catch 子句緊跟在 try 塊后面,用來指定你想要捕捉的“異常”的類型;
- throw 語句用來明確地拋出一個“異常”;
- throws 用來標明一個成員函數可能拋出的各種“異常”;
- Finally 為確保一段代碼不管發生什么“異常”都被執行一段代碼;
3.final, finally, finalize 的區別? 【基礎】
答:final:修飾符(關鍵字);如果一個類被聲明為 final,意味着它不能再派生出新的子類,不能作為父類被繼承,因此一個類不能既被聲明為 abstract的,又被聲明為 final 的;將變量或方法聲明為 final,可以保證它們在使用中不被改變;被聲明為 final 的變量必須在聲明時給定初值,而在以后的引用中只能讀取,不可修改;被聲明為 final 的方法也同樣只能使用,不能重載。 finally:在異常處理時提供 finally 塊來執行任何清除操作;如果拋出一個異常,那么相匹配的 catch 子句就會執行,然后控制就會進入 finally 塊(如果有的話)。
4.jsp和serverlet的區別
- 簡單的來說Jsp就是含有Java代碼的html, 而servlet是含有html的Java代碼;
- Jsp最終也是被解釋為servlet並編譯再執行,Jsp 不過是servlet的另一種編寫方式;
- Jsp擅長表示,servlet 擅長數據處理,在MVC三層結構中,Jsp 負責V (視圖),servlet 負責C (控制),各有優 勢,各司其職;
5.jsp頁面中如何傳遞參數
- 直接在URL請求后添加
- jsp: param
- 設置session和request
6.什么是用例?如何確定用例?
在不展現一個系統或子系統內部結構的情況下,對系統或子系統的某個連貫的功能單元的定義和描述。
7.javascript 常用的方面;【基礎】
答:常用於數據輸入校驗和頁面特殊效果等。
8.常用的 web 容器和開發工具;【基礎】
答:最常用的容器包括:tomcat;
開發工具有:eclipse。
9.Web.Xml 的作用?【基礎】
答:用於配置 web 應用的信息;如 listener、filter 及 servlet 的配置信息等
10.MyBatis中使用#和$書寫占位符有什么區別?
答:#將傳入的數據都當成一個字符串,會對傳入的數據自動加上引號;
$將傳入的數據直接顯示生成在SQL中。注意:使用$占位符可能會導致SQL注射攻擊,能用#的地方就不要使用$,寫order by子句的時候應該用$而不是#。
11.#{}與${}的區別是什么?
答: #{} 是預編譯處理,${}是字符串替換。
1. Mybatis處理#{}時,會將sql#{}轉換為?,然后使用PreparedStatement的set方法來賦值。
2. 使用#{}能有效的預防SQL注入,提高系統的安全性。
12.MyBatis中的動態SQL是什么意思?
答:對於一些復雜的查詢,我們可能會指定多個查詢條件,但是這些條件可能存在也可能不存在,例如在58同城上面找房子,我們可能會指定面積、樓層和所在位置來查找房源,也可能會指定面積、價格、戶型和所在位置來查找房源,此時就需要根據用戶指定的條件動態生成SQL語句。如果不使用持久層框架我們可能需要自己拼裝SQL語句,還好MyBatis提供了動態SQL的功能來解決這個問題。MyBatis中用於實現動態SQL的元素主要有:
- - if
- - choose / when / otherwise
- - trim
- - where
- - set
- - foreach
13.什么是IoC和DI?DI是如何實現的?
答:IoC叫控制反轉,是Inversion of Control的縮寫,DI(Dependency Injection)叫依賴注入,是對IoC更簡單的詮釋。控制反轉是把傳統上由程序代碼直接操控的對象的調用權交給容器,通過容器來實現對象組件的裝配和管理。所謂的”控制反轉”就是對組件對象控制權的轉移,從程序代碼本身轉移到了外部容器,由容器來創建對象並管理對象之間的依賴關系。IoC體現了好萊塢原則 – “Don’t call me, we will call you”。依賴注入的基本原則是應用組件不應該負責查找資源或者其他依賴的協作對象。配置對象的工作應該由容器負責,查找資源的邏輯應該從應用組件的代碼中抽取出來,交給容器來完成。DI是對IoC更准確的描述,即組件之間的依賴關系由容器在運行期決定,形象的來說,即由容器動態的將某種依賴關系注入到組件之中。
舉個例子:一個類A需要用到接口B中的方法,那么就需要為類A和接口B建立關聯或依賴關系,最原始的方法是在類A中創建一個接口B的實現類C的實例,但這種方法需要開發人員自行維護二者的依賴關系,也就是說當依賴關系發生變動的時候需要修改代碼並重新構建整個系統。如果通過一個容器來管理這些對象以及對象的依賴關系,則只需要在類A中定義好用於關聯接口B的方法(構造器或setter方法),將類A和接口B的實現類C放入容器中,通過對容器的配置來實現二者的關聯。
依賴注入可以通過setter方法注入(設值注入)、構造器注入和接口注入三種方式來實現,Spring支持setter注入和構造器注入,通常使用構造器注入來注入必須的依賴關系,對於可選的依賴關系,則setter注入是更好的選擇,setter注入需要類提供無參構造器或者無參的靜態工廠方法來創建對象。
14.JDBC連接數據庫的步驟(這里說一下連接mysql數據庫)
- 加載驅動程序。Class.forName("com.mysql.jdbc.Driver")。
- 建立數據庫連接。通過DriverManager類的getConnection方法獲取連接對象,同時要傳入連接路徑作參數,路徑里包括我的數據庫名稱“myTest”,用戶名,密碼還有編碼。
- 創建數據庫操作對象Statement,用連接對象的createStatement()方法。servlet容器就會調用它的destroy()方法來銷毀這個servlet,釋放它所占用的資源。
- 調用statement執行sql。
- 關閉資源,關閉連接。
15.說一下CSS的基本選擇器,它們的優先級是怎樣?
答:id選擇器,class選擇器,元素選擇器,優先級如前所述,由高到低。注意一下,兩個class屬性直接相連匹配的是既有class1又有class2的元素。兩個class屬性用空格相連匹配的是在class1屬性元素下的擁有class2屬性的元素。
16.jQuery里怎么設置或得到一個元素的屬性
參考:attr()函數。
對象.attr("屬性名") //獲取屬性的值 對象.attr("屬性名","屬性值") //設置屬性的值
17.用戶在瀏覽器上打開一個頁面,這中間經歷了哪些過程,用你知道的知識解釋。
答:用servlet來舉例,當你訪問一個網頁即在地址欄輸入一個url,瀏覽器將請求數據打包,並將數據包發送給服務端容器,容器接收並解析數據包並將數據包中的參數封裝到創建的request對象中,同時創建一個response對象。在web.xml中找到url訪問路徑所對應的servlet類,檢查這個Servlet的實例對象是否已創建,若沒有就調用構造函數創建一個實例並調用它的init()方法(servlet是單例,這個過程只執行一次)。並將request和response對象作為參數傳給service()方法來處理請求(用來處理請求的方法,它是多線程且並不安全,不要用來操作全局變量),service()方法將會從request對象中獲得客戶端的請求參數,並將處理后的結果用response封裝返回到客戶端。服務器這邊,當不需要這個servlet對象需要結束其生命周期時,servlet容器調用它的destroy()方法來銷毀這個servlet對象,釋放對象所占用的資源。這里延伸一點,為了縮短用戶初次訪問時的等待時間,可以將servlet的創建設置成在容器啟動時,"1"在web.xml中配置這個,數值大於0即可。
18.在你的編程經歷中,你常遇到的異常有哪些?你用過哪些包?(異常說幾個實際中常用的即可,常見包即它們中常用的類說一下,這要平時稍稍看一下API)
常見的NullPointerException(空指針異常),ClassNotFoundException(類沒有找到異常),ArrayIndexOutOfBoundsException(數組角標越界),ClassCastException(強制類型轉換異常),NumberFormatException(數字格式異常),StackOverflowError(棧溢出錯誤),SQLException(操作數據庫異常)。慢慢開始做項目了,還會經常出現下面一些:struts2時常遇見的,“There is no Action mapped for namespace / and action name ***Action”跳轉時映射路徑錯誤。Hibernate里常見的:“MappingException: Unknown entity”數據庫和類的映射異常(沒在hibernate.cfg.xml里配置mapping)。
常用的包,java.util包,API對它的解釋是“包含 collection 框架、遺留的 collection 類、事件模型、日期和時間設施、國際化和各種實用工具類(字符串標記生成器、隨機數生成器和位數組)”里面集合的接口Collection, Iterable ,Map<k,v>等,比較對象類型的Comparator接口,表示枚舉的Enumeration,對日期字符串格式化的Formattable接口
提供許多基礎類的java.lang包,里面出除了提供像Boolean,Integer等封裝類,還有Iterable接口,實現這個接口允許對象成為foreach的對象。線程相關的Runnable接口,比較對象和自然排序的Comparable接口
通過數據流、序列化、和文件系統輸入和輸出的java.io包,有啟用類序列化功能的Serializable接口,刷新數據的Flushable 接口,關閉數據源的Closeable 接口
還有就是用數據庫時用到的java.sql包,與數據庫連接會話的Connection接口,驅動程序必須實現的Driver接口,查詢數據后得到的結果集ResultSet接口,用於執行靜態SQL語句的Statement,表示預編譯的PreparedStatement
19.Mysql里怎樣分頁
答:MySql里分頁比較簡單,就是用limit。“limit a,b”指從第a+1行開始的共b條數據(索引a從0開始)如下:
select * from a_student LIMIT 0,5; #返回第1到5行的數據 select * from a_student LIMIT 3,5; #返回從第4行開始的5條數據 select * from a_student LIMIT 5; #返回前5行數據
20.SpringMVC的流程

1.用戶發送請求至前端控制器DispatcherServlet;
2. DispatcherServlet收到請求后,調用HandlerMapping處理器映射器,請求獲取Handle;
3.處理器映射器根據請求url找到具體的處理器,生成處理器對象及處理器攔截器(如果有則生成)一並返回給DispatcherServlet; 4.DispatcherServlet 調用 HandlerAdapter處理器適配器;
5.HandlerAdapter 經過適配調用具體處理器(Handler,也叫后端控制器);
6.Handler執行完成返回ModelAndView;
7.HandlerAdapter將Handler執行結果ModelAndView返回給DispatcherServlet;
8.DispatcherServlet將ModelAndView傳給ViewResolver視圖解析器進行解析;
9.ViewResolver解析后返回具體View;
10.DispatcherServlet對View進行渲染視圖(即將模型數據填充至視圖中)
11.DispatcherServlet響應用戶。
21.你怎么理解類繼承和接口實現,有什么好處。在開發中兩者怎樣選擇。
參考:實現是繼承的一種,繼承是類之間的一種關系,實現是對自身方法的擴展。在開發中,如果多個類的某個功能相同,則可以把這部分共同代碼抽象出來,比如幾乎每個JavaBean都需要的創建時間,創建人,修改時間,修改人,這些就可以抽取到一個Util中,其它的類都來繼承這個Util類就可以了,這是繼承的應用。但是若是多個類的實現的目標一樣,但是實現的方式各不相同,這時就用多態。比如ArrayList和LinkedList,前者是便於查詢的數組結構,后者是便於增刪的鏈表結構。它們都可以用來存儲數據,只是實現的方式稍有差別,所以它們都是實現了List接口。
22.頁面間傳值的幾種方式
參考:get提交:*.jsp?a=xx & b=xx,直接放在訪問路徑的后面。只能傳輸字符串,這種方式傳輸數據小,且數據的值會出現在瀏覽器的訪問路徑里,不安全。
form表單,指定post提交。
jsp的內置對象request,<%request.setAttribute(name,"Ann");%>,想在next.jsp獲取時
<%String getName=request.getParameter("name"); %>
23.JSP中常用的標簽有哪些
參考:JSTL是JSP的標准標簽庫。先說下JSTL的核心標簽,在用核心標簽前要先在jsp的頭里引入<%@ taglib prefix="c"
uri="http://java.sun.com/jsp/jstl/core" %>。常用的有out標簽,輸出。迭代遍歷的forEach標簽
<c:forEach var="stu" items="${stuList}"> <c:out value="${stu }"></c:out> </c:forEach>
條件判斷的if標簽
<c:if test="${score>95 }"> <p>那你很厲害噢!</p> </c:if>
還有格式化標簽,在頭里引入<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>,用來格式化並輸出文本、日期、時間、數字。常用的有日期的格式化
<p><fmt:formatDate type="time" value="${now}"/></p> <p><fmt:formatDate pattern="yyyy-MM-dd" value="${now}"/></p>
24.JSP的幾個內置對象,和它們代表的意義。還有四個域對象。
參考:四大作用域:page:當前頁面的有效時間;request:請求開始到結束;session:會話開始到結束;application:服務器啟動到停止。
9個內置對象分別是:request,response,pageContent,session,application,page,config,out,exception。說重點的幾個。request,response的獲取方式:
在SpringMVC里,直接在控制層方法的形參里獲取或者用Spring的@Autowird注解。
public String hello(HttpServletRequest request,HttpServletResponse response) {...} 或者用Spring的注解 @Autowird private HttpServletRequest request;
request代表了客戶端的請求信息,作用域為request,response代表對客戶端的響應,作用域為page。重點說一下session,session的作用域為請求開始到結束,即為用戶打開瀏覽器到關閉瀏覽器的這個時間。它是服務端自動創建用來記錄和跟蹤用戶信息的,所以它存在服務器端。與此相對記錄用戶信息的還有cookie,它是保存在本地瀏覽器端的,session的session_id保存在本地瀏覽器的cookie里,當用戶離開后再次訪問時,瀏覽器端通過cookie里的session_id訪問服務器端,就可以再次得到用戶的信息。
(3)通過xml 文件或注解的方式將要執行的各種 statement 配置起來,並通過java對象和 statement中sql的動態參數進行映射生成最終執行的sql語句,最后由mybatis框架執行sql並將結果映射為java對象並返回。(從執行sql到返回result的過程)。
25.MySQL常用語句
- 連接本機MySQL
首先在打開 DOS 窗口,然后進入目錄 mysql bin,再鍵入命令 mysql -u root -p,回車后提示你輸密碼,輸入密碼回車即可進入到 MYSQL 中了
- 退出 MYSQL 命令:exit(回車)
- 修改密碼
首先在 DOS 下進入目錄 mysql bin,然后鍵入以下命令:
mysqladmin -u root -p 舊密碼 password 新密碼
- MySQL 常用命令
- create database name; 創建數據庫
- drop database name 直接刪除數據庫,不提醒
- select 中加上 distinct 去除重復字段





26.Spring MVC的主要組件?
- 前端控制器 DispatcherServlet(不需要程序員開發)
作用:接收請求、響應結果 相當於轉發器,有了DispatcherServlet 就減少了其它組件之間的耦合度。
2.處理器映射器HandlerMapping(不需要程序員開發)
作用:根據請求的URL來查找Handler
3.處理器適配器HandlerAdapter
注意:在編寫Handler的時候要按照HandlerAdapter要求的規則去編寫,這樣適配器HandlerAdapter才可以正確的去執行Handler。
4.處理器Handler(需要程序員開發)
5.視圖解析器 ViewResolver(不需要程序員開發)
作用:進行視圖的解析 根據視圖邏輯名解析成真正的視圖(view)
6.視圖View(需要程序員開發jsp)
View是一個接口, 它的實現類支持不同的視圖類型(jsp,freemarker,pdf等等)
27.談談你對SpringMVC 和struts2的區別
1.SpringMVC的入口是Servlet
2.SpringMVC是基於方法開發的 請求的參數是傳到形參上面
3.SpringMVC 是通過RequestMapper找到對應方法 把值傳到形參上面得到數據
28.Spring 在ssm中起什么作用?
- Spring:輕量級框架
- 作用:Bean工廠,用來管理Bean的生命周期和框架集成。
- 兩大核心:
1、IOC/DI(控制反轉/依賴注入) :把dao依賴注入到service層,service層反轉給action層,Spring頂層容器為BeanFactory。
2、AOP:面向切面編程
29.IOC 在項目中的作用?
- 作用:Ioc解決對象之間的依賴問題,把所有Bean的依賴關系通過配置文件或注解關聯起來,降低了耦合度。
30.Spring的配置文件中的內容?
- 開啟事務注解驅動
- 事務管理器
- 開啟注解功能,並配置掃描包
- 配置數據庫
- 配置SQL會話工廠,別名,映射文件
- 不用編寫Dao層的實現類
31.Spring下的注解?
- 注冊:@Controller @Service @Component
- 注入:@Autowired @Resource
- 請求地址:@RequestMapping
- 返回具體數據類型而非跳轉:@ResponseBody
32.什么是Mybatis的接口綁定,有什么好處?
Mybatis實現了DAO接口與xml映射文件的綁定,自動為我們生成接口的具體實現,使用起來變得更加省事和方便。
33.Mybatis工作原理?

原理:
- 通過SqlSessionFactoryBuilder從mybatis-config.xml配置文件中構建出SqlSessionFactory。
- SqlSessionFactory開啟一個SqlSession,通過SqlSession實例獲得Mapper對象並且運行Mapper映射的Sql語句。
- 完成數據庫的CRUD操作和事務提交,關閉SqlSession。