笔试、面试遇到的

border:none 和 border:0 的区别

  1. 性能上:
    ——将border属性设成0,虽然边框不见了,但是浏览器依然会对border-width和border-color进行渲染,会占用浏览器的资源
    ——将border设置成none,浏览器就不会做出渲染动作
  2. 兼容性:
    ——将border设成0,对于所有的浏览器效果都一样
    ——将border设成none。在IE6、7中无效,在其它浏览器中有效(如果想在使用border:none的同时兼容所有的浏览器,只需要加上background属性即可)

数组去重

(这里注意,ES6中新增SET结构,类似数组,但是内部成员唯一)

 let array = [1, 1, 1, 1, 2, 3, 4, 4, 5, 3];
 let set = new Set(array);
 //Set {1, 2, 3, 4, 5}

一步搞定:

let newArray=[...new Set(array)];
//或者 let newArray=Array.from(new Set(array));

快速排序

步骤:

  1. 检查数组的元素个数,如果小于等于1,就返回
  2. 选择"基准"(pivot),并将其与原数组分离,再定义两个空数组,用来存放一左一右的两个子集
  3. 开始遍历数组,小于"基准"的元素放入左边的子集,大于基准的元素放入右边的子集
  4. 使用递归不断重复这个过程,就可以得到排序后的数组
    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 (let 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));
    };

数组大小排序

这里还有 sort() 方法
本身sort 方法是对字符编码的顺序,需要自定义排序(如数值大小),则需要排序函数

function sortNumber(a,b){
  return a - b;//小到大 顺序
  // b-a ->大到小 倒序
}
let arr= new Array(3,1,2,5,7);
arr.sort(sortNumber)

倒置数组

array.reverse()//该方法改变原数组

创建对象方法

传送门(包括继承)继承

  1. 原始模式(字面量表示法)
  var Cat = {
    name : '',
    color : ''
  } 
  var cat1 = {}; // 创建一个空对象
  cat1.name = "大毛"; // 按照原型对象的属性赋值
  cat1.color = "黄色";

最简单的封装了,把两个属性封装在一个对象里面。但是,这样的写法有两个缺点,一是如果多生成几个实例,写起来就非常麻烦;二是实例与原型之间,没有任何办法,可以看出有什么联系

  1. 工厂模式创建对象
function createPerson(name,age,job){
 var o = new Object();
 o.name = name;
 o.age = age;
 o.job = job;
 o.sayName = function(){
  alert(this.name); 
 };
 return o; 
}
var person1 = createPerson('Nike',29,'teacher');
var person2 = createPerson('Arvin',20,'student');

在使用工厂模式创建对象的时候,我们都可以注意到,在createPerson函数中,返回的是一个对象。那么我们就无法判断返回的对象究竟是一个什么样的类型。于是就出现了构造函数

  1. 构造函数模式
      function Cat(name,color){
        this.name=name;
        this.color=color;
      }
      var cat1 = new Cat("大毛","黄色");
      alert(cat1.name); // 大毛
      alert(cat1.color); // 黄色

“构造函数”,其实就是一个普通函数,但是内部使用了this变量。对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例对象上

  1. Prototype模式
      function Cat(name,color){
        this.name = name;
        this.color = color;
      }
      Cat.prototype.type = "猫科动物";
      Cat.prototype.eat = function(){alert("吃老鼠")};
      var cat1 = new Cat("大毛","黄色");
      alert(cat1.type); // 猫科动物
      cat1.eat(); // 吃老鼠

这时所有实例的type属性和eat()方法,其实都是同一个内存地址,指向prototype对象,因此就提高了运行效率

  1. 组合使用构造函数模式和原型模式
function Person(name,age,job){
 this.name =name;
 this.age = age;
 this.job = job;
}
Person.prototype = {
 constructor:Person,
 sayName: function(){
 alert(this.name);
 };
}
var person1 = new Person('Nike',20,'teacher');
  • Ojbect.create()
  • 动态原型模式:仅在第一次调用构造函数时,将方法赋给原型对象的相应属性,其他示例的处理方式同构造函数模式(这种包括后面的都不常见)
  • 寄生构造函数模式:仅仅封装创建对象的代码,然后再返回新创建的对象,仍使用new操作符调用
  • 稳妥构造函数模式:没有公共属性,只有私有变量和方法,以及一些get/set方法,用以处理私有变量

一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?

  • 当发送一个URL请求时,不管这个URL是Web页面的URL还是Web页面上每个资源的URL,浏览器都会开启一个线程来处理这个请求,同时在远程DNS服务器上启动一个DNS查询。这能使浏览器获得请求对应的IP地址
  • 浏览器与远程Web服务器通过TCP三次握手协商来建立一个TCP/IP连接。该握手包括一个同步报文,一个同步-应答报文和一个应答报文,这三个报文在 浏览器和服务器之间传递。该握手首先由客户端尝试建立起通信,而后服务器应答并接受客户端的请求,最后由客户端发出该请求已经被接受的报文
  • 一旦TCP/IP连接建立,浏览器会通过该连接向远程服务器发送HTTP的GET请求。远程服务器找到资源并使用HTTP响应返回该资源,值为200的HTTP响应状态表示一个正确的响应
  • 此时,Web服务器提供资源服务,客户端开始下载资源。 请求返回后,便进入了我们关注的前端模块 简单来说,浏览器会解析HTML生成DOM Tree,其次会根据CSS生成CSS Rule Tree,而javascript又可以根据DOM API操作DOM

GET和POST的区别,何时使用POST?

  • GET:一般用于信息获取,使用URL传递参数,对所发送信息的数量也有限制,一般在2000个字符
  • POST:一般用于修改服务器上的资源,对所发送的信息没有限制。
  • GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值,
    也就是说Get是通过地址栏来传值,而Post是通过提交表单来传值。
  • 然而,在以下情况中,请使用 POST 请求: 无法使用缓存文件(更新服务器上的文件或数据库) 向服务器发送大量数据(POST
    没有数据量限制) 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值