前端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:


A

B

A

B

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