热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:技术的极限(11):有趣的编程

本文由编程笔记#小编为大家整理,主要介绍了技术的极限(11):有趣的编程相关的知识,希望对你有一定的参考价值。目录:**0x01达夫设备**0x02switch
本文由编程笔记#小编为大家整理,主要介绍了技术的极限(11): 有趣的编程相关的知识,希望对你有一定的参考价值。

目录:
** 0x01 达夫设备
** 0x02 switch+goto
** 0x03 硬件加速
** 0x04 O(1)大数据传输
** 0x05 C语言的异常跳转
** 0x06 非欧几里得引擎
** 0x07 为什么现代软件开发令人伤心
** 0x08 设计/内容/商业的交集=付费社区
** 0x09 高阶初学者的系统设计介绍
** 0x0A 概率统计可视化教程
** 0x0B Flash已死,Flash不死
** 0x0C 最快的大数乘法算法
** 0x0D 深度SVG动画生成
** 0x0E why GNU grep is fast

0x01 达夫设备

https://www.cnblogs.com/lihuidashen/p/13253337.html

void send( int * to, int * from, int count){
int n = (count + 7 ) / 8 ;
switch (count % 8 ) {
case 0 : do { * to ++ = * from ++ ;
case 7 : * to ++ = * from ++ ;
case 6 : * to ++ = * from ++ ;
case 5 : * to ++ = * from ++ ;
case 4 : * to ++ = * from ++ ;
case 3 : * to ++ = * from ++ ;
case 2 : * to ++ = * from ++ ;
case 1 : * to ++ = * from ++ ;
} while ( -- n > 0 );
}
}

混合switch-case和do-while循环,我从来没用过这种写法,有点两种不同齿轮混合的味道。

0x02 switch+goto

技术图片

parser代码里常见到这种路径:switch-case里多个case分支的代码有重复部分,常见的把重复的部分作为一个独立的case,例如这里的VK 这个case,那么VKINT和VKFLT只是预处理部分和VK不同,就会用switch-case来做成两个case处理不同的部分,再goto到VK这个case。 只是switch-case本来就可以上一个case直接FALLTHROUGH到下一个case,因此VKFLT里面就不需要goto,但是VKINT里需要加个goto,否则会走 VKINT+VKFLT+VK 三处代码的合并逻辑,就不对了。

0x03 硬件加速

软件写多了,会发现很多物理世界的做法能解决很多看上去麻烦的问题。上周去了一家芯片设计小公司看,我们很多算法,他们可以把一些固定参数,固定流水的算法,直接设计进固化的芯片里。减少了用通用CPU指令写算法的时间消耗,非常高性能。当然,这是非通用芯片,都是定制用的。这个让我脑洞大开,我们被通用CPU限制了很多脑洞。整个算法就是一个指令输入数据,异步等待数据返回即可,算法代码变成了IO代码。硬件加速大概是这样:芯片定制 > FPGA > GPU > CPU,每一级都有数量级的性能差异,通用性则反过来。这就是那些做AI芯片是在干什么,所谓AI芯片,就是把深度神经网络的算法,把某些底层的算法控制流,直接设计到芯片的逻辑们控制流里去。

0x04 O(1)大数据传输

https://www.cnblogs.com/AllenMaster/p/13237362.html

Azure Data Box

Azure直接寄硬盘盒给客户,客户把需要上传到Azure的数据直接写硬盘,再把硬盘寄回给Azure,后者帮你直接把硬盘数据导入云存储。

涨见识了,这么做最“高效传输”。

0x05 C语言的异常跳转

技术图片

这个是c里面setjmp和longjmp模拟异常跳转的代码,非常规控制流。不过和上面的那个“达夫设备”代码还是不一样。

0x06 非欧几里得引擎

github: https://github.com/HackerPoet/NonEuclidean

技术图片
技术图片
技术图片

从外面看很短的墙,进去后很长。从外面看很长的墙,进去后看很短。在里面绕几圈后,外面的其他房子越变越大,反向绕几圈后,外面的房子越变越小。非欧几何的很多定理都跟欧几里得几何不一样。例如:三角形的内角和小于180度,或者三角形的内角和大于180度,两条平行线会相交等等。

A NonEuclidean rendering engine for Windows, written in C++ OpenGL. To see what this code is about, check out this video: https://youtu.be/kEB11PQ9Eo8

0x07 为什么现代软件开发令人伤心

https://www.roguelazer.com/2020/07/etcd-or-why-modern-software-makes-me-sad/

etcd 共识算法最早是为一个并不成功的项目CoreOS Container Linux编写的,并且提供了简单的HTTP API,这个作者用它写了很多项目。然后,自从K8S用了etcd之后,etcd的接口被加入了gRPC的复杂接口,内部实现也加了了很多侵入式的数据结构。作者认为,这之后etcd就变的不正交了,不再简洁友好。作者认为K8S是自从systemd之后又一个令系统变的复杂的系统,一个显著的特点就是它对etcd库本身的影响。此外,K8S迫使你编写一堆YAML配置系统,在一个Mesh里编写代码,令现代软件开发变的更糟糕,令人(特别是作者)伤心。

这就是作者写这篇文章的全部。一句话:作者不喜欢K8S,更不喜欢K8S影响了etcd项目,让它变得不再正交和简洁。

0x08 设计/内容/商业的交集=付费社区

https://subpixel.space/entries/come-for-the-network-pay-for-the-tool/
技术图片

0x09 高阶初学者的系统设计介绍

Systems design for advanced beginners:
https://robertheaton.com/2020/04/06/systems-design-for-advanced-beginners/

技术图片

0x0A 概率统计可视化教程

https://seeing-theory.brown.edu/basic-probability/cn.html

顺便记录下,有一天朋友发了个图说他买的棘轮螺丝套筒套件,他无聊排序了下,发现漏了,于是找卖家补发了货物:
技术图片

我想起了这是个贝叶斯统计的好题材,出了个题:


  • 一个棘轮螺丝套筒工厂,组装漏掉零件的概率是1%,组装不漏零件的概率是99%;

  • 一个棘轮螺丝套筒图片识别AI,在零件丢失的情况下,检测成功的概率是90%,在零件不丢失的情况下,有5%的概率会误报;

  • 现在,一个棘轮螺丝套筒套装被AI检测为漏装了零件,请问这个棘轮螺丝套筒实际漏装了零件的可能性多大?


0x0B Flash已死,Flash不死

http://www.flashgamehistory.com/

FLASH
GAMES

shaped the video game industry

Flash is dead. But the influence of Flash games on modern gameplay is inescapable.

技术图片

0x0C 最快的大数乘法算法

https://www.quantamagazine.org/mathematicians-discover-the-perfect-way-to-multiply-20190411/
技术图片

0x0D 深度SVG动画生成

https://github.com/alexandre01/deepsvg

技术图片

0x0E why GNU grep is fast

作者回复:https://lists.freebsd.org/pipermail/freebsd-current/2010-August/019310.html

Summary:


  • Use Boyer-Moore (and unroll its inner loop a few times).

  • Roll your own unbuffered input using raw system calls. Avoid copying
    the input bytes before searching them. (Do, however, use buffered
    output. The normal grep scenario is that the amount of output is
    small compared to the amount of input, so the overhead of output
    buffer copying is small, while savings due to avoiding many small
    unbuffered writes can be large.)

  • Don‘t look for newlines in the input until after you‘ve found a match.

  • Try to set things up (page-aligned buffers, page-sized read chunks,
    optionally use mmap) so the kernel can ALSO avoid copying the bytes.

The key to making programs fast is to make them do practically nothing. ??

--end--





























推荐阅读
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • MACElasticsearch安装步骤及验证方法
    本文介绍了MACElasticsearch的安装步骤,包括下载ZIP文件、解压到安装目录、启动服务,并提供了验证启动是否成功的方法。同时,还介绍了安装elasticsearch-head插件的方法,以便于进行查询操作。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
author-avatar
尘世聚散
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有