自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 重读《succeed》有感

我从好多年前就开始读《succeed》(中文翻译成《成功,动机与目标》)。这本书主要讲人类动机,目标达成。里面全是硬核的动机心理学研究成果。时隔多年,发现最近几年很多目标依然难以达成。这促成了我重读本书的因缘。现把最近感受最深的写下来。

2024-03-16 21:00:39 344

原创 数据结构和算法的本质

其实,我们自己也可以根据具体的业务场景,构造出自己想要的个性化 数据结构,然后定义出一些适合当前业务,好用的API。python常用的字典,数组外,还有一些定义在collections模块中,用于扩展内置的数据类型。再比如,有些问题,我们可以选择更优化的数据结构来减少穷举,比如用双链表而不是单链表。都是用最底的的数组或者链表构造,抽象出来的,然后提供更易用的api。比如树,可以用数组,也可以用链表构建。还有细节一点的:比如写循环时,有些时候是可以提前结束的,比如去枝,比如利用缓存记忆,减少些重复的操作。

2023-07-09 07:58:23 1491

原创 算法与数据结构:从一道题体会解算法题的过程

通过分析一道算法题,来不断优化代码,体会迭代的过程。题目如下:给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。

2023-06-29 15:28:11 333

原创 数据结构与算法:滑动窗口题目的解题框架

【代码】数据结构与算法:滑动窗口题目的解题框架。

2023-06-27 10:02:45 250

原创 用chatgpt重构代码,优化代码,体验蛮惊艳

整个过程体验很震惊,chatgpt有无限可能。

2023-02-15 16:57:48 12718

原创 研究python解释器(3)-杂记

python虚拟机

2022-10-18 11:59:32 240

原创 研究python解释器(2)-生成器,协程背后的运行机制

生成器,协和背后的运行机制

2022-10-06 15:09:28 557

原创 研究python解释器(1)-python名字空间

python源码

2022-09-09 09:21:33 415

原创 python动态属性的应用场景

这篇文章讨论下面两个问题:1:getattr(),setattr()它是用于解决什么问题的,它的应用场景是什么?背后的设计思想是什么?2:a.,以及dir(a)的区别是?先说第一个,getattr(obj, var),这种写法相比obj.fun,它有哪些优点呢?在下面几种情况下用getattr(),setattr():1:你不知道对象的属性名的时候,比如你要向对象所有的属性添加值。上面是对对象所有属性赋值,你不需要知道每个属性值。也更适合批量化操作。.........

2022-08-03 08:50:21 214

原创 《数据结构与算法》学习思考(1)

缘起:记得刚接触数据结构与算法,还是大二。我没记错的话,考试成绩还不错,得了89分,好像。当时是系里的院长给我们上课。我那时很积极,每次算法课坐第一排,而其它课,比如web,却躲在最后。不过说实话,那时对数据结构和算法的认识,只是停留在考试上,因为没做过什么项目,对基本的一些数据结构,比如栈,队列都没有感性的认识。2020年4月开始,我想重新学习数据结构与算法,就报了一门《数据结构与算法之美》的课程。当时学了有70%。时隔两年,我准备再复习一遍,顺便把之前的一些笔记整理清楚。先来说说为什么要学习数据.

2022-04-30 11:09:12 847

原创 《计算机程序的构造和解释-SICP(3):应用数据驱动设计代替if,else逻辑判断

https://effective-programmer.com/2018/05/27/introduction-to-data-driven-programming/

2020-07-21 18:47:52 270

原创 《计算机程序的构造和解释》-SICP(2):用高阶函数抽象

目前sicp看到第三章节,前两章完成了90%的习题,第三章看了一半。这篇文章主要是些杂谈,可能会有些抽象。后面的系列文章会更具体的讲解。SICP这个写作项目,大概会持续至少半年。先讲讲函数式思维和面向对象,软件设计的一些关系这本书其实是讲,当一个系统越来越复杂时,怎样管理系统的复杂度。有三个方法,抽象,组合,DSL(领域特定语言)。抽象和组合可以更好地封装代码。让下层的实现细节不会影响到上层的使用。面象对象思维不过是其实一种,还可以通过数据驱动设计,消息传递等其它手段。另外,面象对象思维和面向对象编程语

2020-07-11 11:14:07 264

原创 《计算机程序的构造和解释》-SICP(1):函数式编程思维杂谈

;下面的问题是,我们之前是通过不断猜测点来找到一个数的平方根的。现在我们学了不定点fixed-point,我们可以让它来找平方根,其实就是x^2=y,x=y/x,转化成求f(x)=y/x这个函数的不动点。怎么做呢?;先写好fixed-point函数:(define tolerance 0.00001)(define (fixed-point f first-guess) (define (close-enough? v1 v2) (< (abs (- v1 v2)) toleran

2020-06-10 19:31:34 504

原创 阅读flask源码3:仿写Local,LocalStack

我们上篇分析了上下文压入栈,出栈的大致流程,现在我们要问,flask是怎么实现的呢?准备来说,Local是怎么管理不同请求对象的,LocalProxy是怎么代理的。因为flask源码太复杂,今天我们自己一步一步实现类似于Local,LocalProxy的代码。通过自己实现,我们学会用代理模式,学会python的魔法方法__setattr__,getattr。class A(object): def spam(self, x): print('A.spam') def foo

2020-06-04 09:57:56 215

原创 阅读flask源码2:Local,LocalStack

我们还是以flask0.1的代码来阅读,先提出几个常见的问题:1上下文是怎么被压入栈的?2为什么在不同的程序中通过相同的变量request可以拿到对应的请求我们先看第一个问题:上下文是怎么被压入栈的?服务器传过来的请求参数,被封装成了一个_RequestContext对象,这个对象里有这个请求相关联的一组互相“绑架”的参数,它们组成一个上下文环境。比如request,被实例化的app。如下:class _RequestContext(object): def __init__(s

2020-06-04 09:57:06 240

原创 阅读flask源码1:flask请求流程

我们先大致的走下flask处理请求的流程,我用的是flask0.1这个版本的源码。之所以用这个,是为了去除不必要枝叶,快速把握flask的主干。后面再迭代,加细节。from flask import Flask, Request, request, session, flash, abort, _request_ctx_stackfrom user import webapp = Flask(__name__)web.register(app)#下面会注册路由:@app.route(.

2020-06-04 09:56:07 316

原创 《流畅的python》阅读笔记3:让代码更抽象

注释:下面代码演示了如何让代码更抽象,更有应对变化的可能。下面(1)(2)(3)(4)(5)都是被否定的写法,也是一些初学者容易写出的代码。class Vector2d(): def __init__(self, x, y): self.x = x self.y = y def __iter__(self): #return iter(tuple(self.x, self.y)) (1) #这里可以改成用生成.

2020-06-04 09:54:30 228

原创 《流畅的python》阅读笔记2:切片及原理

1:什么场景下我们会用到切片?2:实现切片的原理,基于此,我们如何实现一个支持切片操作的自定义类型?下面说下什么场景下我们会用到切片?当我们想截取一段代码,怎样操作呢?比如下面:list = [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0]array1 = array('d', list)components = reprlib.repr(array1)# 这个时候返回字符串:“array('d', [0.0, 1.0, 2.0, 3.0, 4.0, ...]

2020-06-04 09:53:20 226

原创 《流畅的python》阅读笔记1:杂谈

1这本书主要讲了什么呢?给我最大的收获是什么?以前我不太懂魔法函数的作用,这次我明白,魔法方法,可以让你自定义的对象,实现一些跟python内置对象一样的方法和操作,比如说,你的类实现__repr__,那么你就可以apply(repr(a)),来创建一个对象。比如你实现了__eq__,你就可以比较两个对象是不是一样。你自定义的对象有着跟python一样的操作符。这就是python的一致性,它让调用你写的类的用户学习成本降低,你只要像操作内置对象一样操作你的对象就行了。2作者先是讲解了python一些内

2020-06-04 09:50:53 250

原创 重写蓝图,自定义红图

疑问1:怎么返回特定文件中的视图函数?如何在一个文件中,调用另一个文件中的函数?先import,再用viewfuntion’endpoint’2: 如何在app.run之前,先运行完别的文件?放在creat_app函数中,app.route为什么不行?第一次报404是因为没有注册视图函数,第二次报错是因为循环引入和endpoint有什么关系?...

2020-03-09 14:48:10 389 1

原创 flask session 探究

session 如何解决登录的问题,上下文的问题的?具体如何实现背后的源代码怎么实现的?为什么要这么实现?怎样实现登录的时候,每个用户不同的键值对,你的id是什么,和session中对比,看有没有,有就把这个用户作为当前用户。还有就是,你访问带了用户的id,但是服务器端的session没了,还是浏览器端的session没了?或者关了浏览器,下次登录也要重新登录,怎么做到?session,在...

2020-02-14 13:26:56 210

原创 flask源码分析:本地代理

问题单线程:一般情况下,服务器给应用框架派发请求,是处理完了一个,再处理另外一个但是服务器里,有可能有多线程,就是同一时间它能接收很多请求,因为服务器程序发送一个请求url,是需要等待很长一段时间才能从网络上拿到数据的,这里说的“很长时间”,是相对CPU来说。多线程这时就很有意义了。在服务器等待返回结果的过程中,可以处理另外一个线程,发送另外一个url请求。那么flask程序是不是也要用多线...

2019-12-25 16:51:37 204

原创 fisher项目重构

1所有文件放在一个文件里不好维护2具体模型的神力函数放在不同的文件里,比如用户,用户有找回密码等,而书籍有search方法。3视图函数不应该放在入口文件里。入口文件是用来项目初始化的。...

2019-12-16 13:36:04 181

原创 重构简化代码

class HTTP(): def get(self, url, return_json=True): r = requests.get(url) if r.status_code !=200: if return_json: return {} else: ...

2019-12-14 13:47:14 157

原创 关于代码的重构

# 需求:如果是13位的数字,或者是10位的数字,数字中有"-",那么就判断为isbn,否则就是key,这里有两个编程方面的思想要注意:一个可以把这个判断做为一个函数封装起来,这是为了1容易阅读,一看你的函数名就知道这个函数是做什么的,如果一个表达式出现两次,也可以把它封装成一个变量。第二个就是怎么把If elsea语句写得简短,代码少,执行快。你就要让计算机减少判断。把容易出现的情况写在前面。...

2019-12-14 11:25:18 93

原创 函数调用背后的机制(从汇编语言的角度)

我们天天写python,写C;写函数,写if分支语句,写for循环;我们也知道什么是全局变量,什么是局部变量。但我们是否真正思考过:这些语言的实现,在计算机最底层,也就是汇编语言上是怎么实现的呢?有人可能会说,我从不用汇编,学它何用?我以前也这么认为。一个不懂汽车体系结构的车手当然也能开车,可当车在高速上突然熄火,那就很难堪了。而且不懂汽车结构的车手,开起车来还费油。我认为学汇编也是这样,你可...

2019-08-22 11:27:57 237

原创 关于兴趣

什么是兴趣,不同的人不同的理解。我一高中同学的偶像。曾经想当闷骚地,深刻地,独具慧眼地暗示了自己对兴趣的领悟。他说:有人问一位登山家为什么要去登山——谁都知道登山这件事既危险,又没什么实际的好处,他回答道:“因为那座山峰在那里。”我喜欢这个答案,因为里面包含着幽默感——明明是自己想要登山,偏说是山在那里使他心里痒痒。很多大师写文章动不就论XX,比如《论民主》,《论自由》…今天我也假装一...

2019-07-19 20:00:06 152

原创 如何动态地给一商品增加属性

问题背影:我们从redis中拿到商品的id,以及它的数量,然后去数据库中取到这个id的商品,但是问题是,数据库中的商品没有购物车中要展示的属性,比如商品的数量,商品价格小计。如下图:如何解决这个问题呢?先从redis中拿到这个用户的所有商品列表,列表里是字典,字典有两个参数:商品id,以及这个商品id对应的数目。cart_dict = conn.hgetall(cart_key)很...

2019-07-16 16:57:33 1471

原创 flask项目详情页后端,前端逻辑梳理

详情页,有几块是可以重复用的,一块是左上角的网站标志,一个是右上角和右侧分别的注册和排行,还有就是下面的简价。新闻详情页有这个,新闻列表页也有。所以如何抽取模板呢?张大山那里如果实现呢?那里应该是不同的1下面的排行如何实现2登录注册如何实现,显示是哪个用户登录了取出的是新闻列表,但是是按照阅读量排序的用order_by(clicks)ranknews = News.objects....

2019-06-16 15:03:49 583 1

原创 谈谈学习方法背后的原理

一直以来,不管是求学时代还是工作中,总有些人学习新东西特别快。“别人聪明嘛,老天爷就是不公平”成了很多人低下学习效率的一个安心,逃避的解释。当然在这里我必须承认一点,有些人确实智商高一点,“CPU”跑得比别人快一点,“内存”容量也比一般人大点。但是,我还是要表达我的观点:其实每个人都有一个差不了太多的大脑,都还是几十万年前狩猎时代的远古人。那些看似聪明的人,更有可能是有好的学习方法。如果你掌握了这...

2019-05-29 16:01:31 977

原创 装饰器实现路由功能

1:为什么要用装饰器,有什么优点呢?2:装饰器是如何实现的呢?3:它能完成什么功能呢?解决什么问题呢?可以在调用这个函数之前,就已经完成了这个函数名字与相应的url的对应关系,而这种对应关系用字典这种数据结构来存储。不过哪个url对应哪个视图函数,还是得人工一个一个对。那么是否可以自动化呢?正则表达式?...

2019-04-20 14:34:46 369

原创 python学习中的一些技巧

###以后会经常用到的思想开发项目时,别急着写功能,先确定好用什么数据结构,确定好了,后面写起程序来会方便不少。网络编程v3.1,13节的5:40。演示如何写代码:想到再写,代码不是从第一行写的。网络编程v3.1,第2节,17的4:30秒用目标的方法讲如何写代码。先把能想到的写下来,推不动了,再倒着推,我目标是结婚,那倒着要让她觉得我是个靠谱的人,是爱她的,那怎么让她觉得我是爱她的呢?看...

2019-04-03 09:37:47 368

原创 学习git踩坑记.md

git push 之前要把远程的readme文件拉下来再推 git pull --rebase origin master

2019-04-01 15:18:52 117

原创 目标管理实践之用flask做一个新闻网站

###学习过程的经验:自已计划3月份这个月能学完一个flask项目和爬虫框架。但现实却是flask项目只学了一半。原因是:1:第一次做项目,前面会碰到很多问题,如果前面克服了很多问题,后面就快了。2:去参加完天迎的酒会,回来发现低落。可能觉得自己交际太差。解决办法是:参加聚会过程中:告诉自己别人不会注意自己的,也不会因为你的笨记在心上。别人才没那么关注你。参加聚会后调整心态:0:准备...

2019-03-31 11:30:59 502

原创 flask项目掉坑

1:没有清空main.js2:端口被占用了:打开终端,输入sudo lsof -i:XXXX,xxxx是你刚刚用来开启服务的端口号,然后执行kill AAAA3:从别人的代码复制粘贴过来时,没有注意细小的变化:比如加了注释: /*display:none; */...

2019-03-30 18:18:23 182

原创 用户登录注册实现

返回的图片验证码不像图书馆案例一样是从数据库里取出的数据,而是用服务端另一个程序生成的图片验证码。再把前端发过来的request,和生成的图片码存在redis中。方便下次验证用。发送短信的逻辑:1:从请求中取到:手机号:用于发送给哪个手机用户输入的验证码:用于与redis中的验证码核对是否一样如果手机号格式符合,验证码也对了,就执行发短信的动作,并且给前端返回一个发送成功的respon...

2019-03-30 13:01:27 4104

原创 问题解决方法论(解决bug)

1:导入模块注意,先导入系统模块,再第三方模块,最后是程序模块.2:变量要不要设置成self,要看这个变量的生命周期.如果在函数外还要用,就加self.如果只是暂时用下,不用self也行.3:初始化的时候,self.x,如果被赋值成一个对象.那么在本对象的方法里,就可以通过这个对象属性调用一些这个对象的方法.比如游戏这个对象的方法,可以封装一个英雄开火的方法.游戏对象调用精灵组的方法,比...

2018-07-23 11:41:24 4977

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除