Java筆試

javac 就是把.java編譯成.class語言的編譯器。jvm執行.class文件html

java大小寫敏感前端

一個.java能夠有多個類,只能有一個publicjava

dir  windows下查看當前目錄mysql

註釋不會出如今字節碼中程序員

類名首字母大寫 第二個單詞首字母大寫web

方法,變量 第一個小寫spring

數字不能做爲開頭sql

 

靜態方法裏不能調用非靜態方法和成員變量

public class StaticAccessNonStatic
{
public void info()
{
System.out.println("簡單的info方法");
}
public static void main(String[] args)
{
info();
}
}數據庫

異常編程

 

Throwable是Java錯誤處理的父類,有兩個子類:Error和Exception。

 

Error:沒法預期的嚴重錯誤,致使JVM虛擬機沒法繼續執行,幾乎沒法恢復捕捉的

Exception:可恢復捕捉的。java健壯程序的手段。

 

Java提供了兩類主要的異常:runtime exception和checked exception (編譯時被檢查的異常)。

checked exception (編譯時被檢查的異常):JAVA編譯器強制要求咱們必需對出現的這些異常進行catch或throws。因此,面對這種異常無論咱們是否願意,只能寫一大堆catch塊或throws去處理可能的異常。

如IO異常,以及SQL異常等。

runtime exception:編譯經過,但運行通不過,出現RuntimeException,一般是程序員出錯。虛擬機接管會終止線程或主程序。如錯誤的類型轉換、數組越界訪問和訪問空指針等

       String:適用於少許的字符串操做的狀況

  StringBuilder:適用於單線程下在字符緩衝區進行大量操做的狀況,不安全

      StringBuffer:適用多線程下在字符緩衝區進行大量操做的狀況

 

   super用來訪問父類的方法和屬性

1:用最有效率的方法算出2乘以8

    將一個數左移n位,就至關於乘以了2的n次方

2:&和&&的區別

    &判斷兩個表達式,&&第一個爲false時則不會判斷第二個。

3:==  和  equals的區別

   ==是判斷兩個字符串在內存中的首地址

   equals 判斷兩個字符的區別;

4:堆棧都是一種數據項按序排列的數據結構,只能在一端(稱爲棧頂(top))對數據項進行插入和刪除。要點:堆:順序隨意棧:後進先出(Last-In/First-Out);隊列是一種特殊的線性表,特殊之處在於它只容許

在表的前端(front)進行刪除操做,而在表的後端(rear)進行插入操做,先進先出。

 

集合

5:Java主要集合

 位於Java.util包中

 只能存放引用類型的數據,不能存放基本數據類型

集合是由數組來實現的,對數組作的封裝

一:數組聲明瞭它容納的元素的類型,而集合不聲明。這是因爲集合以object形式來存儲它們的元素。  

二:一個數組實例具備固定的大小,不能伸縮。集合則可根據須要動態改變大小。  

三:數組是一種可讀/可寫數據結構---沒有辦法建立一個只讀數組。然而可使用集合提供的ReadOnly方法,以只讀方式來使用集合。該方法將返回一個集合的只讀版本。  
集合分類:

Collection:List、Set
Map:
HashMap:非線程不安全 容許一個空值key
HashTable:安全
treemap:實現了sortmap接口,用到排序最好
linkedHashmap:輸出和輸入的順序相同
weakhashmap:弱引用方式,key再被引用則被回收。
Arraylist 1.5倍 不一樣步 線性
vector 2倍 同步
linkedlist 從頭開始遍歷,隨機訪問效率低,插入效率高 鏈表 不安全

三個均可以改變大小, Collection接口 Collection是最基本的集合接口,聲明瞭適用於JAVA集合(只包括Set和List)的通用方法。 Set 和List 都繼承了Conllection,Map。

        set                                    list                                          map

      不能重複                           可擴展                                 鍵對象和值對象映射的集合                    

       隨即儲存,插入,刪除      線性存儲                             沒有繼承collection                                                              

       遍歷效率低           

Collection 和 Map 的區別
容器內每一個爲之所存儲的元素個數不一樣。
Collection類型者,每一個位置只有一個元素。
Map類型者,持有 key-value pair,像個小型數據庫
Collection、List、Set、Map都是接口,不能實例化。
    繼承自它們的 ArrayList, Vector, HashTable, HashMap是具象class,這些纔可被實例化
連接:https://wenwen.sogou.com/z/q799124796.html

選擇題
接口能夠繼承接口,抽象類可實現接口。抽象類是能夠繼承實體類,但前提是實體類必須有明確的構造函數,
抽象類中能夠有靜態的main方法
同步:是在A要用到資源時,B正在使用資源,A等待。
異步:不夠關心其它線程。
一個字節佔8位,一箇中文字佔16位。
JNDI用於數據庫連接池查找。
順序表:內存地址相鄰,經常使用於存取第i個元素和它的前趨值。

簡答題:
緩存:把數據庫中查詢出來的使用過的數據存儲在內存中,以便後期使用。
hibernate一級緩存:由session管理。生存週期短,線程不安全,效率提高不高。
二級緩存:sessionfactory管理(無關緊要)全局緩存能夠實現多線程與事務共享。獨立於hibernate(三方產品)
適用於:數據量較小,數據修改較小,不會被大量共享,不是重要的數據

clone的做用:返回一個object類

jsp優勢:解決servlet的缺點,用jsp來維護html的顯示。實現業務邏輯和視圖實現的分離。

get方法用來獲取服務器段資源信息
post:既能夠獲取又能夠向服務器傳送數據,url沒有明文顯示,更安全。
若是HTTP請求的方法是get Servelet就用doget,post用dopost(),

什麼是反射機制:獲得一個對象所屬的類,能夠運行時自我檢查,獲取一個類的成員變量和方法在運行時調用對象。

靜態變量:內存中只有一份,存在棧(s)中,地址對應常量區(a) string s=a;
非靜態變量:兩份,堆,棧都有。地址對應堆區,堆區對應常量區(a),string s ,new String(「a」) ,a

什麼是序列化:把對象以一串字節表示的過程,用於解決對象進行讀取操做時的問題。

堆和棧的區別:
棧:由操做系統釋放,存放函數的參數值,局部變量的值等,大小固定,存取更快。

堆:存儲運行時產生的變量,由程序員釋放。,每個實列對應一個jvm,更靈活(生存週期)
在棧中定義一個變量,變量指向堆中的地址,這個變量叫作引用變量。

是否有內存泄漏問題:
存在
概念:再也不被程序使用的對像,變量還在內存中。
java有垃圾回收機制,回收標準:1:在堆中申請的空間沒有被釋放。能夠保證
2:對象再也不使用,內存還保留。不可保證
狀況:靜態集合類,各類連接,網絡連接,io連接等,監聽器,變量不合理的做用域。

Socket是什麼:套接字,用於兩個程序之間實現通信
生命週期:打開socket,使用,關閉。
NIO是什麼:實現反應器模式,採用了非阻塞的方式,在處理大量併發要求時,nio比socket的效率高不少。
爲何說java是平臺獨立性語言:不一樣的機器會有不一樣的jvm,jvm能夠把java生成的中間碼翻譯成能夠執行的代碼
jion的做用:讓調用該方法的線程執行完run後再執行jion後面的代碼。用於兩個線程的合併


把字符串右移:
private static String moveToRight(String str,int position) {
            String str1=str.substring(str.length()-position);
            String str2=str.substring(0, str.length()-position);
            return str1+str2;
//返回左移n位字符串方法
    private static String moveToLeft(String str,int position) {
        String str1=str.substring(position);
        String str2=str.substring(0, position);
        return str1+str2;

設計模式:是設計經驗的總結,代碼重用,避免修改。

                   單列模式:保證在應用程序的生命週期中任何一個時刻,單列類的實例都只有一個。構造函數必須私有,提供一個全局訪問                                            點。

                   

 
 

實現一:當即加載 / 「餓漢模式」

 
 

當即加載就是使用類的時候已經將對象建立完畢(無論之後會不會使用到該實例化對象,先建立了再說。很着急的樣子,故又被稱爲「餓漢模式」),常見的實現辦法就是直接new實例化


//
餓漢式單例 public class Singleton1 { // 私有構造 private Singleton1() {} private static Singleton1 single = new Singleton1(); // 靜態工廠方法 public static Singleton1 getInstance() { return single; } }

 

 
 

實現二:延遲加載 / 「懶漢模式」

 
 

延遲加載就是調用get()方法時實例才被建立(先不急着實例化出對象,等要用的時候纔給你建立出來。不着急,故又稱爲「懶漢模式」),常見的實現方法就是在get方法中進行new實例化。


public
class Singleton { // 將自身實例化對象設置爲一個屬性,並用static修飾 private static Singleton instance; // 構造方法私有化 private Singleton() {} // 靜態方法返回該實例 _加一個synchronized變成安全的懶漢模式。 public static Singleton getInstance() { if(instance == null) { instance = new Singleton(); } return instance; } }
DCL雙檢查鎖機制
public
class Singleton { // 將自身實例化對象設置爲一個屬性,並用static修飾 private static Singleton instance; // 構造方法私有化 private Singleton() {} // 靜態方法返回該實例 public static Singleton getInstance() { // 第一次檢查instance是否被實例化出來,若是沒有進入if塊 if(instance == null) { synchronized (Singleton.class) { // 某個線程取得了類鎖,實例化對象前第二次檢查instance是否已經被實例化出來,若是沒有,才最終實例出對象 if (instance == null) { instance = new Singleton(); } } } return instance; } }

設計四個線程,其中共兩個線程每次對j增長1,另外兩個線程每次對j減小1。循環100次,寫出程序。
    https://blog.csdn.net/ankeyuan/article/details/39671979

 

                    工廠模式:負責實列化有大量公共接口的類,工廠模式能夠動態的決定將哪個類實列化。

https://www.cnblogs.com/zhi-hao/p/4028169.html

                                    簡單工廠:用戶不去直接new一個對象,建立對象都在factory中。

                                   方法工廠:定義一個工廠接口,分別實現不一樣產品的實現類。客戶端知道建立什麼類,實現類在實現工廠中建立。在添加產品時不須要修改之前的代碼。

                                   抽象工廠:他用來建立一組相關或者相互依賴的對象。他與工廠方法模式的區別就在於,工廠方法模式針對的是一個                                                      產品等級結構;而抽象工廠模式則是針對的多個產品等級結構。一個產品須要不少部件,如汽車(跑車,                                      賽車,轎車,不一樣產品的跑車是一個產品族),還有須要送的禮物,添加禮物工廠接口,實現接口。兩個工廠接口在                                     同一接口下。

 

                   適配器模式:把一個類的接口轉換成客戶端所指望的另外一個接口,從而使本來因接口不匹配而沒法一塊兒工做的兩個類一塊兒工                                              做。

                  觀察者模式:一個對象經過添加一個方法(該方法容許一個對象,即觀察者註冊本身)使本身變得可觀察當可觀察對象更改                                             時,會將消息發送到已經註冊的觀察者。

 

    JDK:(Java Development Kit):Java開發工具包,包含編寫Java程序所必須的編譯、運行等開發工具以及JRE。
    JRE:(Java Runtime Environment)即爲Java運行環境,提供了運行Java應用程序所必須的軟件環境,包含有Java虛擬機(JVM)
    和豐富的系統類庫。
    
    JVM:(Java Virtual Machines)即爲Java虛擬機,提供了字節碼文件(.class)的運行環境支持。 
    
    關係:JDK包含JRE包含JVM

   javac:是java語言編程編譯器。
    全稱java compiler。將java文件編譯成字節代碼的class文件。

 

volatile本質是在告訴jvm當前變量在寄存器中的值是不肯定的,須要從主存中讀取,synchronized則是鎖定當前變量,只有當前線程能夠訪問該變量,其餘線程被阻塞住.

 

Servlet

7:Servlet採用java語言編寫的服務器端程序,它運行於web服務器中的servlet容器中,提供請求響應的web服務模式,動態的生成web內容,
      客戶端發送請求至 服務器
      服務器啓動並調用 Servlet,Servlet 根據客戶端請求生成響應內容並將其傳給服務器
      服務器將響應返回客戶端
 

servlet 亂碼:response亂碼,requset亂碼

response.setCharacterEncoding("UTF-8");response對象中的數據以UTF-8解碼後的字節流發向瀏覽器;

response.setContentType("text/html;charset=utf-8")

或者 response.setHeader("content-type","text/html;charset=UTF-8");告訴瀏覽器用utf-8解析

request.setCharacterEncoding("utf-8");

<%@ page language="java" pageEncoding="utf-8"%>

/my.ini中的default-character-set=gbk

character-set-server=utf-8;

從新啓動mysql的服務

 

tring url = "jdbc:mysql://localhost:3306/dbname?useUnicode=true&amp;characterEncoding=UTF8";
 
實列化:收到請求

 

     

Servlet 經過調用 init () 方法進行初始化。

init 方法被設計成只調用一次。它在第一次建立 Servlet 時被調用,在後續每次用戶請求時再也不調用。

 

Servlet 調用 service() 方法來處理客戶端的請求。

service() 方法是執行實際任務的主要方法。Servlet 容器(即 Web 服務器)調用 service() 方法來處理來自客戶端(瀏覽器)的請求,並把格式化的響應寫回給客戶端。

 

Servlet 經過調用 destroy() 方法終止(結束)。

destroy() 方法只會被調用一次,在 Servlet 生命週期結束時被調用。destroy() 方法可讓您的 Servlet 關閉數據庫鏈接、中止後臺線程、把 Cookie 列表或點擊計數器寫入到磁盤,並執行其餘相似的清理活動。

 

最後,Servlet 是由 JVM 的垃圾回收器進行垃圾回收的。

 

      
      網絡三層結構的角度看 JSP 和 Servlet 的區別,一個網絡項目最少分三層:data layer(數據層),business layer(業務層),presentation layer(表現層)。固然也能夠更復雜。Servlet 用來寫 business layer
是很強大的,可是對於寫 presentation layer 就很不方便。JSP 則主要是爲了方便寫 presentation layer 而設計的。固然也能夠寫 business layer。
 
     一個 Servlet 在一個時刻可能被多個用戶同時訪問
     是從Servlet繼承而來。只不過它在Servlet當中又添加/修改了一些方法,做了新的封裝。

      採用JSP來表現頁面,採用Servlet來完成大量的處理,Servlet扮演一個控制者的角色,並負責響應客戶請求。Servlet建立JSP須要的Bean和對象,根據用戶的行爲,決定將哪一個JSP頁面發送給用戶。

特別要注意        的是,JSP頁面中沒有任何商業處理邏輯,它只是簡單的檢索Servlet先前建立的Beans或者對象,再將動態       內容插入預約義的模板。
多線程

多線程有兩種實現方法:

      方法一:繼承Thread類,重寫方法run();

      方法二:實現Runnable接口,實現方法run();

                        方法三:實現callable接口。

實現同步有幾種方法:例如:synchronized,wait,notify均可以實現同步。

終止線程:stop釋放全部的鎖,suspend不會釋放鎖,會形成死鎖。

sleep:如同打印機每隔一秒鐘打印一次;將機會讓給其它線程。不會釋放鎖。必須捕獲異常。

yiled:給更高優先級獲得運行機會。

synchronized:能夠用在方法,特定代碼塊中,在競爭激烈時性能降低的很快。必須以相反的順序釋放鎖,自動解鎖。

sock:性能不變,手動釋放(fianlly),均可以用來實現多線程,多了鎖投票,定時鎖,等候,中斷等。

JDBC

9:JDBC(Java數據庫鏈接,java數據庫鏈接)是一種用於執行SQL語句的Java API,能夠爲多種關係數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成.JDBC提供了一種基準,據此能夠構建更高級的工具和接口,使數據庫開發人員可以編寫數據庫應用程序,JDBC實現了全部這些面向標準的目標而且具備簡單,嚴格類型定義且高性能實現的接口。

   Hibernate是一個開放源代碼的對象關係映射框架,它對JDBC進行了很是輕量級的對象封裝,使得Java程序員能夠爲所欲爲的使用對象編程思惟來操縱數據庫。 Hibernate能夠應用在任何使用JDBC的場合,既能夠在Java的客戶端程序使用,也能夠在Servlet/JSP的Web應用中使用,最具革命意義的是,Hibernate能夠在應用EJB的J2EE架構中取代CMP,完成數據持久化的重任。Hibernate的核心接口一共有6個,分別爲:Session、SessionFactory、Transaction、Query、Criteria和Configuration。

DAO是Data Access Object數據訪問接口,數據訪問:故名思義就是與數據庫打交道。夾在業務邏輯與數據庫資源中間

Inverse是hibernate雙向關係中的基本概念。inverse的真正做用就是指定由哪一方來維護之間的關聯關係。當一方中指定了「inverse=false」(默認),那麼那一方就有責任負責之間的關聯關係,說白了就是hibernate如何生成Sql來維護關聯的記錄!

10;struts

它經過採用Java Servlet/JSP技術,實現了基於Java EE Web應用的Model-View-Controller〔MVC〕設計模式的應用框架〔WebFramework〕,是MVC經典設計模式中的一個經典產品

truts框架具備組件的模塊化,靈活性和重用性的優勢,同時簡化了基於MVC的web應用程序的開發。

由JSP創建,struts包含擴展自定義標籤庫,能夠簡化建立徹底國際化用戶界面的過程。

struts中,基本的控制器組件是ActionServlet類中的實例servlet,實際使用的servlet在配置文件中由一組映射(由ActionMapping類進行描述)進行定義。

Action,這個類一般由用戶提供,該控制器負責接收來自ActionServlet的請求,並根據該請求調用模型的業務邏輯方法處理請求,並將處理結果返回給JSP頁面顯示。

Model部分

由JavaBean組成,ActionForm用於封裝用戶的請求參數,封裝成ActionForm對象,該對象被ActionServlet轉發給Action,Action根據ActionForm裏面的請求參數處理用戶的請求。

JavaBean則封裝了底層的業務邏輯,包括數據庫訪問等。

View部分

該部分採用JSP實現。

Struts提供了豐富的標籤庫,經過標籤庫能夠減小腳本的使用,自定義的標籤庫能夠實現與Model的有效交互,並增長了現實功能。

Controller組件有兩個部分組成——系統核心控制器,業務邏輯控制器

Spring框架是因爲軟件開發的複雜性而建立的。Spring使用的是基本的JavaBean來完成之前只可能由EJB完成的事情。然而,Spring的用途不只僅限於服務器端的開發。從簡單性、可測試性和鬆耦合性角度而言,絕大部分Java應用均可以從Spring中受益。

◆目的:解決企業應用開發的複雜性

◆功能:使用基本的JavaBean代替EJB,並提供了更多的企業應用功能

◆範圍:任何Java應用

Spring是一個輕量級控制反轉(IoC)和麪向切面(AOP)的容器框

ioc:

 IOC實際上是一個容器,至於什麼控制反轉依賴注入只不過是IOC這個容器這個spring核心在創造的過程當中的指導思想,更多的簡化不少複雜繁瑣的重複性工做,將之前只能在代碼層作更改的東西,所有放在配置文件層面來解決。之前對象與對象之間在代碼層產生的耦合關係,經過配置文件來產生耦合關係,而經過配置文件來產生耦合關係的對象與對象又能夠輕易的解耦。

 

 aop:面向切面編程,經過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。

將日誌記錄,性能統計,安全控制,事務處理,異常處理等代碼從業務邏輯代碼中劃分出來,經過對這些行爲的分離,咱們但願能夠將它們獨立到非指導業務邏輯的方法中,進而改變這些行爲的時候不影響業務邏輯的代碼。

若是說OOP的出現是把編碼問題進行模塊化,那麼AOP就是把涉及到衆多模塊的某一類問題進行統一管理

相關文章
相關標籤/搜索