首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

switch case,一个糟糕设计!!!

因为switch case内部逻辑控制清晰原因,当业务判断超过三个以上,我们比较建议使用switch case。...3 fall through弊端 switch case设计之初目的是便于编译器设计和优化,以及能够满足一些特殊使用场景,但是平时很难碰到这种场景,通常程序员在写代码过程中,大多借助break或者...return帮忙,以保持代码逻辑结构清晰性,此情况下,若使用fall through特性反而可能会破坏掉这种局部结构性。...对于简单控制逻辑还行,有时case具体业务逻辑中可能存在for循环之类逻辑,这个时候即使在for循环写了break,但是对于整个swtich case来说没什么影响。...,如果此时你没有灵活使用break或者return ,从此将埋下不定时炸弹,在意向不到地方引爆。

1K30

C++是不是一门设计糟糕语言?

从事软件开发多年,经常使用编程语言有C语言和C++,使用次数多了做项目多了之后,最多感觉是编程语言其实就是工具存在,不同编程语言在不同场景有不同用处,没有所谓最佳编程语言只是使用场景不一样而已...对于初学者刚开始学习C++语言时候都没有特别深刻印象,因为面向对象编程语言起码从概念理解上还是非常清晰,没有感觉到专门编程语言深奥之初,在最基础部分学习起来还是非常流畅,但进入基础晋级部分特别是从泛型编程开始就会觉得非常吃力...C++做项目的感受 前前后后用C++做过十几个项目,在最初几个项目中还是真真切切感受到这门编程语言繁琐,但是经历过之后又会有上瘾感觉,随着时间推移越来越想着把里面的编程思想和设计理念给搞清楚,所以...C++在客户端框架设计方面还是有着非常大发言权,像安卓底层框架以及谷歌浏览器基础编程语言有很大一部分是C++来完成,证明其还是有很强生命力,在很多领域还是首选编程语言,所以在选择第一门编程语言时候...能够批评一门编程语言是不是糟糕需要站在很高角度上分析,而不是看到网络上有人评论人云亦云,首先用这种编程语言做上几个项目或者产品之后再去思考其语言特性,对于普通程序员来讲在没有经历过项目的历练只是去做口头上评述还是缺乏足够说服力

1.1K20
您找到你想要的搜索结果了吗?
是的
没有找到

糟糕策略梯度

对于各种强化学习问题,人们第一个想到通用解决方案就是策略梯度(Policy Gradient)。不过让我震惊是 1993 年时候人们并没有把策略梯度看作一个糟糕方法并且弃之不用。...这里,我们就来到了策略梯度中第一个逻辑跳跃地方了。相比于对所有可能分布构成空间做优化,我们优化是一组参数分布 p(u;ϑ)。...我们还需要看到,当我们在动态系统中考虑这些因素时候情况只会变得更糟糕。线性二次调节器策略梯度更新里会含有非常多噪声,而且它方差会随着模拟步数 L 增大。...尤其当你看到另外一批论文里基因算法和你算法得到了近似的成果时候,你需要明白这并不代表着基因算法有了新发展,它更可能是在告诉你,你方法只不过是随机搜索一次糟糕实现而已。...策略梯度和强化学习并没有什么神奇魔力,我想我已经强调得够多了。不过我还是要继续说,策略梯度和它各种变体真的是糟糕得很合理算法。想让它们顺利运行得出结果需要很多技巧。

1K50

糟糕 Kotlin 语法糖

这几天在 review 同事代码时候,发现一块有意思代码,我将其写成对应伪代码如下: class UserViewModel(val userUsecase: UserUsecase) {...,觉得十分反人类,在 Kotlin 中,对象初始化可以省略 new 操作符,也即类后面再配个 () 即可,为啥一个初始化对象还能继续用 (),在直观感受下,我以为是初始化了一个对象,唯一让我觉得不像是初始化就是...在我想点进去看下根据 userId 获取 User 过程,我无论追踪代码,都无法跳转到真正逻辑代码调用处,点击 userUsecase 会直接跳转到 UserViewModel 构造方法,点击 name...上面的示例给已足够简单,但实际在我们业务中,比这还复杂,invoke 函数被封装到了父类,当我点进去时候根本找不到 invoke 函数,只能往上查看父类有没有,在找到 invoke 函数时才发现,...我也很理解大家对 Jetpack 热爱,这种写法在官方也有出现,可以参考 Domain Layer 这章。但我想说是,省略方法名这个过程真的有必要吗?

60821

修复糟糕代码气味

修复糟糕代码气味 原文链接:https://www.arjancodes.com/blog/best-practices-for-eliminating-python-code-smells/ 文章列举了多种糟糕代码模式...这些糟糕代码气味是: 1. 万能对象:一个类具有太多功能,违背了单一责任原则。这个类会变得复杂,难以测试和维护。 解决方法:根据任务拆分成多个类。 2....# Logic to manage inventory and update the database pass # Many more methods “上帝对象”是整体设计...,处理了太多任务和责任,违反了SOLID设计单一责任原则(SRP, Single Responsibility priciple)。...相反,我们可以引入一个名为 PER_MILE_SHIPPING_RATE 常量,它清楚地表明 1.25 表示每英里运输成本。这个简单更改使我们代码更易于理解,也简化了将来对此值更改。

6110

糟糕程序员面试

“谷歌式”面试真心是让人又爱又恨,它糟糕透了:好应聘者落选,坏应聘者背背答案就能通过,呵呵。 这是真的。 但是,这也是真的:所有的面试过程都很糟糕。 ?...但这并不意味着他们就一定是糟糕编码人员。稍微培训一下就可以改善他们编码风格。 这种方法很难识别智力/解决问题能力。 最佳做法: 可以看看他们代码,但是要有保留地接受对代码风格解释。...如果一个程序员标榜自己是特定编程语言使用者,那么他解决问题能力通常更弱。所以这是一个糟糕属性。优秀开发人员不太愿意将自己定性为“Java开发者”或“PHP开发人员”,更愿意自称是开发人员。...有些技能是很难掌握,即使那人真的很聪明。 都是糟糕面试,那有没有不糟糕? 上面讲述所有的面试方法都有问题。是的,没错,都有问题。...但是,都很糟糕,都有问题。 那么……你能做什么? 接受一点:任何面试方法都是有缺陷,都是糟糕。 所以,我们需要找出最不那么糟糕一种。然后好好实现。

28920

【题解】糟糕一天

定义 图片 为第i头牛所能看到别的牛头发数量。...样例 #1 样例输入 #1 6 10 3 7 4 12 2 样例输出 #1 5 题目分析 仔细阅读题目,题目要求没头牛能看到数量总和。分析下样例。...看起来只要从后往前扫,求出比h[i]小数即可。但是这样做存在一个问题,该问题在样例中也有体现,即会出现“遮挡”情况,比如样例中2会被12给遮挡。而如果加入“遮挡”计算起来会过于复杂。...此时可以更换一个思路,从原来统计比h[i]小、且未被遮挡元素个数改为统计能未遮挡看到h[i]元素个数。 更换思路之后,问题就变成了统计1∼i−1范围内未遮挡单调减元素个数。...s.empty()&&s.top()<=x){ s.pop(); } 最终答案就是累加每个元素能被看到元素数量总和。

37010

pandas作者当年遇到了什么麻烦,才设计出如此糟糕警告机制

今天我们换一个角度,尝试成为 pandas 作者,看看当时作者到底遇到了什么样难题,使得他做出这样子设计。 为什么我不把文章发布在 pandas 专栏中?...因为本文涉及是 python 非初级知识点 ---- 从零开始 假设我们是 pandas 作者,现在要设计数据表(DataFrame)定义: 名字叫 MyFrame 初始化时候需要传入字典数据...因为我们不希望后续操作会影响原来数据 现在可以条件筛选: 现在问题是,筛选总是用 where 显得太啰嗦。在 python 中对集合物件取出元素,是有专门语法 [...] 。...行2:语法 对象[切片范围] 这不也是一种数据筛选方式吗?我们自定义类也能有这样子语法支持吗? ---- 魔法方法 从对象角度来说,它只不过是数据与函数结合体。...这就是为什么在我 pandas 专栏中明确告诉大家,只要你明确知道需要修改数据表对象,那就可以不用管这警告 你觉得这种设计思路是不是挺巧妙,同时又让人有点无语?

30920

PHP 是最糟糕编程语言?

这门语言确实有很多不好地方。搁在以前,这门语言还有更多糟糕问题。...像 Laminas 和 Symfony 这样框架就使用了面向对象编程最佳实践,使开发者可以用这些框架编写结构正确代码。 PHP 是怎么做到这些?这是因为 PHP 是最糟糕编程语言。...PHP 很简单 设计一定要简单,不论是它实现还是接口。 PHP 底层使用了 C 语言,我们之前已经说过,这部分是“最糟糕”。...Gabriel 承认,“更糟就是更好”哲学指的是设计看起来很糟糕,也许不应该作为更好选择。...下次再听到有人骂 PHP 时候,就随他喷去吧。这门语言确实很糟糕。但从许多方面来看,PHP 长寿和广泛使用证明了这样一个事实:用“正确方式”做事并不总是比用“最糟糕方式做事好。

1.7K20

请停止编写糟糕提交消息!

他们试图理解你所做更改细节,但是由于你提交消息不是描述性,因此他们无法获取任何信息。 然后,他们尝试去查看每个提交差异。但是,即使这样做了,他们仍然无法确定你在实现中选择背后思考过程。...理想情况下,良好提交消息将被分为三部分:主题,正文和结尾。 主题 主题应该是简洁一行,总结你所提交更改。 下面例举一个很好提交信息,例如“feature:查询项目应用率功能”。...一个错误提交消息,例如“fix bug”,在其他人看到这条提交信息时候就会不知所措。 正文 正文包含你要传达信息,你可以在其中详细了解有关更改信息。...请注意,对于一些很小提交,例如修正错字,你可能不需要正文,因为主题行应该足够有信息性。 在正文中,你应该深入了解正在进行更改,并说明正在执行操作前因后果。...你可以解释为什么要进行这些更改,为什么要选择以这种特定方式实施更改以及可以帮助人们理解你提交背后思维过程其他任何原因。

52120

18000 台服务器整整瘫痪了三天:因 BoltDB 糟糕设计

由Roblox工程师和HashiCorp工程师组成联合团队最终查明,在Consul核心一个名为BoltDB开源日志记录项目在设计上所做选择导致了瓶颈,而这完全是因Roblox独特架构而暴露出来...衷心感谢Roblox对这起可能是该公司发展史上最严重事件之一进行了如此详尽细致分析。不过幸运是,其核心受众很快就忘了这荏事。 BoltDB问题似乎直接归咎于糟糕设计。...我是BoltDB开发者。是的,这是糟糕设计。该项目从未打算投入到生产环境中,而是作为LMDB移植版,因此我可以理解其内部结构。我简化了空闲链表处理,因为这是一个小儿科项目。...当时(2014年前后)Shopify在LMDB或Go驱动程序方面遇到了一些严重问题,几个月后我们还是无法解决,于是我们换成了Bolt。遗憾是,我这个糟糕设计仍然存在。...在负载非常高情况下(具体来说,读取负载和写入负载都非常高),流式传输设计加剧了单单一条Go通道上资源争用程度,这导致写入期间出现阻塞,从而大幅降低效率。

65930

《赢》第18章 糟糕老板

第18章 糟糕老板 不管遇到多么糟糕老板,你都不能让自己表现为一名受害者 一般说来,老板们对于他们所喜欢、尊重和需要的人态度并不差 你必须要找他谈,因为没有其他途径可以绕过去。...记住,你目标只是找出那些你老板基于某种原因而没有公开告诉过你东西。也许他对你有抵触,也许他只是太忙。无论如何,你目标是找到他对你态度和业绩疑问 ?...类型1老板,你希望褒奖和提升他们,并且希望他们成为公司其他人榜样 类型2:他们必须走人,越快越好,实际情况也是如此 类型3:他们真正信仰公司价值观,也在尽力付诸实践,但他们并没有良好业绩。...这些人可以得到培训和指导,在公司其他部门给他们一两次新机会 类型4:处理起来最为棘手。他们通常可以在自己位置上待很长时间,尽管举止不那么友善,却有出色业绩。...在你等待时候 ,则应该继续努力,为工作贡献自己所能 在你开始自己下一份工作时,要记住原来老板为什么让你讨厌,你对他感受如何——有朝一日当你成为老板,就要引以为戒

51910

我见过糟糕程序代码

这事发生在很多年前,在一个相当大公司里,公司名我就不说了。那个软件有一大堆程序,是一个商业系统核心模块,由一个、单独一个小伙维护着,这个家伙不久前被炒了。...程序员代码里通常体现着自己对幽默理解以及对‘工作保密’这个词认识。...这个家伙留下来软件里没有任何逻辑炸弹或下流阴谋,编译很正常,除了有一个bug外,一切都工作很好。但是,你需要想像一下:程序中所有函数、变量名都是以食物命名。...一点一点,我把这些函数名和变量名改成具有意义命名,开始很麻烦,之后慢慢变得容易些。...当然,如果你脑子里还在想:你不能因为我变量名没有什么意义就把我开除了(或应该招我回来改程序),那你是在妄想,不管这个家伙用意是什么,他做法十分错误(我很难想象他前任老板还会推荐他),不管怎样

64150

Alien Swarm中糟糕远程代码执行

我们将在Alien Swarm:Reactive Drop中探索一个现代例子。...客户端服务器文件上传 任何异形丛生客户端可以上传使用文件到游戏服务器(并且反之亦然)CNetChan->SendFileAPI,但仍存在一些可疑约束:客户端检查在游戏阻止某些扩展,例如上载文件服务器...是可以做到"/\\",因为那里是FixSlashes一个电话,让适当斜杠后完整性检查,并在".."该"/\\"会路径设置为驱动器根,这样我们就可以写入系统上任何地方,如果我们知道路径。"...远程执行代码 使用前面提到远程文件包含,我们可以上传有可能执行任意代码Source Engine配置文件。...糟糕示范 由于这两种漏洞利用都适用于服务器和客户端,因此我们可以感染服务器,这可以感染所有播放器,当播放其他服务器时,这些播放器可能会继续感染病毒。

1K80

那些糟糕面试和那些屎问题

不同公司和人,有不同面试策略,有的考察视野、有的深入细节、有的则是评估解决问题能力。...朋友们和我开玩笑时候说:“你就是爱折腾,不同地点之间、不同领域之间,说,2011 年最后两个月里,多少钱捐给铁道部了?” 下面叙述,来自我自己经历,或者是朋友告诉我他/她亲身经历。...我不知道她时间标准是哪里来,事实上,我经历中也只有极少数公司会提这样要求,也许是程序员们太弱势、太卑躬屈膝给惯? 如果你需要一个人才,就需要互相考虑,不是只有你世界里才有种种限制。...允许面试者用自己喜欢方式完成表述,白纸、电脑、白板,如果方便的话,选择自己熟悉 IDE。面试考察应当是这些途径和介质背后东西,和最真实工作状态,让他用生疏东西,难免会扭曲他真实水平。...面试官需要做是发现他们身上闪光点,感受他们热情,也评估一下如果应聘者来工作,可能会发生问题。 请给出反馈。即便他没有达到你要求,也请告诉他,优秀、欠缺,哪些方面不满足。

29810

Vue.js设计思路

这是我参与「掘金日新计划 · 8 月更文挑战」第3天,点击查看活动详情 前言 今天是学习学习理解《Vue.js设计与实现》第三篇,第一章到此结束 第一章三篇主要宏观得介绍了框架设计思路和纲领,首先介绍前端框架中关于命令式...,声明式,虚拟dom,运行时和编译时权衡理念,然后介绍了前端框架设计需要考虑因素,比如体积,开发体验,特性开关,错误处理等,最后介绍Vue.js在这些理念中做了哪些设计和权衡。...详细情况可以查看专栏学习理解《Vue.js设计与实现》 声明式地描述UI Vue是一个声明式UI框架。前端页面包括,DOM元素,属性,事件,元素层级结构。..., 使用与HTML标签一致方式来描述层级结构 vue.js3除了支持使用模板描述UI外,还支持虚拟DOM描述UI。...其实我们在vue.js组件中手写渲染函数就是使用虚拟DOM来描述UI

1.3K10

JS常用几种设计模式

面试常常问到设计模式,设计模式在实际业务中即使有用到,但是依然感受不到它存在,往往在框架中会有更多体现,比如vue2源码,内部还是有很多设计思想,比如观察者模式,模版模式等,我们在业务上一些通用工具类也会用到单例...好记性不如烂笔头,又重新回顾了一遍设计模式,虽然仅仅掌握了几种熟悉设计模式,但是希望在复杂业务上,能想起那些不太常用设计模式。 正文开始......》中也有很多其他模式,比如代理模式,中介者模式,状态模式等,很多设计模式实际上在业务代码里并不会用到,在某些特殊业务场景这些设计模式思想会大大增强我们代码拓展性,但过度设计模式也会带来一定阅读负担...总结 常用设计模式,比如说单例模式,单例就是只对外暴露一个实例,所有的内部方法都是通过这个实例访问 策略者模式是一种多条件优化模式,当你在条件判断很多时,可以考虑策略者模式 工厂模式,主要通过一个中间函数...before,after例子 本文示例主要参考《javascript设计与开发实践》、《javascript面向对象编程指南(第二版)》 最后,看完觉得有收获,点个赞,在看,转发,收藏等于学会,欢迎关注

72820
领券