[轉載] 常用應屆生Java開發筆試面試題(更新中)

參考鏈接: Java中的循環的重要事項

Java開發面試題

?Java基礎篇Java8大基本數據類型Java的三大特性面向對象如果讓你推銷一款Java產品,你會怎么推銷呢?(java的特點)JVM與字節碼JDK與JREStringBuilder和StringBuffer的區別簡單介紹下多態、重載、重寫自動裝箱和拆箱String能被繼承嗎?簡單介紹一下static關鍵字super()和this()equals和==關于常量池抽象類與接口Java中的比較器(Comparable、Comparator)Java中的棧與堆final、finally、finalize數組和鏈表的區別為什么提出集合框架集合的概述以及底層數據結構并發與并行sleep和wait的區別線程的生命周期什么是線程、進程線程和進程的區別圖解進程線程什么是線程安全、為什么提出線程安全、如何實現?Thread 類中的start() 和 run() 方法有什么區別?Java中notify 和 notifyAll有什么區別?泛型是什么?為什么使用?概述反射和序列化序列化的好處使用JDBC的過程

? ?數據庫篇數據庫的基本操作MySql底層采用什么數據結構來存儲數據?分頁所用的關鍵字SQL實現數據表的復制什么是事務事務的四大特性什么是存儲過程簡單介紹一下觸發器什么是E-R圖什么是外連接、內連接?什么是索引?有什么用?范式

? ?數據結構篇快速排序冒泡排序二分查找二叉樹的遍歷什么是紅黑樹

? ?計算機網絡篇TCP和UDP三次握手 四次揮手網絡的七層協議當在瀏覽器輸入欄按下回車會發生什么郵件服務器之間傳送郵件通常使用什么協議,它們分別使用哪個端口,簡述其功能。

? ?web篇表單中get和post區別什么是Ajax,好處是什么九大內置對象轉發(Forward)和重定向(Redirect)的區別cookie和session你了解監聽器嗎?

? ?框架篇(這里只涉及SSM)什么是ORMMyBatis默認用什么做日志管理MyBatis動態代理MyBatis輸入輸出類型resultMap的使用為什么使用Druid(德魯伊),不使用c3p0簡單介紹SpringSpring的兩大特性什么是MVCSpringMVC的工作流程

??

? 聲明

?

?

Java基礎篇?

Java8大基本數據類型?

byteshortintlongfloatdoublecharboolean占用空間1字節(B)2字節4字節8字節4字節8字節不定 默認2字節JVM未定義初始值00000.00.0空格false

Java的三大特性?

?

?封裝:隱藏內部功能的具體實現,只保留和外部交流數據的接口。例:汽車與發動機,不必知道發動機的實現原理,只需使用汽車給予的接口,插入鑰匙。繼承:一個對象可以從它的父類繼承所有的通用的屬性和方法,并在無需重新編寫原來的類的情況下對這些功能進行擴展;最大的好處是實現代碼的高效重用。多態:同一個動作作用于不同的對象 所產生不同的行為。例:人會吃飯,中國人用筷子,美國人用叉子。?

?

面向對象?

?

?面向對象的核心,就是類和對象。Java中的面向對象的思想:萬物皆對象。類:是對一類事物的描述,是抽象的,看不見,摸不著。對象:是實際存在的該類事物的每個個體 也稱為實例 是具象的。所以面向對象程序設計的重點是類的設計,而不是對象的設計。類是對象的描述 對象叫做類的實例化(Instance)類不占內存,對象才占內存。?

?

如果讓你推銷一款Java產品,你會怎么推銷呢?(java的特點)?

1.Java是面向對象的

2.Java是跨平臺的;一次編譯,到處運行

3.Java是多線程的

4.Java有GC,簡化了開發

5.Java是分布式的

6.Java現在運用最廣泛(有待商榷,python太猛了)

7.支持多線程( C++ 語言沒有內置的多線程機制,因此必須調用操作系統的多線程功能來進行多線程程序設計,而 Java 語言卻提供了多線程支持);

8.支持網絡編程并且很方便( Java 語言誕生本身就是為簡化網絡編程設計的,因此 Java 語言不僅支持網絡編程而且很方便);

9.編譯與解釋并存;

?

JVM與字節碼?

?

?JVM:Java虛擬機(JVM)是運行 Java 字節碼的虛擬機。 JVM有針對不同系統的特定實現,目的是使用相同的字節碼,它們都會給出相同的結果(一次編譯,到處運行)。 字節碼:在 Java 中,JVM可以理解的代碼就叫做字節碼(即擴展名為 .class 的文件),它不面向任何特定的處理器,只面向虛擬機。Java 語言通過字節碼的方式,一定程度上解決了傳統解釋型語言執行效率低的問題,同時又保留了解釋型語言可移植的特點。所以 Java 程序運行時比較高效,而且,由于字節碼并不針對一種特定的機器,因此,Java程序無須重新編譯便可在多種不同操作系統的計算機上運行。?

?

JDK與JRE?

?

?JDK是Java Development Kit,它是功能齊全的Java SDK。它擁有JRE所擁有的一切,還有編譯器(javac)和工具(如javadoc和jdb)。它能夠創建和編譯程序。?

?

?

?JRE 是 Java運行時環境。它是運行已編譯 Java 程序所需的所有內容的集合,包括 Java虛擬機(JVM),Java類庫,java命令和其他的一些基礎構件。但是,它不能用于創建新程序。?

?

StringBuilder和StringBuffer的區別?

1. 他們都是可變長度的字符串

2. StringBuffer? 線程安全? ?效率低

3. StringBuilder? 線程不安全? 效率高

?

簡單介紹下多態、重載、重寫?

多態:同一種事物的多種形態。

作用:1.不必為每一個派生類編寫功能調用,只需要對抽象基類進行處理即可,提高可復用性;

? ? ? 2.派生類的功能可以被基類的方法或引用變量所調用,提高可擴展性。

1. 編譯時多態? ? 方法重載overload

? ? - 方法名必須相同

? ? - 形參列表必須不同(形參的數據類型和形參的個數不同)

? ? - 與返回值類型無關

2. 運行時多態? ? 方法重寫overwrite

? ? - 必須存在繼承關系

? ? - 重寫的方法、返回值類型、參數列表必須和父類的方法保持一致

? ? - 子類的訪問修飾符不能低于父類方法的訪問修飾符 public

?

自動裝箱和拆箱?

?

?裝箱:將基本類型用它們對應的引用類型包裝起來; 拆箱:將包裝類型轉換為基本數據類型;?

?

String能被繼承嗎??

public final class String implements java.io.Serializable, Comparable<String>, CharSequence?

不能,他是被final修飾的。

底層是由數組實現,數組長度不可變

?

簡單介紹一下static關鍵字?

static標記的變量或方法由整個類(所有實例)共享,可不必創建該類對象而直接使用;

static成員也稱類成員或靜態成員;

隨著類的加載而加載;

Java中無靜態類。

1. 修飾屬性

? ? 無論創建多少次對象,都會去共享一個靜態屬性,存在靜態域中和類同一級別

2. 修飾方法

? ? 也是存在靜態域中,可以使用類名.方法名去訪問。

? ? 靜態方法只能訪問靜態成員,如果是非靜態的,應該通過實例化對象的方式

? ? 靜態方法不能以任何方式引用this關鍵字

?

super()和this()?

this:1.當成員變量和局部變量重名,用關鍵字this來區分

? ? ? 2.this代表當前對象,this就是所存函數所屬對象的引用(哪個對象調用了this所在的函數,this就代表誰)

? ? ? 3.this(參數列表),調用本類中重載的構造方法,必須放在第一行。

super:1.使用super調用父類的成員方法和屬性

? ? ? 2.可以從子類構造方法中調用父類的構造方法,必須放在第一行。

?

equals和==?

==:基本類型比較的是值的大小

? ? 引用類型比較的是內存地址

equals:默認比較是否是同一個對象

? ? 例如String、Date等類對equals方法進行了重寫的話,比較的是所指向的對象的內容

? ? 注意:equals方法不能作用于基本數據類型的變量

?

// 舉例如下

public class test1 {

? ? public static void main(String[] args) {

? ? ? ? String a = new String("ab"); // a 為一個引用

? ? ? ? String b = new String("ab"); // b為另一個引用,對象的內容一樣

? ? ? ? String aa = "ab"; // 放在常量池中

? ? ? ? String bb = "ab"; // 從常量池中查找

? ? ? ? if (aa == bb) // true

? ? ? ? ? ? System.out.println("aa==bb");

? ? ? ? if (a == b) // false,非同一對象

? ? ? ? ? ? System.out.println("a==b");

? ? ? ? if (a.equals(b)) // true

? ? ? ? ? ? System.out.println("aEQb");

? ? ? ? if (42 == 42.0) { // true

? ? ? ? ? ? System.out.println("true");

? ? ? ? }

? ? }

}

?

關于常量池?

?

?當創建 String 類型的對象時,JVM先會在常量池中查找是否已經存在,如果已存在,就把它賦給當前引用。如果沒有,就在常量池中重新創建一個 String 對象。?

?String a = "xx";

String b ="xx";

String c = "xxx";

System.out.println(a==b);? //true? ?jvm現在常量池中創建了"xx",a指向"xx", 創建b時,先會看常量池中是否有"xx",如果有 讓b 指向"xx";如果沒有 則新建一個。

System.out.println(a==c);? // false

?

?

抽象類與接口?

抽象類:1.首先有構造方法

? ? ? ?2.含有抽象方法的類必須被聲明為抽象類

? ? ? ?3.抽象類不能被實例化,子類必須重寫父類的抽象方法

? ? ? ?4.abstract不能修飾屬性、構造器、private、static、final

? ? ? ?5.一般類中不能定義抽象方法;抽象類中可以有抽象方法,也可以有非抽象方法;

? ? ? ?6.抽象方法只有方法聲明,沒有方法實現。

接口:1.特殊的抽象類;

? ? ? ?2.接口中包含的方法都是抽象方法,沒有方法體;

? ? ? ?3.實現接口的類必須實現接口的全部方法。

? ? ? ?4.屬性:private static final? ?;? 方法:public abstract

區別:1.抽象類有構造器;接口沒有

? ? ? ?2.關鍵字不同

? ? ? ?3.抽象類可以有非抽象方法;接口只能由抽象方法;

? ? ? ?4.抽象類可以定義static方法;接口不行

?

Java中的比較器(Comparable、Comparator)?

?

?這兩個都是接口。 內部比較器:Comparable 外部比較器:Comparator排序規則實現的方法不同 Comparable接口的方法:compareTo(Object o) Comparator接口的方法:compare(T o1, To2)Comparable接口用于在類的設計中使用;設計初期,就實現這個借口,指定排序方式。 Comparator接口用于類設計已經完成,根據需求新建排序類實現排序。?

?

// 代碼演示

public class Stu implements Comparable{ // 實體類實現內比較器接口

? ? private String name;

? ? private int age;

? ? public Stu(String name, int age) {

? ? ? ? super();

? ? ? ? this.name = name;

? ? ? ? this.age = age;

? ? }

? ? // get set方法已經省略

? ? @Override

? ? public String toString() {

? ? ? ? return "Stu [name=" + name + ", age=" + age + "]";

? ? }

? ? @Override

? ? public int compareTo(Object o) {

? ? ? ? if (o instanceof Stu) {

? ? ? ? ? ? Stu s = (Stu) o;

? ? ? ? ? ? if (this.age > s.age) {

? ? ? ? ? ? ? ? return 1;

? ? ? ? ? ? } else if (this.age == s.age) {

? ? ? ? ? ? ? ? return 0;

? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? return -1;

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? return 0;

? ? }

}

// 外比較器:重新定義排序類實現外比較器

public class CompareClass implements Comparator<Stu>{

? ? @Override

? ? public int compare(Stu s1, Stu s2) {

? ? ? ? return s1.getAge() - s2.getAge();

? ? }

}

?

// main

public class TestMain {

? ? public static void main(String[] args) {

? ? ? ? Stu s1 = new Stu("xzy", 23);

? ? ? ? Stu s2 = new Stu("jay", 40);

? ? ? ? Stu[] list = new Stu[2];

? ? ? ? list[0]=s1;

? ? ? ? list[1]=s2;

? ? ? ? Arrays.sort(list);// 通過內比較器排序

? ? ? ? Arrays.sort(list, new CompareClass());// 通過外比較器 自定義的排序類 CompareClass 排序????

? ? ? ? System.out.println(Arrays.toString(list));

? ? }

}

?

Java中的棧與堆?

一、Java中的變量在內存中的分配

1.類變量(static):在程序加載時系統就為他在堆中開辟了內存,堆中的內存地址存放在棧中,以便于高速訪問

? ? 靜態變量的周期持續到系統關閉(靜態域)。

2.實例變量:當使用new時,使在堆中開辟相應的內存空間。當實例變量的引用丟失后,將被GC列入可回收名單。

3.局部變量:當執行到他的時候,在棧中開辟內存,當局部變量一旦脫離作用域,內存立即釋放。

二、堆內存用來存放由new創建的對象和數組,由GC來管理,然后在棧中定義一個特殊的變量,讓棧中的這個變量的取值等于數組或對象在堆內存中的首地址,

? ? 棧中這個變量就成了數組或對象的引用變量。

三、總結:基本數據類型,局部變量都是存放在棧內存中,用完就消失,沒有默認初始化值。

? ? new 創建的實例化對象及數組,是放在堆內存中的,用完之后靠GC不定期自動消除;

? ? 堆內存中所有實體都有內存地址值,有默認初始化值;實體不再被指向時,GC自動清除。

? ? 局部變量:存儲在棧中,必須顯示的賦值;

? ? 成員變量:存儲在堆中,有默認初始值。

?

final、finally、finalize?

final:

? ? 1.修飾變量:被聲明為final的變量必須在聲明時給出變量的初始值,而在以后的引用中只能讀取。

? ? 2.final聲明方法:方法不能被重寫

? ? 3.修飾類:不能被繼承

finally:在異常處理中作為一個必定會執行的語句塊。

finalize:java技術允許使用finalize方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作

?

數組和鏈表的區別?

1.存儲位置上:

? ? 數組邏輯上相鄰的元素在物理存儲位置上也相鄰,而鏈表不一定;

2.存儲空間上:

? ? 數組是連續的一段內存空間;鏈表存放的內存空間可以是連續的,也可以不連續的

3.長度可變性:

? ? 數組長度一旦聲明不可變,鏈表的長度是按照實際需求進行分配的

數組的優點:隨機訪問性強;查找速度快;

?

為什么提出集合框架?

數組的優點:1.長度不可變;2.存放對象的個數不確定

數組的缺陷:1.插入和刪除效率低;2.可能浪費內存;3.必須有足夠的內存空間;4.數組大小固定

鏈表的優點:1.插入刪除速度快;2.內存利用率高;3.可擴展

鏈表的缺點:1.不能隨機查找,必須從第一個開始遍歷,查找效率低

?

集合的概述以及底層數據結構?

Collection接口?

? List 有序的 可重復的?

? ? ArrayList:Object數組LinkedList:雙向鏈表(JDK1.6之前為循環鏈表,JDK1.7取消了循環)Vector:Object數組 Set 存儲無序的 不可重復的?

? ? HashSet: 基于 HashMap 實現的,底層采用 HashMap 來保存元素LinkedHashSet:基于LinkedHashMap 實現TreeSet: 紅黑樹(自平衡的排序二叉樹)? Map 接口 key-value鍵值對?

? HashMap:JDK8之前HashMap由數組+鏈表組成的,數組是HashMap的主體,鏈表則是主要為了解決哈希沖突而存在的(“拉鏈法”解決沖突)。JDK8以后在解決哈希沖突時有了較大的變化,當鏈表長度大于閾值(默認為8)時,將鏈表轉化為紅黑樹,以減少搜索時間LinkedHashMap: 繼承自 HashMap,所以它的底層仍然是基于拉鏈式散列結構即由數組和鏈表或紅黑樹組成。另外,LinkedHashMap 在上面結構的基礎上,增加了一條雙向鏈表,使得上面的結構可以保持鍵值對的插入順序。同時通過對鏈表進行相應的操作,實現了訪問順序相關邏輯TreeMap:紅黑樹(自平衡的排序二叉樹)Hashtable: 數組+鏈表組成的,數組是 HashMap 的主體,鏈表則是主要為了解決哈希沖突而存在的??

并發與并行?

?

?并發:是指同一個時間段內多個任務同時都在執行,并且都沒有執行結束。并發任務強調在一個時間段內同時執行,而一個時間段由多個單位時間累積而成,所以說并發的多個任務在單位時間內不一定同時在執行 。 并行:是說在單位時間內多個任務同時在執行 。?

?

在多線程編程實踐中,線程的個數往往多于CPU的個數,所以一般都稱多線程并發編程而不是多線程并行編程。?

sleep和wait的區別?

sleep() 方法是線程類(Thread)的靜態方法,讓調用線程進入睡眠狀態,讓出執行機會給其他線程,

等到休眠時間結束后,線程進入就緒狀態和其他線程一起競爭cpu的執行時間。

因為sleep() 是static靜態的方法,他不能改變對象的機鎖,當一個synchronized塊中調用了sleep() 方法,

線程雖然進入休眠,但是對象的機鎖沒有被釋放,其他線程依然無法訪問這個對象。

wait()是Object類的方法,當一個線程執行到wait方法時,它就進入到一個和該對象相關的等待池,同時釋放對象的機鎖,

使得其他線程能夠訪問,可以通過notify,notifyAll方法來喚醒等待的線程

?

線程的生命周期?

新建

就緒

運行

阻塞

死亡

?

什么是線程、進程?

進程:是程序的一次執行,是具有一定獨立功能的程序關于某個數據集合上的一次運動活動,是操作系統資源分配和調度的最小單位。

線程:是操作系統能夠進行運算調度的最小單位,它包含在進程之中,是進程中實際運作單位。

兩者關系:進程是指程序執行時的一個實例,線程是進程的一個實體;

? ? 線程必定也只數據一個進程,而進程可以擁有多個線程而且至少擁有一個線程。

?

線程和進程的區別?

進程:

? ? - 擁有獨立的堆棧空間和數據段,系統開銷大

? ? - 由于進程之間是獨立的特點 使得進程的安全性比較高 有獨立的地址空間 一個進程崩潰 不影響其他進程

? ? - 進程的通信機制相對復雜 譬如管道、信號、消息隊列、套接字等

線程:

? ? - 線程擁有獨立的堆棧空間 但是共享數據段,它們彼此之間使用相同的地址空間,比進程開銷小

? ? - 線程是一個進程中不同的執行路徑 一個線程的死亡就等于整個進程的死亡。

? ? - 通信相對方便

?

圖解進程線程?

?

?圖解進程線程 從上圖可以看出:一個進程中可以有多個線程,多個線程共享進程的堆和方法區 (JDK1.8 之后的元空間)資源,但是每個線程有自己的程序計數器、虛擬機棧 和 本地方法棧。?

?

什么是線程安全、為什么提出線程安全、如何實現??

當一個線程在操作共享資源時,未執行完畢的情況下,其他線程參與進來,導致共享資源出現安全問題。

方式一:同步代碼塊

synchronized(同步監視器){

? ? 同步的代碼

}

同步監視器:可以由任何對象來承擔,針對于實現的方式可以用對象,也可以采用this關鍵字。對于繼承方式 只能采用靜態的對象。

方式二:同步方法

確保當中一個線程執行此方法時 其他線程等待知道當前線程執行完。

?

Thread 類中的start() 和 run() 方法有什么區別??

start()方法被用來啟動新創建的線程,而且start()內部調用了run()方法,這和直接調用run()方法的效果不一樣。

當你調用run()方法的時候,只會是在原來的線程中調用,沒有新的線程啟動;start()方法才會啟動新線程。

?

Java中notify 和 notifyAll有什么區別??

notify()方法不能喚醒某個具體的線程,所以只有一個線程在等待的時候它才有用武之地。

而notifyAll()喚醒所有線程并允許他們爭奪鎖確保了至少有一個線程能繼續運行。

?

泛型是什么?為什么使用??

簡單的說一種標簽,不確定的類型,用戶使用的時候確定類型,是JDK1.5出現的新特性,用于解決安全問題,是一種類型安全機制。

好處:

? ? -將運行時期會可能出現的異常轉移到編譯期

? ? -提高了安全性

? ? -避免了強制類型轉換的麻煩。

?

概述反射和序列化?

反射:

JAVA反射機制是在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性和方法;

對于任意一個對象,都能夠調用它的任意方法和屬性;這種動態獲取信息以及動態調用對象方法的功能稱為java語言的反射機制。

序列化:

序列化可以理解成把對象轉換為容易傳輸的格式的過程。

?

序列化的好處?

方便保存對象。因為對象不能保存,所以可以序列化,將其保存。

?

使用JDBC的過程?

1.加載JDBC驅動程序

? ? Class.forName("com.mysql.jdbc.Driver") ;

2.提供JDBC連接的URL

? ? jdbc:mysql: //localhost:3306/test?useUnicode=true&characterEncoding=utf-8 ;

3.創建數據庫的連接

? ? Connection con = DriverManager.getConnection(url , username , password )

4.實現PreparedStatement

? ? PreparedStatement pstmt = con.prepareStatement(sql) ;

5.執行SQL語句

6.處理結果?

? ? -返回結果集

? ? -影響的記錄數

7.關閉JDBC對象

?

數據庫篇?

數據庫的基本操作?

可以參考我的另一篇博客 常用的SQL語句及進階?

MySql底層采用什么數據結構來存儲數據??

B-樹、平衡樹

?

分頁所用的關鍵字?

MySQL:?

MySQL中使用 LIMIT

select * from students limit 0, 10? ?從第0條開始查,一共查詢10條記錄。

?

Oracle:?

Oracle中使用 ROWNUM

select * from students where rownum >= 1 and rownum <= 10?

?

SQL實現數據表的復制?

select into from 和 insert into select都是用來復制表.

兩者的主要區別為:?

select into from 要求目標表不存在,因為在插入時會自動創建

insert into select from 要求目標表存在

兩者的語法:

SELECT vale1, value2 into Table2 from Table1

Insert into Table2(field1,field2,...) select value1,value2,... from Table1

?

什么是事務?

事務(Transaction)是并發控制的基本單位。所謂事務,它是一個操作序列,這些操作要么都執行,要么都不執行,它是一個不可分割的工作單位。

?

事務的四大特性?

-原子性(Atomicity):事務作為一個整體被執行,包含在其中的對數據庫的操作要么全部被執行,要么都不執行

-一致性(Consistency):事務應確保數據庫的狀態從一個一致狀態轉變為另一個一致狀態。

-隔離性(Isolation):多個事務并發執行時,一個事務的執行不應影響其他事務的執行

-持久性(Durability):已被提交的事務對數據庫的修改應該永久保存在數據庫中

?

什么是存儲過程?

存儲過程可以說是一個記錄集吧,也可以認為是一個方法,它是由一些SQL語句組成的代碼塊,

這些SQL語句代碼像一個方法一樣實現一些功能(對單表或多表的增刪改查),然后再給這個代碼塊取一個名字,在用到這個功能的時候調用他就行了。

?

簡單介紹一下觸發器?

觸發器是由 INSERT、UPDATE 和 DELETE 等事件來觸發某種特定操作。

滿足觸發器的觸發條件時,數據庫系統就會執行觸發器中定義的程序語句。這樣做可以保證某些操作之間的一致性。

例如,在執行完一句插入語句時,觸發查詢所有,保證信息的完整性。

?

什么是E-R圖?

?ER圖中包含了實體(即數據對象)、關系和屬性3種基本成分;

?通常用矩形框代表實體,用連接相關實體的菱形框表示關系,用橢圓形或圓角矩形表示實體(或關系)的屬性,并用直線把實體(或關系)與其屬性連接起來。

?三種聯系:

? ? ?- 1:1 例如,一個部門有一個經理,而每個經理只在一個部門任職,則部門與經理的聯系是一對一的

? ? ?- 1:N 例如,某校教師與課程之間存在一對多的聯系“教”,即每位教師可以教多門課程,但是每門課程只能由一位教師來教。

? ? ?- M:N 例如,學生與課程間的聯系(“學”)是多對多的,即一個學生可以學多門課程,而每門課程可以有多個學生來學。

?

什么是外連接、內連接??

內連接:根據連接條件只保留兩個表中有對應數據的記錄;

外連接:當一個表中記錄在另一個表中沒有對應記錄時,會生成一條與 NULL 值對應的記錄

?

什么是索引?有什么用??

索引相當于目錄,可以更加方便的用于查詢。

?

范式?

第一范式?

? 第一范式(1NF)要求數據庫表的每一列都是不可分割的基本數據項,同一列中不能有多個值。若某一列有多個值,可以將該列單獨拆分成一個實體,新實體和原實體間是一對多的關系。在任何一個關系數據庫中,第一范式(1NF)是對關系模式的基本要求,不滿足第一范式(1NF)的數據庫就不是關系數據庫。 第二范式?

? 滿足第二范式(2NF)必須先滿足第一范式(1NF)第二范式要求實體中沒一行的所有非主屬性都必須完全依賴于主鍵;即:非主屬性必須完全依賴于主鍵。完全依賴:主鍵可能由多個屬性構成,完全依賴要求不允許存在非主屬性依賴于主鍵中的某一部分屬性。若存在哪個非主屬性依賴于主鍵中的一部分屬性,那么要將發生部分依賴的這一組屬性單獨新建一個實體,并且在舊實體中用外鍵與新實體關聯,并且新實體與舊實體間是一對多的關系。 第三范式?

? 滿足第三范式(3NF)必須先滿足第二范式。第三范式要求:實體中的屬性不能是其他實體中的非主屬性。因為這樣會出現冗余。即:屬性不依賴于其他非主屬性。如果一個實體中出現其他實體的非主屬性,可以將這兩個實體用外鍵關聯,而不是將另一張表的非主屬性直接寫在當前表中。??

數據結構篇?

快速排序?

冒泡排序?

?

?假設有一些數字: 10, 20 ,90 , 5, 18, 33, 46, 66 冒泡排序的規則:依次拿取每個數字進行比較,小的放前面,大的放后面(看需求)。?

?

第一次: 10 , 20? ? ? ? ? ? ? ? ? ? 拿前兩個數字進行比較 小的放前面。

第二次: 10 , 20 , 90? ? ? ? ? ? ? ? 拿 90 依次與 10 ,20 比較,大就放后面。

第三次: 5, 10 , 20 , 90? ? ? ? ?5 比 10小 所以放最前。

第四次: 5, 10 , 18 , 20 , 90

...

最終結果: 5 , 10 , 18 , 20, 33 ,46 ,66 ,90

?

//冒泡排序? ? 外層循環 N-1 內層循環 N-1-i

for(int i=0; i<arr.length-1;i++){

? ? for(int j=0; j<arr.length-1-i;j++){

? ? ? ? if(arr[j] > arr[j+1]){

? ? ? ? ? ? int t=arg[j];

? ? ? ? ? ? arr[j]=arr[j+1];

? ? ? ? ? ? arr[j+1]=t;

? ? ? ? }

? ? }

}

?

二分查找?

二叉樹的遍歷?

有三種遍歷方式:前序、中序、后序

具體遍歷過程可以參考博客

?

什么是紅黑樹?

計算機網絡篇?

TCP和UDP?

TCP:面向有連接的,三次握手機制;傳輸的數據大小無限制;安全可靠協議;效率低,區分客戶端和服務器

UDP:是面向無連接的,發送的數據是通過數據報包的形式,不超過64k;不安全(可靠)協議,效率高;不區分客戶端和服務器。(叫發送端和接收端)

?

三次握手 四次揮手?

三次握手??

? ? 1.進行三次握手,首先向服務器發送一個syn報文,其中syn=1,seq number=1022(隨機);

? ? 2.服務器接收到syn報文,根據syn=1判斷客戶端請求建立連接,并返回一個syn報文,為第一次握手,

其中ack number=1023(客戶端seq number+1),seq number=2032(隨機),syn=1,ack=1;

? ? 3.客戶端根據服務器的syn報文,確認其ack number是否與上一次發送的seq number+1相等,且ack=1,確認正確,則回應一個ack報文,為第二次握手,

即ack number=2033(服務器seq number+1),ack=1;

? ? 4.服務器根據接收到的ack報文,確認ack number是否與上一次發送的seq number+1相等,并且ack=1,確認正確,則建立連接,

進入Established狀態,為第三次握手。

?

網絡的七層協議?

?

OSI中的層功能TCP/IP協議族應用層文件傳輸、電子郵件、文件服務等TFTP、HTTP、FTP、SMTP、DNS、Telnet、SNMP表示層數據格式化、代碼轉換、數據加密無會話層解除或建立與別的結點的聯系無傳輸層提供端對端的接口TCP、UDP網絡層為數據包選擇路由IP、ICMP、OSPF、BGP、ARP、RARP數據鏈路層傳輸有地址的幀以及錯誤檢測功能SLIP、CSLIP、PPP、MTU、ARP、RARP物理層以二進制數據形式在屋里媒體上傳輸數據ISO2110、IEEE802、IEEE802.2

當在瀏覽器輸入欄按下回車會發生什么?

1.回車鍵按下后,瀏覽器會對輸入的地址數據進行解析

2.進行DNS(域名服務器 UDP的)遞歸查詢

3.使用套接字進行數據訪問

4.建立TCP連接(三次握手)

5.瀏覽器處理數據

?

郵件服務器之間傳送郵件通常使用什么協議,它們分別使用哪個端口,簡述其功能。?

?郵件服務器之間常用郵件協議 SMTP POP3 IMAP。

> SMTP:的一個重要特點是它能夠在傳送中接力傳送郵件,即郵件可以通過不同網絡上的主機接力式傳送。工作在兩種情況下:一是電子郵件從客戶機傳輸到服務器;二是從某一個服務器傳輸到另一個服務器。SMTP是個請求/響應協議,它監聽25號端口,用于接收用戶的Mail請求,并與遠端Mail服務器建立SMTP連接。

> POP3:仍采用Client/Server工作模式,當客戶機需要服務時,客戶端的軟件將與POP3服務器建立TCP連接,此后要經過POP3協議的三種工作狀態,首先是認證過程,確認客戶機提供的用戶名和密碼,在認證通過后便轉入處理狀態,在此狀態下用戶可收取自己的郵件或做郵件的刪除,在完成響應的操作后客戶機便發出quit命令,此后便進入更新狀態,將做刪除標記的郵件從服務器端刪除掉,到此為止整個POP過程完成。

> IMAP:主要提供的是通過Internet獲取信息的一種協議。IMAP像POP那樣提供了方便的郵件下載服務,讓用戶能進行離線閱讀,但IMAP能完成的卻遠遠不只這些。IMAP提供的摘要瀏覽功能可以讓你在閱讀完所有的郵件到達時間、主題、發件人、大小等信息后才作出是否下載的決定

?

web篇?

表單中get和post區別?

get:

? ? 1.不能傳遞敏感數據

? ? 2.不能傳遞大量的數據,每次只能傳遞1024B

? ? 3.不能上傳附件

post:

? ? 1.相對安全

? ? 2.可以上傳海量數據

? ? 3.可以上傳附件

?

什么是Ajax,好處是什么?

通過在后臺與服務器進行少量數據交換,AJAX 可以使網頁實現異步更新。

這意味著可以在不重新加載整個網頁的情況下,對網頁的某部分進行更新。

?

九大內置對象?

PrintWriter out? ? ?輸出服務器響應的輸出流對象;

Object page? JSP頁面本身;

PageContext pageContext? 通過該對象可以獲取其他對象;

HttpServletRequest request? 封裝客戶端的請求,其中包含來自GET或POST請求的參數;

HttpServletResponse response? 封裝服務器對客戶端的響應;

HttpSession session? 封裝用戶會話的對象;

ServletContext application? 封裝服務器運行環境的對象--全局變量;

Exception exception? 封裝頁面拋出異常的對象;

ServletConfig config? Web應用的配置對象。

?

轉發(Forward)和重定向(Redirect)的區別?

?

?轉發是服務器行為,重定向是客戶端行為。 轉發(Forward) 通過RequestDispatcher對象的forward(HttpServletRequest request,HttpServletResponse response)方法實現的。RequestDispatcher可以通過HttpServletRequest 的getRequestDispatcher()方法獲得。例如下面的代碼就是跳轉到success.jsp頁面。?

? request.getRequestDispatcher("success.jsp").forward(request, response);

?

?重定向(Redirect) 是利用服務器返回的狀態碼來實現的。客戶端瀏覽器請求服務器的時候,服務器會返回一個狀態碼。服務器通過 HttpServletResponse 的 setStatus(int status) 方法設置狀態碼。如果服務器返回301或者302,則瀏覽器會到新的網址重新請求該資源。?

?

從地址欄顯示來說

forward是服務器請求資源,服務器直接訪問目標地址的URL,把URL的響應內容讀取過來,然后把這些內容再發給瀏覽器.瀏覽器不知道服務器發送的內容從哪里來的,所以地址欄還是原來的地址.?

redirect是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址.所以地址欄顯示的是新的URL.

?

從數據共享來說

forward:轉發頁面和轉發到的頁面可以共享request里面的數據.

redirect:不能共享數據.

?

從運用地方來說

forward:一般用于用戶登陸的時候,根據角色轉發到相應的模塊.?

redirect:一般用于用戶注銷登陸時返回主頁面和跳轉到其它的網站等

?

從效率來說

forward:高.?

redirect:低.

?

cookie和session?

?

?cookie:瀏覽器A訪問服務器的時候,服務器就給這個A一個id,瀏覽器會將這個id 保存到本地 cookie中;由web服務器在http響應頭中附帶給瀏覽器;一旦瀏覽器保存了cookie 每次訪問web服務器時,都會在http請求頭中將cookie 回傳給web服務器 session:采用的是在服務端保持Http狀態信息的方案(保存在服務端);當服務端需要為某個客戶端的請求創建一個session時,服務器首先檢查這個客戶端的請求里是否包含了一個session標識(即JSESSIONID);在服務端的session對象的內容,可以訪問到,這些變量信息是存在服務器的中的。?

?

你了解監聽器嗎??

?

?監聽器是一個專門用于對其他對象身上發生的事件或狀態改變進行監聽和相應處理的對象,當被監視的對象發生情況時,立即采取相應的行動。 java的事件監聽機制 1、事件監聽涉及到三個組件:事件源、事件對象、事件監聽器。 2、當事件源上發生某一個動作時,它會調用事件監聽器的一個方法,并在調用該方法時把事件對象傳遞進去, 開發人員在監聽器中通過事件對象,就可以拿到事件源,從而對事件源進行操作。?

?

框架篇(這里只涉及SSM)?

什么是ORM?

?

?對象關系映射(Object Relational Mapping)模式是一種為了解決面向對象與關系數據庫存在的互不匹配的技術 ; 簡單的說, ORM是通過使用描述對象和數據庫之間的映射的元數據,將程序中的對象自動持久化到關系數據庫中?

?

MyBatis默認用什么做日志管理?

?

?log4j?

?

MyBatis動態代理?

?

?開發者只需聲明mapper接口(類似dao接口),無需聲明實現類 而由mybatis框架通過創建接口的代理對象,就和實現類類似。需要按照一定的規范來開發接口和映射文件。 動態代理規則: 1.映射文件mapper.xml的名稱要和接口的名稱一致 2.映射文件的namespace是 接口的全路徑 3.映射文件的sql statement的id是 接口的方法名稱 4.映射文件的輸入參數類型(parameterType)和接口方法的參數類型一致 5.映射文件的輸出結果類型(resultType)和接口方法的返回類型一致?

?

MyBatis輸入輸出類型?

?

?輸入輸出支持類型:? 輸入:parameterType 支持的類型: java簡單類型 、 hashmap 、 自定義pojo對象 輸出1:resultType: 支持的類型: java簡單類型 、 hashmap 、 自定義pojo對象 注意:封裝到自定義pojo對象的要求:對象的屬性名和數據庫表的字段名一一對應的!!! 輸出2: resultMap: 1.可以解決對象屬性名和數據庫字段名不一致的問題 2.還可以做一對一 和 一對多?

?

resultMap的使用?

<resultMap type="order" id="orderResultMap">

? ? ? ? <!-- 定義主鍵 ,非常重要。如果是多個字段,則定義多個id -->

? ? ? ? <!-- property:主鍵在pojo中的屬性名 -->

? ? ? ? <!-- column:主鍵在數據庫中的列名 -->

? ? ? ? <id property="id" column="id" />

?

? ? ? ? <!-- 定義普通屬性 -->

? ? ? ? <result property="userId" column="user_id" />

? ? ? ? <result property="number" column="number" />

</resultMap>

?

?

為什么使用Druid(德魯伊),不使用c3p0?

史上最好的data source,有一個監控面板

? ? - 可以監控每條sql語句的使用次數、運行效率,

? ? - url的監控,請求時間、并發等,

? ? - 也能監控session

?

簡單介紹Spring?

?

?spring是一個輕量級的控制反轉和面向切面編程的容器框架 1.輕量級:spring大小和開銷都是輕量級的 2.非入侵:一般在程序開發中,不需要引入spring包 3.控制反轉(IOC):把對象的創建權力交給容器 4.面向切面編程(AOP):基于代理的 可以將核心業務和系統服務分開?

?

Spring的兩大特性?

1.控制反轉 : 把對象的創建、銷毀的權利交給容器框架,由容器來管理對象的生命周期;

? ? ioc不是新的技術 只是一種思想或理念。可以實現松耦合!

? ? ioc包括依賴注入(DI,核心) 和 依賴查找;

? ? ? ? DI:依賴注入 就是在spring實例化對象的時候,由容器來設置這些對象的屬性值。

2.面向切面編程:采用橫向抽取機制,把分散在各個方法中的相同的代碼抽取出來,

? ? 然后再編譯期或者是運行時再把這些代碼應用到所需要執行的地方。

? ? 通知(Advice):aop在切點上執行的增強處理。

? ? 切點(Pointcut):就是帶有通知的連接點。

? ? 切面(Aspect):通常上就是一個類,里面定義了 通知和切點。

? ? AOP=通知+切點

?

什么是MVC?

MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫.

Model(模型)是應用程序中用于處理應用程序數據邏輯的部分。通常模型對象負責在數據庫中存取數據。

View(視圖)是應用程序中處理數據顯示的部分。通常視圖是依據模型數據創建的。

Controller(控制器)是應用程序中處理用戶交互的部分。通常控制器負責從視圖讀取數據,控制用戶輸入,并向模型發送數據。

?

SpringMVC的工作流程?

?

?

?客戶端發送url到 前端控制器 DispatcherServlet 前端控制器把請求url發送給 處理器映射器 HandlerMapping 處理器映射器 根據請求的url來查找 處理器 Handler,并返回給 前端控制器 前端控制器 調用 處理器適配器 去執行 處理器,傳遞需要執行的處理器信息 處理器適配器 執行 處理器 處理器 返回一個 ModelAndView 對象 適配器返回ModelAndView給 前端控制器 前端控制器 調用 視圖解析器 去解析視圖 視圖解析器 把邏輯視圖解析為真正的視圖并且返回給 前端控制器 前端控制器 對視圖進行數據渲染、構建DOM樹 把頁面返回給客戶端。?

?

聲明?

以上試題均為原題或改編,來自各個企業校招筆試面試(不包含BATJ等大廠),僅供參考學習,落筆不易,多多點贊。?

不知不覺 也已經寫了一年了,再次感謝大家的閱讀 THANKS XD??

歡迎大家關注我的公眾號【再喝最后一杯珍珠奶茶】,了解更多資訊。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/540381.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/540381.shtml
英文地址,請注明出處:http://en.pswp.cn/news/540381.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java/javascript 時間操作工具類

一、java 時間操作工具類 import org.springframework.util.StringUtils;import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.List;/*** 時間操作工具類** author zwq**/ public …

[轉載] java語言程序設計-基礎篇

參考鏈接&#xff1a; Java中的決策制定(if&#xff0c;if-else&#xff0c;switch&#xff0c;break&#xff0c;continue&#xff0c;jump) 第1章&#xff0c;計算機、程序和Java概述 包括【每個java初學者都應該搞懂的問題】 http://blog.csdn.net/haobo920/article/detai…

Exchange server 2013(十四)WSUS部署及組策略設置(2)

我們繼續上一節未完的博客&#xff0c;繼續我們的WSUS設置。[上一章節標題&#xff1a;Exchange server 2013(十四)WSUS部署及組策略設置(1) 網址&#xff1a;http://1183839.blog.51cto.com/blog/1173839/1182366] 首先單擊自動審批,來修改審批規則,也就是說當wsus偵測到新的更…

[轉載] Python中的switch語句的替代品

參考鏈接&#xff1a; Java中的switch語句 Python 中沒有 switch語句。 一般用if-else 語句可以替代switch語句&#xff0c;今天學習了使用字典的映射來代替switch語句。Mark一下 day 8; def get_sunday(): return sunday def get_monday(): return monday def get_tues…

“□” 表情無法在 Android 設備顯示? 快試試 EmojiCompact 表情兼容庫

有了支持庫 v26 下的 Compact 庫&#xff0c;基于 API 19 及更高版本開發的應用就能獲得 emoji 的向下兼容&#xff0c;再也不會看到顯示失敗的 “豆腐塊” 啦。如要使用 EmojiCompact&#xff0c;需要在應用啟動時通過下載或者打包字體來初始化庫。通過集成小插件&#xff0c;…

[轉載] jstl獲取Parameter參數及switch使用

參考鏈接&#xff1a; Java中的字符串使用switch <% taglib uri"/WEB-INF/tld/c.tld" prefix"c" %> param 獲取 Parameter參數 <c:choose> <c:when test"${empty param.name}"> Please enter your name. …

syslinux 制作多系統啟動U盤

syslinux 制作多系統啟動U盤標簽&#xff1a;u盤使用 syslinux 制作多系統啟動U盤 syslinux 能加載虛擬內存盤&#xff0c;能引導各種鏡像文件&#xff0c;適合用于制作多系統啟動U盤&#xff0c; 但是我按照網上說的步驟&#xff0c;總是不能制作成功&#xff1a; 1. 格式化…

[轉載] JAVA基礎----java中E,T,?的區別?

batch_size 1 layout "NHWC" target tvm.target.Target("cuda") dtype "float32" log_file "%s-%s-B%d.json" % (network, layout, batch_size)

用MATLAB結合四種方法搜尋羅馬尼亞度假問題

選修了cs的AI課&#xff0c;開始有點不適應&#xff0c;只能用matlab硬著頭皮上了&#xff0c;不過matlab代碼全網僅此一份&#xff0c;倒有點小自豪。 一、練習題目 分別用寬度優先、深度優先、貪婪算法和 A*算法求解“羅馬利亞度假問題”。具體地圖我這里不給出了&#xff0c…

[轉載] Java中文與ASCII碼的轉換

參考鏈接&#xff1a; 擴展Java中的原始轉換 今天在研究Java中編碼的時候&#xff0c;看到了Java中ascii碼的強大。寫了一個CoderUtils.java&#xff0c;以后會擴展它。 package com.xingxd.study.test; import java.io.File; import java.io.FileWriter; import java.io.I…

[轉]Paul Adams:為社交設計

為社交設計 Strong, Weak, and Temporary Ties by Paul Adams on 2010/04/09 PS&#xff1a;作者Paul Adams Facebook全球品牌體驗總監 電話和手機聚集十億用戶用了15年的時間&#xff0c;而Facebook只用了9個月。我們看到越來越多的人開始用在線社交網絡&#xff0c;這種網絡好…

[轉載] Java中日期格式轉換

參考鏈接&#xff1a; Java中的類型轉換和示例 Code: /** * 字符串轉換為java.util.Date<br> * 支持格式為 yyyy.MM.dd G at hh:mm:ss z 如 2002-1-1 AD at 22:10:59 PSD<br> * yy/MM/dd HH:mm:ss 如 2002/1/1 17:55:00<br> * yy/MM/dd HH:…

Android Framework中的Application Framework層介紹

Android的四層架構相比大家都很清楚&#xff0c;老生常談的說一下分別為&#xff1a; Linux2.6內核層&#xff0c;核心庫層&#xff0c;應用框架層&#xff0c;應用層。我今天重點介紹一下應用框架層Framework。 Framework層為我們開發應用程序提供了非常多的API&#xff0c;我…

[轉載] java注釋

參考鏈接&#xff1a; Java注釋 Java注釋 java中注釋有三種&#xff1a;這些都稱之為java doc標記&#xff0c;含義如下&#xff1a; java中注釋有三種&#xff1a; 單行注釋 //注釋的內容&#xff0c;多行注釋 /…注釋的內容…/&#xff0c;文檔注釋 /**…注釋的內容….*/。…

環路是怎樣形成的實例

環路是怎樣形成的一個由十多臺交換機組成的小型局域網&#xff0c;交換機大多是Cisco的中低端系列產品。某日突然出現問題&#xff1a;局域網內的主機之間相互ping時&#xff0c;都出現延時長、丟包現象&#xff0c;網絡應用奇慢無比。 觀察交換機設備&#xff0c;指示燈看不出…

[轉載] 《Python語言程序設計》課程筆記

參考鏈接&#xff1a; Python程式設計語言 文章目錄 第一部分 Python快速入門第1周 Python基本語法元素第2周 Python基本圖形繪制 第二部分 Python基礎語法第3周 基本數據類型3.1 數字類型及操作3.3 字符串類型及操作3.4 模塊2: time庫的使用 第4周 程序的控制結構4.1 程序的分…

ORACLE中創建如何創建表,并設置結構和默認值

使用select語句查看EMP表&#xff0c;根據COMM排序 默認情況下&#xff0c;空值會自動排列在尾部。 利用nulls last排序時將空值置底 利用nulls first排序時將空值置頂 例 創建一張出版社表 使用語句 create table 表名&#xff08;列名1 類型&#xff0c;列名2 類型&#xff0…

[轉載] C++靈魂所在之---多態的前世與今生

參考鏈接&#xff1a; Java是否支持goto 開頭先送大家一句話吧&#xff1a; 眾所周知&#xff0c;在20世紀80年代早期&#xff0c;C在貝爾實驗室誕生了&#xff0c;這是一門面向對象的語言&#xff0c;但它又不是全新的面向對象的語言&#xff0c;它是在傳統的語言…

Code Sinppet

如果你在使用VS 2005,如果你不能使用它的Code Snippet功能&#xff0c;如果你在實現抽象類override 方法時彈出&#xff1a;Code Snippet titled [Method Stub - Body] failed to load. Verify that refactoring snippets are recognized in the Code Snippet Manager and that…

暴風TV請來中國人工智能first lady馮雁教授任首席科學家

今日下午&#xff0c;暴風AI無屏電視發布會現場&#xff0c;暴風TV宣布邀請號稱“中國人工智能first lady”、于香港科技大學任教的馮雁教授&#xff0c;擔任暴風TV人工智能首席科學顧問。 馮雁教授于現場表示&#xff0c;選擇暴風TV合作的重要原因&#xff0c;一方面在于其個人…