精华内容
下载资源
问答
  • 数据库视图是什么有什么区别和联系

    万次阅读 多人点赞 2019-01-21 17:42:19
    区别: 1、视图是已经编译好的sql语句,而表不是。 2、视图没有实际的物理记录,而表。 3、表是内容,视图是窗口。 4、表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时四对它进行修改,...

    目录

    区别

    联系

    视图有什么用

    性能损失解决方案

    示例


    区别

    1、视图是已经编译好的sql语句,而表不是;
    2、视图没有实际的物理记录,而表有;
    3、表是内容,视图是窗口;
    4、表占用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能用创建的语句来修改;
    5、表是三级模式结构中的概念模式,试图是外模式;


    6、视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合,从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构;
    7、表属于全局模式中的表,是实表,视图属于局部模式的表,是虚表;
    8、视图的建立和删除只影响视图本身,不影响对应的基本表;
    9、不能对视图进行update或者insert into操作。

    联系

    1、视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表,它依据基本表存在而存在;
    2、一个视图可以对应一个基本表,也可以对应多个基本表;
    3、视图是基本表的抽象和在逻辑意义上建立的新关系。
    总结:
    视图是一个子查询,性能肯定会比直接查询要低(尽管sql内部有优化),所以使用视图时有一个必须要注意的,就是不要嵌套使用查询,尤其是复杂查询。

    视图有什么用

    1、当一个查询需要频频的作为子查询使用时,视图可以简化代码,直接调用而不是每次都去重复写这个东西。
    2、系统的数据库管理员需要给他人提供一张表的某两列数据,而不希望他可以看到其他任何数据,这时可以建一个只有这两列数据的视图,然后把视图公布给他。

    性能损失解决方案

    对视图的查询语句进行优化。
    通常来说直接查询和查询视图是没有什么区别的(sql 本身会进行优化),除非是视图嵌套了视图,或者子查询很复杂要计算。
    特别说明:
    每次SELECT视图的时候,视图都会重新计算创建它的规则(sql算法),如果算法复杂,数据量大,就会比较慢,那样每次就很慢了。
    而且,表的索引对于视图view来说是无效的,它是全表扫描的。

    示例

    数据库是Oracle,使用的试图工具是免费版Navicat。

    定位到指定数据,点击视图,右边展示所有当前数据库的视图,双击后打开视图窗口,和表看起来并无区别:

    Ctrl+D 即可进入视图的SQL语句进行查看,如下:

    以上是对工作中使用到的视图的简略介绍,如有感悟后续更补,希望对你有帮助!

     

    展开全文
  • C语言Python语言有什么区别呢?

    万次阅读 多人点赞 2019-07-29 13:24:00
    因为我现在只会汇编C语言,所有我想在学习它之前先了解一下python我常用的C语言有什么不一样的地方,有什么优点,以及它可以应用在哪些领域等等。 所以我上网查了一下相关话题,在知乎上找到了一个比较被大众...

    最近几年python语言非常受大家欢迎,所以我也想学习了解下python语言,但是学习之前总是有很多疑问。

    因为我现在只会汇编和C语言,所有我想在学习它之前先了解一下python和我常用的C语言有什么不一样的地方,有什么优点,以及它可以应用在哪些领域等等。

    所以我上网查了一下相关话题,在知乎上找到了一个比较被大众接受的回答,所以赶快收藏起来;作者从以下三个进行了阐述:

    区别:

    一.

    C 属编译型语言;
    Python 属解释型语言;
    这点其他答主提过,确实是重要的区分点。编译型和解释型,在编程时的最大区别是必不必要写一个入口函数,在C语言里是 main,而 Python 可以不写。

    编译型的优点是“静态”,代码不能一行一行编译执行,必须作为整个工程来编译,这样便于类型检查,降低运行时错误率;运行时效率更高,因为编译器可以统筹各个方面,生成更优化的机器指令;一经编译便可直接以机器语言再次执行。

    解释型语言的优点是“动态”,代码的每一行可独立执行(代码块除外)。这样就可以灵活地进行实时交互,调整正在运行的程序,进行实时、异步的调试。

    比如 Python 的 CLI(命令行交互界面)就可以直接输入 Python 代码执行。这是 C 语言这样的编译语言难以做到的(调试模式下可以做到 C 表达式的实时计算,但达不到解释型语言的灵活度)。解释型语言的特性还让其适合做脚本语言。

    二者的缺点则互为对方占优的方面。编译型需要大量的编译时间,不够灵活。在大项目中,需求的更改可能导致巨大的重新编译时间。不过这被运行效率弥补,没有其他更大的缺点。而解释型语言被诟病得相对较多,比如因为不能事先编译,执行时都要先解释(本质上就是对单行的编译)成机器代码再执行,因此效率低很多。

    不过针对这点,Python 现在会像编译型语言一样把第一次执行时产生的字节码(虚拟机器代码)输出到 .pyc 文件,下次若源文件未改变,可直接执行字节码文件,从而提升了运行效率。

    另外,解释型语言难以实现静态类型检查,所以容易产生运行时错误,因此相对不适合用来做大项目。其实非要让编译型语言也能支持命令行交互也并非不可能——Haskell就是这样一个异类。它不仅能单行执行,甚至还能做静态类型检查,这个会在后面提到。

    二.

    C 是弱类型静态类型检查的;
    Python 是强类型动态类型检查的;
    对于不了解的人来说,这种说法可能会引起质疑。来一条一条看。

    C 是弱类型?各种「类型不匹配」快要把我搞疯了,这还弱吗?“静态类型检查”又是什么鬼?
    理解这件事情,要先知道 C 语言中类型的本质:一定长度的字节。C 中大多数基本类型都是某种长度的整数:int, short, long, long long, char,各种 unsigned,甚至指针也只是地址——机器字长度的整数而已,唯独 floatdouble 特殊。稍复杂点的,有数组和结构体,它们只是若干个整数或浮点数的组合。这种简单粗暴是因为 C 出生很早,那时冯诺依曼体系的高级语言大都与汇编很接近——汇编里没有类型,只有不同长度的字节。而 Python 中你是看不到 int, unsigned int, long 的区分的,因为它把不同长度的整数类型简化了,超出长度就自动扩展。

    扯远了。知道 C 中的类型大体就是各种整数,就能想到各种整数可以互相转化:int 转化 long 很好理解,charint 也经常互相转换,那你想过 int 能与任何一种指针强制转换吗?而这是源于 int 是最常用的整数类型,而地址也是最重要的机器整数。你还知道 void* 能与任何指针类型转换吗?其实所有的指针都可以任意互相转换,这意味着看似类型系统严格的 C 实际上并没有限制你去滥用它。这也不一定是滥用——库函数 malloc 的返回类型就是 void*,它表示你可以将它看作任何类型的指针。那不同指针能相互转化又怎样呢?我们知道 Python 里的对象是一系列属性和方法的集合,这在 C 中类似于结构体。对象的名字相当于指向它在内存中实体的指针——相当于结构体指针。不同结构体指针可以任意转化意味着……对,一个变量名可以代表任何对象,这不就是弱类型嘛!那什么叫静态类型检查呢?对,就是那个让你饱受编译错误苦恼的东西。我说过编译型语言是“静态”的,所以静态类型检查只可能在编译型语言实现(前述,Haskell 是个杂糅者,它是编译型语言,但又可以单行执行)。C 要求你写出每个变量、函数的类型,就是为了类型检查。但并不是静态类型检查就一定要标注类型(如 Haskell 就几乎完全可以不写)。

    Python “动态类型”,我可以理解,因为写的时候完全不用声明类型嘛。但你说它「强类型」?这我可不服了,哪个「强类型」语言可以随意给变量赋任意值的?前面说过,储存对象的变量实际上只是储存对象在内存中的地址(而「值类型」,如小整数,一般直接存储值)。变量存储在「栈」中,对象被放在「堆」中。「栈」是一个个整齐叠放的,「堆」是随机开辟的。当我们执行 a = [1,2,3] 这样一条语句,Python 运行环境在「堆」中生成新的 list 对象,将对象的首地址返回,赋给新变量 a 压入栈中。之后若执行 a = { 'x': 1 },只不过是将 a 中的地址换成字典对象的罢了。所以变量能储存任意对象不是因为变量本身能随意改变,而是指针可以指向任何东西。

    而同样是指针能指向任何东西,Python 为何是强类型?
    因为 Python 的对象都携带了类型信息。如果你对整数和字符串做加法,它就会报这样的错误:
    在这里插入图片描述
    这表明 Python 会对运行时的对象进行类型检查。这个其实还不够说明问题,因为加号不能用于 intstr 可能只是一种语义检查。那你可以想,当调用一个对象上不存在的方法会怎样,显然是会报错的。而更能说明问题的是这个:
    在这里插入图片描述
    这表明 Python 的类型检查甚至比 C 更强,连 float 都不会给你隐式转化为 int。而这肯定不会是编译器行为,因为内置函数 chr 在声明时是不会标注参数类型的。尽管 3.7 版本允许类型声明,但 Python 不会以此为依据进行报错。

    另外,真正的弱类型语言 JavaScript 对上述整数加字符串、调用不存在的方法、整数参数传浮点数都不会报错。由此,你可以相信 Python 属于强类型语言了吧。
    (补充:更彻底的弱类型语言比如 Lisp,甚至是在机器上实现弱类型的)

    三.

    Python 是原生支持面向对象范式的语言,C 不是。
    我没有说“Python 是面向对象语言,C 是面向过程语言”,因为面向对象和面向过程是编程模型和思想,Python 程序也能写得很“过程”,C 也有多种方法实现“面向对象”。但 Python 是原生支持面向对象范式的,它有 class 的封装,有继承、多态方法。C 要实现面向对象的特性,需要一些技巧。有一个知乎回答,我从它的第一个链接的 PDF 得到了很大启发。回答已经找不到了,但那个 PDF 还存着,书名叫《Object-Oriented ANSI-C》。

    以上三点是两个语言最大的区别。
    其他还有很多,不过都不涉及编程范式的核心。包括但不限于:

    • C 更偏向底层,抽象和语法糖更少,使用起来不如 Python 方便。但 C 更简单,如果有计算机体系的知识,精通起来比 Python 可能更容易。
    • C 的语法不如 Python 简洁。
    • C 函数声明的先后顺序影响其可被调用的区域,Python 不会。
    • C 需要自己维护堆内存,Python 有垃圾回收机制。
    • C 的跨平台性不如 Python(对于使用这两个语言的程序员而言),因为 C 是大多数操作系统的实现语言,各操作系统会提供标准之外的系统调用库,而不同操作系统上系统库中的函数和定义不同。Python 基于虚拟机执行字节码,只要官方提供了某操作系统的虚拟机实现,就能将 Python 代码无缝在各操作系统转移(os.system 等涉及特定操作系统的东西除外)。
    • C 除预编译指令外可以压缩到一行,Python 要用游标卡尺。。。等等

    以上关于C语言和python语言的区别,转自知乎;
    作者:麦克斯韦,原文链接

    应用领域

    对C语言和python语言的区别大致有了点点了解之后,又看了下它的主要应用领域

    1. Web开发
      小编我是从事Python Web开发的,所以把它放在了第一位。尽管今天PHP依然是Web开发的流行语言,但Python上升势头更劲。随着Python的Web开发框架逐渐成熟,比如耳熟能详的Django和flask, 你可以快速地开发功能强大的Web应用。小编我首推Django,强烈建议所以有志于从事Python Web开发的人掌握这门框架。无论是建大型网站,开发OA或Web API,Django都可以轻松胜任。

    2. 网络爬虫
      多亏有了Python,一个小白用几行代码就可以写个爬虫爬段子爬福利图了。然而爬虫的真正作用是从网络上获取有用的数据或信息,可以节省大量人工时间。能够编写网络爬虫的编程语言有不少,但Python绝对是其中的主流之一。Python自带的urllib库,第三方的requests库和Scrappy框架让开发爬虫变得非常容易。

    3. 计算与数据分析
      随着NumPy,SciPy,Matplotlib等众多程序库的开发和完善,Python越来越适合于做科学计算和数据分析了。它不仅支持各种数学运算,还可以绘制高质量的2D和3D图像。和科学计算领域最流行的商业软件Matlab相比,Python比Matlab所采用的脚本语言的应用范围更广泛,可以处理更多类型的文件和数据。

    4. 人工智能
      当前最热工资最高的IT工作就是从事人工智能领域的工程师了。Python在人工智能大范畴领域内的机器学习、神经网络、深度学习等方面都是主流的编程语言,得到广泛的支持和应用。最流行的神经网络框架如Facebook的PyTorch和Google的TensorFlow都采用了Python语言。你不学Python, 你会用那些框架吗?

    5. 自动化运维
      这几乎是Python应用的自留地,作为运维工程师首选的编程语言。在很多操作系统里,Python是标准的系统组件。大多数Linux发行版和MacOSX都集成了Python,可以在终端下直接运行Python。Python标准库包含了多个调用操作系统功能的库。通过pywin32这个第三方软件包,Python能够访问Windows的COM服务及其它WindowsAPI。使用IronPython,Python程序能够直接调用.NetFramework。一般说来,Python编写的系统管理脚本在可读性、性能、代码重用度、扩展性几方面都优于普通的shell脚本。

    6. 云计算
      Python的最强大之处在于模块化和灵活性,而构建云计算的平台的IasS服务的OpenStack就是采用Python的,云计算的其他服务也都是在IasS服务之上的。

    7. 网络编程
      Python提供了丰富的模块支持sockets编程,能方便快速地开发分布式应用程序。很多大规模软件开发计划例如Zope,Mnet, BitTorrent和Google都在广泛地使用它。

    8. 游戏开发
      很多游戏使用C++编写图形显示等高性能模块,而使用Python或者Lua编写游戏的逻辑、服务器。相较于Python,Lua的功能更简单、体积更小,然而Python则支持更多的特性和数据类型。Python的PyGame库也可用于直接开发一些简单游戏。

    以上关于Python的应用转自知乎,原文链接

    学习资源推荐☟☟☟

    推荐学习资源
    1.Legally Free Python Books List
    2.Python For You And Me
    3.菜鸟教程

    展开全文
  • sessioncookie有什么区别?】 每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析前端知识/技能,本篇分享的是: 【什么是...

    这里是修真院前端小课堂,本篇分析的主题是

    【什么是session?什么是cookie?session和cookie有什么区别?】

    每篇分享文从

    【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】

    八个方面深度解析前端知识/技能,本篇分享的是:

    【什么是session?什么是cookie?session和cookie有什么区别?】

     

    什么是SESSION?什么是COOKIE?SESSION和COOKIE有什么区别? 什么场景适用于SESSION?什么场景适用于COOKIE?

     

    1.背景介绍

    通过例子简单引入

    星巴克开始优惠活动,每消费10杯咖啡,会免费赠送1杯。考虑到一个人一次性消费10杯咖啡几乎不可能,所以需要采取某种方式来记录顾客的消费数量。

    解决方案

    1)店员很厉害,每个顾客的消费记录都记得一清二楚;

    2)分给顾客一张卡片,每消费一次记录一次;

    3)发给顾客一张卡片,上面有卡号,顾客每消费一次,由店员在操作机上记录一次。

    分析:方案一的可执行性几乎为0。方案二和方案三我们都见过。 而方案二和三正是对应的客户端记录和服务端记录。与之相对应的正是cookie和session。 好了,我们进入正题。

     

    由于HTTP是一种无状态协议,服务器没有办法单单从网络连接上面知道访问者的身份,为了解决这个问题,就诞生了Cookie

    Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie

    客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,

    以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

    实际就是颁发一个通行证,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理

    cookie 可以让服务端程序跟踪每个客户端的访问,但是每次客户端的访问都必须传回这些Cookie,如果 Cookie 很多,这无形地增加了客户端与服务端的数据传输量,

    而 Session 的出现正是为了解决这个问题。同一个客户端每次和服务端交互时,不需要每次都传回所有的 Cookie 值,而是只要传回一个 ID,这个 ID 是客户端第一次访问服务器的时候生成的, 而且每个客户端是唯一的。这样每个客户端就有了一个唯一的 ID,客户端只要传回这个 ID 就行了,这个 ID 通常是 NANE 为JSESIONID 的一个 Cookie。

     

    2.知识剖析

    cookie机制

     

     

     

     

     

    cookie的内容主要包括name(名字)、value(值)、maxAge(失效时间)、path(路径),domain(域)和secure

    name:cookie的名字,一旦创建,名称不可更改。

    value:cookie的值,如果值为Unicode字符,需要为字符编码。如果为二进制数据,则需要使用BASE64编码.

    maxAge:cookie失效时间,单位秒。如果为正数,则该cookie在maxAge后失效。如果为负数,该cookie为临时cookie,关闭浏览器即失效, 浏览器也不会以任何形式保存该cookie。如果为0,表示删除该cookie。默认为-1

    path:该cookie的使用路径。如果设置为"/sessionWeb/",则只有ContextPath为“/sessionWeb/”的程序可以访问该cookie。如果设置为“/”,则本域名下ContextPath都可以访问该cookie。

    domain:域.可以访问该Cookie的域名。第一个字符必须为".",如果设置为".google.com",则所有以"google.com结尾的域名都可以访问该cookie",如果不设置,则为所有域名

    secure:该cookie是否仅被使用安全协议传输。

    Session机制

    Session机制是一种服务端的机制,服务器使用一种类似散列表的结构来保存信息。

    当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端里的请求里是否已包含了一个session标识--sessionID,

    如果已经包含一个sessionID,则说明以前已经为此客户端创建过session,服务器就按照sessionID把这个session检索出来使用

    如果客户端请求不包含sessionID,则为此客户端创建一个session并且声称一个与此session相关联的sessionID,

    sessionID的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串(服务器会自动创建),这个sessionID将被在本次响应中返回给客户端保存。

     

    3.常见问题

     

    使用cookie的弊端

    使用session的弊端

    cookie和session的区别

     

    4.解决方案

    使用cookie的缺点

    如果浏览器使用的是cookie,那么所有的数据都保存在浏览器端,

    cookie可以被用户禁止

    cookie不安全(对于敏感数据,需要加密)

    cookie只能保存少量的数据(大约是4k),cookie的数量也有限制(大约是几百个),不同浏览器设置不一样,反正都不多

    cookie只能保存字符串

    对服务器压力小

    使用session的缺点

    一般是寄生在Cookie下的,当Cookie被禁止,Session也被禁止

    当然可以通过url重写来摆脱cookie

    当用户访问量很大时,对服务器压力大

    我们现在知道session是将用户信息储存在服务器上面,如果访问服务器的用户越来越多,那么服务器上面的session也越来越多, session会对服务器造成压力,影响服务器的负载.如果Session内容过于复杂,当大量客户访问服务器时还可能会导致内存溢出。

    用户信息丢失, 或者说用户访问的不是这台服务器的情况下,就会出现数据库丢失.

    cookie和session的区别

    具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到, 由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的

    cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session

    session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie

    单个cookie保存的数据不能超过4k,很多浏览器都限制一个站点最多保存20个cookie。

    可以将登陆信息等重要信息存放为session。

     

    5.扩展思考

    一般的验证方式

    1.生成3个COOKIE,分别使用用户名,登录时间,用户名+登录时间DES加密后的密文

    2.使用COOKIE与SESSION进行比对验证

    3.使用JWT生成TOKEN,解密出被加密的部分进行验证。

    JSON Web Token(JWT)是一个开放的标准(RFC7519),它定义了一个紧凑且自包含的方式,用于在各方之间以JSON对象安全地传输信息。

    一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名。

    JWT的头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。这也可以被表示成一个JSON对象。

    "typ":"JWT",

    "alg":"HS256"

    当然头部要进行BASE64编码

    签名(Signature)

    将上面的两个编码后的字符串都用句号.连接在一起(头部在前)例如头部使用base64编码后为123.456

    我们将上面拼接完的字符串用HS256算法进行加密。在加密的时候,还需要我们自己提供一个密钥(secret)。 得到789.

    将他们完全拼在一起,我们就得到了完整的JWT"123.456.789" 在我们的请求URL中会带上这串JWT字符串

    载荷

    iss: 该JWT的签发者, 是否使用是可选的;

    sub: 该JWT所面向的用户,是否使用是可选的;

    aud: 接收该JWT的一方, 是否使用是可选的;

    exp(expires): 什么时候过期,这里是一个Unix时间戳,是否使用是可选的;

    iat(issued at): 在什么时候签发的(UNIX时间),是否使用是可选的;

    nbf (Not Before):如果当前时间在nbf里的时间之前,则Token不被接受;一般都会留一些余地,比如几分钟;,是否使用是可选的;

    JWT的Token认证

     

     

     

     

     

     

     

     

     

     

     

    对Token认证的五点认识

    对Token认证机制有5点直接注意的地方:

    一个Token就是一些信息的集合;

    在Token中包含足够多的信息,以便在后续请求中减少查询数据库的几率;

    服务端需要对cookie和HTTP Authrorization Header进行Token信息的检查;

    基于上一点,你可以用一套token认证代码来面对浏览器类客户端和非浏览器类客户端;

    因为token是被签名的,所以我们可以认为一个可以解码认证通过的token是由我们系统发放的,其中带的信息是合法有效的;

     

    Token机制相对于Cookie机制又有什么好处呢?

    支持跨域访问:Cookie是不允许垮域访问,这一点对Token机制是不存在的,前提是传输的用户认证信息通过HTTP头传输.

    无状态(也称:服务端可扩展行):Token机制在服务端不需要存储session信息,因为Token 自身包含了所有登录用户的信息,只需要在客户端的cookie或本地介质存储状态信息.

    更适用CDN: 可以通过内容分发网络请求你服务端的所有资料(如:javascript,HTML,图片等),而你的服务端只要提供API即可.

     

    去耦: 不需要绑定到一个特定的身份验证方案。Token可以在任何地方生成,只要在你的API被调用的时候,你可以进行Token生成调用即可.

    更适用于移动应用: 当你的客户端是一个原生平台(iOS, Android,Windows 8等)时,Cookie是不被支持的(你需要通过Cookie容器进行处理),这时采用Token认证机制就会简单得多。

    CSRF:因为不再依赖于Cookie,所以你就不需要考虑对CSRF(跨站请求伪造)的防范。

    性能: 一次网络往返时间(通过数据库查询session信息)总比做一次HMACSHA256计算 的Token验证和解析要费时得多.

     

    不需要为登录页面做特殊处理:如果你使用Protractor 做功能测试的时候,不再需要为登录页面做特殊处理.

    基于标准化:你的API可以采用标准化的 JSON Web Token (JWT). 这个标准已经存在多个后端库(.NET, Ruby, Java,Python, PHP)和多家公司的支持(如:Firebase,Google,Microsoft).

     

    6.参考文献

    百度

    http://blog.csdn.net/fangaoxin/article/details/6952954/

    http://www.cnblogs.com/xiekeli/p/5607107.html

    由于HTTP是一种无状态协议,服务器没有办法单单从网络连接上面知道访问者的身份,为了解决这个问题,就诞生了Cookie

    Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie

    客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,

    以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

    实际就是颁发一个通行证,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理

     

    cookie可以让服务端程序跟踪每个客户端的访问,但是每次客户端的访问都必须传回这些 Cookie,如果 Cookie 很多,这无形地增加了客户端与服务端的数据传输量,

    而 Session 的出现正是为了解决这个问题。同一个客户端每次和服务端交互时,不需要每次都传回所有的 Cookie 值,而是只要传回一个 ID,这个 ID 是客户端第一次访问服务器的时候生成的, 而且每个客户端是唯一的。这样每个客户端就有了一个唯一的 ID,客户端只要传回这个 ID 就行了,这个 ID 通常是 NANE 为JSESIONID 的一个 Cookie。

     

    展开全文
  • typedefdefine有什么区别

    万次阅读 多人点赞 2018-07-04 21:18:33
    typedefdefine都是替一个对象取一个别名,以此增强程序的可读性,区别如下:(1)原理不同#define是C语言中定义的语法,是预处理指令,在预处理时进行简单而机械的字符串替换,不作正确性检查,只有在编译已被展开...

    typedef和define都是替一个对象取一个别名,以此增强程序的可读性,区别如下:

    (1)原理不同

    #define是C语言中定义的语法,是预处理指令,在预处理时进行简单而机械的字符串替换,不作正确性检查,只有在编译已被展开的源程序时才会发现可能的错误并报错。

    typedef是关键字,在编译时处理,有类型检查功能。它在自己的作用域内给一个已经存在的类型一个别名,但不能在一个函数定义里面使用typedef。用typedef定义数组、指针、结构等类型会带来很大的方便,不仅使程序书写简单,也使意义明确,增强可读性。

    (2)功能不同

    typedef用来定义类型的别名,起到类型易于记忆的功能。另一个功能是定义机器无关的类型。如定义一个REAL的浮点类型,在目标机器上它可以获得最高的精度:typedef long double REAL, 在不支持long double的机器上,看起来是这样的,typedef double REAL,在不支持double的机器上,是这样的,typedef float REAL

    #define不只是可以为类型取别名,还可以定义常量、变量、编译开关等。

    (3)作用域不同

    #define没有作用域的限制,只要是之前预定义过的宏,在以后的程序中都可以使用,而typedef有自己的作用域。

    (4)对指针的操作不同

    #define INTPTR1 int*

    typedef int* INTPTR2;

    INTPTR1 p1, p2;

    INTPTR2 p3, p4;

    含义分别为,

    声明一个指针变量p1和一个整型变量p2

    声明两个指针变量p3、p4

    #define INTPTR1 int*

    typedef int* INTPTR2;

    int a = 1;

    int b = 2;

    int c = 3;

    const INTPTR1 p1 = &a;

    const INTPTR2 p2 = &b;

    INTPTR2 const p3 = &c;

    上述代码中,

    const INTPTR1 p1是一个常量指针,即不可以通过p1去修改p1指向的内容,但是p1可以指向其他内容。

    const INTPTR2 p2是一个指针常量,不可使p2再指向其他内容。因为INTPTR2表示一个指针类型,因此用const限定,表示封锁了这个指针类型。

    INTPTR2 const p3是一个指针常量

    展开全文
  • 面试官:Java的重写重载有什么区别

    万次阅读 多人点赞 2020-02-21 10:50:29
    老读者都知道了,七年前,我从美女很多的苏州...他当时扔了一个面试题把我砸懵了:“王二,Java 的重写(Override)重载(Overload)有什么区别?” 那年我二十三岁,正值青春年华,大约就是周杰伦发布《八度空间...
  • ExceptionError有什么区别

    万次阅读 多人点赞 2018-06-27 18:54:38
    之前写了一个基础知识的文章,里边已经介绍了ExceptionError的区别,也介绍了异 常的使用规则,但是没有具体说一下在日常使用中的一个规范,有时,面试时会问到的一些 点。 本篇文章稍微梳理一下。 在日常...
  • GETPOST有什么区别

    万次阅读 多人点赞 2018-03-14 11:31:15
    如果人问你,GETPOST,有什么区别?你会如何回答? 我的经历 前几天人问我这个问题。我说GET是用于获取数据的,POST,一般用于将数据发给服务器之用。 这个答案好像并不是他想要的。于是他继续追问没有别...
  • 一文看懂arm架构x86架构有什么区别

    万次阅读 多人点赞 2019-05-11 20:28:30
    本文主要介绍的是arm架构x86架构的区别,首先介绍了ARM架构图,其次介绍了x86架构图,最后从性能、扩展能力、操作系统的兼容性、软件开发的方便性及可使用工具的多样性及功耗这五个方面详细的对比了arm架构x86...
  • 程序员码农有什么差别

    万次阅读 2017-03-24 17:51:46
     关键词:码农程序员的区别,码农是什么意思  从本质上来说,码农就是你让他写什么他就写什么的“机器人才”。所谓的码农大多都通晓几门编程语言,但是在商业方面却并不熟悉。当然也不感兴趣的因素在内,...
  • 抽象类接口有什么区别

    万次阅读 多人点赞 2018-08-25 20:36:35
    抽象类接口有什么区别什么情况下会使用抽象类和什么情况你会使用接口 这样的问题。本文我们将仔细讨论这些话题。 在讨论它们之间的不同点之前,我们先看看抽象类、接口各自的特性。 抽象类 抽象类是...
  • 引用指针有什么区别

    千次阅读 多人点赞 2019-04-06 14:14:13
    ①从现象上看,指针在运行时可改变其所指向的值,而引用一旦某个对象绑定后就不在改变。这句话可以这样理解:指针可以被重新赋值指向另一个不同的对象。但是引用总指向在初始化时被指定的对象,以后不能改变,...
  • JavaJava大数据有什么区别

    千次阅读 2020-04-02 15:25:57
    单单提起java或者大数据,很多人对此都一目了然,但对于Java大数据这样...JavaJava大数据有什么区别 Java大数据的关系: java是计算机的一门编程语言;可以用来做很多工作,大数据开发属于其中一种;大数据...
  • sleepwait有什么区别

    千次阅读 2019-04-24 21:40:01
    都用来进行线程控制,他们最大本质的区别是:sleep()不释放同步锁,wait()释放同步缩.; sleep()是让某个线程暂停运行一段时间,其控制范围是由当前线程决定,也就是说,在线程里面决定.好比如说,我要做的事情是 "点火-...
  • docxdoc有什么区别

    千次阅读 2017-01-24 17:29:09
    对于我们一般的电脑而言却是没有什么大用处,但是对于服务器、图书馆来说可用途大了,docx至少能节省一半的空间(图片少的时候更明显)这样图书馆的电子书就能多一倍,对于这类电脑而言是何等的恐怖……  docx与...
  • pythonscratch有什么区别发布时间:2020-08-24 10:16:05来源:亿速云阅读:202pythonscratch有什么区别?针对这个问题,这篇文章详细介绍了相对应的分析解答,希望可以帮助更多想解决这个问题的小伙伴找到更...
  • PingTraceroute有什么区别

    千次阅读 2019-04-26 09:16:07
    PingTraceroute区别 在计算机网络中,数据用称为数据包的小块发送。每个数据包都是单独传输的,也可能遵循不同的路由到达目的地。一旦原始消息的所有这些分组到达目的地,它们就被重新组装形成原始消息。但是,...
  • Office2016Office365有什么区别

    万次阅读 2019-09-26 17:49:17
    那么到底这两个版本有什么区别呢?哪个版本好呢?下面就来看看吧。 office2016office365最核心也是最简单的区别 office365是一个网络服务,office2016是一个本地应用;推出office 365,意味着微软打算将 office 软件...
  • Docker容器有什么区别

    千次阅读 2019-02-27 17:49:39
    Docker在2013年一炮而红,自那以后持续引起IT界的兴奋,已经成为容 器技术的代名词。容器技术早已存在,传统的容器技术没有成为主流的原因 是因为其未能提供标准化的应用运行时环境,而Docker为代表的新一代容 器...
  • 同步互斥有什么联系和区别

    千次阅读 2018-07-07 09:22:03
    同步互斥有什么联系和区别区别:互斥:是指三部在不同进程之间的若干程序片断,当某个进程运行其中一个程序片段时,其它进程就不能运行它们之中的任一程序片段,只能等到该进程运行完这个程序片段后才可以运行。...
  • 线程进程有什么区别(简单介绍)

    万次阅读 多人点赞 2018-08-13 19:23:00
    线程进程有什么区别(简单介绍) 简单介绍 一、线程的基本概念  线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度分派的基本单位,线程自己不拥有系统资源,只拥有一点...
  • ajaxfetch有什么区别

    千次阅读 2018-08-03 15:21:13
    1. ajaxfetch的区别 : (1)、ajax是针对MVC的编程,不符合现在前端MVVM的浪潮 (2)、ajax基于原生的XHR开发,XHR本身的架构不清晰,已经有了fetch的替代方案 (3)、fetch比较与ajax有着更好更方便的写法 ...
  • 什么是Asp.Net core ...如果不是又有什么区别呢? 下面我们分别说明一下,首先Asp.net core.net core肯定不是同一个东西(废话,如果是同一个东西还写这么多干啥!)。 Asp.net core其实就是仍然
  • JDKJRE有什么区别?

    万次阅读 多人点赞 2019-03-19 10:24:52
    JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试分析的工具:jconsole,jvisualvm等工具软件,还包含了java程序编写所需的文档demo例子程序。 3). JDK是整个Java开发的核心,...
  • 请注意以下明显的区别: 1.在设值注入方法支持大部分的依赖注入,如果我们仅需要注入int、stringlong型的变量,我们不要用设值的方法注入。对于基本类型,如果我们没有注入的话,可以为基本类型设置默认值。在...
  • 单片机soc有什么区别

    千次阅读 2017-02-28 08:32:04
    单片机soc的区别:: MCU,即微控制器,是以前的一种做法,类似于单片机,只是集成了一些更多的功能模块,它本质上仍是一个完整的单片机,处理器,各种接口,所有的开发都是基于已经存在的系统架构,应用者要做...
  • 静态IP动态IP有什么区别?什么是静态IP?  动态IP静态IP的区别在于:动态IP需要在连接网络时自动获取IP地址供用户正常上网,而静态IP是ISP在装机时分配给用户的IP地址,可以直接连接上网,不需要获取IP地址。...
  • 12306改签变更到站有什么区别

    千次阅读 2019-05-08 10:36:31
    有什么区别呢? 一、可改的内容不同 改签是只变更乘车日期、车次、席(铺)位,不变更发站到站(同城车站除外); 变更到站是可以重新选择新的目的地,在车票预售期内变更到站及乘车日期、车次、席...
  • P(A|B)P(AB)有什么区别

    万次阅读 2019-12-07 14:51:36
    P(A|B)P(AB)到底有什么区别? 先说一下二者之间的联系,P(AB) = P(A|B)*P(B),这是乘法公式。 当然最重要的是区别,这种区别包括时间空间上的区别 时间上的区别:在P(A|B)中,B先发生,我们已经知道了B后,在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,850,233
精华内容 740,093
关键字:

以和已经有什么区别