![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 84
此心光明-超然
这个作者很懒,什么都没留下…
展开
-
Spring 5 - 使用RestTemplate,访问HTTPS服务
Spring的RestTemplate,支持SimpleClientHttpRequestFactory、OkHttp3ClientHttpRequestFactory和HttpComponentsClientHttpRequestFactory。其中,SimpleClientHttpRequestFactory不支持定制client。如果要访问HTTPS网站,会抛异常:java.secur...原创 2019-06-12 13:00:09 · 1502 阅读 · 0 评论 -
Java优化 - 领域对象
Java优化 - 领域对象Domain objects表达程序里的业务概念。比如电子商务系统里的Order、OrderItem和DeliverySchedule。这些类型之间有相关关系(Order可以包含多个OrderItem实例)。例如:public class Order { private final long id; private final List<Orde...原创 2019-01-17 10:37:58 · 598 阅读 · 0 评论 -
Java线程和并发 - Synchronization
Java线程和并发 - Synchronization问题Race ConditionsData RacesCached Variables同步使用Synchronized方法使用Synchronized块防止liveness问题volatile和final当线程不交互(比如共享变量)的时候,开发多线程程序是很容易的。当有交互的时候,会因为各种原因导致线程不安全。问题Java的线程支持有助于...原创 2019-01-10 14:06:37 · 645 阅读 · 0 评论 -
Java - G1性能调整
Java - G1性能调整The Stages of a Young CollectionStart of All Parallel ActivitiesExternal Root RegionsRemembered Sets and Processed BuffersEvacuation and ReclamationTerminationParallel Activity Outside of...原创 2018-12-18 14:21:19 · 2966 阅读 · 0 评论 -
Java - 并行数据处理和性能
Java - 并行数据处理和性能并行流配置并行流使用的线程池测量流的性能使用更专业的方法正确使用并行流fork/join框架RecursiveTask使用fork/join的最佳实践偷工作Spliterator分割过程Spliterator特征实现自己的Spliterator使用函数式实现并行的实现并行流并行流是一个把元素分成多个块的流,每个块用不同的线程处理。可以自动分区,让所有的处理器都忙...原创 2018-12-11 15:09:24 · 1755 阅读 · 0 评论 -
Java 数据结构和算法 - 文件压缩
Java 数据结构和算法 - 文件压缩prefix codes哈夫曼算法实现位输入和位输出流类字符计数类哈夫曼树类压缩类主程序改进假设你有一个文件,只包含下列字符:a、e、i、s、t、空格(sp)和换行符(nl)。而且,文件里有10个a,15个e,12个i,3个s,4个t,13个空格和1个换行符。下图所示,可以用157位代表该文件-一共58个字符,每个字符3位。实际的文件可能很大。很多大文件...原创 2018-12-07 09:01:47 · 448 阅读 · 0 评论 -
Java - Garbage First概貌
Java - Garbage First概貌术语Parallel GCSerial GCConcurrent Mark Sweep (CMS) GCGarbage First (G1) GCG1的设计Humongous ObjectsFull Garbage CollectionsConcurrent CycleHeap SizingSerial GC是HotSpot的第一个垃圾回收器。Para...原创 2018-12-14 09:51:02 · 178 阅读 · 0 评论 -
Java - 引用类型
Java - 引用类型什么是引用=的意思参数传递==的意思什么是引用除了8种原始类型,其他类型都是引用类型,包括字符串、数组和文件流。reference variable就是以某种方式存储对象所在的内存地址的变量。比如上图,有两个Point类型的对象,他们的内存地址是1000和1024。有三个引用point1、point2和point3,point1和point3指向地址1000的那个...原创 2018-12-03 16:00:58 · 722 阅读 · 0 评论 -
Java - 一个类实现的多个接口,有相同签名的default方法会怎么办
Java - 一个类实现的多个接口,有相同签名的default方法会怎么办public interface A { default void hello() { System.out.println("Hello from A"); }}public interface B extends A { default void hello() { ...原创 2018-12-12 15:06:39 · 6756 阅读 · 1 评论 -
Java 数据结构和算法 - 随机
Java 数据结构和算法 - 随机随机数生成器非均匀随机数生成随机排列很多时候,需要使用随机数做计算。比如现代加密和仿真系统,甚至搜索和排序算法也依赖随机数生成器。实现一个好的随机数生成器还是比较困难的。随机数生成器随机数怎么生成呢?真正的随机性是无法用计算机实现的,因为获取任何数所依赖的算法不可能是随机的。通常,可以生成伪随机数,或者数看上去是随机的,因为它满足了随机数的很多属性。假如我...原创 2018-12-03 14:53:19 · 301 阅读 · 0 评论 -
Java 数据结构和算法 - 排序
Java 数据结构和算法 - 排序插入排序和其他简单排序希尔排序归并排序快速排序选择pivot分区策略快速选择本文讨论数组元素的排序问题,数据量不大,可以在内存中完成。实现了Comparable接口的对象才可以排序。插入排序和其他简单排序Insertion sort是一个简单的排序算法,适用于数据量少的情况。 /** * Simple insertion sort ...原创 2018-12-05 16:20:39 · 224 阅读 · 0 评论 -
Spring 5 设计模式 - Dependency Injection
Spring 5 设计模式 - Dependency Injection依赖注入模式依赖注入模式的类型基于构造器的基于Setter方法的二者的比较使用Spring配置依赖注入模式Java-basedAnnotation-based什么是Stereotype注解使用组件扫描搜索beanautowiring消除歧义解决使用抽象工厂解决依赖注入模式Spring使用依赖注入,解决不同层的不同组件之间的...原创 2018-11-28 16:50:52 · 191 阅读 · 0 评论 -
Spring 5 设计模式 - Structural
Spring 5 设计模式 - StructuraladapterSpring使用的适配器模式简单的实现BridgeSpring中的应用简单的实现Composite简单的实现Decorator简单的实现Spring中的应用structural模式被用来定义对象(继承或者组合)之间的关系。Structural模式确保部分的改变不会导致整体也跟着改变。adapter适配器模式让两个不相容的类(因...原创 2018-11-28 11:03:45 · 612 阅读 · 0 评论 -
Java优化 - 避免 Finalization
Java优化 - 避免 Finalization忘记清理为什么不使用Finalization解决本问题try-with-resourcesJava的finalize()机制试图自动管理资源,像C++里的资源获取即初始化(RAII)。一个析构函数(Java里是finalize())在对象销毁的时候自动清除和释放资源。因此,基本用例很简单。当一个对象被增加的时候,它需要一些资源,在对象的生存期内占...原创 2019-01-18 16:13:56 · 620 阅读 · 0 评论 -
Java线程和并发 - Threads and Runnables
Java线程和并发 - Threads and RunnablesThread和Runnable增加Thread和Runnable对象Thread State执行线程的高级任务interruptionJoiningSleeping每个Java程序都有一个默认的main线程,它执行main()方法。程序也能增加线程在后台执行时间密集型任务。这样可以对用户作出响应。这些线程执行的代码封装在runna...原创 2019-01-08 15:22:19 · 200 阅读 · 0 评论 -
Spring5 - 集成Server-Sent Events功能
如果Controller返回SseEmitter,可以集成Server-Sent Events功能,向浏览器推送消息。 @GetMapping(path = "infoPush/{sms}", produces=TEXT_EVENT_STREAM_VALUE) public SseEmitter infoPush(@PathVariable("sms") String smsID)...原创 2019-05-31 15:16:01 · 1301 阅读 · 1 评论 -
Reactor 3 Reference Guide - 选译 (3)Testing
有专属的测试包:<dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-test</artifactId> <scope>test</scope></dependency>主要包括:S...翻译 2019-05-13 17:04:57 · 362 阅读 · 0 评论 -
Java读取OpenSSL生成的PEM公钥文件
JDK8的JCE是不支持读取PEM文件的。需要使用bouncycastle。项目需求,使用SHA1WithRSA算法,对接口数据做签名。代码如下:@Serviceclass SignService { private static Logger LOG = LoggerFactory.getLogger(SignService.class); @Autowired ...原创 2019-05-21 10:20:25 · 6827 阅读 · 0 评论 -
PCM编码的WAV文件,如何使用JAVA把两个单声道文件合并成一个双声道文件?
从大网可以拿到通话双方的录音文件,都是PCM编码的WAV文件。有客户的需求是只要一个通话录音文件,但是,要求文件包含双声道,每个声道对应通话一方。在原来WAV文件头解析的基础上,完成起来还是比较容易的。public class WavFileUtil { private static Logger LOG = LoggerFactory.getLogger(WavFileUtil.cl...原创 2019-05-15 14:56:03 · 2729 阅读 · 1 评论 -
使用LAME,把MP3格式的录音文件转换为PCM编码格式的WAV文件
如果不修改LameDecoder源码,是无法将MP3文件转换成PCM编码的文件的。幸好它还包含了Main类,简单修改一下,可以实现格式转换的要求。public class Mp3ToWav { private GetAudio gaud; private ID3Tag id3; private Lame lame; private GainAnalysis ...原创 2019-05-14 13:27:11 · 2310 阅读 · 0 评论 -
使用LAME,把PCM编码格式的录音文件转换为MP3格式的文件
最近,项目需要把PCM编码的录音文件转为MP3格式。通过学习,发现可以使用de.sciss.jump3r项目: <dependency> <groupId>de.sciss</groupId> <artifactId>jump3r</artifactId> ...原创 2019-04-25 16:10:50 · 1929 阅读 · 0 评论 -
sofa-jraft试用 - counter
阿里开源了sofa-jraft。学习counter例子,使用Spring Boot整理了一下代码。首先,不喜欢Hessian,换成kryo。这部分代码,客户端和服务器端代码相同。CKryoPool类,提供pool提高性能:@Serviceclass CKryoPool { private KryoFactory factory = () -> { Kryo k...原创 2019-03-20 15:30:26 · 2202 阅读 · 0 评论 -
Java并发编程实践 - 读书笔记(1)
线程安全编写线程安全的代码,本质上就是管理对状态的访问,而且通常都是共享的、可变的状态。共享:一个对象可以被多个线程访问可变:变量的值在它的生命周期内可以改变通俗地说,一个对象的状态就是它的数据,存储在状态变量(state variable)中,比如实例成员或静态成员。无论何时,只要有多于一个的线程访问给定的状态变量,而且其中某个线程会写入该变量,就必须使用同步来协调线程对对象的访问...原创 2019-03-14 16:42:35 · 100 阅读 · 0 评论 -
Java优化 - 方法句柄
Java优化 - 方法句柄Java 7引入的invokedynamic,为确定调用侧(call site)执行哪个方法带来很大的灵活性-关键点是,到运行时才能确定。当解释器执行到调用侧的时候,一个特定的辅助方法BSM(bootstrap method)被调用。BSM返回一个对象,它代表调用侧应该调用的实际方法。这叫调用目标,它被加进调用侧。关键概念是方法句柄(Method Handles)-...原创 2019-01-23 15:20:05 · 640 阅读 · 0 评论 -
Java优化 - 集合
Java - 优化集合列表ArrayListLinkedListArrayList 和 LinkedList 对比MapsHashMapLinkedHashMapTreeMap缺少MultiMapSets大多数编程语言库提供了最少两种通用容器:Sequential containers:数据保存在一定位置上,使用数字索引Associative containers:由对象自己决定,保存在集...原创 2019-01-16 16:41:11 · 467 阅读 · 0 评论 -
Java线程和并发 - Additional Thread Capabilities
Java线程和并发 - Additional Thread CapabilitiesThread GroupsThread-Local VariablesThread Groups如果看Thread类,可能会发现它的构造器、activeCount()方法等地方都引用了ThreadGroup类。JDK文档说,线程组代表线程的集合。而且,线程组可以包含其他线程组。线程组形成了一棵树。使用Thr...原创 2019-01-15 10:33:46 · 166 阅读 · 0 评论 -
Java线程和并发 - Waiting and Notification
Java线程和并发 - Waiting and NotificationWait-and-Notify API生产者和消费者Java提供了线程间通信的API-一个线程可以等一个条件继续执行,在未来,另一个线程会增加该条件,然后提醒等待中的线程。。Wait-and-Notify APIObject类提供了Wait-and-Notify API,由三个wait()方法、一个notify()方法还...原创 2019-01-14 11:07:41 · 177 阅读 · 0 评论 -
Spring 5 设计模式 - Creational
Spring 5 设计模式 - CreationalFactorySpring的工厂模式简单的例子Abstract factorySpring中的Abstract factory简单的例子SingletonSpring 中的应用Prototype简单的例子BuilderSpring中的Builder简单的例子我们都知道怎么创建一个新对象: Account account = new Ac...原创 2018-11-27 17:06:50 · 463 阅读 · 0 评论 -
Spring 5 设计模式 - 开始
Spring 5 设计模式 - 开始依赖注入AOPtemplateSpring容器bean的生命周期依赖注入对象之间的依赖增加复杂性,导致对象之间紧耦合。比如下面的TransferService组件依赖其他两个组件:TransferRepository和AccountRepository:如果直接使用实例:public class TransferService { priva...原创 2018-11-27 13:13:29 · 1042 阅读 · 0 评论 -
RxJava学习 - 6. Disposing
RxJava学习 - 6. DisposingHandling a Disposable within an ObserverUsing CompositeDisposableHandling Disposal with Observable.create()当你subscribe()一个Observable打算接收emissions的时候,增加了一个流处理这些emissions。当然,这样做使...原创 2018-11-14 14:19:39 · 318 阅读 · 0 评论 -
Effective Java Third Edition学习 - Lambdas and Streams
Effective Java Third Edition学习 - Lambdas and StreamsPrefer lambdas to anonymous classesPrefer method references to lambdasFavor the use of standard functional interfacesUse streams judiciouslyPrefer s...原创 2018-11-12 16:01:21 · 197 阅读 · 0 评论 -
RxJava学习 - 7. Basic Operators
RxJava学习 - 7. Basic OperatorsSuppressing operatorsfilter()take()skip()takeWhile() and skipWhile()distinct()distinctUntilChanged()elementAt()Transforming operatorsmap()cast()startWith()defaultIfEmpty()...原创 2018-11-15 13:47:17 · 216 阅读 · 0 评论 -
使用ForkJoin,计算PI
教儿子Python,感觉使用梦特卡罗方法计算PI的方法,他应该感兴趣,就写了一个。import timefrom random import randomcount = 0DARTS = 2**26print(DARTS)now = time.time()def distancdByXY(x, y): return (x ** 2 + y ** 2)# ** 0.5...原创 2018-11-11 17:27:09 · 271 阅读 · 0 评论 -
RxJava学习 - 5. Single, Completable, and Maybe
RxJava学习 - 5. Single, Completable, and MaybeSingleMaybeCompletableSingleSingle实际上只发射一次。它有自己的SingleObserver接口:interface SingleObserver<T> { void onSubscribe(Disposable d); void onSucce...原创 2018-11-13 16:43:46 · 611 阅读 · 0 评论 -
RxJava学习 - 4. Other Observable sources
RxJava学习 - 4. Other Observable sourcesObservable.range()Observable.interval()Observable.future()Observable.empty()Observable.never()Observable.error()Observable.defer()Observable.fromCallable()Observ...原创 2018-11-13 16:12:25 · 280 阅读 · 0 评论 -
RxJava学习 - 3. Cold versus hot Observables
RxJava学习 - 3. Cold versus hot ObservablesCold ObservablesHot ObservablesConnectableObservable在Observable和Observer的关系中,有一个微妙的行为,依赖于Observable是如何实现的。Observables的一个主要特征是cold和hot,当有多个Observers时,这决定了Obser...原创 2018-11-13 14:04:39 · 233 阅读 · 0 评论 -
RxJava学习 - 2. The Observer interface
RxJava学习 - 2. The Observer interfaceImplementing and subscribing to an ObserverShorthand Observers with lambdasonNext()、onComplete()和onError()方法在Observer里定义,Observer是一个abstract interface,用来传递这些事件。后面...原创 2018-11-13 10:38:27 · 148 阅读 · 0 评论 -
ZGC初体验
ZGC初体验JDK8下的G1JDK11下的ZGC(2G内存)JDK11的ZGC(8G内存)JDK11发布了,ZGC的相关描述很诱人,体验了一下。一共测试了三次,分别使用JDK8和JDK11。使用JMeter做压力测试,比较G1和ZGC的差别。JDK8下的G1JAVA_OPTS=" -Xms2g -Xmx2g -Xmn1400m -XX:+UseG1GC -XX:InitiatingHeap...原创 2018-11-05 14:53:57 · 3793 阅读 · 0 评论 -
WebFlux+HTTP2连接测试
WebFlux+HTTP2连接测试环境代码服务器启动增加sslHandler握手过程请求处理环境JDK的最低版本是8Ubuntu 18Spring Boot 2.1.0.RELEASE底层使用OpenSLL代码 <parent> <groupId>org.springframework.boot</groupId> ...原创 2018-11-02 17:04:45 · 2363 阅读 · 0 评论 -
Java Secure Socket Extension (JSSE) -类和接口篇
@[TOC](Java Secure Socket Extension (JSSE) -类和接口篇 )为了 通信安全,两侧的连接必须是SSL-enabled。JSSE API里,连接的endpoint类是SSLSocket和SSLEngine。SSLSocketFactory或者SSLServerSocket生成的SSLSocket,接收入站连接。SSLServerSocket由SSLSe...翻译 2018-10-30 17:23:34 · 1060 阅读 · 0 评论