V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
V2EX  ›  dongyx  ›  全部回复第 2 页 / 共 4 页
回复总数  67
1  2  3  4  
❮ ❯
2019 年 11 月 8 日
回复了 1oNflow 创建的主题 › Java › 想练一下 Java 多线程相关的知识点可以做什么项目?
http server
2019 年 11 月 1 日
回复了 tenstone 创建的主题 › 程序员 › 如何穿透内网? noip /frp/ngrok ?
我直接 ssh
2019 年 10 月 29 日
回复了 clecho 创建的主题 › 程序员 › 诸位公司项目的代码质量高吗?
@dongyx 另外关于需求和技术的矛盾,我自己有过一些反思。产品和技术的评价标准不一样,如果一个需求会导致按照我们程序员的标准必然导致烂代码,以前的我会觉得特别难受。但是后来发现是我自己被禁锢了,回顾软件工程的历史,我们程序员关于好代码的标准是怎么建立的呢?是在一次一次的实践中建立的,这些标准的最终目的是做出好产品。当市场上绝大部分公司的需求都会破坏这些既定的标准的时候,这说明时代变了,需求的模式变了,而我们软件工程的理论没有变,是我们落后了。我想我们要做的,是去探索新的符合这个时代的软件工程理论和架构模式吧。
2019 年 10 月 29 日
回复了 clecho 创建的主题 › 程序员 › 诸位公司项目的代码质量高吗?
@clecho 我认为求职是个自由市场,如果有其他公司能否给到我们更好的的回报,我们可以选择去新的公司。如果当前公司是我能找到的最好的公司,那我只能想办法把事情做好,以求加薪或者提高选择能力后跳槽。如果能够把现在公司的项目质量提高,对程序员来说是简历上的亮点。什么都很完善了,简历上怎么写了?
2019 年 10 月 29 日
回复了 clecho 创建的主题 › 程序员 › 诸位公司项目的代码质量高吗?
公司雇我们来,就是改善代码质量的。没有 bug,架构完善,给我们那么多钱来做什么呢?我们的任务就是去改进这些东西,而不是抱怨。
@daozhihun 倍增确定上界好赞,送一个感谢给你
@solider245 抱歉,我以为你的需求是确定最大页码,如果你是要爬去所有页面的话,用 while 就行了,二分搜索多此一举。
@solider245 就是一般意义上我们说的二分查找,一般的程序员应该都了解的。 如果你这方面有缺失,我时间不多,只能在这里简单解释一下:假设我有一个有序的整数数组,我想要查询里面一个数的下标,我先拿数组中间的数和目标数对比,如果相等那就找到了,如果小于目标值,就说明目标值在数组的后半部分,那我就去后半部分继续二分,如果大于目标值,说明目标值在数组的前半部分,我就去前部分用同样的方法找。

这样不断地分割数组,我只需要正比于数组长度的对数的时间就能找到值,也就是 1024 长度的数组我只需要找 10 次左右。

对于你的问题,你可以把所有页面看成是一个数组,合法是 0,不合法是 1,这个数组就是[0,0,0,....,1,1,1,1]这样的形式,你要找到最右边的 0,二分搜索就可以了。二分搜索的实现是很容易出 bug 的(除非你很好地掌握了循环不变式的思想, 但是如果你不知道二分搜索,我估计你也不知道循环不变式),所以不建议自己实现。bisect 标准模块已经实现了数组的二分搜索,所以你只需要构造这么一个数组,但是你不能真的去构造数组,不然相当于每个页面都去读取了一次,所以你可以覆盖__getitem__方法,构造一个假的数组,每次读数组的第 i 个值,你去取第 i 个页面就行了。

我给的代码只是简单的 demo,要达到工业强度,还需要一些改进,比如请求失败的处理之类的,祝好运。

PS:while 的做法是每个页码都尝试去读一次,比二分搜索慢了很多,但是如果你的性能需求没有你帖子里说的那么高,那就怎么简单怎么来吧。
我给楼主写一个实现,借助 bisect 标准模块,我们连二分搜索都不用自己实现,bisect_left()会求一个升序数组的 lower_bound,所以我们只需要写一个小类,覆盖__getitem__模拟数组行为,每次取下标 i 都去读站点的第 i 页,如果页面合法就返回 0,否则返回 1,然后调用 bisect_left 就可以了。

下面的例子是二分搜索探寻 Hacker news 的新闻版 ( https://news.ycombinator.com/news?p={page}) 的最大页码。对于 Hacker News 来说,一个页面有帖子当且仅当 HTML 中含有字符串'class='title'",所以可以以这个标准来确定页面是否合法。

V2EX 的回复似乎会忽略缩进,所以我也贴一个 gist: https://gist.github.com/dongyx/cdb7df063c6a4825a51571bd429d0157

import requests
import bisect

def valid(resp):
return int('class="title"' in resp.text)

class PageStatus:
def __getitem__(self, page):
r = requests.get("https://news.ycombinator.com/news",
params={"p": page})

return 0 if valid(r) else 1

end = bisect.bisect_left(PageStatus(), 1, lo=1, hi=1024)

print("the page range is [1, {0})".format(end))
楼主,这个可以用二分搜索解决啊。
2019 年 7 月 6 日
回复了 holinhot 创建的主题 › Python › 请教个 Python sqlalchemy join 问题
1.你的写法无法查出 Price 是因为你 query 的对象仅仅是 Product,尽管你做了显式 join,但是 SQLAlchemy 只会返回 Product 的信心。

2. 正确的写法有很多种,具体要看你的 Product, Price, User 三个 model 类是怎样建立 SQLAlchemy relationships 的。

其中一种最简单的写法,不管你三个类是什么关系都能用的写法,是隐式 jcross join: session.query(Product, Price).filter(Product.id == Price.id & Price.user_group_id == 2)
楼主需要再多给点细节:

1. 2G 是怎么定义的?数据的大小是和数据结构本身有关的,不同结构消耗的空间不一样,你说的 2G,具体是怎样的 2G。

2. 查询是怎么定义的,数据是怎样的结构,需要的查询操作有哪些?比如要查哪些 field,只需要精确匹配吗?需要子串查询吗?正则吗?范围不等式查询吗?
2019 年 6 月 28 日
回复了 wangfyyy 创建的主题 › 问与答 › 大家一般都怎么复制数据库里的表到另一个数据库中
我用过一个很取巧的方法,通过 ORM 做中介。
2019 年 6 月 19 日
回复了 spost 创建的主题 › 奇思妙想 › 按比例惩罚制度~~
我不认同楼主的观点,我想这在本质会会抹平穷富之间的生活水平差异,这可能导致我们失去赚钱的动力,最后的结果是大家都不好过。
我的观点是这样的讨论没有意义,因为人工智能这个词没有 well-defined,我甚至可以直接将 [欲望] 加入到人工智能的定义里对不对。这将导致,楼主和回复者用着同一个词讨论着不同的东西,将会鸡同鸭讲。除非我们能定下一个关于人工智能的定义,讨论才有意义,但是根据我的经验,如果定义清楚了,答案很大概率是明显的,没有讨论的必要。
2019 年 6 月 17 日
回复了 richzhu 创建的主题 › 职场话题 › 该不该跟着 CTO 走~
如果是我的话,会关注这位 CTO 是否是一位好的创业者,以及它提出的项目是否让我激动,希望参与。至于他会不会让你加班,做 CTO 的时候不会,不代表做 CEO 的时候不会,你和他出去不是享福,是创业啊!
2019 年 6 月 15 日
回复了 FFSephiroth 创建的主题 › 程序员 › (讨论)每个程序员都该学习的 5 种开发语言
C/Python/JavaScript/Shell/Scheme
2019 年 6 月 14 日
回复了 aclihui 创建的主题 › Figma › 大佬们,有啥原型图的软件比较好用啊,可否推荐一下下
Sketcht 挺简单的,我们设计师教了我一下,很快就能上手。
1  2  3  4  
❮ ❯
About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   936 Online   Highest 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 26ms · UTC 20:51 · PVG 04:51 · LAX 13:51 · JFK 16:51
♥ Do have faith in what you're doing.