一、重載和重寫有什麼區別,各有什麼做用javascript
重寫:指在子類中重複定義父類方法,存在有繼承關係的父子關係,在 .Net中,只有以virtual和absract標記的虛方法和抽象方法才能被重寫,在基類中的方法必須有修飾符virtual,而在子類的方法中必須指明overridejava
重載(Overloading):指在同一個類中存在多個同名的方法,參數列表和返回值類型不一樣。web
重寫方法的規則:ajax
一、參數列表必須徹底與被重寫的方法相同,不然不能稱其爲重寫而是重載。redis
二、返回的類型必須一直與被重寫的方法的返回類型相同,不然不能稱其爲重寫而是重載。sql
三、訪問修飾符的限制必定要大於被重寫方法的訪問修飾符(public>protected>default>private)數據庫
四、重寫方法必定不能拋出新的檢查異常或者比被重寫方法申明更加寬泛的檢查型異常。json
重載的規則:
一、必須具備不一樣的參數列表;
二、能夠有不一樣的返回類型,只要參數列表不一樣就能夠了;
三、能夠有不一樣的訪問修飾符;
四、能夠拋出不一樣的異常api
二、virtual、abstract、sealed的各自的做用數組
virtual關鍵字用於修改方法或屬性的聲明,在這種狀況下,方法或屬性被稱作虛成員。可由派生類中的重寫裏面改變
sealed由它修飾的類或方法將不能被繼承或是重寫,sealed關鍵字的做用: 在類聲明中使用sealed可防止其它類繼承此類;在方法聲明中使用sealed修飾符可防止擴充類重寫此方法
abstrct修飾類不可被實例化,抽象類只能聲明引用,不能建立對象
三、簡單介紹const、static、readonly、volatile關鍵詞的做用和區別
const:靜態常量,已經被static修飾過,不能再修飾
static:靜態的修飾類
readonly:動態常量,能夠被static修飾,static readonly和const很類似
volatile:是變量修飾符,volatile 關鍵字指示一個字段能夠由多個同時執行的線程修改。聲明爲 volatile 的字段不受編譯器優化(假定由單個線程訪問)的限制。這樣能夠確保該字段在任什麼時候間呈現的都是最新的 值。volatile 修飾符一般用於由多個線程訪問但不使用 lock 語句對訪問進行序列化的字段
四、簡單介紹MVC中幾種過濾器類型
攔截器(Interceptor):
Action(net mvc 自帶)
Result(net mvc 自帶)
Exception(net mvc 自帶)
先過濾掉一些不要的請求-攔截檢查用戶的數據進行驗證,作前期數據處理-傳給Action
使用的方法是在Action上寫 [ResultFillters]
攔截器的做用:代碼複用,攔截器能夠被複用
啓動的條件是:當進入控制器以前的操做
職責單一:廚師只負責炒菜,不用管前期的全部事,變質叫一聲.
攔截器經過IHttpModeule接口來實現
用於場景:支付中心。
過濾器(Filter):
如在配置一些東西的時候使用,如過濾掉低俗文字,危險字符,在請求控制器以前發生做用。
也能夠過濾一些url,如不是登陸接口的地址請求就都過濾掉。
順序:過濾器-攔截器-Action
五、JS中Apply和Call的區別
Apply:調用一個對象的一個方法,用另外一個對象替換當前對象。例如:B.apply(A, arguments);即A對象應用B對象的方法。
Call:調用一個對象的一個方法,用另外一個對象替換當前對象。例如:B.call(A, args1,args2);即A對象調用B對象的方法。
Call與 Apply的相同點:
(1)、方法的含義是同樣的,即方法功能是同樣的;
(2)、第一個參數的做用是同樣的;
Call與 Apply的不一樣點:
(1)、Call能夠傳入多個參數;
(2)、Apply只能傳入兩個參數,因此其第二個參數每每是做爲數組形式傳入
存在的意義:
實現(多重)繼承
六、JS中的閉包的做用,以及遇到的常見的使用場景
概念:一個擁有許多變量和綁定了這些變量的環境的表達式(一般是一個函數),於是這些變量也是該表達式的一部分。
用途:
一、讀取函數內部的變量
二、讓這些變量的值始終保持在內存中。不會再f1調用後被自動清除。
三、方便調用上下文的局部變量。利於代碼封裝。
緣由:f1是f2的父函數,f2被賦給了一個全局變量,f2始終存在內存中,f2的存在依賴f1,所以f1也始終存在內存中,不會在調用結束後,被垃圾回收機制回收。
特色:
用途的場景:
一、匿名自執行函數
二、結果緩存
三、封裝
四、實現類和繼承
七、什麼是拆箱和裝箱
裝箱是將值類型轉化爲引用類型的過程;拆箱是將引用類型轉化爲值類型的過程
int i = 10;
object o = i;//裝箱
int j = (int)o;//拆箱
缺點:
佔用內存和Cpu
八、Vachar和char有什麼區別
char是一種固定長度的類型,varchar則是一種可變長度的類型。
char類型中如:char(10)若是隻暫用了3個字節,那麼剩下沒佔用的則用空格字符補足
vachar是用到多少就是多少
char最多能存放255字符
vachar最多能存放65532個字符
char存取速度比vachar快,可是是以空間換取時間
char的存儲方式是對英文字符佔用1個字節,對漢字佔用兩個字節,而varchar的存儲方式是對每一個英文字符佔用2個字節,漢字也佔用2個字節;
九、String 和StringBuilder有什麼不一樣?
String:不可變字符序列
StringBuilder :可變字符序列
如在字符拼接時,用String會不斷的在內存中建立新的字符串對象,分配新的空間,若是是進行字符串的拼接就用StringBuilder,若是隻是建立新的對象則可使用String
如string s="1234";
console.writeline(s);
s+="789";
console.writeline(s);
輸出結果爲:1234 1234789
其中第一個輸出的是1234,可是第二個實際上是建立了一個新的內存,指向新的內存地址,其中堆中存在兩個字符串,雖然只引用了第二個,可是第一個1234其實仍是存在內存中
String不刪除的而且保留的緣由:String 是引用類型,如String s="1234";string Str="1234"; 其中str指向的是s。確保內存有效利用
StringBuffer 和 StringBuilder 類的對象可以被屢次的修改,而且不產生新的未使用對象。
多線程操做字符串緩衝區下操做大量數據 StringBuffer;
單線程操做字符串緩衝區下操做大量數據 StringBuilder。
StringBuilder 類在 Java 5 中被提出,它和 StringBuffer 之間的最大不一樣在於 StringBuilder 的方法不是線程安全的(不能同步訪問)。
因爲 StringBuilder 相較於 StringBuffer 有速度優點,因此多數狀況下建議使用 StringBuilder 類。然而在應用程序要求線程安全的狀況下,則必須使用 StringBuffer 類。
運行速度:StringBulider>StringBuffer>String
十、有用過事務嗎,對事務的理解
在關係型數據庫中,能夠由一條SQL組成,也能夠由幾天SQL組成
特性
一致性(consistency):張三和李四的錢數總和保持不變。
原子性(Atomicity):張三的錢減小和李四的錢增多要同時進行。
持久性(durability):最終這些數據的改變要保存在數據庫中
隔離性(isolation):在事務徹底執行成功以前,不對其餘的事務產生影響,也不會受到其餘事務的影響
數據庫的事務:
一、他可以爲數據庫操做提供了一個從失敗恢復到正常狀態的方法
二、當多個應用程序併發訪問數據庫時,可以在這些應用程序提供一個隔離方法,可以防止各個應用之間的操做互相干擾
系統的事務:
三、對業務進行一系列的操做時,要麼所有執行,要麼所有不執行
使用場景能夠在:在進行對三個表進行修改數據時,已修改完第一個表數據,在對第二個表數據進行修改時,忽然斷電,則可使用事務。
十一、值類型和引用類型的區別
string是屬於引用類型。int屬於值類型
1.值類型的數據存儲在內存的棧中;引用類型的數據存儲在內存的堆中,而內存單元中只存放堆中對象的
地址。
2.值類型存取速度快,引用類型存取速度慢。
3.值類型表示實際數據,引用類型表示指向存儲在內存堆中的數據的指針或引用
十二、手寫ajax的javascript代碼
function Test(){
var val=1;
$ajax({
type:"get";
url:"login";
async:ture;
data:"value+=":val;
dataType:json;
success:function(data){
}
error:function(data){
}
})
}
1三、手寫冒泡排序
public static void ArraySort()
{
int[] Arr = { 9, 8, 7, 6, 5, 4, 3, 2, 1 };
int t = 0;
//從小到大排序
for (int i = 0; i < Arr.Length - 1; i++) //總共須要N-1趟
{
for (int j = 0; j < Arr.Length - 1 - i; j++) //每趟總共須要(N-1-趟數)次比較
{
if (Arr[j] > Arr[j + 1])
{
t = Arr[j];
Arr[j] = Arr[j + 1];
Arr[j + 1] = t;
}
}
}
foreach (int i in Arr)
{
Console.Write(i + ",");
}
}
public static void Main()
{
ArraySort();
}
1四、ref 與out有什麼不一樣?
ref型參數時,傳入的參數必須先被初始化。
out型參數時,必須在方法中對其初始化
out適合在須要return多個返回值時,ref用在被調用方法修改調用者的引用時。
ref穿進去的參數在函數內部能夠直接使用,而out須要在方法中初始化才能使用
ref有出有進,而out只出不進
1五、委託和事件關係是什麼,爲何要使用委託
委託提供了封裝方法的方式,事件是某動做已經發生的說明,事件是創建在委託之上的
程序運行時同一個委託可以調用不一樣的方法,只要改變他的引用方法就能夠,所以委託調節器用的方法不是在編譯之時決定的,而是程序在運行之中肯定的。
1六、接口和類有什麼不一樣和相同點
不一樣點:
不能直接實例化接口,而類能夠
接口只包含了方法和屬性,不包含實現的方法
接口能夠多繼承,而類只能單繼承
類有分部類的概念,定義可在不一樣的源文件之間進行拆分
表達的含義不一樣,接口主要是定義一種規範,統一的調用方法,約束類,類的方法功能的實現和集合
相同點:
接口和類和結構均可以從多個接口繼承
接口相似抽象基類:繼承接口的任何非抽象類型都必須實現接口的全部成員
接口和類均可以包含事件、索引器、方法和屬性
1七、爲何要儘可能使用DataReader而不是DataSet
由於DataReader一直佔用着Sqlconnection,任何對sqlconnnection的操做都會使得DataReader異常,由於每次只加載一條數據,佔用的內存少
Dataset是一次性將全部的數據所有加載出來,存在內存中。佔用的內存大,比DataReader靈活,由於能夠動態添加行、列,數據,。和對數據庫進行回傳更新的操做。
1八、泛型的各個意思
class A<T>where T:new()
where代表對類型變量T的約束關係
where T:A 表示數據類型變量是繼承於A的,或者是A的自己
where T :new() 指明建立T的實例時應該使用的夠着函數
T就是指一個佔位符
1九、面向對象的思想是什麼
繼承:子類繼承父類的全部數據和操做
封裝:用抽象的數據類型和基於數據的操做封裝在一塊兒,數據被保護在封裝的抽象數據類型中
多態:一個程序中同名可是不一樣方法的共存狀況,有兩種形式:重載和重寫
20、堆和棧的區別,堆和棧的區別
堆:程序運行期間動態分配的內存空間,存儲的是數組和對象(其實數組就是對象),凡是new創建的都是在堆中,堆中存放的都是實體(對象)
棧:編譯期間就分配好的內存,棧內存首先是一片內存區域,存儲的都是局部變量,凡是定義在方法中的都是局部變量(方法外的是全局變量)
棧的生命週期通常很短,用完就釋放,而堆存放的實體會被垃圾回收機制不定時的回收
2一、斐波那契數列,計算第三十個的值
F(n-1)+F(n+1)
第三十是832040
public static Fn(int i)
{
if(i<=0)
{
return 0;
}
else if(i>0&&i<=2){return 1}
else{return F(i-1)+F(i+1)}
}
}
2二、數據庫錶鏈接有哪些方法,有什麼區別
Left(左) join 和Right(右) join都叫外鏈接,由於可能出現對應不上的數據,根據right和left來將數據記錄下來,並將對應的領一張表的字段作置空處理
如:select *from table1 left join table2 on table1.id=table2.id;
left join(左鏈接)table的數據所有查詢出來,table2符合table1.id=table2.id的有數據,沒有的爲null
right join(右連接)和left join 相反
inner join (等值鏈接):只有查出table1.id=table2.id的數據
2三、數據庫表的引擎myisam和innodb的區別
Innodb:是一種支持事務性的引擎,提供了提交、回滾、崩潰恢復的事務安全儲存引擎,全部內容儲存在一個或多個文件中,支持Oracle的。鎖機制
優勢是:提供了事務控制的能力,當一組命令所有執行成功,或者任何一個命令錯誤時全部命令的結果被回退
缺點是:速度慢,佔用的磁盤空間大
myisam:是一種非事務性引擎,提升檢索的和存儲的速度,和全文搜索引擎,能夠用Full text索引,適合數據查詢頻繁的應用,一個表分爲了三個文件-存儲定義,儲存的數據,粗存的索引。
優勢是:讀取的速度快,不佔用大量資源。
缺點是:一、不支持事務二、容錯率很差,磁盤崩潰後,數據就沒了
2四、何時用到GET,何時用到Post
GET方法會產生很長的URL,可能會超過遊覽器限制的URL的長度,不安全,別人能夠看到參數
在作數據的查詢通常用GET,從服務器上獲取數據
POST通常是表單提交,在進行數據的增刪改時通常用POST,向服務器發送數據
2五、談談怎麼使用的Redis,和怎麼判斷緩存的數據是否更新,以及看緩存有什麼做用
緩存通常緩存的是不常變得數據,也不能始終保證和數據庫是始終一致的
緩存的優勢是減小對數據庫的查詢和操做
緩存的缺點不能徹底保證和數據庫的數據一致
使用的步驟是:判斷緩存中是否有數據,有則用緩存的數據沒有則從數據庫中查詢並修改更新緩存中的數據
緩存速度快的緣由是:存內存操做,單線程操做,非阻塞的I/O多路複用機制(就是一個快遞員一輛車,依次去取客戶的包裹)
Redis的過時策略:
定時刪除:設置定時器,檢查key,每100ms將隨機檢查(若是所有檢查,Redis會卡死)
惰性刪除:在請求某個key的時候,redis會檢查是否過時,若是過時就會刪除。
定時刪除+惰性刪除不用的緣由是:按期刪除麼刪除的key,也沒有去請求,內存會愈來愈高。則須要使用內存淘汰機制(沒內存就報錯,或者沒內存就刪除最近少用的key,沒內存隨機刪除key)
2六、使用MVC,以及對MVC的理解
MVC分爲三層:
V=View視圖展示層
C=Controller用戶交互層,處理從Model中獲取的數據返回給View
M=Model處理業務邏輯,Model又橫跨BLL和DAL層。
優勢:
一、各司其職互不干擾。三層中那一層的需求發生變化,只須要改動相應層中的代碼而不會影響到其餘層中的代碼
二、有利於分工,作頁面,作業務的作業務,作底層的作底層
缺點:
一、對模型數據的低效率訪問,視圖調用屢次可能纔會得到足夠顯示的數據,對沒有變化而數據作了沒必要要的訪問,損害操做性能
2七、對ES的理解是什麼,怎麼用ES的(ES7,去掉了Type分組)
是一個基於Lucene 的開源搜索引擎,本質上是一個分佈式的數據庫,容許多臺電腦運行多個ES
有着索引-節點-集羣概念 ,一組節點組成一個集羣,索引中單條記錄叫作 Document文檔,多個Document組成一個索引,每一個document是JSON格式。有着分片的概念,默認爲5,主副分片,至關於負載均衡,會自動根
據負載均衡控制路由,進入其它分片進行查詢,某個分片的數據有問題後,也可經過其餘節點去恢復。
能夠安裝分詞器,如IK分詞
得到數據的方法是GET請求鏈接根據指定的查詢條件獲得對應的Json數據(HTTP請求)
創建索引以前先創建Mapping映射,至關於數據庫的字段結構
2八、數據庫的分區和分表
分區:如按照時間分區,如2018-2019是一個區。就是將一個表的數據分紅N個區塊,邏輯上是由一個表組成,其實是N個物理區塊組成
分表:將一張表按照必定的規則去分解成N個獨立儲存空間的實體表,如某個表按照TYPE類型1/2/3/4/5分爲五個表
優先考慮分區,而後分表。
分區以後數據仍是存在於一個表中,可是分表則是將一個表根據某個字段去分紅N個表,這樣就減小了每一個表的數據量,加快了查詢速度和讀寫速度
分庫則是將數據存儲在不用服務器
2九、truncate和delect、drop有什麼區別
delect執行的刪除是每次從表中刪除一行,並將此刪除的操做做爲事務記錄在日誌中,以便回滾
truncate則是一次性的刪除表中全部數據,不會記錄日誌,不可回滾,刪除過程當中不會激活與表有關的刪除觸發器,執行速度快
drop刪除整個表
truncate只能針對table
delect能夠操做table和view
速度上爲drop>truncate>delect
30、什麼是接口
接口簡單理解就是一種約定,使得實現接口的類或結構在形式上保持一致 接口通常分爲兩種。 1、程序內部的接口:方法和方法之間,模塊和模塊之間的交互。如登陸和發帖,發帖必須登陸,則發帖須要調用登陸的接口。 2、系統對外部的接口:如從別的的網站須要獲取對方的資源或者信息,對方不會開放數據庫,則對方會提供一個查詢數據的方法出來獲取指定的數據,如購物網站須要調用微信或者支付寶的支付接口。接口分爲兩種類型: api接口:http協議,經過路徑區分,請求和內容都是key-value格式,返回的內容通常是json格式,方式有get和post方法,較經常使用。 webservice接口:是soap協議經過http傳輸,請求和返回的都是xml格式