上药三品,神与气精

曾因酒醉鞭名马 生怕情多累美人


  • 首页

  • 关于

  • 分类

  • 标签

  • 归档

  • 搜索

2019-go-07

发表于 2019-02-23 | 分类于 golang | 阅读次数:
字数统计: 48 | 阅读时长 ≈ 1
  • 多核硬件架构
  • 超大规模分布式集群
  • web模式导致前所未有的开发规模和更新速度

简单高效生产力

追求极致的简单

2019-go-06

发表于 2019-02-23 | 分类于 golang | 阅读次数:
字数统计: 276 | 阅读时长 ≈ 1

golang 的面试题目 收集

  • uint不能直接相减,结果是负数会变成一个很大的uint,这点对动态语言出身的会可能坑。
  • channel一定记得close。
  • goroutine记得return或者中断,不然容易造成goroutine占用大量CPU。
  • 从slice创建slice的时候,注意原slice的操作可能导致底层数组变化。
  • 如果你要创建一个很长的slice,尽量创建成一个slice里存引用,这样可以分批释放,避免gc在低配机器上stop the world

面试的时候尽量了解协程,线程,进程的区别。

明白channel是通过注册相关goroutine id实现消息通知的。

slice底层是数组,保存了len,capacity和对数组的引用。

如果了解协程的模型,就知道所谓抢占式goroutine调用是什么意思。

尽量了解互斥锁,读写锁,死锁等一些数据竞争的概念,debug的时候可能会有用。

尽量了解golang的内存模型,知道多小才是小对象,为什么小对象多了会造成gc压力。

flask-0.1

发表于 2019-02-19 | 阅读次数:
字数统计: 547 | 阅读时长 ≈ 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

# Flask v0.1
class _RequestContext(object):
"""The request context contains all request relevant information. It is
created at the beginning of the request and pushed to the
`_request_ctx_stack` and removed at the end of it. It will create the
URL adapter and request object for the WSGI environment provided.
"""

def __init__(self, app, environ):
self.app = app
self.url_adapter = app.url_map.bind_to_environ(environ)
self.request = app.request_class(environ)
self.session = app.open_session(self.request)
self.g = _RequestGlobals()
self.flashes = None

def __enter__(self):
_request_ctx_stack.push(self)

def __exit__(self, exc_type, exc_value, tb):
# do not pop the request stack if we are in debug mode and an
# exception happened. This will allow the debugger to still
# access the request object in the interactive shell.
if tb is None or not self.app.debug:
_request_ctx_stack.pop()

请求上下文

根据_RequestContext上下文对象的定义,可以发现,在构造这个对象的时候添加了和Flask应用相关的一些属性:

app ——上下文对象的app属性是当前的Flask应用;
url_adapter ——上下文对象的url_adapter属性是通过Flask应用中的Map实例构造成一个MapAdapter实例,主要功能是将请求中的URL和Map实例中的URL规则进行匹配;
request ——上下文对象的request属性是通过Request类构造的实例,反映请求的信息;
session ——上下文对象的session属性存储请求的会话信息;
g ——上下文对象的g属性可以存储全局的一些变量。
flashes ——消息闪现的信息。

1
2
3
4
5

current_app = LocalProxy(lambda: _request_ctx_stack.top.app)
request = LocalProxy(lambda: _request_ctx_stack.top.request)
session = LocalProxy(lambda: _request_ctx_stack.top.session)
g = LocalProxy(lambda: _request_ctx_stack.top.g)

在上下文对象中处理请求的过程分为以下几个步骤:

在请求正式被处理之前的一些操作,调用preprocess_request()方法,例如打开一个数据库连接等操作;
正式处理请求。这个过程调用dispatch_request()方法,这个方法会根据URL匹配的情况调用相关的视图函数;
将从视图函数返回的值转变为一个Response对象;
在响应被发送到WSGI服务器之前,调用process_response(response)做一些后续处理过程;
调用response(environ, start_response)方法将响应发送回WSGI服务器。关于此方法的使用,可以参考:Werkzeug库——wrappers模块;
退出上下文环境时,LocalStack会清理当前线程/协程产生的数据(请求上下文对象)。

leetcode-986

发表于 2019-02-18 | 分类于 leetcode | 阅读次数:
字数统计: 117 | 阅读时长 ≈ 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
合并区间
# Definition for an interval.
class Interval(object):
def __init__(self, s=0, e=0):
self.start = s
self.end = e

class Solution(object):
def intervalIntersection(self, A, B):
"""
:type A: List[Interval]
:type B: List[Interval]
:rtype: List[Interval]
"""
a, b, res, i, j = len(A), len(B), [], 0, 0
while i < a and j < b:
left_a, right_a = A[i].start, A[i].end
left_b, right_b = B[j].start, B[j].end
if left_a < left_b:
left = left_b
else:
left = left_a
if right_a < right_b:
right = right_a
i += 1
else:
right = right_b
j += 1
if right >= left:
res.append(Interval(left, right))
return res

django2.x-on_delete

发表于 2019-02-14 | 阅读次数:
字数统计: 226 | 阅读时长 ≈ 1
1
2
3
4
5
6
7
8
9
10
11
on_delete=None,               # 删除关联表中的数据时,当前表与其关联的field的行为
on_delete=models.CASCADE, # 删除关联数据,与之关联也删除
on_delete=models.DO_NOTHING, # 删除关联数据,什么也不做
on_delete=models.PROTECT, # 删除关联数据,引发错误ProtectedError
# models.ForeignKey('关联表', on_delete=models.SET_NULL, blank=True, null=True)
on_delete=models.SET_NULL, # 删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空,一对一同理)
# models.ForeignKey('关联表', on_delete=models.SET_DEFAULT, default='默认值')
on_delete=models.SET_DEFAULT, # 删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值,一对一同理)
on_delete=models.SET, # 删除关联数据,
a. 与之关联的值设置为指定值,设置:models.SET(值)
b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)
1…474849…109
John Cheung

John Cheung

improve your python skills

543 日志
33 分类
45 标签
RSS
GitHub Email
© 2020 John Cheung
本站访客数:
|
主题 — NexT.Pisces v5.1.4
博客全站共226.3k字