V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
2379920898
V2EX  ›  程序员

再搞个什么语言好呢!

  •  
  •   2379920898 · 2020-10-19 09:37:29 +08:00 · 9401 次点击
    这是一个创建于 1522 天前的主题,其中的信息可能已经有所发展或是发生改变。

    越来越感到 php 最近两年缩水严重!俗话说得好,树挪死,人挪活。目前掌控原生小程序开发,H5,CSS PHP MYSQL,是再学个 python 还是 go 呢。。python 目前来看,应用广泛,第三方包较多。。未来趋势渐好。。GO 目前优势招聘的较多,之前好多公司都转 go 了。但是 go 应用好像没有 python 那么广泛,并且包较少。。

    93 条回复    2020-10-26 09:15:41 +08:00
    lidashuang
        1
    lidashuang  
       2020-10-19 09:43:47 +08:00 via iPhone
    go
    mikulch
        2
    mikulch  
       2020-10-19 09:44:48 +08:00 via iPhone
    国内后端只有 java
    ssssstest
        3
    ssssstest  
       2020-10-19 09:46:44 +08:00
    java 或者 go 吧
    570956418
        4
    570956418  
       2020-10-19 09:47:03 +08:00   ❤️ 1
    我和你差不多的情况,我觉得 go 好些,Python 是应用广,但是我觉得 Python 重要的不是语法,是方向,比如爬虫、人工智能,你做爬虫的 也不能一下子熟悉人工智能,反之也一样,我觉得 Python 难的是那些包和方向的应用,如果确定方向可以 Python,如果只是语言,我觉得还是 go 好些,毕竟有头条 B 站 撑着,未来生态应该会越来越好。
    realbender
        5
    realbender  
       2020-10-19 09:47:19 +08:00
    我感觉你就是想学 python
    2379920898
        6
    2379920898  
    OP
       2020-10-19 09:48:58 +08:00
    我确实是想学 python ..其实语言都大差不差!!难得是性能。。主要是 GO 没有那么多生态。教程少
    maocat
        7
    maocat  
       2020-10-19 09:49:09 +08:00
    都学
    reedthink
        8
    reedthink  
       2020-10-19 09:49:18 +08:00
    go 包少还不好?你搞个包开源,用的人多了,你就成大神了
    2379920898
        9
    2379920898  
    OP
       2020-10-19 09:53:08 +08:00
    @maocat 都学不精!!找准一个学是最明智的选择,毕竟后端需要学的太多,除了语言还要学数据库优化就够头大的了
    iConnect
        10
    iConnect  
       2020-10-19 09:54:02 +08:00 via Android
    英语好的话学 Python,py 的生态不是一天建立起来的,工具需求基本上英语搜一搜都能找到。Go 的话也还不错,毕竟时间短没那么丰富。
    2kCS5c0b0ITXE5k2
        11
    2kCS5c0b0ITXE5k2  
       2020-10-19 09:55:58 +08:00
    会一门动态语言.我觉得需要一个静态语言来补充一下知识面.
    zhanglistar
        12
    zhanglistar  
       2020-10-19 10:03:10 +08:00
    有犹豫的时间都学会了 go 。
    DavidNineRoc
        13
    DavidNineRoc  
       2020-10-19 10:04:49 +08:00
    PHP 很多都去学 Go, 问就是有很多文章对比,.
    haishiwuyuehao
        14
    haishiwuyuehao  
       2020-10-19 10:10:33 +08:00
    真羡慕
    表示 JS 就够玩我十年了
    zoharSoul
        15
    zoharSoul  
       2020-10-19 10:14:52 +08:00
    1 线可以考虑 go
    1 线及以下 java
    yugan300
        16
    yugan300  
       2020-10-19 10:16:05 +08:00
    为啥没有 C++选项。
    qq1340691923
        17
    qq1340691923  
       2020-10-19 10:17:14 +08:00
    建议学 java
    yousabuk
        18
    yousabuk  
       2020-10-19 10:18:14 +08:00 via iPhone
    总有种感觉:程序员会把自己玩 /累 /穷 /孤独死!

    总在想 20 多年前的程序员多幸福多受人崇拜多好找媳妇,TMD,就会一个编程语言就是大神了。
    chogath
        19
    chogath  
       2020-10-19 10:37:25 +08:00
    平滑过渡的话就用 GO 吧,简单
    cmdOptionKana
        20
    cmdOptionKana  
       2020-10-19 10:51:24 +08:00
    @yousabuk 你想想,只有两种可能:

    1. 程序员人少,个个都是大神。 --> 受惠的人都分到了大蛋糕,但受惠人数极少
    2. 程序员人多,多数都是普通打工族。 --> 受惠的人虽然分到的蛋糕不大,但很多人受惠。

    很难说第 1 种情况就更好吧。
    FrankAdler
        21
    FrankAdler  
       2020-10-19 10:53:34 +08:00
    建议跟公司,如果你现在公司有其他语言栈,就参与去开发,不然单独学的化,你下一份工作除非 PHP,不然无经验是很难找的。
    loliordie
        22
    loliordie  
       2020-10-19 10:55:17 +08:00
    如果要找工作 推荐别在 python 一棵树上吊死 我自己就是主营 python 的 深知 python 在后端领域的局限性

    推荐 python java 一起刷 找工作基本要求就是语法规则和常见的库会调用 知道一些语法特性 不会要求太深
    chijiba
        23
    chijiba  
       2020-10-19 10:57:56 +08:00
    php 就够我学一辈子的 为什么不学透
    Bule
        24
    Bule  
       2020-10-19 11:00:33 +08:00
    @loliordie 现在找工作都是算法先行,好烦的~
    BoarBoar
        25
    BoarBoar  
       2020-10-19 11:15:01 +08:00
    @yousabuk 别闹了,语言都大同小易从来不是难点,那时候可是要程序员对底层有非常深的认识的。
    组成原理,编译原理,内存模型这些几个人会?那时候非但操作系统没统一,连编译器都是杂乱无章,我大学老师说那会他们还得手动写中断去控制 cpu 。
    现在一切都给你封装得好好的,我们都不过是靠着调大神的 Api 才能混口饭吃的小人物罢了,比如 time.sleep 这个基础操作,你手撸一个试试?
    LoveJava
        26
    LoveJava  
       2020-10-19 11:20:20 +08:00
    function LanguageChose(wallet) {
    if (wallet.money > 9, 000, 000) {
    return go;
    } else {
    return JAVA;
    }
    }
    ben1024
        27
    ben1024  
       2020-10-19 11:26:43 +08:00
    @LoveJava
    900 万。。。何不去养老
    ben1024
        28
    ben1024  
       2020-10-19 11:28:16 +08:00
    论内卷 Java 应该是内卷最严重的,Golang 最近也挺严重,了解了些公司直接用了一段时间 Golang 然后混用或者换回 PHP
    wangyzj
        29
    wangyzj  
       2020-10-19 11:30:09 +08:00 via iPhone
    #26 秀
    Dogtler
        30
    Dogtler  
       2020-10-19 11:42:24 +08:00
    散布焦虑(纠正)
    wozhizui
        31
    wozhizui  
       2020-10-19 11:43:22 +08:00
    java 或者 go
    7inFen
        32
    7inFen  
       2020-10-19 11:53:26 +08:00
    我现在吃饭靠 js+ts
    娱乐用 rust,一来研究下嵌入式,二来对 webassembly 的支持可能会让我吃到更多的饭
    cco
        33
    cco  
       2020-10-19 12:10:50 +08:00
    随便一个招聘热门语言搞精通都可以。我个人建议 java\go\python,当然还要看你的方向。
    em70
        34
    em70  
       2020-10-19 12:40:35 +08:00   ❤️ 1
    工作多年后,对技术的研究方向,不应该再以找工作为导向了,而是能全栈创业或者 CTO 目标,编程说破大天也是个低端工作,更有价值的是架构. 可以给自己布置作业,你来负责淘宝,滴滴,京东,你会如何来设计系统,就知道该学什么了
    mingceng
        35
    mingceng  
       2020-10-19 12:45:44 +08:00
    我要说.net core 你们可能会骂我,不过最好还是跳出语言层面上升到产品或更高的层面
    ericgui
        36
    ericgui  
       2020-10-19 13:54:45 +08:00
    我最近在学编译原理,准备自己写一个语言
    1109599636
        37
    1109599636  
       2020-10-19 15:00:11 +08:00
    go 吧,我刚从 python 开始转 go,感觉现在的 go 就像五六年前的 python 方兴未艾,好多公司也开始用 go 重构了
    henvm
        38
    henvm  
       2020-10-19 15:25:21 +08:00
    未来 rust 吃香
    sagaxu
        39
    sagaxu  
       2020-10-19 15:49:12 +08:00 via Android   ❤️ 1
    @yousabuk 80 年代出租车司机相当于现在年薪百万,现在如果你有飞机或者游艇的驾照,你也可以年入百万
    raaaaaar
        40
    raaaaaar  
       2020-10-19 15:52:29 +08:00 via Android
    php 还没被淘汰么
    xuanbg
        41
    xuanbg  
       2020-10-19 15:56:41 +08:00
    学语言不如学工具,学工具不如学业务。业务搞明白,就知道赚钱的点在哪里了。去做真正有意义的事,做事的过程中,什么不会学什么,这叫「学以致用」。
    keepeye
        42
    keepeye  
       2020-10-19 15:59:24 +08:00
    php 还是学 go 或者别的静态语言吧,python 用到再学也不迟
    lscexpress
        43
    lscexpress  
       2020-10-19 16:01:13 +08:00
    @BoarBoar 你要是这样说的话,写底层的不过是调用计算机功能的小人物罢了。我感觉你说的话比较幼稚
    BoarBoar
        44
    BoarBoar  
       2020-10-19 16:24:00 +08:00
    @lscexpress 然而事实上是他们转 crud 无比轻松,你要转底层就千难万难。手撸过轮子的难道用轮子还会有障碍?就说我自己用 C++手撸 socket 通信过,第一次写 websocket 调个包要不了半小时。反过来可就不一定咯
    Suvigotimor
        45
    Suvigotimor  
       2020-10-19 16:34:25 +08:00
    我推荐 Nim !
    zjsxwc
        46
    zjsxwc  
       2020-10-19 16:38:57 +08:00
    小学生才做选择题!成年人全都要!
    mlboy
        47
    mlboy  
       2020-10-19 16:46:22 +08:00
    english
    danc
        48
    danc  
       2020-10-19 16:57:57 +08:00
    rust 不香么
    securityCoding
        49
    securityCoding  
       2020-10-19 17:07:55 +08:00
    233 你再犹豫一周都可以学会 go 了 , 有了编程思维上手一门语言都很快的
    chinazz
        50
    chinazz  
       2020-10-19 17:40:27 +08:00
    建议双休。Go Python 肯定都要学的。
    wzw
        51
    wzw  
       2020-10-19 18:04:19 +08:00 via iPhone
    Go
    ghjacky
        52
    ghjacky  
       2020-10-19 18:22:06 +08:00
    一周学会 python,再来一周学会 Go,完事儿
    r2uG4Exzn3q69Ijp
        53
    r2uG4Exzn3q69Ijp  
       2020-10-19 19:16:29 +08:00
    @zoharSoul #15 同意,就业面还得看 java
    huweic
        54
    huweic  
       2020-10-19 19:29:20 +08:00
    Go 和 Python 纠结的话就 Go 吧,字节这边一开始都是 py 的,后面全用 Go 重构了
    TypeError
        55
    TypeError  
       2020-10-19 19:35:34 +08:00
    国内同质化严重,还是学主流的比较好

    web 后端,Java/go
    运维:shell/python/go
    数据开发:Java/python
    前端:js
    lscexpress
        56
    lscexpress  
       2020-10-19 20:46:42 +08:00
    @BoarBoar 你这是莫名其妙迷信底层,简单来说就是不自信
    mangogeek
        57
    mangogeek  
       2020-10-19 21:56:47 +08:00
    go,绝对没错
    charlie21
        58
    charlie21  
       2020-10-20 07:23:48 +08:00
    三线城市死亡语言:
    golang
    rust
    python
    jin7
        59
    jin7  
       2020-10-20 09:26:38 +08:00
    java
    0xWalker
        60
    0xWalker  
       2020-10-20 09:35:12 +08:00 via iPhone
    如果 py 和 golang 犹豫就 golang 吧,饭碗最重要
    no1xsyzy
        61
    no1xsyzy  
       2020-10-20 11:08:37 +08:00
    @BoarBoar 从来没碰过 socket,第一次写 websocket 花了 10 秒复制粘贴,再花 3 分钟改到需要的样子…… 半小时也太恐怖了。
    BoarBoar
        62
    BoarBoar  
       2020-10-20 11:33:57 +08:00
    @lscexpress 你是蜜汁自信,算了,境界不到就是境界不到,多说也无益。
    之所以要了解底层,是因为要找到编程的出发点,去学习各种技术的本质。
    BoarBoar
        63
    BoarBoar  
       2020-10-20 11:40:56 +08:00
    @lscexpres 你从不会听说哪个大神是限定于某语言某框架的,没人会怀疑 linus 花一周不能用 python 写 web 服务
    我自己写过商业项目的就有 c++,java,go,我写 java 还是 ssh 的年代,但是上个月用未接触的 springBoot 写个 grpc 服务,也不会有任何难度。如果不去找到技术的共同点,发现他们的本质。反而执着于某语言某框架的门户之见,你一辈子也只能不停地换框架 crud 罢了
    BoarBoar
        64
    BoarBoar  
       2020-10-20 11:47:19 +08:00
    @no1xsyzy 你真的是程序员么?一个商业项目在你心里建立个连接就算写好了?
    shm7
        65
    shm7  
       2020-10-20 12:53:33 +08:00
    c++
    no1xsyzy
        66
    no1xsyzy  
       2020-10-20 13:23:54 +08:00
    @BoarBoar 那我反问你:难道一个商业项目在你心里调个包就算写好了?
    #63 建议先修逻辑学基础吧。没人会怀疑 = 所有人都确信
    #62 本质从来不在底层,人脑结构是自顶向下的。去底层找本质未必不是老年痴呆。

    至于语言,你恐怕很难理解什么叫 “语言承载思想,语言局限思想”
    你要觉得别人执着于某语言某框架,认定 “局限”,那我同样可以说你没有稳定的思想,认定你没有用以 “承载” 思想的语言 —— 皮之不存,毛将焉附?
    BoarBoar
        67
    BoarBoar  
       2020-10-20 14:59:17 +08:00
    @no1xsyzy 奇怪,既然不是调个包就写好了,那你告诉我你 3 分钟做好了什么?
    后面的懒得看,拜托先出去和人练练怎么说话,不要看几本形而上的书就觉得自己是哲学家了
    fo0o7hU2tr6v6TCe
        68
    fo0o7hU2tr6v6TCe  
       2020-10-20 15:20:12 +08:00
    @charlie21 死亡语言是啥意思 是没工作嘛
    no1xsyzy
        69
    no1xsyzy  
       2020-10-20 15:34:34 +08:00
    @BoarBoar 3 分钟做好了你半小时做好的事情啊?
    那甚至是我第一次实打实写业务代码,随便套了一个简单的前端作 demo,前后端接通就 3 分钟啊
    就 WebSocket 调到能发包要半小时吗?拿这吹?我怀疑你低能。

    看来你就知道一个形而上,连形而上什么意思都不知道就敢讽刺哲学家了?胆儿够儿肥儿。
    看不懂就 “懒得看”,咋没见你 “懒得回” 呢?建议先出去练练怎么听别人说话。
    BoarBoar
        70
    BoarBoar  
       2020-10-20 15:37:49 +08:00
    @no1xsyzy 噗,你真的工作过吗?我说的半小时是做了一个简单的在线客服系统,包括 socket 连接的注册与管理,连接的鉴权和错误提示,客服连接的随机分配。你来 3 分钟给我做好试试?前后端接通?这不是理所当然的吗这他妈也值得说?
    BoarBoar
        71
    BoarBoar  
       2020-10-20 15:45:29 +08:00
    @no1xsyzy 跟你说了是商业项目了,你家公司的项目是连通就算完成了?和 helloword 有区别么?
    no1xsyzy
        72
    no1xsyzy  
       2020-10-20 15:52:24 +08:00
    @BoarBoar 好的,感谢您的解释,已经确定您的语文需要重修。
    Free tips: “调个包” is not valid Chinese phrase.
    然而这和手撸过 C++ 的 socket 有什么关系呢?基于 socket 还是 WebSocket 做功能罢了。
    做底层?这他妈也值得说成是底层?
    BoarBoar
        73
    BoarBoar  
       2020-10-20 16:15:53 +08:00
    @no1xsyzy 原理是相同的,只是 ws 简化了以前要自己写的代码,这都不明白?
    如何去注册,发心跳,发消息到特定连接,清晰了原理,自然是万变不离其宗,再怎么换都能很快熟悉。
    如果不明白本质只是会调包,这些你去看文档要多久?如果换个语言呢?重新熟悉包又要多久?甚至有时候三方包满足不了业务需求要手撸一个,你怎么搞?要是做不到,你凭什么拿比别人高的工资?
    小朋友,你现在能混口饭吃,得感谢大神们帮你做的封装。也就七八年前,没有 v8,node,vue,react 的时候,你问问你的前辈切图仔们一个月多少工资啊
    lbp0200
        74
    lbp0200  
       2020-10-20 16:18:26 +08:00
    面向工资编程,当然是 Java
    no1xsyzy
        75
    no1xsyzy  
       2020-10-20 19:06:44 +08:00   ❤️ 1
    @BoarBoar 所以说这就叫底层了?用 socket 不还是业务代码?我还真当你从以太网开始撸呢(
    要是你看到原教旨的 lisp 七个符号实现图灵完备岂不是要高兴得晕过去?
    若要清晰原理,C++ 可谓是第一把坏手,太多怪异的语言细节,一半的时间是在搞清楚语言的词法 —— 对就是词法,人眼连 lexer 都当不好。 —— 哦你可能是用的 C with objects,还是 extern "C"?
    ——
    翻了下你发言历史的时候意识到你说的调包原来是指调用第三方库……
    那我就跟你说下,去理解下什么叫 “抽象”。
    如果你只是想到封装的话那你真的就是脚本小子 —— 或者借个词 ——“调包”小子了。
    在上层业务代码看来,WebSocket 并不是 socket 的封装,而是在 HTTP/S 基础上重新实现一个高级的 socket 抽象,是并列、可互换的关系。
    已知 socket 去理解 WebSocket 或者反过来,两者没有什么两样。
    BoarBoar
        76
    BoarBoar  
       2020-10-20 19:42:30 +08:00
    @no1xsyzy 算了,我没兴趣和一个切图仔玩文字游戏。你都不了解的东西,凭臆想扯了这么大一堆不累么?在你的世界里,socket 连通就算大功告成,夏虫永远不知道后面做了多少工作。空谈免了,欢迎拿代码打我脸。
    hyperbin
        77
    hyperbin  
       2020-10-20 19:58:25 +08:00 via Android
    @loliordie 面试造火箭,工作拧螺丝
    tuomasi
        78
    tuomasi  
       2020-10-20 20:34:00 +08:00   ❤️ 1
    上面的吵架消息,我忘了在哪看到过
    mamahaha
        79
    mamahaha  
       2020-10-21 01:22:01 +08:00
    go 语言急需大量开荒老黄牛,完善开源包和框架
    t2doo
        80
    t2doo  
       2020-10-21 09:21:08 +08:00
    同写 PHP,感觉今年位置少了很多
    liuyibao
        81
    liuyibao  
       2020-10-21 09:33:48 +08:00
    @ben1024 有道理,国内公司都是盲目追,看别人用 Go 自己也用,其实很多业务目前 Go 不合适
    yingo
        82
    yingo  
       2020-10-21 11:22:55 +08:00
    不推荐 go 和 python,还是推荐 java.
    no1xsyzy
        83
    no1xsyzy  
       2020-10-21 13:39:04 +08:00
    @BoarBoar 没切过图,我不配当切图仔(
    你真是了解,只会码代码不会编程
    胡诹一个 “我” 的世界,然后声称是错的 —— 这手法好像叫空气靶子?
    no1xsyzy
        84
    no1xsyzy  
       2020-10-21 13:44:52 +08:00
    @BoarBoar 什么话都不说,一句求代码打脸
    你知不知道 torvalds 说出 talk is cheap 的前提是已经充分地讨论过之后,针对具体的一个功能说的?
    针对很明确的 “对于每个线程,内核管理它用的内存是否可以压到 64KB (具体数值不确定)以内”
    你现在与我什么都没说,你要我拿什么代码打你脸?

    print("hello world")

    可以了吗?是不是打得啪啪响?
    BoarBoar
        85
    BoarBoar  
       2020-10-21 14:48:14 +08:00
    @no1xsyzy 你不适合做技术,当个运营凭空吹逼说不定还有点前途。这样把,我大概两三个月前做过一个需求,根据 ip 确定地址,很常见也很简单把,唯一的问题是要细分到城市,ip 库的记录有数亿条,但必须在 0.x 秒内完成查询。我也很想看看一个内存模型都不懂的人,用什么框架什么工具能完成这个需求。
    no1xsyzy
        86
    no1xsyzy  
       2020-10-23 00:31:31 +08:00
    @BoarBoar 稀疏还是稠密?
    稀疏用 B-tree 甚至二叉搜索树就行(甚至不用平衡树,直接预处理成最优搜索树就行了),稠密用状压和分层指针……
    真的还要说一遍吗?这难道不是已经用烂的了吗?

    原来你就是个做需求的,能不能别说搞技术的问题…… 现在全中国 IT 界有几个人搞技术?能搞技术的早就要么自己开公司要么跑路国外或者远程国外了好么?

    别谈内存模型不懂,那不是我,我 NOIP 出身的。
    BoarBoar
        87
    BoarBoar  
       2020-10-23 11:19:42 +08:00
    @no1xsyzy 噗,百度了几天又开始拿臆想装逼了?
    你倒是写一句代码出来看看啊,二叉树都来了,几亿个 node 的二叉树你知道搜索一次要多久吗。
    你他妈自己看看你这些贴,从头到尾都是虚无缥缈的高谈阔论,有一句话能落到实处吗?靠百度和别人说的你指望能蒙住谁呢?
    没有领导的命得了领导病,不知道的你是切图仔的还以为是啥天天发表重要讲话 xx 精神的呢
    no1xsyzy
        88
    no1xsyzy  
       2020-10-23 15:11:50 +08:00
    @BoarBoar 问你稀疏还是稠密,稀疏就是不需要几亿个节点。
    何况 O(log) 要多久你自己不会算吗?才几亿个诶?

    你倒是百度得出来,我叫你爷?
    只知道百度?
    你倒是百度出来的题目吧?

    做不来底层神化底层,不知道的还以为你是 torvalds 亲临 v2 呢!
    BoarBoar
        89
    BoarBoar  
       2020-10-23 15:57:17 +08:00
    @no1xsyzy 面对一个满口假大空,还拼命骗自己别人都看不出来,死鸭子嘴硬的人我还能说啥呢?
    我第一次听说还有用二叉树做索引的,抱着个百度来的 O(logN)就当真理了?你家服务器没有 I/O 延迟的?
    你真当自己随便臆想一下就是事实了?请问这位天才切图仔,您到底做过啥项目啊,晒一个来给我开开眼呗
    no1xsyzy
        90
    no1xsyzy  
       2020-10-23 19:21:01 +08:00
    @BoarBoar 内存的 IO 延迟要考虑的吗?(
    一次预处理进内存的基本工程操作,你不会不懂吧?
    log N 就算加上 HDD 的延迟都不是事儿好吧
    稀疏要我解释吗?全球就几十万到几百万个城市,如果每个城市划到的 IP 段都比较连续,那就不需要几亿个 node,就是几百万 node,log N 就是 20 次,因为存取量不大,瓶颈在 IOPS,就算是 HDD 40 IOPS 也能在 20 秒内完成。
    至于稠密就是状压,这个不用我多说了吧?还有个名字叫 bitmap,虽然这边不按 bit 算,应该按 4 或者 8 字节算。

    处理器性能参考 NOIP 的羸弱机器,1e8 = 1 秒

    成天百毒百毒百毒,李彦宏是你的妈?
    no1xsyzy
        91
    no1xsyzy  
       2020-10-23 19:21:54 +08:00
    @BoarBoar 做过的项目,v2 的功能可以直接看到啊?
    BoarBoar
        92
    BoarBoar  
       2020-10-23 21:08:29 +08:00
    @no1xsyzy 好,能说出这些理解,算你还有点水平,我为之前的轻视道歉
    说百度是因为之前觉得你只配用百度,我也道歉

    不过我之前的做法是把 ip 按一定规则转为 long 型分成 10 个一块排好序,格式化为固定长度,加载进连续内存,拿到一个起始地址的指针。
    查询时只需将所查 ip 转为 long 型,差值*块长=偏移量,起始指针+偏移量直接就能访问要查的 ip 块,最多再处理下保留段和一块里有两个城市段的情况。时间复杂度不用说了罢?本地测试从未超过 0.1 秒。
    当然我承认这个玩法得 ip 库纪录很全,我个人是买不起这种库的。不过就算公司买了库,我也不觉得一个不懂内存的人能写出 O(1)来。

    你那几个个人项目没兴趣一个个去看,扯了几天了也累了,互相说服不了,就这样罢
    no1xsyzy
        93
    no1xsyzy  
       2020-10-26 09:15:41 +08:00
    @BoarBoar 我也为上面脏话道歉。

    周末断了 v2 冷静一下。
    其实《编程珠玑》里面就有,但这本书里面的内容更多的是描述条件受限情况下的工程解,我之前不太想提;计科的就算科班不一定会接触到。
    何况买得起这种库的公司弄个分布式的查询也都不是事儿,实际上的对这方面的需求一直在降低。业务侧程序员的技术含量和技术需求都在降低是大趋势。
    反而是对于接口的抽象,并由此可快速将一套框架下的知识转换到另一套框架的技能比较有用,但只是为了省时间。尤其现在新框架一直在出,每个从头学一遍必然跟不上的。这方面其实从上层出发还是从底层出发倒不重要,何况 SICP 这个 “计科第一门课” 甚至是从最最最顶层的 Lisp 开始的,刚进去就把闭包(词法作用域)当作显而易见的常识。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5913 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 02:08 · PVG 10:08 · LAX 18:08 · JFK 21:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.