1. 程式人生 > >2019年上海地區最新JAVAEE開發面試與筆試題

2019年上海地區最新JAVAEE開發面試與筆試題

druid val b-tree 語法糖 mysqld to_number 當前系統時間 語法 面試題

前端JS專題面試題:

1.JavaScript如何創建,添加,移除,查找節點.

            創建: element.cloneNode() : 克隆元素./ document.createElement(‘div‘) 創建元素.
            添加:  element.appendChild() 追加子元素. / element.innerHTML = element  設置內部元素./element.insertBefore() 在某元素前,添加新節點.
            移除: parentElement.removeChild( 子element ) / 子element.parentNode.removeChild( 子element): 父元素刪除子元素.
            查找: document.getElementById() / document.getElementsByTagName() / document.getElementsByName() / element.childNodes/element.parentNode / element.nextSibling

2.css中margin與padding的區別.

        1.元素的內邊距在邊框和內容區之間。控制該區域最簡單的屬性是 padding 屬性。
        2.圍繞在元素邊框的空白區域是外邊距。設置外邊距會在元素外創建額外的“空白”。設置外邊距的最簡單的方法就是使用 margin 屬性,這個屬性接受任何長度單位、百分數值甚至負值。

3.JavaScript面向對象的繼承是如何實現的.

js中: 主要通過原型屬性,實現對象的初始化成員定義. 並可以通過原型鏈實現對象的成員繼承.
jquery中: 提供了擴展插件的繼承方法: $.extend(); 其中底層源碼實現:也是通過prototype原型完成繼承功能.

4.javaScript中的對象模型有哪些.

    1.BOM對象模型: window.location.history.document.
    2.DOM對象模型:document為根對象. 所獲取到的form對象等網頁元素.四種分類: document對象. Element對象.attribute對象.event對象.
    3.內置系統對象模型:Array,Math等.
    4.自定義對象模型:var obj1 = { 屬性: 值, 函數名: function(){ }  };

5.javaScript編寫函數去除數組重復元素.

簡單方式:
function quchong(array){

var temp = []; //一個新的臨時數組
for(var i = 0; i < array.length; i++){
if(temp.indexOf(array[i]) == -1){
temp.push(array[i]);
}
}
return temp;
}

var aa = [1,2,2,4,9,6,7,5,2,3,5,6,5];
temp = quchong(aa);
alert("去重結果為:"+temp);

註: 還有其他更加高效方法.

6.css3中的flexbox頁面布局.

構建flexbox容器:
html:
<div class="flex-container">
<div class="flex-item ">A</div>
<div class="flex-item ">B</div>
<div class="flex-item ">A</div>
<div class="flex-item ">B</div>
</div>

css:
.flex-container{
display:flex;
width:600px;
height:230px;
background-color: #ccc;
}
.flex-item{
background-color:blue;
width: 100px;
margin: 5px;
}

備註:
屬性1:
flex-direction屬性,它的取值為row,column,column-reverse,row-reverse,默認值是row
默認以上容器為橫向排列,設置該屬性則縱向排列: flex-direction:column

屬性2:
justify-content屬性,對齊方式,可以取值為flex-start,flex-end,center,space-between,space-around
兩端對齊: justify-content:space-between

其他屬性...

7.javacript中的ES6語法特性.(例如: promise. 字符串的擴展.)

註: ES6是即將到來的新版本JavaScript語言的標準,一種新的 "語法糖".
第一點:
原JS代碼:
var a = {
f1: function() {

}

};
a.f1();

新es寫法:
var a = {
f1() { // 省略function關鍵字.

}

};
a.f1();

第二點:
原js寫法:
function A{
屬性: 值,
函數名: function(){
}
}

新es6寫法:
class A { //可以直接定義A類.
f1(name) {
this.name = name;
}
f2() {

}

}
var a = new A();
a.f2();

第三點:
只導入該腳本中的邏輯代碼執行,不導入其內部對象:
import ‘./module1.js‘;
導入單個或多個對象到當前頁面中:
import obj1 from ‘./module1.js‘;
import {obj1, obj2} from ‘./module1.js‘

其他特性 ....

8.jquery跨域問題.

跨域請求(跨服務器): 默認js將不支持.

$.ajax({
//跨域請求類型聲明:
dataType: ‘jsonp‘,
//jsonp的值自定義,如果使用jsoncallback,那麽服務器端,要返回一個jsoncallback的值對應的對象.
jsonp: ‘jsoncallback‘,
//要傳遞的參數,沒有傳參時,也一定要寫上
data: null,
});
註:該種方式: 將生成http://主機請求地址?jsoncallback=jsonp1354505244726&_=1354505244742
類似生成一個跟蹤編號,跟蹤兩個服務器之間的請求過程.

數據庫mysql/oracle專題面試題:

1.說明數據庫連接池機制的原理,和使用好處.

原理:
數據庫連接池的基本原理是在內部對象池中維護一定數量的數據庫連接,並對外暴露數據庫連接獲取和返回方法。如:
外部使用者可通過getConnection 方法獲取連接,使用完畢後再通過closeConnection 方法將連接返回,註意此時連接並沒有關閉,而是由連接池管理器回收,並為下一次使用做好準備。
好處:
1. 資源重用
2. 更快的系統響應速度
3. 一種資源分配手段
4. 統一的連接管理,避免數據庫連接泄漏
常用的連接池:
Druid(阿裏的一款,維護,日誌記錄與監控都非常好).
c3p0,dbcp傳統使用的.

2.mysql數據庫的索引分類. 和使用註意.

1.FULLTEXT全文索引:目前只有MyISAM引擎支持
使用: 可以在CREATE TABLE ,ALTER TABLE ,CREATE INDEX.
限制: 目前只有 CHAR、VARCHAR ,TEXT 列上可以創建全文索引
好處: 為了解決WHERE name LIKE “%zhang%"這類針對文本的模糊查詢效率較低的問題
2.HASH索引: key-value特性.
特點:
Hash 索引僅僅能滿足"=","IN"和"<>"查詢,不能使用範圍> / < 查詢。
Hash 索引在任何時候都不能避免表掃描。
3.B-tree樹狀索引:
在 Innodb裏,主要是primary key主鍵形態.
4.唯一索引:設置unique index.
5.復合索引: 同時設置多列為index 索引形態.
建議: 對於BTREE這種Mysql默認的索引類型,具有普遍的適用性

索引使用註意規則:
建議: 以下條件相反的字段則不適合設置索引.
第一、在經常需要搜索的列上,可以加快搜索的速度;
第二、在作為主鍵的列上,強制該列的唯一性和組織表中數據的排列結構;
第三、在經常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度;
第四、在經常需要根據範圍進行搜索的列上創建索引,因為索引已經排序,其指定的範圍是連續的;
第五、在經常需要排序的列上創建索引,因為索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間;
第六、在經常使用在WHERE子句中的列上面創建索引,加快條件的判斷速度。

3.mysql常用函數.oracle常用函數.

Mysql :
數值函數:
POW(x,y) : x的y次方.
RAND() : 隨機數0-1.
ROUND(x) : 四舍五入,取整.

日期函數:
Adddate( date1 , n ) : 將date1日期,加上n天數.註:可以為負數.
curdate()/ current_date(): 當前日期.yyyy-MM-dd
curtime()/current_time(): 當前時間: hh:mm:ss
current_timestamp() /now(): 當前日期時間: yyyy-MM-dd hh:mm:ss
date( “yyyy-MM-dd” ) : 將字符串轉換為mysql中的日期對象.
datediff(date1 , date2) : 計算date1-date2 = 日期天數差.
Date_format( date1 , format2 ) : 將日期格式化.格式:%y-%m-%d

字符函數: concat(str1 , str2 ... ) : 拼接字符串.
find_in_set( ch1 , str2 ): 查找str2中ch1的位置.
insert(str1,start , len ,str2): 將str1中的strart-len的位置換成str2.
upper(str1) : 轉換字符str1全部為大寫.
Lower(str1) : 轉換字符str1全部為小寫.
trim(str1) : 去除字符串str1 的前後空格.
Substring(str1 , start , length)/substr( str1 , start , length ): 提取str1中的start-length.

Oracle:
字符函數:
CONCAT(X,Y)
trim()
REPLACE(X,old,new)
SUBSTR(X,start[,length])

數值函數:
POWER(3,4)3的4次冪
ROUND(X),四舍五入。
TRUNC(x),直接截取,不四舍五入

日期函數:
ADD_MONTHS(d,n) d日期上加上n月.
EXTRACT(fmt FROM d),提取日期中的特定部分。
fmr為:YEAR、MONTH、DAY、HOUR、MINUTE、SECOND

轉換函數:
TO_CHAR(SYSDATE,‘YYYY"年"MM"月"DD"日" HH24:MI:SS‘)當前系統時間,轉換為指定日期格式字符串返回.
TO_DATE(X,[,fmt]) : 轉換為日期對象.
TO_NUMBER(X,[,fmt]) : 轉換為數值.

聚合函數(與mysql相同)等其他函數 ...

4.mysql存儲引擎: InnoDB與MyISAM區別.

事務支持
MyISAM不支持事務,而InnoDB支持

可移植性、備份及恢復
MyISAM:數據是以文件的形式存儲,跨平臺的數據轉移中會很方便
InnoDB:免費的方案可以是拷貝數據文件、備份 binlog,或者用 mysqldump,在數據量達到幾十G的時候就廢了.

鎖支持:
MyISAM:只支持表級鎖,用戶在操作myisam表時,select,update,delete,insert語句都會給表自動加鎖
InnoDB:支持事務和行級鎖,是innodb的最大特色. 但是InnoDB的行鎖,只是在WHERE的主鍵是有效的,非主鍵的WHERE都會鎖全表的

表主鍵
MyISAM:允許沒有任何索引和主鍵的表存在,索引都是保存行的地址。
InnoDB:如果沒有設定主鍵或者非空唯一索引,就會自動生成一個6字節的主鍵(用戶不可見)

CURD操作
MyISAM:如果執行大量的SELECT,MyISAM是更好的選擇。
InnoDB:如果你的數據執行大量的INSERT或UPDATE,出於性能方面的考慮,應該使用InnoDB表

外鍵
MyISAM:不支持
InnoDB:支持

5.drop,delete與truncate的區別.

DELETE語句執行刪除的過程是每次從表中刪除一行.事務中該操作方便回滾.
TRUNCATE TABLE 則一次性地從表中刪除所有的數據並不把單獨的刪除操作記錄記入日誌保存,刪除行是不能恢復的。執行速度快.
drop 不針對數據刪除.針對數據表結構刪除.

TRUNCATE索引和表的占用空間將恢復到初始化大小.
delete操作不會減少表或索引所占用的空間
drop語句將表所占用的空間全釋放掉。

註:以上總結:刪除速度特點: drop > truncate > delete

2019年上海地區最新JAVAEE開發面試與筆試題