关于平方根倒数速算法(雷神之锤3,牛B)

thbcm阅读(416)

Quake-III Arena (雷神之锤3)是90年代的经典游戏之一。该系列的游戏不但画面和内容不错,而且即使计算机配置低,也能极其流畅地运行。这要归功于它3D引擎的开发者约翰-卡马克(John Carmack)。事实上早在90年代初DOS时代,只要能在PC上搞个小动画都能让人惊叹一番的时候,John Carmack就推出了石破天惊的Castle Wolfstein, 然后再接再励,doom, doomII, Quake…每次都把3-D技术推到极致。他的3D引擎代码资极度高效,几乎是在压榨PC机的每条运算指令。当初MS的Direct3D也得听取他的意见,修改了不少API。

  最近,QUAKE的开发商ID SOFTWARE 遵守GPL协议,公开了QUAKE-III的原代码,让世人有幸目睹Carmack传奇的3D引擎的原码。

  这是QUAKE-III原代码的下载地址:

  http://www.fileshack.com/file.x?fid=7547

  (下面是官方的下载网址,搜索 “quake3-1.32b-source.zip” 可以找到一大堆中文网页的

  ftp://ftp.idsoftware.com/idstuff/source/quake3-1.32b-source.zip)

  我们知道,越底层的函数,调用越频繁。3D引擎归根到底还是数学运算。那么找到最底层的数学运算函数(在game/code/q_math.c), 必然是精心编写的。里面有很多有趣的函数,很多都令人惊奇,估计我们几年时间都学不完。

  在game/code/q_math.c里发现了这样一段代码。它的作用是将一个数开平方并取倒,经测试这段代码比(float)(1.0/sqrt(x))快4倍:

  float Q_rsqrt( float number )

  {

  long i;

  float x2, y;

  const float threehalfs = 1.5F;

  x2 = number 0.5F;

  y = number;

  i = ( long ) &y; // evil floating point bit level hacking

  i = 0x5f3759df – ( i >> 1 ); // what the fuck?

  y = ( float ) &i;

  y = y ( threehalfs – ( x2 y y ) ); // 1st iteration

  // y = y ( threehalfs – ( x2 y y ) ); // 2nd iteration, this can be removed

  #ifndef Q3_VM

  #ifdef linux

  assert( !isnan(y) ); // bk010122 – FPE?

  #endif

  #endif

  return y;

  }

  函数返回1/sqrt(x),这个函数在图像处理中比sqrt(x)更有用。

  注意到这个函数只用了一次叠代!(其实就是根本没用叠代,直接运算)。编译,实验,这个函数不仅工作的很好,而且比标准的sqrt()函数快4倍!要知道,编译器自带的函数,可是经过严格仔细的汇编优化的啊!

  这个简洁的函数,最核心,也是最让人费解的,就是标注了“what the fuck?”的一句

  i = 0x5f3759df – ( i >> 1 );

  再加上y = y ( threehalfs – ( x2 y y ) );

  两句话就完成了开方运算!而且注意到,核心那句是定点移位运算,速度极快!特别在很多没有乘法指令的RISC结构CPU上,这样做是极其高效的。

  算法的原理其实不复杂,就是牛顿迭代法,用x-f(x)/f'(x)来不断的逼近f(x)=a的根。

  简单来说比如求平方根,f(x)=x^2=a ,f'(x)= 2x,f(x)/f'(x)=x/2,把f(x)代入

  x-f(x)/f'(x)后有(x+a/x)/2,现在我们选a=5,选一个猜测值比如2,

  那么我们可以这么算

  5/2 = 2.5; (2.5+2)/2 = 2.25; 5/2.25 = xxx; (2.25+xxx)/2 = xxxx …

  这样反复迭代下去,结果必定收敛于sqrt(5),没错,一般的求平方根都是这么算的

  但是卡马克(quake3作者)真正牛B的地方是他选择了一个神秘的常数0x5f3759df 来计算那个猜测值

  就是我们加注释的那一行,那一行算出的值非常接近1/sqrt(n),这样我们只需要2次牛 顿迭代就可以达到我们所需要的精度.

  好吧 如果这个还不算NB,接着看:

  普渡大学的数学家Chris Lomont看了以后觉得有趣,决定要研究一下卡马克弄出来的

  这个猜测值有什么奥秘。Lomont也是个牛人,在精心研究之后从理论上也推导出一个

  最佳猜测值,和卡马克的数字非常接近, 0x5f37642f。卡马克真牛,他是外星人吗?

  传奇并没有在这里结束。Lomont计算出结果以后非常满意,于是拿自己计算出的起始

  值和卡马克的神秘数字做比赛,看看谁的数字能够更快更精确的求得平方根。结果是

  卡马克赢了… 谁也不知道卡马克是怎么找到这个数字的。

  最后Lomont怒了,采用暴力方法一个数字一个数字试过来,终于找到一个比卡马克数

  字要好上那么一丁点的数字,虽然实际上这两个数字所产生的结果非常近似,这个暴

  力得出的数字是0x5f375a86。

  Lomont为此写下一篇论文,”Fast Inverse Square Root”。

  论文下载地址:

  http://www.math.purdue.edu/~clomont/Math/Papers/2003/InvSqrt.pdf

  http://www.matrix67.com/data/InvSqrt.pdf

  参考:

  最后,给出最精简的1/sqrt()函数:

  float InvSqrt(float x)

  {

  float xhalf = 0.5fx;

  int i = (int)&x; // get bits for floating VALUE

  i = 0x5f375a86- (i>>1); // gives initial guess y0

  x = (float)&i; // convert bits BACK to float

  x = x(1.5f-xhalfxx); // Newton step, repeating increases accuracy

  return x;

  }

  大家可以尝试在PC机、51、AVR、430、ARM、上面编译并实验,惊讶一下它的工作效率。

  。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

  维基百科参考:

  http://zh.wikipedia.org/wiki/%E5%B9%B3%E6%96%B9%E6%A0%B9%E5%80%92%E6%95%B0%E9%80%9F%E7%AE%97%E6%B3%95

  论文:http://www.daxia.com/bibis/upload/406Fast_Inverse_Square_Root.pdf

  以上为R的存在说明;

  。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

  以下是R的计算

  http://www.guokr.com/post/91389/

  基础知识1:i>>1

  操作i>>1表示将二进制数i向右移动一位,也就是将最后一位删掉并在最前一位添加0

  注意到我们将一个n位的十进制数M删掉最后一位之后就变成了n-1位,可以看做将这个十进制数除以10之后向下取整floor(M/10)

  同样的,讲一个二进制数删掉最后一位之后相当于将这个数除以2并向下取整floor(M/2)

  这样看上去i>>1就像是floor(i/2),因为函数f(x)=1/sqrt(x)的一阶导数是-1/2(x)^-3/2,正好有个-1/2在前面,不禁让人感觉 0x5f3759df – ( i >> 1 )是函数1/sqrt(x)在某一个点的一阶泰勒展开。在Fast Inverse Square Root 里面有这样一段:

  Eberly’s explanation was that this produced linear approximation, but is incorrect; we’ll see the guess is piecewise linear, and the function being approximated is not the same in all cases.

  “Eberly的解释是说这相当于做了线性近似,但是这个解释是不对的。我们会看到这个估计值是分段线性的,并且这个近似函数在各种情况下也并不相同。”

  为什么这么说呢?这里需要用到基础知识2:浮点数存储方式

  各种类型浮点数的存储方式可以通过查看IEEE745(完全不知道是什么东西)了解

  这里用到的是32位单精度浮点数,并且总是正数,表示方式为:

  0|E|M

  其中0代表正数

  E是指数,E=0相当于2^-127

  M表示一个绝对值小于1的数,但是注意到这里省略了一位。也就是说,当转化位十进制的时候应该表示为(1+M)

  那么换算之后的数就应该是:(1+M)2^(E-127)

  这样我们发现其实i>>1并不完全是floor(i/2)而是将一个数变成(floor(M/2)+1)*2^floor((E-127)/2)

  而且根据E的奇偶性尾数可能还需要加上1/2

  不妨令e=E-127,注意到1/sqrt(x)是让原数的指数变为-e/2,这么说来卡马克可能仅仅是希望产生一个e/2而用上了位移,接下来就是要找到一个相减之后产生-e/2并且让尾数尽量和(1+M)^-1/2相近

  由于这个数必然为正数假设这个数值为:

  0|R1|R2

  接下来便是要分情况讨论:

  假设E为偶数,这时候指数的右移并不会影响到尾数的数值:

  这时候e是奇数,令e=2d+1

  那么相减之后指数部分变为:

  

  注意这里的相减其实是将浮点数转化为整型(也就是正则化)之后再相减,而不是普通的浮点数加减。

  由于初始值一定要是正数,所以我们需要上式一定为正,因为0=<e<=256,所以r1>=128

  因为我们讨论的E为偶数,也就是末位数一定是0,所以不用考虑他右移后对M的影响,所以两数相减之后的结果是:

  

  注意这里用M/2而不是floor(M/2)因为这一点点的误差相较于其他误差来说太小了

  当然,还存在一种情况,那就是R2<m p=”” 2,其实二进制的加减和十进制差不多,如果尾数小了,那么就要像更高位数“借位”,也就是说这种情况下相减之后的结果是:<=””>

  

  我们定义:

  

  那么我们可以将这两种情况合并为一个函数:

  

  这个函数就是我们对函数1/sqrt(x)的近似了,那么我们的目标就是让这个函数的相对误差|(y-y0)/y|尽量小:

  

  这样我们得到一个误差方程:

  

  之后:

  

  注意这里的1/8其实是凑出来的,具体凑法可以先假设一个小于一的正数a,由于0<r2<1,0<m<1,我们可以通过展开得到r1关于a的一个区间。让a尽量小,使得这个区间范围小于一。根据r1一定是整数的特性,我们可以确定使得误差最小的r1。这里得出r1=190,带入十六进制里面并右移(注意开头有一个表示符号的0)就是0x5f,正好是黑魔法常数的头几位。< p=””>

  那当E为奇数怎么办呢?其实是一样的办法,如果E为奇数,那么M/2就需要加上1/2(尾数的第一位相当于1/2),根据同样的方法,我们可以得到另外一个相对误差函数:

  

  其中:

  

  有兴趣可以算一算这种情况下R1应该为多少,作者十分偷懒地说由于需要让常数同时应用于两种情况,所以就让R1=190了。

  之后就是确定R2的值了,各种分段讨论,过于纠结我们就不看了(反正最后也没算对,摊手),确定下来大约在0.45左右,再通过软件算得最优解。

软件开发必备:免费的开源在线技术手册大全!

thbcm阅读(432)

技术行业知识更新换代非常快,开发者需要不断的补充知识。就像编程语言一样,也许今年非常流行这种语言,但是明年又将兴起一种新语言。对于开发者来说,补充知识的速度要跟上技术发展的速度。W3Cschool小师妹为大家收集了在线开源技术手册大全,无论是操作系统、智能系统、WEB服务器还是版本控制系统,都有相关的技术手册,而且还是免费的,就问你要不要。

  1.操作系统

  操作系统是一种计算机程序,主要作用是管理以及控制计算机硬件以及软件资源。任何其他软件,只有在操作系统的支持下,方可运行。W3Cschool小师妹为大家收集的操作系统在线开源手册,主要包括linux命令行、linux系统高级编程、开源世界旅行手册等,有需要的可以前往123点W3Cschool点cn看一下。

  2.项目相关

  项目相关的开源在线技术手册,主要有译言-持续集成(第二版) 、让开发自动化系列专栏、追求代码质量、selenium 中文文档等。其中追求代码质量这个项目开源手册,这个系列中,Andrew Glover 将重点阐述有关保证代码质量的一些有时看上去有点神秘的东西。

  3.版本控制

  这些版本控制相关的手册,将从入门到精通来指导大家。像git教程,选择了史上最浅显易懂的git教程。初学者基本很快就能上手,而且是由浅入深。这个教程实用性也很强,你可以边学边练,而且不枯燥。这本教程的内容只要你掌握了,你可以轻松的利用git来完成工作。

  4.NoSQL

  众所周知,NoSQL这种关系型的数据库管理系统,当前非常流行。在WEB的应用中,NoSQL算是RDBMS中很好的一款应用软件。W3Cschool小师妹为大家收集的NoSQL相关手册,主要包括redis-3.0-annotated、带有详细注释的 Redis 2.6 源码、The Little MongoDB Book、The Little Redis Book等,可以让你快速的掌握NoSQL基本知识。

  5.WEB/Web服务器

  Web服务器开源手册中,选取的这本和Nginx相关的,是Nginx开发从入门到精通,你可以了解到nginx模块的开发以及它的内部原理。

  Web相关的开源在线技术手册很多,这里主要选取比较关键的基本。这些开源手册主要包括web关于浏览器和网络的 20 项须知、浏览器开发工具的秘密 、Chrome 开发者工具中文手册、Chrome扩展开发文档等。

  6.mysql/测试相关/智能系统

  mysql相关的这本的开源手册,主要讲解的是mysql索引背后的数据结构以及算法原理;而智能系统相关手册,教你设计物联网系统,构建自己的internet of things。

  上面W3Cschool小师妹为大家收集的免费开源技术手册,资源非常齐全,而且都是免费的。每一部分内容,无论是入门到精通,通通都有教程,希望能够帮助开发者学习。

你知道Linux的创始人Linus Torvalds吗?这7项技术他非常讨厌!

thbcm阅读(450)

  作为当今世界上很伟大的一名程序员,Linux的创始人Linus Torvalds可以说受到很多人的尊敬与崇拜。像Git版本的控制系统以及Linux内核,都是他写出来的。虽然在技术上成就很大,但是Linus Torvalds的火爆脾气,那简直是在圈内有名。下面这12项技术,就曾遭到Linus Torvalds抨击。

  1.抨击GNOME

  在很多Linux 发行版种,GNOME可以获取开源的桌面环境,GNOME提供的用户界面图形化。Linus Torvalds起初使用了GNOME,但是之后又放弃。令人吃惊的是,他使用了之后,竟然又放弃了。不过虽然Linus Torvalds和GNOME的关系相当微妙,但是他还是抨击了它。

  2.抨击GNU Emacs

  众所周知,Emacs的创建者是Richard Stallman ,在1985年的时候,Emacs第一个版本发布。之后,Emacs成为类Unix以及Unix系统。虽然很多人都很喜欢GNU Emacs ,但是Linus Torvalds很讨厌它,还抨击它。

  3.抨击HFS+

  当初苹果公司开发了一个文件系统,那就是HFS+。最早的时候,它在Mac OS 8.1当中实现。现在依然被使用在Mac OS X中。

  4.抨击GNU Hurd

  Hurd是微内核,它基于CMU Mach这个内核。而且作为GNU 项目项目中重要的一部分,GNU取代Unix内核。自1990年发展至今,Hurd发展了很久,但是它依然不太适用在生产环境中。对于微内核,Linus Torvalds 不太喜欢,因此他也经常抨击GNU。

  5.抨击Java

  当前最流行的一种编程语言,那就是Java。早期的时候,Linus Torvalds 对Java那可是寄予非常大的希望。他希望 Java有一次编写随处运行的强大功能,可以推动Linux操作系统发展。很多年之后,JAVA语言虽然很繁荣,但是它的发展没有像Linus Torvalds 所期望的那样。

  6.抨击C++

  内核之父Linus Torvalds觉得,用 C++来实现 Linux 内核代码,绝对不是最优的选择。之后,他经常抨击C++ 不给力,说 C++ 都是被次品程序员所使用,也是是差劲的设计选择。

  7.抨击苹果的操作系统

  Linus Torvalds觉得,在Mac OS X上面,苹果所使用的HSF以及HFS+档案系统相当过时。从某些方面来说,它让写程序的人员比在Windows上面更加的痛苦。即使从整体来看,相较于Windows而言,Mac OS X更加优秀。

  Linux创造者Linus Torvalds如此嚣张,敢正面的抨击这些技术,人家也是相当有实力的。在23年前,Linus Torvalds开发Linux,据说只是为了好玩。23年后的现在,无论是邮政系统、智能手机还是其他地方,都使用Linux系统。

  在很多公开的场合,Linus Torvalds都称自己不太擅长交际,他觉得自己是独行侠、书呆子。不过这又怎样,Linus Torvalds确实是按照自己的想法去生活的一个人,面对自己不喜欢的东西,他敢于直接去抨击。

2017年你一定要试试这八款Bootstrap 设计工具

thbcm阅读(412)

对于前端工程师来说,Bootstrap再熟悉不过了。如今Bootstrap的运用越来越广泛了,因为它带来了新的设计革命,使得设计以及开发变得更加的方便以及简单。基于此,W3Cschool小师妹将为大家带来10款Bootstrap 设计工具,2017年你绝对不能错过!

  设计工具一:X-editable

  原文:

  译文:

  通过这款设计工具,你可以在页面上对可编辑的一些元素进行创建。X-editable可以使用非常多的引擎,像jQuery、jQuery-UI、Bootstrap等。不仅如此,Bootstrap有两种模式,包括内联模式以及弹出模式。

  设计工具二:Layoutlt

  原文:

  译文:

  这个在线工具,这款在线工具搭建Bootstrap响应式的布局时,可以快速且简单的完成。而且这些操作相当简单,都是通过使用拖动的方式。此外,元素的集成基本上是基于Bootstrap。因此,Layoutlt对于前端开发者以及Web设计师而言,相当方便快捷。

  设计工具三:Grid Displayer

  原文:

  译文:

  这个小工具可以显示Foundation以及Twitter Bootstrap网格,亦可被使用在Firefox以及基于Webkit中。

  设计工具四:Jetstrap

  原文:

  译文:

  Jetstrap是可视化的一个制作工作,它针对Bootstrap框架二建成。设计师以及Web开发者要想制作出一个漂亮网页,只需要在网页端拖曳所有组件。而利用Jetstrap这个工具所制作出来的那些网页,完全符合Bootstrap的标准。如果电脑端页面设计好,那么将自动适配Pad端以及手机端。

  设计工具五:Divshot

  原文:

  译文:

  Divshot这个在线的网站,它允许开发人员设计Web界面时,通过可视化的方式来进行,并且将直接生成CSS以及HTML代码。Divshot提供了比较常用的一些Web UI组件,那些框架的创建,都是基于Bootstrap框架。它生成的一个界面,也是基于Bootstrap框架所运行。

  设计工具六:Bootply

  原文:

  译文:

  运用Bootply这个工具,非常轻松的就基于Bootstrap来设计以及开发原型、扩展测试。除此以外,Bootstrap还有个很强大的功能,那就是可以和其他比较流行的库、微框架、Bootstrap插件等整合。

  设计工具七:Bootstrap Magic

  原文:

  译文:

  这是一款主题创建的工具,它基于AngularJS以及Bootstrap。运用Bootstrap Magic,开发人员可以对自己的Twitter Bootstrap主题进行创建,还可以看到内容发生了什么变化。除此以外,Bootstrap Magic还可以添加那些来自Google Webfont 的网页字体。

  设计工具八:Font Awesome

  原文:

  译文:

  你可以像修改文字样式那样来修改图标样式。

  Font Awesome是图标字体,只要网页当中可能用到的图标,它都囊括,它专门为Twitter Bootstrap而设计。这些图标的显示,是通过Web Font方式,它还可以任意改变颜色以及缩放。要是你想修改图标的样式,可以像文字样式的修改方式那样去操作。

  上面W3Cschool小师妹为大家收集的八款Bootstrap 设计工具,它们的功能都非常棒,可以帮助开发者构建想要的应用。无论你想要漂亮的客户端页面,还是满意的访问者,Bootstrap 设计工具都可以帮你办到。还等什么,赶快收藏吧!

初见这行代码的时候,感叹世界上竟然有如此厉害的存在!

thbcm阅读(420)

有的程序员一天能写很多代码,有的程序员几天都写不了多少代码。这都很正常,因为代码量不能衡量一个程序员的水平。有些时候,简简单单的一行代码,让人看了觉得与世绝伦。有个人初次看见这行代码的时候,感叹世界上竟然有如此厉害的存在。

  这位分享者称,代码的算法不需要多么高深,也不需要多么的奇形怪状。下面这行简单的代码,让我觉得真的是惊为天人。第一次见到这行代码的时候,这位分享者称自己感叹世界上竟还有如此厉害的存在。这位分享者的专业,用Matlab比较多,他称找不到用python的美感。

  这是python的一行代码,主要实现的是对a的排序。

  关于这行代码,其他网友又是怎么看的呢?

  网友一:你确定你这行代码很厉害么?

  网友二:这行代码难道可以体现人类璀璨无比的智慧?

  网友三:C语言标准库,全部都有qsort好吧。

  网友四:调个函数,你竟然觉得惊为天人?

  关于这行代码怎么样,看来大家都不太赞同分享者的观点。不过这也正常,每个人知识水平不一样。先不管这行代码厉不厉害了,下面我们一起看看如何用16种语言,来写hello world。

  这位分享者称,自己只是意思一下,汇总了自己写过的语言,在语法方面大家不要太较真。

  世界上第一个程序就是hello world,很多程序员入门的时候,认识或者编写的第一个程序就是hello world。上面这位分享者用16种语言来编写hello world,好像没有用汇编来写。不知道网友中有没有大牛,能用汇编语言来写hello world,或者用其他语言来编写。

Google推出31套在线自学课程,学完你就可以去谷歌面试了

thbcm阅读(376)

做好程序员也不容易,开发的软件要更大、更好,而且还要做到每个人都会用,这相当不容易。别担心,为了解决这个问题,某平台推出了31套在线自学课程,涵盖的内容相当广泛,无论是后端、云、Web,还是Android,W3Cschool小师妹已经为大家收集好,赶紧去看看吧!

  1.Android开发

  当前的中国,Android的应用火爆程序可想而知。Android开发中,不断涌现出新的技术。要想提升自己,W3Cschool小师妹为大家收集的Android开发在线自学教程,你绝对不能错过。这些教程,有Android开发入门教程、Android应用开发教程、高级Android应用开发、Android系统性能等。需要学习的,可以去W3Cschool看一下。

  举个简单的例子,就像Android开发入门教程,它的教程是免费的。通过这本教程,你可以学习安卓以及Java编程的基础知识,让你迈出成为安卓开发者的第一步。

  2.Web开发

  现代技术不断发展,人们很重视自我体验。就像互联网企业,要想吸引人,必须要拥有良好的客户体验以及界面。这因为如此,Web前端开发非常火,工程师的薪资也很高。W3Cschool小师妹为大家收集的Web开发自学教程,主要包括浏览器渲染优化、响应式网站设计基础、HTML5游戏开发等。

  其中需要重点介绍的是HTML5开发的自学教程,这本教程的主要目的是让你了解怎么样去构建GRITS,GRITS是HTML5游戏主要的部分。还为大家讲解如何利用标准的一些游戏开发技术,来实现HTML5 应用。

  3.云和后端

  嵌入式开发工程师最应该了解的,就是云和后端技术。因为要想拓展自己系统架构方面的视野,对于成熟的网络结构以及云技术,嵌入式工程师必须了解。

  其中Android Firebase 基础,教你如何构建一个购物单应用。通过这个课程,你可以学习到如何使用Firebase。首先,先为大家演示怎么在Firebase中写入以及读取数据。之后,再教你允许用户登录以及获取相关数据等。

  上面这些课程的演讲者,据说全部都是谷歌的员工。有程序大牛带着你走入编程的世界,相信你肯定比一般人学习得更快。还等什么,赶快收藏吧。有需要的话,赶紧去学习。按照课程一步步学习,相信不久之后你也可以成为大大。

小众编程语言免费学习资源推荐,小众语言实用又赚钱!

thbcm阅读(426)

对于很多开发者来说,像Java、C、C++等才是最热门的语言。但是说实话,像这些热门的编程语言,学习的人数很多。找工作的时候,很多人竞争同一份工作,录取的概率比较低。而像scala、Dart、Flack、Rust等小众编程语言,要是学得好的话,也是相当赚钱。基于此,W3Cschool小师妹为大家收集了一些小众编程语言的学习资源

  1.scala学习资源

  scala这种编程语言,类似于java。它最初的设计目的是为了实现可伸缩的语言,而且集成面向对象编程。W3Cschool小师妹为大家收集的scala学习资源,主要包括scala开发教程、scala从入门到提升、scala初学指南、scala教程等,这些很多都是教程,讲解得相当详细,而且都是免费的。这些资源的地点,还和之前分享的一样,都在W3Cschool。下面,以scala开发教程作为例子,让大家明白这些教程的作用。

  scala开发教程主要讲解的是scala应用编程,scala开发的整个过程中所涉及到的基本知识点,这本教程可以帮助开发者快速的掌握scala语法,进而达到快速开发的目的。

  2.Rust学习资源

  Rust这种编程语言,比较注重并发性、性能以及安全。Rust也是针对多核体系所提出的,它吸收了一些动态语言不需管理内存、不会出现Null指针等重要特性。W3Cschool小师妹为大家收集的Rust学习资源,主要包括Rust中文社区、Rust编程语言官方文档中文化、《Rust 编程语言》、Rust by Harris Brakmic等。如果你想学习rust语言,可以去看一下。

  像Rust编程语言官方文档中文化这个平台,其实它是rust中文社区开源项目。里面收录了很多文章,都是和Rust编程语言相关的。

  3.Elixir学习资源

  全部都是表达式,是Elixir这种编程语言,它是基于Erlang VM的函数式元。W3Cschool小师妹为大家收集的这部分学习资源,主要包括Elixir官网、getting started官方入门学习资源、官方文档、hex 包管理系统、Elixir Sips、Elixir China 中文论坛、官方wiki等。这些资源,有些是教程,有些是学习平台、论坛。

  可能有些网友不明白这些资源有什么优点,小师妹就举一个例子吧。比如说Elixir中文入门教程这个资源,主要就是教你学习Elixir,而且是从简单到难,一步一步的教你。

  4.Flask学习资源


  和其他语言相比,Flask学习资源相对较少,W3Cschool小师妹收集了很久,才找到这些资源。这些资源主要包括Python 中文学习大本营、Flask 开发从小白开始、cnblog-Flask 学习资料、Flask使用小结等。

  像Flask 开发从小白开始这个平台,里面有很多Flask 开发资源,像数据库在视图函数中的使用、跨站请求伪造(CSRF)保护等。

  5.Dart学习资源

  Dart学习资源更是少之又少,W3Cschool小师妹只为大家收集到一个资源,那就是Dart语言中文社区。据说这是中国最大的Dart语言编程学习交流社区。

  有人说java、C等语言因为太热门,太大众化了,所以学习的人越来越多,几乎要饱和了。其实学习的人多了,说明需求也多。只是学习的人多了,竞争也更大了。如果你找工作的时候遇到了瓶颈,不凡学习一下冷门的编程语言,也许就找到出路了。上面这些资源,全部都在W3Cschool,都是免费的,希望大家喜欢。

去携程面试,问HR待遇如何,HR说我太看重钱,不录取我!

thbcm阅读(396)

携程网,相信大家都很熟悉吧!在国内,携程网虽然比不上百度、腾讯等大公司,但是也算是数一数二的公司。很多程序员都想进入携程网工作,最起码待遇好。但是有这么一位程序员,面试携程的时候,竟然被拒绝了,理由是这位程序员太看重钱。

  下面是这位程序员的原话:

  今天我问大家分享一个我面试失败的经验,半年前,携程网的HR问我最近有没有工作兴趣。既然携程网都这样问了,我就问她,你们公司哪个职位的待遇最好?这位HR回答我说,她们公司创始人的职位待遇最好。我又问HR,你们现在要招人的职位,待遇到底怎么样呢?结果这位HR回答我,说我太看重钱了。而携程想要的员工,是真正热爱技术的人。就这样,我这次的机会又失去了。

  据这位程序员描述,不是自己投简历,而是HR自己来找他的。关于这位网友的携程应聘事件,有网友觉得,以热爱技术之名,不给高价,那简直是在耍流氓。还有网友说,难打热爱技术,工作就不用给钱了吗?更有网友说,又要技术好,然后开的工资又低的公司,不去也罢。

  关于携程的面试,还有网友分享了下面的故事:

  今年,我拿到了携程网的offer,是应届生校招。当时谈待遇的时候,他们大概给我一个范围,之后就给了我一个实行的offer。携程网还要求我立刻就去实习,要看我的表现,才能给正式的offer。给了正式的offer之后,才能定薪资。之后,才可以正式入职。

  到时候我过去上班,工资到时候由对方来定。他们的意思是,我去了,就安心的待在那边,而其他的公司,可以少找,也不用花其他时间去面试,简直是太贴心。这样的话,企业简直是没有风险,真是想得很周到。

  很多大型企业,程序员挤破头颅都想进去。有些企业的薪资确实给的不错,而且也可以锻炼自己。但是并不是所有的企业都是这样,其他小公司,也会有高工资,也许还更能锻炼自己。上面两位网友分享的携程面试经历,也不知道是不是真的。如果是真的话,也难怪这两位网友会来吐槽。

美剧《硅谷》中,这段神秘代码,看起来很黑科技!

thbcm阅读(424)

不知道各位有没有看过美剧《硅谷》?在很多人的心目中,科技人的形象基本上是行为呆板,而且穿戴邋遢的书呆子。但是在《硅谷》这部情景喜剧中,你也许可以发现科技人不一样的一面。而在这部剧第三季的第一集中,出现了神秘代码。那么这些神秘的代码,究竟写的是什么?

  分享者称自己运行了一下,上面红框就是运行的结果。原来这段程序是花式输出字符串,它的原理,其实不难。这段代码当中,有个非常特别的magic number,那就是65。这也是ASCII 表当中的 A,而前面的那一堆,其实是叠加偏移量,进而实现输出。

  简单的来看,偏移量计算,是用 0x1FULL 无符号长整型常量,来作为掩码,二进制表示是11111.之后从低位开始,依次从0x79481E6BBCC01223 + ((dcf_t)0x1222DC << 64)大整数当中,取出五位。而所取出的那个五位二进制表示,也就是偏移量。

  同样的,用trick就可以输出自己想要的任意字符串。如下面的例子。

  这样输出的结果,就是:

  关于硅谷中的这段神秘代码,其他网友又是怎么看待的呢?

  网友一:这段神秘的代码虽然看不懂,但是看起来很牛逼。

  网友二:简直是大写的服。

  网友三:所以这段代码,到底是干嘛的?

  网友四:这部剧中,代码格式为什么要这么奇怪?

  网友五:我还以为是方根倒数的梗呢。

  网友六:这到底是什么鬼?

  很多电视剧、电影中,为了显示高科技,都会用到代码。其实有些代码,都是透露着闷骚的小示例。就像上面的这段代码,其实是花式输出字符串。不过编剧也是很拼,能想出这样的代码。

太强大,玩游戏也能学编程,8款教你编程的游戏

thbcm阅读(430)

这几年,编程相当热门。早前有个14岁的小萝莉,自学编程,竟然可以独自开发游戏。这位才14岁的小女孩,即使没有编程经验,但是她最终实现了自己的梦想。其实即使零基础,也可以自学编程。下面这几款游戏,你可以边学代码,边玩游戏。

  游戏一:Code Hunt

  这个游戏是HTML5 科幻主题的游戏,开发者是Microsoft Research。Code Hunt这款游戏,你可以扮演代码猎人,主要责任是修复这些代码,并且使这些代码返回预期结果。这款游戏,总共包含14个等级,它也支持C#以及Java这两种语言。

  游戏二:CodeCombat

  这个游戏可以教你非常基本的一些编程概念,是HTML5角色扮演的一个游戏。 CodeCombat这个游戏中,玩家可以扮演英雄,来挑战游戏不同的等级。据相关资料和数据显示,这款游戏的用户年龄基本上小于18岁。不仅如此,这款游戏还支持六种语言。

  游戏三:CodinGame

  要是你想提升这款自己的编程技能,可以玩CodinGame这款游戏。这款游戏支持的编程语言很多,主要有20多种。CodinGame用户界面的功能相当强大,还可以定制。这款游戏,你可以选择多人模式或者单人模式。

  游戏四:FightCode

  这款游戏的目的相当简单,主要目的是创建一个机器人,这个机器人要可以击败其他玩家的机器人。你怎么样创建机器人呢?其实你可以编写JaScript代码来创建。

  四款帮助孩子学习编程的游戏

  游戏一:Bee-Bot

  Bee-Bot这款游戏,小孩子只需要拿过设备,一边看指导视频,一边实践。小孩子可以接触到测试、假设、修正、错误等编程原则。

  游戏二:Machineers

  这是探险类的一个游戏,这个游戏的玩家在游戏的过程中,可以同已破损的那些机器进行互动交流,尝试着用各种编程原则以及拖拉界面,来修复破损。

  游戏三:Codemancer

  Codemancer这个游戏相当梦幻,在这个游戏当中,女主人公可以教成人以及儿童编程。这个游戏讲述的是一个很梦幻的故事,相信在同类游戏中,这个游戏的整个故事以及游戏当中的那个女主人公,将吸引大家的注意。

  游戏四:Ludos

  这个游戏主要目的,是向全世界的孩子介绍编程中基本概念。开发这款游戏的公司,之后将推出更多编程游戏。

  有人说现代社会,编程技能最吸引人。据悉,全世界的范围内,参与编程活动的据说已经有3600万的儿童。掌握编程技能,也就是掌握了一技之长。也许在不久的将来,你也是技术人才。

联系我们