数组是一个什么玩意: 数组和指针我的理解,有同样之处也有不同之处.因有同样之处,因此一些资料上说,数组和指针本质是同样的.因有不同之处,因此也有一些资料上说,数组和指针是不一样的. 同样之处: 数组名字和指针名字都代表了一个地址. 如:int num[10];num是数组名.函数开辟了一个存储十个整数类型的空间,而num是他们的首地址. int *p; p=(int *)malloc(10*sizeof(int));类似的,p也指向了首地址. 不同之处是,num[10]中的空间位置是在栈中,而…
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十四章:曲面细分阶段 代码工程地址: https://github.com/jiabaodan/Direct12BookReadingNotes 曲面细分阶段包含渲染管线中的三个阶段,用以细分几何物体,它在顶点着色器和几何着色器之间.使用曲面细分的主要原因: 基于GPU的LOD: 物理和动画的优化,可以在低面模型上计算物理效果和动画,然后细分为高面模型用以渲染: 节…
本章讨论我们笼统地归为“高级I/O”的各个函数和技术 套接字超时 有3种方法在涉及套接字的I/O操作上设置超时 1.调用alarm,它在指定超时时期满时产生SIGALRM信号 2.在select中阻塞等待I/O(select有内置的时间限制),以此代替直接阻塞在read或write调用上 3.使用较新的SO_RCVTIMEO和SO_SNDTIMEO套接字选项. 使用SIGALRM为connect设置超时 下面给出我们的connect_timeo函数,它以调用者指定的超时上限调用connect /…
接下来,我们开始学习如何使用模板系统,但我们并不和前面说的View相结合,我们的这里的目的是展示模板系统是如何独立于Django框架运行的.下面是在pyhon代码中使用Django模板系统的基础例子: 1.通过提供原生文本代码创建Template模板对象 2.调用Template对象的render()方法并传入所给的参数(上下文文本). >>> from django import template >>> t = template.Template('My name…
本章涵盖了从多概念和函数:非阻塞I/O.记录锁.I/O多路转换.异步I/O.readv和writev函数以及存储映射I/O 非阻塞I/O 非阻塞I/O使我们可以发出open.read和write这样的I/O操作,并使这些操作不会永远阻塞.如果这种操作不能完成,则调用立即返回出错. 对于一个给定的文件描述符,有两种为其制定非阻塞I/O的方法: 1.如果调用open获得描述符,则可制定O_NONBLOCK标志(第三章) 2.对于已经打开的一个描述符,则可调用fcntl,由该函数打开O_NONBLOC…
标签 下面的部分概述了常见的Django标签. if/else {%if%} 标签 对一个变量值进行测试,如果结果为true,系统将会显示在{%if%} 和 {%endif%}之间的一切,看个例子: {% if today_is_weekend %} <p>Welcome to the weekend!</p> {% endif %} An {% else %} tag is optional: {% if today_is_weekend %} <p>Welcome…
模板系统不是django特有的,它是python的一个库,你可以在任何地方使用它. 使用方法: 1.使用 Template()方法创建Template对象.2.调用Template对象的render()方法. >>> from django import template >>> t = template.Template('My name is {{ name }}.') >>> c = template.Context({'name': 'Adri…
引入模板系统的原因,view中引入硬编码并非明智的选择,设计上的任何改变都会需要改动代码.python代码和HTML代码应该分开,这是多数Web站点的共识,分开会提高效率. 基本模板系统 Django模板是一串用来分离数据与文档模型的文本.参考下面的模板: <html> <head><title>Ordering notice</title></head> <body> <h1>Ordering notice</h1…
迭代器和生成器是python中的重要特性,本章作者花了很大的篇幅来介绍迭代器和生成器的用法. 首先来看一个单词序列的例子: import re re_word=re.compile(r'\w+') class Sentence(object):     def __init__(self,text):         self.text=text         self.word=re_word.findall(text)     def __getitem__(self, item):   …
<深入理解Java虚拟机>学习笔记 一.走近Java JDK(Java Development Kit):包含Java程序设计语言,Java虚拟机,JavaAPI,是用于支持 Java 程序开发的最小环境. JRE(Java Runtime Environment):包含Java SE API 子集,Java 虚拟机,是支持Java程序运行的标准环境. Java的优点: (1)提供了相对安全的内存管理和访问机制,避免了绝大部分的内存泄露和指针越界问题. (2)实现了热点代码检测和运行时编译及优…
Java四种引用--<深入理解Java虚拟机>学习笔记及个人理解(四) 书上P65. StrongReference(强引用) 类似Object obj = new Object() 这类的引用 就是强引用. SoftReference(软引用) 用来描述一些有用但并非必需的对象. 在系统将要发生内存溢出异常前, 将会把这些对象列进回收范围之中, 进行二次回收.(如果这次回收了之后, 内存还是不足, 那么就会抛出内存溢出异常) 执行下面这段代码的时候, 设置一下虚拟机参数-Xms2m -Xmx…
Java虚拟机内存溢出异常--<深入理解Java虚拟机>学习笔记及个人理解(三) 书上P39 1. 堆内存溢出 不断地创建对象, 而且保证创建的这些对象不会被回收即可(让GC Root可达). /** * 堆内存溢出demo * VM Options: -Xms6m -Xmx6m */ public class HeapOOM { static class OOMObejct { } public static void main(String[] args) { List<OOMObe…
0.前言 从这篇随笔开始记录Java虚拟机的内容,以前只是对Java的应用,聚焦的是业务,了解的只是语言层面,现在想深入学习一下. 对JVM的学习肯定不是看一遍书就能掌握的,在今后的学习和实践中如果有领会到的心得和踩过的坑,将会对这些文章进行更新. 另外,人脑更喜欢图胜过文字,有些流程先用文字码在那儿,后面有时间再画图. 1.「深入理解Java虚拟机」学习笔记(1) - Java语言发展趋势 2.「深入理解Java虚拟机」学习笔记(2)- JVM内存区域 3.[Java]「深入理解Java虚拟机…
<深入理解 Java 虚拟机>学习笔记 -- 内存区域 运行时数据区域 主要分为 6 部分: 程序计数器 虚拟机栈 本地方法栈 Java 堆 方法区 如图所示: 1. 程序计数器(线程私有) 程序计数器是当前线程所执行字节码的行号指示器 字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令 为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器 执行 Java 方法,计数器记录的是正在执行的虚拟机字节码指令的地址:执行的是 Native 方法,计数器…
        本文由哈利_蜘蛛侠原创,转载请注明出处.有问题欢迎联系2024958085@qq.com         注:我给的电子版是700多页,而实体书是800多页,所以我在提到相关概念的时候,会使用章节号而非页码.相同的情况适合于"龙书"第二版. 上一期的地址: DX 11游戏编程学习笔记之5 这一章的内容非常短所以也是相对轻松的一期了.只是这一章的内容要深入理解的话并非非常easy.另外这一章非常多内容与"龙书"第二版的第6章内容是一样的.而且包括了&q…
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二十二章:四元数(QUATERNIONS) 学习目标 回顾复数,以及复数相乘如何在平面上表达旋转: 理解四元数以及它的运算: 理解单位四元数如何表达3D旋转: 学习如何转换旋转变量的表达: 学习如何对单位四元数线性差值,并且理解它等价于几何上的3D角度差值: 熟悉DirectX Math库中的四元数类和操作. 1 回顾复数 四元数可以看做是一个复数,所以我们先要回顾…
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十九章:法线贴图 学习目标 理解为什么需要法线贴图: 学习法线贴图如何保存: 学习法线贴图如何创建: 学习法线贴图中的法向量的坐标系统是如何与物体空间的三角形的坐标系统关联的: 学习如何在顶点和像素着色器中实现法线贴图. 1 使用法线贴图的原因 找到一种方法在光滑的平面上,显示出更多的细节(比如粗糙的砖块). 如果使用曲面细分是可以增加实际的细节的,但是我们还是需要…
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十五章:第一人称摄像机和动态索引 代码工程地址: https://github.com/jiabaodan/Direct12BookReadingNotes 学习目标 回顾视景坐标系变换的数学算法: 熟悉第一人称摄像机的功能: 实现第一人称摄像机: 理解如何动态索引一组纹理. 1 回顾视景坐标系变换 如果QW = (Qx, Qy, Qz, 1), uW = (ux,…
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十二章:几何着色器(The Geometry Shader) 代码工程地址: https://github.com/jiabaodan/Direct12BookReadingNotes 假设我们没有使用曲面细分阶段,几何着色器阶段就是在顶点着色器和像素着色器之间的一个可选的阶段.几何着色器输入的是基元,输出的是一个基元列表:假如我们绘制的是三角形列表,那么几何着色器…
<python基础教程(第二版)>学习笔记 函数(第6章) 创建函数:def function_name(params):  block  return values 记录函数:def function_name(params):  'NOTE' #注释  block  return values function_name.__doc__help(function_name) return # 没有返回值 位置参数和关键字参数:关键字参数要提供参数的名字:def function_name(…
<python基础教程(第二版)>学习笔记 字典(第4章)创建字典:d={'key1':'value1','key2':'value2'}lst=[('key1','value1'),('key2','value2')]; d=dict(lst)d=dict(key1='value1', key2='value2')字典基本操作:d={'key1':'value1','key2':'value2'}; len(d) ==> 2 #字典中的键值对数量d={'key1':'value1','…
<python基础教程(第二版)>学习笔记 字符串(第3章)所有的基本的序列操作(索引,分片,乘法,判断成员资格,求长度,求最大最小值)对字符串也适用.字符串是不可以改变的:格式化输出字符串:使用%,%左侧是格式字符串,%右侧是需要格式化的值例如:print '%s=%d' % ('x',100) ==> x=100使用%% 格式字符串可以输出 %模板字符串:from string import Templates=Template('$x is 100');  s.substitute…
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十六章:实例化和截头锥体裁切 代码工程地址: https://github.com/jiabaodan/Direct12BookReadingNotes 学习目标 学习如何实现硬件实例化: 熟悉包围体,学习如何创建和使用它们: 学习如何实现截头锥体剔除. 1 硬件实例化 给每个实例都复制一份顶点和索引是非常浪费的,所以我们只保存一份物体在局部坐标系下的数据,然后使用…
下面用通俗易懂的话来概述一下: 指针-对于一个类型T,T*就是指向T的指针类型,也即一个T*类型的变量能够保存一个T对象的地址,而类型T是可以加一些限定词的,如const.volatile等等.见下图,所示指针的含义: 引用-引用是一个对象的别名,主要用于函数参数和返回值类型,符号X&表示X类型的引用.见下图,所示引用的含义: 2.指针和引用的区别 首先,引用不可以为空,但指针可以为空.前面也说过了引用是对象的别名,引用为空——对象都不存在,怎么可能有别名!故定义一个引用的时候,必须初始化.因此…
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址. 要搞清一个指针需要搞清指针的四方面的内容: 指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区.让我们分别说明.  指针的类型       从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型.这是指针本身所具有的类型.让我们看看例一中各个指针的类型: int*ptr; // 指针的类型是int* char*ptr; // 指针的类型是char* int**…
一.指针变量的定义 1. 格式:变量类型 *指针变量名; 2. 举例:int *p;   char *p2; 3. 注意:定义变量时的*仅仅是指针变量的象征 二.利用指针变量简单修改其他变量的值 1.指向某个变量 int a; int *p; p = &a; 或者 int *p = &a; 2.修改所指向变量的值 *p = 10; 3.在函数内部修改外面变量的值 int a = 10; change(&a); void change(int *n) {     *n = 20; }…
复印控制 --管理指针成员 引言: 包括指针的类须要特别注意复制控制.原因是复制指针时.一个带指针成员的指针类 class HasPtr { public: HasPtr(int *p,int i):ptr(p),val(i) {} int *get_ptr() const { return ptr; } int get_val() const { return val; } void set_ptr(int *p) { ptr = p; } void set_val(int i) { val…
第8章 数组 1.数组与指针 数组名是一个个元素的地址. int  a[10];  int  b[10];  int  *c; (1) c = & a[0]; &a[0]表示一个指向数组第1个元素的指针. (2) c=a; 与 c = & a[0]; 等价 (3) b = a; 非法,不能使用赋值符把一个数组的所有元素复制到另一个数组,必须使用一个循环,每次复制一个元素. (4) a = c; 非法,a是指针常量,而c是指针变量. 2. 下标引用和间接访问完全相同. array[s…
第6章 指针 1.在一组字符串中查找字符: #include<stdio.h> #include<assert.h> #include<stdlib.h> #define TRUE 1 #define FALSE 0 int find_char(char **strings , int value) { //  assert(strings != NULL); while(*strings !=NULL){ while(**strings!='\0'){ if(*(*s…
        本文由哈利_蜘蛛侠原创,转载请注明出处.有问题欢迎联系2024958085@qq.com         注:我给的电子版是700多页,而实体书是800多页,所以我在提到相关概念的时候,会使用章节号而非页码.相同的情况适合于"龙书"第二版. 上一期的地址: DX 11游戏编程学习笔记之7  这一期我们专门来研究第6章的习题. 尽管数目比較多,可是大部分还是非常easy的.注意我说的是"大部分"! 习题解答: =====================…