JDK8特性-Stream流式操作
参考文献
Java8 实战
Stream API
只能对实现了java.util.Collection接口的类做流操作.
流(Stream)是数据渠道,用于操作数据源(集合,数组等)所生成的元素序列.
集合讲的是数据,流讲的是计算
Stream自己不会存储元素
Stream不会改变源对象.相反,它们会返回一个持有结果的新Stream.
Stream操作是延迟执行的,这意味着它们等到需要的时候才执行.
Stream支持同步执行,也支持异步执行.
惰性流
流是惰性的,在达到终止条件前不会处理元素,达到终止条件后逐个处理每个元素.如果遇到短路操作,那么只要满足所有条件,流处理就会终止.
对于集合而言,必须执行完所有操作才能进行下一步操作.对于流而言,各种中间操作构成一条流水线,但在流达到终止操作前不会处理任何元素,达到终止操作后只处理所需的值.
流处理并非任何情况下都有意义:如果进行任何状态操作(如排序或求和),就不得不处理所有值.但是如果无状态操作后跟一个短路终止操作,流处理的优点还是很明显的.
注意点
请注意,和迭代器类似,流只能遍历一次
12345678910publ ...
JDK8特性-lambda表达式
参考文献
Java攻略:Java常见问题的简单解法
Java8 实战
lambda表达式
函数式接口:是一种包含单一抽象方法(single abstract method)的接口.类通过为接口中的所有方法提供实现来实现任何接口,这可以通过顶级类(top-level class),内部类甚至匿名内部类完成.
lambda表达式必须匹配接口中单一方法签名的参数类型和返回类型,这被称为与方法签名兼容.因此lambda表达式属于接口方法的实现,可以将其赋值给该接口类型的引用.
Java库中不存在名为lambda的类,lambda表达式只能被赋值给函数式接口引用.
lambda表达式在任何情况下都不能脱离上下文存在,上下文指定了将表达式给哪个函数式接口.
lambda表达式既可以是方法的参数,也可以是方法的返回类型,还可以被赋给引用.
无论哪种情况,赋值类型必须为函数式接口.
lambda表达式的本质就是匿名函数,在定义和调用时不需要被赋予类型名或绑定到标识符.
方法引用
使用**双冒号表示法(::)**将示例引用或类名与方法分开.
语法
object: ...
SpringBoot-缓存
参考文献
SpringBoot2 实战之旅
Spring Cache
Spring Cache是Spring3.1以后引入的新技术.
其核心思想是:当调用一个缓存方法时,会把该方法参数和返回值作为一个键值对存档在缓存中,等到下次利用同样的参数来调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行返回,从实现缓存的功能.
12345678910111213141516171819202122232425262728<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId></dependency><!-- redis --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>sp ...
Java基础-数据库配置
参考文献
JDBC连接数据库的流程
在开发环境中加载指定数据库的驱动程序
在Java程序中加载程序
1ClassName.forName("com.mysql.cj.jdbc.Driver");
创建数据连接对象
12// URL = 协议名 + IP地址 + 端口 + 数据库名称Connection connection = DriverManager.getConnection("连接数据库的URL","用户名","密码");
创建Statement对象
1Statement statement = connection.createStatement();
调用Statement对象的相关方法执行对应的SQL
1ResultSet resulte = statement.excuteUpdate("SQL");
关闭数据库连接
1connection.close();
各种数据库URL配置
1234567891011121314mysql:jdbc:my ...
Wireshark-遇到的问题
参考文献
Mac 安装wireshark
Mac安装WireShark提示"You can fix this by installing ChmodBPF."
解决办法:
1sudo chmod 777 /dev/bpf*
Java基础-网络
参考文献
Java语言程序设计-进阶版(第8版)
Java核心技术 卷2 高级特性
引言
Java支持基于流的通信(stream-based communication)和基于包通信(packet-based communication).
基于流的通信使用传输控制协议TCP进行数据传输,而基于包的通信使用用户数据协议UDP.
Java API提供用于创建套接字的类来便于程序的网络通信.套接字(scoket)是两台主机之间逻辑连接的端点,可以用来发送和接收数据.
网络程序设计通常涉及一个服务器和一个或多个客户端,客户端向服务器发送请求,而服务器响应请求.客户端尝试建立与服务器的连接开始,服务器可能接受或拒绝这个连接.一旦建立连接,客户端和服务器就可以通过套接字进行通信.
当客户端尝试连接服务器时,服务器必须正在运行.服务器等待来自客户端的连接请求.
12345678910// 服务端 // 创建服务器套接字 final ServerSocket serverSocket = new ServerSocket(8000); // ...
DICOM-相关信息
参考文献
DICOM的常用Tag分类和说明
DICOM PS3.4 2022a - Service Class Specifications
[Dcmlib] HOWTO Compute the Z spacing in DICOM
闲话DICOM
[医疗]国外开源的PACS服务器
DICOM Libray
Understanding the complexity of encoding and compression in DICOM communication
DICOM Conformance Statement dcm4che DICOM Archive 5
https://dicomiseasy.blogspot.com/2011/10/introduction-to-dicom-chapter-1.html
https://saravanansubramanian.com/dicomassociations/
https://www.youtube.com/watch?v=DJsnan19EmM
影像诊断学
超声成像(Ultrasonography)
50年代
γ闪 ...
工具-Gradle插件开发
参考文献
如何从零开发一个 gradle 插件(一)
如何从零开发一个 gradle 插件(二)
Developing Custom Gradle Plugins
Gradle 插件开发概述
深度探索 Gradle 自动化构建技术(四、自定义 Gradle 插件)
手把手教你写 Gradle 插件 | 数据采集
Gradle 基础知识
Gradle有两个重要的概念:Project和Task.
Project
IDE结构中的项目相当于一个父 Project,而一个项目中所有的 Module 都是该父 Project 的子 Project
每个 Project 都会对应一个 build.gradle 配置文件,因此使用IDE创建一个项目的时候在根目录下有一个 build.gradle 文件,在每个 Module 的目录下又各有一个 build.gradle 文件;
Gradle 是通过 settings.gradle 文件去进行多项目构建;
父 Project 对象可以获取到所有的子 Project 对象,这样就可以在父 Project 对应的 build.gradle 文件中 ...
Java基础-I/O流
参考文献
IO 多路复用
Java语言设计-基础篇(第8版)
Java核心技术 卷2 高级特性
Java IO Tutorials
I/O流
InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入流.
OutputStream/Writer: 所有的输出流的基类,前者是字节输出流,后者是字符输出流.
File类
File对象封装了文件或路径的属性,但是它既不包括创建文件,也不包括从(向)文件读(写)数据的方法.
文件输入和输出
PrintWriter
java.io.PrintWriter类可以用来创建一个文件并向文本文件写入数据.首先必须为一个文本文件创建一个PrintWriter对象.
123 final PrintWriter printWriter = new PrintWriter(new File(""));printWriter.println("");printWriter.close();
Scanner
java.util.Scanner类用来从控制台读取 ...
工具-JMH的使用
参考文献
别再写 main 方法测试了,太 Low!这才是专业 Java 测试方法!
https://hg.openjdk.java.net/code-tools/jmh
为什么要用JMH?何时应该用?
JMH简介
JMH,全称 Java Microbenchmark Harness (微基准测试框架),是专门用于Java代码微基准测试的一套测试工具API,是由 OpenJDK/Oracle 官方发布的工具。
基准测试注意点
测试前需要预热。
防止无用代码进入测试方法中。
并发测试。
测试结果呈现。
使用场景
定量分析某个热点函数的优化效果
想定量地知道某个函数需要执行多长时间,以及执行时间和输入变量的相关性
对比一个函数的多种实现方式
依赖
1234567891011<dependency> <groupId>org.openjdk.jmh</groupId> <artifactId>jmh-core</artifactId> <version>${jmh.versio ...