明源面試,筆試題目如下
一、SQL測試題
1 有兩張表
根據給出的SQL語句,寫出返回的行數分別是多少?為了形象直觀的顯示,我給出了sql語句執行結果。
A 學生表
B分數表
新題目
select a.* from a inner join b on a.id=b.id; 
select a.* from a,b where a.id=b.id 
select a.* from a left join b on a.id=b.id; 
select a.* from a right join b on a.id=b.id; 
select a.* from a right join b on a.id=b.id and a.id<7; 
select a.* from a right join b on a.id=b.id where b.id<7 
老題目
select b.* from a left join b on a.id=b.id; 
select b.* from a left join b on a.id=b.id; 
select b.* from a right join b on a.id=b.id; 
以上語句返回的行數分別是多少?
答案:見圖就知道了
(1)刪除age為18-30的成績
delete from b where b.id in
(select id from a
where age between 18 and 35)
(2)統計每門功課前兩名學生的ID,name ,subject ,score
select c.* from(select a.id,a.name,b.subject,b.score from a, b where a.id=b.id) c
where c.name in (select top 2 d.name from
(select a.id,a.name,b.subject,b.score from a, b where a.id=b.id) d
where d.subject=c.subject order by d.score desc
)order by c.subject

(3)實現如下格式

這是一個行轉列
select b.ID ID,
sum(case when b.Subject='語文' then score end)語文,
sum(case when b.Subject='數學' then score end)數學
from b group by b.id
注:打下划線的是要填的內容
(4)新建一個視圖查詢 ID,name,age,subject ,score ,如果一個學生對應有多個記錄 則全部顯示出來?
if exists (select * from sysobjects where name='get_score')
drop view get_score;
create view get_score
as
select a.id,a.name,b.subject,b.score from a left join b on a.id=b.id;
(5)新建一個存儲過程 , 實現輸入學生ID(存儲過程的輸入參數) , 顯示學生姓名以及平均分,格式如下:李4:45
create procedure get_avgScore(@id int)
as
declare @name varchar(50)
declare @avg float
begin
select @name=a.name+':',@avg=avg(score) from a left join b on a.id =b.id
where a.id=@id group by (a.name+':')
print(@name+cast(@avg as varchar(4)))
end;
exec get_avgScore 4
二、asp.net測試題
(1)請列舉有哪幾種頁面重定向的方法 ,並解釋(至少兩種以上)
(2)ASP.NET頁面傳值的集中方法,並分析其利弊(至少兩種以上)
(3)說說URL傳值應注意的問題(至少兩點以上)
1.URL傳值
這是經典的傳值方式, 如XXX.aspx?id=1&name=c; 不過所傳遞的值是會顯示在瀏覽器的地址欄上的,而且不能傳遞對象。所以這種方法一般用於傳遞的值少且安全性要求不高的情況下。
2.Session傳值
這種方法將每份數據存儲於服務器變量中,可以傳遞比較多的數據,並且安全性較高,所以常用於用戶身份的驗證功能中。不過,Session變量如果存儲過多的數據會消耗過多的服務器資源,編程者在使用時應該慎重。Session可在應用程序的多個頁面中以名稱/值對的方式共享,直到瀏覽用戶關閉自己的瀏覽器或者服務器Session超時(可設置,默認為20分鍾)停止。
Session具有以下特點:
Session中的數據保存在服務器端;
Session中可以保存任意類型的數據;
Session默認的生命周期是20分鍾,可以手動設置更長或更短的時間。
3.Cookie傳值
Cookie是一種比較特殊的數據存儲方式,因為這種方式將數據存儲於瀏覽用戶的電腦中,以文本文件的形式存在於磁盤中。這種方式非常有意思,很多登錄系統就是利用Cookie實現用戶自動登錄。即用戶登錄一次的登錄信息將被寫入到用戶電腦的Cookie文件中,下次登錄時,網站自動讀取該Cookie完成身份驗證。通過Cookie傳遞數據雖然很方便,保存時間可以自由設置,但是安全性不高,編程者不應過於依賴Cookie,而應采用結合的方式完成敏感數據的存儲。
Cookie保存數據有以下特點:
Cookie中的數據保存在客戶端;
Cookie中只能保存字符串類型的數據,如果需要在Cookie中保存其它類型數據,需要將其轉換成字符串類型后保存;
Cookie也有其默認生命周期,也可以手動設置,最大可設置成50年之后過期。
4.Server.Transfer傳值
這個方法的步驟相對較多,使用該方法可以在另一個頁面以公開對象屬性的方式來存取值,使用這種方法是面向對象的。該方法的代碼編寫並不復雜,首先通過定義一個public權限的屬性,該屬性可返回所需傳遞的值。然后在第二個頁面中,使用Context.Handler屬性來獲得前一個頁面實例對象的引用,即可通過訪問自定義的屬性獲取需要的值。
Server.Transfer方式(或稱HttpContext方式)
我們還可以使用 Server.Transfer方式(或稱HttpContext方式)在頁面之間傳遞變量,此時,要傳遞的變量可以通過屬性或方法來獲得,使用屬性將會比較容易一些。好,讓我們在第一個頁面中來寫一個用來獲得TextBox值的屬性:
Code
publicstringGetName
{
get{returntxtName.Text;}
}
我們需要使用Server.Transfer把這個值發送到另外一個頁面中去,請注意Server.Transfer只是發送控件到一個新的頁面去,而並不會使瀏覽器重定向到另一個頁面。所以,我們我們在地址欄中仍然看到的是原來頁面的URL。如下代碼所示:
Server.Transfer("WebForm5.aspx");
接下來,我們到"WebForm5.aspx"看看:
Code
//YoucandeclarethisGloballyorinanyeventyoulike
WebForm4w;
//GetsthePage.ContextwhichisAssociatedwiththispage
w=(WebForm4)Context.Handler;
//AssigntheLabelcontrolwiththeproperty"GetName"whichreturnsstring
Label3.Text=w.GetName;
5.Application傳值
嚴格地說應該是通過HttpApplication對象在服務器端生成一個狀態變量來存儲所需的信息,該HttpApplication對象變量的可用范圍覆蓋整個WEB應用程序。所以該對象一般存儲一些要公布的信息,如在線人數等,而對於那些涉及用戶個人的敏感數據則不用這種方法存儲。HttpApplication對象有兩個常用的方法,即Lock和UnLock方法,可用於處理多個用戶對存儲在Application變量中的數據進行寫入的問題。Lock方法鎖定全部的Application變量,從而阻止其他用戶修改Application對象的變量值,UnLock方法則解除對HttpApplication對象變量的鎖定。通過HttpApplication對象傳值的方法和Session比較相似,但是Session是對於每個單獨的用戶,當該用戶關閉瀏覽器,則Session失效。HttpApplication對象存儲的變量是針對所有訪問程序的用戶,即使有用戶關閉了瀏覽器,變量的值不會丟失。
Code
//為Application變量賦值
Application["Name"]=txtName.Text;
Response.Redirect("WebForm5.aspx");
//從Application變量中取出值
if(Application["Name"]!=null)
Label3.Text=Application["Name"].ToString();
Mvc中這樣使用,
如在Globals.cs賦值:Application["names"] = "ss";
在其它頁面的Controller中這樣調用:
string dd = this.HttpContext.Application["names"].ToString();
6.跨頁面傳送
跨頁面傳送和調用HttpServerUtility對象的Transfer方法有相似之處,不過效率更高。因為調用HttpServerUtility對象的Transfer方法是基於服務器的方法,而跨頁面傳送是基於瀏覽器端的。這個方法主要是設置控件的“PostBackUrl”屬性,使該控件(如Button)操作后轉向指定頁面,並且這個指定頁面可以直接獲取前一個頁面的所有控件對象及其屬性值。
7.如果有特殊需要,還可以使用其他方法,例如通過數據庫存儲臨時數據等。
(4) 用代碼實現: 新建一個XML文檔 將字符串 "<item>NBA</item>" 讀到文檔里
public void addxml()
{
XmlDocument doc = new XmlDocument();
doc.LoadXml("<item>NBA</item>");
doc.Save("doc.xml");
}
(5)解釋一下裝箱和拆箱,並附上代碼說明
public void show()
{
int val = 100;
object obj = val;
Response.Write("對象的值:" + obj+"<br/>");
//這是一個裝箱的過程,是將值類型轉換為引用類型的過程
int vals = 100;
object objs = val;
int num = (int)objs;
Response.Write("num:" + num);
//這是一個拆箱的過程,是將值類型轉換為引用類型,再由引用類型轉換為值類型的過程
}
(6) 1.寫出結果
public abstract class A
{
public A()
{
Console.WriteLine('A');
}
public virtual void Fun()
{
Console.WriteLine("A.Fun()");
}
}
public class B : A
{
public B()
{
Console.WriteLine('B');
}
public newvoid Fun()
{
Console.WriteLine("B.Fun()");
}
public static void Main()
{
A a = new B();
a.Fun();
}
}
結果:A,B,A.Fun();
3 情景A
房地產樓盤有很多種項目,每個項目有不同類型的房子,像普通商品房 是按照面積*均價 來計算價格,而別墅是按照數量來計算價格
情景B
公司老總和銷售總監希望希望立刻得知樓盤的銷售情況
(1)請使用UML 來描述A 中各對象的關系
(2)請給A中的各對象建表 ,表名和字段 自己定
(3)請結合B的場景,用一種設計模式來實現(編碼實現)
4 手寫代碼實現如下table樣式

答:代碼如下:
<table style="background-color:#ffffff" border="1px">
<tr>
<td rowspan="2" width="120px" height="25px">1</td>
<td width="120px" class="style1">2</td>
<td width="120px" class="style1">3</td>
</tr>
<tr>
<td colspan="2" rowspan="2">5</td>
</tr>
<tr>
<td width="120px" height="25px">4</td>
</tr>
</table>
5.Javascript測試題
(1) (a+2)-1= NAN
(2)ParseInt("7")+3=10
(3)
var a="8" ;
var b=5;
var c=a+b;
var d=a-b;
c=85 (拼接字符串)
d=3 (數字相減)
(4)
請擴展JS中Array的功能 讓其也能實現類似於C#中ArrayList的功能
如: Array arr=new Array(); arr.Add("arrvalue");
答: Array.prototype.Add = function (o) {
this[this.length] = o;
}
(5)請列舉你所用過或自己編寫的Javascript庫, 就其中所涉及的思想或者寫的比較好的地方談談你的看法
答:JQUERY,EXT
6. HTML 頁面上有一個DIV ID 為 showInfo,, 有一個Button<input type="button" value="顯示" name="btnOK">現要求實現點擊按鈕 在DIV里 顯示一個超鏈接 <a href=www.mysoft.com.cn>明源軟件</a>,自己寫一個JS函數實現
答:代碼如下:
function Showlink()
{
document.getElementById("showlink").innerHTML = "<a href=www.mysoft.com.cn>明源科技</a>";
}
<div id="showlink">
<input id="btnok" type="button" value="show" name="btnOk" onclick="Showlink();"/>
6 邏輯題
計划用水量為 wplan,用戶實際用水量為wsj,如果實際用水量小於wplan,按照price1收費,實際用水量超過wplan,並且小於1.2wplan
超過部分按照price2收費,實際用水量大於1.2wplan,超過部分按照price3收費,請用一個函數iff(exp1,exp2,exp3) 來計算用戶的水費,要求 如果exp1為true ,返回exp2,否則返回exp3,函數可以嵌套
答: IIf(wplan > wsj, wsj * price1, IIf(wsj < wplan * 1.2, wplan * price1 + (wsj - wplan) * price2, wplan * price1 + 0.2 * wplan * price2 + (wsj - wplan * 1.2) * price3))
