公司筆記,無私奉獻,相當低階,沒什麼技術內容
筆記
1. 異常:Runtime Exception、CheckedException
2. 註解:SuppressWarnings(“unchecked”),指示編譯器取消警告。
3. getSession(false,true,null)的用法:
3.1:request.getSession(false):返回當前request中的session,如果沒有,返回null。
3.2:request.getSession(true)等同於request.getSession(),如果沒有session,就建立一個。
4. spring註解:@Autowired與@Qualifier
4.1:@Autowired是根據型別來裝配,當上下文中不存在該型別或不止一個該型別,就會報錯;可以是使用@Qualifier來解決;
a:@Autowired
@Qualifier(“UserDao”)
b:若可能不存在UserDao例項:@Autowired(required=false)
5. WSDL是什麼?
網路服務描述語言
6. XSD是什麼?
指Xml結構定義
7. 日誌級別:DEBUG、INFO、WARN、ERROR、FATAL、AllLevel、OFFlevel
AllLevel:最低等級、開啟所有日誌記錄;
OFFlevel:最高,關閉所有。
8. JMS:Java訊息服務
Java訊息服務是Java關於面向訊息中介軟體的API,用於在兩個應用程式之間或者分散式系統中傳送訊息,是一個與具體平臺無關的API。
9. Document與element、Node的關係?
10. 如何配置jar包關聯的原始碼:
Java Build Path →libraries→某個jar包→Source attachment → edit選擇原始碼
另:sourceattachment、Javadoclocation、Nativelibrary location、Accessrules 分別是什麼意思,做什麼的?
11. DeploymentAssembly 是什麼意思?幹什麼的?
12. request.getParamenterValues(pName)會返回一個Enumeration物件,這個如何使用?
13. getAttribute(“key”)與getParament(“key”)的區別?
14. doGet()與doPost()與service():
servlet在預設情況下,無論是post或get請求都會經過service()方法方法處理,然後轉向到doGet()或doPost()方法,如果你在自己的servlet類中重寫了service()方法,這是service就不是用來轉向的,而是處理業務。
15. log4j的使用:新增不同級別的日誌資訊,呼叫不同方法加入日誌內容,如:Log.info(“……….”),Log.error(“……..”),Log.debug(“………”),Log.warn(“…….”)
16. Mybatis的mapper檔案中的變數引用方式#{}與${}的區別?
預設使用#{},MyBatis會產生preparedStatement語句,安全地設定其引數,還會使用必要的安全檢查。
${}不進行預編譯,可能會產生sql注入問題,也會影響sql語句的預編譯,如果需要插入一個不做任何修改的字串到sql中,則使用${}。
17. UTF-8佔用幾個位元組?
1個位元組的:數字,英文字母;
2個位元組的:拉丁、希臘等;
3個位元組的:類似 GBK,21000個漢字;
4個位元組的:中日韓超大字符集裡的漢字,5萬多個。
18. ASCII、Unicode、UTF-8、GBK、GB2312、ISO-8859-1?
UTF-8是Unicode的實現方式之一,
ASCII是最早出現的,美國製定的一種表示常用制度的編碼方式,128個。
Unicode是萬國碼,它的出現時因為 每個國家標準不統一,導致同一個二進位制數字在不同的國家代表的字元不一樣。因為ASCII碼只能表示常用的128個,而各國的字元都要在128個之後表示,每個國家就出現了不同的表示方式。Unicode規定了字元對應的二進位制的值。
19. Java的介面與抽象類:
① 語法上:抽象方法,是否可以有例項方法,例項變數等。
② 概念上:一個是對行為的抽象,一個是對類的抽象。
20. Spring的幾個註解:
@Controller:表現層的bean,不指定bean名,預設為首字母小寫的類名;
@Component:受Spring管理的元件的通用註釋;
@repository:資料訪問元件,即Dao元件;
@service:業務層的bean;
@scope:作用域,prototype:原型,singleton:單例
21. Spring註解掃描配置:
<context:annotation-config/>
<context:Component-sacnbase-package=”…”/>
22. Spring註解
@RequestMapping(…..)
@ResponseBody(……)
23. 配置<MVC:annotation-driven/>時報字首未繫結?
MVC:annotation-driven
↓ ↓
名稱空間 元素
為什麼要有名稱空間?
為了避免發生命名衝突。比如兩xml文件中均含有帶有不同內容的同一標籤,兩文件合併時候回發生衝突。此時引入名稱空間,給兩xml各自給一個名稱空間,命名可見一般用一個全球唯一的網址表示。
24. RequestMapping六個屬性:
1. value:指定請求的實際地址
2. method:請求的method型別(get、post)
3. cosumes:指定處理請求的提交內容型別(content-Type:application/json;text/html)
4. produces:指定返回的內容型別,僅當request請求頭中的accept型別中包含該指定型別才返回。
5. params:指定請求中必須包含某些引數時,才讓該方法處理。
6. headers:指定request中必須包含某些指定header值,才讓該方法處理。
25. linux檢視指定行:(xxx表示檔名)
grep -A 100 xxx:顯示關鍵字後100行;
grep -B 100 xxx:顯示關鍵字前100行;
grep -C 100 xxx:顯示關鍵字前後100行
26. DOS檢視端口占用:
① netstat–ano:找到埠對應IP;
② tasklist|findstr“PID”:找到任務列表;
③ taskkill/f /t /im 任務名:殺死程序;
27. linux:tar命令
tar –cvf 目標檔案 原始檔:打tar包;
tar –xvf xxxx.tar:先cd到目標路徑下,再解包;
tar –zcvf xxxx.gz 原始檔 :以gzip壓縮;
tar –jcvf xxxx.bzz 原始檔:以bzip壓縮;
28. Jsonp跨域請求:
① What:非官方的跨域資料交換協議;
② 擴充套件:跨域請求與同源策略:
同源策略:目前,所有的瀏覽器都引入的一個規則,一個域內的指令碼僅具有本域內的許可權(同域指令碼只能讀取本域資源);
同源:同IP並且同埠且同協議
29. Prototype,AlphaGo
30. grep–n “關鍵字” 檔案:顯示關鍵字行數;
head –n 2 檔案:檢視前兩行;
tail –n 2 檔案:檢視最後兩行;
cat 檔案|grep–n “關鍵字”:檢視關鍵字所在行數;
sed –n ‘5,10p’ 檔案:檢視5-10行;
awk ‘NR==2,NR==11{print}’檔案:同上一條;
31. windows下安裝啟動MySQL:
① 下載包,解壓到路徑X:XX下;
② 配置環境變數:MYSQL_HOME:x:xx….;Path新增:%MYSQL_HOME%/bin
③ 向windows註冊mysql服務;
1) 管理員開啟命令列;
2) 切換到bin目錄;
3) Mysqld.exe–install MySQL –defaults –file=”x:xx/my-default.ini”
4) 啟動服務: net start mysql
④ Mysql:檢視當前使用者: select user();
檢視所有使用者:selectuser,host,password from mysql.user;
⑤ 修改密碼,修改空密碼:
1) SETPASSWORD FOR ‘root’@’localhost’=PASSWORD(‘newPWD’);
2) a:usemysql
b:UPDATE user SET password=PASSWORD(‘root’)where user=’root’;
3) FLUSHPRIVILEGES;
32. MySQL:
① 修改sql語句結束符:delimiter 結束符(注意:該語句後面沒有跟舊的結束符)
② 建立一個儲存過程:
CREATE PROCEDURE produce_name(IN param_nameTYPE,OUT param_name TYPE)
READS SQL DATA
BEGIN
……….(SQL)
END
$
注意:執行前後修改sql預設結束符;
33. SpringMVC中使用Interceptor攔截器:
① 實現HandlerInterceptor 介面或繼承實現該介面的類
② 實現WebRequestInterceptor介面或繼承實現該介面的類
③ HandlerInterceptor介面定義了三個方法:
a) preHandler(HttpServletRequestreq,HttpServletResponse res,Object obj){}:請求處理之前呼叫,返回boolean,若false不再執行後續步驟,若true則呼叫下一個攔截器或controller;
b) postHandler(HttpServletRequestreq,HttpServletResponse res,Object obj,ModelAndView view){}:controller處理之後,檢視解析器之前執行,所以是對ModelAndView進行處理的,與preHandler相反,先宣告的會後執行;
c) afterCompletion(HttpServletRequestreq,HttpServletResponse res,Object handle,Exception ex){} 與postHandle方法同樣都是都是preHandle方法返回true才執行。該方法還在請求之後執行。
34. 配置Tomcat連線池(Server.xml檔案配置)
① Server.xml中配置DataSource,併為其指定引數;
<!-- Global JNDI resources
Documentation at /docs/jndi-resources-howto.html
-->
<GlobalNamingResources>
<!-- Editable user database that can alsobe used by
UserDatabaseRealm to authenticate users
-->
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="Userdatabase that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFacto"
pathname="conf/tomcat-users.xml"/>
<!--
|-name:表示以後要查詢的名稱。通過此名稱可以找到DataSource,此名稱任更換,但是程式中最終要查詢的就是此名稱,
為了不與其他的名稱混淆,所以使用jdbc/oracle,現在配置的是一jdbc的關於oracle的命名服務。
|- auth:由容器進行授權及管理,指的使用者名稱和密碼是否可以在容器上生效
|-type:此名稱所代表的型別,現在為javax.sql.DataSource
|-maxActive:表示一個數據庫在此伺服器上所能開啟的最大連線數
|-maxIdle:表示一個數據庫在此伺服器上維持的最小連線數
|-maxWait:最大等待時間。10000毫秒
|-username:資料庫連線的使用者名稱
|-password:資料庫連線的密碼
|-driverClassName:資料庫連線的驅動程式
|-url:資料庫連線的地址
-->
<!--配置Oracle資料庫的JNDI資料來源-->
<Resource
name="jdbc/bmos_ds"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="lead_oams"
password="p"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@192.168.1.229:1521:lead"/>
<!--配置MySQL資料庫的JNDI資料來源-->
<Resource
name="jdbc/mysql"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="root"
password="root"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://192.168.1.144:3306/leadtest?useUnicode=true&amcharacterEncoding=utf-8"/>
<!--配置SQLServer資料庫的JNDI資料來源-->
<Resource
name="jdbc/sqlserver"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="sa"
password="[email protected]"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://192.168.1.51:1433;DatabaseName=demo"/>
</GlobalNamingResources>
② Web.xml中引用資源;
<resource-ref>
<res-ref-name>jdbc/bmos_ds</res-ref-name>
<res-type>javax.sql.Datasource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
③ Javabean、servlet中使用資源。
獲取連線的方式變了,
原來:載入驅動,獲取連線;
現在:使用連線池,如下:
Context context = new InitialContext();
Datasource ds = ()context.lookup(“java:comp/env/jdbc/bmos_ds”);//對應上面name
Connection conn = ds.getConnection();
//java:comp/env/為固定寫法,後面跟server.xml中資源名;
//lookup方法會從資源中獲取一個數據源。
35. Javax.sql.Datasource介面:
用於提供此Datasource物件表示的物理資料來源的連線。作為DriverManager的替代。實現該介面的物件通常基於JDNI註冊,該介面驅動由驅動程式供應商實現。
方法:
Connection getConnection()
Connection getConnection(Stringusername,String password)
36. JNDI:Java命名和目錄介面:
J2EE的重要規範之一,就是為某個Java物件起一個名字。
Ps:打jar包的方法:
i. 先編譯.java檔案為.class檔案
ii. jar –cvf 生成包的名字class檔案或者資料夾(一個或者多個)
例如:jar–cvf test.jar ./com
37. HashMap的實現原理:(陣列+連結串列)
1) 陣列:定址容易,插入、刪除難;
2) 連結串列:定址難,插入、刪除容易
雜湊表結合了二者的有點:
HashMap -> Entry[] Entry為HashMap的靜態內部類(三個屬性:key,value,next)
3) 存取:大致演算法是 先用key.hashCode()方法得到hash值,用hash%Entry[].length對陣列取餘(原始碼是:hash&(Entry[].length-1))得到的index即value存放在陣列中的下標。具體還是看這個吧http://www.importnew.com/16301.html
38.沒意思
39.transient關鍵字:不會序列化,只能修飾變數。
40.soap,WSDL。UDDI
RMI呼叫 RMI Registry
SOAP(Simple Object Access Protocol,簡單物件訪問協議),是一種資料交換的協議格式,SOAP=HTTP+xml+RPC
RPC可以選擇走TCP還是HTTP
41.nio:
nio的核心元件之一:channel,類似io裡面的stream,nio的操作是基於channel,同一可以讀取資料到buffer,再寫入通道,不過,通道既可以讀又可以寫,通道有非阻塞io模式。
42.Java設計模式:
1) 分類:
a) 建立型模式:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。(5個)
b) 結構型模式:介面卡模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。(7個)
c) 行為型模式:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、直譯器模式。(11個)
d) 併發模式和執行緒池模式
2) 六大原則:
a) 開閉原則:對外擴充套件開放,對修改關閉。(介面和抽象類的使用)
b) 里氏替換原則:任何基類可以出現的地方,子類一定可以出現。
c) 依賴倒轉原則:開閉原則的基礎,針對介面程式設計,依賴於抽象而非具體實現。
d) 介面隔離原則:使用多個隔離的介面,比使用單個介面要好。
e) 迪米特原則(最少知道原則):一個實體應該儘可能少得與其他實體間發生互相作用,使得系統模組互相獨立。
f) 合成複用原則:儘量使用合成/聚合的方式,而不是使用繼承。
43.Web Service
a) wsimport
使用:wsimport [options] <WSDL_URI>
-WSDL_URI 統一資源識別符號
-d 指定要輸出的檔案的位置
-s 指定要解析java的原始碼,預設解析出的是class位元組碼
-p 指定輸出的包名
b) 看懂WSDL檔案:
Service:服務名
Port:服務的訪問方式(get、post、soap11、soap12)
Soap:address:服務的地址
Binding name:繫結名,對應port裡binding
c) 面試相關:
1. soap:簡單物件訪問協議 http+xml
2. soa:面向服務架構,一種思想;
組成:首先,面向web的服務,面向web的元件:webservice(記憶體,cpu,顯示卡);然後,企業服務匯流排(ESB),相當於主機板。
3. wsdl:webservice的描述語言。
4. UDDI 統一描述,發現,整合
這是目錄服務,通過該服務可以註冊和釋出webservice,以便於第三方呼叫者統一呼叫。
d) Webservice 在mvc架構中屬於哪一層?業務層
e) Webservice沒有嚴格的服務端和客戶端
f) 使用EndPointPublish釋出WebService時,遇到wrapper class package….is notfound 。Have you run APT to generatethem?
這是因為沒有使用工具生成對應的工具類,可以使用wsgen 工具。
Wsgen –keep –cp 包.類 需要先cd到classes目錄的根目錄。
g) WebService框架:
i. axis,xfire,axis2
ii. CXF框架:Celtrix(ESB框架)與xFire(Web Service)合併
h) CXF框架:soa框架
1) 是兩個框架的合併;
核心是org.apache.CXF.BUS(匯流排),類似於Spring的ApplicationContext;
依賴於Spring;
需要JDK1.6以上;
內建Jetty容器
2) 特點:
1. 與spring、servlet無縫對接,CXF框架裡面繼承了servlet容器Jetty
2. 支援註解的方式釋出WebService
3. 能夠顯示WebService的服務列表;
4. 能夠新增攔截器:輸入攔截器,輸出攔截器(日誌攔截器,許可權認證)
5. ServletFactoryBean:不支援註解,不支援攔截器
6. JaxWsServerFactoryBean:可註解,可攔截。
7. WebService訪問步驟:
A. 檢測本地代理描述的WSDL是否與服務端的WSDL一致,俗稱握手;
B. 通過SOAP協議進行通訊,採用POST請求,資料服裝在滿足SOAP約定的xml中。
C. 返回資料同樣封裝在xml 中。
i) Spring與CXF整合:
l 新增jar包
l 編寫業務類,通過CXF來發布WebService
l 新增一個CXF請求的Servlet,用來處理WebService的請求(過濾地址/ws/*)
l 配置Spring的配置檔案:applicationContext.xml,配置CXFde bean
l web.xml中配置cxf的Servlet,新增Spring監聽;
l 通過wsimport生成本地代理,訪問WebService。