第七周的 ARTS,继续加油。

Algorithm

删除排序数组中的重复项

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
Example1

给定数组 nums = [1,1,2], 
函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 
你不需要考虑数组中超出新长度后面的元素。

Example2

给定 nums = [0,0,1,1,1,2,2,3,3,4],
函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。
你不需要考虑数组中超出新长度后面的元素。

解法1

Read More

第六周的 ARTS,继续加油。

Algorithm

Remove Element

Given an array nums and a value val, remove all instances of that value in-place and return the new length. Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory. The order of elements can be changed. It doesn’t matter what you leave beyond the new length.
Example1

Given nums = [3,2,2,3], val = 3,
Your function should return length = 2, with the first two elements of nums being 2.
It doesn't matter what you leave beyond the returned length.

Example2

Given nums = [0,1,2,2,3,0,4,2], val = 2,
Your function should return length = 5, with the first five elements of nums containing 0, 1, 3, 0, and 4.
Note that the order of those five elements can be arbitrary.
It doesn't matter what values are set beyond the returned length.

解法1

Read More

第五周的 ARTS,继续加油。

Algorithm

Merge Two Sorted Lists

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.

Read More

第四周的 ARTS,继续加油。

Algorithm

Valid Parentheses

Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid. An input string is valid if: Open brackets must be closed by the same type of brackets. Open brackets must be closed in the correct order. Note that an empty string is also considered valid. Example
``` Input: “()” Output: true

Read More

第三周的 ARTS,继续加油。

Algorithm

Palindrome Number

Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward. Example
``` Input: 121 Output: true

Read More

第二周的 ARTS,继续加油。

Algorithm

Add Two Numbers

Given a 32-bit signed integer, reverse digits of an integer. Example
``` Input: 123 Output: 321

Read More

每周至少做一个leetcode的算法题、阅读并点评至少一篇英文技术文章、学习至少一个技术技巧、分享一篇有观点和思考的文章。(也就是Algorithm、Review、Tip、Share简称ARTS),至少坚持一年。

Algorithm

Add Two Numbers

Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have exactly one solution, and you may not use the same element twice. Example
``` Given nums = [2, 7, 11, 15], target = 9,

Read More

Add Two Numbers

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

Read More

年初定了个学习计划,年末也该回头看看,总结一下。
2017年是重要的一年。
这年的第一天,和相恋多年的老婆,终于走进了婚姻殿堂,虽然之前就领证了,但在中国人的观念里,不举行婚礼就算不上真正结婚。人生中,又多了个节日。
另一件重要的事,终于在成都买了房。从2月份看房,一直看到5月底,终于定了下来,尽管有各种不满意,就当是人生的一次经验。有了自己的窝,也有了房贷的压力,有压力也不是坏事,不然一直月光,啥也没干。家里付了首付的100%,我就付了个税费,太惭愧了,得努力赚钱了。
这一年技能上主要学习了 Python、Flask。在6月份定了个学习计划,半年过去了,学完了 Python 基本语法,用 Python 写了个核心网升级工具,后来一直没怎么用,在18年一定要抽时间优化下,争取在组内用起来。学会了用 Flask 框架开发基本的 Web 应用,研究了 Flask 的一些源码,写了一个管理环境信息的应用,还没正式在组内部署。还仿写了个 Httpbin,了解了 Http 协议。
在 github 上搭建了自己的博客网站,学会了用 markdown 语法写文章,虽然博客更新的较慢,但还是坚持每个月至少写上一篇。
工作内容在这一年发生了一些变化,以前面对的问题主要是技术上的,现在的工作需要经常和人打交道,面对的问题很多是关于人的,虽然这一年成长了不少,但还需要不断学习处理这些非技术问题。
11月份办了健身卡,每周坚持锻炼3次,到现在还未间断,身体素质已经有了明显改善,虽然办卡有点小贵,但这个钱花得还是值。从最近在程序员发生的几出悲剧来看,搞 IT 的还是不要一直对着机器,多锻炼下,对身心会有很大改善。
这一年看的非技术书比较少,主要看了《人类简史》、《腾讯传》、《系统之美》、《软技能》、《学会提问》,还有些书只看了一部分,就不列举了。
对2018年的一些计划:
1.熟练掌握 Python Flask
对Python巩固复习,加强算法题的练习。继续学习 Flask,掌握数据库,前端的知识,开发一些较复杂的应用,达到能用 Flask 框架独立进行 Web 开发的水平。
2、处理好工作上的事情
在工作中不断学习解决问题的方法,多思考,做出一些突破。
3、健身、克服坏习惯
坚持健身,争取明年能看到六块腹肌,今年一直晚睡,要克服晚睡的坏习惯。
2018,我来了。

Read More

本文主要分析了 Flask 中 Jinja2 模板的使用。

为什么需要模板

Flask 中,视图函数的作用是生成请求的响应,假设我们的视图函数需要返回一个 HTML 页面,也许我们会想到这样做:

Read More

本文主要分析了 Flask 的上下文机制,包括:application contextrequest context

Local 的实现

在 Flask 中,视图函数处理 http 请求时,需要知道具体的请求信息,比如URL、请求方法、参数等,以及应用信息。Flask 将这些信息封装成上下文对象,类似于全局变量,不同的是:它们是动态的,每个线程都有自己独立的上下文信息,不会相互干扰。
那么是如何实现这种机制的?在 Python 多线程编程中,有个 threading.local 类,可以实现访问某个变量时只有该线程自己能看到,实现的原理是,这个对象保存一个字典,以线程 ID 为键,读取该对象时,它动态地查询当前线程 ID 对应的数据。Flask 使用 Local 类实现了类似的效果,下面是它的实现代码。

Read More

本文主要分析了 Flask 的基本工作流程,由于处理 URL 请求与路由规则强相关,因此先介绍了Flask是怎样建立路由规则,然后详细分析了 Flask 的基本工作流程。

建立路由规则

客户端把请求发给 Web 服务器,Web 服务器再把请求发送给程序实例,程序实例需要知道每个 URL 请求运行哪些代码,所以保存了一个URL到处理函数的映射关系,处理 URL 和函数之间关系的程序称为路由。
Flask 建立路由规则的方法一般通过 @route 装饰器对视图函数进行装饰,例如:

app = Flask(__name__)
@app.route('/')
def index():
    return 'Hello world!'

该方法也可以写成

app = Flask(__name__)
def index():
	return 'Hello world!'
app.add_url_rule('/', 'hello', hello)

建立路由规则时,Flask 究竟做了什么,我们来看看 route 函数:

def route(self, rule, **options):
    def decorator(f):
        endpoint = options.pop('endpoint', None)
        self.add_url_rule(rule, endpoint, f, **options)
        return f
    return decorator

route 函数是一个装饰器,获取参数 options 中的 endpoint 后,调用 add_url_rule 添加路由规则,返回被装饰的函数,这也验证了上面两种方法等价的说法。add_url_rule 是怎样添加路由规则的? ```python def add_url_rule(self, rule, endpoint=None, view_func=None, **options): … rule = self.url_rule_class(rule, methods=methods, **options) rule.provide_automatic_options = provide_automatic_options

Read More