序號 問題
1 自我介紹
2 知道的集合類有哪些
List set map
3 String、StringBuffer、StringBuilder區別
String:引用常量,final修飾,不能被繼承
StringBuff 和 StringBuilder:引用變量,便于處理拼接字符串,前者線程安全,后者不是;
使用時,如果只是創建一個字符串,不改變時,使用String;
常進行拼接操作時:單線程使用StringBuilder,多線程使用StringBuffer
效率:StringBuilder>StringBuffer>String
4 hibernate和mybatis的區別
hibernate全自動,mybatis半自動的: hibernate通過其強大的對象關系模型對數據庫進行操作,可以自動生成sql;mybatis則只是簡單的字段映射,通過自己手寫sql來操作
hibernate數據庫可移植性大于mybatis:? hibernate使用的系統映射關系自動生成的sql和hql,降低對數據庫的耦合性,mybatis則取決于我們手寫的sql,
sql優化上mybatis要優于hibernate:手寫的容易優化,機器生成的無法直接優化
hibernate擁有完整的日志系統,mybatis則欠缺一些。
5 什么是事務
6 spring的事務介紹
事務管理是企業級應用程序開發中必不可少的技術,用來確保數據的完整性和一致性,
事務的四個關鍵屬性:原子性,一致性,隔離性,持久性。
Spring既支持編程式事務管理,也支持聲明式的事務管理。編程式事務管理:將事務管理代碼嵌入到業務方法中來控制事務的提交和回滾,在編程式管理事務時,必須在每個事務操作中包含額外的事務管理代碼。聲明式事務管理:大多數情況下比編程式事務管理更好用。它將事務管理代碼從業務方法中分離出來, 以聲明的方式來實現事務管理.事務管理作為一種橫切關注點, 可以通過 AOP 方法模塊化. Spring 通過 Spring AOP 框架支持聲明式事務管理.
7 session和cookie的區別
cookie存于客戶端,不安全,有大小限制,通常一個cookie大小為4K,對多保存20個cookie,
session存于服務端,沒有大小限制,過多時會占用服務器性能
1.cookie數據存放在客戶的瀏覽器上,session數據存放在服務器上。
2.cookie不是很安全,別人可以通過分析存放在本地的cookie并進行cookie欺騙,考慮到安全應當使用session。
3.session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能,考慮到減輕服務器性能方面,應當使用cookie。
4.Session中保存的是對象,Cookie中保存的是字符串。
5.單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie。
6.個人認為,將登陸信息等重要信息存放在session,其他信息如果需要保留,可以放在cookie中
8 group by 和having的區別用法
group by 分組,having用于分組后的條件
Group By語句從英文的字面意義上理解就是“根據(by)一定的規則進行分組(Group)”。它的作用是通過一定的規則將一個數據集劃分成若干個小的區域,然后針對若干個小區域進行數據處理。group by 是先排序后分組;
HAVING語句通常與GROUP BY語句聯合使用,用來過濾由GROUP BY語句返回的記錄集。HAVING語句的存在彌補了WHERE關鍵字不能與聚合函數聯合使用的不足。
9 tomcat如何增加內存
第一種方法:
Windows下,在文件/bin/catalina.bat,Unix下,在文件/bin/catalina.sh的前面,增加如下設置:
JAVA_OPTS='-Xms【初始化內存大小】 -Xmx【可以使用的最大內存】'
需要把這個兩個參數值調大。例如:
JAVA_OPTS='-Xms256m -Xmx512m'
表示初始化內存為256MB,可以使用的最大內存為512MB。
第二種方法:?
環境變量中設?? ? 變量名:JAVA_OPTS?? ? 變量值:-Xms512m?? -Xmx512m
第三種方法:
前兩種方法針對的是bin目錄下有catalina.bat的情況(比如直接解壓的Tomcat等),但是有些安裝版的Tomcat下沒有catalina.bat,這個時候可以采用如下方法,當然這個方法也是最通用的方法:打開tomcatHome//bin//tomcat5w.exe,點擊Java選項卡,然后將會發現其中有這么兩項:Initial memory pool和Maximum memory pool.Initial memory pool這個就是初始化設置的內存的大小。Maximum memory pool這個是最大內存的大小 設置完了就按確定然后再重啟TOMCAT你就會發現tomcat中jvm可用的內存改變了
10 查一張表如果查的慢,如何解決
數據庫優化,sql優化
創建索引語句:create index 索引名 on 表名(字段名)
explain你的select語句,分析一下
只有一行數據時 limit1
為搜索字段添加索引
避免使用select*
拆分大的delete或者insert語句
11 數據庫索引如何使用,哪些字段需要加索引
索引是一種特殊的查詢表,可以是數據庫引擎增加檢索速度
因為正確的索引可能使效率提高,而無效的索引可能是浪費了數據庫空間,甚至大大降低查詢性能;表的主鍵、外鍵必須有索引;經常與其他表進行連接的表,在連接字段上應該建立索引;經常出現在Where子句中的字段,特別是大表的字段,應該建立索引;索引應該建在小字段上,對于大的文本字段甚至超長字段,不要建索引
12 圖表工具用過哪些,怎么用的
13 springmvc的工作原理
1.springmvc請所有的請求都提交給DispatcherServlet,它會委托應用系統的其他模塊負責負責對請求進行真正的處理工作。
2.DispatcherServlet查詢一個或多個HandlerMapping,找到處理請求的Controller.
3.DispatcherServlet請請求提交到目標Controller
4.Controller進行業務邏輯處理后,會返回一個ModelAndView
5.Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象
6.視圖對象負責渲染返回給客戶端。
14 aop的介紹
Aop即面向切面編程,可以說是面向對象編程的補充和完善。Aop技術是一種稱為“橫切”的技術,剖解開封裝的對象內部,并將那些影響了多個類的公共行為封裝到一個可重用模塊,即切面,簡單說就是那些與業務無關,卻為業務模塊所共同調用的邏輯或責任封裝起來,便于減少系統的重復代碼,降低模塊之間的耦合度,并有利于未來的可操作性和可維護性,比如權限認證、日志、事物。Aop的作用在于分離系統中的各種關注點,將核心關注點和橫切關注點分離開來。
15 jquery的選擇器
(1)基本
(2)層次選擇器:
(3)基本過濾器選擇器
(4)內容過濾器選擇器
(5)可見性過濾器選擇器
(6)屬性過濾器選擇器
(7)子元素過濾器選擇器
(8)表單選擇器
(9)表單過濾器選擇器
$("#myELement") ? ?選擇id值等于myElement的元素
$("div") ? ? ? ? ? 選擇所有的div標簽元素,返回div元素數組
$(".myClass") ? ? ?選擇使用myClass類的css的所有元素
$("form input") ? ? ? ? 選擇所有的form元素中的input元素
$("div[id]") ? ? ? ? ? ? ?選擇所有含有id屬性的div元素
16 mybatis中$和#的區別,一對多怎么查詢
# 會給添加的屬性默認增加一個引號,可以防止sql注入
$ 則是直接添加到sql中,會發生sql注入
一對多:在配置時在"一"的resultMap里邊添加collection標簽添加"多"的一項
17 線程的實現方式
繼承Thread
實現Runable接口
18 線程同步怎么實現
同步代碼塊
同步方法
使用特殊域變量(volatile)實現線程同步
使用重入鎖實現線程同步
使用局部變量實現線程同步
http://blog.csdn.net/small_lee/article/details/51453019
19 靜態代碼塊和構造器的執行順序
20 hashMap和HashTable的區別
1、HashTable線程同步,HashMap非線程同步。
2、HashTable不允許<鍵,值>有空值,HashMap允許<鍵,值>有空值。
3、HashTable使用Enumeration,HashMap使用Iterator。
4、HashTable中hash數組的默認大小是11,增加方式的old*2+1,HashMap中hash數組的默認大小是16,增長方式一定是2的指數倍。
5、TreeMap能夠把它保存的記錄根據鍵排序,默認是按升序排序
21 ArrayList和LinkedList的區別
1.ArrayList是基于數組的數據結構,LinkedList基于鏈表的數據結構。
2.ArrayList查詢數據比LinedList快,因為LinkedList要移動指針。
3.LinedList添加、刪除數據比ArrayList快,因為ArrayList要移動數據。
22 主鍵外鍵的區別
1.主鍵是一個表的唯一標識,是這個表的約束,不能有重復,不能為空。關鍵字primary key
2.外鍵用于與另一張表的關聯,是能確定另一張表記錄的字段,用于保持數據的一致性。一個表可以有多個外鍵,關鍵字是foreign key
23 是否了解前端框架,用過哪些,簡單介紹
Bootstrap layer ?Swiper ?amazeui
Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的,它簡潔靈活,使得 Web 開發更加快捷。Bootstrap中包含了豐富的Web組件,根據這些組件,可以快速的搭建一個漂亮、功能完備的網站。另外一個重點是,Bootstrap是自適應的,可以支持PC和移動端頁面,自動調整其樣式寬度高度,做PC端和移動端的網頁都可以使用它。當然,完全做到自適應是不可能的,但是Bootstrap基本適用大部分場景了。
layer是一款口碑極佳的web彈層組件,與同類彈出層組件相比,layer的優勢明顯,她盡可能地在以更少的代碼展現出更強健的功能
Swiper是純javascript打造的滑動特效插件,面向手機、平板電腦等移動終端
簡單來說,Swiper就是實現了一個滑動切換圖片或面板的效果。顯然是針對移動端的。
Amaze UI 是一個輕量級(所有 CSS 和 JS gzip 后 100 kB 左右),移動優先的前端框架。
24 抽象類和接口的關系
抽象類:
抽象類是特殊的類,只是不能被實例化;除此以外,具有類的其他特性;重要的是抽象類可以包括抽象方法,這是普通類所不能的。抽象方法只能聲明于抽象類中,且不包含任何實現,派生類必須覆蓋它們。另外,抽象類可以派生自一個抽象類,可以覆蓋基類的抽象方法也可以不覆蓋,如果不覆蓋,則其派生類必須覆蓋它們。
接口:
接口是引用類型的,類似于類,和抽象類的相似之處有三點:
1、不能實例化;
2、包含未實現的方法聲明;
3、派生類必須實現未實現的方法,抽象類是抽象方法,接口則是所有成員(不僅是方法包括其他成員);
25 什么是gc,如何使用
垃圾回收機制,使c++程序員最頭疼的內存管理的問題迎刃而解,它使得Java程序員在編寫程序的時候不再需要考慮內存管理。由于有個垃圾回收機制,Java中的對象不再有"作用域"的概念,只有對象的引用才有"作用域"。垃圾回收可以有效的防止內存泄露,有效的使用可以使用的內存。垃圾回收器通常是作為一個單獨的低級別的線程運行,不可預知的情況下對內存堆中已經死亡的或者長時間沒有使用的對象進行清楚和回收,程序員不能實時的調用垃圾回收器對某個對象或所有對象進行垃圾回收。回收機制有分代復制垃圾回收和標記垃圾回收,增量垃圾回收。
GC:指java的垃圾回收機制,java的垃圾回收機制是自動調用的,并不受程序員控制
程序員不能具體控制時間,系統在不可預測的時間調用System.gc()函數的時候;當然可以通過調優,用NewRatio控制newObject和oldObject的比例,用MaxTenuringThreshold?控制進入oldObject的次數,使得oldObject?存儲空間延遲達到full?gc,從而使得計時器引發gc時間延遲OOM的時間延遲,以延長對象生存期。
gc回收的是那些超出了作用域或引用計數為空的對象;從gc?root開始搜索找不到的對象,而且經過一次標記、清理,仍然沒有復活的對象。
刪除不使用的對象,回收內存空間;運行默認的finalize,當然程序員想立刻調用就用dipose調用以釋放資源如文件句柄,JVM用from?survivor、to?survivor對它進行標記清理,對象序列化后也可以使它復活。
26 版本管理工具svn是干嘛的,怎么用的,代碼沖突怎么辦
SVN全名Subversion,即版本控制系統。Svn是一種集中式文件版本管理系統運行方式
常見操作:
svn checkout:將服務器代碼完整的下載到本地
svn commit:將本地修改的內容提交到服務器
svn update:將服務器最新代碼下載到本地
SVN是非常實用也好用的版本管理工具,但不是萬能的,有時候還需要你手動解決。
一般在你準備提交一個新版本時,首先update一遍,有時候update完之后發現跟本地版本有沖突,這時候,在有沖突文件的地方存在4個文件:
1)petgeniusupdatelayer.ccb,這是沖突的文件,也就是你update下來的文件跟本地的文件合并之后存在沖突的文件,這個文件需要你去處理;
2)petgeniusupdatelayer.ccb.mine,這是在update之前本地修改的文件;
3)petgeniusupdatelayer.ccb.r19732,這是該文件的初始版本;
4)petgeniusupdatelayer.ccb.r20390,這是SVN服務器上你update下來的文件(服務器最新版本的文件);
一般沖突出現的原因是你和另外一個比你先commit的家伙修改到了這個文件的同一個地方,這個時候你有3種解決方法:
1)手動合并代碼,這就要求你在不改動另外一個家伙代碼目的的情況下,把自己的代碼加進去,或者你們協商修改,一般問題不大,不要犯迷糊就可以;然后再svn里,remark as resolved;重新檢查一遍即可commit;
2)無視新版本,使用你自己的版本,這時,只需要把后綴名為.mine的文件去掉這個后綴名,替代源文件petgeniusupdatelayer.ccb即可;
這種情況也有,比如某個模塊只有你自己負責,別人不會動這個地方的代碼等,但是由于不小心改動了一些(經常是別人要測試,自己改代碼,改完之后忘記改回來就提交了)。
3)放棄本地版本,petgeniusupdatelayer.ccb.r20390去掉后綴名就是最新版本,或者直接全部刪除,重新update一份,這代表完全放棄自己的修改,完全做無用功啊;
為了盡量避免沖突,減少麻煩:
1)提交的時候要注意檢查自己本地修改,每個修改的地方做到心中有數,不需要提交的代碼,比如打印Log,測試代碼注意及時刪除;
2)每次開始修改一份代碼時,盡量保證初始代碼為最新,這樣可以盡可能減少沖突的發生
27 系統權限是如何管理的,怎么實現的
一個系統包含眾多模塊,要求能夠通過權限管理,控制不同用戶對模塊的訪問權限,而且需要控制到對某個模塊的某個操作(增刪改查)的級別。一般情況下,通過角色對用戶進行統一授權,在某些特殊情況下,能夠單獨對用戶進行授權。
28 項目是怎么部署上線的
1、打包成war格式,2.購買云服務器3.登錄你的阿里云服務器4.遠程連接5.配置java web環境6.發布項目
29 hibernate的延遲加載是怎么回事
延遲加載就是并不是在讀取的時候就把數據加載進來,而是等到使用時再加載。Hibernate使用了虛擬代理機制實現延遲加載。返回給用戶的并不是實體本身,而是實體對象的代理。代理對象在用戶調用getter方法時就會去數據庫加載數據。
30 sql語句怎么優化的
①選取最適用的字段屬性,數據庫中的表越小,執行查詢越快,因此將表中字段的寬度設置盡可能小,如varchar(255)不合適,另外應盡量把字段設置為not null。查詢時不用去比較null值。
②使用連接join代替子查詢,子查詢即適用查詢語句查詢一個結果,把結果作為過濾條件用在另一個查詢中,適用join時SQL不需要創建臨時表來完成這個邏輯上的步驟。
③使用聯合union來代替手動創建的臨時表,使用union來創建查詢時,只需要用union作為關鍵字把多個select語句連接起來就可以,要注意的是所有select語句中的字段數目要想同。
④要么語句塊中每條語句都操作成功,要么都失敗。換句話說,就是可以保持數據庫中數據的一致性和完整性。事物以BEGIN關鍵字開始,COMMIT關鍵字結束。在這之間的一條SQL操作失敗,那么,ROLLBACK命令就可以把數據庫恢復到BEGIN開始之前的狀態。事務的另一個重要作用是當多個用戶同時使用相同的數據源時,它可以利用鎖定數據庫的方法來為用戶提供一種安全的訪問方式,這樣可以保證用戶的操作不被其它的用戶所干擾。
⑤使用外鍵,能保證數據的關聯性。
⑦使用索引,索引是提高數據庫性能的常用方法,它可以令數據庫服務器以比沒有索引快得多的速度檢索特定的行,尤其是在查詢語句當中包含有MAX(),MIN()和ORDERBY這些命令的時候,
性能提高更為明顯。
⑧優化的查詢語句,如in和not in操作符性能低,like操作符中'_xx%'會引用范圍索引。
31 如何保證redis和數據庫中的數據是同步的
1)查詢時先查詢緩存(redis),如果查詢不到,查詢數據庫,并將會員唯一標識(會員編號),放到redis隊列中(list)
2)啟動一個job從redis隊列中讀取會員唯一標識,并判斷會員編號作為key是否存在于redis中,如果存在,計數器減一,否則直接查詢會員信息,放到redis中。
3)更新時,先更新數據庫,再清空對應redis信息,并將會員編號做為key的計數器加一
32 mysql的存儲過程、觸發器
存儲過程(Stored Procedure)是一組為了完成特定功能的SQL語句集,經編譯后存儲在數據庫中,用戶通過指定存儲過程的名字并給定參數(如果該存儲過程帶有參數)來調用執行它。
mysql觸發器
觸發器是一種與表操作有關的數據庫對象,當觸發器所在表上出現指定事件時,將調用該對象,即表的操作事件觸發表上的觸發器的執行。
33 講一下servlet
servlet從客戶端(通過Web服務器)接收請求,執行某種作業,然后返回結果。
使用servlet的基本流程如下:
·客戶端通過HTTP提出請求.
·Web服務器接收該請求并將其發給servlet。如果這個servlet尚未被加載,Web服務器將把它加載到Java虛擬機并且執行它。
·servlet將接收該HTTP請求并執行某種處理。
·servlet將向Web服務器返回應答。
·Web服務器將從servlet收到的應答發送給客戶端。
34 java字符串類里常用的方法
length()方法 :字符串的長度
charAt()截取字符
getChars() 截取多個字符
getBytes() 將字符存儲在字節數組中
toCharArrray()
35 request的常用方法
一、獲取客戶機環境信息常見方法:
1.getRequestURL方法返回客戶端發出請求時的完整URL。
2.getRequestURI方法返回請求行中的資源名部分。
3.getQueryString方法返回請求行的參數部分。
4.getRemoteAddr方法返回發出請求的客戶機的IP地址。
5.getRemoteHost方法返回發出請求的客戶機的完整主機名。
6.getRemotePort方法返回客戶機所使用的網絡端口號。
7.getLocalAddr方法返回WEB服務器的IP地址。
8.getLocalName方法返回WEB服務器的主機名。
9.getMethod得到客戶機請求方式。
二、獲得客戶機請求頭:
1.getHeader(String name)方法
2.getHeaders(String name)方法
3.getHeaderNames()方法
三、獲得客戶機請求參數(客戶端提交的數據)
1.getParameter(name)方法
2.getParameterValues(String name)方法
3.getParameterNames方法
4.getParameterMap方法,做框架時大量使用
四,其他
Request對象的主要方法:
setAttribute(String name,Object):設置名字為name的request 的參數值
getAttribute(String name):返回由name指定的屬性值
getAttributeNames():返回request 對象所有屬性的名字集合,結果是一個枚舉的實例
getCookies():返回客戶端的所有 Cookie 對象,結果是一個Cookie 數組
getCharacterEncoding() :返回請求中的字符編碼方式
getContentLength() :返回請求的 Body的長度
getHeader(String name) :獲得HTTP協議定義的文件頭信息
getHeaders(String name) :返回指定名字的request Header 的所有值,結果是一個枚舉的實例
getHeaderNames() :返回所以request Header 的名字,結果是一個枚舉的實例
getInputStream() :返回請求的輸入流,用于獲得請求中的數據
getMethod() :獲得客戶端向服務器端傳送數據的方法
getParameter(String name) :獲得客戶端傳送給服務器端的有 name指定的參數值
getParameterNames() :獲得客戶端傳送給服務器端所有參數的名字,結果是一個枚舉的實例
getParameterValues(String name):獲得有name指定的參數的所有值
getProtocol():獲取客戶端向服務器端傳送數據所依據的協議名稱
getQueryString() :獲得查詢字符串
getRequestURI() :獲取發出請求字符串的客戶端地址
getRemoteAddr():獲取客戶端的 IP 地址
getRemoteHost() :獲取客戶端的名字
getSession([Boolean create]) :返回和請求相關 Session
getServerName() :獲取服務器的名字
getServletPath():獲取客戶端所請求的腳本文件的路徑
getServerPort():獲取服務器的端口號
removeAttribute(String name):刪除請求中的一個屬性
36 forward和redirect
forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然后把這些內容再發給瀏覽器.瀏覽器根本不知道服務器發送的內容從哪里來的,所以它的地址欄還是原來的地址.
redirect是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址.所以地址欄顯示的是新的URL.
forward:轉發頁面和轉發到的頁面可以共享request里面的數據.
redirect:不能共享數據.
forward:一般用于用戶登陸的時候,根據角色轉發到相應的模塊.
redirect:一般用于用戶注銷登陸時返回主頁面和跳轉到其它的網站等.
forward:高.
redirect:低.
37 maven是做什么的,怎么用的
maven是一個項目構建和管理的工具,提供了幫助管理 構建、文檔、報告、依賴、scms、發布、分發的方法。可以方便的編譯代碼、進行依賴管理、管理二進制庫等等。
maven的好處在于可以將項目過程規范化、自動化、高效化以及強大的可擴展性。利用maven自身及其插件還可以獲得代碼檢查報告、單元測試覆蓋率、實現持續集成等等。
38 java中如果不用正則表達式,如何驗證一個郵箱格式是否正確
使用java代碼驗證
import java.util.Scanner;
public class Test
{
public static void main(String args[])
{
Scanner sc=new Scanner(System.in);
String name=sc.next();
if(chose(name))
{
System.out.println("郵箱合法");
}
else
{
System.out.println("郵箱非法");
}
}
public ?static boolean chose(String a)
{
String c;
String d;
char b=a.charAt(0);
if(a.equals(""))
{
return false;
}
if(b==' ' && b=='@' && b=='.')
{
return false;
}
c=a.substring(a.length()-4,a.length());
if(!(c.equals(".com")))
{
return false;
}
//用判定"@."是否存在好一些
if(!a.contains("@."))
{
return false;
}
}
39 hibernate和JPA有什么區別
JPA是一種ORM規范,提供的只是一些接口
Hibernate除了作為ORM框架之外,它也是一種JPA實現。