JAVA April 01, 2021

Java单元测试动态修改环境变量

Words count 8.3k Reading time 8 mins.

今天再写单元测试的时候,遇到一个比较有趣的事情,程序需要读取一个环境变量,而这个变量又是动态生成的,所以在执行单元测试之前要进行环境变量的配置。目前总结了两种方案可以实现动态修改环境变量,修改后的环境...

Read article

JAVA January 08, 2021

java 利用Future做超时任务处理

Words count 512 Reading time 1 mins.

Callable<String> task = new Callable<String>() {
    @Override
    public String call() throws Exception {
        return HttpRequestUtil.host().doGet(requestUrl);
    }
};
ExecutorService executorService = Executors.newSingleThreadExecutor...
Read article

JAVA August 24, 2020

GC和GC Tuning

Words count 3.8k Reading time 3 mins.

C语言中申请内存: malloc free

C++: new delete

Java: new ?

自动内存回收,编程上简单,系统不容易出错

手动释放内存,容易出现两种类型的问题

  1. 忘记回收
  2. 多次回收

没有任何引用执行的一个对象或者多个对象(循环引用)

引用计数

根可达

Mark-Sweep 标记清除

位置不连续,产生碎片

Copying 拷贝

没有碎片,浪费空间

Mark Compact 标记压缩

没有碎片,效率偏低

  1. 部分垃圾回收器使用的模型

  2. 新生代+老年代+永久代(1.7)/ 元...

Read article

JAVA October 09, 2018

基于Netty的http server实现

Words count 40k Reading time 36 mins.

版本说明:

netty:4.1.17.Final

项目地址:https://github.com/shirukai/netty-http-server-demo.git

最近在看Spark源码的RPC框架实现的代码的时候,接触到Netty。在Spark1.6之后,Spark中RPC通信的框架由Netty逐渐代替了Akka。

为什么Netty可以取代Akka?首先毋庸置疑的是Akka可以做到的,Netty也可以做到,但是Netty可以做到,Akka却无法做到,原因是啥?在软件栈中,Akka相比...

Read article

JAVA September 30, 2018

Java Socket 基础以及NIO Socket

Words count 21k Reading time 19 mins.

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。

关于Socket的介绍:https://blog.csdn.net/httpdrestart/article/details/80670388

下面记录一下,基于java实现Socket通讯,主要包括Socket服务端和Socket客户端两部分。

2.1 基于TCP的Socket服务端

服务端的实现主要有一下几步:

第一步:创建socket服务,并绑定监听端口

第二步:调用accept()方法开始监听,等待...

Read article

JAVA August 25, 2018

利用avro实现序列化反序列化

Words count 4.9k Reading time 4 mins.

摘一段来自https://www.jianshu.com/p/a5c0cbfbf608简书上介绍avro的内容:

Avro是一个数据序列化系统,设计用于支持大批量数据交换的应用。

它的主要特点有:支持二进制序列化方式,可以便捷,快速地处理大量数据;动态语言友好,Avro提供的机制使动态语言可以方便地处理Avro数据。

当前市场上有很多类似的序列化系统,如Google的Protocol Buffers, Facebook的Thrift。这些系统反响良好,完全可以满足普通应用的需求。针对重复开发的疑...

Read article

JAVA August 25, 2018

ProtostuffUtil序列化反序列化工具类

Words count 1.7k Reading time 2 mins.

package com.springboot.demo.utils;

import com.dyuproject.protostuff.LinkedBuffer;
import com.dyuproject.protostuff.ProtostuffIOUtil;
import com.dyuproject.protostuff.Schema;
import com.dyuproject.protostuff.runtime.RuntimeSchema;

import java.util.Map...
Read article

JAVA August 25, 2018

Properties读取配置文件工具类

Words count 925 Reading time 1 mins.

PropertiesUtil.java

package com.springboot.demo.utils;

import org.springframework.core.io.ClassPathResource;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * Created by shirukai on 2018/8/13
 * 读取配置文件
 */
public...
Read article

JAVA August 20, 2018

Java集合框架中的常用集合及其特点、使用场景、实现原理

Words count 13k Reading time 12 mins.

Java提供的众多集合类由两大接口衍生而来:Collection接口和Map接口

Collection接口定义了一个包含一批对象的集合。接口的主要方法包括:

  • size() - 集合内的对象数量
  • add(E)/addAll(Collection) - 向集合内添加单个/批量对象
  • remove(Object)/removeAll(Collection) - 从集合内删除单个/批量对象
  • contains(Object)/containsAll(Collection) - 判断集合中是否存在某个/某些...
Read article

JAVA August 20, 2018

java_IO编程

Words count 4.4k Reading time 4 mins.

什么是流?

流是一个抽象出来的概念,具体说是对[输入/输出]设备的抽象(内存、网络、磁盘),对系统读写API的封装,对外提供数据操作接口

基本概念

流:数据在文件和程序(内存)之间经历的路径
输入流:数据从文件到程序(内存)的路径
输出流:数据从程序(内存)到文件的路径

根据处理数据类型的不同可以分为:字节流(抽象基类为InputStream和OutputStream)和字符流(抽象基类为Reader和Writer)根据流向不同可以分为:输入流、输出流,其中主要结构可以用下图来表示:

字符流和字节流的主...

Read article
Load more
0%