.Net 面试
1. js 的閉包概念
閉包的定義:當一個內部函數被其外部函數之外的變量引用時,就形成了一個閉包。
例子:
function A(){function B(){console.log('Hello Closure!');}return B; } var C = A(); C();// Hello Closure!分析一下:
- 定義普通函數 A
- 在 A 中定義普通函數 B
- 在 A 中返回 B
- 執行 A,并把 A 的返回結果賦值給變量 C
- 執行 C?
用途:
先了解一下 Javascript 中的 GC 機制:
在 Javascript 中,如果一個對象不再被引用,那么這個對象就會被 GC 回收,否則這個對象一直會保存在內存中。
在上述例子中,B 定義在 A 中,因此 B 依賴于 A ,而外部變量 C 又引用了 B , 所以A間接的被 C 引用。
也就是說,A 不會被 GC 回收,會一直保存在內存中。
原文鏈接:https://www.cnblogs.com/onepixel/p/5062456.html
2.Jquery 如何實現動態事件綁定?
語法:
$(selector).on(event,childSelector,data,function,map)event:必需。規定要從被選元素移除的一個或多個事件或命名空間。
childSelector:可選。規定只能添加到指定的子元素上的事件處理程序(且不是選擇器本身,比如已廢棄的 delegate() 方法)。
data:可選。規定傳遞到函數的額外數據。
function:可選。規定當事件發生時運行的函數。
注意:使用 on() 方法添加的事件處理程序適用于當前及未來的元素(比如由腳本創建的新元素)。
$('.class').on("click",function(){……});相當于$('.class').bind("click",function(){……});3.了解SQL注入?怎么樣避免?
所謂SQL注入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。具體來說,它是利用現有應用程序,將(惡意的)SQL命令注入到后臺數據庫引擎執行的能力,它可以通過在Web表單中輸入(惡意)SQL語句得到一個存在安全漏洞的網站上的數據庫,而不是按照設計者意圖去執行SQL語句。
如何防止SQL注入
歸納一下,主要有以下幾點:
1.永遠不要信任用戶的輸入。對用戶的輸入進行校驗,可以通過正則表達式,或限制長度;對單引號和雙引號進行轉換等。
2.永遠不要使用動態拼裝sql,可以使用參數化的sql或者直接使用存儲過程進行數據查詢存取。
3.永遠不要使用管理員權限的數據庫連接,為每個應用使用單獨的權限有限的數據庫連接。
4.不要把機密信息直接存放,加密或者hash掉密碼和敏感的信息。
5.應用的異常信息應該給出盡可能少的提示,最好使用自定義的錯誤信息對原始錯誤信息進行包裝
可參考此文:https://www.cnblogs.com/sdya/p/4568548.html
4.redis 和cache 的區別?
1、 Redis和cache都是將數據存放在內存中,都是內存數據庫。不過cache還可用于緩存其他東西,例如圖片、視頻等等。?
2、Redis不僅僅支持簡單的k/v類型的數據,同時還提供list,set,hash等數據結構的存儲。?
3、虛擬內存-Redis當物理內存用完時,可以將一些很久沒用到的value 交換到磁盤?
4、過期策略–cache在set時就指定,例如set key1 0 0 8,即永不過期。Redis可以通過例如業務配置進行設定
5、分布式–設定cache集群,利用magent做一主多從;redis可以做一主多從。都可以一主一從?
6、存儲數據安全–cache掛掉后,數據沒了;redis可以定期保存到磁盤(持久化)?
7、災難恢復–cache掛掉后,數據不可恢復; redis數據丟失后可以通過aof恢復?
8、Redis支持數據的備份,即master-slave模式的數據備份。
5.C#中,const 和 readonly 的區別?
1.常量必須在聲明時就被初始化,指定了值后就不能修改了.只讀字段可以在聲明時被初始化,也可以在構造函數中指定初始化的值,在構造以后值就不能修改.
2.常量是靜態的,而只讀字段可以是靜態和動態的
3.Const可以用在字段和局部變量,readonly只可以修飾字段
6.怎么建索引,注意點在哪?好處?
創建索引的好處
①通過創建索引,可以在查詢的過程中,提高系統的性能
②通過創建唯一性索引,可以保證數據庫表中每一行數據的唯一性
③在使用分組和排序子句進行數據檢索時,可以減少查詢中分組和排序的時間
創建索引的壞處
①創建索引和維護索引要耗費時間,而且時間隨著數據量的增加而增大
②索引需要占用物理空間,如果要建立聚簇索引,所需要的空間會更大
③在對表中的數據進行增加刪除和修改時需要耗費較多的時間,因為索引也要動態地維護
應該在哪些列上創建索引呢
①經常需要搜索的列上
②作為主鍵的列上
③經常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度
④經常需要根據范圍進行搜索的列上
⑤經常需要排序的列上
⑥經常使用在where子句上面的列上
不應該在哪些列上創建索引
①查詢中很少用到的列
②對于那些具有很少數據值的列.比如人事表的性別列,bit數據類型的列
③對于那些定義為text,image的列.因為這些列的數據量相當大
④當對修改性能的要求遠遠大于搜索性能時.因為當增加索引時,會提高搜索性能,但是會降低修改性能
詳細請看此文:https://blog.csdn.net/qq_36071795/article/details/83956068
7.如何避免事務死鎖?
先介紹死鎖的四個必要條件(只要破壞了其中任何一個條件,死鎖就不可能發生):
解決方法:
1 使用事務時,盡量縮短事務的邏輯處理過程,及早提交或回滾事務; (細化處理邏輯,執行一段邏輯后便回滾或者提交,然后再執行其它邏輯,直到事物執行完畢提交)
2 設置死鎖超時參數為合理范圍,如:3分鐘-10分種;超過時間,自動放棄本次操作,避免進程懸掛;
3 優化程序,檢查并避免死鎖現象出現;
4 .對所有的腳本和SP都要仔細測試,在正是版本之前。
5 所有的SP都要有錯誤處理(通過@error)
6 一般不要修改SQL SERVER事務的默認級別。不推薦強行加鎖
8. session的實現原理
A、什么是Session?
Session字面含義就是會話。由于HTTP是無狀態協議,為了保持瀏覽器與服務器之間的聯系,才有了Session。Session就是用于在服務器端保存用戶狀態的協議。通常用來保存用戶的登錄狀態。
B、Session是如何實現的?
Session內容保存在服務器端的,通常是保存在內存中,當然也可以保存在文件、數據庫等等。客戶端跟服務器端通過SessionId來關聯, SessionId通常以Cookie的形式存儲在客戶端。每次HTTP請求, SessionId都會隨著Cookie被傳遞到服務器端,這行就可以通過SessionId取到對應的信息,來判斷這個請求來自于哪個客戶端/用戶。
使用建議/經驗
1、建議&經驗
- Session中保存的數據的大小要考慮到存儲上線不論是內存還是數據庫
- Session中不要存儲不可恢復的內容
- 依賴Session的關鍵業務一定要確保客戶端開啟了Cookie
- 注意Session的過期時間
- 在負載均衡的情況下,由于存在Web服務器內存中的Session無法共享,通常需要重寫Session的實現。
2、常見的Session丟失的問題
- Session內容的丟失都是有原因的,通常都是由于Web服務器的重啟造成的,比如IIS、Tomcat的重啟
?
轉載于:https://www.cnblogs.com/GuDuYing/p/11031479.html
總結
- 上一篇: 约战荆门麻将最新版本下载 荆门麻将双开红
- 下一篇: java 工厂模式 计算器_java设计