热门标签 | 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--





























推荐阅读
  • 本题探讨了在一个有向图中,如何根据特定规则将城市划分为若干个区域,使得每个区域内的城市之间能够相互到达,并且划分的区域数量最少。题目提供了时间限制和内存限制,要求在给定的城市和道路信息下,计算出最少需要划分的区域数量。 ... [详细]
  • 对象自省自省在计算机编程领域里,是指在运行时判断一个对象的类型和能力。dir能够返回一个列表,列举了一个对象所拥有的属性和方法。my_list[ ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • JavaScript 基础语法指南
    本文详细介绍了 JavaScript 的基础语法,包括变量、数据类型、运算符、语句和函数等内容,旨在为初学者提供全面的入门指导。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • Redux入门指南
    本文介绍Redux的基本概念和工作原理,帮助初学者理解如何使用Redux管理应用程序的状态。Redux是一个用于JavaScript应用的状态管理库,特别适用于React项目。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • 优化SQL Server批量数据插入存储过程的实现
    本文介绍了一种改进的SQL Server存储过程,用于生成批量插入语句。该方法不仅提高了性能,还支持单行和多行模式,适用于SQL Server 2005及以上版本。 ... [详细]
  • 经过一段时间的学习与实践,我已经使用D3.js完成了一些项目。鉴于中文D3教程稀缺,而英文资料虽丰富却对英语水平有一定要求,特此撰写一系列D3实战文章,旨在通过具体案例(如统计数据可视化、地图信息展示等)分享D3的使用技巧,促进技术交流。 ... [详细]
  • 自 Node.js 6.3 版本起,调试功能已内置在核心模块中,无需额外安装 node-inspector 等工具。通过简单的命令即可启动调试模式,并利用 Chrome 浏览器进行高效的代码调试。 ... [详细]
  • 在现代Web应用中,当用户滚动到页面底部时,自动加载更多内容的功能变得越来越普遍。这种无刷新加载技术不仅提升了用户体验,还优化了页面性能。本文将探讨如何实现这一功能,并介绍一些实际应用案例。 ... [详细]
  • 本文详细介绍了 org.apache.commons.io.IOCase 类中的 checkCompareTo() 方法,通过多个代码示例展示其在不同场景下的使用方法。 ... [详细]
  • 在创建新的Android项目时,您可能会遇到aapt错误,提示无法打开libstdc++.so.6共享对象文件。本文将探讨该问题的原因及解决方案。 ... [详细]
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社区 版权所有