(一)Python环境配置指南
管理 Python 版本 推荐使用 https://github.com/pyenv/pyenv 来管理不同版本的 python,但是它不支持 windows,如果你使用 windows,请使用 https://github.com/pyenv-win/pyenv-win 。 如果你需要使用特定版本的 python,先安装它,类似于 1pyenv install 3.9.6 随后在项目的根目录,使用 1pyenv local 3.9.6 它会生成一个配置文件 .python-version ,就会让进入项目根目录,就会自动切换到 3.9.6 的版本。 管理虚拟环境 Poetry 适合现代 Python 项目开发、个人或小型团队开发、需要发布到 PyPI 的项目。 特点: 自动化依赖管理:Poetry 能够自动处理依赖冲突,生成 pyproject.toml 和 poetry.lock 文件,确保依赖一致性。 内置虚拟环境管理:Poetry 会自动为每个项目创建虚拟环境,隔离项目依赖,保证项目间的互不干扰。 简化的发布流程:通过 poetry build 和 poetry...
如何成为优秀的软件工程师
要成为一名优秀的软件工程师,需要掌握广泛的技能和知识,包括基础的数据结构、高级架构设计和良好的编程实践。本文将为你详细介绍如何全面提升自己的编程能力,成为卓越的软件工程师。 深入掌握数据结构与算法 TODO: 我的数据结构和算法的笔记,每一类数据结构怎么用。 数据结构和算法是软件工程的核心基础。深入理解数组、链表、堆栈、队列、树、图等基础数据结构,可以帮助你高效地解决复杂问题。你不仅需要理解它们的工作原理,还要清楚它们的优缺点、本质特性以及适用的应用场景。 数组是一种连续存储的结构,适合需要快速随机访问的场景,访问的时间复杂度为 O(1)。但它在插入和删除操作时需要移动大量数据,时间复杂度为 O(n),因此不适合频繁插入和删除的场景。数组通常用于需要快速访问的应用,例如排行榜和固定大小的数据集合。 链表是一种由节点组成的结构,每个节点包含数据和指向下一个节点的指针。链表在已知位置时,插入和删除操作非常高效,时间复杂度为 O(1),但随机访问的效率较低,为...
Decimal Recurring Cycles and Cyclic Groups
From the Perspective of Cyclic Groups When the Denominator and 10 are Coprime The process of division is actually the calculation of 10kmod n10^k \mod n10kmodn, which is the remainder of the k-th division. When the remainder is 1, i.e., 10kmod n=110^k \mod n=110kmodn=1, it indicates a cycle. However, this may not be the first cycle, as the remainder might have appeared twice at another number, such as 2, hence the cycle would be shorter. First, consider when 10 and n are coprime, forming...
Haskell(六) Project Euler 练习1-26
Haskell(一)入门Haskell(二)函数式编程Haskell(三) MonadHaskell(四)总结和工具链Haskell(五) 总结和展望Haskell(六) Project Euler 练习1-26 本文会选择一些有意思的 Project Euler 的题目,学习怎么用 Haskell 写算法,并且逐渐学习相关语言和数学知识。前 100 题可以直接分享答案,后续的题目就只给暗示和加密的答案,可以发邮件获取解密方式。 代码仓库:https://github.com/learnerLj/projecteuler P1 显然 3 和 5 的倍数,其实是 3 和 5 的倍数,去除重复算的 15 的倍数。而且 3 的倍数的和,还可以化简成求和公式。 1234sumOfMultiples limit = sumDivisible 3 + sumDivisible 5 - sumDivisible 15 where cumulativeSum n = n * (n + 1) `div` 2 sumDivisible n = n *...
Haskell(五) 总结和展望
Haskell(一)入门Haskell(二)函数式编程Haskell(三) MonadHaskell(四)总结和工具链Haskell(五) 总结和展望Haskell(六) Project Euler 练习1-26 随着我们深入 Haskell 的世界,我们发现它不仅仅是一种编程语言,而是一种带有丰富理论背景的编程范式。Haskell 的设计思想深植于函数式编程的根基,与 Lambda 演算和范畴论紧密相连,体现了逻辑和数学的美学。 Monad:结构化的复杂性管理 在 Haskell 中,Monad 的概念封装了一个层次结构,允许我们在一个定义良好的域内进行操作。Monad 提供了一种方式来构建层次化的结构,支持层次之间的转换。通过 Monad,可以利用自定义的规则进行快速错误处理,无需在每一步都进行错误处理。特别是在 Haskell 中,Monad 以顺序方式组合复杂函数,使不确定的结果、副作用、异常处理都可以通过 Monad 的统一接口进行管理。更进一步,Monad...
Haskell(四)总结和工具链
Haskell(一)入门Haskell(二)函数式编程Haskell(三) MonadHaskell(四)总结和工具链Haskell(五) 总结和展望Haskell(六) Project Euler 练习1-26 总结 安装方式:https://www.haskell.org/ghcup/ 这是最推荐的安装方式,建议都安装上。 特性介绍:https://www.haskell.org/ 如何入门: 理解基础规则,比如不可变性、绑定、递归 学完基本语法,包括列表、元组、类型、模式匹配、Guard 写法、where 用法、let … in 用法、case … of 用法、@ 用法; 理解函数的类型签名 函数柯里化和 folder、map、zip、filter 等高阶函数、lambda 表达式; $ . 的用法 递归的写法习惯 模块和导出, 语言拓展 Data 库中的 List、Char、Map、Set。一些对应的常见操作 ,比如列表的 take drop sum takeWhile group 等,可以等用到再查。 data 自定义类型(包括 product type 和...
(十)Fuzzing 基础
(一)初识软件分析(二)数据流分析基础(三)Datalog和程序分析(四)静态单赋值和稀疏分析(五)过程间分析(六)指向分析(七)抽象解释(八)SMT和符号执行(九)体验静态分析工具(十)Fuzzing 基础 这主要是[1]的阅读总结 Fuzzing 是什么 在众多软件测试技术中,Fuzzing 因其概念的简单性、易于部署以及在发现实际软件漏洞方面的有效性而受到广泛青睐。简而言之,Fuzzing 是使用异常或非预期的输入(称为“fuzz 输入”)来运行待测试的程序(Program Under Test, PUT)的过程。这种 fuzz 输入是 PUT 可能没有预料到的,也就是说,它可能会使 PUT 处理不当,从而触发开发者未预期的行为。 定义 1 (Fuzzing):Fuzzing 是指使用从所谓的“fuzz 输入空间”中抽取的输入来执行 PUT 的过程,这个输入空间超出了 PUT 的预期输入范围。 定义 2 (Fuzz Testing):Fuzz 测试是利用 fuzzing 来检查 PUT 是否违反了某些特定的正确性策略。 定义 3 (Fuzzer):Fuzzer...
How Geth starts its server
交易的签名理解收据receipt理解区块理解交易blockchain核心布隆过滤器原理forkId 解读oracle 原理和实现交易池分析TxList 解读MPT树区块同步geth源码学习——介绍How Geth starts its server When starting up, the Geth client begins by parsing the command line parameters. This process kicks off with the geth function: func geth(ctx *cli.Context) error at cmd/geth/main.go:326 where the geth prepares the metric if enabled. Subsequently, the makeFullNode function takes over. It reads the provided configuration file or command line flags. As a result, it...
区块链相关学习材料
...
信息论与编码
C语言基础乘法逆元信息安全算法基础操作系统基础x86汇编基础信息论与编码 前言 这篇总结和系统性学习地笔记,是基于电子科技大学的《信息论与编码》课程,而我写作的初衷是个人的复习。因此,内容可能不是那么详细,但是我会保证基本上我会在自己理解的基础上,完成这篇文章。随着我自己的理解的加深,可能会出现前后不一致的情况,如果读者感到矛盾,那么请在评论区说明,等我有时间时会继续完善的。 离散信源熵 单符号离散信源是最简单的情况,离散是指信源输出是有限个符号,单符号是指每个符号都是独立的,每次只发出一个符号。 随机变量基础 在单符号离散信源中,每个符号的概率分布可以用一个概率向量来表示。例如,一个三个符号的单符号离散信源可以用以下概率分布表示,符号 A、B、C 之间是相互独立的,即一个符号的出现不会影响到其他符号的出现概率。可以如下的方式抽象成数学模型。 离散随机变量集合:a1,a2,a3{a_1,a_2,a_3}a1,a2,a3,对应概率 P(ai)P(a_i)P(ai),且 0≤P(ai)≤10 \le P(a_i) \le 10≤P(ai)≤1 ,...