V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  lesismal  ›  全部回复第 1 页 / 共 69 页
回复总数  1365
1  2  3  4  5  6  7  8  9  10 ... 69  
14 小时 35 分钟前
回复了 kehuduanbuxing 创建的主题 程序员 一人来一道拿手面试题
> 语言和语言特性在我这里大概没这么重要,考察的是计算机基础。

如果是不需要编码的题,你这样说没啥问题,说思路就行了。但你这个题目是“手写一个函数”,编码了,用什么语言本身就是很大问题了,比如用 c ?。。。

> 需求不明确可以沟通,也看看沟通能力。上来只会喷的,大概是做题做的思维固化了。

看你的题面,这种多是笔试题。即使面试题,也可以,而且别人也没说不沟通啊。

但是这种简单问题,还要这么歧义,我只能认为是被我上一层回复后强行挽尊找的理由罢了。

更何况,这是论坛,你发个这种题目出来指望大伙楼下挨个继续追问题目,浪费大家时间呢么?。。

BTW ,我已经很多年没做过题了,我也从来不出这种题目去浪费别人时间。

年轻时候遇到过很多笔试题面试题题目本身就 sb 的,我也以为是故意考察沟通能力,所以也都沟通过,沟通之后发现,绝大多数这种题目吧,就是出题人自己拎不清。甚至一些语言的语法题,还得面试现场我教他。
更逗比的一些中小公司,自己工程里遇到的问题搞不定,拿来当面试题,我曾经就遇到过这种、然后面试时候解决方案优化方案一顿输出,给他们讲了一个多小时,面试官做笔记很细致。。。虽然这种我也不会去,但是技术交流也无所谓被他们白嫖,何况他们态度还恭敬的。。。


> 上来只会喷的

上一楼我只是比较平和指出你的题目的问题,我自己并不觉得是喷,为了避免让 OP 以为是喷,所以我用了“恕我冒昧”。

OP 也不必太敏感,上来就否定我指出的实际问题。
至于思维固化,这种题目用十年,是不是也该反思下到底是谁固化。
15 小时 30 分钟前
回复了 beginor 创建的主题 程序员 这道题目面试过这么多人,第一次见这么答的 😂
题目挺不错的!
答案挺解压的!

生活就是应该这个样子!
15 小时 31 分钟前
回复了 kehuduanbuxing 创建的主题 程序员 一人来一道拿手面试题
隔壁 /t/1121006 题目没什么歧义、简单算法也算实用常用。
OP 这个题,恕我冒昧,这是近期看到的最垃圾的面试题,竟然还用了十年。
BTW ,近期一共看了两道面试题,隔壁和这里。。。

最基本的,没有标明语言,不同语言静态动态强弱类型对 map 的处理可是不大相同的,是否只是处理数值类型的 100 ,不同语言对类型的处理也是不大相同的,搞不好还要反射

> 输出要求把其中的数字 100 替换为数字 200

这句,不算严谨,字符串里的数字 100 算不算?反正我是不能确定出题者目的
如果是说 数值类型的 100 ,就不会太歧义了
15 小时 42 分钟前
回复了 ljzxloaf 创建的主题 程序员 protobuf 不支持泛型?
> @lesismal #24 好吧,我表达的有问题,不是说随便接受 pr 。开源项目的一大优势不就是可以倾听社区的声音吗?我意思是没必要这样毫无余地的就拒绝,如果社区呼声很高,也是可以考虑的吧。

基础知识储量不够但是又有兴趣的话,可以多学下,等理解不到 pb 的设计、实现、原理、做这种更改尤其是是多语言的难度和影响,你大概就不会再使用 “也就是个 message”、“只是支持而已” 这些轻浮的话了,技术的问题最好是能让自己有理有据的输出、而不是“妄加评论”

相比于社会、生活中的很多事情,技术更严谨,无知者无畏、我穷我嗓门大我有理这种发声方式不是好的方法,你想想,自己不占理还要喷别人,跟那些非法医闹、水军舆论绑架有什么区别?

“倾听社区的声音” 和 “倾听社区正确的声音” 是两码事。如果不懂,至少就请尊重和慎言,而不是诋毁。

越读书越学习越觉得自己无知,共勉!
1 天前
回复了 ljzxloaf 创建的主题 程序员 protobuf 不支持泛型?
> 而且我觉得最恶心的一点是他们不仅不愿意支持这功能,而且还不愿意接受外部设计,连提 pr 的机会都不给。

别人合理拒绝,却反过来说别人封闭,什么道理!
要都是随便接受外部设计和 pr ,各种项目早都得被乌合之众搞凉了!
1 天前
回复了 CaHCO3 创建的主题 MacBook Air MacBook air m4 24g 做开发,很烫啊
开发不要买 mba 和 14 寸 mbp ,这俩都烫手,只有 16 寸是正途
我个人对这个面试双方的评价,不一定对:
1. OP 的编码主要是应用层,对基础知识不那么深入;
2. 面试官是杠精;

面试这种问题、如果候选人的回答已经反映出了 1 ,就没有必要像 2 这样纠结基础知识了:
1. 如果是招来做系统工程师之类的基础设施、底层研发,直接 pass 不考虑了,没必要继续杠
2. 如果是做 curd 之类的业务开发,了解这些基础知识也没用、只需要用来判定技术深度和技术等级、薪资就可以了,也没必要继续杠
> thread 和 coroutine 最大的区别就是上下文切换是否自主可控。因为 thread 切换不可控,所以要应付数据一致性的地方比 coroutine 多得多。

@moudy #51 我感觉这没说到点子上,绝大多数应用层自己主动使用 go runtime.Gosched 也只是出让调度、业务逻辑本身并没有改变、runtime 调度回来后用户的逻辑代码还是那个执行顺序。

我觉得根本的点是 thread 、goroutine 的成本和数量、以及对应着是否需要用户主动操作实例(例如 conn )在多个 thread 或者多个 goroutine 之间的切换。

高在线业务,不可能为每个 conn 都创建一个 thread ,所以每个 conn 是在不同的 thread 中流转,比如处理网络的 io 线程池、cpu 消耗的 逻辑/worker 线程/线程池、数据库等其他基础设施的线程池,不同的线程池上下游之间要有 task 队列串联起来。用 thread 的语言和方案的框架封装和使用上更复杂,而且不能写同步代码。async await yield resume 那些手动档 coroutine 和 goroutine 、erlang 进程的自动挡是不一样的、远不如自动档方便。goroutine 和 erlang 进程轻量,每个连接一个、同步代码一把梭就完事了。
thread 方案对一致性的要求更高,goroutine/erlang 进程除非涉及连接之间的复杂交互之类的、否则不需要对一致性做太多麻烦的事情
妹子换男友都没 OP 耳朵这么矫情,放轻松,多用几次就适应新的形状了
就没人关心下闺蜜漂不漂亮吗?
是不是 OP 比较帅、闺蜜比较漂亮,OP 老婆觉得特别有危机感所以才这样?
8 天前
回复了 xzg1993 创建的主题 健康 记一次中医治尿酸。有点想不明白
明前龙井马上要出货了,如果不是本来就身体虚、多喝点,其他绿茶也都好,清热利尿降尿酸血脂,还不怕吃错了药副作用

45678 ,每年最香的几个月,得好好喝个爽
引入多点的设计模式,只要能沾边的就弄成设计模式,然后就一坨坨的了。
如果你水平高、能把设计模式用得如鱼得水、那么就可以轻松搞出很多没必要甚至不合理的设计模式的垃圾代码,就更难理解,至少阅读代码层层嵌套就增加了理解障碍。

好处是可以用来作为自己代码的理由,别人没法拿这个当作你恶意代码的证据;
坏处是别人可能拿这种代码当 sb 、以能力为由干你。。。

我自己至今没学会设计模式,所以看到设计模式重的代码直接脑袋宕机变 sb ,但一直钦佩能把设计模式搞得精通的大神们
atomic.AddUint64 1ns 级别的,1s 百万也没什么压力的,shards slots 的计算量比简单 atomic 浪费的 cpu 多多了,我觉得是多余的设计。
如果需要保存一段时间内数据、就用 len=时长/interval ,[len]uint64 ,起个协程每个 interval 更新下 index=(index+1)%numSlots ,qps 的地方 atomic.AddUint64(&slots[index], 1)就可以了,没必要搞那么多有锁无锁的炫技,脱离实际的炫技会带来负优化
12 天前
回复了 wysnxzm 创建的主题 程序员 请问这是在说哪一个?
> 大部分人是能够做到根据实际情况做出技术栈的选择的。但是问题在于一部分用语言圣战掩盖自身无知和懒惰的人发出了巨大的噪音。
> 这部分人无限拥护自己所支持的语言的目的不是为了使某个项目变得更好,而是为了通过语言斗兽棋强行体现自身优越。

我不知道这是不是你工作中同事在做的事情,我觉得大概分两种:
1. 那些业务量用原语言没有瓶颈的且有大量历史包袱的,没必要换语言去重构的项目,被很多人鼓吹换技术栈重构
2. 但一些明星企业搞了大量的 golang 重构也是属于刚需:性能的刚需和成本的刚需。很多 curd 的人不喜欢,但重构确实带来了很大提升

如果是因为 1 让你不爽,那确实是倒霉,但不应该根据 1 去否定 2 ,也没必要去否定某个或者某些语言的社区,真理掌握在少数人手中的情况很多,一个好的语言火起来、很多无脑拥趸跟风的人会来污染这个事物、但他们不一定是社区主流、也不应该成为社区主流,所以我个人和很多同行也是不喜欢看到很多其他语言涌入到 go 里然后用其他语言的方式去搞 go 。

> 内存安全的 rust 是很好,但是如果没有在延迟上有特定的要求,我可能更倾向于支持 GC 的语言。

强推内存安全不只是强推 rust ,java 、go 也都在推的,可能是因为 rust 自己更加突出地标榜自己的内存安全,所以很多人误以为推动内存安全就是推 rust 。性能和安全都要求特别高并且性能要求极致的 rust 是最佳,否则 rust 的开发效率也是感人、没必要。


> GO 无脑堆逻辑确实快,但是占一多半的 if err != nil return nil,errr 也确实碍眼。

这个怎么说呢,如果不是 go 这么要求,go 代码可能也不会这么健壮。

如果仅以所谓代码行数少带来的简洁性作为审美、并且用审美大于实用的标准要求自己的代码,那应该搞艺术,而不是做工程。你也提到根据实际情况做出技术栈的选择,这是务实的观点,务实不只是选择用什么,怎么用也是务实的一部分,毕竟如果不喜欢,大可以 “_” 忽略 err 和处理、可以不用去写 if err else 。

> 语言的特性是一个事实,没有一个功能或语法就是没有。至于是否属于功能缺失,我觉得判断标准确实要落在是否影响实际工程应用上。

至少我没有遇到过因为缺少其他语言的高级特性导致工程效率低,确实有一些小的麻烦,比如 err 处理的行数多些,以往用标准库 raw sql 循环 scan 麻烦些,甚至以前没有范型、要为不同类型都写几个相同实现,但这些多数归属于简单的逻辑、稍微花点时间就可以搞定了,并没有真正消耗开发效率。
12 天前
回复了 wysnxzm 创建的主题 程序员 请问这是在说哪一个?
> 我最多只能说:在我遇到的某个特定场景下,使用某些语言/工具是合适的。但是绝对无法断言,这些语言/工具能满足任意场景的需要。

@CapNemo 我好像从没见过 gopher 和 ruster 去鼓吹任何项目都用 go 或者 rust 去做,至少不是这两个语言社区的主流意志。所以,很迷惑,经常无法理解为什么会有这么多人得出这种结论然后给 go 和 rust 扣上这种帽子。


> 在我看来,不管是将 GO 的"功能缺失"强行解释为"哲学优越性",还是以内存安全为由在各种项目上强行推广 rust ,这些行为都属于忽略实际条件去强行套用解决方法,本质上是编程领域的唯心主义。这种工具崇拜不仅引发争论污染公共讨论空间,也无助于提高自身水平。

没人强行推广 rust 去做 curd ,而且一些强行推广的行为已经上升到 us 政府行为,这种强行是基于安全问题日益恶化并且内存安全问题占的比例非常大、c/cpp 又无法解决这个问题。如果只考虑自己 curd 舒服,那当然无法 get 到这种强行对世界的意义,但这世界不只是为了我们 curd 服务的,而是反过来、curd 是为这个世界服务的,不要拎不清。

> 必须认识到,编程的价值在于解决实际问题。脱离工程背景无限拔高某些设计取舍只能暴露自身视野之狭隘。
保持对技术本质的清醒认知,才能在快速迭代的生态系统中构建可持续的工程能力。

这就更逗了,别人用语言是为了做工程,然后被一些用语言缺少语言自己的功能/特性扣帽子。
我就好奇了,你们那么多人都是在做开发编程语言的工作吗?所以某个语言没有某个或者某些语言特性就是“功能缺失”了?人家做工程好好的、人家语言现有特性能够做工程,怎么就功能缺失了?

为什么这么多人基础逻辑都搞不懂还要对别人务实做事的指手画脚。
虽然能反映出很多框架的性能,但 techempower 也是我见过最逗比的没底线的 benchmark 之一了,plaintext 里包括 gnet 、evio 这种不完整 http 功能的简单拼接字符串方式的测试代码也可以放到排名结果里,甚至这种能拿个 plaintext 第一至今还贴在这种 repo 仓库里作为宣传工具误导不知情的同行。而且这样一来,助长了更多的不良之风:
https://github.com/lesismal/nbio/issues/337#issuecomment-1663771688


go 的 cpu 能力和 java 是差不多的,这种简单测试的结果不意外。

帖子里一些人觉得 gin 简单,是一种错觉、简单与复杂对比错了层面:
1. 在这个简单 http 功能测试对比 gin 和 spring 性能的场景,应该是看 http 基础部分实现的性能复杂度。单就 http 相关的实现,gin 等 go 框架在性能消耗上的浪费可能比 spring 还多,所以 fast 系能赢、gin 和其他几个基于标准库的难赢
2. 各位对比的简单是作为 http 框架甚至框架生态圈的大的功能集合的简单与复杂、但是这部分与这个性能测试是没什么关系的

实际工程中高并发场景,影响性能的重要因素之一是并发度,主要是连接数、协程池|线程池。
java 非 netty 通常的业务线程池 size 设置不会特别大,几百几千,如果遇到并发很大并且一些请求阻塞时间较长时,这些阻塞时间长的请求会持续占用线程,线程池 size 小、等待得多了甚至整个线程池的 worker 都阻塞、临时耗尽了,其他连接的请求要排队,cpu 利用率就跑不上去、业务慢了。
go 这种协程成本低,即使时 4c8g 这种硬件,随便也可以跑几万甚至 10w 级别的协程数量,对应的能服务的连接数就更多,所以部分连接的请求即使阻塞了、处理其他大部分连接的协程就被调度起来继续运行了、cpu 不用等待,因为几万甚至 10w 级别的协程数量远大于 response write 这些 syscall 、远大于下游的 db 操作、或者其他 io 等慢阻塞的并发度,所以整体上不会导致 cpu 利用率降低。

我没有仔细研究这个测试,但没有找到实际测试的连接数并发度,也没有看到各个语言框架对应的 cpu 、内存消耗。
不同的参数会有不同的阈值,如果只是一组参数测试得出结论,不能够准确说明实际业务中不同场景不同时段等的真实性能表现。
12 天前
回复了 wysnxzm 创建的主题 程序员 请问这是在说哪一个?
先搞懂什么叫"功能缺失"吧。

中国人习惯用筷子和吃中餐,欧美人习惯用刀叉吃西餐。
一些人用刀叉吃西餐的人觉得自己才是吃饭正统、不用刀叉西餐就扣帽子成"功能缺失"。
和着不用刀叉不是西餐就不是吃饭了是吗?

基本逻辑都不通的所以高级工具使用者,实际工程能力如何不得而知,给别人扣帽子的狗屁逻辑倒是真的精通和显而易见
@Nugine0 #106 继续

而且,很多人无脑黑 Go 的,比如看到 nbio 搞百万连接优化,想都不想就会出来喷、说官方都可以写同步代码、你非要搞个异步非阻塞库这是倒退,但其实 nbio 对标准库是基本兼容的、使用方法还是用标准库那样的方式仍然是写同步代码;
还有些人一看 nbio 名字里的 nb 就开始“国人的项目净搞噱头”,实际效用他们可不管,张嘴就是嘲讽、阴阳。

这也是为什么我看到很多黑 Go 的或者对 Go 负面影响的评价会经常站出来反驳的原因,因为自己就被他们无脑黑或者嘲讽过很多次了
@Nugine0
我的开源项目已经发过几次帖子了,发多了也会惹人烦,而且论坛的流量也不大了,所以就很少发了。
一些优化的点倒是可以拿来说说,但是这些点我觉得都挺平常的,比如海量连接数、协程池、内存、gc 、网络哭、rpc 性能各种优化和实现策略,以前跟很多人讨论过很多次了,github repo 的 issue 里也有不少相关的都在。
最重要的,比如 nbio 是为了解决标准库海量连接数场景的弱项、1M 连接数 1k payload echo 压测 server 内存可以控在 1G 内存、4-8c 能跑 10w+ qps ,但绝大多数人用不到,绝大多数人的场景连接数都不高、用标准库足够了,少量的人用得到的自然可以找上门来;至于 rpc ,我自己的 arpc 性能和易用性里都算是 top 了,但更多人就是喜欢 grpc 、毕竟跨语言和整体生态更强谷歌背书,而且多数人是 web 领域微服务之类的、普通 rpc 也足够用了,少有人懂更多的才会考虑用 arpc 去做更多业务类型比如游戏、IM 、推送而且顺便性能提升一大截。
我个人也没那么多精力去搞更大,为爱发电成本太高了。所以也懒得去宣传这些了,有缘的人多交流就可以了
@Nugine0 #102

文人相轻,同行相轻,编程语言里的踩踏更是如此,尤其是 Go 这种定位务实不搞花哨的。
这些都是人性,我自己飘了的时候也要乱讲、毕竟不是圣人,无所谓羞愧,对了就坚持错了就承认和改变。
人性的事情确实改变不了,但是互相喷下也没啥,不想让 Go 和 Gopher 吃哑巴亏。
1  2  3  4  5  6  7  8  9  10 ... 69  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1109 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 31ms · UTC 22:44 · PVG 06:44 · LAX 15:44 · JFK 18:44
Developed with CodeLauncher
♥ Do have faith in what you're doing.