服務器文檔下載zip格式 SQL Server SQL分頁查詢 C#過濾html標籤 EF 延時加載與死鎖 在JS方法中返回多個值的三種方法(轉載) IEnumerable,IColl...

服務器文檔下載zip格式

 

     恰好此次項目中遇到了這個東西,就來弄一下,挺簡單的,可是前臺調用的時候弄錯了,浪費了大半天的時間,本人也是菜鳥一枚。開始吧。(MVC的)javascript

   

@using Rattan.Core.Utility;
@{
 string ButtonScript = string.Empty;
}
@if (Rattan.Basic.Globals.GetIsAuth(ViewBag.AuthValues, "QuickExport"))
{
 ButtonScript = @"
   {
       position: 0,
       id: 'btnQuickExport',
       text: '導出稿件附件',
       disabled: false,
       icon: 'pwd.gif',
       handler: function ()
       {
        QuickExport();
       }
      }";
}
<script type="text/javascript" language="javascript">
  helper.onBeforePageLoad = function (params) {css

  }
  helper.onAfterPageLoad = function () {
    m_grid.insertToolBar(
    [
      @Html.Raw(ButtonScript)
    ]);
  }
</script>html

<script type="text/javascript" language="javascript">
 function QuickExport() {                        
 // var rows = m_grid.getSelections();       ---這個是不打包,一個個跳出來的,沒卵用,當時應付的
 // $.each(rows, function (i, row) {
 //  var url = row.filelist + "?" + Math.random();
 //  window.setTimeout(function () {
 //   window.open(url, "_blank");
 //  }, 1000);
 // });
  var rows = m_grid.getSelections();
  var Draft_Id_Array = [];
  $.each(rows, function (i, row) {
   Draft_Id_Array.push(row.Draft_Id);
  });
  if (!Draft_Id_Array.length) {
   alert("至少選中一行!");
   return;
  }
  var url = "/BasicInfo/Meeting_Draft/ZipFileByCode";
  var postParams = {
   Draft_Ids: Draft_Id_Array.join(',')
  };
  window.open(url + '?Draft_Ids=' + Draft_Id_Array.join(','))
 }前端

</script> vue

 /// <summary>
  /// 壓縮打包文件
  /// </summary>
  public ActionResult ZipFileByCode(string Draft_Ids)//string Draft_Id
  {
   MemoryStream ms = new MemoryStream();
   byte[] buffer = null;java

   using (ZipFile file = ZipFile.Create(ms))  //壓縮包建立到內存
   {
    file.BeginUpdate();
    file.NameTransform = new IndexController();//經過這個名稱格式化器,能夠將裏面的文件名進行一些處理。默認狀況下,會自動根據文件的路徑在zip中建立有關的文件夾。python

    string where = "Draft_Id in (" + Draft_Ids + ")";
    var draftInfo = Meeting_DraftRepository.Instance.GetMany(where).ToList();
    foreach (var draftInfoList in draftInfo)
    {
     if (string.IsNullOrWhiteSpace(draftInfoList.filelist) || draftInfoList.filelist.IndexOf('/') < 0)
     {jquery

      continue;
     }
     var positonIndex = draftInfoList.filelist.LastIndexOf('/');
    string fileName = draftInfoList.filelist.Substring(positonIndex, draftInfoList.filelist.Length - positonIndex);//客戶端保存的文件名
     file.Add(Server.MapPath(draftInfoList.filelist));
    }
    file.CommitUpdate();
    buffer = new byte[ms.Length];
    ms.Position = 0;
    ms.Read(buffer, 0, buffer.Length);ios

   }git

   //將中文轉換預防出現亂碼
   string excelName = "稿件附件".ToString();

   excelName = HttpUtility.UrlEncode(excelName, System.Text.Encoding.UTF8);

   DateTime dt = DateTime.Now;
   Response.AddHeader("content-disposition", "attachment;filename=" + excelName + DateTime.Now.ToString("yyyyMMdd")+ ".zip");
   Response.BinaryWrite(buffer);
   Response.Flush();
   Response.End();
   return View();
  }
 }

 

SQL Server SQL分頁查詢

 

SQL Server SQL分頁查詢的幾種方式

目錄

0.    序言    

1.    TOP…NOT IN…    

2.    ROW_NUMBER()    

3.    OFFSET…FETCH    

4.    執行計劃    

5.    補充   

 

 

 

  1. 0.序言

總結一下SQL Server種經常使用的幾種分頁查詢:

    本示例中用的時已有的表,建表不規範,Name做爲主鍵,建議實際使用中專門設置主鍵而且WHERE條件中儘量使用主鍵。

參數說明:

@pageSize:分頁查詢每頁N條數據時每頁指望的數據量N

    @offset:分頁查詢第I頁每頁N條數據時,第I頁以前的N*(I-1)條數據

舉個栗子:假如咱們要查詢第3頁的數據,每頁10條數據,則 @pageSize爲10,@offset爲20。

 

  1.TOP…NOT IN…

基本原理:查詢 @pageSize 條數據,先使用一個子查詢查詢出符合查詢條件的 @offset條數據的主鍵,再使用TOP @pageSize查詢@pageSize條數據,而且再WHERE從句中使用 NOT IN 關鍵詞來對數據進行篩選。

 

 

  2.ROW_NUMBER()

基本原理:在SQL Server2005以後加入,可使用 ROW_NUMBER()函數爲查詢出來的記錄生成一個行號,須要指定一個ORDER BY 子句肯定排序方式,排序方式不一樣,行號也可能不一樣。詳細說明:ROW_NUMBER()

本文只涉及OVER從句中跟隨ORDER BY子句,partition by 從句不在本文討論範圍內,partition by 和OVER詳細說明戳這裏

這裏使用了兩個ROW_NUMBER()函數的例子,這兩個計算總行數的方式是不同的,本文結尾處會對比一個兩種方式的IO操做以說明哪一種方式更適合

 

 

3.OFFSET…FETCH

 

OFFSET是SQL Server 2012中新增的語法,能夠單獨使用,也可與FETCH NEXT一塊兒使用,單獨使用OFFSET時是查詢獲取@offset以後全部的數據,以下圖所示

但咱們想要的是分頁查詢,那就須要和FETCH NEXT聯合使用,OFFSET後跟@offset參數,FETCH NEXT 後跟 @pageSize參數

   4.執行計劃

上面四種查詢方式的執行計劃以下:

 

  5.補充

 

OFFSET…FETCH補充:

關於參數,推薦用法:始終使用ROWS,始終使用NEXT

-- OFFSET {@offset} ROWS FETCH NEXT {@pagesize} ROWS ONLY

/*

*使用 OFFSET-FETCH 中的限制:

    *** ORDER BY 是使用 OFFSET 和 FETCH 子句所必需的。

    *** OFFSET 子句必須與 FETCH 一塊兒使用。永遠不能使用 ORDER BY … FETCH。

    *** TOP 不能在同一個查詢表達式中與 OFFSET 和 FETCH 一塊兒使用。

    *** OFFSET/FETCH 行計數表達式能夠是將返回整數值的任何算術、常量或參數表達式。該行計數表達式不支持標量子查詢。

*/

更多OFFSET信息參考這裏

對比一下ROW_NUMBER()兩種計算數據總數方式的IO消耗:

第一個是使用MAX(RowNum)來計算總數的,第二種是使用子查詢的方式來計算總數。

 

 

C#過濾html標籤

 

C#過濾html標籤

    在項目中遇到這樣一個需求,須要將一段html轉換爲通常文本返回,萬能的正則表達式來了。

    正則表達式來拯救你,代碼以下:

複製代碼
1 public static string Html2Text(string htmlStr)
 2 
 3 {
 4 
 5     if (String.IsNullOrEmpty(htmlStr))
 6 
 7     {
 8 
 9         return "";
10 
11     }
12 
13     string regEx_style = "<style[^>]*?>[\\s\\S]*?<\\/style>"; //定義style的正則表達式 
14 
15     string regEx_script = "<script[^>]*?>[\\s\\S]*?<\\/script>"; //定義script的正則表達式   
16 
17     string regEx_html = "<[^>]+>"; //定義HTML標籤的正則表達式   
18 
19     htmlStr = Regex.Replace(htmlStr, regEx_style, "");//刪除css
20 
21     htmlStr = Regex.Replace(htmlStr, regEx_script, "");//刪除js
22 
23     htmlStr = Regex.Replace(htmlStr, regEx_html, "");//刪除html標記
24 
25     htmlStr = Regex.Replace(htmlStr, "\\s*|\t|\r|\n", "");//去除tab、空格、空行
26 
27     htmlStr = htmlStr.Replace(" ", "");
28 
29     htmlStr = htmlStr.Replace(""", "");//去除異常的引號" " "
30 
31     htmlStr = htmlStr.Replace(""", "");
32 
33     return htmlStr.Trim();
34 
35 }
複製代碼

 

SQL Server 分頁編號的另外一種方式

 

SQL Server 分頁編號的另外一種方式

 

今天看書講T-SQL,看到了UNBOUNDED PRECEDING,就想比對下ROW_NUMBER()的運行速度。

sql及相關的結果以下,數據庫中的數據有5W+。

ROW_NUMBER():

複製代碼
SET STATISTICS TIME ON

SELECT
    ROW_NUMBER() OVER(ORDER BY Id DESC) rn,Id
FROM
    dbo.T_MyCourse
複製代碼

運行結果

UNBOUNDED PRECEDING

複製代碼
SET STATISTICS TIME ON

SELECT
    SUM(1) OVER(ORDER BY Id DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) rn,Id
FROM
    dbo.T_MyCourse
複製代碼

運行結果

經過運行以後,看到結果,使用微軟官方提供的方法進行編號排序,速度明顯的提升。

不過我使用上述方法進行分頁獲取數據的時候結果又有點不同。

分頁獲取數據:

ROW_NUMBER() 分頁獲取數據:

複製代碼
SET STATISTICS TIME ON

SELECT
    *
FROM
    (
    SELECT
        ROW_NUMBER() OVER(ORDER BY Id DESC) rn,Id
    FROM
        dbo.T_MyCourse
    )a
WHERE
    a.rn BETWEEN 55 AND 444
複製代碼

 

 執行sql命令:DBCC DROPCLEANBUFFERS ,清除數據庫緩存後的結果

 

UNBOUNDED分頁獲取數據:

複製代碼
SET STATISTICS TIME ON

SELECT
    *
FROM
    (
    SELECT
        SUM(1) OVER(ORDER BY Id DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) rn,Id
    FROM
        dbo.T_MyCourse
    )a
WHERE
    a.rn BETWEEN 22 AND 444
複製代碼

 UNBOUNDED這個方式下執行了DBCC DROPCLEANBUFFERS 清除緩存的sql也沒有用,執行時間沒有變化。

 經過上述結果,看到ROW_NUMBER()獲取分頁的數據明顯更快,我猜想是微軟對ROW_NUMBER()這個方法作了優化,多是有緩存,讀取的緩存中的數據而後進行分頁。

若是有知道的網友,請評論告訴我,讓我學習學習。

 

EF 延時加載與死鎖

 

 

 

第一種

複製代碼
#region 第一種延遲加載 用到的時候就會去查詢數據。
            //用到的時候就會去查詢數據。

            //IQueryable<UserInfo> temp = from u in dbContext.UserInfo 
            //                            //where  u.UName.Contains("o") 
            //                            //&& u.UName.StartsWith("D")
            //                            select u;
          
       //測試一
            //foreach (var userInfo in temp)
            //{
            //    Console.WriteLine(userInfo.ID + "  " +userInfo.UName);
            //}

            //foreach (var userInfo in temp)
            //{
            //    Console.WriteLine(userInfo.ID + "  " + userInfo.UName);
            //}
            //數據庫監視發現:查詢了兩次。
            //由於IQueryable每次用到時都會從新查詢,因此查詢到的數據不可做爲緩存。
       //測試二: linq的重用,在temp的基礎上繼續查詢得temp2 //var temp2 = from u in temp // where u.ID > 0 // select u; //foreach (var userInfo in temp2) //{ // Console.WriteLine(userInfo.ID + " " + userInfo.UName); //} //數據庫監視發現 temp和temp2一共只查詢了一次,兩次linq查詢只生成了一條sql語句。 至關於原生ADO時期的sql腳本拼接。 #endregion
複製代碼

 

 

第二種

複製代碼
#region 第二種延遲加載
//IQueryable<UserInfo> temp = from u in dbContext.UserInfo 
            //                            //where  u.UName.Contains("o") 
            //                            //&& u.UName.StartsWith("D")
            //                            select u;
     //單表屢次查詢
//foreach (var userInfo in temp)  交互1次
//{ // foreach (var orderInfo in userInfo.OrderInfo) 交互 100次 // { // Console.WriteLine(userInfo.UName+ " " +orderInfo.ID + " " + orderInfo.Content); // } //}
       //多表一次鏈接查詢 Include("OrderInfo")
//IQueryable<UserInfo> temp = from u in dbContext.UserInfo.Include("OrderInfo")
            //                            //where  u.UName.Contains("o") 
            //                            //&& u.UName.StartsWith("D")
            //                            select u;
//情景1:當數據量小的時候(通常不會再頁面展現全部數據,而是分頁,數據量不會特別大,那麼必須減小鏈接數據庫的次數)
//若採用單表查詢,若查詢100個用戶數據,共需與數據庫交互101=1+100,交互的時間就比一次"鏈接查詢"時間還要長。
//因此數據量較少時直接使用鏈接查詢比價高效。
//情景2:當數據量特別大時。例如: 用戶表跟訂單表數據都是10000 0000條    
            //若採用一次鏈接查詢:根據笛卡爾積,數據庫過濾數據實際條數是10000 0000 * 10000 0000
//極可能會使數據庫崩潰。 //若採單表屢次查詢,內存中重組數據。能夠很好的解決以上問題。
//問題來了: //併發訪問 屢次查詢,若出現併發訪問怎麼辦? //理解併發: //在操做系統中,併發是指一個時間段中有幾個程序都處於已啓動運行到運行完畢之間,且這幾個程序都是在同一個處理機上運行,但任一個時刻點上只有一個程序在處理機上運行。 //在關係數據庫中,容許多個用戶同時訪問和更改共享數據的進程。SQL Server 使用鎖定以容許多個用戶同時訪問和更改共享數據而彼此之間不發生衝突。 //在這裏訪問因爲鎖的存在,併發問題轉換成了計算能力問題,計算能力能夠經過添加服務器來說解決。 //3死鎖問題: //理解死鎖 //死鎖是指兩個或兩個以上的進程在執行過程當中,因爲競爭資源或者因爲彼此通訊而形成的一種阻塞的現象,若無外力做用,它們都將沒法推動下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱爲死鎖進程。 //出現狀況 // 錶鏈接查詢出現: 進程X佔用A表,X想鏈接B表,必須等B表釋放; 但同時y又佔用了B表,y想有鏈接了A表,在等A表釋放。 結果x、y都在等待,二A、B表同時被佔用着。 // 鏈接的表越多,死鎖問題越突出。 //解決方案: 臨時表 //爲何能解決?由於此時鎖定的是臨時表,而原始表處於釋放狀態。 //臨時表有兩種類型:本地表和全局表。在與首次建立或引用表時相同的 SQL Server 實例鏈接期間,本地臨時表只對於建立者是可見的。當用戶與 SQL Server 實例斷開鏈接後,將刪除本地臨時表。全局臨時表在建立後對任何用戶和任何鏈接都是可見的,當引用該表的全部用戶都與 SQL Server 實例斷開鏈接後,將刪除全局臨時表。 //詳情可百度臨時表用法 #endregion
複製代碼

 

怎麼看生成的sql語句的?

1)數據庫裏

詳情可百度:  SQL Server Profiler (事件追蹤)

2)斷點調試時
查詢數據後,快速監視以下。查詢數據前是沒有這些內容的。

 



 

 致博客園

1)傻逼的150字數限制!

2)範圍居然不包括代碼!

3)添加成功修改失敗,彷佛對修改頗有意見!

 

在JS方法中返回多個值的三種方法(轉載)

 

來源:https://www.cnblogs.com/gxsyj/p/6004574.html

在使用JS編程中,有時須要在一個方法返回兩個個或兩個以上的數據,用下面的幾種方法均可以實現:

1 使用數組的方式,以下:

複製代碼
複製代碼
<html>
<head>
    <title>JS函數返回多個值--oec2003</title>
</head>
<body>
    <input type="button" onclick="getNames()" value="test" />
    <script type="text/javascript">
function getData()
{
    var names=new Array("oec2003","oec2004");
    return names;
}
function getNames()
{
    var names=getData();
    alert(getData()[0]); //返回oec2003
}
</script>
</body>
</html>
複製代碼
複製代碼

2 將數據封裝到Json中返回,以下:

複製代碼
複製代碼
<html>
<head>
<title>JS函數返回多個值--oec2003</title>
</head>
<body>
<input type="button" onclick="getInfo()" value="test"/>
<script type="text/javascript">
function getData()
{
    var info={"name":"oec2003","age":"25"};
    return info;
}
function getInfo()
{
    var info=getData();
    var name=info["name"];
    var age=info["age"];
    alert("姓名:"+name+" 年齡:"+age);
}
</script>
</body>
</html>
複製代碼
複製代碼

3 這是最簡單的一種方法,看下面代碼:

複製代碼
複製代碼
<html>
<head>
<title>JS函數返回多個值--oec2003</title>
</head>
<body>
<input type="button" onclick="getInfo()" value="test"/>
<script type="text/javascript">
    function getData()
    {
        return ["oec2003", 25]
    }
    function getInfo()
    {
        var info = getData();
        alert("姓名:" + info[0] + "年齡:" + info[1]);
    }
</script>
</body>
</html>




IEnumerable,ICollection,IList接口問題

 

最近有一個疑問:IList已經繼承了ICollection<T>,而ICollection<T>繼承了 IEnumerable<T>, IEnumerable,那爲何IList還要繼承 IEnumerable<T>, IEnumerable?

因而我本身寫了接口測試:用dnSpy反編譯看到,Test3接口繼承了Test1,Test2。這就說明接口其實不支持跟類同樣的繼承的,可是咱們實際用的時候卻跟類用法同樣,好像支持繼承,這實際上是編譯器幫咱們補齊了接口的定義,添加上了Test1。

 

 

不吹不擂,你想要的Python面試都在這裏了【315+道題】

 

寫在前面

近日恰逢學生畢業季,課程後期你們「期待+苦逼」的時刻莫過於天天早上內容回顧和麪試題問答部分【臨近畢業天天課前用40-60分鐘對以前內容回顧、提問和補充,專挑班裏不愛說話就的同窗回答】。

期待的是能夠檢驗本身學習的成功;苦逼的是怎麼又有東西沒記住,但咱們依然天天堅持一遍、一遍又一遍指導記住爲止。

 

本來覺得你們會把講過的都記錄下來,以便往後畢業複習,事實證實18歲的我仍是太年輕。

一切想象的太美好,三番五次督促整理到本身筆記上,但是這羣小子們就有不照乾的呢。

最後同窗們獲勝,我仍是慫了,花了一天把這些題乖乖的給大爺們整理一遍唄。。。。。。

各位大佬暫時先來315道題嚐嚐吧,後面有時間再繼續補充。

有緣人若是看到這些題,不妨把答案寫到下面,來證實下你到底有多水,哈哈哈哈哈哈哈哈哈哈哈

注意:你問答案在哪裏?答案在視頻裏了,就是不給你寫。

第一部分 Python基礎篇(80題)

  1. 爲何學習Python?

  2. 經過什麼途徑學習的Python?

  3. Python和Java、PHP、C、C#、C++等其餘語言的對比?

  4. 簡述解釋型和編譯型編程語言?

  5. Python解釋器種類以及特色?

  6. 位和字節的關係?

  7. b、B、KB、MB、GB 的關係?

  8. 請至少列舉5個 PEP8 規範(越多越好)。

  9. 經過代碼實現以下轉換:

    二進制轉換成十進制:v = 「0b1111011」

    十進制轉換成二進制:v = 18
 
    八進制轉換成十進制:v = 「011」
 
    十進制轉換成八進制:v = 30
 
    十六進制轉換成十進制:v = 「0x12」
 
    十進制轉換成十六進制:v = 87

  10. 請編寫一個函數實現將IP地址轉換成一個整數。

    如 10.3.9.12 轉換規則爲:
            10            00001010
    
         3            00000011

             9            00001001
    
        12            00001100

    再將以上二進制拼接起來計算十進制結果:00001010 00000011 00001001 00001100 = ?
  11. python遞歸的最大層數?

  12. 求結果:
        v1 = 1 or 3

        v2 = 1 and 3

        v3 = 0 and 2 and 1
    
    v4 = 0 and 2 or 1
    
    v5 = 0 and 2 or 1 or 4
    
    v6 = 0 or Flase and 1
  13. ascii、unicode、utf-八、gbk 區別?

  14. 字節碼和機器碼的區別?

  15. 三元運算規則以及應用場景?

  16. 列舉 Python2和Python3的區別?

  17. 用一行代碼實現數值交換:
         
 a = 1
     
     b = 2

  18. Python3和Python2中 int 和 long的區別?

  19. xrange和range的區別?

  20. 文件操做時:xreadlines和readlines的區別?

  21. 列舉布爾值爲False的常見值?

  22. 字符串、列表、元組、字典每一個經常使用的5個方法?

  23. lambda表達式格式以及應用場景?

  24. pass的做用?

  25. *arg和**kwarg做用

  26. is和==的區別

  27. 簡述Python的深淺拷貝以及應用場景?

  28. Python垃圾回收機制?

  29. Python的可變類型和不可變類型?

  30. 求結果:
    
   v = dict.fromkeys(['k1','k2'],[])
 
       v[‘k1’].append(666)
    
   print(v)

       v[‘k1’] = 777
    
   print(v)
  31. 求結果:
  32. 列舉常見的內置函數?

  33. filter、map、reduce的做用?

  34. 一行代碼實現9*9乘法表

  35. 如何安裝第三方模塊?以及用過哪些第三方模塊?

  36. 至少列舉8個經常使用模塊都有那些?

  37. re的match和search區別?

  38. 什麼是正則的貪婪匹配?

  39. 求結果:
 a. [ i % 2 for i in range(10) ]
 b. ( i % 2 for i in range(10) )

  40. 求結果:
 a. 1 or 2
 b. 1 and 2
 c. 1 < (2==2)
 d. 1 < 2 == 2

  41. def func(a,b=[]) 這種寫法有什麼坑?

  42. 如何實現 「1,2,3」 變成 [‘1’,’2’,’3’] ?

  43. 如何實現[‘1’,’2’,’3’]變成[1,2,3] ?

  44. 比較: a = [1,2,3] 和 b = [(1),(2),(3) ] 以及 b = [(1,),(2,),(3,) ] 的區別?

  45. 如何用一行代碼生成[1,4,9,16,25,36,49,64,81,100] ?

  46. 一行代碼實現刪除列表中重複的值 ?

  47. 如何在函數中設置一個全局變量 ?

  48. logging模塊的做用?以及應用場景?

  49. 請用代碼簡答實現stack 。

  50. 經常使用字符串格式化哪幾種?

  51. 簡述 生成器、迭代器、可迭代對象 以及應用場景?

  52. 用Python實現一個二分查找的函數。

  53. 談談你對閉包的理解?

  54. os和sys模塊的做用?

  55. 如何生成一個隨機數?

  56. 如何使用python刪除一個文件?

  57. 談談你對面向對象的理解?

  58. Python面向對象中的繼承有什麼特色?

  59. 面向對象深度優先和廣度優先是什麼?

  60. 面向對象中super的做用?

  61. 是否使用過functools中的函數?其做用是什麼?

  62. 列舉面向對象中帶爽下劃線的特殊方法,如:__new__、__init__

  63. 如何判斷是函數仍是方法?

  64. 靜態方法和類方法區別?

  65. 列舉面向對象中的特殊成員以及應用場景

  66. 一、二、三、四、5 能組成多少個互不相同且無重複的三位數

  67. 什麼是反射?以及應用場景?

  68. metaclass做用?以及應用場景?

  69. 用盡可能多的方法實現單例模式。

  70. 裝飾器的寫法以及應用場景。

  71. 異常處理寫法以及如何主動跑出異常(應用場景)

  72. 什麼是面向對象的mro

  73. isinstance做用以及應用場景?

  74. 寫代碼並實現:
    Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would 
    have exactly one solution, and you may not use the same element twice.
    Example:

              Given nums = [2, 7, 11, 15], target = 9,
               
Because nums[0] + nums[1] = 2 + 7 = 9,

               return [0, 1]
  75. json序列化時,能夠處理的數據類型有哪些?如何定製支持datetime類型?

  76. json序列化時,默認遇到中文會轉換成unicode,若是想要保留中文怎麼辦?

  77. 什麼是斷言?應用場景?

  78. 有用過with statement嗎?它的好處是什麼?

  79. 使用代碼實現查看列舉目錄下的全部文件。

  80. 簡述 yield和yield from關鍵字。

第二部分 網絡編程和併發(34題)

  1. 簡述 OSI 七層協議。

  2. 什麼是C/S和B/S架構?

  3. 簡述 三次握手、四次揮手的流程。

  4. 什麼是arp協議?

  5. TCP和UDP的區別?

  6. 什麼是局域網和廣域網?

  7. 爲什麼基於tcp協議的通訊比基於udp協議的通訊更可靠?

  8. 什麼是socket?簡述基於tcp協議的套接字通訊流程。

  9. 什麼是粘包? socket 中形成粘包的緣由是什麼? 哪些狀況會發生粘包現象?

  10. IO多路複用的做用?

  11. 什麼是防火牆以及做用?

  12. select、poll、epoll 模型的區別?

  13. 簡述 進程、線程、協程的區別 以及應用場景?

  14. GIL鎖是什麼鬼?

  15. Python中如何使用線程池和進程池?

  16. threading.local的做用?

  17. 進程之間如何進行通訊?

  18. 什麼是併發和並行?

  19. 進程鎖和線程鎖的做用?

  20. 解釋什麼是異步非阻塞?

  21. 路由器和交換機的區別?

  22. 什麼是域名解析?

  23. 如何修改本地hosts文件?

  24. 生產者消費者模型應用場景及優點?

  25. 什麼是cdn?

  26. LVS是什麼及做用?

  27. Nginx是什麼及做用?

  28. keepalived是什麼及做用?

  29. haproxy是什麼以及做用?

  30. 什麼是負載均衡?

  31. 什麼是rpc及應用場景?

  32. 簡述 asynio模塊的做用和應用場景。

  33. 簡述 gevent模塊的做用和應用場景。

  34. twisted框架的使用和應用?

第三部分 數據庫和緩存(46題)

  1. 列舉常見的關係型數據庫和非關係型都有那些?

  2. MySQL常見數據庫引擎及比較?

  3. 簡述數據三大範式?

  4. 什麼是事務?MySQL如何支持事務?

  5. 簡述數據庫設計中一對多和多對多的應用場景?

  6. 如何基於數據庫實現商城商品計數器?

  7. 常見SQL(必備)
    詳見武沛齊博客:https://www.cnblogs.com/wupeiqi/articles/5729934.html

  8. 簡述觸發器、函數、視圖、存儲過程?

  9. MySQL索引種類

  10. 索引在什麼狀況下遵循最左前綴的規則?

  11. 主鍵和外鍵的區別?

  12. MySQL常見的函數?

  13. 列舉 建立索引可是沒法命中索引的8種狀況。

  14. 如何開啓慢日誌查詢?

  15. 數據庫導入導出命令(結構+數據)?

  16. 數據庫優化方案?

  17. char和varchar的區別?

  18. 簡述MySQL的執行計劃?

  19. 在對name作了惟一索引前提下,簡述如下區別:
 
            select * from tb where name = ‘Oldboy-Wupeiqi’ 
 
            select * from tb where name = ‘Oldboy-Wupeiqi’ limit 1

  20. 1000w條數據,使用limit offset 分頁時,爲何越日後翻越慢?如何解決?

  21. 什麼是索引合併?

  22. 什麼是覆蓋索引?

  23. 簡述數據庫讀寫分離?

  24. 簡述數據庫分庫分表?(水平、垂直)

  25. redis和memcached比較?

  26. redis中數據庫默認是多少個db 及做用?

  27. python操做redis的模塊?

  28. 若是redis中的某個列表中的數據量很是大,若是實現循環顯示每個值?

  29. redis如何實現主從複製?以及數據同步機制?

  30. redis中的sentinel的做用?

  31. 如何實現redis集羣?

  32. redis中默認有多少個哈希槽?

  33. 簡述redis的有哪幾種持久化策略及比較?

  34. 列舉redis支持的過時策略。

  35. MySQL 裏有 2000w 數據,redis 中只存 20w 的數據,如何保證 redis 中都是熱點數據? 

  36. 寫代碼,基於redis的列表實現 先進先出、後進先出隊列、優先級隊列。

  37. 如何基於redis實現消息隊列?

  38. 如何基於redis實現發佈和訂閱?以及發佈訂閱和消息隊列的區別?

  39. 什麼是codis及做用?

  40. 什麼是twemproxy及做用?

  41. 寫代碼實現redis事務操做。

  42. redis中的watch的命令的做用?

  43. 基於redis如何實現商城商品數量計數器?

  44. 簡述redis分佈式鎖和redlock的實現機制。

  45. 什麼是一致性哈希?Python中是否有相應模塊?

  46. 如何高效的找到redis中全部以oldboy開頭的key?

第四部分 前端、框架和其餘(155題)

  1. 談談你對http協議的認識。

  2. 談談你對websocket協議的認識。

  3. 什麼是magic string ?

  4. 如何建立響應式佈局?

  5. 你曾經使用過哪些前端框架?

  6. 什麼是ajax請求?並使用jQuery和XMLHttpRequest對象實現一個ajax請求。

  7. 如何在前端實現輪訓?

  8. 如何在前端實現長輪訓?

  9. vuex的做用?

  10. vue中的路由的攔截器的做用?

  11. axios的做用?

  12. 列舉vue的常見指令。

  13. 簡述jsonp及實現原理?

  14. 是什麼cors ?

  15. 列舉Http請求中常見的請求方式?

  16. 列舉Http請求中的狀態碼?

  17. 列舉Http請求中常見的請求頭?

  18. 看圖寫結果:

  19. 看圖寫結果:

  20. 看圖寫結果:

  21. 看圖寫結果:
     

  22. 看圖寫結果:

  23. 看圖寫結果:

  24. django、flask、tornado框架的比較?

  25. 什麼是wsgi?

  26. django請求的生命週期?

  27. 列舉django的內置組件?

  28. 列舉django中間件的5個方法?以及django中間件的應用場景?

  29. 簡述什麼是FBV和CBV?

  30. django的request對象是在何時建立的?

  31. 如何給CBV的程序添加裝飾器?

  32. 列舉django orm 中全部的方法(QuerySet對象的全部方法)

  33. only和defer的區別?

  34. select_related和prefetch_related的區別?

  35. filter和exclude的區別?

  36. 列舉django orm中三種能寫sql語句的方法。

  37. django orm 中如何設置讀寫分離?

  38. F和Q的做用?

  39. values和values_list的區別?

  40. 如何使用django orm批量建立數據?

  41. django的Form和ModeForm的做用?

  42. django的Form組件中,若是字段中包含choices參數,請使用兩種方式實現數據源實時更新。

  43. django的Model中的ForeignKey字段中的on_delete參數有什麼做用?

  44. django中csrf的實現機制?

  45. django如何實現websocket?

  46. 基於django使用ajax發送post請求時,均可以使用哪一種方法攜帶csrf token?

  47. django中如何實現orm表中添加數據時建立一條日誌記錄。

  48. django緩存如何設置?

  49. django的緩存能使用redis嗎?若是能夠的話,如何配置?

  50. django路由系統中name的做用?

  51. django的模板中filter和simple_tag的區別?

  52. django-debug-toolbar的做用?

  53. django中如何實現單元測試?

  54. 解釋orm中 db first 和 code first的含義?

  55. django中如何根據數據庫表生成model中的類?

  56. 使用orm和原生sql的優缺點?

  57. 簡述MVC和MTV

  58. django的contenttype組件的做用?

  59. 談談你對restfull 規範的認識?

  60. 接口的冪等性是什麼意思?

  61. 什麼是RPC?

  62. Http和Https的區別?

  63. 爲何要使用django rest framework框架?

  64. django rest framework框架中都有那些組件?

  65. django rest framework框架中的視圖均可以繼承哪些類?

  66. 簡述 django rest framework框架的認證流程。

  67. django rest framework如何實現的用戶訪問頻率控制?

  68. Flask框架的優點?

  69. Flask框架依賴組件?

  70. Flask藍圖的做用?

  71. 列舉使用過的Flask第三方組件?

  72. 簡述Flask上下文管理流程?

  73. Flask中的g的做用?

  74. Flask中上下文管理主要涉及到了那些相關的類?並描述類主要做用?

  75. 爲何要Flask把Local對象中的的值stack 維護成一個列表?

  76. Flask中多app應用是怎麼完成?

  77. 在Flask中實現WebSocket須要什麼組件?

  78. wtforms組件的做用?

  79. Flask框架默認session處理機制?

  80. 解釋Flask框架中的Local對象和threading.local對象的區別?

  81. Flask中 blinker 是什麼?

  82. SQLAlchemy中的 session和scoped_session 的區別?

  83. SQLAlchemy如何執行原生SQL?

  84. ORM的實現原理?

  85. DBUtils模塊的做用?

  86. 如下SQLAlchemy的字段是否正確?若是不正確請更正:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    from  datetime  import  datetime
    from  sqlalchemy.ext.declarative
    import  declarative_base
    from  sqlalchemy  import  Column, Integer, String, DateTime
    


    Base  =  declarative_base()


    class  UserInfo(Base):
   
         __tablename__  =  'userinfo' 
   
         id  =  Column(Integer, primary_key = True , autoincrement = True )

         name  =  Column(String( 64 ), unique = True )

         ctime  =  Column(DateTime, default = datetime.now())
  87. SQLAchemy中如何爲表設置引擎和字符編碼?

  88. SQLAchemy中如何設置聯合惟一索引?

  89. 簡述Tornado框架的特色。

  90. 簡述Tornado框架中Future對象的做用?

  91. Tornado框架中如何編寫WebSocket程序?

  92. Tornado中靜態文件是如何處理的?
如: <link href="{{static_url("commons.css")}}" rel="stylesheet" />

  93. Tornado操做MySQL使用的模塊?

  94. Tornado操做redis使用的模塊?

  95. 簡述Tornado框架的適用場景?

  96. git常見命令做用:

  97. 簡述如下git中stash命令做用以及相關其餘命令。

  98. git 中 merge 和 rebase命令 的區別。

  99. 公司如何基於git作的協同開發?

  100. 如何基於git實現代碼review?

  101. git如何實現v1.0 、v2.0 等版本的管理?

  102. 什麼是gitlab?

  103. github和gitlab的區別?

  104. 如何爲github上牛逼的開源項目貢獻代碼?

  105. git中 .gitignore文件的做用?

  106. 什麼是敏捷開發?

  107. 簡述 jenkins 工具的做用?

  108. 公司如何實現代碼發佈?

  109. 簡述 RabbitMQ、Kafka、ZeroMQ的區別?

  110. RabbitMQ如何在消費者獲取任務後未處理完前就掛掉時,保證數據不丟失?

  111. RabbitMQ如何對消息作持久化?

  112. RabbitMQ如何控制消息被消費的順序?

  113. 如下RabbitMQ的exchange type分別表明什麼意思?如:fanout、direct、topic。

  114. 簡述 celery 是什麼以及應用場景?

  115. 簡述celery運行機制。

  116. celery如何實現定時任務?

  117. 簡述 celery多任務結構目錄?

  118. celery中裝飾器 @app.task 和 @shared_task的區別?

  119. 簡述 requests模塊的做用及基本使用?

  120. 簡述 beautifulsoup模塊的做用及基本使用?

  121. 簡述 seleninu模塊的做用及基本使用?

  122. scrapy框架中各組件的工做流程?

  123. 在scrapy框架中如何設置代理(兩種方法)?

  124. scrapy框架中如何實現大文件的下載?

  125. scrapy中如何實現限速?

  126. scrapy中如何實現暫定爬蟲?

  127. scrapy中如何進行自定製命令?

  128. scrapy中如何實現的記錄爬蟲的深度?

  129. scrapy中的pipelines工做原理?

  130. scrapy的pipelines如何丟棄一個item對象?

  131. 簡述scrapy中爬蟲中間件和下載中間件的做用?

  132. scrapy-redis組件的做用?

  133. scrapy-redis組件中如何實現的任務的去重?

  134. scrapy-redis的調度器如何實現任務的深度優先和廣度優先?

  135. 簡述 vitualenv 及應用場景?

  136. 簡述 pipreqs 及應用場景?

  137. 在Python中使用過什麼代碼檢查工具?

  138. 簡述 saltstack、ansible、fabric、puppet工具的做用?

  139. B Tree和B+ Tree的區別?

  140. 請列舉常見排序並經過代碼實現任意三種。

  141. 請列舉常見查找並經過代碼實現任意三種。

  142. 請列舉你熟悉的設計模式?

  143. 有沒有刷過leetcode?

  144. 列舉熟悉的的Linux命令。

  145. 公司線上服務器是什麼系統?

  146. 解釋 PV、UV 的含義?

  147. 解釋 QPS的含義?

  148. uwsgi和wsgi的區別?

  149. supervisor的做用?

  150. 什麼是反向代理?

  151. 簡述SSH的整個過程。

  152. 有問題都去那些找解決方案?

  153. 是否有關注什麼技術類的公衆號?

  154. 最近在研究什麼新技術?

  155. 是否瞭解過領域驅動模型?

 

統計:80 + 34 + 46 + 155 = 315題

 

暫時就先這樣吧。我想能看到這裏的同窗,無外乎兩種人:來拷貝題的人 和 來拷貝題的人。

但,在拷貝走的時候,你要想清楚一件事,把題拷走以後有個蛋用,搞明白答案對你來講纔是最重要的。

好了,就醬紫。

 

老鐵,這要是都不讚,說不過去吧!!!

 

基於mvc三層架構和ajax技術實現最簡單的文件上傳

 

前臺頁面提交文件

<!DOCTYPE html>

<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>文件操做</title>
</head>
<body>
<form id="upFileForm">
<div style="margin:30px;">
<span style="margin-right:10px;">上傳文件</span><input type="file" name="UpFile" id="UpFile" style="width:12%;" />
<input type="button" onclick="upFile()" value="確認上傳" />
</div>
</form>

<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/jquery.form.js"></script>

<script>

//上傳文件
function upFile() {
var file = document.getElementById("UpFile").files[0];
if (!file) {
alert("請選擇文件!");
return;
}
var size = file.size / 1024 / 1024;
if (size > 50) {
alert("圖片文件不能大於50M");
return;
}
$("#upFileForm").ajaxSubmit({
url: "/File/UploadFile",
type: "post",
dataType: "json",
success: function (data) {
if (data == "" || data == "0") {
alert("上傳失敗");
}
if (data == "2") {
alert("不支持上傳該文件");
} else {
alert(JSON.stringify(data));
}
},
error: function (aa) {
alert(aa);
}
});
}
</script>

</body>
</html>

 

後臺接收和上傳

[HttpPost]
public JsonResult UploadFile()
{
HttpRequest request = System.Web.HttpContext.Current.Request;
HttpFileCollection FileCollect = request.Files;
string path = "";//文件的完整路徑
//文件保存目錄路徑
string imgPathName = DateTime.Now.ToString("yyyyMMdd");//以日期爲文件存放的上層文件夾名
string savePath = "/upload/file/" + imgPathName + "/";//文件存放的完整路徑
//若是文件路徑不存在則建立文件夾
if (!Directory.Exists(Server.MapPath(savePath)))
{
Directory.CreateDirectory(Server.MapPath(savePath));
}
//定義容許上傳的文件擴展名
Hashtable extTable = new Hashtable();
extTable.Add("file", "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2");

if (FileCollect.Count > 0)//若是集合的數量大於0,多文件上傳狀況 
{
foreach (string str in FileCollect)
{
HttpPostedFile imgFile = FileCollect[str];//用key獲取單個文件對象HttpPostedFile 
string fileName = imgFile.FileName;//獲取文件名
string fileExt = Path.GetExtension(fileName).ToLower();//獲取文件後綴名
//判斷文件類型是否正確
if (Array.IndexOf(((string)extTable["file"]).Split(','), fileExt.Substring(1).ToLower()) == -1)
{
//文件類型不正確
return Json("2");
}
string imgName = DateTime.Now.ToString("yyyyMMddhhmmss");//文件別名
string imgPath = savePath + imgName + "-" + imgFile.FileName;//構造文件保存路徑 
string AbsolutePath = Server.MapPath(imgPath);
imgFile.SaveAs(AbsolutePath);//將上傳的東西保存 
path = imgPath;//得到文件完整路徑並返回到前臺頁面
}
return Json(path);
}
else
{
//上傳失敗
return Json("0");
}
}

 

事件管理

 
複製代碼
using System;
using System.Collections.Generic;

namespace CustomUtils
{
    /// <summary>
    /// 事件管理器
    /// </summary>
    public class EventManager
    {
        private readonly static Dictionary<string, Action<EventMessageArgs>> eventTask = new Dictionary<string, Action<EventMessageArgs>>();

        /// <summary>
        /// 註冊事件
        /// </summary>
        /// <param name="eventKey">事件索引</param>
        /// <param name="actionValue">事件回調</param>
        public static void RegisterEvent(string eventKey, Action<EventMessageArgs> actionValue)
        {
            if (!eventTask.ContainsKey(eventKey))
            {
                eventTask[eventKey] = actionValue;
            }
            else
            {
                if (eventTask[eventKey] != null)
                {
                    Delegate[] dels = eventTask[eventKey].GetInvocationList();
                    foreach (Delegate del in dels)
                    {
                        if (del.Equals(actionValue))
                            return;
                    }
                }
                eventTask[eventKey] += actionValue;
            }
        }

        /// <summary>
        /// 註銷事件
        /// </summary>
        /// <param name="eventKey">事件索引</param>
        /// <param name="actionValue">事件回調</param>
        public static void UnregisterEvent(string eventKey, Action<EventMessageArgs> actionValue)
        {
            if (eventTask.ContainsKey(eventKey))
            {
                eventTask[eventKey] -= actionValue;

                if (eventTask[eventKey] == null)
                {
                    eventTask.Remove(eventKey);
                }
            }
        }

        /// <summary>
        /// 觸發事件
        /// </summary>
        /// <param name="eventKey">事件索引</param>
        /// <param name="args">消息內容(只在單次觸發有效,若要連續傳遞請使用 CopyMessage )</param>
        public static void PostEvent(string eventKey, EventMessageArgs args)
        {
            if (eventTask.ContainsKey(eventKey))
            {
                eventTask[eventKey](args);
            }
            args.Dispose();
        }
    }

    /// <summary>
    /// 事件通知數據
    /// </summary>
    public class EventMessageArgs : IDisposable
    {
        public EventMessageArgs()
        {
            messages = new Dictionary<string, object>();
        }

        private Dictionary<string, object> messages;

        /// <summary>
        /// 複製
        /// </summary>
        /// <param name="msg"></param>
        public void CopyMessage(EventMessageArgs msg)
        {
            messages = msg.messages;
        }

        /// <summary>
        /// 新增或替換
        /// </summary>
        /// <param name="key">索引</param>
        /// <param name="value">新數據</param>
        public void AddOrReplaceMessage(string key, object value)
        {
            if (CheckMessage(key))
                messages[key] = value;
            else
                messages.Add(key, value);
        }

        /// <summary>
        /// 刪除
        /// </summary>
        /// <param name="key">索引</param>
        public void RemoveMessage(string key)
        {
            if (CheckMessage(key))
                messages.Remove(key);
        }

        /// <summary>
        /// 獲取內容
        /// </summary>
        /// <param name="key">索引</param>
        /// <returns>引用類型數據</returns>
        public object GetMessage(string key)
        {
            if (CheckMessage(key))
                return messages[key];
            else
                return null;
        }

        /// <summary>
        /// 獲取內容
        /// </summary>
        /// <typeparam name="T">類型</typeparam>
        /// <param name="key">索引</param>
        /// <returns>數據</returns>
        public T GetMessage<T>(string key)
        {
            if (CheckMessage(key))
                return (T)messages[key];
            else
                return default(T);
        }

        /// <summary>
        /// 釋放
        /// </summary>
        public void Dispose()
        {
            messages.Clear();
            messages = null;
        }

        private bool CheckMessage(string key)
        {
            return messages.ContainsKey(key);
        }
    }
}
複製代碼
相關文章
相關標籤/搜索