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的取值範圍(大家自己找方法吧)
未完