精华内容
下载资源
问答
  • 2019-07-31 21:43:38

    js中的同步和异步的区别和理解

    前端面试中很容易问到的问题就是同步和异步的,其实很多人潜意识是知道怎么用,也大概明白一些,但是就是不知道该怎么表达,怎么去描述这个问题。我们可以按这个思路来回答—why-what-how
    why(为什么):js是单线程的,只能处理完一件事再做另外一件事,但是设想如果前面一件事花费的时间特别长,我们就只能一直等着他,就会阻塞下面的进程,这样程序运行时间增长,就会降低用户体验。(这里可能有人会想到,如果js是多线程的,不就解决这个问题了,但是其实这是由他的主要功能决定的,他的功能是与用户互动,以及操作DOM,如果在同一个时间,一个进程创建了这个节点,另一个删除了这个节点,那就很尴尬了
    what(同步和异步是什么):
    同步:按照一定的顺序去执行,执行完一个才能执行下一个
    异步:执行顺序是不确定的,由触发条件决定,什么时间执行也是不确定的,即使是定时器(下面做解释),异步处理可以同时执行多个。

    下面看一个小小的异步的案例

    <script>
            setTimeout(function() {
                console.log(1)
            })
            console.log(2);
        </script>
        2 1
    

    上面得执行结果是先打印2,然后再打印1,(下面解释)
    如果想知道里面的原理,我们可以从js的执行机制入手:
    首先了解两个概念,同步任务和异步任务:
    同步任务:只有前一个任务执行完成后,才可执行下一个任务,在主线程中
    异步任务:这个队列的所有任务都是不进入主线程执行,进入任务队列,被浏览提供的线程执行,当执行完毕后就会产生一个回调函数,并且通知主线程,在主线程执行完当前所执行的任务后,就会调取最早通知自己的回调函数,使其进入主线程中执行,比如ajax请求,再主线程中呈现的就是请求结果~

    js的执行机制
    1、先判断是js代码是同步的还是异步的,同步的就是同步任务,直接进入主线程处理,异步的就进入任务列表
    2、当任务列表内的异步处理达到了触发条件时候(点击事件被点击时),就进入任务队列
    3、当所有的主线程的任务执行完毕之后,才会将任务队列里面的任务(回调函数)添加到主线程。

    这也就是为什么会先执行同步,再执行异步的原因,也就是先打印2,再打印1的原因
    另外也是因为先执行同步,那么如果同步执行时间太长或者出错,死循环,就不会处理异步里面的回调函数了(上面两个问题的解释)

    总结:js的异步处理是和浏览器一起作用的,js是单线程的,但是浏览器是多线程的。浏览器可以同时处理多个异步任务。但是这些异步任务中的回调函数还是在js的主线程中一个一个执行的。

    以上均是我个人的理解,仅供参考。
    以下是参考的一些博客,不是太理解的可以看看:
    鱼活在水中的博客:https://blog.csdn.net/qq_39480597/article/details/79662913;
    [阮一峰老师的博客]http://www.ruanyifeng.com/blog/2014/10/event-loop.html

    更多相关内容
  • 使用 Python 理解非阻塞 I/O 关于使用 Python 理解非阻塞 I/O 的博客文章系列示例。
  • PID算法的理解与C语言实现及其几种变形,是补充博客【PID算法:https://blog.csdn.net/weixin_42881419/article/details/86551249】的技术文档。
  • 图卷积网络 GCN Graph Convolutional Network(谱域GCN)的理解和详细推导博客pdf 原博客链接:https://blog.csdn.net/yyl424525/article/details/100058264#comments_12499724
  • 面试题,说说你对spring IOCAOP的理解

    万次阅读 多人点赞 2019-07-06 19:50:42
    在面试中,经常会问,说说你对spring IOCAOP的理解,问题很宽泛,似乎不知道从何说起。 回答思路:1.先用通俗易懂的话解释下何为IOCAOP---------》2.各自的实现原理-----------》3.自己的项目中如何使用 以下是...

    https://blog.csdn.net/s20081294/article/details/44677387

    在面试中,经常会问,说说你对spring IOC和AOP的理解,问题很宽泛,似乎不知道从何说起。

    回答思路:1.先用通俗易懂的话解释下何为IOC和AOP---------》2.各自的实现原理-----------》3.自己的项目中如何使用

    以下是个人的一些总结,仅供参考。


    1.IOC

    许多应用都是通过彼此间的相互合作来实现业务逻辑的,如类A要调用类B的方法,以前我们都是在类A中,通过自身new一个类B,然后在调用类B的方法,现在我们把new类B的事情交给spring来做,在我们调用的时候,容器会为我们实例化。


    2. IOC容器的初始化过程

         资源定位,即定义bean的xml-------》载入--------》IOC容器注册,注册beanDefinition

        IOC容器的初始化过程,一般不包含bean的依赖注入的实现,在spring IOC设计中,bean的注册和依赖注入是两个过程,,依赖注入一般发生在应用第一次索取bean的时候,但是也可以在xm中配置,在容器初始化的时候,这个bean就完成了初始化。


    3. 三种注入方式:构造方法注入,setter注入,基于注解的注入。我们常用的是基于注解的注入

    4. bean是如何创建---  工厂模式

    5. 数据是如何注入-------反射

    6.AOP

            面向切面编程,在我们的应用中,经常需要做一些事情,但是这些事情与核心业务无关,比如,要记录所有update*方法的执行时间时间,操作人等等信息,记录到日志,

    通过spring的AOP技术,就可以在不修改update*的代码的情况下完成该需求。

    7.AOP的实现原理------代理

           

    以下文章本人觉得可以很好地回答前两个问题,特此转载供读者参考:

    http://blog.csdn.net/it_man/article/details/4402245     IOC的定义及实现原理---反射

    http://www.cnblogs.com/yanbincn/archive/2012/06/01/2530377.html AOP的定义实现原理—代理

    http://outofmemory.cn/code-snippet/3762/Spring-AOP-learn-example     AOP的应用的三种实现方式


    总结:

    IOC:控制反转也叫依赖注入,IOC利用java反射机制,AOP利用代理模式。所谓控制反转是指,本来被调用者的实例是有调用者来创建的,这样的缺点是耦合性太强,IOC则是统一交给spring来管理创建,将对象交给容器管理,你只需要在spring配置文件总配置相应的bean,以及设置相关的属性,让spring容器来生成类的实例对象以及管理对象。在spring容器启动的时候,spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的时候,就把它已经初始化好的那些bean分配给你需要调用这些bean的类。
    AOP:面向切面编程。(Aspect-Oriented Programming)
    AOP可以说是对OOP的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码,属于静态代理

    展开全文
  • getpost区别以及缓存问题的理解

    1.首先是区别。

    一般刚刚毕业的雏都会被问道这个:虽然用处不大,但是多少记得几个还是不错的。做过web的话,就好理解。


    2.就是get和post区别的缓存问题。

    首先要了解什么是缓存。

    HTTP缓存的基本目的就是使应用执行的更快,更易扩展,但是HTTP缓存通常只适用于idempotent request(可以理解为查询请求,也就是不更新服务端数据的请求),这也就导致了在HTTP的世界里,一般都是对Get请求做缓存,Post请求很少有缓存。

    get多用来直接获取数据,不修改数据,主要目的就是DB的search语句的感觉。用缓存(有个代理服务器的概念)的目的就是查db的速度变快。

    post则是发送数据到服务器端去存储。类似db里的update delete和insert语句的感觉。更新db的意思。数据必须放在数据库,所以一般都得去访问服务器端。


    3.安全问题。

    get到服务器过程中数据都是在url中,也就是说要传送的数据是可以在链接里面看到,就有安全问题。因为是一个url,所以就跟百度网址一样,好理解啦吧。

    post就不是在url里面所有还是比较安全的。


    展开全文
  • 参考:http://blog.sina.com.cn/s/blog_74f32c400101a1ah.html 参考文档:OpenCV中Mat的详解 ...经过查阅浏览大神的解释和博客,个人理解如下: 1、cvLoadImage()与imread()等函数区别深入了解

    参考:http://blog.sina.com.cn/s/blog_74f32c400101a1ah.html

    参考文档:OpenCV中Mat的详解


    之前一直再用IplImage类型,昨天接触Mat,使用起来发现有些不一样,函数与之前的IplImage的有一点点不一样

    经过查阅和浏览大神的解释和博客,个人理解如下:

    1、cvLoadImage()与imread()等函数区别深入了解:

    参考:http://blog.sina.com.cn/s/blog_74f32c400101a1ah.html

    c++有命名空间这一解释,using namespace  ;

    using namespace cv;的具体意思是:

    例如Cvrect和Rect以及cvresize和resize都是表示同一个东西,前者都是指cvrect,后者都是指cvresize,如果在程序开始写上 using namespace cv;则cvrect可以简写为rect,cvresize可以简写为resize,如果没有写上的using namespace cv;那就用cv......所有的以新风格命名的函数都在 cv 命名空间中,如果希望不要每次都输入 cv:: ,则可使用下面语句:using namespace cv;

    2、IplImage和Mat区别

    产生不同的原因:IplImage使用的是C结构,而Mat使用的是C++结构

    使用IplImage时需要手动管理内存,例如使用cvCreateImage(),cvReleaseImage()等函数创建和释放内存,而且使用不熟练的时候我们会发现IplImage经常出现内存异常,当使用熟练时,程序规模较小时,IplImage这是没有问题的,可是一旦代码变得越来越大他就会越来越来挣扎着处理这一切而不是着眼于实际解决自己的开发目标。

    Mat使用的是c++结构,c++中类的概念,在opencv2.0以上,引入例如C++接口,类的使用,使得代码变得更加简洁(c++中类使用. ,c中结构使用->)。

    关于使用Mat的第一件事是:不再需要手动分配其内存大小,当不需要使用它的时候也不再需要手动释放它,例如如下程序的区别:

    IplImage程序:

    #include "cv.h"
    #include "cxcore.h"
    #include "highgui.h"
    #include "stdio.h"


    int main(void)
    {
    IplImage* Image;
    IplImage* Image_Gray; // c语言中,声明需要在语句之前
    Image = cvLoadImage("D:\\opencv2.4.4\\lema.jpg", 1); // 载入图片,1-彩色
    Image_Gray = cvCreateImage(cvGetSize(Image), Image->depth, 1); // 创建内存
    cvCvtColor(Image, Image_Gray, CV_BGR2GRAY); // 彩色图->灰度图
    cvShowImage("Image", Image);
    cvShowImage("Image_Gray", Image_Gray);
    cvWaitKey(0);
    cvReleaseImage(&Image);
    cvReleaseImage(&Image_Gray);
    return 0;
    }

    Mat程序:

    #include "cv.h"
    #include "cxcore.h"
    #include "highgui.h"
    #include <iostream>
    using namespace std;
    using namespace cv;


    int main(void)
    {
    Mat Image = imread("D:\\opencv2.4.4\\lema.jpg",1);
    imshow("Image", Image);
    Mat Image_Gray;
    cvtColor(Image, Image_Gray, CV_BGR2GRAY, 0);
    imshow("Image_Gray", Image_Gray);
    waitKey(0);
    return 0;
    }

    Mat本质是由两个数据部分组成的类:矩阵头(包含信息有矩阵的大小、用于存储的方法、矩阵存储的地址等),一个指针(指向了像素值的矩阵,可根据选择用于存储的方法采用任何维度存储数据)。矩阵头部的大小是恒定的,然而,矩阵本身的大小因图像的不同而不同,通常是较大的数量级。因而,当你的程序中传递图像并在有些时候需要创建图像副本时,需要花费很大的代价生成图像矩阵本身,而不是图像的头部。

    opencv是图像处理库,它包含大量的图像处理函数,因此,图像传给库中的函数是一种常见的做法。为提高大程序的速度,opencv使用引用计数系统,其思想是Mat的每个对象都具有自己的头,让矩阵指针指向同一地址的实例之间共享该矩阵。此外,拷贝运算符将智能复制矩阵头部,也将复制指向矩阵的指针,但不复制矩阵本身。

    (时间原因,这次先码这些字...下次继续(二))

    展开全文
  • 关于按字寻址按字节寻址的理解

    千次阅读 多人点赞 2019-03-30 16:21:43
    学习《计算机组成原理》,这个概念一直理解不了。现在查阅了很多资料,尤其是 传送门 的博客,让我豁然开朗,感谢!!现在总结借鉴一下。 基本单位 MB就是通常说的兆 1024 = 1 KB = 1024 B 1 MB = 1024 KB 1...
  • 大家好,我是 Rocky0429,一个连数据结构算法都不会的蒟蒻… 学过数据结构算法的都知道这玩意儿不好学,没学过的经常听到...在简单的链表、栈队列这些我还能靠着在草稿上写写画画理解过程,但是到了数论、图...
  • 关于补码的理解

    万次阅读 多人点赞 2019-01-24 18:49:53
    之前一直对补码了解不多,或者说没去了解,最近看了一些博客和书,感觉有所收获,想再细致的总结一下,作个笔记 博客地址:http://www.ruanyifeng.com/blog/2009/08/twos_complement.html 这个博客是阮一峰老师在...
  • Java之FileChannel类的理解和使用

    万次阅读 多人点赞 2017-04-23 17:44:57
    Java之FileChannel类的理解和使用文章链接:知识点: FileChannel类及方法理解; 普通输入输出流复制文件; FileChannel复制文件; 新名词记录:{MappedByteBuffer:文件映射在内存的直接换成字节数据;FileLock:...
  • python3中的class的理解使用

    万次阅读 多人点赞 2020-06-25 10:01:30
    类(Class): 用来描述具有相同的属性方法的对象的集合。它定义了该集合中每个对象所共有的属性方法。 对象:它是类的实例化。 方法:指类中定义的函数。 类对象支持两种操作:属性引用 实例化。 # 属性引用的...
  • Caffe中crop_layer层的理解和使用

    万次阅读 多人点赞 2016-10-23 11:03:13
    前段时间一直忙着找工作博客已经很久没有写了,看到了... 本片博客主要是说明crop_layer(我叫他剪裁层)的理解和使用。在此申明博客中的内容部分引用其他博客我会给出连接地址,大家可以详细看原博客。  1、Crop_
  • js中的同步异步的个人理解

    万次阅读 多人点赞 2017-06-09 15:09:05
    你应该知道,javascript语言是一门“单线程”的语言,不像java语言,类继承Thread再来个thread.start就可以...其实个人觉得js官方的文档在使用两个词的时候并不准确,包括很多其他词汇,都只是听起来高深,但实际应用好
  • 小编刚开始学习java,学习的第一个项目中,所有都是通过set()get()方法来传值取值,但是小编总是分不清楚,所以写一篇博客来搞定这个问题。 二、对比记忆 先从字面上理解一下:set设置的意思,get获取的意思。很...
  • recyclerView = (RecyclerView) findViewById(R.id.recyclerView); LinearLayoutManager layoutManager = new LinearLayoutManager(this ); //设置布局管理器 recyclerView.setLayoutManager(layoutManager);...
  • AMP的推导和理解(Part-1)

    千次阅读 多人点赞 2021-11-30 18:17:41
    Approximate Message Passing, AMP # 前言 这篇博客是对AMP推导和理解的开端,主要介绍了在似然函数为Delta函数的硬约束问题下AMP的推导过程

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,232,318
精华内容 492,927
关键字:

关于blog的理解和使用