V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  lesismal  ›  全部回复第 52 页 / 共 60 页
回复总数  1200
1 ... 44  45  46  47  48  49  50  51  52  53 ... 60  
2021-06-25 00:50:41 +08:00
回复了 xiaoxuz 创建的主题 程序员 生成器模式-代码的艺术系列(一)
以上所有打字直到现在,我确实心里没什么波澜,算是平和的。
中毒这种说法是因为早年也跟不少 cpp 语言党聊过太多了,cpp 中毒太深的人过度玩弄语法语义和各种特性,cpp 里也有不少乐于搞设计模式的,一个单例能搞出 6 种还是 8 种实现。然而实际的架构设计、工程设计、算法设计、结构设计却不到位,导致日常夸夸其谈,项目问题不断。
这些多年撕得多得出的结论,而且也因为撕得多,所以早就平和了。

就像无法叫醒一个装睡的人,执着于语言特性、设计模式的好多人,也难回头,所以我称之为中毒。
经济学上讲,是因为“沉没成本效应”。在程序员这种职业上体现出来就是:自己花了不少功夫在某些知识上,舍不得承认这些知识的无用,并且继续对它学习研究,从而遮了眼、阻碍了自己的提升。
就比如设计模式吧,@no1xsyzy 见识广博,#21 里已经提到过了,设计模式之父自己都承认实际效果并不那么好。你再掰开了揉碎了仔细思考,真正有用的一些设计模式,比如观察者 /发布订阅,这种总结出来确实不错,但是大多数的设计模式真的未必有用,反倒是误以为宝贝的人,反复琢磨把玩、浪费了很多时间。比如单例模式,除了 java 这种一切皆类、必须通过实现单例或者直接 static 变量(不方法不优雅)才能使用这个公共变量的方式,其他语言基本都是一个公共变量就完事了,最多再加个显示的初始化或者作为函数返回值,让调用的方式看上去有一点虚伪的逼格而已。再比如工厂系列,最初知道这竟然是一种设计模式的时候,我都不好意思笑,多自然的一个事情,构造函数写舒服点就是工厂系列,非要整个单独的 createXX 之类的也行,设计模式之父自己都承认了一些事(我没去考证真假,但从设计模式实际的效用上讲,我觉得他应该承认过),我们大众何苦为难、作践自己呢。。。

设计模式和 go,我这么多认真回复,我觉得是“买椟还珠”,你作为卖家拿设计模式当个珠,用 go 的 demo 的盒子把它装里面了,而我是为了 go 这个盒子而来,真没 care 过设计模式

甚至于面向对象,大概 1996 年 cpp 标准委员会那帮老头子们开会就在聊“面向对象被社区滥用了呀”

再说点设计模式和面向对象的问题。社区已有的积累,可以继续吃老本,比如企业级、电商之类的,尤其是 java
但是良好的 OO 抽象体系也好、易扩展也好,在面对高速发展、快速迭代的产品和需求面前都不那么好使:
面向对象的鸭嘴兽问题,使得在很难预期大部分未来需求前提下,无法完美抽象、只能做到当下的抽象、无法做到未来的易扩展,设计模式同样,那些以为现在这样有哪些好处,未来可以怎样易于修改的好处,当不确定的未来真正到来的时候,很难发挥出其预期的优势,反倒可能因为早期的臃肿设计导致后续的修改难度更大。
真正有效的方案是进行阶段性重构。如果团队业务更新太快、疲于奔命,阶段性重构的频率就要降低、周期就要拉长,就得等到长时间日积月累后毕其功于一役。
今天为了以后易扩展做了很多更复杂的设计,明天可能因为非预期内的变化导致修改难度更大。所以像 go 这种不重语法糖特性和模式,反而专注于让事情简单化的语言,却成了工程性更好的选择

你应该能够从 go 语言本身感受到并且再深入思考一些:为什么 go 不天然面向对象?也不重设计模式?也不在意那些花哨的语法糖?
go 已经是站在那些以往优秀语言的巨人肩膀上,如果那些东西真的那么好,难道 c 爹和 rob pikez 这些老头子是老糊涂了?——这帮老头子们真的是老中医,切脉稳准狠,开出了 go 这副方子,让我一副药下肚,码欲大增、秀发得保,虽老矣,为心所愿之代码,尚可稍废寝食

然后我的疑问来了,既然用 go 了,你的意思好像又说你只写 go,那是谁带你跑偏去研习设计模式的?
把你引入歧途的人,是人性的扭曲还是道德的沦丧。。。你得喷他啊顺便把他也带回正轨。。。
2021-06-24 22:31:51 +08:00
回复了 xiaoxuz 创建的主题 程序员 生成器模式-代码的艺术系列(一)
@xiaoxuz
如果实在觉得用 go 举例子不影响看球,那多举点例子:

一把杀过人的普通菜刀赠送给邻居,邻居不会愿意要,觉得不吉利,是不是应该强调菜刀只是道具跟杀人没关系?
赵薇日本军旗,军旗只是拍时尚照道具而已,赵薇不应该被喷,军旗也没毛病?

如果道具在一切场景都可以解释成只是道具、不影响用来做什么,那这世界就不会存在忌讳了。

天不早了,晚安
2021-06-24 22:18:18 +08:00
回复了 xiaoxuz 创建的主题 程序员 生成器模式-代码的艺术系列(一)
@xiaoxuz

上一楼语气还看着正常些的,说翻脸就翻脸,淡定点。

要是真侃技术,咱就聊技术的,别扯远了,我这也一直聊的技术,别扯什么中医不中医的,你看看#18 楼你几句回复,看上去认真在回复似的,但是都是在把话题扯远了、没在正题上。

既然用 go 举例子,还不能让别人说了?而且设计模式本身的很多臃肿,并不限于 go,我从 go 开喷只是因为你用了这么臃肿的 go 代码做示范。你要说用 go 做示范但是是为了设计模式、跟 go 没丝毫关系和影响,这逻辑就像莫文蔚穿个啥乳 h 品牌然后强调自己只是打广告跟乳 h 没关系类似的道理,然后还不允许别人喷

你要是没用 go 举例子,如果我点进来看一眼是 java 我转身就走了,头都不回,因为个人不喜欢 java 觉得 java 不值得我浪费时间、毫无兴趣,但是我也不随便就喷 java,因为不只是一个人的 java 臃肿

还有不是要安利什么的说法,我在之前楼里也说过了,你都写文章这么正向推介了,还解释不是安利作何?没必要的,安利了就安利了,你认为对、拿出来大家聊,越辩越明就完事了。逻辑搞清楚点,别聊技术又不正面应对又不承认这不承认那的,也别给别人扣帽子什么中医

还有,关于私货这个,如果只是简单提起+一个链接,你说 xr 之举也就算了。但即使私货,我也带上了大段的内容,希望能有人看到、从中吸收一些知识点,对于宣传知识贡献开源而言、没什么不好意思的,做这项目也不是为了钱,到了职业年龄末段了,只是想给社区一些回馈、给自己留些念想,如果幸运能多来点人到仓库看看、用用甚至再来点 issue 、pr,那更开心了。但是说句失望的,就这么段内容,能 get 到点的人非常少,一是别人也未必认真读到我这段内容了,二是别人之前不知道这个问题相关的这么些信息,三是确实是有些难度。你反手看看其他一些异步网络库,只做自家业务比如游戏的 tcp 协议异步库也就算了,但是对于 http/websocket/tls,数千 star 那些,基本没有支持的,都是玩具。

最后,既然写文章发出来了,就要接受你的受众的反馈,既有正向的又有负向的,零差评是几乎不可能的事情,不要那么在意面子,太在意面子,即使能在面子驱动下搞好技术也气大伤身、没必要。如果实在在意,可以先内修、等心态更平和的年纪再把文章发出来
2021-06-24 18:04:10 +08:00
回复了 xiaoxuz 创建的主题 程序员 生成器模式-代码的艺术系列(一)
@xiaoxuz
现在我有主观态度了: 爱看不看,话太密! 你写 go,不能证明你可以代表所有 goer~
—— 对,这一点我非常赞同。你写你的,我认为不好的我就提出来,不让某个观点独霸市场。各有说辞,其他人看了也才能有更多思考、减小误入歧途的概率

另外夹带个私活,我自己的异步网络仓库,已经支持  http1.x/websocket/tls:
https://github.com/lesismal/nbio

以往有些老帖子,golang websocket 百万连接相关的,引入 poller 通过事件的方式控制数据读,不用为每个连接都分配一个协程,进而降低海量并发场景下协程数量过多带来的的巨大内存开销和调度成本。
这些方案对应有 gobwas/ws + easygo/netpoll 之类的框架。
但是他们都做错了,只是把 fd 加入到 poller,读事件时进行读取完整的 http upgrade request/websocket message,但是读取过程中如果该连接数据只到达一半,该读取过程将阻塞,进而造成该连接所在的 poller 的 event loop 阻塞或者专用于读取的协程池协程被阻塞占用,这种连接多了则服务相应速度变慢甚至不可用,如果协程池 size 大于连接数,则异步网络网络库减少 goroutine 数量的目的就达不到了
实际要解决问题,需要的不只是异步 io 接口,更需要的是粘包解析,nbio 的实现方式是解决了这些问题的,欢迎试用
2021-06-24 16:13:33 +08:00
回复了 xiaoxuz 创建的主题 程序员 生成器模式-代码的艺术系列(一)
这个文章重点是介绍设计模式,而不是安利谁要干什么,没有个人观点的输出昂!
—— 写这种文章本身就意味着一种宣传,并且文章主体包括楼主后续的回复,其实都是非常认可文章内容、对内容产生的是正向推介作用,所以就不要说安利不安利了,写了文章本身就是一种安利文章观点,而观点本身又是对内容的正向推介

存在即合理
——我不是搞哲学的,解释不清楚,有兴趣的话可以到某乎上去看下,也不要再误解这句话了: https://www.zhihu.com/question/19851152

比如截取一段:

```text
并被当做颇有来历的谚语警句讹传于大众话语圈。通常的表述形式有:

> 存在即合理

甚至干脆就是

> 凡是存在的都是正当的 /正确的。What is,is right.
```

另外,不管楼主安利不安利,我要安利:keep go clean, keep it simple stupid.
2021-06-24 14:55:44 +08:00
回复了 xiaoxuz 创建的主题 程序员 生成器模式-代码的艺术系列(一)
@xiaoxuz

是的,看个人风格——所以手持臃肿的铁锤的人就是那么喜欢臃肿的钉子。

如果能只在自家臃肿就好了,放过那些新手,免得把 go 社区更多小白也整成臃肿的了。

另外,中了臃肿的毒的人,可能根本不知道自己中毒了。
2021-06-24 12:16:19 +08:00
回复了 xiaoxuz 创建的主题 程序员 生成器模式-代码的艺术系列(一)
“模式”党不要过度污染 go 了吧,隔三差五就看到 java 味道的 go,本来简简单单几行代码搞定,被你们一搞,哦豁。
2021-06-23 16:29:32 +08:00
回复了 liouop 创建的主题 职场话题 是不是只有我对“阿里”这个词 PTSD 了.....
问问他阿里 P 几,如果是>=P9,听他指挥,如果小于 P9
问问他这种 low p 靠谱的少、多数是跳到其他中小团队负责一些管理然后专业坑队友自己心里没点 B 数吗
别说什么 P7 专家 P8 高级专家,7/8 里真正对得起架构师、专家、高级专家这些头衔肯定是有,但是靠谱的比例非常小
2021-06-20 17:42:30 +08:00
回复了 Jay54520 创建的主题 投资 如何看待交易员声称从 1000 赚到 1000 万?
看看这个吧:

18 年收益 14.5 万倍,神秘香港富豪成亚洲新首富!

  上帝之手:神秘账户从事黄金现货的交易,在过去的 18 年里,他的收益高达 14.5 万倍。

  美国期货商品交易委员会(CFTC)近日在审查中发现,一个开户地为香港的神秘人物,其交易账户中的资金额超过 1170 多亿美元,创造了新的历史记录,这个不知名的神秘人物成为了新的亚洲首富,甚至以实际可操控的资金量计算,他的资产远远超过了世界首富贝佐斯。

 美国期货商品交易委员会表示:目前暂不知道这名人物叫什么名字,属于哪个国籍,由于严格的交易人保密原则,仅知道这个人的交易编码。他于 2003 年在香港交易所开设账户,从事黄金现货的交易,在过去的 18 年里,他的收益高达 14.5 万倍,创造了上帝也不可能做到的交易奇迹。目前美国商品交易委员会已经向香港交易所 2 函,要求对其个人是否在交易过程中存在的违规行为进行调查,并且要求香港金融监管委员会配合转交这名交易人的开户资料。

  美国期货商品交易委员会称如此大的资金池,即便是最低保证金的交易量,也足以对全球资本,期货,现货和黄金市场掀起惊涛骇浪,但却在过去的十几年中没有被发现。CFTC 查阅了过去 18 年来这名神秘人物的交易记录发现,他的每次交易量都一直保持在很低的水平,似乎是用“复利”的魔法在累积巨额的财富。虽然他的账户金额高达千亿美元,但过去 18 年来,他通过英国渣打银行总共提取的资金只有数千万美元。

  美国期货业协会首席专家,纽约大学教授詹姆斯·克伦威尔表示: 我们需要知道的是,这名神秘富豪是如何做到如此高的收益率的,全球期货和现货市场并不像股票市场,可以进行人为操纵和干预,这几乎不可能。如果他是靠自己的能力做到的,那么他将比沃伦·巴菲特强万倍。
2021-06-18 15:46:22 +08:00
回复了 hfl1995 创建的主题 程序员 坚定不移的认为,不给程序员配 4K 显示器的公司要远离。
一个显示器或者 mbp 才多少钱。有些公司把办公用的什么 mbp/pc 、工学椅、显示器弄高大上一点,然后压低工资,而且这些还都是公司的固定资产,离职了公司只是付出个折旧费用。
而大部分这种提供好配置的,都压工资,单按钱算,给你配好点环境,多花万八千或者一两三万,但是一年却至少能省几万。如果公司不给配,自带设备但是别压工资都划算

所以,应该是给配 4k 的公司大部分公司别去。

另外,越高清似乎越伤眼睛。
亚马逊谷歌这些都是按量计费,容易翻车,前几个月有个帖子就说有个小公司差点因此破产

用国内厂的包带宽的这种,不走按量计费,坏处是量小浪费钱,但好处是损失可控

按量计费遇上恶意攻击,就只能依赖云厂良心了
2021-06-11 19:14:12 +08:00
回复了 abersheeran 创建的主题 程序员 怎么优雅的实现 TCP Ping?
楼主玩 python 但不是做 AI 方向,有点可惜人才了,早点全面转 go 会大大提升自己在服务端的上限
2021-06-11 19:11:18 +08:00
回复了 abersheeran 创建的主题 程序员 怎么优雅的实现 TCP Ping?
一个三层一个四层,通常:
人工排查网络故障普通问题用 ping
业务服务相关并且 ping 不能满足需求(比如某端口是否开启)的软件功能开发用 4 、7 层建连或 req/res

看你实际要做什么,比如云厂的服务端口健康检查或者自家 devops 节点服务状态检查,这本身不是 ICMP 这种三层专用协议能做到的,就需要业务层自己开发
2021-06-04 17:23:03 +08:00
回复了 Nillouise 创建的主题 程序员 单机的 qps 普遍是多少?网上基本都没搜到什么资料说明
@no1xsyzy 大部分是 IO 导致的延迟,不能简单按延迟和 CPU 数量计算

4c8t 虚拟机:
cat /proc/cpuinfo| grep "physical id" | wc -l
8

./wrk -t4 -c800 -d10s --latency --script=./echo.lua http://localhost:8080/echo
Running 10s test @ http://localhost:8080/echo
4 threads and 800 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 4.23ms 3.00ms 73.33ms 82.50%
Req/Sec 47.86k 4.49k 57.78k 73.25%
Latency Distribution
50% 3.71ms
75% 5.39ms
90% 7.38ms
99% 13.35ms
1906200 requests in 10.04s, 269.05MB read
Requests/sec: 189888.68
Transfer/sec: 26.80MB

如果按延迟计算,平均延迟 4.58ms,最多
print(1000/4.58*8)
1746.72489083

但实际跑出来是 Requests/sec: 189888.68
2021-06-04 17:18:13 +08:00
回复了 Nillouise 创建的主题 程序员 单机的 qps 普遍是多少?网上基本都没搜到什么资料说明
@byte10 高手,之前的帖子你们聊着聊着就不见了:
https://www.v2ex.com/t/755862

现在 http1.x/tls/websocket 都支持了

本想再支持下 http2.0,但是 http2.0 太渣了,只适合替代 1.x 的接口类业务,但是又不如 ws,所以我放弃 http2.0 了,等以后 http3.x 吧,那时候不再需要 tcp 做 http 载体了,不过目测 2030 年也未必能普及
2021-06-04 00:15:43 +08:00
回复了 redbelt 创建的主题 Java 推荐周志明大大的一片文章《云原生时代, Java 的危与机》
周神好帖!
越读书越觉得自己会的少,学得越多越觉得自己无力。
但愿楼上随便喷周神观点的各位有朝一日都能具备真正俯视其内容的实力。
2021-06-01 15:38:31 +08:00
回复了 ffw5b7 创建的主题 MySQL 求助:sql 优化。
生气那是开玩笑呢,v 站 emoji 不显示 :joy: 不知道怎么破,好像是可以输入表情来着,忘记怎么搞了

再补充点吧:如果你的数据是只有几十万甚至几百万这种量级,直接内存做也可以,这点内存不值钱。比如启动时初始化,分批查出每条数据按照你需要的关键字生成一条 string,存到 trie tree 里,查询时按关键字最多到最少循环查询,大于等于 limit 数量时结束循环。如果数据需要动态更新,更新 tree 成本也很低。
甚至,就内存里按关键字弄几个排好序的,二分查找就是了,除了 go 这种,其他很多语言本身就自带这些有序的 container,没啥成本

如果数据量是持续增长的,目前的数据量,改造成本也不大,早治疗早解决。
2021-06-01 13:59:02 +08:00
回复了 ffw5b7 创建的主题 MySQL 求助:sql 优化。
1. #4 中描述只有几十万数据,是固定的地址数据吧?这里没有给出详细信息
2. 问的问题是 sql,#6 中说改造 es 是指什么?到底用的 sql 还是 es,我的回答里好像没说需要改造成 es 。另外,但就这个查询来讲,sql 和 es 都适用
3. 这个接口功能是地理位置推荐

综合下:数据数量几十万、地理位置推荐,那我排除是按收件人地址类的搜索,假定你的数据量数量固定为几十万。

如果是按照位置范围内远近进行推荐,mongodb 有地理位置存储和查询的支持,可以考虑数据导入到 mongo,导入时把地址的经纬度信息带上,然后再做,就简单了,而且比你用字符串可能更准确
如果不需要按位置远近这种,只需要简单优化 sql 性能,#5 几种姿势说的很明白了,并且你才几十万数据,这么点数据量改造成本太低了。我怀疑楼主要么没看我的回答要么就是懒,然后还继续问什么奇技淫巧,那老夫我现在有点生气,不想再回答了 :joy:
1 ... 44  45  46  47  48  49  50  51  52  53 ... 60  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2800 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 36ms · UTC 08:35 · PVG 16:35 · LAX 00:35 · JFK 03:35
Developed with CodeLauncher
♥ Do have faith in what you're doing.