zoukankan      html  css  js  c++  java
  • 概念整理

    1. 1:编程中的“同步、异步”的理解

      同步:是指各语句执行结束的顺序与语句执行开始的顺序相同,做完一件事情才能做另一件事情

      异步:是指各语句执行结束的顺序与语句执行开始的顺序并不一定相同,做一件事情,不影响做其它事情

      2:event loop

      上图中,主线程运行的时候,产生堆(heap)和栈(stack),栈中的代码调用各种外部API,它们在"任务队列"中加入各种事件(click,load,done)。只要栈中的代码执行完毕,主线程就会去读取"任务队列",依次执行那些事件所对应的回调函数。执行栈中的代码(同步任务),总是在读取"任务队列"(异步任务)之前执行。

       1 (function() {
       2     console.log('this is the start');
       3     (function(){
       4         console.log('222');
       5     })();
       6     setTimeout(function cb() {
       7         console.log('this is a msg from call back');
       8     },1000);
       9 
      10     console.log('this is just a message');
      11     
      12     setTimeout(function cb1() {
      13         console.log('this is a msg from call back1');
      14     }, 0);
      15     console.log('this is the end');
      16 })();
      17 // "this is the start"
      18 // ”222“
      19 // "this is just a message"
      20 // "this is the end"
      21 // "this is a msg from call back1"
      22 // "this is a msg from call back"

      上面代码中的setTimeout方法是一个异步任务,意味着只有当前脚本的所有代码执行完,系统才会去读取"任务队列"。

      3:网站打不开的原因及解决方法:

      一、服务器/空间不稳定

      和你选择的服务器或空间有关,打个比方,网站好比一个球,放在了一个摇摇晃晃的托盘上,用户想看看这个球可是抓不住又看不清。这时如果把球放在一个稳固的托盘上,把球稳稳拖住,流失的用户自然大大减少。

       解决方案:

      找个稳定的服务器很重要,至于靠谱的云主机怎么选,无外乎几点:

      1、品牌(见仁见智,只是参考因素,不是选择标准),如果你真的没有这方面的经验,可以选择品牌有保证的

      2、性价比,这个是最重要的,因为贵的不一定是好的,便宜的也不一定差。综合来说还是要看值不值

      以上两点是选择的门槛,选择后可以还需要判断这家的产品稳定性、访问速度等方面的性能如何,需要结合实际情况作判定

      推荐商家:

      阿里云:品牌大,技术值得认可,但用户量很多,服务跟不上,同时价格有些贵

      推荐指数:★★★★☆

      小鸟云:新品牌,同样值得信赖,国内来说性价比很高

      推荐指数:★★★★☆

      华为云:主流服务商,“上不碰应用,下不碰数据”,客户服务也很好

      推荐指数:★★★★☆

    2. 二、访问IP受限

      IP被拒绝访问,或者用户与网站之间的通信异常

      (注:这种情况只是其中一种,正常需要先判断网站是不是被攻击了,高峰期还是带宽不足等等情况导致的)

      解决方案:

      1、IP被限制了:换个ip访问;或者使用代理服务器伪装访问

      2、通信异常:重启电脑,或者路由设备

    3. 三、本地DNS缓存

      还有一种情况是由于域名重新解析后,本机访问域名还是指向原来的IP,这主要是因为本地DNS缓存导致的

      解决方案:

      更新DNS!可以选择电脑自动更新,需要时间,如果是有需求的可以手动清空缓存

      具体步骤:

      1、开始-运行-cmd

      2、运行:ipconfig /displaydns,查看下本机已缓存的dns信息

      3、运行:ipconfig /flushdns,清空DNS缓存

      4:主流浏览器内核及CSS3中一些私有属性的css前缀

      现代浏览器的内核,主流内容主要有Mozilla(Firefox浏览器)、WebKit(熟悉的有Safari、Chrome等浏览器)、Opera(Opera浏览器)、Trident(IE浏览器)。

      根据不同的内核,一些私有属性的css前缀不一样 

      WebKit内核   css前缀 -webkit-  

      Mozilla内核   css前缀 -moz-

      Trident内核   css前缀 -ms- 

      Opera 内核   css前缀 -o- 

      5:定义函数方法

      1:函数声明

      1 function functionName(arg0, arg1, arg2) { 
      2     //   函数体
      3 }

      函数声明的一个重要作用就是函数声明提升,意思是在执行代码之前会想读取函数声明。这意味着可以把函数声明放在调用它的语句后面。

      1 sayHi();
      2 function sayHi(){
      3     alert("Hi!");
      4 }

      这例子不会报错,因为在代码执行之前会先读取函数声明。

      2:函数表达式(第二种创建函数的方式),最常见的一种形式如下

      var functionName = function(arg0, arg1, arg2){ 
          //函数体   
      };

      函数表达式与其他表达式一样,在使用前必须先赋值,否则报错:

      1 sayHi(); //错误,函数还不存在
      2 var sayHi = function(){
      3      alert("Hi!");
      4 };

      note:如下情况时要选用第二种。

      1 //不要这样做
      2 if(condition){
      3     function sayHi(){
      4         alert("Hi!");
      5     }
      6 } else {
      7     function sayHi(){
      8         alert("Yo!");
      9     } 
      }
       1 //可以这样做      
       2 var sayHi;
       3     if(condition){
       4         sayHi = function(){
       5             alert("Hi!");
       6         };
       7     } else {
       8         sayHi = function(){
       9             alert("Yo!");
      10     };
      11 }

      6:深拷贝与浅复制

      1 //浅复制
      2 function extendCopy(p){
      3     var c = {};
      4     for(var i in p){
      5         c[i] = p[i]; 
      6     }
      7     c.uber = p ;
      8     return c ;
      9 }
       1 //深拷贝
       2 function deepCopy(p,c){
       3     var c = c || {};
       4     for(var i in p){
       5         if(typeof p[i] === 'object'){
       6             c[i] = (p[i].constructor === Array)? []:{};
       7             deepCopy(p[i],c[i]);
       8         }else{
       9             c[i]=p[i];
      10         }
      11     }
      12     return c;
      13 }

       7立即执行函数

       1 (function(a){
       2     console.log(a);   //firebug输出123,使用()运算符
       3 })(123);
       4 
       5 (function(a){
       6     console.log(a);   //firebug输出1234,使用()运算符
       7 }(1234));
       8 
       9 function sayhi(m){console.log(m)}("hi");      //不会执行
      10 !function sayhi(m){console.log(m)}("hi");    //立即执行,输出hi
      11 +function sayhi(m){console.log(m)}("hi");    //立即执行,输出hi
      12 ~function sayhi(m){console.log(m)}("hi");    //立即执行,输出hi
      13 var s=function sayhi(m){console.log(m)}('hi');//立即执行,输出hi

      前面两种( function(){…} )()和( function (){…} () )是立即执行函数的常用写法;第九行是个匿名函数,并不会立即执行,因为js将其当成是函数定义;其后三个前面分别加了一些符号,js就会将其解析成表达式,就会立即执行。第四个是真正意义上的函数表达式,所以,会立即执行,输出结果。

       8获取UA

      1 function whatBrowser(){
      2     document.Browser.Name.value=navigator.appName;
      3     document.Browser.Version.value=navigator.appVersion;
      4     document.Browser.Code.value=navigator.appCodeName;
      5     document.Browser.Agent.value=navigator.userAgent;
      6 }

      9样式优先级

      !important > 行内style > id > class > tag   (在同级样式按照申明的顺序后出现的具有更高的优先级)

       10:Promise的实现

       1 function getNumber(){
       2     var p = new Promise(function(resolve,reject){
       3         //做一些异步操作
       4         setTimeout(function(){
       5             var num = Math.ceil(Math.random()*10);//生成一个1-10的随机数
       6             if(num<=5){
       7                 resolve(num);
       8             }else{
       9                 reject("数字太大了");
      10             }
      11         },2000);
      12     });
      13     return p;
      14 }
      15 getNumber()
      16 .then(function(data){
      17     console.log("resolved");
      18     console.log(data);
      19     console.log(somedata);//此处的somedata未定义
      20 })
      21 .catch(function(reason){
      22     console.log("rejected");
      23     console.log(reason);
      24 })

      11:dom事件

      HTML事件:

      <input type="button" value="Click Me" onclick="alert(&quot;Clicked&quot;)" />

      在HTML中定义事件的处理程序可以包含要执行的具体操作,也可以调用在页面其他地方的脚本,如下

          <script type="text/javascript">

              function showMessage(){

                  alert("Hello world!");

              }

          </script>

          <input type="button" value="Click Me" onclick="showMessage()" />

      DOM0级事件处理方式:

      <p id="ppp">我们都是好孩子</p>

      document.getElementById("ppp").onclick=function(){
      alert(1);
      }
      document.getElementById("ppp").onclick=function(){
      alert(2);
      }

      最后只弹出2,后1个把前面覆盖

      DOM2级事件处理方式(可添加多个事件处理程序,而且可以是同一事件类型,不同效果叠加,先后执行):

      document.getElementById("ppp").addEventListener("click",function(){
      alert(1);
      })

      document.getElementById("ppp").addEventListener("click",function(){
      alert(2);
      })

      不仅不会覆盖,点击后先后弹出1和2 

      12:HTTP请求方法

      根据HTTP标准,HTTP请求可以使用多种请求方法。

      HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。

      HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

      序号方法描述
      1 GET 请求指定的页面信息,并返回实体主体。
      2 HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
      3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
      4 PUT 从客户端向服务器传送的数据取代指定的文档的内容。
      5 DELETE 请求服务器删除指定的页面。
      6 CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
      7 OPTIONS  允许客户端查看服务器的性能。
      8 TRACE 回显服务器收到的请求,主要用于测试或诊断。
  • 相关阅读:
    mybatis做like模糊查询
    mysql带有子查询的like查询
    form表单提交,后台怎么获取select的值?后台直接获取即可,和input方式一样。
    Spring MVC 向页面传值-Map、Model和ModelMap
    JavaWeb登录、注销、退出、记住用户名和密码
    EL表达式多条件或判断用法
    三级分销会员一次查询出来的SQL语句
    mysql 中合并查询结果union用法 or、in与union all 的查询效率
    关于取List中的指定几条数据以及注意事项
    BoxedApp Packer 将您的原始应用“打包”成单个完全的可执行二进制文件
  • 原文地址:https://www.cnblogs.com/Hale-Proh/p/6698845.html
Copyright © 2011-2022 走看看