V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  czheo  ›  全部回复第 8 页 / 共 28 页
回复总数  549
1 ... 4  5  6  7  8  9  10  11  12  13 ... 28  
面试电话也就 1 个小时,再忙不至于忙成 1 个小时都抽不出来。
2017-02-14 22:00:43 +08:00
回复了 hoichallenger 创建的主题 程序员 所以, StackOverflow 也换 NavBar 了!?
SO 是越改越好, GH 是越改越烂
2017-02-14 21:50:32 +08:00
回复了 warcraft1236 创建的主题 Python Gevent 是怎么在单线程中实现并发的呢?
稍微看了下 gevent 的具体实现。基本思路是把 python 标准库里面的所有 io 操作都变成 event driven 。好大的工程。。。

首先是 monkey.patch_all 实际是把所有的 io 模块都打了补丁,具体可以看 patch_module 那个函数,用 gevent.{os, socket, sys...}自定义的操作替代了原生标准模块的操作。
https://github.com/gevent/gevent/blob/master/src/gevent/monkey.py#L583
https://github.com/gevent/gevent/blob/master/src/gevent/monkey.py#L152

比如 gevent.socket 这个模块其实是覆盖了原生的 socket 模块,关键操作在 socket._wait 这个函数,把 io event 注册到 gevent.hub 里面。
https://github.com/gevent/gevent/blob/master/src/gevent/_socket3.py#L306
https://github.com/gevent/gevent/blob/master/src/gevent/_socket3.py#L157

gevent.hub 是对 eventloop 的实现。
https://github.com/gevent/gevent/blob/master/src/gevent/hub.py
2017-02-14 19:09:45 +08:00
回复了 warcraft1236 创建的主题 Python Gevent 是怎么在单线程中实现并发的呢?
这个问题问题很好。虽然我没有自己实现过,但我理解大概是这样的。

要理解两个概念: 1. 协程( coroutine ) 2.事件驱动( event-driven )。

1. coroutine (类似于 python 里面的 yield 语法),是把一个 function 执行过程暂停,将其 stack 状态保存,当你需要的时候恢复 stack 状态,从暂停的地方继续执行。
通过这样,你可以自由的控制程序的暂停和恢复。在你的例子里面其实是,把每个 function 执行到 io 操作时都暂停,等你需要的时候( io 返回结果的时候)恢复执行。
但问题是,什么时候你知道 io 返回结果了呢?就需要另外一个机制通知你。

2. event-driven 就是通知你 io 操作完成的机制。基本想法就是 io 操作发生时,你把 io 的 file descriptor 存到一个 poll 里面,操作系统会监控这个 poll 。当其中有 io 结束的时候,操作系统会给你的程序发一个 signal ( event ),告诉你哪一个 io 结束了。这样你就知道什么时候恢复你的程序执行了。

当然这么简单说一说,如果不了解操作系统底层的一些知识,感觉还是挺难理解的。
我猜是这么回事,有不对的请指出。
2017-02-09 18:17:27 +08:00
回复了 mymusise 创建的主题 Python Python 下避免 filter, map (reduce) 重复遍历
@mymusise 等你发 PR 呢,没收到啊
2017-02-09 02:47:17 +08:00
回复了 whwq2012 创建的主题 Python Python 中除了 SimpleHTTPServer, json.tool 外,还有哪些内置的模块?
python -m zipapp
可以用来打包程序
2017-02-09 02:21:12 +08:00
回复了 mymusise 创建的主题 Python Python 下避免 filter, map (reduce) 重复遍历
按照你这个说法,我是不是也可以安利一下我的
https://github.com/czheo/syntax_sugar_python

http://i.imgur.com/JGYKAL6.png
2017-02-07 17:59:28 +08:00
回复了 dxhuii 创建的主题 问与答 一名前端,想学一门后端语言,学 NODEJS 还是 PHP 呢?
当然是 py
2017-02-07 09:41:11 +08:00
回复了 iOran 创建的主题 问与答 非运维的同学们,你们用过那些简单又实用的 shell 命令?
!
2017-02-03 11:36:24 +08:00
回复了 sorra 创建的主题 V2EX 建议 V 友:提问时请用疑问语气或带问号
建议 lz :直接去他们楼下发
例如你这样的标题,我会以为自己来小学生社区了,点进来才知道你是说有些人标题有歧义,让他们写标题认真一点。
@xucheng thx for sharing. but your video is talking about selection vs insertion sort, rather than bubble sort.
总结一下,冒泡和插入,都是把数组分成“排好”(sorted)的和“没有排好”(unsorted)的两部分,进行维护:每次从 unsorted 里面选一个数,放倒 sorted 里面。直到最后只剩下 sorted 的部分。
冒泡:左边 unsorted ,右边 sorted 。通过交换( swap )的方式,把 unsorted 里面最大的数,放倒 sorted 的开头。
插入:左边 sorted ,右边 unsorted 。把 unsorted 里面开头的数,插入到 sorted 里面合适的位置。
@Newyorkcity 对的。还有一个是不用 swap ,所以更快。
冒泡的最大特点是用的 swap ,所以你要排序的 target 是一点一点像气泡一样“浮起来”的。
在我之前发的总结“ O(n2)排序”一章里面都提到了。
wiki 的也算。但不是经典的,写的也不好。 1. insertion sort 不应该用 swap , 2. j 的循环可以提前终止。

帮你写了一个经典的:
https://gist.github.com/czheo/b872c8b7fc7b6ceb7a4f4952d5320749
2017-02-01 19:35:46 +08:00
回复了 Newyorkcity 创建的主题 Python 请轻喷。自己尝试写了一下快速排序,出了点问题,求指点
你那里错我不知道,但根据你的代码改了改可以跑。

https://gist.github.com/czheo/7421d305bb2e5d3049ce48545646d6f4
1 ... 4  5  6  7  8  9  10  11  12  13 ... 28  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1791 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 29ms · UTC 16:38 · PVG 00:38 · LAX 09:38 · JFK 12:38
Developed with CodeLauncher
♥ Do have faith in what you're doing.