1. 程式人生 > >公司筆記,無私奉獻,相當低階,沒什麼技術內容

公司筆記,無私奉獻,相當低階,沒什麼技術內容

筆記

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整合:

新增jar包

編寫業務類,通過CXF來發布WebService

新增一個CXF請求的Servlet,用來處理WebService的請求(過濾地址/ws/*)

配置Spring的配置檔案:applicationContext.xml,配置CXFde bean

web.xml中配置cxf的Servlet,新增Spring監聽;

通過wsimport生成本地代理,訪問WebService。