精华内容
下载资源
问答
  • 主要介绍了session和cookie作用原理,区别和用法,以及使用过程中的优缺点,通过列举区别和原理,使读者更能理解两者之间的关系,需要的朋友可以参考下
  • Spring Boot 面试精讲

    千人学习 2019-12-20 15:42:07
    面试了一些人,简历上都说自己熟悉 Spring Boot, 或者说正在学习 Spring Boot,一问他们时,都只停留在简单的使用阶段,很多东西都不清楚,也让我对面试者大失所望。本门课程就 Spring Boot讲解常见面试题。
  • 一、cookie机制session机制的区别  具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。  同时我们也看到,由于在服务器端保持状态的方案在客户端也需要保存一...

    一、cookie机制和session机制的区别
      具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。
      同时我们也看到,由于在服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上还有其他选择。

    二、会话cookie和持久cookie的区别
      如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里。
      如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。
      存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式。

    三、如何利用实现自动登录
      当用户在某个网站注册后,就会收到一个惟一用户ID的cookie。客户后来重新连接时,这个用户ID会自动返回,服务器对它进行检查,确定它是否为注册用户且选择了自动登录,从而使用户无需给出明确的用户名和密码,就可以访问服务器上的资源。

    四、如何根据用户的爱好定制站点
      网站可以使用cookie记录用户的意愿。对于简单的设置,网站可以直接将页面的设置存储在cookie中完成定制。然而对于更复杂的定制,网站只需仅将一个惟一的标识符发送给用户,由服务器端的数据库存储每个标识符对应的页面设置。

    五、cookie的发送
    1.创建Cookie对象
    2.设置最大时效
    3.将Cookie放入到HTTP响应报头
    如果你创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie:存储在浏览器的内存中,用户退出浏览器之后被删除。如果你希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该 cookie。
      发送cookie需要使用HttpServletResponse的addCookie方法,将cookie插入到一个 Set-Cookie HTTP请求报头中。由于这个方法并不修改任何之前指定的Set-Cookie报头,而是创建新的报头,因此我们将这个方法称为是addCookie,而非setCookie。同样要记住响应报头必须在任何文档内容发送到客户端之前设置。

    六、cookie的读取
    1.调用request.getCookie
      要获取有浏览器发送来的cookie,需要调用HttpServletRequest的getCookies方法,这个调用返回Cookie对象的数组,对应由HTTP请求中Cookie报头输入的值。
    2.对数组进行循环,调用每个cookie的getName方法,直到找到感兴趣的cookie为止
      cookie与你的主机(域)相关,而非你的servlet或JSP页面。因而,尽管你的servlet可能只发送了单个cookie,你也可能会得到许多不相关的cookie。
    例如:
      String cookieName = “userID”;
    Cookie cookies[] = request.getCookies();
    if (cookies!=null){
    for(int i=0;i
    Cookie cookie = cookies[i];
    if (cookieName.equals(cookie.getName())){
    doSomethingWith(cookie.getValue());
    }
    }
    }

    七、如何使用cookie检测初访者
    A.调用HttpServletRequest.getCookies()获取Cookie数组
    B.在循环中检索指定名字的cookie是否存在以及对应的值是否正确
    C.如果是则退出循环并设置区别标识
    D.根据区别标识判断用户是否为初访者从而进行不同的操作

    八、使用cookie检测初访者的常见错误
      不能仅仅因为cookie数组中不存在在特定的数据项就认为用户是个初访者。如果cookie数组为null,客户可能是一个初访者,也可能是由于用户将cookie删除或禁用造成的结果。
    但是,如果数组非null,也不过是显示客户曾经到过你的网站或域,并不能说明他们曾经访问过你的servlet。其它servlet、JSP页面以及非Java Web应用都可以设置cookie,依据路径的设置,其中的任何cookie都有可能返回给用户的浏览器。
      正确的做法是判断cookie数组是否为空且是否存在指定的Cookie对象且值正确。

    九、使用cookie属性的注意问题
      属性是从服务器发送到浏览器的报头的一部分;但它们不属于由浏览器返回给服务器的报头。 
      因此除了名称和值之外,cookie属性只适用于从服务器输出到客户端的cookie;服务器端来自于浏览器的cookie并没有设置这些属性。 
    因而不要期望通过request.getCookies得到的cookie中可以使用这个属性。这意味着,你不能仅仅通过设置cookie的最大时效,发出它,在随后的输入数组中查找适当的cookie,读取它的值,修改它并将它存回Cookie,从而实现不断改变的cookie值。

    十、如何使用cookie记录各个用户的访问计数
    1.获取cookie数组中专门用于统计用户访问次数的cookie的值
    2.将值转换成int型
    3.将值加1并用原来的名称重新创建一个Cookie对象
    4.重新设置最大时效
    5.将新的cookie输出

    十一、session在不同环境下的不同含义
      session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话是从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session。
      然而当session一词与网络协议相关联时,它又往往隐含了“面向连接”和/或“保持状态”这样两个含义。
      session在Web开发环境下的语义又有了新的扩展,它的含义是指一类用来在客户端与服务器端之间保持状态的解决方案。有时候Session也用来指这种解决方案的存储结构。

    十二、session的机制
      session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。
    但程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否包含了一个session标识-称为session id,如果已经包含一个session id则说明以前已经为此客户创建过session,服务器就按照session id把这个session检索出来使用(如果检索不到,可能会新建一个,这种情况可能出现在服务端已经删除了该用户对应的session对象,但用户人为地在请求的URL后面附加上一个JSESSION的参数)。
      如果客户请求不包含session id,则为此客户创建一个session并且生成一个与此session相关联的session id,这个session id将在本次响应中返回给客户端保存。

    十三、保存session id的几种方式
    A.保存session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。
    B.由于cookie可以被人为的禁止,必须有其它的机制以便在cookie被禁止时仍然能够把session id传递回服务器,经常采用的一种技术叫做URL重写,就是把session id附加在URL路径的后面,附加的方式也有两种,一种是作为URL路径的附加信息,另一种是作为查询字符串附加在URL后面。网络在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个session id。
    C.另一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。

    十四、session什么时候被创建
      一个常见的错误是以为session在有客户端访问时就被创建,然而事实是直到某server端程序(如Servlet)调用HttpServletRequest.getSession(true)这样的语句时才会被创建。

    十五、session何时被删除
    session在下列情况下被删除:
    A.程序调用HttpSession.invalidate()
    B.距离上一次收到客户端发送的session id时间间隔超过了session的最大有效时间
    C.服务器进程被停止
      再次注意关闭浏览器只会使存储在客户端浏览器内存中的session cookie失效,不会使服务器端的session对象失效。

    十六、URL重写有什么缺点
      对所有的URL使用URL重写,包括超链接,form的action,和重定向的URL。每个引用你的站点的URL,以及那些返回给用户的URL(即使通过间接手段,比如服务器重定向中的Location字段)都要添加额外的信息。
    这意味着在你的站点上不能有任何静态的HTML页面(至少静态页面中不能有任何链接到站点动态页面的链接)。因此,每个页面都必须使用servlet或 JSP动态生成。即使所有的页面都动态生成,如果用户离开了会话并通过书签或链接再次回来,会话的信息都会丢失,因为存储下来的链接含有错误的标识信息-该URL后面的SESSION ID已经过期了。  

    十七、使用隐藏的表单域有什么缺点
    仅当每个页面都是有表单提交而动态生成时,才能使用这种方法。单击常规的超文本链接并不产生表单提交,因此隐藏的表单域不能支持通常的会话跟踪,只能用于一系列特定的操作中,比如在线商店的结账过程

    十八、会话跟踪的基本步骤
    1.访问与当前请求相关的会话对象
    2.查找与会话相关的信息
    3.存储会话信息
    4.废弃会话数据

    十九、getSession()/getSession(true)、getSession(false)的区别
    getSession()/getSession(true):当session存在时返回该session,否则新建一个session并返回该对象
    getSession(false):当session存在时返回该session,否则不会新建session,返回null

    二十、如何将信息与会话关联起来
      setAttribute会替换任何之前设定的值;如果想要在不提供任何代替的情况下移除某个值,则应使用removeAttribute。这个方法会触发所有实现了HttpSessionBindingListener接口的值的valueUnbound方法。

    二十一、会话属性的类型有什么限制吗
      通常会话属性的类型只要是Object就可以了。除了null或基本类型,如int,double,boolean。
      如果要使用基本类型的值作为属性,必须将其转换为相应的封装类对象

    二十二、如何废弃会话数据
    A.只移除自己编写的servlet创建的数据:
    调用removeAttribute(“key”)将指定键关联的值废弃
    B.删除整个会话(在当前Web应用中):
    调用invalidate,将整个会话废弃掉。这样做会丢失该用户的所有会话数据,而非仅仅由我们servlet或JSP页面创建的会话数据
    C.将用户从系统中注销并删除所有属于他(或她)的会话
    调用logOut,将客户从Web服务器中注销,同时废弃所有与该用户相关联的会话(每个Web应用至多一个)。这个操作有可能影响到服务器上多个不同的Web应用。

    二十三、使用isNew来判断用户是否为新旧用户的错误做法
      public boolean isNew()方法如果会话尚未和客户程序(浏览器)发生任何联系,则这个方法返回true,这一般是因为会话是新建的,不是由输入的客户请求所引起的。
      但如果isNew返回false,只不过是说明他之前曾经访问该Web应用,并不代表他们曾访问过我们的servlet或JSP页面。
      因为session是与用户相关的,在用户之前访问的每一个页面都有可能创建了会话。因此isNew为false只能说用户之前访问过该Web应用,session可以是当前页面创建,也可能是由用户之前访问过的页面创建的。
      正确的做法是判断某个session中是否存在某个特定的key且其value是否正确

    二十四、Cookie的过期和Session的超时有什么区别
    会话的超时由服务器来维护,它不同于Cookie的失效日期。首先,会话一般基于驻留内存的cookie不是持续性的cookie,因而也就没有截至日期。即使截取到JSESSIONID cookie,并为它设定一个失效日期发送出去。浏览器会话和服务器会话也会截然不同。

    二十五、session cookie和session对象的生命周期是一样的吗
      当用户关闭了浏览器虽然session cookie已经消失,但session对象仍然保存在服务器端

    二十六、是否只要关闭浏览器,session就消失了
      程序一般都是在用户做log off的时候发个指令去删除session,然而浏览器从来不会主动在关闭之前通知服务器它将要被关闭,因此服务器根本不会有机会知道浏览器已经关闭。服务器会一直保留这个会话对象直到它处于非活动状态超过设定的间隔为止。
      之所以会有这种错误的认识,是因为大部分session机制都使用会话cookie来保存session id,而关闭浏览器后这个session id就消失了,再次连接到服务器时也就无法找到原来的session。
      如果服务器设置的cookie被保存到硬盘上,或者使用某种手段改写浏览器发出的HTTP请求报头,把原来的session id发送到服务器,则再次打开浏览器仍然能够找到原来的session。
      恰恰是由于关闭浏览器不会导致session被删除,迫使服务器为session设置了一个失效时间,当距离客户上一次使用session的时间超过了这个失效时间时,服务器就可以认为客户端已经停止了活动,才会把session删除以节省存储空间。
      由此我们可以得出如下结论:
      关闭浏览器,只会是浏览器端内存里的session cookie消失,但不会使保存在服务器端的session对象消失,同样也不会使已经保存到硬盘上的持久化cookie消失。

    二十七、打开两个浏览器窗口访问应用程序会使用同一个session还是不同的session
      通常session cookie是不能跨窗口使用的,当你新开了一个浏览器窗口进入相同页面时,系统会赋予你一个新的session id,这样我们信息共享的目的就达不到了。
    此时我们可以先把session id保存在persistent cookie中(通过设置session的最大有效时间),然后在新窗口中读出来,就可以得到上一个窗口的session id了,这样通过session cookie和persistent cookie的结合我们就可以实现了跨窗口的会话跟踪。

    二十八、如何使用会话显示每个客户的访问次数
      由于客户的访问次数是一个整型的变量,但session的属性类型中不能使用int,double,boolean等基本类型的变量,所以我们要用到这些基本类型的封装类型对象作为session对象中属性的值
      但像Integer是一种不可修改(Immutable)的数据结构:构建后就不能更改。这意味着每个请求都必须创建新的Integer对象,之后使用setAttribute来代替之前存在的老的属性的值。例如:
    HttpSession session = request.getSession();
    SomeImmutalbeClass value = (SomeImmutableClass)session.getAttribute(“SomeIdentifier”);
    if (value= =null){
    value = new SomeImmutableClass(…); // 新创建一个不可更改对象
    }else{
    value = new SomeImmutableClass(calculatedFrom(value)); // 对value重新计算后创建新的对象
    }
    session.setAttribute(“someIdentifier”,value); // 使用新创建的对象覆盖原来的老的对象

    二十九、如何使用会话累计用户的数据
      使用可变的数据结构,比如数组、List、Map或含有可写字段的应用程序专有的数据结构。通过这种方式,除非首次分配对象,否则不需要调用setAttribute。例如
    HttpSession session = request.getSession();
    SomeMutableClass value = (SomeMutableClass)session.getAttribute(“someIdentifier”);
    if(value = = null){
    value = new SomeMutableClass(…);
    session.setAttribute(“someIdentifier”,value);
    }else{
    value.updateInternalAttribute(…); // 如果已经存在该对象则更新其属性而不需重新设置属性
    }

    三十、不可更改对象和可更改对象在会话数据更新时的不同处理
    不可更改对象因为一旦创建之后就不能更改,所以每次要修改会话中属性的值的时候,都需要调用 setAttribute(“someIdentifier”,newValue)来代替原有的属性的值,否则属性的值不会被更新可更改对象因为其自身一般提供了修改自身属性的方法,所以每次要修改会话中属性的值的时候,只要调用该可更改对象的相关修改自身属性的方法就可以了。这意味着我们就不需要调用 setAttribute方法了。

    原文:https://blog.csdn.net/jzhf2012/article/details/8496502 
     

    展开全文
  • epoll、poll、select的原理和区别

    万次阅读 2021-08-24 13:58:38
    epoll有两种工作方式,ET-水平触发 LT-边缘触发(默认工作方式),主要区别是: LT,内核通知你fd是否就绪,如果没有处理,则会持续通知。而ET,内核只通知一次。 二、epoll的三个函数 int epoll_create(int size) ...

    一、什么是epoll?

    epoll是一种I/O事件通知机制,是linux 内核实现IO多路复用的一个实现。IO多路复用是指,在一个操作里同时监听多个输入输出源,在其中一个或多个输入输出源可用的时候返回,然后对其的进行读写操作。
    epoll有两种工作方式,ET-水平触发 和 LT-边缘触发(默认工作方式),主要区别是:
    LT,内核通知你fd是否就绪,如果没有处理,则会持续通知。而ET,内核只通知一次。
    什么是I/O?
    输入输出(input/output)的对象可以是文件(file), 网络(socket),进程之间的管道(pipe)。在linux系统中,都用文件描述符(fd)来表示。
    什么是事件?
    IO中涉及到的行为,建立连接、读操作、写操作等抽象出一个概念,就是事件,在jdk中用类SelectionKey.java来表示,例如:可读事件,当文件描述符关联的内核读缓冲区可读,则触发可读事件(可读:内核缓冲区非空,有数据可以读取);可写事件,当文件描述符关联的内核写缓冲区可写,则触发可写事件(可写:内核缓冲区不满,有空闲空间可以写入)。
    什么是通知机制?
    通知机制,就是当事件发生的时候,则主动通知。通知机制的反面,就是轮询机制。

    二、epoll的三个函数

     int epoll_create(int size)
    
    • size参数告诉内核这个epoll对象处理的事件大致数量,而不是能够处理的最大数量。
    • 在现在的linux版本中,这个size函数已经被废弃(但是size不要传0,会报invalid argument错误)。
    • 内核会产生一个epoll 实例数据结构并返回一个文件描述符,这个特殊的描述符就是epoll实例的句柄,之后针对该epoll的操作需要通过该句柄来标识该epoll对象。
    int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)
    
    • 将被监听的描述符添加到红黑树或从红黑树中删除或者对监听事件进行修改
    • 返回:0表示成功,-1表示错误,根据errno错误码判断错误类型
    • op参数说明操作类型:
      EPOLL_CTL_ADD:向interest list添加一个需要监视的描述符
      EPOLL_CTL_DEL:从interest list中删除一个描述符
      EPOLL_CTL_MOD:修改interest list中一个描述符
    • epoll_event取值:
      EPOLLIN:描述符处于可读状态
      EPOLLOUT:描述符处于可写状态
      EPOLLET:将epoll event通知模式设置成edge triggered
      EPOLLONESHOT:第一次进行通知,之后不再监测
      EPOLLHUP:本端描述符产生一个挂断事件,默认监测事件
      EPOLLRDHUP:对端描述符产生一个挂断事件
      EPOLLPRI:由带外数据触发
      EPOLLERR:描述符产生错误时触发,默认检测事件
    int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);
    
    • 阻塞等待注册的事件发生,返回事件的数目,并将触发的事件写入events数组中
    • events: 用来记录被触发的events,其大小应该和maxevents一致
    • maxevents: 返回的events的最大个数
    • 参数timeout描述在函数调用中阻塞时间上限,单位是ms:
              timeout = -1表示调用将一直阻塞,直到有文件描述符进入ready状态或者捕获到信号才返回;
              timeout = 0用于非阻塞检测是否有描述符处于ready状态,不管结果怎么样,调用都立即返回;
              timeout > 0表示调用将最多持续timeout时间,如果期间有检测对象变为ready状态或者捕获到信号则返回,否则直到超时。

    三、epoll原理图解

    请添加图片描述

    1.通过调用epoll_create,在epoll文件系统建立了个file节点,并开辟epoll自己的内核高速cache区,建立红黑树,分配好想要的size的内存对象,建立一个list链表,用于存储准备就绪的事件。
    2.通过调用epoll_ctl,把要监听的socket放到对应的红黑树上,给内核中断处理程序注册一个回调函数,通知内核,如果这个句柄的数据到了,就把它放到就绪列表。
    3.通过调用 epoll_wait,观察就绪列表里面有没有数据,并进行提取和清空就绪列表,非常高效。

    四、epoll与select、poll的对比

    1. 用户态将文件描述符传入内核的方式

    • select:创建3个文件描述符集并拷贝到内核中,分别监听读、写、异常动作。这里受到单个进程可以打开的fd数量限制,默认是1024。
    • poll:将传入的struct pollfd结构体数组拷贝到内核中进行监听。
    • epoll:执行epoll_create会在内核的高速cache区中建立一颗红黑树以及就绪链表(该链表存储已经就绪的文件描述符)。接着用户执行的epoll_ctl函数添加文件描述符会在红黑树上增加相应的结点

    2. 内核态检测文件描述符读写状态的方式

    • select:采用轮询方式,遍历所有fd,最后返回一个描述符读写操作是否就绪的mask掩码,根据这个掩码给fd_set赋值。
    • poll:同样采用轮询方式,查询每个fd的状态,如果就绪则在等待队列中加入一项并继续遍历。
    • epoll:采用回调机制。在执行epoll_ctl的add操作时,不仅将文件描述符放到红黑树上,而且也注册了回调函数,内核在检测到某文件描述符可读/可写时会调用回调函数,该回调函数将文件描述符放在就绪链表中。

    3. 找到就绪的文件描述符并传递给用户态的方式

    • select:将之前传入的fd_set拷贝传出到用户态并返回就绪的文件描述符总数。用户态并不知道是哪些文件描述符处于就绪态,需要遍历来判断。
    • poll:同select方式。
    • epoll:epoll_wait只用观察就绪链表中有无数据即可,最后将链表的数据返回给数组并返回就绪的数量。内核将就绪的文件描述符放在传入的数组中,所以只用遍历依次处理即可。这里返回的文件描述符是通过mmap让内核和用户空间共享同一块内存实现传递的,减少了不必要的拷贝。

    五、总结

    1.select和poll的动作基本一致,只是poll采用链表来进行文件描述符的存储,而select采用fd标注位来存放,所以select会受到最大连接数的限制,而poll不会。
    2.select、poll、epoll虽然都会返回就绪的文件描述符数量。但是select和poll并不会明确指出是哪些文件描述符就绪,而epoll会。造成的区别就是,系统调用返回后,调用select和poll的程序需要遍历监听的整个文件描述符找到是谁处于就绪,而epoll则直接处理即可。
    3.select、poll采用轮询的方式来检查文件描述符是否处于就绪态,而epoll采用回调机制。造成的结果就是,随着fd的增加,select和poll的效率会线性降低,而epoll不会受到太大影响,除非活跃的socket很多。
    4.epoll的边缘触发模式效率高,系统不会充斥大量不关心的就绪文件描述符
    5.select、poll都需要将有关文件描述符的数据结构拷贝进内核,最后再拷贝出来。而epoll创建的有关文件描述符的数据结构本身就存于内核态中,系统调用返回时利用mmap()文件映射内存加速与内核空间的消息传递:即epoll使用mmap减少复制开销。

    展开全文
  • 本文将介绍GPU的作用原理及与CPU、DSP的区别
  • session工作原理 (1)当有Session启动时,服务器生成一个唯一值,称为Session ID(好像是通过取进程ID的方式取得的)。 (2)然后,服务器开辟一块内存,对应于该Session ID。 (3)服务器再将该Session ID写入...

    Session用于保存每个用户的专用信息. 每个客户端用户访问时,服务器都为每个用户分配一个唯一的会话ID(Session ID) . 她的生存期是用户持续请求时间再加上一段时间(一般是20分钟左右).Session中的信息保存在Web服务器内容中,保存的数据量可大可小.当 Session超时或被关闭时将自动释放保存的数据信息.由于用户停止使用应用程序后它仍然在内存中保持一段时间,因此使用Session对象使保存用户数据的方法效率很低.对于小量的数据,使用Session对象保存还是一个不错的选择

    Cookie 用于保存客户浏览器请求服务器页面的请求信息,程序员也可以用它存放非敏感性的用户信息,信息保存的时间可以根据需要设置.如果没有设置Cookie失效日期,它们仅保存到关闭浏览器程序为止.如果将Cookie对象的Expires属性设置为Minvalue,则表示Cookie永远不会过期.Cookie存储的数据量很受限制,大多数浏览器支持最大容量为4K,因此不要用来保存数据集及其他大量数据.由于并非所有的浏览器都支持Cookie,并且数据信息是以明文文本的形式保存在客户端的计算机中,因此最好不要保存敏感的,未加密的数据,否则会影响网站的安全性

    session工作原理

    (1)当有Session启动时,服务器生成一个唯一值,称为Session ID(好像是通过取进程ID的方式取得的)。

    (2)然后,服务器开辟一块内存,对应于该Session ID。

    (3)服务器再将该Session ID写入浏览器的cookie。

    (4)服务器内有一进程,监视所有Session的活动状况,如果有Session超时或是主动关闭,服务器就释放改内存块。

    (5)当浏览器连入IIS时并请求的ASP内用到Session时,IIS就读浏览器Cookie中的Session ID。

    (6)然后,服务检查该Session ID所对应的内存是否有效。

    (7)如果有效,就读出内存中的值。

    (8)如果无效,就建立新的Session。

    展开全文
  • 51单片机串口通信原理讲解

    千次阅读 多人点赞 2019-10-24 23:54:50
    今天研究了一下51单片机的串口通信,使用的单片机是普中科技开发板,但实际上所运用到的硬件其他品牌单片机都相同,没有区别,总结一下,自己的理解看法。 通信原理 通信原理大致分为串行并行两种方法,各有优...

    51单片机串口通信


    今天研究了一下51单片机的串口通信,使用的单片机是普中科技开发板,但实际上所运用到的硬件和其他品牌单片机都相同,没有区别,总结一下,自己的理解和看法。

    通信原理

    通信原理大致分为串行和并行两种方法,各有优缺点,也不再这里赘述了,使用到的是串行通信的方法,简单介绍一下串行通信的原理,上图

    两个设备,一根互传线,每次传一组数据,总长度不一定8位,由51单片机内部设定来决定。设备间通信有许多接口方式,我用的是51上的串行接口,挂图:
    在这里插入图片描述
    SBUF:是指串行口中的两个缓冲寄存器,一个是发送寄存器,一个是接收寄存器,在物理结构上是完全独立的,但地址是重叠的。它们都是字节寻址的寄存器,字节地址均为99H,
    TXD:Transmit(tx) Data; RXD: Receive(rx) Data;
    两个口通过缩写记一下,我经常记不住(丢人),所以上面的那一个SBUF是发送,下面的是接收寄存器,发送或者接收的数据将暂时储存于里面,编程时直接赋值就行,TH1和TL1是时钟的配置系统,主要用于控制波特率,及每秒发送的总位数。(调试时一定要对应自己设置的波特率)

    控制寄存器SCON:内部结构下图,主要用于设置串口工作方式、接发送控制,以及状态位的控制
    在这里插入图片描述
    SM0和SM1是控制工作方式下图,控制每组总数据(起止位+数据位)的位数。移位则是一个脉冲一个一个脉冲的发送输入输出数据。
    SM2多机通信控制位,方式2和3时。SM2控制RB8是否会触发RI中断,SM2=1时R8=1激活中断(中断将数据读走),R8=0则不激活;SM2=0则失去控制作用。不论RB是否为0,RI都能激活,方式0时,SM2必须为0;方式1时,SM2=0,接受到停止位,R1中断就打开。
    REN允许串行接受位,REN=1,则打开接受,否则不能接受数据。
    TB,方式2和3中才用到,是奇偶效验位
    RB,在方式2、3中还是做奇偶效验位,在方式1中做数据停止位的存放位,用来将RI自动置1,启动中断。
    在这里插入图片描述
    PCON:用于控制波特率是否加倍,及SMOD=1,波特率加倍。复位时SMOD=0;
    在这里插入图片描述
    好了,大致通信原理讲到这里,下面到使用讲解!

    程序编写

    步骤:
    1、确定TMOD(计数器)工作方式
    2、配置TH1和TL1初值
    3、配置SCON、PCON
    4、打开中断允许位(总中断、串口中断),配置中断(中断内主要是SBUF读取发送数据),配置TCON打开中断即TR1置1.

    上代码:作用串口通信输入值,再返回

    include<reg52.h>
    typedef unsigned char u8;
    
    void ready(void)
    {
    	TMOD = 0X20;
    	TH1=0XFF;
    	TL1=0XF9; //波特率9600
    	SCON=0X50;//0101 0000
    	PCON=OX80;//1000 0000
    	EA=1; //打开总中断
    	ES=1; //打开串口中断,相当于ET1 ET0
    	TR1=1;//打开计数器,当其溢出时会给SMOD一个脉冲,接受和读取数据,达到设置波特率作用
    		  //当接受到停止位时RI=1触发中断
    }
    
    void main(void)
    {
    	ready();
    	while(1);
    }
    
    void time1(void) interrupt 4
    {
    	static u8 result;
    	result=SBUF;//进入配置中断,读取数据
    	RI=0;
    	SBUF=result;//将数据输入到SBUF里面发送
    	while(!TI);//等待发送完毕
    	TI=0;
    }
    

    一个简单的串口通信收发完成了

    展开全文
  • 压缩感知原理简介

    万次阅读 多人点赞 2019-07-15 21:51:23
    学过通信原理或信号与系统的都知道奈奎斯特采样定理,即想让采样之后的数字信号完整保留原始信号中的信息,采样频率必须大于信号中最高频率的2倍。原因是时域以τ为间隔进行采样,频域会以1/τ为周期发...
  • VPN协议与NAT协议的原理和区别

    千次阅读 多人点赞 2020-01-15 21:58:00
    可以发现VPN协议NAT协议都是通过重新构建一个IP首部来实现的,但他们的实现又有区别,VPN是将内部IP数据报加密后打包成外部IP数据报的数据部分,它的主要目的是为了数据的保密性,而NAT是纯进行地址转换,它的目的...
  • FCN原理浅析

    千次阅读 2018-12-17 18:37:42
    FCN全卷积网络CNN网络十分相似,主要区别在于取消全连接层并以卷积层的方式进行替代,最终输出heat map而不是feature map。本文选取AlexNet作为典型的CNN并将其转换为FCN以分析思路,AlexNet有五个卷积层、三个...
  • 一句话概括:计算机体系结构讲的是计算机有哪些功能(包括指令集、数据类型...实现乘法指令可以采用一个专门的乘法电路,也可以采用连续相加的加法电路来实现,这两者的区别。 组成原理是让你从整体上精略地让你了解...
  • 【控制理论】滑模控制最强解析

    万次阅读 多人点赞 2019-05-16 21:01:20
    更新,在知乎创建了一个专栏,主要包括一些控制理论机器人控制方面的知识。 https://zhuanlan.zhihu.com/p/78549442 滑模控制是一种相当简单而且控制性能优越的控制方法,但是绝大多数的工厂在做过程控制时还是...
  • 简介 名称 特点 电机的分类 PMSM的机械组成 本书目的 三相PMSM的数学建模 三相PMSM的基本数学模型 PMSM转子结构分类 PMSM模型假设 ...书中坐标系MATLAB自身坐标系之间的关系 同步旋转坐标系dq下的P
  • 正则化的作用以及L1L2正则化的区别

    万次阅读 多人点赞 2019-08-21 20:06:16
    正则化的主要作用是防止过拟合,对模型添加正则化项可以限制模型的复杂度,使得模型在复杂度性能达到平衡。 常用的正则化方法有L1正则化L2正则化。L1正则化L2正则化可以看做是损失函数的惩罚项。所谓『惩罚』...
  • Java基础知识面试题(2020最新版)

    万次阅读 多人点赞 2020-02-19 12:11:27
    文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JREJDK的关系什么是跨平台性?原理是什么Java语言有哪些...JavaC++的区别Oracle JDK OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...
  • 关于Cookie的原理作用区别以及使用

    万次阅读 多人点赞 2016-10-15 09:35:10
    1、cookie的作用: 我们在浏览器中,经常涉及到数据的交换,比如你登录邮箱,登录一个页面。我们经常会在此时设置30天内记住我,或者自动登录选项。那么它们是怎么记录信息的呢,答案就是今天的主角cookie了, ...
  • L1,L2正则化的原理区别

    千次阅读 2019-04-27 19:36:34
    L1,L2正则化的原理区别正则化的目的L0与L1范数L2范数L1,L2正则化区别正则化参数的选择参考 是为了求招做的笔记,笔记中的内容很大一部分来自于我所看的一大部分博客,这篇我主要看的是链接: link. 文中标号的部分...
  • 关于FEC的作用原理

    2011-03-09 21:20:43
    前向纠错码的详细原理与现代应用,对FEC的理解研究有系统的帮助
  • CookieSession的作用和工作原理

    万次阅读 多人点赞 2016-03-14 16:18:59
    在典型的网上购物场景中,用户浏览了几个页面,买了一盒饼干两饮料。最后结帐时,由于HTTP的无状态性,不通过额外的手段,服务器并不知道用户到底买了什么。为了做到这点,就需要使用到Cookie了。服务器可以设置或...
  • 了解阿克曼转向原理作用

    千次阅读 2020-05-20 07:50:00
    上次解答了儿子《棕色褐色的区别及联系》、《为什么空调能制冷滴水?》这两个问题,最近拼装了一辆工程车,涉及到了基于阿克曼原理的四轮转向装置,用我们外行的观点来看,就是前后轮转动角度是相...
  • Mybatis #$区别以及原理

    万次阅读 多人点赞 2019-06-04 15:38:42
    总结: #可以防止Sql 注入,它会将所有传入的参数作为一个字符串来...为什么 # $ 的作用不同,Mybatis 对他们做了哪些惨无人道的处理,我们看一下下面的例子,并追踪一下源码总结。 示例代码: 创建一个 tb...
  • var、let const 区别的实现原理

    千次阅读 2019-08-14 17:49:49
    varlet的区别,面试老生常谈的问题,大多数人回答可能就是作用变量提升这两点不同,少有人能够知道内在原理,这样的回答面试官会满意吗?(手动滑稽) 我们就从声明过程,内存分配,变量提升这三点来看这三...
  • 磁共振中的T1, T2 T2*的原理和区别

    万次阅读 多人点赞 2015-04-02 18:16:39
    从物理的角度,要理解这几个概念的区别,需要对原子核的磁化有所了解,本文通过一些图示对这几个概念进行简明的介绍。 首先,磁共振最基本的原理就是氢原子核在磁场中自旋运动时所具有的量子力学特性。在一个均匀磁场...
  • 计算机基础课程联系与区别定义:操作系统组成原理联系与指导:(一)(二)(三)(四)附图: 引言: 本文系各位大佬系统总结,因此也不是出自一处,因为本人在初学时一直搞不清楚他们的区别,头脑总是混乱的听讲,因此效果...
  • 解释一下这三个函数的用法、作用区别。 malloc() malloc() 在内存的动态存储区中分配一块长度为size字节的连续区域。参数size为需要的内存空间的长度,返回该区域的地址 示例: calloc...
  • 整理的不是太好,你可以参考上边的网址他参考的网址多看看线程池的资料也可以把我下边的代码拷到你本地运行下。我的例子中没有用到session所以直接绑定的service如果用session或者你项目请求入口类完全可以绑定...
  • NAPTNAT的工作原理及其区别

    万次阅读 2017-07-25 15:02:15
    NAPTNAT的工作原理及其区别 NAPT   网络地址端口转换NAPT  网络地址端口转换NAPT(Network Address Port Translation)是人们比较熟悉的一种转换方式。NAPT普遍应用于接入设备中,它可以将中小型的网络隐藏...
  • Mysql 主从复制 作用和原理

    万次阅读 多人点赞 2019-03-13 09:36:54
    然后从服务器会接收从哪个时刻起发生的任何更新,然后锁住并等到主服务器通知新的更新 二、主从复制的作用(好处,或者说为什么要做主从)重点? 做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从...
  • @Autowired@Resource 区别以及工作原理

    千次阅读 2017-06-06 21:09:51
    注解常见的作用有以下几种: 1.生成文档。这是最常见的,也是java 最早提供的注解。常用的有@see @param @return 等; 2.跟踪代码依赖性,实现替代配置文件功能。比较常见的是spring 2.5 开始的基于注解配置。作用...
  • Java面试题大全(2020版)

    万次阅读 多人点赞 2019-11-26 11:59:06
    发现网上很多Java面试题都没有答案,所以花了很长时间搜集...1. JDK JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境运行环境。 JRE:Java Runtime Environ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 372,402
精华内容 148,960
关键字:

原理和作用的区别