前端技術面試題

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

前端技術

在js中怎麼樣驗證數字?

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

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

通過原型鏈添加方法:

談談js的定時器?

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

請寫幾個javascript 裏面的對象和對象的函數使用

請寫幾個html元素以及相應控制效果

ajax的實現機制

XMLHttpRequest發送異步請求先open,再send;判斷響應狀態碼200和狀態4然後設置回調函數
由於每個瀏覽器之間存在差異所以我們對不同的瀏覽器需要創建不同的XMLHttpRequest對象

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

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

函數首先檢查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
 

數據庫

數據表的設計原則

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

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

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

關係數據庫中連接池的機制是什麼?

通過連接池獲得Connection對象然後操作數據庫,使用後放回連接池

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

關係數據庫中的主鍵和外鍵有什麼關係?

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

定義主鍵和外鍵主要是爲了維護關係數據庫的完整性。

主鍵是能確定一條記錄的唯一標識,比如,一條用戶記錄包括身份證號,姓名等。身份證號是唯一能確定你這個人的,其他都可能有重複,所以,身份證號可以是主鍵。
外鍵用於與另一張表的關聯。是能確定另一張表記錄的字段,用於保持數據的一致性,一表的外鍵是另一張表的主鍵或唯一字段。
關係數據庫中第一範式、第二範式和第三範式是什麼?

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

Oracle 端口號?MySQL端口號?

Oracle:1521
mysql:3306

test1表中有ABC三列,用SQL語句實現:當A列大於B列時,選擇A列否則選擇B列,當B列大於C列時選擇B列 否則選擇C列。
 

給定基本信息表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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章