ASP.NET(C#) 面試總結面試題大全


一、對於 Web 性能優化,您有哪些了解和經驗嗎?
出現指數:五顆星
主要考點:這道題是博主在博客園的新聞里面看到的,回想之前幾年的面試經歷,發現此題出現概率還是比較高的。因為它的考面灰常廣,可以讓面試官很快了解你的技術涉及面以及這些技術面的深度。
參考答案:這個問題可以分前端和后端來說。
1、前端優化
(1)減少 HTTP 請求的次數。我們知道每次發送http請求,建立連接和等待相應會花去相當一部分時間,所以在發送http請求的時候,盡量減少請求的次數,一次請求能取出的數據就不要分多次發送。
(2)啟用瀏覽器緩存,當確定請求的數據不會發生變化時,能夠直接讀瀏覽器緩存的就不要向服務端發送請求。比如我們ajax里面有一個參數能夠設置請求的時候是否啟用緩存,這種情況下就需要我們在發送請求的時候做好相應的緩存處理。
(3)css文件放 在<head>里面,js文件盡量放在頁面的底部。因為請求js文件是很花費時間,如果放在<head>里面,就會導致頁面的 DOM樹呈現需要等待js文件加載完成。這也就是為什么很多網站的源碼里面看到引用的文件放在最后的原因。
(4)使用壓縮的css和js文件。這個不用多說,網絡流量小。
(5)如果條件允許,盡量使用CDN的方式引用文件,這樣就能減少網絡流量。比如我們常用的網站http://www.bootcdn.cn/。
(6)在寫js和css的語法時,盡量避免重復的css,盡量減少js里面循環的次數,諸如此類。
2、后端優化:
(1)程序的優化:這是一個很大的話題,我這里就選幾個常見的。比如減少代碼的層級結構、避免循環嵌套、避免循環CURD數據庫、優化算法等等。
(2)數據庫的優化:(由於數據庫優化不是本題重點,所以可選幾個主要的來說)比如啟用數據庫緩存、常用的字段建索引、盡量避免大事務操作、避免select * 的寫法、盡量不用in和not in 這種耗性能的用法等等。
(3)服務器優化:(這個可作為可選項)負載均衡、Web服務器和數據庫分離、UI和Service分離等等。


二、MVC路由理解?(屢見不鮮)
出現指數:五顆星
主要考點:此題主要考點是MVC路由的理解。
參考答案:
1、首先我們要理解MVC中路由的作用:url Routing的作用是將瀏覽器的URL請求映射到特定的MVC控制器動作。
2、當我們訪問http://localhost:8080/Home/Index 這個地址的時候,請求首先被UrlRoutingModule截獲,截獲請求后,從Routes中得到與當前請求URL相符合的RouteData對象, 將RouteData對象和當前URL封裝成一個RequestContext對象,然后從Requestcontext封裝的RouteData中得到 Controller名字,根據Controller的名字,通過反射創建控制器對象,這個時候控制器才真正被激活,最后去執行控制器里面對應的 action。

三、談談你覺得做的不錯系統,大概介紹下用到了哪些技術?
出現指數:五顆星
主要考點:這是一道非常開放的面試題。博主遇到過好幾家公司的面試官都問道了這個,博主覺得他們是想通過這個問題快速了解面試者的技術水平。此題只要結合你最近項目用到的技術談談就好了。
參考答案:
就拿我之前做過的一個項目為例來簡單說明一下吧。項目分為客戶端和服務端,客戶端分 為BS客戶端和CS客戶端,BS客戶端采用MVC 5.0的框架,CS客戶端是Winform項目,服務端使用WebApi統一提供服務接口,考慮以后可能還要擴展手機端,所以服務接口的參數和返回值使用 通用的Json格式來傳遞數據。
1、服務端采用的面向接口編程,我們在軟件架構的過程中,層和層之間通過接口依賴, 下層不是直接給上層提供實現,而是提供接口,具體的實現以依賴注入的方式在運行的時候動態注入進去。MEF就是實現依賴注入的一種組件。它的使用使得UI 層不直接依賴於BLL層,而是依賴於中間的一個IBLL層,在程序運行的時候,通過MEF動態將BLL里面的實現注入到UI層里面去,這樣做的好處是減少 了層與層之間的耦合。服務端的異常里面、權限驗證、日志記錄等通用功能使用了AOP攔截的機制統一管理,項目中使用的是Postsharp這個組件,很好 地將通用需求功能從不相關的類當中分離出來,提高了代碼的可維護性。
2、BS的客戶端采用的jquery+bootstrap 的方式,所有頁面采用流式布局,能更好適應各種不同的終端設備(PC、手機)。項目中使用了各種功能強大的bootstrap組件,能適應各種復雜的業務需求。

四、Js繼承實現。
出現指數:五顆星
主要考點:這道題考驗面試者對js理解的深度。根據博主的經歷,這種題一般在筆試出現的幾率較大,為什么把它放在這里,因為它確實太常見了。其實js實現繼承的方式很多,我們只要寫好其中一種就好了。
參考答案:原型鏈繼承

 1 //1.定義Persiong函數
 2             function Person(name, age) {
 3                 this.name = name;
 4                 this.age = age;
 5             }
 6             //2.通過原型鏈給Person添加一個方法
 7             Person.prototype.getInfo = function () {
 8                 console.log(this.name + " is " + this.age + " years old!");
 9             }
10             function Teacher(staffId) {
11                 this.staffId = staffId;
12             }
13             //3.通過prototype生命 Teacher繼承Person
14             Teacher.prototype = new Person();
15             //4.實例Teacher函數
16             var will = new Teacher(1000);
17             will.name= "Will";
18             will.age = 28;
19             //5.調用父類函數
20             will.getInfo();


五、談談你對設計模式的認識?結合你用得最多的一種設計模式說說它的使用。
出現指數:五顆星
主要考點:不用多說,這題考的就是對設計模式的理解。一般為了簡單可能會要求你寫一個單例模式,注意最好是寫一個完整點的,考慮線程安全的那種。然后會讓你說說你在項目中什么情況下會用到這種模式
參考答案:
通用寫法

 1   public class Singleton
 2     {
 3         // 定義一個靜態變量來保存類的實例
 4         private static Singleton uniqueInstance;
 5         // 定義一個標識確保線程同步
 6         private static readonly object locker = new object();
 7         // 定義私有構造函數,使外界不能創建該類實例
 8         private Singleton()
 9         {
10         }
11         /// <summary>
12         /// 定義公有方法提供一個全局訪問點,同時你也可以定義公有屬性來提供全局訪問點
13         /// </summary>
14         /// <returns></returns>
15         public static Singleton GetInstance()
16         {// 雙重鎖定只需要一句判斷就可以了
17             if (uniqueInstance == null)
18             {
19                 lock (locker)
20                 {
21                     // 如果類的實例不存在則創建,否則直接返回
22                     if (uniqueInstance == null)
23                     {
24                         uniqueInstance = new Singleton();
25                     }
26                 }
27             }
28             return uniqueInstance;
29         }
30     }

單例模式確保一個類只有一個實例,並提供一個全局訪問點,它的使用場景比如任務管理 器整個系統中應該只有一個把,再比如操作文件的對象,同一時間我們只能有一個對象**作文件吧。最重要的,比如我們項目中用得非常多的功能→日志記錄,在 一個線程中,記錄日志的對象應該也只能有一個吧。單例模式的目的是為了保證程序的安全性和數據的唯一性。或者你也可以結合你使用的其他設計模式來說明。

 

六、IIS的工作原理?
出現指數:四顆星
主要考點:此題主要考的是.net framework和IIS是如何結合呈現頁面的。這是一個有點復雜的過程,面試的時候不可能說得完整,那么我們就抓住幾個關鍵點說說就可以。其實博主也不能完全理解這個過程,今天正好借這個機會溫**下。
參考答案:
1、當客戶端發送HTTP Request時,服務端的HTTP.sys(可以理解為IIS的一個監聽組件) 攔截到這個請求;
2、HTTP.sys 聯系 WAS 向配置存儲中心請求配置信息。
3、然后將請求傳入IIS的應用程序池。
4、檢查請求的后綴,啟動aspnet_isapi.dll這個dll,這個dll是.net framework里面的,也就是說到這一步,請求進入了.net framework的管轄范圍。
5、這個時候如果是WebForm,開始執行復雜的頁面生命周期(HttpRuntime→ProcessRequest→HttpContext→HttpHandler);如果是MVC,則啟動mvc的路由機制,根據路由規則為URL來指定HttpHandler。
6、httpHandler處理請求后,請求結束,給出Response,客戶端處理響應,整個過程結束。


七、Http協議
出現指數:四顆星
主要考點:此題主要考對於web里面http協議的理解。
參考答案:
1、http協議是瀏覽器和服務器雙方共同遵循的規范,是一種基於TCP/IP應用層協議。
2、http是一種典型的請求/響應協議。客戶端發送請求,請求的內容以及參數存放到請求報文里面,服務端收到請求后,做出響應,返回響應的結果放到響應報文里面。通過F12可以查看請求報文和響應報文。
3、http協議是”無狀態”的,當客戶端向服務端發送一次http請求后,服務端收到請求然后返回給客戶端相應的結果,服務器會立即斷開連接並釋放資源。在實際開發過程中,我們有時需要“保持”這種狀態,所以衍生出了Session/Cookie這些技術。
4、http請求的方式主要有get/post。
5、http狀態碼最好記幾個,博主有一次面試就被問到了。200(請求成功)、404(請求的資源不存在)、403(禁止訪問)、5xx(服務端錯誤)


八、數據庫優化經驗(后端工程師非常常見)
出現指數:四顆星
主要考點:此題考察后端工程師操作數據庫的經驗。說實話,數據庫是博主的弱項,博主覺得對於這種考題,需要抓住幾個常用並且關鍵的優化經驗,如果說得不對,歡迎大家斧正。
參考答案:
1、數據庫運維方面的優化:啟用數據庫緩存。對於一些比較常用的查詢可以采用數據庫緩存的機制,部署的時候需要注意設置好緩存依賴項,防止“過期”數據的產生。
2、數據庫索引方面的優化:比如常用的字段建索引,聯合查詢考慮聯合索引。(PS:如果你有基礎,可以敞開談談聚集索引和非聚集索引的使用場景和區別)
3、數據庫查詢方面的優化:避免select * 的寫法、盡量不用in和not in 這種耗性能的用法等等。
4、數據庫算法方面的優化:盡量避免大事務操作、減少循環算法,對於大數據量的操作,避免使用游標的用法等等。


九、關於代碼優化你怎么理解?你會考慮去代碼重構嗎?
出現指數:四顆星
主要考點:此題考的是面試者對代碼優化的理解,以及代碼如何重構的相關知識。
參考答案:
1、對於代碼優化,之前的公司每周會做代碼審核,審核的主要作用就是保證代碼的正確性和執行效率,比如減少代碼的層級結構、避免循環嵌套、避免循環CURD數據庫、盡量避免一次取出大量數據放在內存中(容易內存溢出)、優化算法等。
2、對於陳舊代碼,可能很多地方有調用,並且開發和維護人員很有可能不是同一個人,所以重構時要格外小心,如果沒有十足的把握,不要輕易重構。如果必須要重構,必須做好充分的單元測試和全局測試。


十、談談你的優點和缺點?
出現指數:四顆星
主要考點:這道題讓人有一種罵人的沖動,但是沒辦法,偏偏很多所謂的大公司會問這個。比如華為。這個問題見仁見智,答案可以自己組織。
參考答案:
優點:對於新的技術學**能力強,能很快適應新環境等等
缺點:對技術太過於執着等等


十一、關於服務器端 MVC 架構的技術實現,您是怎樣理解的?這種架構方式有什么好處?您在項目中是如何應用這一架構的?
出現指數:三顆星
主要考點:此題主要考的對於MVC這種框架的理解。
參考答案:MVC,顧名思義,Model、View、Controller。所有的 界面代碼放在View里面,所有涉及和界面交互以及URL路由相關的邏輯都在Controller里面,Model提供數據模型。MVC的架構方式會讓系 統的可維護性更高,使得每一部分更加專注自己的職責,並且MVC提供了強大的路由機制,方便了頁面切換和界面交互。然后可以結合和WebForm的比較, 談談MVC如何解決復雜的控件樹生成、如何避免了復雜的頁面生命周期。

十二、網站優化:網站運行慢,如何定位問題?發現問題如何解決?
出現指數:三顆星
主要考點:此題和問題一類似,考察Web的問題定位能力和優化方案。
參考答案:
瀏覽器F12→網絡→查看http請求數以及每個請求的耗時,找到問題的根源,然后依次解決,解決方案可以參考問題一里面的Web優化方案。


十三、說說你最擅長的技術?並說說你是如何使用的?
出現指數:三顆星
主要考點:這是一道非常開放的面試題。最初遇到這種問題,博主很想來一句:你妹,這叫什么問題!但確實有面試官問到。回頭想想,其實此題考查你擅長的技術的涉及深度。其實博主覺得對於這個問題,可以結合你項目中用到的某一個技術來說就好了。
參考答案:
簡單談談MEF在我們項目里面的使用吧。
在談MEF之前,我們必須要先談談DIP、IOC、DI
依賴倒置原則(DIP):一種軟件架構設計的原則(抽象概念)
控制反轉(IoC):一種反轉流、依賴和接口的方式(DIP的具體實現方式)。
依賴注入(DI):IoC的一種實現方式,用來反轉依賴(IoC的具體實現方式)。
什么意思呢?也就是說,我們在軟件架構的過程中,層和層之間通過接口依賴,下層不是 直接給上層提供實現,而是提供接口,具體的實現以依賴注入的方式在運行的時候動態注入進去。MEF就是實現依賴注入的一種組件。它的使用使得UI層不直接 依賴於BLL層,而是依賴於中間的一個IBLL層,在程序運行的時候,通過MEF動態將BLL里面的實現注入到UI層里面去,這樣做的好處是減少了層與層 之間的耦合。這也正是面向接口編程方式的體現。


十四、自己寫過JS組件嗎?舉例說明。
出現指數:三顆星
主要考點:此題考的js組件封裝和js閉包的一些用法。一般來說,還是筆試出現的幾率較大。
參考答案:自定義html的select組件
 

 1  //combobox
 2     (function ($) {
 3         $.fn.combobox = function (options, param) {
 4             if (typeof options == 'string') {
 5                 return $.fn.combobox.methods[options](this, param);
 6             }
 7             options = .fn.combobox.defaults, options || {});
 8             var target = $(this);
 9             target.attr('valuefield', options.valueField);
10             target.attr('textfield', options.textField);
11             target.empty();
12             var option = $('<option></option>');
13             option.attr('value', '');
14             option.text(options.placeholder);
15             target.append(option);
16             if (options.data) {
17                 init(target, options.data);
18             }
19             else {
20                 //var param = {};
21                 options.onBeforeLoad.call(target, option.param);
22                 if (!options.url) return;
23                 $.getJSON(options.url, option.param, function (data) {
24                     init(target, data);
25                 });
26             }
27 
28             function init(target, data) {
29                 $.each(data, function (i, item) {
30                     var option = $('<option></option>');
31                     option.attr('value', item[options.valueField]);
32                     option.text(item[options.textField]);
33                     target.append(option);
34                 });
35                 options.onLoadSuccess.call(target);
36             }
37             target.unbind("change"); target.on("change", function (e) { if (options.onChange) return options.onChange(target.val()); }); } $.fn.combobox.methods = { getValue: function (jq) { return jq.val(); }, setValue: function (jq, param) { jq.val(param); }, load: function (jq, url) { ('<option></option>'); option.attr('value', ''); option.text('請選擇'); jq.append(option); ('<option></option>'); option.attr('value', item[jq.attr('valuefield')]); option.text(item[jq.attr('textfield')]); jq.append(option); }); }); } }; $.fn.combobox.defaults = { url: null, param: null, data: null, valueField: 'value', textField: 'text', placeholder: '請選擇', onBeforeLoad: function (param) { }, onLoadSuccess: function () { }, onChange: function (value) { }
38             };
39             })(jQuery);

    調用的時候

1  $("#sel_search_orderstatus").combobox({
2                 url: '/apiaction/Order/OrderApi/GetOrderStatu',
3                 valueField: 'VALUE',
4                 textField: 'NAME'
5             });

就能自動從后台取數據,注意valueField和textField對應要顯示和實際值。


十五、自己寫過多線程組件嗎?簡要說明!
出現指數:三顆星
主要考點:此題是兩年前博主在攜程的一次電話面試中遇到的,其他地方基本上沒遇到過,其實到現在也不能理解當時面試官問這個問題的目的。但我想,此問題必有出處,估計面試官是想了解你對多線程以及線程池等的理解深度。

知識點:
1、什么是面向對象?
面向對象說到底就是一種思想,任何事物都可以看作是一個對象。在有些面試題目中也稱之為OOP(Object Oriented Programming)。分開來解讀就是:
Object:對象
Oriented: 面向的
Programming:程序設計
面向對象就是把一個人或事務的屬性,比如名字,年齡這些定義在一個實體類里面。存和取的時候直接使用存取實體類就把這個人的名字,年齡這些全部存了,這個實體類就叫對象,這種思想就叫面向對象。
面向對象開發具有以下優點:
    代碼開發模塊化,便於維護。
    代碼復用性強
    代碼的可靠性和靈活性。
    代碼的可讀性和可擴展性。


2. 簡述 private、 protected、 public、 internal 修飾符的訪問權限。
答 . private : 私有成員, 在類的內部才可以訪問。
     protected : 保護成員,該類內部和繼承類中可以訪問。
     public : 公共成員,完全公開,沒有訪問限制。
     internal: 在同一命名空間內可以訪問,當前程序集內可以訪問


3 .列舉ASP.NET 頁面之間傳遞值的幾種方式。
答. 1.Request.QueryString
    2.Request.Form
    3.Session
    4.Application
    5.Cache
    6.Cookie
    7.Server.Transfer
    8.Database
    9.HttpContext的Item屬性等


4.a=10,b=15,請在不使用第三方變量的情況下,把a、b的值互換
答: int a=a+b; int b=a-b;int a=a-b;


5.用.net做B/S結構的系統,您是用幾層結構來開發,每一層之間的關系以及為什么要這樣分層?
答:一般為3層:數據訪問層,業務層,表示層。
數據訪問層對數據庫進行增刪查改。
業務層一般分為二層,業務表觀層實現與表示層的溝通,業務規則層實現用戶密碼的安全等。
表示層為了與用戶交互例如用戶添加表單。
優點: 分工明確,條理清晰,易於調試,而且具有可擴展性。
缺點: 增加成本。


6.能用foreach遍歷訪問的對象需要實現 ________________接口或聲明________________方法的類型。
答:IEnumerable 、 GetEnumerator。


7.GC是什么? 為什么要有GC?
答:GC是垃圾收集器。程序員不用擔心內存管理,因為垃圾收集器會自動進行管理。要請求垃圾收集,可以調用下面的方法之一:
       System.gc()
       Runtime.getRuntime().gc()


8.啟動一個線程是用run()還是start()?
答:啟動一個線程是調用start()方法,使線程所代表的虛擬處理機處於可運行狀態,這意味着它可以由JVM調度並執行。這並不意味着線程就會立即運行。run() 方法可以產生必須退出的標志來停止一個線程。


9.是否可以繼承String類?
答:String類是final類故不可以繼承。


10.session喜歡丟值且占內存,Cookis不安全,請問用什么辦法代替這兩種原始的方法
答:redis 或者 memcache。當然,微軟也提供了解決方案。iis中由於有進程回收機制,系統繁忙的話Session會丟失,可以用Sate server或SQL Server數據庫的方式。


11.IOC容器?
1. IOC即控制反轉,是一種設計思想,在之前的項目中,當我們需要一個對象時,需要new一個對象,而IOC的設計思想是我們將需要的對象注入到一個容器中,就會獲得我們所需要的資源 。
2. IOC和DI IOC是控制反轉,DI是依賴注入,控制反轉的解釋有些模棱兩可,而依賴注入就很明確,我們將需要的對象注入到容器中,獲取所需要的資源。
3. IOC控制反轉:正常情況下程序開發是上端調用下端,依賴下端,依賴倒置原則告訴我們,上端不要依賴下端,要依賴抽象,上端只依賴抽象,細節交給第三方工廠(容器)來決定,這就是IOC,就是控制反轉——使系統架構可以更穩定,支持擴展。


12、什么是委托,事件是不是一種委托?
1. 委托可以把一個方法作為參數代入另一個方法。
2. 委托可以理解為指向一個函數的引用。
3. 事件是一種特殊的委托。
delegate <函數返回類型> <委托名> (<函數參數>)


13.c#多線程是什么?
多線程的優點:可以同時完成多個任務;可以使程序的響應速度更快;可以節省大量時間進行處理任務;可以隨時停止任務;可以設置每個任務的優先級,以優化程序性能。


14.WebApi概述
Web API是在.NET Framework之上構建的Web的API的框架,Web API是一個編程接口,用於操作可通過標准HTTP方法和標頭訪問的系統,Web API需要基於.NET 3.5或更高版本才可以進行開發


15.什么是WebService
webservice是一種跨平台,跨語言的規范,用於不同平台,不同語言開發的應用之間的交互,是基於網絡的、分布式的模塊化組件,它執行特定的任務,遵守具體的技術規范。


16.存儲過程是什么?有什么用?有什么優點?用什么來調用?
存儲過程是預編譯,安全性高,也是大大提高了效率,存儲過程可以重復使用以減少數據庫開發人員的工作量,復雜的邏輯我們可以使用存儲過程完成,在存儲過程中我們可以使用臨時表,還可以定義變量,拼接sql語句,調用時,只需執行這個存儲過程名,傳入我們所需要的參數即可。

17.何為觸發器?
觸發器是一種特殊的存儲過程,主要是通過事件觸發而被執行。它可以強化約束來維護數據的完整性和一致性,可以跟蹤數據庫內的操作從而不允許未經許可的更新和變化。可以級聯運算。
常見的觸發器有三種:分別應用於Insert , Update , Delete 事件。


18.什么叫做泛型?
只是為了去掉重復代碼,應對不同類型的共同需求。


19. C#中值類型和引用類型分別有哪些? 
值類型:結構體(數值類型,bool型,用戶定義的結構體),枚舉,可空類型。
引用類型:數組,用戶定義的類、接口、委托,object,字符串。


21 .NET的錯誤處理機制是什么?
.net錯誤處理機制采用try->catch->finally結構,發生錯誤時,層層上拋,直到找到匹配的Catch為止。


22.C#可否對內存進行直接的操作?
在.net下,.net引用了垃圾回收(GC)功能,它替代了程序員不過在C#中,不能直接實現Finalize方法,而是在析構函數中調用基類的Finalize()方法。


23. ADO.NET相對於ADO等主要有什么改進?
1:ado.net不依賴於ole db提供程序,而是使用.net托管提供的程序,
2:不使用com
3:不在支持動態游標和服務器端游
4:,可以斷開connection而保留當前數據集可用
5:強類型轉換
6:xml支持


24.如果在一個B/S結構的系統中需要傳遞變量值,但是又不能使用Session、Cookie、Application,您有幾種方法進行處理?
this.Server.Transfer、Response.Redirect()、QueryString


25. .NET中讀寫數據庫需要用到那些類?他們的作用?
Connection連接對象,Command執行命令和存儲過程,DataReader向前只讀的數據流,DataAdapter適配器,支持增刪查詢,DataSet數據級對象,相當與內存里的一張或多張表。


26.簡要談一下您對微軟.NET架構下remoting和webservice兩項技術的理解以及實際中的應用。
WS主要是可利用HTTP,穿透防火牆。而Remoting可以利用TCP/IP,二進制傳送提高效率。
remoting是.net中用來跨越machine,process, appdomain進行方法調用的技術,對於三成結構的程序,就可以使用remoting技術來構建.它是分布應用的基礎技術.相當於以前的DCOM。
Web Service是一種構建應用程序的普通模型,並能在所有支持internet網通訊的操作系統上實施。Web Service令基於組件的開發和web的結合達到最佳,基於組件的對象模型。


27.什么是反射?
動態獲取程序集信息。


28.override與重載的區別?
重載是方法的名稱相同。參數或參數類型不同,進行多次重載以適應不同的需要。
Override是子類對基類中函數的重寫。為了適應需要。


29.裝箱和拆箱的概念和原理
裝箱是將值類型轉化為引用類型的過程;
拆箱是將引用類型轉化為值類型的過程


30.Session有什么重大BUG,微軟提出了什么方法加以解決?
是iis中由於有進程回收機制,系統繁忙的話Session會丟失,可以用Sate server或SQL Server數據庫的方式存儲Session不過這種方式比較慢,而且無法捕獲Session的END事件。

 

參考文獻:https://blog.csdn.net/user2041/article/details/80591365


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM