1. 程式人生 > >前端技術面試題

前端技術面試題

---

title : 前端技術(HTML、CSS、JS、JQuery等)

前端技術

在js中怎麼樣驗證數字?

通過正則表示式/*$/
reg.test(需要判斷的字串)

js中如何給string這個型別加方法?

通過原型鏈新增方法:

String.prototype.go = function(){//在string大物件上新增方法go
    console.log(this)
}
'sss'.go();//呼叫自定義的方法
談談js的定時器?

js給我們提供了兩種定時器
setTimeout(1000,function(){}) 每秒呼叫一次,但是在頁面重新整理的時候會出現第一秒不會呼叫的情況
setIntever(1000,function(){})間隔一秒呼叫一次,直呼叫一次,但是沒有空白期,所以我們在秒殺倒計時的時候是通過該定時器遞迴呼叫顯示時間

請寫幾個javascript 裡面的物件和物件的函式使用
javascript物件
- String物件
length:使用長度屬性來計算字串的長度。
var txt="Hello world!"
document.write(txt.length)

indexOf() 方法:使用 indexOf() 來定位字串中某一個指定的字元首次出現的位置。
var str="Hello world!"
document.write(str.indexOf("Hello") + "<br />")

match():使用 match() 來查詢字串中特定的字元,並且如果找到的話,則返回這個字元。
var str="Hello world!"
document.write(str.match("world") + "<br />")

-  Date物件
Date():返回當日的日期和時間
document.write(Date());
setFullYear:使用 setFullYear() 設定具體的日期。
var d = new Date()
d.setFullYear(1992,10,3)

- Array物件
for..in:使用 for...in 宣告來迴圈輸出陣列中的元素。
for (x in mycars)
{
document.write(mycars[x] + "<br />")
}
請寫幾個html元素以及相應控制效果
<h1>...<h6>:控制標籤字型大小
<p> :段落標籤,獨佔一行
<img>:展示圖片標籤
無序標籤:
 <ul>
    <li></li>
    <li></li>
 </ul>
 有序標籤:
 <ol>
    <li></li>
    <li></li>
 </ol>
 <a href=""></a>:超連線標籤
ajax的實現機制

XMLHttpRequest傳送非同步請求先open,再send;判斷響應狀態碼200和狀態4然後設定回撥函式
由於每個瀏覽器之間存在差異所以我們對不同的瀏覽器需要建立不同的XMLHttpRequest物件

Ajax的原理簡單來說通過XmlHttpRequest物件來向伺服器發非同步請求,從伺服器獲得資料,然後用javascript來操作DOM而更新頁面。這其中最關鍵的一步就是從伺服器獲得請求資料。要清楚這個過程和原理,我們必須對 XMLHttpRequest有所瞭解。XMLHttpRequest是ajax的核心機制

由於各瀏覽器之間存在差異,所以建立一個XMLHttpRequest物件可能需要不同的方法。這個差異主要體現在IE和其它瀏覽器之間。下面是一個比較標準的建立XMLHttpRequest物件的方法。

示例程式碼:
function CreateXmlHttp() {

    //非IE瀏覽器建立XmlHttpRequest物件
    if (window.XmlHttpRequest) {
        xmlhttp = new XmlHttpRequest();
    }

    //IE瀏覽器建立XmlHttpRequest物件
    if (window.ActiveXObject) {
        try {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch (e) {
            try {
                xmlhttp = new ActiveXObject("msxml2.XMLHTTP");
            }
            catch (ex) { }
        }
    }
}

function Ustbwuyi() {

    var data = document.getElementById("username").value;
    CreateXmlHttp();
    if (!xmlhttp) {
        alert("建立xmlhttp物件異常!");
        return false;
    }

    xmlhttp.open("POST", url, false);

    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4) {
            document.getElementById("user1").innerHTML = "資料正在載入...";
            if (xmlhttp.status == 200) {
                document.write(xmlhttp.responseText);
            }
        }
    }
    xmlhttp.send();
}

函式首先檢查XMLHttpRequest的整體狀態並且保證它已經完成(readyStatus=4),即資料已經發送完畢。然後根據伺服器的設定詢問請求狀態,如果一切已經就緒(status=200),那麼就執行下面需要的操作。

對於XmlHttpRequest的兩個方法,open和send,其中open方法指定了:

a、向伺服器提交資料的型別,即post還是get。

b、請求的url地址和傳遞的引數。

c、傳輸方式,false為同步,true為非同步。預設為true。

Send方法用來發送請求。
知道了XMLHttpRequest的工作流程,我們可以看出,XMLHttpRequest是完全用來向伺服器發出一個請求的,它的作用也侷限於此,但它的作用是整個ajax實現的關鍵,因為ajax無非是兩個過程,發出請求和響應請求。並且它完全是一種客戶端的技術。而XMLHttpRequest正是處理了伺服器端和客戶端通訊的問題所以才會如此的重要。

如何在b.html頁面獲取a.html元素值

通過靜態或動態包含

javascript中如何判斷資料型別,返回值分別是什麼?

typeof()進行判斷
返回值有
String,Number,undefine,Object,boolean,function

用jq或者js獲取複選框中選中的值

jq可以通過選擇器$("input[type=“checkbox”]).val()
js可以通過document.getElementById(“複選框的id”).value;

jQuery中find方法和children方法的使用和區別

find和children都可以用來查詢一個元素的後代元素,children只能找子代元素,find可以找所有後代元素

J2EE基礎

Servlet屬於執行緒安全的嗎?

不是,Tomcat底層機制是多執行緒的
當Tomcat接收到Client的HTTP請求時,Tomcat從執行緒池中取出一個執行緒,之後找到該請求對應的Servlet物件並進行初始化,之後呼叫service()方法。要注意的是每一個Servlet物件再Tomcat容器中只有一個例項物件,即是單例模式。如果多個HTTP請求請求的是同一個Servlet,那麼著兩個HTTP請求對應的執行緒將併發呼叫Servlet的service()方法。所以此時如果Servlet中定義了例項變數或靜態變數,那麼可能會發生執行緒安全問題(因為所有的執行緒都可能使用這些變數)。

在JSP中,只有一行程式碼:<%=A+B %>,執行結果是()

報錯 因為A和B沒有定義

jsp和servlet有什麼關係?

JSP本質上就是Servlet,JSP是實現了Servlet的介面的,但是jsp更優秀與動態資料的載入,載入JSP頁面的時候實質上是載入了一個JSPServlet的類物件,通過out物件進行頁面的渲染和其他內建作用域物件進行資料的填充,而Servlet更優秀於邏輯控制

iso8859-1如何轉換成utf-8?

通過String的構造器
new String(“需要轉換的字串”.getBytes(“iso-8859-1”),“utf-8”);

你如何防止直接敲URL進行訪問頁面

通過Filter,進行判斷是否登陸,如果使用者登陸了才放行,否則回到登陸頁面

談談Jsp的9大內建物件

四大作用域物件
pageContext:
取得任何範圍的引數,通過它可以獲取 JSP頁面的out、request、reponse、session、application 等物件。pageContext物件的建立和初始化都是由容器來完成的,在JSP頁面中可以直接使用 pageContext物件。

request:
request 物件是 javax.servlet.httpServletRequest型別的物件。 該物件代表了客戶端的請求資訊,主要用於接受通過HTTP協議傳送到伺服器的資料。(包括頭資訊、系統資訊、請求方式以及請求引數等)。request物件的作用域為一次請求。

session:
由伺服器自動建立的與使用者請求相關的物件。伺服器為每個使用者都生成一個session物件,用於儲存該使用者的資訊,跟蹤使用者的操作狀態。session物件內部使用Map類來儲存資料,因此儲存資料的格式為 “Key/value”。 session物件的value可以使複雜的物件型別,而不僅僅侷限於字串型別。

application:
application 物件可將資訊儲存在伺服器中,直到伺服器關閉,否則application物件中儲存的資訊會在整個應用中都有效。與session物件相比,application物件生命週期更長,類似於系統的“全域性變數”。

page
page 物件代表JSP本身,只有在JSP頁面內才是合法的。 page隱含物件本質上包含當前 Servlet介面引用的變數,類似於Java程式設計中的 this 指標。

out
out 物件用於在Web瀏覽器內輸出資訊,並且管理應用伺服器上的輸出緩衝區。在使用 out 物件輸出資料時,可以對資料緩衝區進行操作,及時清除緩衝區中的殘餘資料,為其他的輸出讓出緩衝空間。待資料輸出完畢後,要及時關閉輸出流。
exception:
exception 物件的作用是顯示異常資訊,只有在包含 isErrorPage=“true” 的頁面中才可以被使用,在一般的JSP頁面中使用該物件將無法編譯JSP檔案。excepation物件和Java的所有物件一樣,都具有系統提供的繼承結構。exception 物件幾乎定義了所有異常情況。在Java程式中,可以使用try/catch關鍵字來處理異常情況; 如果在JSP頁面中出現沒有捕獲到的異常,就會生成 exception 物件,並把 exception 物件傳送到在page指令中設定的錯誤頁面中,然後在錯誤頁面中處理相應的 exception 物件。
config:
config 物件的主要作用是取得伺服器的配置資訊。通過 pageConext物件的 getServletConfig() 方法可以獲取一個config物件。當一個Servlet 初始化時,容器把某些資訊通過 config物件傳遞給這個 Servlet。 開發者可以在web.xml 檔案中為應用程式環境中的Servlet程式和JSP頁面提供初始化引數。

response:
對客戶端的響應,主要是將JSP容器處理過的物件傳回到客戶端。response物件也具有作用域,它只在JSP頁面內有效。

談談jsp的4個數據傳輸域以及他們的區別

JSP四個域物件:pageContext,servletContext,request,sesssion
主要區別是:
1.生命週期不同,pageContext當前頁面有效,request一次請求範圍內有效,session本次會話範圍內,servletContext作用於整個應用範圍

談談jsp跟Servlet的區別

JSP與Servlet主要有兩方面的不同:
編譯:JSP修改後可以立即看到結果,不需要編譯;而Servelt缺需要編譯。
轉換:JSP是動態網頁開發技術,是執行在伺服器端的指令碼語言,而Servlet是web伺服器端程式設計技術。所以JSP執行時就是轉換為Servlet,也就是java程式來執行。

談談Servlet的生命週期

1.在容器初始化的時候,載入web.xml檔案時候對配置好的servlet進行載入
2.初始化,呼叫init()方法初始化
3.請求處理階段,service()接受請求呼叫doGet()和doPost()方法
4.銷燬,呼叫destory()方法進行銷燬,一般是在伺服器關閉的時候銷燬
當伺服器不再需要Servlet例項或重新裝入時,會呼叫destroy方法,使用這個方法,Servlet可以釋放掉所有在init方法申請的資源。一個Servlet例項一旦終止,就不允許再次被呼叫,只能等待被解除安裝。

談談轉發和重定向的區別

1.位置不同,轉發是伺服器行為,重定向是瀏覽器行為
2.轉發可以攜帶請求資料,重定向不可以
3.轉發是一次請求,重定向是兩次請求
4.轉發的位址列不會改變,重定向的位址列會改變
5.轉發只能站內,重定向還將有訪問其他站點

談談MVC設計模式的理解

M-Model 業務處理層,接受C層呼叫,獲得引數,進行業務處理,呼叫Dao層訪問資料,響應資料回C層
V-View 接受客戶請求,然後呼叫C層,最後接受C層響應渲染檢視響應使用者
C-Controller 邏輯控制層,接受V層請求,呼叫M層然後獲得響應,根據響應進行判斷後返回頁面到V層

談談cookie跟session的區別

cookie是存放在客戶端,session是存放在服務端的
session本身是基於cookie的會話機制
session資料大小遠大於cookie,cookie只能是字串型別,並且每個站點大概是20個總個數不能超過300個,總大小大概4k左右
cookie資料是不安全的,session資料相對來說安全
cookie的生命週期一般來說遠長於session,session作用一次會話,cookie如果沒有設定過期時間可以是永遠存在磁碟上的

談談你用過的設計模式??

簡單工廠模式,執行緒池…
代理設計模式,spring的AOP,事務管理,日誌記錄等
單例設計模式,Spring的Bean管理,簡單購物車的實現
裝飾者設計模式,request過濾器解決get請求亂碼問題,MyBatis的分頁物件
介面卡設計模式,springboot的日誌記錄,使用了介面卡模式,SpringMvc底層的HanlderAdapter

如何在XML檔案中輸出<,>,#這些特殊字元

CDATA強制不解析字串

JSP頁面中如何處理編碼問題

1、eclipse配置中的Text file encoding(檔案編碼),這是給java編譯器用的,如果想在jsp頁面中儲存中文字元,必須將其設定為UTF-8格式。
2.jsp頁面中contentType指定了伺服器響應給客戶端的http內容型別,預設為”text/html“,charset指定了伺服器傳送給客戶端時的內容編碼。可以把charset設定成utf-8
3.pageEncoding是jsp檔案本身的編碼,可以設定成utf-8

jsp中有幾種註釋方式,分別是什麼?

三種支援JAVA註釋,HTML註釋,還有JSP註釋
//和<!1-- -->和<% %>

jsp:forward與Window.location.href的區別?

在jsp:forward標籤對中使用jsp:param標籤可以進行傳值。
jsp:forward動作指令之後的程式碼是不會執行的。
使用動作指令跳轉的頁面,瀏覽器的地址還是跳轉之前的頁面地址。
window.location.href通過請求地址攜帶引數,且頁面地址會改變。

在jsp頁面怎麼獲取url裡面的請求引數?

通過EL表示式,或者小指令碼<% request.getParamter(“key”) %>

在tomcat專案根目錄下有個檔案images/logo.png,在web環境下怎麼獲取該檔案路徑?

通過類構造器
this.getClass().getClassLoad("/image/logo.png").getPath();
通過ServletAPI

String path = getServletContext().getRealPath("/images/logo.png");
File file = new File(path);

資料庫

資料表的設計原則

三大正規化,
1.第一正規化,所有欄位不可再分,即原子性
2.第二正規化,主鍵約束,每列都需要與主見相關
3.第三正規化,外來鍵約束,直接相關
在實際開發中最為常見的設計正規化有三個:

  • 第一正規化是最基本的正規化。如果資料庫表中的所有欄位值都是不可分解的原子值,就說明該資料庫表滿足了第一正規化;
  • 第二正規化在第一正規化的基礎之上更進一層。第二正規化需要確保資料庫表中的每一列都和主鍵相關,而不能只與主鍵的某一部分相關(主要針對聯合主鍵而言)。也就是說在一個數據庫表中,一個表中只能儲存一種資料,不可以把多種資料儲存在同一張資料庫表中;
  • 第三正規化需要確保資料表中的每一列資料都和主鍵直接相關,而不能間接相關。
原生的jdbc怎麼連線資料庫?

四大金剛
ClassForname(驅動類);載入驅動類
getConnection();獲得連線物件
Statement獲得執行物件
ResultSet()獲得結果集
close()關閉所有資源ResultSet->Statement->Connection

關係資料庫中連線池的機制是什麼?

通過連線池獲得Connection物件然後操作資料庫,使用後放回連線池

J2EE伺服器啟動時會建立一定數量的池連線,並一直維持不少於此數目的池連線。客戶端程式需要連線時,池驅動程式會返回一個未使用的池連線並將其表記為忙。如果當前沒有空閒連線,池驅動程式就新建一定數量的連線,新建連線的數量有配置引數決定。當使用的池連線呼叫完成後,池驅動程式將此連線表記為空閒,其他呼叫就可以使用這個連線。
實現方式,返回的Connection是原始Connection的代理,代理Connection的close方法不是真正關連線,而是把它代理的Connection物件還回到連線池中。

關係資料庫中的主鍵和外來鍵有什麼關係?

一般來說,表的主鍵就是關聯表的外來鍵

定義主鍵和外來鍵主要是為了維護關係資料庫的完整性。

  1. 主鍵是能確定一條記錄的唯一標識,比如,一條使用者記錄包括身份證號,姓名等。身份證號是唯一能確定你這個人的,其他都可能有重複,所以,身份證號可以是主鍵。
  2. 外來鍵用於與另一張表的關聯。是能確定另一張表記錄的欄位,用於保持資料的一致性,一表的外來鍵是另一張表的主鍵或唯一欄位。
關係資料庫中第一正規化、第二正規化和第三正規化是什麼?

三大正規化,
1.第一正規化,所有欄位不可再分,即原子性
2.第二正規化,主鍵約束,每列都需要與主見相關
3.第三正規化,主鍵和列直接相關

Oracle 埠號?MySQL埠號?

Oracle:1521
mysql:3306

test1表中有ABC三列,用SQL語句實現:當A列大於B列時,選擇A列否則選擇B列,當B列大於C列時選擇B列 否則選擇C列。
select
	(case A>B then A else B end) as t1,
	(case B>c then B esle C end) as t2
from test1
給定基本資訊表baseInfo包括:學號、姓名、性別、年齡、籍貫(主鍵是學號),分數表scoreInfo包括:學號,科目,分數(主鍵是學號-科目)
查詢所有語文成績大於85分的學生的學號、姓名、性別、年齡、語文分數、數學分數
查詢所有語文成績大於85分、性別為女的學生的學號、姓名、各科分數
Long型別怎麼設計的表結構?Boolean型別怎麼設計的表結構?
請介紹下觸發器的原理

觸發器利用了監聽器的原理,一旦監聽的操作執行就執行該觸發器

觸發器是由INSERT、UPDATE和DELETE等事件來觸發某種特定操作。滿足觸發器的觸發條件時,資料庫系統就會執行觸發器中定義的程式語句。這樣做可以保證某些操作之間的一致性。例如,當學生表中增加了一個學生的資訊時,學生的總數就必須同時改變。可以在這裡建立一個觸發器,每次增加一個學生的記錄,就執行一次計算學生總數的操作。這樣就可以保證每次增加學生的記錄後,學生總數是與記錄數是一致的。觸發器觸發的執行語句可能只有一個,也可能有多個。

儲存過程裡的語句是一條條按順序執行的嗎?

儲存過程裡的語句並不是一條條按編寫順序執行。
資料庫在編譯儲存過程時會有一個優化的過程,在不改變儲存過程最後結果的前提下,可能會對儲存過程裡的語句有一個順序的調整。

如何寫分組過濾的SQL語句,比如統計一個班級裡面,按省份分組,統計每個省份的學員平均年齡或統計一個班級裡面,按省份分組,要求只列出平均年齡大於20歲的省份資訊
如何解決SQL注入的問題

通過預編譯PrepareStatement物件,使用佔位符而不是直接拼接的方式傳參,隔離了引數和SQL語句之間的影響

請說說內連線和外連線的寫法及區別

內連線查詢匹配的資料,左外連線以左邊表的資料為準,即左邊表的資料全部查出,右邊表無匹配資料則以空代替。右外連線則相反。

inner join 表名 on
left/right outer join 表名 on

向一張表插入100萬條資料,該如何做?

分批次插入,使用batchExecute

談談對資料庫事務的理解?事務的邊界應該放在哪一層?為什麼?

事務是邏輯控制的最小單位,表示一個邏輯命令控制,其中可能有多次操作,這些操作要麼全部成功要麼全部失敗,應該放在service層,因為service就是用來操作Dao層也就是我們的資料,而事務就是為了保證資料一致性而產生的;

談談事務的特性ACID

A:原子性,操作要麼全部成功要麼全部失敗
C:一致性,事務操作前後保證資料完整性
I:隔離性,事務和事務之間是透明的互不影響的
D:永續性,一旦事務提交那麼資料將持久化到硬碟上

談談事務的隔離級別

事務的隔離級別是用來解決一些事務中的安全隱患的
1.讀
髒讀:讀未提交,讀到了另外一個事務還沒有提交的資料
不可重複讀:讀已提交,讀到了另外一個事務已經提交的資料
幻讀/虛讀:讀到另一個事務修改的資料
2.寫
丟失更新,使用樂觀鎖解決
隔離級別
Read uncommitted 讀未提交
Read committed 讀已提交
Repeatable Read 可重複讀
Serializable 序列化

儲存過程是什麼?

一組SQL,可以有邏輯判斷和控制流語句,是存放在資料庫中的,一處編譯處處執行,避免了我們service層的複雜業務邏輯與資料庫頻繁互動帶來的程式效能下降;但是可移植性很差,因為不同的資料庫的儲存過程的寫法不相同

儲存過程是SQL 語句和可選控制流語句的預編譯集合,以一個名稱儲存並作為一個單元處理。儲存過程儲存在資料庫內,可由應用程式通過一個呼叫執行,而且允許使用者宣告變數、有條件執行以及其它強大的程式設計功能。儲存過程在建立時即在伺服器上進行編譯,所以執行起來比單個SQL語句快、

用過哪些資料庫連線池,為什麼要用資料庫連線池?

連線池主要減少資料庫連線的建立時間和連線銷燬時間
DBCP,C3P0,DHCP,Druid