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

Effective Java(第三版)-学习笔记

慎重重写clone方法 类必须实现Cloneable接口才能重写clone方法,clone方法的规定需要保证以下成立: x.clone() !...streams用函数对象来处理流数据(想象水流流过管道),循环代码块(循环遍历代码,如for循环,while循环)用代码块不断的重复操作。他们的操作对比: 1.代码块可读写作用域内访问的任何局部变量。...此外,只有当数据量很大时,使用cpu核数相同的线程才可能达到接近线性的速度,如机器学习和大数据处理适合使用流的并行计算。 可参考: 什么是函数式编程思维?...6.严格考虑性能的方法,还是返回null或者抛异常吧。 所有暴露的API都应该文档说明 参考JDK的文档说明。...保守的实现readObject方法 其实还是降低安全风险等问题,如变量的完整校验,不要将序列化方法重写,交给子类不可控等问题。

1.2K10

面渣逆袭:Java基础五十三问,快来看看有没有你不会的!

当然,循环里拼接还是建议用StringBuilder,为什么,因为循环一次就会创建一个新的StringBuilder对象,大家可以自行实验。 35.intern方法有什么作用?...使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。...简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。 日期时间API:Java 8 引入了新的日期时间API改进了日期时间的管理。...当我们定义了 一个方法,这个方法返回的对象可能是空,也有可能非空的时候,我们就可以考虑用 Optional 来包装它,这也是在 Java 8 被推荐使用的做法。...Stream 流,简单来说,使用 java.util.Stream 对一个包含一个或多个元素的集合做各种操作。这些操作可能是 中间操作 亦或是 终端操作。

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

    NodeJS模块研究 - stream

    在 nodejs 中,实现各种功能,总避免不了和“数据”打交道,这些数据可能是 Buffer、字符串、数组等等。但当处理大量数据的时候,如何保证程序的稳健性?如何不让内存爆掉呢?...这需要开发者理解“流”的含义,遵循“流”的相关规范,来进行“流”编程。 相较于其他的模块系列,需要理解的概念偏多。本文主要从以下几个方面深入 stream 模块: 什么是“流”? 流有哪几种类型?...一点点读入的流,还要一点点处理。但是,处理难度的提高换来的是程序性能提升。如果通过fs.readFile()一次性将 100GB 大文件读入内存,那么可能会发生以下几个问题: 内存错误。...流动模式 vs 暂停模式 这是可读流的两种模式。可读流开始时是处于暂停模式,之后根据监听的事件、调用的 api,来进行两种模式的切换。文档上写的很详细,但是也会让初学者感到困扰。...在实现自己的类库的时候,可以借助流来处理大容量数据。nodejs 提供给开发者 API,来定制 4 种类型的流。 实现可写流 继承 Writable 类,需要重写_write()方法。

    93930

    我们期待的TensorFlow 2.0还有哪些变化?

    自动应用这些重命名,最简单的方法是使用 TensorFlow 2.0 升级脚本。...TensorFlow 2.0 常用的建议 将代码重构为更小的函数 TensorFlow 1.X 中的常见使用模式是 “kitchen sink” 策略,即预先列出所有可能计算的并集,然后通过 session.run...您不一定要使用 Keras 的 fit() API 来集成。 结合 tf.data.Datasets 和 @tf.function 在迭代适合内存的训练数据时,可以使用常规的 Python 循环。...除此之外,tf.data.Dataset 则是从磁盘传输训练数据的最好方法。数据集是可迭代的(不是迭代器),工作方式与其他 Python 循环类似。...如果您想使用 AutoGraph 的等效图操作替换 Python 循环,可以通过将代码包装在 tf.function() 中,充分利用数据集异步预取 / 流功能来实现。

    87960

    Swift AsyncThrowingStream 和 AsyncStream 代码实例详解

    本文解释的大部分代码将使用那里解释的API。 什么是 AsyncThrowingStream? 你可以把 AsyncThrowingStream 看作是一个有可能导致抛出错误的元素流。...FileDownloader 是一个完美的例子,你可以重写一段代码来使用 AsyncThrowingStream。...你可以使用基于 AsyncSequence 接口的 for ... in 循环进行迭代,这对 AsyncStream 来说是一样的。...虽然也可能是上面的 “Download finished and stream closed” 的打印语句不会调用,这意味着你在实现层的代码永远不会继续。后者可能是一个未完成的流的结果。...你可以提供一个连续的值流,并在成功或失败时完成一个流。你可以使用基于 AsyncSequence APIs 的 for 循环在实现层面上迭代值。

    74620

    Swift 中的 AsyncThrowingStream 和 AsyncStream

    在深入研究围绕抛出流的细节之前,如果你还没有阅读我的文章,我建议你先阅读我的文章,内容包括async-await。本文解释的大部分代码将使用那里解释的API。...什么是 AsyncThrowingStream? 你可以把 AsyncThrowingStream 看作是一个有可能导致抛出错误的元素流。他的值随着时间的推移而传递,流可以通过一个结束事件来关闭。...在这种情况下,它报告的是一个状态值流,以报告正在运行的下载的当前状态。FileDownloader是一个完美的例子,你可以重写一段代码来使用AsyncThrowingStream。...虽然也可能是上面的“Download finished and stream closed” 的打印语句不会调用,这意味着你在实现层的代码永远不会继续。后者可能是一个未完成的流的结果。...你可以提供一个连续的值流,并在成功或失败时完成一个流。你可以使用基于AsyncSequence APIs的 for 循环在实现层面上迭代值。

    1.4K20

    java面试题-javaSE基础

    break用于完全结束一个循环,跳出循环体执行循环后面的语句 continue用于跳过本次循环,执行下次循环 java中的多态 java中实现多态的机制是什么?...int 的包装类是Integer 为了编程的方便还是引入了基本数据类型,为了能够将这些基本 数据类型当成对象操作,Java 为每一个基本数据类型都引入了对应的包装类型 String、StringBuffer...只是为了标注该对象是可被序列化的,然后使用一个输出流来构造 一个 ObjectOutputStream(对象流)对象,接着,使用 ObjectOutputStream 对象的 writeObject...在运行的时候空间的大小是无法随着你的需要进行增加和减少而改变的,当数据两比较大的时候,有可能会出现越界的情况,数据比较小的时候,又有可能会浪费掉内存空间。...LinkedList 使用了循环双向链表数据结构。

    15610

    30个编程小技巧,提高代码性能

    前言 以下是在日常工作中总结出的一些编码经验,还有一些提高程序运行效率的小技巧,让我们一起来写出更好的代码吧。...另外,栈中创建的变量,随着方法的运行结束,这些内容就没了,不需要额外的垃圾回收。 及时关闭流 Java编程过程中,进行数据库连接、I/O流操作时务必小心,在使用完毕后,及时关闭以释放资源。...JDK API对于RandomAccess接口的解释是:实现RandomAccess接口用来表明其支持快速随机访问,此接口的主要目的是允许一般的算法更改其行为,从而将其应用到随机或连续访问列表时能提供良好的性能...实际经验表明,实现RandomAccess接口的类实例,假如是随机访问的,使用普通for循环效率将高于使用foreach循环;反过来,如果是顺序访问的,则使用Iterator会效率更高。...所以后半句"反过来,如果是顺序访问的,则使用Iterator会效率更高"的意思就是顺序访问的那些类实例,使用foreach循环去遍历。

    37530

    30个编程小技巧,提高代码性能

    另外,栈中创建的变量,随着方法的运行结束,这些内容就没了,不需要额外的垃圾回收。 及时关闭流 Java编程过程中,进行数据库连接、I/O流操作时务必小心,在使用完毕后,及时关闭以释放资源。...尽量在合适的场合使用单例 使用单例可以减轻加载的负担、缩短加载的时间、提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 控制资源的使用,通过线程同步来控制资源的并发访问...JDK API对于RandomAccess接口的解释是:实现RandomAccess接口用来表明其支持快速随机访问,此接口的主要目的是允许一般的算法更改其行为,从而将其应用到随机或连续访问列表时能提供良好的性能...实际经验表明,实现RandomAccess接口的类实例,假如是随机访问的,使用普通for循环效率将高于使用foreach循环;反过来,如果是顺序访问的,则使用Iterator会效率更高。...所以后半句"反过来,如果是顺序访问的,则使用Iterator会效率更高"的意思就是顺序访问的那些类实例,使用foreach循环去遍历。

    33220

    30个编程小技巧,提高代码性能

    前言 以下是在日常工作中总结出的一些编码经验,还有一些提高程序运行效率的小技巧,让我们一起来写出更好的代码吧。...另外,栈中创建的变量,随着方法的运行结束,这些内容就没了,不需要额外的垃圾回收。 及时关闭流 Java编程过程中,进行数据库连接、I/O流操作时务必小心,在使用完毕后,及时关闭以释放资源。...JDK API对于RandomAccess接口的解释是:实现RandomAccess接口用来表明其支持快速随机访问,此接口的主要目的是允许一般的算法更改其行为,从而将其应用到随机或连续访问列表时能提供良好的性能...实际经验表明,实现RandomAccess接口的类实例,假如是随机访问的,使用普通for循环效率将高于使用foreach循环;反过来,如果是顺序访问的,则使用Iterator会效率更高。...所以后半句"反过来,如果是顺序访问的,则使用Iterator会效率更高"的意思就是顺序访问的那些类实例,使用foreach循环去遍历。

    39430

    GadgetInspector源码分析

    class文件的二进制流,创建ClassReader来具体分析class文件 因为asm是观察者模式的具体实现,所以这里使用MethodDiscoveryClassVisitor这个类来扫描所有的class...discoverMethodCalls方法 还是一样的,通过classLoader来获取class,然后循环class使用ClassReader分析 这里使用了MethodCallDiscoveryClassVisitor...在分析这个方法之前先来解释以下 因为是通过asm来分析参数和返回值之间的关系,所以需要对asm的一些方法来做一个了解,先看上面的8个方法,第一个方法是A类的无参构造方法,下面是对应的字节码指令: 第一个指令是...,进入callGraphDiscovery.discover 前面的三个还是和之前相同,获取类的一些相关信息,然后获取passthroughDataflow,就是上一步分析的数据(方法和返回值) 这里使用的还是观察者模式...fastjson的源码里面也有,不能[开头,并且不能再denyHashCodes黑名单里 需要满足以下条件 以get开头 get后面需要有东西,不能只为get 参数为空 以set开头 参数为引用类型(这里使用的是正则来判断

    29820

    flink线程模型源码分析1之前篇将StreamTask中的线程模型更改为基于Mailbox的方法

    使用Flink的流任务中的当前线程模型,有多个线程可能希望并发访问对象状态,例如事件处理(event-processing)和检查点触发(checkpoint triggering)。...使用checkpoint lock有很多缺点:锁必须传递到代码中的许多地方,泄漏到面向用户的API中(请参阅SourceContext),不获取锁可能会导致细微或不那么细微的bug,而关于并发线程的推理通常很容易出错...原因是,从高层次的角度来看,当前的source functions就像事件生成的“无穷”循环一样工作。这是他们的公共API的一部分,不能为了向后兼容自定义sources而更改。...我们将讨论使用不同于其他流任务的source functions来执行流任务的一种可能的方法。...兼容方法背后的核心思想是,我们将使用两个线程来运行这样的source functions,一个是带有事件生成循环( event generating loop)的source function线程,另一个是接收检查点

    2.8K31

    【Java】基础50:如何让写的代码像诗一样优雅?

    一、Stream流引入 这个流和IO流中的流很容易弄混淆。 但是它们是两个完全不一样的概念,Stream流是容器处理的简易API,使用起来特别方便。...④将过滤好的元素遍历打印 上述例子中,打印就能得到“刘小爱”。 2使用Stream流 ? 这就是stream流,比用增强for循环是不是简化了很多?...Stream就好比在构建模型:关注做什么,而不是怎么做 for循环的语法就是“怎么做” for循环的循环体才是“做什么” ①过滤出姓刘的元素 ②过滤出长度为3的元素 ③打印集合元素 这些就是做什么,至于具体是怎么做出来的...为了增加代码拓展性,毕竟遍历方式又不是只有增强for循环。 ③再次使用流遍历 不同的Stream流有不同的遍历方法,可以千变万化。...数组array:也就相当于array.length 集合list:也就相当于list.size() 有的时候这两种方法还会弄混,count方法的好处在于,不管是数组还是集合,只用count就可以了。

    85011

    我们期待的TensorFlow 2.0还有哪些变化?

    自动应用这些重命名,最简单的方法是使用 TensorFlow 2.0 升级脚本。...TensorFlow 2.0 常用的建议 将代码重构为更小的函数 TensorFlow 1.X 中的常见使用模式是 “kitchen sink” 策略,即预先列出所有可能计算的并集,然后通过 session.run...您不一定要使用 Keras 的 fit() API 来集成。 结合 tf.data.Datasets 和 @tf.function 在迭代适合内存的训练数据时,可以使用常规的 Python 循环。...除此之外,tf.data.Dataset 则是从磁盘传输训练数据的最好方法。数据集是可迭代的(不是迭代器),工作方式与其他 Python 循环类似。...如果您想使用 AutoGraph 的等效图操作替换 Python 循环,可以通过将代码包装在 tf.function() 中,充分利用数据集异步预取 / 流功能来实现。

    1.2K30

    25道Java基础面试题

    5、重载(Overload)和重写(Override)的区别 方法的重载和重写都是实现多态的方式,区别在于: 重载实现的是编译时的多态性。 重写实现的是运行时的多态性。...字节流没有缓冲区,是直接输出的,而字符流是输出到缓冲区的。因此在输出时,字节流不调用colse()方法时,信息已经输出了,而字符流只有在调用close()方法关闭缓冲区时,信息才输出。...· 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。...· 处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。 结论:只要是处理纯文本数据,就优先考虑使用字符流。除此之外都使用字节流。...7、Date API,包含了一组全新的时间日期API 20、float num = 1.2 正确吗?

    41520

    Envoy架构概览(2):HTTP过滤器,HTTP路由,gRPC,WebSocket支持,集群管理器

    解码器/编码器:解码器/编码器过滤器在连接管理器正在解码请求流的部分时以及连接管理器将要对部分响应流进行编码时被调用。 HTTP级别筛选器的API允许筛选器在不知道底层协议的情况下运行。...以下配置是可能的: 最大重试次数:Envoy将继续重试任意次数。在每次重试之间使用指数退避算法。此外,所有重试都包含在整个请求超时内。由于大量的重试,这避免了很长的请求时间。...目前支持的优先级是默认和高。 gRPC gRPC是来自Google的RPC框架。它使用协议缓冲区作为基础的序列化/ IDL格式。在传输层,它使用HTTP / 2进行请求/响应复用。...Envoy在传输层和应用层都有一流的gRPC支持: gRPC使用HTTP / 2预告片来传送请求状态。...集群管理器向过滤器堆栈公开API,允许过滤器获得到上游集群的L3 / L4连接,或者到上游集群的抽象HTTP连接池的句柄(无论上游主机是支持HTTP / 1.1还是HTTP / 2被隐藏)。

    2.2K60

    Java 代码优化建议

    另外,栈中创建的变量,随着方法的运行结束,这些内容就没了,不需要额外的垃圾回收。 及时关闭流。 Java 编程过程中,进行数据库连接、I/O 流操作时务必小心,在使用完毕后,及时关闭以释放资源。...使用单例可以减轻加载的负担、缩短加载的时间、提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 控制资源的使用,通过线程同步来控制资源的并发访问; 控制实例的产生...这是 JDK 推荐给用户的,JDK API 对于 RandomAccess 接口的解释是实现 RandomAccess接口用来表明其支持快速随机访问,此接口的主要目的是允许一般的算法更改其行为,从而将其应用到随机或连续访问列表时能提供良好的性能...实际经验表明,实现 RandomAccess 接口的类实例,假如是随机访问的,使用普通 for 循环效率将高于使用 foreach 循环,反过来,如果是顺序访问的,则使用 Iterator 会效率更高。...不要对数组使用 toString() 方法。 本意是想打印出数组内容,却打出来的是对象信息,甚至有可能因为数组引用为空而导致空指针异常。

    62510

    OpenCV 4.0 rc版本发布,扩展计算图Graph API

    rc版本即正式发布前的候选版(release candidate),指在重大版本号升级前,几乎已经完工了,但为避免可能的百密一疏,先让大家“测”起来的版本。所以不建议在正式的项目中使用。 ?...)方法; 核心模块的持久化(即以XML / YML / JSON格式存储数据到硬盘)已在C ++中重写,使得在读取FileStorage时占用的内存较少。...C语言风格的API(CvFileStorage)已被删除; 扩展了Graph API模块,使其获得初始异构支持,OpenCL支持,文档也更加完善,并支持独立构建它; 删除了以下模块photo, video...综上,这次发布最大的特点就是:删! 其中值得一提的是,4.0中新增加的模块Graph API,它将计算图引入到视觉计算中。...不过步子还是慢了点。 下载地址: https://opencv.org/opencv-4-0-0-rc.html

    73620

    Java基础知识点总结

    定长 固定数据类型 索引,从0开始 String s = "abc"; 引用数据类型是地址值,基本数据类型是具体的值 类,数组,枚举 String 数组 一维数组 二维数组 3.运算符 算数运算符 +...- * / ++ -- 关系运算符 基本数据类型比较值 引用数据类型比较的地址值 返回的是boolean !...true值:false值 三元运算符 4.循环 for 外层循环执行一次,里层循环全部执行完 for(初始化值;循环终止条件;循环后的操作){循环体} 基本格式 执行流程 嵌套循环 增强for while...4.多态 概念:用父类的类型来接收子类的对象 扩展性强,解决了代码复用,降低类型耦合度 耦合==对外部的依赖 不能调用子类特有的方法,可以通过强转(向下转型) api 1.API文档使用 2.String...File 修改文件内容,也可以用来文件内容的传输 操作文件或文件夹 File流 IO流 4.xml dom4j 5.Excel poi

    46630
    领券