1. 程式人生 > >2015年10月15號到24號.net工程師面試題

2015年10月15號到24號.net工程師面試題

第一家公司

因SQL語言忘記第一大題沒有做PASS

一SQL

表Test結構如下:

姓名

時間

電話

結果

張三

11-01 08:30

111

未接通

李四

12-01 08:31

222

接通

王五

11-02 08:32

333

未接通

張三

12-04 09:25

111

接通

張三

12-10 09:31

111

接通

……

 

 

 

…….

 

 

 

1,  請寫出查詢以下結果的sql命令

姓名  接通量  未接通量

張三   2         0

李四    1        0

王五    0         0

………

Select 姓名,sum(Case  when  結果=‘接通’then 1  Else 0  end)as 接通量,sum(Case  when  結果=‘未接通’then 1  Else 0  end)未接通量

From  Test  group by 姓名

2,  如記錄數是百萬級,有何優化方法?

儘量避免全表掃描,可以在order by 涉及的列上建立索引

大家有其他方法,各抒己見

二、資料如下1,1,2,3,5,8,13,21……求第30位資料是多少

這個是斐波那契數列,別的不多說了

Int   shu (int n){

If(n<=2)

Return 1;

Else

Return shu(n-1)+shu(n-2)

}

 

第二家公司

 

1.      Union all 與union的區別?truncate 與delete的區別?having如何使用

(1)      union會自動壓縮多個結果集合中的重複結果,而union all則將所有的結果全部顯示出來,不管是不是重複。

(2)      TRUNCATE TABLE 在功能上與不帶 WHERE子句的 DELETE 語句相同:二者均刪除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系統和事務日誌資源少。 DELETE 語句每次刪除一行,並在事務日誌中為所刪除的每行記錄一項。TRUNCATE TABLE 通過釋放儲存表資料所用的資料頁來刪除資料,並且只在事務日誌中記錄頁的釋放。

(3)      在 SQL 中增加 HAVING 子句原因是,WHERE 關鍵字無法與合計函式一起使用,它可以和合計函式一起使用

 

2.      對聚集索引和非聚集索引的理解

 

聚集索引時物理排序(效率高,但只有一個)   非聚集索引是按照物理和邏輯排序(不高,可頻繁操作) 你可以把索引理解為字典   聚集索引直接查詢到子   非聚集索引則需要先查偏旁或者拼音再查字

 

3.      下面這個sql 會引起索引嗎?

 

Select name from awhere name like ‘%a’(1)不會,全表掃描

Select name from awhere name like ‘a%’(2)會

 

4.sql如何實現分頁查詢,簡單寫一個分頁

 

Select  top  頁大小  id from  a 

Where (id  not  in

  (select  top  頁大小*頁數  id

     From  a   order  by  id

)order   by  id

 

 

5.  表A

Id

name

Sex

1

li

2

3

Wu

4

An

5

Ce

6

Cao

查詢性別為男女根據id排序的最前的兩條資料

查詢結果如下

Id

name

Sex

1

li

4

An

Select *from  A where  id  in  (select  min(id) from  A  group  by  sex)

第三家公司

1、  某網頁一塊HTML程式碼如下

<table id=”td”><tr><td>1</td><td>2</td></tr></table>

請在網頁裡面新增一個指令碼,使當單擊表格的時候,用alert()彈出一個框,把<td>內容提取出來

把jquery引入

<script type="text/javascript">

$(function(){

            $("#td1td").click(function () {

               alert($(this).text());

            })

        });

</script>

 

2 ,資料庫中有張學生成績表score,4個欄位,id  int 主鍵 stid  int 學生表的主鍵

socre  int 分數  recorddate                                           分數錄入時間

 

學生表student

stid  in  主鍵 ;  sname nvarchar(50)  姓名

已知每個學生在同一時間只能錄入一條成績的記錄

(1)      請寫出sql 語句查詢出每個學生最後一次錄入系統時間對應的記錄:姓名,錄入時間,分數

(2)      請寫出sql 語句查詢每個學生分數最高分的記錄:姓名,錄入時間,分數

select  student.sname,score.

 

3,快速查詢方法排序

 

static void QuickSort(ref List<int> nums, int left, int right)

        {

            if (left <right)

            {

                int i = left;

                int j = right- 1;

                int middle =nums[(left + right) / 2];

                while (true)

                {

                    while (i< right && nums[i] < middle) { i++; };

                    while (j> 0 && nums[j] > middle) { j--; };

                    if (i ==j) break;

                    nums[i] =nums[i] + nums[j];

                    nums[j] =nums[i] - nums[j];

                    nums[i] =nums[i] - nums[j];

                    if(nums[i] == nums[j]) j--;

                }

                QuickSort(refnums, left, i);

                QuickSort(refnums, i + 1, right);

            }

 

 

        }

面試大題

 

1、  每一行都有一個IP地址,這些IP地址可能在檔案中多次出現,請找到出現次數最多的前10條記錄

 

在資料庫中查詢如下

 --查詢重複資料所有

select * from FileRepeat where id in (select id from FileRepeatgroup by id having COUNT(*)>2 )

 

select  id ,COUNT(id)次數 fromFileRepeat where id in (select id from FileRepeat group by id havingCOUNT(*)>2 ) group by id

 

--查詢重複資料,僅僅展示出來

select top 3 id ,COUNT(id)次數 fromFileRepeat where id in (select id from FileRepeat group by id havingCOUNT(*)>2 ) group by id order by COUNT(id) desc

 

2、  有一個四位數a1 a2a3 a4,每一位數都是0到9之間的一個數字,要求這四位數滿足下面兩個條件:(1)a1+a2+a3+a4=20;a1<a2<a3<a4,請找出所有這些數

            for (int i = 1200; i < 9999;i++)

            {

                a1 = i / 1000;

                a2 = (i %1000) / 100;

                a3 = (i %1000) % 100 / 10;

                a4 = i % 10;

                if (((a3 + a2+ a1 + a4) == 20) && a1 < a2 && a2 < a3 && a3< a4)

                //if (((a3 +a2 + a1 + a4) == 20))

                {

                   Console.WriteLine(i);

                }

            }

(2)如果a1+a2+a3+a4=m;這個是你你必須要優化i的取值範圍(大家自己找方法吧)

 


 未完