小米-前端面经

数据结构

二分查找,返回查询元素的索引
function binary_search(arr,low,high,key){
    if(low > high){
        return -1;
    }
    var mid = parseInt((high+low)/2);
    if(arr[mid]  ==key){
        return mid;
    }else if(arr[mid] >key ){
        high = mid -1;
        return binary_search(arr,low,high,key);
    }else if(arr[mid] >key){
        low = mid +1;
        return binary_search(arr,low,high,key);
    }
}
var arr = [1,2,3,4,5,6,7,8,9,10,11,27,44,86];
var result0 = binary_search(arr, 0, 13, 44);
console.log(result0);
写一个排序算法(快排)
var quickSort = function(arr) {
  if (arr.length <= 1) { return arr; }
  var pivotIndex = Math.floor(arr.length / 2);
  var pivot = arr.splice(pivotIndex, 1)[0];
  var left = [];
  var right = [];
  for (var i = 0; i < arr.length; i++){
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
  return quickSort(left).concat([pivot], quickSort(right));
};
内存中堆和栈的区别

0.申请方式和回收方式不同
1.申请后系统的响应
2.申请效率的比较

找一个数组中最长的连续递增的子区间长度[5,2,4,7,4,6,2]----->[2,3,6] = 3

利用动态规划来求解

求x的y次方

指数运算符

console.log((() => {
    let x = 2;
    let y = 3;
    x **= y;
    return x;})()); 

Math.pow():Math.pow(x, y)

前端部分

1. 用css3 实现一个未知宽高的div居中

1,组合使用display:table-cell和vertical-align、text-align,使父元素内的所有行内元素水平垂直居中(内部div设置display:inline-block即可

2,translate()函数是css3的新特性,在不知道自身宽高的情况下,可以利用它来进行水平垂直居中。
当使用:top:50%, left:50%,是以左上角为原点,故不处于中心位置。
translate(-50%, -50%)作用是,往上(X轴),左(Y轴)移动自身长度的50%,以使其居于中心位置。
3,用弹性布局实现垂直左右居中
display:flex; 设置.wrap为弹性布局
justify-content:center;定义项目在主轴(水平方向)上居中对齐
align-items:center;定义项目在交叉轴(垂直方向)上居中对齐

2. 写一段js继承的代码

 /* ------------------原型链继承------------------ */ 
 // 父类构造函数 
 function SuperType() { 
      this.property = true; } 
 // 父类原型方法 
 SuperType.prototype.getSuperValue = function () { 
      return this.property; } 
 //子类构造函数 function SubType() { 
      this.subproperty = false; }
// 子类原型对象指向父类实例实现继承 
SubType.prototype = new SuperType();
SubType.prototype.getSubValue = function () { 
       return this.subproperty; } var sub = new SubType(); 
       console.log(sub.getSuperValue());
/* ------------------原型链继承------------------ */

3. html+css定义一个三列的布局

1.  使用float实现三列左右固定宽高,中间自适应宽度


.left {  float: left;   100px;  background: red;  }   
.center {  background: blue;  margin-left: 100px;  margin-right: 100px;  }  
.right {  float: right;   100px;  background: yellow;  }

2.利用绝对定位

      .main-left{
             300px;
            height: 500px;
            background-color: #98FF1A;
            float: left;
            position: absolute;
            left: 0;
        }       
        .main-center{
            background-color: #8E8DCC;
            height: 500px;
        }
        .main-right{
             300px;
            height: 500px;
            background-color:#7CC0FF;
            float: right;
            position: absolute;
            right: 0;
        }

3,flex布局实现

.left {  100px;  background: red; }   
.center { background: blue; flex: 1;}    
.right {  100px;  background: yellow;}

4. 页面优化的方法

  1. 避免head标签js堵塞
  2. 减少head里面的css资源
  3. 延迟加载图片,优化图片
  4. 去掉不必要的插件
  5. 最小化重定向
  6. 利用浏览器缓存

5. git和svn的区别

  1. SVN是集中式版本控制系统,版本库是集中放在中央服务器的
  2. Git是分布式版本控制系统,它没有中央服务器的,每个人的电脑就是一个完整的版本库。
  3. GIT把内容按元数据(中介数据,描述数据的数据)方式存储,而SVN是按文件
  4. git和svn是通过.git和.svn文件,.git只是在本地的版本库的目录下存在,而.svn存在于每一个文件夹,当我们不需要版本控制的时候,要删除.svn很费时。

6. 输入一个网址后,计算机是怎么处理的

DNS 解析:将域名解析成 IP 地址
TCP 连接:TCP 三次握手
发送 HTTP 请求
服务器处理请求并返回 HTTP 报文
浏览器解析渲染页面
断开连接:TCP 四次挥手

7. 如何用js动态添加

功未成,业未就,不敢休!
原文地址:https://www.cnblogs.com/codehao/p/14781496.html