精华内容
下载资源
问答
  • 在用tensorflow实现一些模型时候,...这个问题解决,需要我们知道tensorflow在构图时候,没有所谓的临时变量,只要有operator。那么tensorflow就会在构建图中增加这个operator所代表节点。所以,在运...

    在用tensorflow实现一些模型的时候,有时候我们在运行程序的时候,会发现程序占用的内存在不断增长。最后内存溢出,程序被kill掉了。

    这个问题,其实有两个可能性。一个是比较常见,同时也是很难发现的。这个问题的解决,需要我们知道tensorflow在构图的时候,是没有所谓的临时变量的,只要有operator。那么tensorflow就会在构建的图中增加这个operator所代表的节点。所以,在运行程序的过程中,内存不断增长的原因就是在模型训练迭代的过程中,tensorflow一直在帮你增加图的节点。导致内存占用越来越多。

    那么什么情况下就会像上面说的那样呢?我们举个例子:

    import tensorflow as tf

    x = tf.Variable(tf.constant(1))

    y = tf.constant(2)

    sess = tf.Session()

    sess.run(tf.global_variables_initializer())

    while True:

    print(sess.run(x+y))

    如果你运行上面这段代码,会发现在运行的过程中,内存占用越来越大。原因就在于sess.run(x+y)这个语句。我们知道在tensorflow中,所有的操作都是graph的节点。而在迭代的过程中,x+y这个operator(操作)是匿名的,所以它会不断地重复,在graph中创建节点,导致内存占用越来越大。

    所以要对上面的代码进行修改:

    z = x+y

    while True:

    print(sess.run(z))

    这样就不会出现问题了。

    上面只是一个简单的例子,我们可以很快发现问题。但是有时候我们的模型比较复杂,很难判断是否在迭代的过程中一直在增加节点。那怎么办呢?

    其实在tensorflow里面有个函数叫做:

    sess.graph.finalize()

    只要每一次构图完成后,调用这个函数。然后运行程序,如果你的程序在运行的过程中还一直新建节点,这个函数就会检测到,然后就会报错。这样你就知道你的程序中一定有不合理的地方。

    另一个导致内存暴涨的原因是,数据的加载问题。tensorflow现在有一个API接口,tf.data.Dataset 。这个接口里面有个函数叫做cache(filename)。cache函数的作用是将加载进来的数据存放到filename指定的地方。但是如果我们没有指定filename,数据就是一直存储在内存中。所以,随着迭代次数的增加,存储在内存中的数据越来越多,就会导致内存暴涨。所以要么不要使用这个函数,要么就要记得添加filename参数。

    以上这篇浅谈tensorflow之内存暴涨问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

    本文标题: 浅谈tensorflow之内存暴涨问题

    本文地址: http://www.cppcns.com/jiaoben/python/299573.html

    展开全文
  • 目录目录前言正文1 接口幂等1.1 案例2 解决方案2.1 ...本来想把对象存储过程和内存布局肝出来,但是临时产生了变化,哈哈,这部分内容我们留在下一期吧,有句话说好,好事多磨,对吧。 在实际项目开发中接...

    目录

    • 目录
    • 前言
    • 正文
      • 1 接口幂等性
      • 1.1 案例
      • 2 解决方案
      • 2.1 token机制
      • 2.2 去重表
      • 2.3 redis 的 SETNX键值
      • 2.4 状态机幂
      • 2.5 乐观锁(更新操作)
      • 2.6 悲观锁(更新操作)
    • 结语

    前言

    今天的主题:接口幂等性的解决方案。本来是想把对象的存储过程和内存布局肝出来的,但是临时产生了变化,哈哈,这部分内容我们留在下一期吧,有句话说的好,好事多磨,对吧。

    在实际项目开发中接口是我们在开发中经常接触到的,而且是经常经常要写,每一个项目可能都会伴随着大量的接口开发,在moon来涂鸦的这几个月,基本上就是在与接口作斗争了,新需求除了业务相关就是设计表和接口编写了。

    当然,在接口设计中我们要考虑很多问题,安全性,格式,设计等等,今天我们先来聊聊,在高并发环境下,接口幂等性的解决方案有哪些。

    正文

    1 接口幂等性

    就是说在多次相同的操作下保证最终的结果是一致的。

    其实这个概念还是比较简单的,很容易理解,那我们思考一个问题,如果不保证接口幂等性会有什么问题

    1.1 案例

    我们简单的举个例子,现在有一个接口,提供了转账的功能,a要给b转账1000元,正常情况下我们接口一次性就调用成功了,但是却因为网络抖动等其它原因没有成功,于是就开始不停的重试,突然网络好了,但是这时却连续发出去了三个请求,但是这个接口没有保证幂等性,于是从结果上来看就是a给b转了3000元,这显然是程序业务逻辑上不能接受的(其实moon可以当b的)。

    2 解决方案

    2.1 token机制

    token机制其实是比较简单的,我们先来简单的说一下流程。

    • 首先客户端先请求服务端,服务端生成token,每次请求生成的都是一个新的token(这个token一定要设置超时时间),将token存入redis当中,然后将token返回给客户端。
    • 客户端携带刚刚返回的token请求服务端做业务请求
    • 服务端收到请求,做判断。
      • 如果token在redis中,则直接删除该token,然后继续做业务请求。
      • 如果token不在redis中,代表已经执行过当前业务了,则不执行业务。

    图示如下:

    af208190166ab3b7c864b22675f3c48d.png

    token机制实现方式还是比较简单的,但是其实对于我们某些响应速度要求很高的业务不太友好,缺点就是需要多一次请求获取token的过程

    正常来说是每次请都会生成一个新的token,如果有极限情况下,有两个请求都带着相同的token进来,会存在都走入判断是否存在的过程,可能都会同时查到存在,这样也会有问题,针对这种情况,我们可以在删除前判断下是否存在,存在就删除,为了保证原子性,这部分逻辑建议使用lua脚本完成

    2.2 去重表

    去重表的机制是根据mysql唯一索引的特性来的,我们先来说下它的流程:

    • 首先客户端先请求服务端,服务端先将这次的请求信息存入一张mysql的去重表中,这张表要根据这次请求的其中某个特殊字段建立唯一索引,或者主键索引
    • 判断是否插入成功
      • 如果插入成功,则继续做后续业务请求。
      • 如果插入失败,则代表已经执行过当前请求。

    图示如下:

    fe136ccaaed0fc4ab7bd6d3d3a7528a7.png

    去重表机制的问题有两点:

    • 1.mysql容错性,也就是mysql本身如果不是高可用的那么业务可能会受到影响:
    • 2.既然是唯一索引,自然在写表的时候就没有办法用到changbuffer,每次都要从磁盘查出来判断再写入,对于一个高并发的接口来说,这些都是需要考虑的因素。

    2.3 redis 的 SETNX键值

    过程如下:

    • 首先客户端先请求服务端,服务端将能代表这次请求业务的唯一字段以 SETNX 的方式存入redis,并设置超时时间,超时时间可以根据业务权衡。
    • 判断是否插入成功
      • 如果插入成功,则继续做后续业务请求。
      • 如果插入失败,则代表已经执行过当前请求。

    这里我们是利用了redis setnx 的特性来完成的。

    setnx:只在键key不存在的情况下,将键key的值设置为value。若键key已经存在,则SETNX命令不做任何动作。命令在设置成功时返回1,设置失败时返回0

    图示如下:

    d7264dd9a64a2fcaf6430b702b24bf1d.png

    这种方案可以说是针对上一个方案改进的,效率也会提高很多。

    2.4 状态机幂

    这种机制适用于有不同状态的业务,moon的上一家公司就是这样做的。

    我们的订单系统,一条订单会有多个状态,如:待付款,锁定,已付款等状态,而这些状态都是有流程和逻辑的,我们可以根据这个状态判断是否执行后续业务操作。

    2.5 乐观锁(更新操作)

    就是数据库中增加版本号字段,每次更新根据版本号来判断

    过程如下:

    • 首先客户端先请求服务端,先查询出当前的version版本。
      • select version from .. where ..
    • 根据version版本来做sql操作
      • UPDATE .. SET ... version=(version+1) WHERE .. AND version=version;

    这个图示我就不再画了,还是比较简单的

    2.6 悲观锁(更新操作)

    假设每一次拿数据,都有认为会被修改,所以给数据库的行上锁,也是基于数据库特性来完成。

    当数据库执行select for update时会获取被select中的数据行的行锁,因此其他并发执行的select for update如果试图选中同一行则会发生排斥(需要等待行锁被释放),因此达到锁的效果。

    START TRANSACTION; # 开启事务
    SELETE * FROM TABLE WHERE .. FOR UPDATE;
    UPDATE TABLE SET ... WHERE ..;
    COMMIT; # 提交事务
    

    结语

    关于接口幂等性这部分内容,解决方案其实大同小异,很多方式的原理都是一样的,更多的其实都是在业务链路中去过滤,也会有很多是有消息中间件去解决的,默认在中间件这一层就直接过滤掉了,当然每种方式都有各自的优点和缺点,需要结合当前的业务去选择,今天的文章内容,你get到了吗?

    我是moon,下一篇,真的要讲jvm了~ 下次见~

    展开全文
  • 接口的幂等性的多重考虑,你会了吗?

    千次阅读 热门讨论 2020-11-17 17:17:04
    本来想把对象存储过程和内存布局肝出来,但是临时产生了变化,哈哈,这部分内容我们留在下一期吧,有句话说好,好事多磨,对吧。     在实际项目开发中接口我们在开发中

    目录

    前言

        今天的主题:接口幂等性的解决方案。本来是想把对象的存储过程和内存布局肝出来的,但是临时产生了变化,哈哈,这部分内容我们留在下一期吧,有句话说的好,好事多磨,对吧。

        在实际项目开发中接口是我们在开发中经常接触到的,而且是经常经常要写,每一个项目可能都会伴随着大量的接口开发,在moon来涂鸦的这几个月,基本上就是在与接口作斗争了,新需求除了业务相关就是设计表和接口编写了。

        当然,在接口设计中我们要考虑很多问题,安全性,格式,设计等等,今天我们先来聊聊,在高并发环境下,接口幂等性的解决方案有哪些。

    正文

    1 接口幂等性

         就是说在多次相同的操作下保证最终的结果是一致的。

        其实这个概念还是比较简单的,很容易理解,那我们思考一个问题,如果不保证接口幂等性会有什么问题

    1.1 案例

        我们简单的举个例子,现在有一个接口,提供了转账的功能,a要给b转账1000元,正常情况下我们接口一次性就调用成功了,但是却因为网络抖动等其它原因没有成功,于是就开始不停的重试,突然网络好了,但是这时却连续发出去了三个请求,但是这个接口没有保证幂等性,于是从结果上来看就是a给b转了3000元,这显然是程序业务逻辑上不能接受的(其实moon可以当b的)。

    2 解决方案

    2.1 token机制

        token机制其实是比较简单的,我们先来简单的说一下流程。

    • 首先客户端先请求服务端,服务端生成token,每次请求生成的都是一个新的token(这个token一定要设置超时时间),将token存入redis当中,然后将token返回给客户端。
    • 客户端携带刚刚返回的token请求服务端做业务请求
    • 服务端收到请求,做判断。
      • 如果token在redis中,则直接删除该token,然后继续做业务请求。
      • 如果token不在redis中,代表已经执行过当前业务了,则不执行业务。

        图示如下:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q1QNNZFG-1605604499314)(https://imgkr2.cn-bj.ufileos.com/7a91ce64-9c63-4d64-87dd-73a1a4dc7584.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=poJSuHUij9iq1FqiUWghjmc8r5Q%253D&Expires=1605668431)]

        token机制实现方式还是比较简单的,但是其实对于我们某些响应速度要求很高的业务不太友好,缺点就是需要多一次请求获取token的过程

        正常来说是每次请都会生成一个新的token,如果有极限情况下,有两个请求都带着相同的token进来,会存在都走入判断是否存在的过程,可能都会同时查到存在,这样也会有问题,针对这种情况,我们可以在删除前判断下是否存在,存在就删除,为了保证原子性,这部分逻辑建议使用lua脚本完成

    2.2 去重表

        去重表的机制是根据mysql唯一索引的特性来的,我们先来说下它的流程:

    • 首先客户端先请求服务端,服务端先将这次的请求信息存入一张mysql的去重表中,这张表要根据这次请求的其中某个特殊字段建立唯一索引,或者主键索引
    • 判断是否插入成功
      • 如果插入成功,则继续做后续业务请求。
      • 如果插入失败,则代表已经执行过当前请求。

        图示如下:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z2ECvxRG-1605604499316)(https://imgkr2.cn-bj.ufileos.com/d4796cc2-3c43-4b50-bc73-60496c5efb44.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=Q9PrFYKNh6WfFa3HBrvwQCZ0gTo%253D&Expires=1605682457)]

        去重表机制的问题有两点:

    • 1.mysql容错性,也就是mysql本身如果不是高可用的那么业务可能会受到影响:
    • 2.既然是唯一索引,自然在写表的时候就没有办法用到changbuffer,每次都要从磁盘查出来判断再写入,对于一个高并发的接口来说,这些都是需要考虑的因素。

    2.3 redis 的 SETNX键值

        过程如下:

    • 首先客户端先请求服务端,服务端将能代表这次请求业务的唯一字段以 SETNX 的方式存入redis,并设置超时时间,超时时间可以根据业务权衡。
    • 判断是否插入成功
      • 如果插入成功,则继续做后续业务请求。
      • 如果插入失败,则代表已经执行过当前请求。

        这里我们是利用了redis setnx 的特性来完成的。

        setnx:只在键key不存在的情况下,将键key的值设置为value。若键key已经存在,则SETNX命令不做任何动作。命令在设置成功时返回1,设置失败时返回0

        图示如下:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4veJGy5D-1605604499318)(https://imgkr2.cn-bj.ufileos.com/8f7ce2f5-bdb1-4412-8426-551ddc08fe1d.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=IF2Y%252FdRvP7WeDMUJxxh%252Bco%252FqSI0%253D&Expires=1605682556)]

        这种方案可以说是针对上一个方案改进的,效率也会提高很多。

    2.4 状态机幂

        这种机制适用于有不同状态的业务,moon的上一家公司就是这样做的。

        我们的订单系统,一条订单会有多个状态,如:待付款,锁定,已付款等状态,而这些状态都是有流程和逻辑的,我们可以根据这个状态判断是否执行后续业务操作。

    2.5 乐观锁(更新操作)

        就是数据库中增加版本号字段,每次更新根据版本号来判断

        过程如下:

    • 首先客户端先请求服务端,先查询出当前的version版本。
      • select version from … where …
    • 根据version版本来做sql操作
      • UPDATE … SET … version=(version+1) WHERE … AND version=version;

        这个图示我就不再画了,还是比较简单的

    2.6 悲观锁(更新操作)

        假设每一次拿数据,都有认为会被修改,所以给数据库的行上锁,也是基于数据库特性来完成。

         当数据库执行select for update时会获取被select中的数据行的行锁,因此其他并发执行的select for update如果试图选中同一行则会发生排斥(需要等待行锁被释放),因此达到锁的效果。

    START TRANSACTION; # 开启事务
    SELETE * FROM TABLE WHERE .. FOR UPDATE;
    UPDATE TABLE SET ... WHERE ..;
    COMMIT; # 提交事务
    

    结语

        关于接口幂等性这部分内容,解决方案其实大同小异,很多方式的原理都是一样的,更多的其实都是在业务链路中去过滤,也会有很多是有消息中间件去解决的,默认在中间件这一层就直接过滤掉了,当然每种方式都有各自的优点和缺点,需要结合当前的业务去选择,今天的文章内容,你get到了吗?

        我是moon,下一篇,真的要讲jvm了~ 下次见~

    展开全文
  • 经常被面试官问到JavaScript数据类型知识你真知道吗?...或者说在计算机内存中开辟一个空间区域用来临时性数据,那么这个区域或者容器就是变量。 二、如何声明变量? 一般情况下声明变量: 变量类型

    经常被面试官问到的JavaScript数据类型知识你真的知道吗?


    一、什么是变量?

    ​ 装载程序运行过程中临时性数据的容器,我们统称为变量。或者说在计算机内存中开辟一个空间区域用来临时性数据,那么这个区域或者容器就是变量。

    二、如何声明变量?

    一般情况下声明变量: 变量类型 变量名称;

    变量声明并初始化 : 变量类型 变量名称 = 值

    JavaScript声明并初始化变量 : var 变量名 = 值 ;

    **注意:**在JS中我们使用var关键字来声明变量,那么var就是声明变量的的标志

    三、JavaScript数据类型

    1、数据类型的作用?

    ​ 计算机为了记录不同的数据,使用数据类型的概念对数据进行分类操作,那么这样的结果就有利于数据的存储和使用。

    2、常用数据类型

    • number:数字类型,包括整数、小数等……

    • string:字符串类型,赋值使用单引号或双引号

    • boolean:布尔类型 ,值为 真(true或1) 或 假(false或0),因此boolean类型可以直接和number类型进行数学运算

    • null:表示空对象,如果定义的变量将来准备保存对象,可以将变量初始化赋值为null,在页面上获取不到对象,返回的值就是null

      **注意:**null从严格意义上来讲它不是数据类型,因为它衍生自object类型,代表一个空对象,所以它是数据值,而不是数据类型,但为了方便记忆我们将它归类于数据类型

    • undefined:未定义的数据类型,变量声明未初始化,它的值就是undefined

    • object:对象类型

    四、注意:

    ​ 1、数学运算符除了"+"之外的其他运算符不能用作两个非数字或者boolean类型之间的运算。

    ​ 2、"+"在number类型或者boolean类型之间起到数学加法作用,在字符串与其他数据类型之间起到连接字符串的作用。

    ​ 3、一个等号代表赋值,两个等号代表比较数值,三个等号代表比较结构(数据类型、数值)

    五、如何查看数据的类型?

    ​ 在JavaScript中,通过 typeof(数据或变量)方法来判断一个数据的类型。

    var a = 10;
    console.log(typeof(a));
    console.log(typeof("你好"))
    

    六、数字类型之间的转换

    • parseInt:将一个数据类型转换为小数。首先必须要保证这个字符串要以小数点或者数字开头,从字符串中的第一个小数或者小数点字符开始往后转换,直到遇到第一个非数字类型或者字符串结束。
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    
    <body>
        <script>
            var a = ".123se"
            console.log(typeof(parseFloat(a)))
        </script>
    </body>
    
    </html>
    
    • parseFloat:将一个数据转换为整数。首先必须要保证这个字符串要以小数点或者数字开头,从字符串中的第一个小数或者小数点字符开始往后转换,直到遇到第一个非数字类型或者字符串结束。
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    
    <body>
        <script>
            var a = ".123se"
            console.log(typeof(parseInt(a)))
        </script>
    </body>
    
    </html>
    
    展开全文
  • 今天分享一道常见的面试题:i++线程安全的吗? 既然这么问了,答案肯定不安全啊,至于为啥不安全,咱们来说道说道 分析 前提 谈到线程安全问题,那什么情况下会出现线程安全的问题呢,就是当多个线程操作同一个...
  • 右键,属性,也会出现兼容性的选项。 例四:RealOne Gold关闭时出现错误,以前一直使用正常,最近却在每次关闭时出现“0xffffffff”指令引用的“0xffffffff”内存。该内存不能为 “read” 的提示。解决方法:当使用...
  •  分配内存是通过一个链表来组织,检查内存泄漏则是检查此链表。但是windows没有提供方法来访问这个链表。Visual Leak Detector使用了一个小技巧来得到它。首先在堆上申请一块临时内存,则该内存地址可以...
  • :787190917C语言常量和变量对计算机来...永久性的数据,一般存储在硬盘中,只要硬盘没坏数据都存在的,电脑关机重启后依然存在。程序运行过程中,动态产生的的临时数据,一般存储在内存中,软件退出或者电脑关机时...
  • 什么NoSQL数据库?

    2014-07-21 23:24:20
    在需要严格保证数据一致性和处理完整性的情况下,用关系型数据库肯定没有错的。但是有些情况不需要JOIN,对上述关系型数据库的优点也没有什么特别需要,这时似乎也就没有必要拘泥于关系型数据库了。 关系型数据库...
  • 这样合法的和可移植的吗? 2.8 我听说结构可以赋给变量也可以对函数传入和传出。为什么K&R1却明确说明不能这样做? 2.9 为什么不能用内建的==和!=操作符比较结构? 2.10结构传递和返回如何实现的? 2.11 如何...
  • 目录 1 内存模型相关概念 2 并发编程中三个概念 1.原子 2.可见 3.有序  ...3 Java内存模型 ...1.volatile关键字两层语义 ...2.volatile保证原子吗?...由于程序运行过程中的临时数据存放在主存(物理
  • 《你必须知道495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    这样合法的和可移植的吗? 23  2.8 我听说结构可以赋给变量也可以对函数传入和传出。为什么K&R1却明确说明不能这样做? 25 2.9 为什么不能用内建的==和!=操作符比较结构? 26 2.10 结构传递和返回如何实现...
  • 这样合法的和可移植的吗?  2.8 我听说结构可以赋给变量也可以对函数传入和传出。为什么K&R1;却明确说明不能这样做?  2.9 为什么不能用内建的==和!=操作符比较结构?  2.10结构传递和返回如何实现的? ...
  • 这样合法的和可移植的吗? 23  2.8 我听说结构可以赋给变量也可以对函数传入和传出。为什么K&R1却明确说明不能这样做? 25 2.9 为什么不能用内建的==和!=操作符比较结构? 26 2.10 结构传递和返回如何实现...
  • 这样合法的和可移植的吗? 52 2.8 我听说结构可以赋给变量也可以对函数传入和传出。为什么K&R1;却明确说明不能这样做? 54 2.9 为什么不能用内建的==和!=操作符比较结构? 55 2.10 结构传递和返回如何实现的...
  • 这样合法的和可移植的吗? 2.8 我听说结构可以赋给变量也可以对函数传入和传出。为什么K&R1;却明确说明不能这样做? 2.9 为什么不能用内建的==和!=操作符比较结构? 2.10结构传递和返回如何实现的? 2.11 ...
  • 外排序

    2017-08-14 14:43:05
    而当数据很大时候,这时内存不能一次装下所有数据,就必须对数据进行分割,根据内存大小将数据分割成L 份,每次将部分数据装入内存,在内存中可以用内排序将数据排序,然后写入到临时文件中,总共形成L 个文件。...
  • 有效性的要求还必须在程序执行中对按照某种运算规则解释的源输入表达式数据流的正确性给出相应的反馈信息。例如,如果源输入表达式书写错误,并且这种错误解释器内核不能给出自动的纠正策略,则应该报错而立即终止...
  • LINGO软件学习

    2009-08-08 22:36:50
    LINGO内置建模语言一种描述语言,用它可以描述现实世界中一些问题,然后再借助于LINGO求解器求解。因此,集属性值一旦在模型中被确定,就不可能再更改。在LINGO中,只有在初始部分中给出集属性值在以后...
  • 7.3 多版本控制读一致性的含义 229 7.3.1 一种会失败的常用数据仓库技术 229 7.3.2 解释热表上超出期望的I/O 230 7.4 写一致性 233 7.4.1 一致读和当前读 233 7.4.2 查看重启动 235 7.4.3 为什么重启动对我们...
  • 很显然,我们想实现临时地给出一段代码,然后将其编译成程序集(可以内存中,也可以输出一个真正dll) 2. 什么时候需要用到动态编译? 呃,这个问题有点难,简单地说,就是要动态时候啦。呵呵。我们有...
  • 7.3 多版本读一致性的含义 240 7.3.1 一种会失败的常用数据仓库技术 240 7.3.2 解释热表上超出期望的I/O 241 7.4 写一致性 244 7.4.1 一致读和当前读 244 7.4.2 查看重启动 247 7.4.3 为什么重启动对我们很...
  • 12.7.3 两义性的归属问题 203 12.7.4 减少两义性产生的混淆问题 205 12.7.5 虚基类不会产生两义性 206 12.8 总结 207 第13章 虚函数 209 13.1 指向对象的指针 209 13.2 虚函数 210 13.3 拳击游戏 212 13.4 ...
  • 零起点学通C++多媒体范例教学代码

    热门讨论 2010-11-30 09:35:13
    12.7.3 两义性的归属问题 12.7.4 减少两义性产生的混淆问题 12.7.5 虚基类不会产生两义性 12.8 总结 第13章 虚函数 13.1 指向子对象的父指针 13.2 虚函数 13.3 拳击游戏 13.4 继承是否可以实现多态性 13.5 在编译时...
  • Linux核心具有 Windows 无法比拟稳定和高效率,在不使用 X Windows 情况 下,它占用系统资源较少,可以使一台 Intel486摇身一变成为高效工作站。对于想要学习 UNIX用户来说,使他们熟悉 UNIX 操作环境,...
  • 12.7.3 两义性的归属问题 12.7.4 减少两义性产生的混淆问题 12.7.5 虚基类不会产生两义性 12.8 总结 第13章 虚函数 13.1 指向子对象的父指针 13.2 虚函数 13.3 拳击游戏 13.4 继承是否可以实现多态性 13.5...
  •  本书还提供了dba完成本职工作必备的基本的uniix、sql、pl/sql和数据建模的知识,也给出了许多富有趣味性的例子,通过这些实例详细、循序渐进地说明了oracle database 11g数据库的各个概念和特性。 作译者  Sam...

空空如也

空空如也

1 2 3
收藏数 55
精华内容 22
关键字:

内存是临时性的吗