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

为什么if-else影响代码复杂度

关于if-else争议 之前写了一篇文章《用规则引擎消除if语句,提高了代码可扩展性》,这篇文章想阐述观点是复杂if语句可能影响代码阅读和代码扩展性,会将非业务条件逻辑与业务逻辑混合在一起...时间长了代码越来越臃肿,因此这种情况下推荐使用一些设计模式例如策略模式,责任链模式等去优化if语句带来问题,文中发现使用规则引擎也能实现类似效果,因此介绍了怎么使用规则引擎Easy Rules去取代...这里要阐明一个观点: “观点并不是说,我们在编码不能使用if-else,而是说我们不应该简陋地用if-else去实现业务分支流程,因为这样随意代码堆砌很容易堆出一座座"屎山"。...” 当我们存在不同业务逻辑,我们通常习惯使用if-else来实现这些不同逻辑,时间长了,代码就会难以维护。相信大部分人写过下面类似的代码。...condition2 && condition3 && condition4) { do4(); } 其实if-else 以及类似的switch控制语句,本质上是一种硬编码行为,这种硬编码问题在于需求发生改变

1.4K10

问问问答答答!

为什么可以用 4 位「首部长度」字段来定义 TCP 包头长度? 回答: 首先,「首部长度」字段确是定义 TCP 包头长度,但是不是你这样计算。...回答: 如果 seq2 和 seq3 都丢了,接收方收到seq4回ack2,收到seq5回ack2,seq6回ack2。...自旋锁为什么是悲观锁,而不是乐观锁? 图解系统里提到,自旋锁是悲观锁,然后有个读者说自旋锁底层是 CAS 实现为什么不是乐观锁呢? 回答: 乐观锁是先修改同步资源,再验证有没有发生冲突。...例如,数据到达但检查校验和错误并被丢弃,可能会发生这种情况。可能存在文件描述符被虚假报告为已就绪其他情况。因此,在不应阻塞套接字上使用 O_NONBLOCK 可能更安全。...客户端发送另一个请求,它会使用同一个连接。这一直继续到客户端或服务器端提出断开连接。

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

这些不会的话,就别去面试了

回答想不起来,最后俩周没消息。这里想说一下,俩周没消息,面试基本凉了。...关于这部分多线程知识学习,强烈建议一步一个脚印,一行代码一行代码敲,当你对这块知识理解达到任你出题千万,一眼看破本质地步,那你面试基本和玩似的。 ?...一般情况下这样,但如果面试官提了如何优化数据库,你回答了索引,那数据库索引底层原理你就不得不去了解了。...也许你回答哈希表或者B+树,那问题又来了,来同学,说一下B+树,你整一句:B+树内节点只存放key,只有叶子节点存放数据。虽然也不错,但是如果能回答更具体一些,觉得你让面试官对你双眼一亮。...脏读、不可重复读、幻读 也是必须。为啥?没有这三个问题,就没有解决这三个问题隔离机制。 未提交读、已提交读、可重复读、串行。

73821

程序员不仅要学会百度,更要懂得提问

认真思考问题解决方案 问题特别明显,只要有动脑就能解决这个问题,没有人喜欢回答这种基础问题, 例如: 当你知道echo "hello world"语句,却不知道怎么输出"EasySwoole天下第一...同样,一个问题直接搜索就能出现答案,却一直拿出来问,没有人会给伸嘴党喂饭,这是对回答一种侮辱 请在提问时候,先尝试在搜索引擎中搜索,或许答案就在第一页 开发手册 当你在搜索引擎没有找到一些...问题基础 千万不要问你对该问题一无所知问题,当你没学过php,请不要问为什么if(){}括号里不加条件就会报错问题 当你提出一个问题,该问题相应基础你应该要,否则你会被人耻笑....例如: 当你上传文件这个逻辑出现问题,你问:"为什么没法上传文件",是没有人能回答了你,你得自行排查,直到一个小范围. 例如: 上传文件,选择文件之后,发生错误....为什么协程要是用mysql连接池 等 代码问题 代码问题,我们需要截图代码,以及报错信息,并且说明自己要实现什么功能,例如: 想要实现文件上传,已经尝试了修改权限,但是不知道为什么代码会报错(附上错误信息

87420

Java高频面试题- 每日三连问?【Day11】 — 集合容器篇(三)

② 创建如果给定了容量初始值,那么 Hashtable 直接使用你给定大小,而 HashMap 会将其扩充为 2 幂次方大小(HashMap 中 tableSizeFor()方法保证,下面给出了源代码...底层数据结构: JDK1.8 以后 HashMap 在解决哈希冲突时有了较大变化,链表长度大于阈值(默认为 8)(将链表转换成红黑树前判断,如果当前数组长度小于64,那么会选择先进行数组扩容,...一个线程访问同步方法,其他线程也访问同步方法,可能进入阻塞或轮询状态,如使用 put 添加元素,另一个线程不能使用 put 添加元素,也不能使用 get,竞争越来越激烈效率越低。...正经回答: 当你把对象加入 HashSet ,HashSet 先计算对象 hashcode 值来判断对象加入位置,同时也会与其他加入对象 hashcode 值作比较,如果没有相符 hashcode...,HashSet 假设对象没有重复出现。

31220

网络层—简单面试问题

这是无量测试之道第190篇原创 TCP 在面试时候,如果问大家,TCP 三次握手,大家一般准备下,都会很容易回答上这个问题。但是如果这样问:TCP 为什么要三次握手,二次行不行?你还会吗?...2.等待一段时间后,发现没有接受到服务端ack确认报文,客户端启用超时重传策略,重新syn发送报文给server。...但是后续某个时候,服务端收到了之前因为超时而晚到syn报文,server端就认为又要建立一个连接。这就出现问题了。 问题2: TCP 是怎么保证可靠传输? TCP 是怎么保证可靠传输?...(怎么保证报文:无差错、 不丢失、 不重复、 按序到达) 可靠传输在 TCP 层面是通过【停止等待协议】实现: 无差错情况 无差错情况下,客户端按顺序发送一个报文,得到 server 端响应后发送下一个报文...【如果回答 get 请求参数是拼接在url后面,post是放在方法体里面的,这是非常简单,需要回答专业和深刻点,按照语义来,(安全、幂等、可缓存)】 今天分享就到这里了,最近在整理这些面试题时候

23310

60行代码爬取知乎“神回复”,句句戳中泪点

知乎上回答太多了,一下子爬取所有的回答很费时,我们可以选定几个话题,爬取这几个话题里内容。...A: 程序员女朋友颜值高,是服,因为随便问十个程序员他女朋友是谁,有九个回答是新垣结衣 17 Q: 为什么一部分人宁可买几个机械键盘换着用,也不愿意给自己敷一下面膜? A: 老子不靠脸吃饭。...老子辛辛苦苦挣来钞票。老子想怎么花就怎么花。 18 Q: 程序员夫妻结婚戒指刻什么字好? A: 0 error 0 warning 19 Q: IT 工程师被叫「码农」是否不舒服?...A: 他拼着自己早已养成寡言少语习惯去死命跟你套近乎时候 36 Q: 为什么程序员不应该会修电脑? A: 范冰冰需要修电视机吗?...A: 实不相瞒,也不是装逼: C++ 水平全国第 0。 38 Q: 为什么 iPhone 删软件,所有图标都要抖?

95010

HashMap工作原理

面试官可能问出下面的问题: “你知道HashMap工作原理吗?” “你知道HashMapget()方法工作原理吗?”...你也许回答没有详查标准Java API,你可以看看Java源代码或者Open JDK。”“可以用Google找到答案。”...面试者回答:当我们调用get()方法,HashMap会使用键对象hashcode找到bucket位置,然后获取值对象。...你可能回答不上来,这时面试官提醒你多线程情况下,可能产生条件竞争(race condition)。...获取对象,通过键对象equals()方法找到正确 键值对,然后返回值对象。HashMap使用链表来解决碰撞问题,发生碰撞了,对象将会储存在链表下一个节点中。

54210

HashMap工作原理

面试官可能问出下面的问题: “你知道HashMap工作原理吗?” “你知道HashMapget()方法工作原理吗?”...你也许回答没有详查标准Java API,你可以看看Java源代码或者Open JDK。”“可以用Google找到答案。”...面试者回答:当我们调用get()方法,HashMap会使用键对象hashcode找到bucket位置,然后获取值对象。...你可能回答不上来,这时面试官提醒你多线程情况下,可能产生条件竞争(race condition)。...获取对象,通过键对象equals()方法找到正确 键值对,然后返回值对象。HashMap使用链表来解决碰撞问题,发生碰撞了,对象将会储存在链表下一个节点中。

42420

面试官问:为什么kafka这么快,又能保证消息不丢失?

面试官: 看你项目中用到了kafka,你觉得你这个场景一定需要kafka吗,有没有其它替代方案?...面试官似乎还想在kafka上为难小菜鸡: 那你知道为什么kafka这么快,又能保证消息不丢失? 小菜鸡实在没有过多接触过kafka,只能投降了。 要回答上述问题,需要对kafka有较深入理解。...Kafka 采用是至少一次(At least once),消息不会丢,但是可能重复传输。...设置为 async,大幅提升性能,因为生产者会在本地缓冲消息,并适时批量发送。 如果对可靠性要求高,那么这里可以设置为 sync 同步发送。...消费消息 如果更注重可靠性,则需要显示提交 Offset,也就是所有业务都处理完成时候,再提交 Offset。这样导致重复消费,需要提供幂等性接口。 为什么 Kafka 性能高?

2.1K10

为什么C语言会有头文件

前段时间一个刚转到C语言同事问我,为什么C多一个头文件,而不是像Java和Python那样所有的代码都在源文件中。...其实在准备这些例子时候也是这样,很多时候没有注意相关代码顺序导致报错,而针对重复定义报错很难排查。...C语言编译过程 在上面基本上回答为什么需要一个头文件,但是本质问题还是没有解决,为什么像Python这类动态语言也有对应模块、多文件,但是它不需要像C那样要先声明才能使用?...编译完成之后进行链接,首先扫描所有的obj文件,先查找main函数,然后根据main函数中代码执行流程来一一组织代码结构,碰到之前保留符号,去所有的obj中符号表中根据变量符号查找对应地址,...它发现找到多个地址时候就会报重复定义错误。

2.1K50

HashMap工作原理

面试官可能问出下面的问题: “你知道HashMap工作原理吗?” “你知道HashMapget()方法工作原理吗?”    ...你也许回答没有详查标准Java API,你可以看看Java源代码或者Open JDK。”“可以用Google找到答案。”    ...面试者回答:当我们调用get()方法,HashMap会使用键对象hashcode找到bucket位置,然后获取值对象。...你可能回答不上来,这时面试官提醒你多线程情况下,可能产生条件竞争(race condition)。    ...获取对象,通过键对象equals()方法找到正确键值对,然后返回值对象。HashMap使用链表来解决碰撞问题,发生碰撞了,对象将会储存在链表下一个节点中。

58230

实现一个基本计算器来计算一个简单字符串表达式 s

,思路是大同小异,你看前几步代码都差不多,但是为什么写出来差别这么大呢!!!...undefined 之后回答了 "2" 兔子不会是红色,否则他们回答相互矛盾。undefined 设回答了 "2" 兔子为蓝色。...看了人家写才发现这个题用dp确实挺合适。。而且特意挑了一个注释写很全代码贴出来。dp其实也是一步一步往下走,但是因为记住了每一步,所以有一些重复数据是不用来回来去计算了。...去琢磨琢磨为什么是上一个*2+上上上一个。...好吧,果断没琢磨出来,所以这里看了题解,并且看题解都找了好几个才懂,大概思路下面一点点说: 我们求dpn 考虑从dpn-1基础上补2×1列图案,只有用1个多米诺1种方案; 考虑从dpn-2基础上补

2K30

经常被问到有深度有内涵数据结构面试题

从这里开始,真正困惑开始了,一些面试者回答因为hashcode相同,所以两个对象是相等,HashMap将会抛出异常,或者不会存储它们。...面试者回答:当我们调用get()方法,HashMap会使用键对象hashcode找到bucket位置,然后获取值对象。...面试官问因为你并没有值对象去比较,你是如何确定确定找到值对象?除非面试者直到HashMap在链表中存储是键值对,否则他们不可能回答出这一题。...你可能回答不上来,这时面试官提醒你多线程情况下,可能产生条件竞争(race condition)。...如果这个自定义对象不可变,那么它已经满足了作为键条件,因为它创建之后就已经不能改变了。 我们可以使用CocurrentHashMap来代替Hashtable吗?

92190

关于多线程中抛异常这个面试题再说最后一次!

这个题是遇到一个真实面试题,当时并没有回答很好。然后通过上面的文章,在源码中寻找到了答案。 先给大家看两个案例。 sayHi 方法是抛出运行时异常。...执行方式是 execute 方法,在控制台会打印堆栈异常: ? 执行方式是 submit 方法,在控制台不会打印堆栈异常: ? 那么怎么获取这个 submit 方法提交异常信息呢?...然后一个读者找我聊天,说为什么他这样写,通过 future.get 方法没有抛出异常呢,和我文章里面说不一样呢? 说:那肯定是你操作不对,你把代码发给我看看。 ?...回答到:你这不是把抛出运行时异常 sayHi 方法用 try/catch 代码块包裹起来了吗?异常在子线程里面就处理完了,也就不会封装到 Future 里面去了。...他还追问到:怎么实现呢?为什么 submit 方法提交任务时候,子线程捕获了异常,future.get 方法就不抛出异常了呢? 其实听到这个问题时候都把干懵了。

1K10

如何让你问题不再有去无回?

,“开发某某模块需要注意些什么?”,这样问题别人理解和回答起来就会容易多,回复率自然就上升了。 问题是否别人能很容易理解? 不要假设别人跟你同样了解你问题。...你手头上在做事情,你可能已经在上面花费了几个小时,几天甚至几个月了,但是别人对它认知是零,在你抛出你问题时候,千万要记住这一点! 最无语问题就是“代码为什么不执行啊?”...别人跟你搭上话,回复了你问题,请尽量快速响应,让人觉得你自己对问题也足够重视,别人才会更有兴趣帮助你。如果你需要时间去尝试一下别人提出方案,你也要做出说明,别让对方一直等待。...,“能把你们公司程序代码弄个demo给我么?”这种问题,别人一般只能“呵呵”了。为什么认为别人会有完整你要代码给你呢?...撇开法律问题和经济利益不谈,为什么你认为别人会为你花上大把时间去做一个demo程序给你呢? 所以这种伸手党问题石沉大海是必然态度是否合适?

34720

如何培养技术洞见力? | TW洞见

回头发现这么多年竟然一直是在重复别人结论,坚持也是别人观点,仍然讲不清楚也做不了决策。 为什么呢?...疑是思维火花,问题产生后可使我们大脑兴奋起来,激起探索欲望。提出一个问题,我们大脑不自觉进行思考与解答。科学研究也同时证明大脑喜欢问题。...回想当年刚开始工作时候,习惯第一件事就是找各种技术文档找资料,练习写代码,沉浸于自己代码实现各种乐趣之中,“不知道为什么,但我能给你做出来。”...比如《谈论Feature Team我们在谈些什么》其实在回答FeatureTeam各种问题,而《学习逻辑学》探讨是学什么,为什么学习这样问题。 ? ?...在实践了多年计划之后,年度计划里,如今只有问题。 今年计划回答12个问题,你呢?

87140

Java HashCode详解

一、为什么要有Hash算法 Java中集合有两类,一类是List,一类是Set。List内元素是有序,元素可以重复。Set元素无序,但元素不可重复。...要想保证元素不重复,两个元素是否重复应该依据什么来判断呢?用Object.equals方法。但若每增加一个元素就检查一次,那么元素很多时,后添加到集合中元素比较次数就非常多了。...8个位置之一,如果不用hashcode而任意存放,那么查找就需要到这八个位置里挨个去找,或者用二分法一类算法。...考虑一种情况,向集合中插入对象,如何判别在集合中是否已经存在该对象了?(注意:集合中不允许重复元素存在)   也许大多数人都会想到调用equals方法来逐个进行比较,这个方法确实可行。...0 :name.hashCode()); return result; } 结果: true 要得到刚刚对象 Student 1 实际上,由 Object 类定义 hashCode 方法确实针对不同对象返回不同整数

4K50
领券