《算法图解》读书笔记3-递归
algorithms Linux如果使用循环 ,程序的性能可能更高;如果使用递归,程序可能更容易理解。如何选择要看什么对你来说更重要。
递归函数
在一个函数中,可以调用另一个函数,如果调用的另一个函数是函数本身,这样的函数就是递归函数。如下示例:
def foo(x):
if x == 0:
return 'end'
else:
# 在函数中继续调用自己
return foo(x-1)
如果使用循环 ,程序的性能可能更高;如果使用递归,程序可能更容易理解。如何选择要看什么对你来说更重要。
在一个函数中,可以调用另一个函数,如果调用的另一个函数是函数本身,这样的函数就是递归函数。如下示例:
def foo(x):
if x == 0:
return 'end'
else:
# 在函数中继续调用自己
return foo(x-1)
算法是一组完成任务的指令
这次是我第二次读《算法图解》,当我第一次看这本书的时候,我更兴奋于书中有什么内容,迫不及待的去过内容,学习那些算法概念。但当我第二次准备开始读这本书的时候,我脑海中出现的了一个问题:“为什么要学习算法?”,这个问题也许会有人和我一样,之前根本没有好好的去思考,只是知道,作为一个程序员我应该学习算法。当然,能够有这个觉悟,说明我们还算是个合格的程序员。
但是,不妨认真思考一下,为什么要学习算法?算法应该怎么学?
Read more...所有的系统调用都是以原子操作方式执行的。之所以这么说,是指内核保证了某系统调用中的所有步骤会作为地理操作而一次性加以执行,期间不会被其他进程或线程中断。原子性规避了竞争状态(race condition),竞争状态指:操作共享资源的两个进程(或线程)其结果取决于一个无法预期的顺序,即这些进程或线程获得 CPU 使用权的先后相对顺序。
Read more...所有执行 I/O 操作的系统调用都是以文件描述符,一个非负整数来指代打开的文件。文件描述符用以表示所有类型的已打开的文件,包括管道(pipe)、FIFO、socket、终端、设备和普通文件。每个进程都各自独立维护着一张文件描述符表。
文件描述符 | 用途 | POSIX 名称 | stdio 流 |
---|---|---|---|
0 | 标准输入 | STDIN_FILENO | stdin |
1 | 标准输出 | STDOUT_FILENO | stdout |
2 | 标准错误 | STDERR_FILENO | stderr |
最近开始阅读《Linux/Unix 系统编程手册》 这本书,重新系统的学习一下 linux 系统编程方面的知识。
在阅读完第一章《历史和标准》以后,对于很多标准名词都见过,但是对于他们之间的发展历程很是模糊,通读这部分内容后豁然开朗,尤其本章最后总结部分,对于前面的概况的既简练还没有遗漏。不禁在书上用笔写下:“牛 B 总结,一气呵成”。
方便以后不去翻书回顾,特花点时间摘录至此。
Read more...WebSocket 是一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
Websocket 是一个持久化的协议,相对于 HTTP 这种非持久的协议来说的。
举个例子:
Read more...HTTP 的生命周期通过 Request 来界定,也就是发送一次 Request,收到一次 Response ,那么在 HTTP1.0 中,这次 HTTP 请求就结束了
在 HTTP1.1 中进行了改进,使得有一个 keep-alive,也就是说,在一个 HTTP 连接中,可以发送多个 Request,接收多个 Response。但是请记住 Request = Response , 在 HTTP 中永远是这样,也就是说一个 request 只能有一个 response。而且这个 response 也是被动的,不能主动发起。
而对于 websocket 来说,在 HTTP 的握手基础上建立起链接,服务器端可以主动的向客户端发送数据。
昨天完成了《一个完整的 Django 入门指南》 - 第 6 部分的翻译工作,本地在翻译的过程中,存储了十几张原文中的 png
格式的插图。
在 git push
提交 github 仓库的时候,终端显示写成功 100%, 但是一直卡在了下面这里没有推送成功:
Counting objects: 21, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (21/21), done.
Writing objects: 100% (21/21), 1018.52 KiB | 17.87 MiB/s, done.
Total 21 (delta 7), reused 0 (delta 0)
# 卡在这里
近期的项目中,我开始尝试着从 virtualenv 管理 python 虚拟环境,切换到用 pipenv 来管理。
经过一段时间的使用,着实觉得 pipenv 使用的更加顺手,更加的便捷。这当然也延续了 Kenneth 大神一贯的项目作风– For Humans
。
再配合上 autoenv
(自动激活虚拟环境的工具),更加的 Perfect!
uvicorn
是一个基于asyncio
开发的一个轻量级高效的 web 服务器框架。
uvicorn
设计的初衷是想要实现两个目标:
uvloop
和httptools
实现一个极速的asyncio
服务器。ASGI(异步服务器网关接口)
的最小的应用程序接口。它目前支持http
,websockets
,Pub/Sub
广播,并且可以扩展到其他协议和消息类型。
本文是《算法图解》笔记
一切脱离实际应用场景的算法都是耍流氓!
git diff
指令,可以查找出编辑前后文件的差异,这是基于动态规划实现的。levenshtein distance
),判断字符串的相似程度,也是基于动态规划计算。可以通过这个技术从拼写检查到判断用户上传的资料是否是盗版。(这样看来,我猜想大学论文查重应该也是基于动态规划算法:P)前言:1 月 21 日参加 CSDN 举办的区块链沙龙,以下是来自 CSDN 副总裁孟岩的 Slide 笔记。表达上使用了个人的理解,如果有哪里理解错误,还请在评论中指正。
目前国内的区块链产业形势分为 币
,证
,链
三个派别,这三个群体需要分开来评判看待。
最为我们大众所熟知的一些企业,或者说是一些数字货币,大都属于币
圈公司。这一类公司可以用六个字总结:“只造势,不做事”。各种铺天盖地的宣传,为的是制造其发行的数字货币的影响力,而并没有实际的实体价值依托。
因为我们大家日常接触或听到的大部分都是币圈的公司信息,所以常常会有人说:“区块链这个技术没有实际的落地应用,只是个噱头”。其实不然,国外其实有很多的公司在做着基于区块链技术的应用,只是因为这一类的公司不会去发行数字货币,也不发通证(通证的概念后面会提到),只是在借助区块链技术在做着一些实际的应用产品,所以往往不被人所了解。这一类的公司就属于链圈
公司范畴。链圈的公司会有很多基于区块链技术的落地应用,但是因为每个产品都是独立的,影响力是很有限的,所以无法对全球产生革命
性的改变。
还有第三个派别就是—“通证派”。首先理解一下通证的定义,通证,英文的名字是Token
,还有的人译作“代币”,但是这个真不是一个很雅的翻译,我更倾向于称之为“通证”。通证的核心是通
,流通,通证是一种价值转移的载体形式。
通证有广义的通证和狭义的通证之分,狭义的通证包含但不限于:身份证,房产证,信用卡,用户积分,通行证,门票,购物卡,发票,股票,债券等等…广义的通证是在狭义的通证基础上多一个数字加密货币
。
在开发和调试 wsgi 应用程序时,有很多方法可以自动重新加载代码。例如,如果你使用的是werkzeug
,则只需要传use_reloader
参数即可:
run_sumple('127.0.0.1', 5000, app, use_reloader=True)
对于 Flask,实际上在内部使用 werkzeug,所以你需要设置 debug = true:
app.run(debug=True)
django 会在你修改任何代码的时候自动为你重新加载:
python manage.py runserver
所有这些例子在本地开发的时候都非常有用,但是,建议不要在实际生产中使用。
作为学习,可以一起来看一下,python 是如何让代码自动地重新加载的?
Read more...在这篇文章中,我将会解析 ImportError: attempted relative import with no known parent package
这个异常的原因。当你在运行的 python 脚本。使用了相对引用方式 (类似import ..module
) 去引用包时,可能会出现这个异常。
find_modules
,import_string
优雅地注册蓝图模块find_modules
, import_string
这两个函数包含在werkzeug.utils
工具包中,借助着两个工具函数可以帮助我们在更优雅的给应用注册blueprint
模块,尤其是当项目中blueprint
模块很多的时候,会节省很多行代码,看起来更加的舒服。
今天的博文翻译是关于 python 中 global 和 nonlocal 两个关键字的用法,原文的作者是来自孟加拉国的Tamim Shahriar,他的博客非常适合新手朋友去阅读,都是简短而有意义的 python 实践。
我们大多数人都对 Python 中的全局变量很熟悉了。如果我们在一个模块中声明全局变量,模块内部的任何函数都可以访问这个全局变量。(模块可以理解为一个python
文件或.py
文件)
今天的原文的作者是来自国外的一位 Python“布道师”Dan Bader,他的博客完全就是一个个人品牌的学校。有跟多 Python 技巧,有很多他录制的 Youtube 视频,国内的 Pythonista 们,不妨订阅一下他的每周邮件推送。订阅链接
今天的译文是他博客中的一篇,点击查看原文
如何以去写以及为什么你应该使用 Python 中的内置枚举函数来编写更干净更加 Pythonic 的循环语句?
Read more...Read more...最近博客没什么更新。工作上新项目马上要开始了,我很清楚自己的技术积累很匮乏,需要学习的东西太多了,但又不知该从何学起。以前听过一句话,不知道怎么规划学习的时候,只管学就好了。最近家里也储备了一批的新书,都还没来得及看,所以暂时不想怎么规划博客了,接下来到过年的这两个月,博客的文章将都是国外博客的译文,希望可以学习大神经验的同时提升自己的英文水平。
今天是第一篇,来自前美国宇航局工程师,python 大神Daniel Roy Greenfeld的博客中的一篇《code,code,code》,旨在帮助新手程序员知道如何才能提高自己的编程技能。