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

一文读懂《Effective Java》第43条:返回零长度的数组或集合,而不是null

对于一个返回null 而不是零长度数组或者集合的方法,客户端几乎每次用到该方法都可能会忘记写专门处理null 返回值的代码,进而导致NPE。...返回值为null 与性能 有时候会有程序员认为:null 返回值比零长度数组更好,因为它避免了分配数组所需要的开销,但这种观点站不住脚。...在返回值这种级别上担心性能问题是不明智的,除非分析表明这个方法是造成性能问题的真正源头 对于不返回任何元素的调用,每次返回同一个零长度数组是有可能的,因为零长度数组不可变的,而不可变对象可能被自由的共享...,没理由返回null,二是返回一个零长度的数组或者集合。...Java 的返回值为null 的做法,很可能是从C 语言沿袭过来的,在C 中,数组长度是与实际的数组分开返回的,如果返回的数组长度为0,再分配一个数组就没有任何好处了。

1.6K20

关注数据而不是模型:我是如何赢得吴恩达首届 Data-centric AI 竞赛的

这次竞赛共有489个参赛个人和团队提交了2458个独特的数据集。仅仅通过改进数据(而不是模型架构,这是硬标准),许多参赛者能够将64.4%的基准性能提高20%以上。...在此,我很高兴能和大家分享我是如何凭借“数据增强(Data Boosting)”技术获得最佳创新奖的。...这场竞赛真正的独特之处在于,与传统的 AI 竞赛不同,它严格关注如何改进数据而不是模型,从我个人的经验来看,这通常是改进人工智能系统的最佳方式。...我最初使用这个电子表格来识别标记错误的图像和明显不是罗马数字 1-10 的图像(例如,在原始训练集中就有一个心脏图像)。 现在我们来看看“数据增强”技术。...v=FnFksQo-yEY&t=1316s 当我最初考虑这种“数据增强”的方法时,我需要弄清楚如何自动生成大量新的候选图像作为来源。我决定尝试随机增强原始训练数据,以生成大量增强图像作为候选来源。

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

    我不是修电脑的!新年餐桌上,如何让老妈搞懂自己的“技术”工作

    这篇文章里,让我们尝试用最通俗易懂的方式-一家烘培店,向餐桌上的朋友和亲人解释技术相关的基本概念。既然是在餐桌上,身为吃货的我们,就用吃来解释这一切吧! 先来聊聊公司背景 你的公司是一家烘焙店。...1、产品经理 你的任务是弄清楚面包店整体的经营策略,或者某种面包的烘焙策略,比方说烘焙时加什么香料,有什么特色,或者面包店应该提供什么新的东西。 到了开发产品时,你代表客户的声音。...你负责整合顾客反馈并提出新的想法(可能是新口味或全新的糕点种类),为了确保面包房的知名度达到你预期的规模和质量,你需要做出决策。...你不是面包师或厨师的管理者,你只管理面包店的烘焙食物:什么时候发售,推出它的目标是什么,它的目标受众是谁。...你还需要不断给团队提供信息,确保面包店的客源不会流失。 我如何工作? APIs 烤箱上的刻度盘。 Cloud云 一个大型网络烤箱,可以帮助你快速地向世界各地提供商品。

    75830

    在 .NET 对象和 JSON 互相序列化的时候,枚举类型如何设置成字符串序列化,而不是整型?

    默认情况下,Newtonsoft.Json 库序列化和反序列化 JSON 到 .NET 类型的时候,对于枚举值,使用的是整数。...然而,在公开 JSON 格式的 API 时,整数会让 API 不易于理解,也不利于扩展和兼容。 那么,如何能使用字符串来序列化和反序列化 JSON 对象中的枚举呢?...当然,如果你希望属性名也小写的化,需要加上额外的序列化属性: 1 2 3 4 5 6 7 8 9 10 11 12 13 ++ using System.Runtime.Serialization;...,同时有更好的阅读体验。...欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。

    75440

    我如何每次运行程序时,都会将数据添加到对应的keys中,而不是重新创建一个dict啊?

    大家好,我是Python进阶者。...一、前言 前几天在Python最强王者交流群【 】问了一个Python项目实战的问题,问题如下:请问,我如何每次运行程序时,都会将数据添加到对应的keys中,而不是重新创建一个dict啊。...如果你也有类似这种Python相关的小问题,欢迎随时来交流群学习交流哦,有问必答! 三、总结 大家好,我是Python进阶者。...这篇文章主要盘点了一个Python项目实战的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。...最后感谢粉丝【 】提出的问题,感谢【东哥】给出的思路,感谢【莫生气】等人参与学习交流。

    11010

    ES6中一些超级好用的内置方法

    ES6的目标之一就是让JS代码显得更加清晰和简洁,下面就让我们看看这些方法如何帮助我们达到这个目的。 对象属性的操作 当我们对object进行操作的时候,我们可能经常需要合并两个或者多个object。...数组元素的查询 在数组里查询一个元素,或者查询他的index是一个非常常见的对数组的操作。在ES6中提供了两个新的数组方法,find()和findIndex()来做这件事。...需要注意的是,find()方法会返回第一个(而不是最后一个)满足查询要求的元素。...字符串复制 ES6中新增了一个String.repeat()方法用来复制字符串。 ? 字符串检索 ES6中新增了3个新方法用来帮助开发者搜索String中的文本片段。...我简直太爱这些方法了,因为indexOf()总是有一些奇怪的性能问题让我纠结,而且indexOf在使用上很容易出错。 ?

    83620

    使用 OAS(OpenAPI标准)来描述 Web API

    如果以开发者的视角去设计的API, 那么通常的后果是开发出的API会很注重功能实现的过程和原理, 而不是用户如何能简单平滑的使用这个API来达到他们的目的....第5行 paths, paths属性应该包含该API可用的资源. 这里面使用 {} 仅仅是为了让文档验证通过, 因为我目前还没有写什么内容....描述查询参数 如果我们的get操作里需要一些查询参数(查询字符串, Query String), 那么可以使用 parameters 这个属性: ?...这里需要注意的就是该操作的结果是产品的数组, 所以类型是array, 而array 的 items属性就包含着数组元素的schema....而针对那个 get Action的返回结果(数组类型), 需要把JSON引用放在 array 的 items属性里. 可复用参数 直接看代码: ?

    3.6K20

    算法君带你学算法(1):求最长回文字符串

    不是让你判断是否为回文字符串,是要在一个字符串中寻找最长回文字符串,例如,akbubk是一个字符串,这里边有很多回文字符串,其实单个字母就是一个回文字符串,还有就是bub、kbubk,很显然,最长的回文字符串就是...算法小白:我只用了0.01秒,就想到如何设计了,当然是得到字符串中的所有子串,然后找到所有的回文字符串,最后,当然是对这些回文字符串按长度排序,并找到最大的回文字符串了。哈哈哈,我聪明吗!!!...让我来猜一猜,是不是将已经确认的回文字符串保存起来呢,如果下次再遇到这些已经确认的回文字符串,就不需要再进行遍历了,直接取结果就行了!...算法小白:嗯,数组我当然知道,不过如何用数组来保存回文字符串的历史呢? 算法君:前面提到的is_palindrome_string函数有两个参数i和j。...假设有一个n*n的正方形二维数组P(每个元素初始值都是0)。如果从i到j的字符串是回文字符串,那么就将P[i,j]设为1,如果要知道从i到j的字符串是否为回文字符串,也只需要查询P[i,j]即可。

    76320

    REST API有关幂等性等11条最佳实践

    将常用文本放在 URL 末尾会让编写客户端的人感到厌烦。 无论如何,JSON 应该是默认值。...规则 #4:不要将数组作为顶级响应返回 来自端点的顶级响应应该始终是一个对象,而不是一个数组。...如果您的端点返回顶级数组,您将需要一个全新的端点。 规则 #5:不要返回映射结构 我经常看到 JSON 响应中用于集合的映射结构。相反,返回一个对象数组。...OpenAPI 是一个警示故事 - v3 到 v4充满了不必要的重大更改,因为它们严重依赖于映射结构而不是数组结构。...但它也可能重试已经成功的作业;队列是至少重试一次,而不是完全重试一次。 由于成功执行的 DELETE 作业无论如何都会重试,因此作业必须将 "未找到 "响应视为成功。

    26720

    从头到尾解析Hash 表算法

    而当使用哈希表进行查询的时候,就是再次使用哈希函数将key转换为对应的数组下标,并定位到该空间获取value,如此一来,就可以充分利用到数组的定位性能进行数据定位(文章第二、三部分,会针对Hash表详细阐述...3,斐波那契(Fibonacci)散列法 平方散列法的缺点是显而易见的,所以我们能不能找出一个理想的乘数,而不是拿value本身当作乘数呢?答案是肯定的。...我们由一个简单的问题逐步入手:有一个庞大的字符串数组,然后给你一个单独的字符串,让你从这个数组中查找是否有这个字符串并找到它,你会怎么做?...是不是把第一个算法改进一下,改成逐个比较字符串的Hash值就可以了呢,答案是,远远不够,要想得到最快的算法,就不能进行逐个的比较,通常是构造一个哈希表(Hash Table)来解决问题,哈希表是一个大数组...移到下一个位置,如果已经移到了表的末尾,则反绕到表的开始位置起继续查询  6. 看看是不是又回到了原来的位置,如果是,则返回没找到 7. 回到3 ok,这就是本文中所说的最快的Hash表算法。什么?

    1K40

    使用 MongoDB 之前应该知道的 14 件事

    避免大对象,尤其是大数组。 谨慎对待 MongoDB 的设置,尤其是关乎安全和稳定性时。 MongoDB 没有查询优化器,因此,对于如何安排查询操作的顺序,你必须格外小心。...忘记聚合情况下的阶段排序 在有查询优化器的数据库系统中,你编写的查询是说明你想要什么而不是如何获取它。这就像在餐馆中点餐;你通常只需要点菜,而不必对厨师发出详细的指令。...忘记哈希对象中键序的意义 在 JSON 中,一个对象包含一个无序集合,而该集合中有零个或多个名/值对,其中名是一个字符串,而值是一个字符串、数值、布尔值、空、对象或数组。...使用$limit() 而未用$sort() 通常,当你在 MongoDB 中开发时,仅仅查看查询或聚合返回的结果的样例会很有用。...为了确保可靠性,查询或聚合必须是“确定的”,就是说,它们每次执行都会给出相同的结果。包含$limit 而不包含$sort 的代码不是确定的,后续会导致难以跟踪的 Bug。

    1.9K30

    你真的了解mongoose吗?

    为了让各位小伙伴快速上手,加深对于 mongoose 的了解,我特地结合之前的项目整理了一下关于 mongoose 的一些基础知识,这些对于实战都是很有用的。...limit: 指定返回结果的最大数量 skip: 指定要跳过的文档数量 lean: 返回普通的 js 对象,而不是 Mongoose Documents。...find() 方法的查询结果是数组,即使没查询到内容,也会返回 [] 空数组。...而 findById(undefined) 相当于 findOne({ _id: null }),返回 null。 查询结果: 返回数据的格式是 {} 对象形式。...sort修饰 在指定的位置添加元素以更新数组字段 按照指定的规则排序 限制数组大小 存储数组 options lean: true 返回普通的 js 对象,而不是 Mongoose Documents

    41.6K30

    用 Function.apply() 的参数数组化来提高 JavaScript程序性能

    for(;;)和while循环的性能应该说基本(平时使用时)等价。 而事实上,如何使用这两个循环,则有很大讲究。我在测试中有些很有意思的情况,见附录。...如果要与数组的长度作比较,应该事先把数组的length属性放入一个局部变量中,减少查询次数。...这一点可以和循环结合起来,因为我们常常要根据字符串、数组的长度进行循环,而通常这个长度是不变的,比如每次查询a.length,就要额外进行一个操作,而预先把var len=a.length,则就少了一次查询...字符串连接 如果是追加字符串,最好使用s+=anotherStr操作,而不是要使用s=s+anotherStr。...String()属于内部函数,所以速度很快,而.toString()要查询原型中的函数,所以速度逊色一些,new String()用于返回一个精确的副本。 2.

    88750

    开始使用MongoDB之前应该知道的14件事

    忘记聚合情况下的阶段排序 在有查询优化器的数据库系统中,你编写的查询是说明你想要什么而不是如何获取它。这就像在餐馆中点餐;你通常只需要点菜,而不必对厨师发出详细的指令。...除非你设置multi参数,更新匹配查询条件的所有文档,否则它不会更新集合里的所有文档。这一点不是那么明显。...忘记哈希对象中键序的意义 在JSON中,一个对象包含一个无序集合,而该集合中有零个或多个名/值对,其中名是一个字符串,而值是一个字符串、数值、布尔值、空、对象或数组。...使用$limit()而未用$sort() 通常,当你在MongoDB中开发时,仅仅查看查询或聚合返回的结果的样例会很有用。...为了确保可靠性,查询或聚合必须是“确定的”,就是说,它们每次执行都会给出相同的结果。包含limit而不包含sort的代码不是确定的,后续会导致难以跟踪的Bug。

    4.5K20

    分享一些对你有帮助的JavaScript技巧

    对于JavaScript,我们经常会发现,为了一个相似的结果,我们可以用多种方式来做事情,这有时会让人感到困惑。 有些用法比其他替代方法更好。 你如何改变你的JS代码,让它更简单,更容易阅读?...学习如何让JavaScript尽可能的不痛苦,是一项宝贵的技能,肯定会让你成为办公室的宠儿。...但它返回的是一个字符串类型的值。现在,我将有一个额外的头痛问题,就是如何将它解析为一个整数。如果输入框接受浮动数(比如,16.56),那么parseFloat()怎么办?...我们可以通过这些属性和方法从浏览器的URL中获取协议、主机、端口、域名等信息。 我发现非常有用的属性之一是, window.location.search 搜索属性从位置URL中返回查询字符串。...看你能把代码写得多小多清晰,是一件很有趣的事。 你喜欢我的文章吗?有问题吗?我是不是犯了错误? 请告诉我!!!

    1.2K20

    30s到0.8s,记录一次接口优化成功案例!

    SQL优化 我的思路是将200万行转为一行返回。...这样做可以先将数组展开为多行,然后将这些行再次聚合为一个单一的数组。如果您希望最终结果是一个字符串,而不是数组,您还可以使用 string_agg 函数。...string_agg(elem) 将这些行聚合成一个以逗号分隔的字符串。 这将返回一个包含所有元素的单一数组。 查询结果由多行,拼接为了一行 再测试,现在是正常速度了,但是查询时间依旧很高。...这个查询将返回两列:一列是元素(elem),另一列是该元素在所有数组中出现的次数(count)。...这次优化让我重新真正审视了关系型数据库的劣势。选择哪种类型的数据库,取决于具体的应用场景和需求。

    19921

    「理论」jQuery选择器Sizzle原理分析(上)

    体积小,压缩后只有3K 三、如何分析框架源码 Sizzle.js的源码总共有2000多行,里面包含了很多的正则表达式,函数和兼容性处理,咋一看头都是懵的,这里我觉得读框架的源码需要有两个思路: 1....理清思路,找出设计图纸   了解作者的思路,我们每个人在编码的时候是有一个设计流程或者设计图,还有数据结构,我们首先就要通过注释或者相关资料了解作者的这些思路,可以很快的读通源码流程,而不是一上来就淹没在源码中...优化选择符:通过两个角度来优化,一是尽量缩小DOM根节点,缩小搜索的范围,另外是寻找备选种子集合,通过本地接口过滤出备选种子集合,而不是去搜索所有的DOM节点 3....这里有几个细节说明一下,tokenize函数实现的过程是很多编译器实现的一种方式,比如js代码在执行之前也是从字符串需要进行词法分析,编译优化再执行的过程,通过tokenize可以让机器能理解我们的数据...然后开始分析 ID,TAG,CLASS,ATTR,CHILD,PSEUDO选择符,如果匹配到了相关选择符,再看看是否需要预处理,如果需要再进行预处理返回(只有部分选择符需要,后面详解),然后压入数组,删除相关选择符字符串

    1.1K10
    领券