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

为什么我不建议你用去 “ ! = null 做判空?

最终,项目中会存在大量判空代码,多么丑陋繁冗!如何避免这种情况?我们是否滥用了判空呢? ---- 精华回答: 这是初、中级程序猿经常会遇到的问题。...他们总喜欢在方法中返回null,因此,在调用这些方法时,也不得不去判空。另外,也许受此习惯影响,他们总潜意识地认为,所有的返回都是不可信任的,为了保护自己程序,就加了大量的判空。...你可能还不明白这两句话的意思,不急,继续往下看,接下来将详细讨论这两种情况 先说第2种情况 null就是一个不合理的参数,就应该明确地中断程序,往外抛错误。这种情况常见于api方法。...这种情况下,null是个”看上去“合理的值,例如,我查询数据库,某个查询条件下,就是没有对应值,此时null算是表达了“空”的概念。...这里给一些实践建议: 1、假如方法的返回类型是collections,当返回结果是空时,你可以返回一个空的collections(empty list),而不要返回null,这样调用侧就能大胆地处理这个返回

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

    为什么我的BERT不行?

    当然了,bad case分析这块我也聊了很多,多分析能发现其中的端倪,知道模型需要什么,该怎么处理,我再放一遍在这里,希望能好好阅读。...训练层面的分析 BERT的训练其实挺多讲究的,这里的实验效果要保证对参数的有一定的要求,所以大家要多去观察训练过程暴露的问题,训练过程其实就是要观测loss变化、验证集效果等的问题,放置没学到、学飘了之类的问题...类似的思路其实我在这两篇文章里其实都有谈过: 心法利器[44] | 样本不均衡之我见 所以,很多时候你需要的可能是更多地挖掘数据,从日志,从更多渠道去找,这个可能比增强本身要好。...这里背后的逻辑可以参考我这篇文章: 心法利器[45] | 模型需要的信息提供够了吗 训练问题 针对训练问题,其实也就是一个经验的问题了,多弄其实问题就会小很多,大家可以多去看各个论文使用的超参,一般调的差不多基本都不会有的...而文章本身的输出并非是按照这个思路走,而是从一些大家经常问的点深入来讨论,希望能从我的角度和风格来思考和回答问题。

    1.2K20

    只有我还不明白Redis主从复制的原理吗?

    大家好,我是小❤,一个漂泊江湖多年的 985 非科班程序员,曾混迹于国企、互联网大厂和创业公司的后台开发攻城狮。 1....2.2 为什么要读写分离 1)防止并发 从上图我们可以看出,数据是由主节点向从节点单向复制的,如果主、从节点都可以写入数据的话,那么数据的一致性如何保证呢?...这样 Redis 在主、从库读到的数据又可能会不一致,带来业务上的挑战,用户也是难以接受的。 业务为用户服务,技术为业务服务。...runID:每个 Redis 实例的唯一标识,当主从复制进行时,该值为 Redis 主节点实例的ID。由于首次同步时还不知道主库的实例ID,所以该值第一次为 ?...offset:从库数据同步的偏移量,当第一次复制时,该值为 -1,表示全量复制 主服务器收到 PSYNC 命令后,会创建一个专门用于复制的后台线程(replication thread),然后记录从节点的

    48831

    为什么我要写自己的框架?

    其实说白了框架就是使用别人造好的轮子。在软件开发里面就是command+C/command+V。 先自我介绍一下,我是一名信管专业的大学生,从我的专业可以看出我就是以后大家嘴里的程序员。...曾几何时,我觉得很兴奋,在如此短的时间内就可以做到这样的高度,让我十分的开心。开发出的内容也完全符合校内应用的需求。我变成了一个别人眼中的“大师”。 但事情并没有往想象的地方发展。...框架用的时间久了之后就发现了一个问题:我真的有学习过吗?我学的内容真的有用嘛,这些框架内的东西能对我今后有帮助吗,当然,这种想法不是一天形成的,还有一个小的故事。...但当有一天在讲授开发经验的时候,当我当着大家的面真的静下心来写我需要展示的一个类的时候,以前用了这么多的框架,我发现在这么多人面前的我已经几乎写不出来一个正确的类了!!...于是我又开始新的一轮学习,看大量的书籍,有一天我重新打开Yii框架在我当时看起来很难理解的代码的时候我发现:我居然有点明白它的工作原理,知道整体的架构了!

    1.3K20

    为什么我的Redis这么“慢”?

    此时就会出现,业务访问延时增大的问题,最大延迟为 25 毫秒。 而且这个访问延迟的情况,不会记录在慢日志里。慢日志中只记录真正执行某个命令的耗时,Redis 主动过期策略执行在操作命令之前。...下面就针对这两块,分享一下我认为比较合理的 Redis 使用和运维方法,不一定最全面,也可能与你使用 Redis 的方法不同,但以下这些方法都是我在踩坑之后总结的实际经验,供你参考。...以 master-slave 集群方式部署实例,并分布在不同机器上,避免单点,Slave 必须设置为 Readonly。...不开启 AOF 或开启 AOF 配置为每秒刷盘,避免磁盘 IO 消耗降低 Redis 性能。...总结 以上就是我在使用 Redis 和开发 Redis 相关中间件时,总结出来 Redis 推荐的实践方法,以上提出的这些方面,都或多或少在实际使用中遇到过。

    3.7K10

    BI为什么我的查询运行多次?

    此行为是正常的,旨在以这种方式工作。引用单个数据源的多个查询如果多个查询从该数据源拉取,则可能会出现对同一数据源的多个请求。 即使只有一个查询引用数据源,这些请求也会发生。...Caching可以减少对同一数据源的多个请求的可能性,因为一个查询可以受益于已针对其他查询运行和缓存的相同请求。...在云环境中,每个查询都使用自己的单独缓存进行刷新,因此查询无法受益于已为其他查询缓存的相同请求。折叠有时,Power Query的折叠层可能会根据正在下游执行的操作生成对数据源的多个请求。...详细信息: 禁用数据隐私防火墙后台数据下载 (也称为“后台分析”)与为数据隐私执行的评估类似,默认情况下,Power Query编辑器将下载每个查询步骤的前 1000 行预览。...隔离多个查询可以通过关闭查询过程的特定部分来隔离多个查询的实例,以隔离来自重复请求的位置。

    5.5K10

    为什么我的HibernateDaoSupport没有注入SessionFactory

    前言 很早之前,就打算写这一篇文章了(其实有很多源码分析的文章打算写,但是自己太拖延了导致很多文章搁浅了)。我为什么要写这一文章呢?...事情的缘由是同事在SpringBoot项目中有一个A类继承HibernateDaoSupport,但是程序运行总是抛出没有成功注入SessionFactory的错误,后来我debug Spring源码解决了这个问题...这个错误的原因是A类的RootBeanDefinition中的autowireMode的值为0,在AbstractAutowireCapableBeanFactory类中的populateBean方法中没有执行到...; } } @Component public class MyBaseDao extends MyHibernateDaoSupport { } 3.我们运行测试用例,发现template为空...image.png 2.autowireMode等于0时为不注入;等于1时为通过属性名注入;等于2时为通过属性类型注入。 ?

    3.1K10

    为什么我的进程被kill掉了

    这段代码非常简单,就是先用mmap的方式,为该进程分配10GiB的虚拟内存,然后再用page写的方式,让操作系统为这10GiB虚拟内存,分配对应的物理内存,最后sleep,等待我们测试。...第二次执行这个程序也没问题,但奇怪的是,此时第一次执行的那个程序却被kill掉了: ? 这是为什么呢?...这也就解释了为什么上面第二次运行该程序时,mmap是没有报错的。...这也就解释了,为什么上面在第二次执行那个程序时,被kill掉的是第一次执行的那个进程,而不是第二次执行的进程,因为第一次执行的那个进程,占用的物理内存更大。...另外也欢迎关注我公众号,主要是结合实际,讲一些linux内核相关的知识。

    2.4K20

    为什么我的进程被kill掉了

    这段代码非常简单,就是先用mmap的方式,为该进程分配10GiB的虚拟内存,然后再用page写的方式,让操作系统为这10GiB虚拟内存,分配对应的物理内存,最后sleep,等待我们测试。...第二次执行这个程序也没问题,但奇怪的是,此时第一次执行的那个程序却被kill掉了: ? 这是为什么呢?...这也就解释了为什么上面第二次运行该程序时,mmap是没有报错的。...那为什么不kill掉第二个进程,而是kill掉第一个呢? 这个和linux内核中oom killer的选择策略有关,我们直接看源码: ?...这也就解释了,为什么上面在第二次执行那个程序时,被kill掉的是第一次执行的那个进程,而不是第二次执行的进程,因为第一次执行的那个进程,占用的物理内存更大。

    2.7K51

    为什么我喜欢JavaScript的Optional Chaining

    从 ES2015 开始,对我代码影响最多的功能是解构、箭头函数、类和模块系统。 截至 2019 年 8 月,一项新提案 optional chaining 达到了第3阶段,这将是一个很好的改进。...在 movieSmall 的情况下,如果属性 director 丢失了。那么 movie.director?.name 的计算结果为 undefined。...这就是我喜欢 optional chaining 的原因。 2.1 数组项 但是 optional chaining 功能可以做更多的事情。...defaultValue 的结果为defaultValue, 否则表达式的值为variable 的值。...为什么我喜欢它? 我喜欢 optional chaining 运算符,因为它允许从嵌套对象轻松访问属性。它可以减少通过编写样板文件来验证来自访问器链的每个属性访问器上无效值的工作。

    1.2K30

    为什么我的 WordPress 网站被封了?

    作为站长,最不想看到的就是网站被封了,封禁不仅影响网站业务,甚至会有罚款和监禁的风险。...以下是 WordPress COS 的内容审核框架,静态资源存储在 COS 之后,WordPress 站长需要配置相应的审核规则来对存量数据和增量数据进行审核,当审核结果为敏感文件时自动冻结该文件,避免了网页中的违法内容扩散传播...上述两种审核配置都支持用户自定义审核策略,通过设置自定义策略可以定制涉黄涉政等个性化场景的审核;审核后支持按照指定的分数范围进行冻结,智能机审+精确人审的方式帮你有效避免违法内容的传播;审核结果可以通过配置的回调链接返回给用户...查询审核任务:通过发起任务时获取到的任务ID,直接查询对应任务ID的网页审核结果。审核结果中包含了审核是否成功、网页的审核处理建议、违规的图片和文字等。...,对存储在 COS 中的图片、视频等静态资源进行多场景的审核。

    3.5K50

    为我开发的API添加华丽的外衣

    在日常开发中,最容易被吐槽的就是代码写的烂,没有注释鬼知道你这个是什么意思啊? 另一个就是文档不齐全,这些接口是干嘛的?参数是什么意思?等等问题。...归根到底还是没有严格的开发规范,最重要的还是要有方便的工具来帮助我们落地这些规范。 今天给大家推荐一个开源的 API 管理工具,如果还没有用上的感觉看看吧。...可以帮助开发者轻松创建、发布、维护 API,YApi 还为用户提供了优秀的交互体验,开发人员只需利用平台提供的接口数据写入工具以及简单的点击操作就可以实现接口的管理。...与为底层编程所实现的接口类似,Swagger 消除了调用服务时可能会有的猜测。...接口列表 有可能会遇到的问题 一般我们会在项目中进行全局的异常处理,当发生错误时,将异常捕获然后转换成固定的格式响应给调用方,这样可以统一 API 的数据格式。

    89620

    Spring MVC 框架学习(三)---- 我的第一个 Spring MVC 程序

    文章目录 Spring MVC 框架学习(三)---- 我的第一个 SpringMVC 程序 (0)导入spring-webmvc依赖 (1)在web.xml文件中配置信息 (2)在spring-mvc.xml...中配置MVC配置信息 (3)写jsp文件 (4)写一个后端控制器 (5)运行项目,浏览器进行访问 Spring MVC 框架学习(三)---- 我的第一个 SpringMVC 程序   之前用的是原生接口加...+DispatcherServlet+映射器+适配器+视图解析器等创建了MVC程序,这次就用注解完成一个MVC程序的开发。...使用注解得配置以下信息: 开启注解扫描交给Spring容器管理 导入mvc的xml约束,开启mvc注解驱动 开启mvc静态资源处理器 为什么要过滤静态资源?...这样一来,所有对于静态资源的请求都会被看作是一个普通的后台控制器请求,导致请求根本找不到从而报404错误 mvc 注解驱动的作用?

    30110

    基于Python的这个库,我实现了“隔空操物“

    文章目录 1.项目效果展示 1.1:隔空音量控制 1.2:隔空绘画 1.3 :手势识别 1.4:鼠标模拟 2.所涉及到的库 2.1:OpenCv简介 2.2:MediaPipe简介 3.项目环境搭建...4.源码部分 5.总结 1.项目效果展示 项目主要分为四个部分,分别是 隔空音量控制 隔空绘画 隔空识别手势 隔空操作鼠标 下面是这四部分的演示效果 1.1:隔空音量控制 1.2:隔空绘画 1.3...使用MediaPipe,可以将机器学习任务构建为一个图形的模块表示的数据流管道,包括推理模型和流媒体处理功能。...想要实践一下的同学可以私信我获取,或者是直接点击文章底部关注公众号,点击联系我添加备注源码获取 下面是关键部分代码的一些截取内容。...感兴趣的小伙伴可以导入项目在自己的电脑上进行实操一下。

    63730

    为什么我的虚拟机开机即卡死?以及我是怎么修补的

    给出我的解决方法,不一定对你的症,也不一定对我下一次的症。但至少,我把病根抓出来晾晒。 前面的所有工作都不说了,最终我发现是由于内存被占满导致无法正常进入图形界面的。...发现是由于猜想,但是毕竟是猜想,我发现只有几百M的内存了,但是我不知道是不是那个原因。于是我把内存扩容,并压缩,给它2G的内存,但它还是打不开,我不确定是否是由于内存不足。...我去看了,原创作者是那样解决了,底下一堆评论问为什么他们那样做不能解决。那不是废话吗,环境都不一样。至于网上其他抄袭的底下根本没评论。跟着做大概率是不行的。...我来解释一下这第三步操作是什么:是清理内存碎片(就像手机内存不足的时候清理一下垃圾)。这我在外面就可以做的事情,做了无效的。 那个博主我挺佩服他的,虚拟机上能有那么多的垃圾?...5、临时挂载命令:mount 分区路径 预挂载路径 6、如果挂载错了,想取消挂载:umount 分区路径 或 挂载路径,我为什么写俩,自己机灵点。 ---- 至此,问题解决。

    2.7K20
    领券