答案已整理
1.hashmap和hashtable區別
- 相同點:
- 都是map的實現類,都是鍵值對集合;
- 裏邊的元素都是無序的,跟添加順序無關;
- 不同點:
-
HashMap允許有一個null鍵和多個null值;
-
HashMap不是線程安全的,HashTable是線程安全的。
一般這麼問的都不會就此罷休的,可能還會扯到多線程、擴容機制、ConcurrentHashMap、等等一連串問題
2.手寫個Ajax請求
<script>
$.ajax({
type: "post", //type可以爲post也可以爲get
url: "www.baidu.com",
data: {
"username": username
},
async: false,//ture同步 false異步 一般沒人會弄成異步
dataType: "json", //這裏要注意如果後臺返回的數據不是json格式,那麼就會進入到error:function(data){}中
success: function(data) {
},
error: function(data) {
},
complete: function(data) {
alert("必執行、相當於java拋異常中的finally、一般不常用")
}
});
</script>
3.遞歸實現斐波拉切,輸出第三十個數?
斐波那契數列:1、1、2、3、5、8、13、21、34、…,即這個數列從第3項開始,每一項都等於前兩項之和。
遞歸:
public static void main(String[] args) {
System.out.println(digui(30));
}
public static int digui(int n) {
if (n == 1 || n == 2)
return 1;
else
return digui(n - 1) + digui(n - 2);
}
動態規劃:
public class 斐波那契數列 {
public static int f(int n) {
if(n==0) {
return 0;//初始值爲0
}
if(n==1) {
return 1;//定義f(1)爲1,否者結果都是0;
}
int result=0;
int r1 = 0;
int r2 = 1;
for(int i = 2;i<=n; i++) {//斐波那契數列求解f(n)
result = r1+r2;
r1=r2;
r2=result;
}
return result;//返回結果
}
public static void main(String[] args) {
System.out.println("請輸入一個不超過39的整數:");
Scanner s=new Scanner(System.in);//從鍵盤輸入
int n;
n=s.nextInt();
double startTime=System.currentTimeMillis();
System.out.println(f(n));
double endTime=System.currentTimeMillis();
System.out.println("執行時間:"+(endTime-startTime)+"ms");//測試時間
}
}
4.如何實現跨域?(前後端分離?)
- jsonp
利用了 script 不受同源策略的限制
缺點:只能 get 方式,易受到 XSS攻擊 - CORS(Cross-Origin Resource Sharing),跨域資源共享
當使用XMLHttpRequest發送請求時,如果瀏覽器發現違反了同源策略就會自動加上一個請求頭 origin;
後端在接受到請求後確定響應後會在後端在接受到請求後確定響應後會在 Response Headers 中加入一個屬性 Access-Control-Allow-Origin;
瀏覽器判斷響應中的 Access-Control-Allow-Origin 值是否和當前的地址相同,匹配成功後才繼續響應處理,否則報錯
缺點:忽略 cookie,瀏覽器版本有一定要求 - 代理跨域請求
前端向發送請求,經過代理,請求需要的服務器資源
缺點:需要額外的代理服務器 - Html5 postMessage 方法
允許來自不同源的腳本採用異步方式進行有限的通信,可以實現跨文本、多窗口、跨域消息傳遞
缺點:瀏覽器版本要求,部分瀏覽器要配置放開跨域限制 - 修改 document.domain 跨子域
相同主域名下的不同子域名資源,設置 document.domain 爲 相同的一級域名
缺點:同一一級域名;相同協議;相同端口 - 基於 Html5 websocket 協議
websocket 是 Html5 一種新的協議,基於該協議可以做到瀏覽器與服務器全雙工通信,允許跨域請求
缺點:瀏覽器一定版本要求,服務器需要支持 websocket 協議 - document.xxx + iframe
通過 iframe 是瀏覽器非同源標籤,加載內容中轉,傳到當前頁面的屬性中
缺點:頁面的屬性值有大小限制
5.post和get區別
- GET提交的數據放在URL中,POST則不會。這是最顯而易見的差別。這點意味着GET更不安全(POST也不安全,因爲HTTP是明文傳輸抓包就能獲取數據內容,要想安全還得加密)
- GET回退瀏覽器無害,POST會再次提交請求(GET方法回退後瀏覽器再緩存中拿結果,POST每次都會創建新資源)
- GET提交的數據大小有限制(是因爲瀏覽器對URL的長度有限制,GET本身沒有限制),POST沒有
- GET可以被保存爲書籤,POST不可以。這一點也能感受到。
- GET能被緩存,POST不能
- GET只允許ASCII字符,POST沒有限制
- GET會保存再瀏覽器歷史記錄中,POST不會。這點也能感受到。
總之,兩者之間沒有本質區別,區別就在於數據存儲的位置。各自有適用環境,根據需求選擇合適的方法即可。
6.SQL分組排序查詢
分組:GROUP BY 字段
排序:ORDER BY 字段
7.synchronized和lock的區別。
- Lock提供了超時機制
超時機制可以讓我們更靈活的控制程序,而不必陷入等待鎖的死循環中,在一定時間內獲取不到鎖,線程就釋放出來繼續幹下面的事情,而synchronized一旦嘗試加鎖,就會死等,所以這種情況就有可能會出現死鎖。 - Lock阻塞的線程可以響應中斷
synchronized線程一旦獲取鎖失敗就會進行阻塞,而阻塞狀態下的線程是無法響應中斷(Interrupted)的,而Lock是支持中斷響應的,一旦發現可能出現死鎖,可立即中斷某個線程。 - Lock支持非阻塞的獲取鎖
Lock支持不阻塞的方式獲取鎖,以這種方式獲取鎖時會返回獲取鎖是否成功,當嘗試獲取鎖不成功時,線程並不會阻塞。 - Lock+Condition可以支持多個條件
synchronized只有一個等待隊列,任何情況的阻塞都是放在一個隊列裏面的,Lock可以創建多個Condition隊列,不同的Condition控制不同的條件,每個Condition有單獨的一個隊列。
8.tcp和ftp在7層中的位置
- 第一層:物理層
- 第二層:數據鏈路層802.2、802.3ATM、HDLC、FRAME RELAY
- 第三層:網絡層IP、IPX、APPLETALK、ICMP
- 第四層: 傳輸層TCP、UDP、SPX
- 第五層:會話層RPC、SQL、NFS 、X WINDOWS、ASP
- 第六層:表示層ASCLL、PICT、TIFF、JPEG、 MIDI、MPEG
- 第七層: 應用層HTTP,FTP, SNMP等
9.事務acid,MySQL如何實現原子性
- 原子性(atomicity)
- 一致性(consistency)
- 隔離性(isolation)
- 持久性(durability)
一個事務要麼全部提交成功,要麼全部失敗回滾,不能只執行其中的一部分操作,這就是事務的原子性
擴展連接:加粗樣式更多請點擊這裏
博主公衆號程序員小羊 只發面試相關推文