Category: 计算机

C++ Ranges 教程

C++20 引入了 ranges(范围),这是一个强大且优雅的抽象,用于处理序列(如数组、vector 等)。相比传统的迭代器或旧式循环,Ranges 提高了代码的可读性、可组合性和性能。 什么是 Range? 在 C++20 中,range(范围) 是一种抽象,代表一个可以迭代的元素序列。它与 views(视图) 和 actions(操作) 如过滤、转换等配合使用非常自然。 传统循环 vs 基于 Range 的循环 #include <iostream> #include <vector> int main() { std::vector<int> v …

简易教程: C++的智能指针

C++ 智能指针教程 C++ 中的智能指针提供了自动且安全的内存管理。它们通过 RAII(资源获取即初始化)机制,帮助开发者避免内存泄漏和悬空指针的问题,确保对象在生命周期结束时被正确释放。 本教程将介绍 C++ 中三种主要的智能指针: std::unique_ptr:独占式所有权 std::shared_ptr:共享式所有权 std::weak_ptr:非拥有式弱引用 1. std::unique_ptr unique_ptr 拥有独占所有权。一个资源只能被一个 unique_ptr 拥有。 示例:管理简单对象 #include <iostream> #include <memory> int main() { std::unique_ptr<int> p = std::make_unique<int>(42); …

Alan Becker 的动画教学视频是非常好的启蒙材料

自从去年家里装修完之后,我们在厨房装了一台电视,平时吃饭时会随便看看一些视频。大约两个月前的一天中午,我从学校接弟弟回家吃饭,无意间发现了一个叫 Alan Becker 的动画视频系列——“Animation vs.”,是 YouTube 上的一个非常有创意的系列。他最出名的作品之一就是《Animation vs Math》。 Alan Becker 的这些视频通常用一群小人(也有人叫他们“小黄人”、小橙色、火柴人)在电脑屏幕上互动的方式,讲述一个个富有创意、又带有教育意义的故事。虽然整个系列几乎没有一句对白,但却通过画面和动作把复杂的知识点讲得既直观又有趣。 我最喜欢的四个视频是《Animation vs Math》、《Animation vs Coding》、《Animation vs Physics》和《Animation vs Geometry》。每一集不仅让人捧腹大笑,还让人对背后的知识产生兴趣。比如在《Animation vs Math》中,小人们在坐标系、函数图像之间跳跃和作战,看得人不知不觉就理解了各种数学概念。而《Animation vs Coding》则展示了编程的魔法,小人甚至“黑进”了主人的电脑,自己写代码!《Animation vs Physics》里,小人们挑战了牛顿定律、重力和能量守恒,用夸张但合理的方式演绎了物理知识。 《Animation vs …

比特币私钥的数学本质与人类算力的极限

总是看到有一些暴力破解的程序在不停的尝试比特币钱包的密钥,还声称已经很幸运的试到了几个钱包的密钥,并且移走了里面的几万美金。 下面的文字是抄于 rssdao.eth 的朋友圈。 抛256次硬币,你就拥有一个比特币私钥:人类算力难以企及的加密奇迹 破解比特币需要40亿个银河系?普通人根本无法想象的数学深渊。 当你抛硬币正面朝上为1,反面朝上为0,连续抛256次,并把结果转换成一个16进制数,就是下一个比特币的密钥,那么换句话来说,比特币私钥的本质就是256位二进制数,听起来普普通通有没有,感觉用普通的计算机随便就能破解了? 能这么想的一般数学老师已经哭在了厕所,2的256次方,相当于8个2的32次方相乘,二的32次方约等于40亿,现在有概念了吗?就是40亿×40亿×40亿×40亿×40亿×40亿×40亿再除以40亿。量化一下吧,第一个40亿是现代电脑的GPU每秒可以计算10亿个哈希值,40亿就相当于一台非常好的电脑,每秒计算的哈希值。 第二个40亿用世界第一搜索引擎,谷歌公司作为例子,虽然谷歌没有对外公布服务器的数量,但有人估算大约在几百万个,是世界上最多服务器的企业之一,代表着地表最高算力,大部分谷歌服务器的算力都不如我们这些满载GPU的电脑强,那么40亿台电脑姑且约等于1000个谷歌算力。 第三个40亿全世界约有73亿人,我们假设地球一半以上的人每个人都有1000个谷歌的算力。再来看看第4个40亿,想象一下40亿个这样的地球像极了银河系有没有?姑且称为银河系算力。第5个40亿,我们把40亿个这样的银河系打包,算力之和每秒能计算出2的160次方。第6第7个40亿,我们从时间维度考量,40亿秒约等于126.8年,乘以40亿倍,就是5070亿年,差不多是目前我们已知的宇宙年龄的37倍。 最后我们得出了结论,以人类现在的文明程度要解开比特币的密钥,大约需要40亿个银河系的算力,计算37倍于宇宙的年龄一样长的时间,才有1/(40亿^8)可以算出密钥的可能。所以现阶段人类科技而言,要通过技术手段破解密钥,简直就是痴人说梦了,这种体量的计算连量子计算机串联也望尘莫及。 2021年2月旧文,再思考一下比特币的伟大发明。 今天一个大饼的价格是9.2万美金。 Satoshi Nakamoto’s Wallet 为了1110亿美元,你愿意付出多大的代价? 如果有人猜对了 24 个单词,如果有人能访问中本聪的钱包,就能卷走大约 1110 亿美元,成为全球第 15 大富豪。 但这真的可行吗? 一个 24 字的 BIP39 …

BASH: 如何使用 cURL 命令获取 HTTP 响应代码?

检查运行 curl命令 后的HTTP响应代码,您可以使用 curl 的 -w` 选项,这样可以指定自定义输出格式。以下是命令: curl -o /dev/null -s -w "%{http_code}\n" <URL> 您可以将HTTP响应代码保存到BASH变量中,如下所示: resp=$(curl -o /dev/null -s -w "%{http_code}\n" <URL>) 解释: -o /dev/null: 丢弃响应体的输出。 -s: 以静默模式运行curl(不显示进度或错误信息)。 -w …

力扣刷题打卡2209天竟然断了, 哎

坚持6年的力扣刷题打卡作天断了。昨天开了一整天brainstorming 晚上陪媳妇过生日。然后就给忘了,还好的是力扣国服还没断。 2019年3月2日 我在美国通用电气午休的时候太无聊 拿起IPAD就刷了一题。 谁曾想:这一刷就是2209天。这六年时过境迁,很多事情物是人非。我也从美国通用电气GE(General Electric)到亚马逊 Amazon AWS 再到现在的微软剑桥研究院MSRC。 力扣每日一题打卡是可以补签的,只需要花70点积分就可以 Time Travel 回到本月补上一签。只不过那个墙是补不了的,没刷就是空的。 力扣美服是可以同步到国服的,但是目前是没有办法反过来把国服的刷题记录复制一份到美服的。可能,这就是注定的吧,肯定会有不完美的。还好我不是处女座,这么一点不完美不会逼疯我的,哈哈。我还是会继续刷题的。刷题努力提升自己,好处多多。 本文一共 348 个汉字, 你数一下对不对. 力扣刷题打卡2209天竟然断了, 哎. (AMP 移动加速版本) 赞赏我的几个理由. ¥ 打赏支持 扫描二维码,分享本文到微信朋友圈

如何使用 GDB 或 LLDB 调试器重复运行程序直到错误

如何使用 GDB 或 LLDB 调试器重复运行程序直到发生错误 在调试程序时,有时候我们希望一直运行程序直到遇到错误。GDB(GNU 调试器)和 LLDB(LLVM 调试器)都提供了自动化此过程的方法。 这在调试一些不稳定的程序非常有用,例如有时候写的一些单元测试可能随机崩溃SegFault。最近我在调试一个测试每跑1000次就有一次崩溃的时候就发现gdb/lldb调试器非常有用。 简介:GDB vs LLDB GDB(GNU 调试器)和 LLDB(LLVM 调试器)是用于低级别应用程序调试的强大工具。GDB 传统上用于由 GCC 编译的程序,而 LLDB 是 LLVM 项目的一部分,与 Clang 无缝配合。两者都提供强大的功能,但 GDB 在 Linux …