
学习笔记
文章平均质量分 59
Amesteur
注重实效的程序员
展开
-
如何编写高效的程序?
编写高效的程序需要做到以下几点:第一,我们必须选择一组适当的算法和数据结构。第二,我们必须编写出编译器能够有效优化以转换成高效可执行代码的源代码。对于第二点,理解优化编译器的能力和局限性是很重要的。编写长须方式中看上去只是一点小小的变动,都会引起编译器优化方式很大的变化。有些编程语言比其他语言容易优化。C语言的有些特性,例如执行指针运算和强制类型转换的能力,使得编译器很难对它进行优化。程序...原创 2018-05-10 18:47:20 · 1343 阅读 · 0 评论 -
RBush 快速拓扑查询大规模空间数据
R树是空间数据索引结构中重要的一种层次结构,R树是基于B树索引改造的二叉树索引结构。目前已成为许多空间索引方法的基础,不少前沿的空间索引都使用到R树或者对R树改良。其构建思想是以最小边界矩形(MBR)递归地对空间数据集的空间按照“面积”规划进行划分。它的特点如下:1. R树中非叶子节点代表一个划分的空间区域,即一个矩形空间区域;2. R树中的叶子节点包含的矩形区域对应空间对象的...原创 2019-07-17 15:54:43 · 2066 阅读 · 0 评论 -
JavsScript 使用Buffer操作二进制数据
目录TypedArraysBufferWebWorker注意事项二进制数据和文本数据是我们常见的两种格式数据。而在某些应用场景,则需要我们使用JavaScript去操作读写二进制格式文件,比如WebSocks获取原始数据、操作音视频文件、获取商业软件格式的数据等。尽管JavaScript是一门动态语言(弱类型),不擅长于处理二进制数据,但是我们可以使用JavaScript的类型...原创 2019-07-14 22:08:31 · 782 阅读 · 1 评论 -
WebGL优化的技巧--持续更新中
Webgl性能瓶颈,图形绘制是异步的流水线绘制以及浏览器的本身的缺陷。尝试优化的方法如下:找到性能瓶颈,尝试降低CPU或者GPU的时钟频率去测试哪个效率低 纹理受限,可以采取 减少canvas的长宽或者使用低分辨率的纹理测试;webgl 纹理绑定伸展和收缩效果时,gl.NEAREST 是最快的但会产生块状效果,gl.LINER因为是取平均值,会产生模糊 将Mip映射应用于纹理贴图 处理w...原创 2019-07-12 17:34:42 · 3017 阅读 · 2 评论 -
WEBGL入门的基础介绍
目录WebGL基本介绍概述WebGL的特性图形硬件的介绍WebGL开发入门WebGL绘制图形抽象过程基于WebGL封装的框架WebGL坐标系基础视变换投影变换视口变换实例演示(使用ThreeJS)光照光照类型光照的原理(漫反射)光照的原理(环境反射)光照效果的对比纹理映射图片纹理凹凸纹理环境贴图开发调试与...原创 2019-07-12 17:17:39 · 1892 阅读 · 1 评论 -
二维几何图形自由变换的思路(平移、缩放、旋转)
目录图形自由变换图形的存储方式鼠标交互图形拓扑算法总结 常见的二维几何图形包括点、线、面三种类型,而某些的地图标准规范中还区分多点、多线、多面、环等。本文,主要讲述简单的几何图形的自由变换(平移、缩放、旋转)的核心思路。至于复杂的几何图形则可以通过简单的几何图形组装变换得到。后面的文章会讲述如何拖拽增加修改顶点和编写辅助线的核心思路。图形自由变换 ...原创 2019-07-11 10:29:04 · 2599 阅读 · 1 评论 -
常见的空间索引方法
在谈论空间索引之前,我们必须了解索引的概念。索引是为了提高数据集的检索效率。打个比喻,一本书的目录就是这本书的内容的“索引”,我们查看感兴趣的内容前,通过查看书的目录去快速查找对应的内容,而不是一字一句地找我们感兴趣的内容。所以,索引是一种“前人栽树,后人乘凉”的东西。空间索引不同于书本“目录”,“目录”对应的书本内容是不变的,而我们讨论的空间索引是根据空间数据...原创 2018-05-21 15:51:17 · 27286 阅读 · 0 评论 -
条件分支的两种方式的对比——条件控制与条件数据
1.条件码 前提:在机器代码中,寄存器里有一组单个字的条件码寄存器,他们描述了最近的算术或逻辑操作的属性。可以检测这些寄存器来执行条件分支指令。常见的条件码如下:但是,条件码是不能直接访问的,常用的方式有三种:1.)可以根据条件码的某种组合,将一个字节设置为0或者1;2.)可以条件跳转到程序的某个其他的部分;3.)可以有条件地传送数据2.跳转指令机器代码里面的跳转指...原创 2018-05-11 12:57:51 · 2705 阅读 · 1 评论 -
处理器的流水线式实现
我们熟知的编程语言C、java、脚本语言等,都是按照顺序执行的,前面提及过的文章中,机器代码也是按照顺序执行的,但是从机器硬件的实现上,近代处理器执行指令的顺序并不是我们所看到的顺序执行,然而,却能保证指令顺序执行的结果。前提知识:1.机器指令是二进制格式的代码,以字节为单位的一个或多个的字节序列。2.指令集体系结构(ISA):一个处理器支持的指令和指令的字节编码。不同的处理拥有不同的...原创 2018-05-11 12:57:01 · 3089 阅读 · 0 评论 -
存储器系统
存储器系统是一个具有不同容量、成本和访问时间的存储设备的层次结构。作为一个程序员,你需要理解存储器层次结构,因为它对应用程序的性能有着巨大的影响。如果你的程序需要的数据是存储CPU寄存器中的,那么在指令的执行期间,在0个周期内就能访问到他们。如果存储在高速缓存中,需要4-75个周期。如果储存在主存中,需要上百个周期。而如果储存在磁盘上,需要大约几千万个周期!因此,我们了解存储器系统可以优化...原创 2018-05-11 12:56:12 · 958 阅读 · 0 评论 -
网络编程
网络编程,我们的理解是基本的客户端-服务器的编程模型,这是基本的编程模型。所有的网络应用都依赖于前面文章提及到的进程、信号、字节顺序、内存映射以及动态内存分配。而网络编程就是基于因特网服务的客户端-服务端模型编程。何谓网络 从硬件上看待网络,网络依赖于一种I/O设备,成为网络适配器。这是一种从网络上接收到的数据从适配器经过I/O和内存总线复制大内容,通常是通过DMA传送。同样,数据也能从内存复制到...原创 2018-05-11 12:54:27 · 226 阅读 · 0 评论 -
人月神话笔记(一)——项目滞后原因
在众多软件项目中,缺乏合理的时间进度是造成项目滞后的最主要原因,它比其他所有因素加起来的影响还大。导致这种普遍性灾难的原因是什么呢? 首先,我们对估算技术缺乏有效的研究,更加严肃地说,它反映了一种悄无声息, 但并不真实的假设——一切都将运作良好。 第二,我们采用的估算技术隐含地假设人和月可以互换,错误地将进度与工作量相互混淆。 第三,由于对自己的估算缺乏信心,软件经理通常不会有耐心持续地进行估算这...原创 2018-05-11 12:52:35 · 445 阅读 · 0 评论 -
人月神话笔记(二)——人月的背后
人月。成本的确随开发产品的人数和时间的不同, 有着很大的变化, 进度却不是如此。 因此我认为用人月作为衡量一项工作的规模是一个危险和带有欺骗性的神话。它暗示着人员数量和时间是可以相互替换的。 人数和时间的互换仅仅适用于以下情况:某个任务可以分解给参与人员,并且他们之间不需要相互的交流。 这在割小麦或收获棉花的工作中是可行的;而在系统编程中近乎不可能 。 当任务由于次序上的限制不能分解时,人手...原创 2018-05-11 12:51:58 · 284 阅读 · 0 评论 -
openlayer-Identify 基于ol/Control的第三方插件
基于Openlayer 的Control方式,仿照Arcgis desktop的Identify,包含所有动画和界面都非第三方插件包含了select组件、树状列表组件、表格组件、工具栏组件,均为没有引入第三方插件效果展示图仿照Arcgis Identify的功能,包括:1. 图层类型选择器,包括(所有图层、可见图层、最上面的图层以及图层树列表) 2. 工具栏(框选、隐藏树列表、隐藏表格、缩放至、...原创 2018-05-17 18:43:27 · 854 阅读 · 0 评论 -
百度移动端首页的优化---极限的速度优化的方案
百度移动端的首页基本是秒开的,原因是大小只有十几kb,那么静态页面的优化的方案如下:1.首先网页打开快,是尽量的不适用外链接,这样就减少了请求的响应时间.关键的地方是缓存!!百度将一下不经常变化的html、js、css(要是经常变化就不能缓存了,大概都是些公共的样式和组件)都缓存到本地的localstorage,然后只需要加载调用这些缓存的js文件即可。从上图中可以看到,浏览器...原创 2018-05-10 18:48:48 · 2827 阅读 · 0 评论