
java基础
文章平均质量分 56
chengkui1990
Java开发
展开
-
替换字符串中的占位符之MessageFormat用法
1、假如我们有以下这个链接字符串“http://127.0.0.1:8080/add?name={0}&age={1}”,在程序中我们要替换{0},{1}为真实的name和age,那么可以用MessageFormat操作!例子如下:import java.text.MessageFormat;public class Test { public static voi...原创 2020-04-09 19:52:47 · 651 阅读 · 0 评论 -
Lock Condition 和 synchronized 实现生产者消费者问题
第一种: Lock Condition实现生产者和消费者问题:package eureka.server;import java.util.ArrayList;import java.util.List;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import...原创 2018-11-23 16:42:49 · 222 阅读 · 0 评论 -
正则表达式-命名捕获组
package com.newnoa.cmmom.utils;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * 正则表达式工具类 */public class RegularUtils { /** * 判断日期是不是yyyy-MM-dd hh:MM:ss格式 * @...原创 2018-11-22 15:29:26 · 2368 阅读 · 0 评论 -
JDK的动态代理和Cglib的动态代理比较
1、讲动态代理之前,我们先了解下什么叫代理,从字面意思我们也能看出来意思就是代替某人做事情,看下面的例子:package eureka.server.proxy;public interface UserService { void printName();}这是一个UserService接口类;package eureka.server.proxy;publi...原创 2018-12-18 17:12:58 · 381 阅读 · 0 评论 -
AtomicInteger的底层实现CAS
我们都知道在Java中i++操作是线程不安全的操作,虽然他看起来只有一行,像是只有一步操作,其实可以拆分开出来三步:第一步:从内存中读出值i;第二步:计算i的值;第三步:将计算得到的i的值替换内存中原有的i;但是以上的3个步骤不是一个原子操作,所以就会出现线程安全的问题,看下面的例子:package com.ck.prefix;import java.util.concu...原创 2018-12-25 20:55:51 · 1294 阅读 · 0 评论 -
UDP简单实例
package com.ck.prefix;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;/** * UDP传输的Server端 */public class UDPServer { ...原创 2019-01-07 20:35:08 · 416 阅读 · 0 评论 -
NIO案例详解
一、NIO解释:NIO官方的解释是NEW I/O,意思是相对与BIO(同步阻塞I/O)来说是全新的,但是大部分人更喜欢叫他no-block I/O(同步非阻塞I/O),因为他相对于BIO的最大改变就是非阻塞的,我们知道传统的Socket下的流都是阻塞I/O,也就是客户端的一个请求对应服务端的一个线程,并且这个线程是一直阻塞的直到请求结束,对于线程这种宝贵的资源来说,如果并发量太大同时处理线程又...原创 2019-01-18 14:17:38 · 798 阅读 · 0 评论 -
AIO案例详解
TimeServer :package com.ck.prefix.aio;public class TimeServer { public static void main(String[] args) { new Thread(new AsyncTimeServerHandler(8081)).start(); }} AsyncTimeSer...原创 2019-01-18 17:59:18 · 1101 阅读 · 0 评论 -
equals和hashCode的关系,equals相等,hashCode就必须要相等吗?
我们经常听见hashCode相等,那么equals可以不相等,但是equals相等,那么hashCode就一定相等这2个定理,没有看源码的同学就会认为jdk保证了equals相等,那么hashCode就一定相等,但是事实真的是这样吗?答案是否定的,equals相等,hashCode也是可以不相等的,看下面的那个例子:package controller.abstractfactory;i...原创 2019-03-11 19:36:37 · 6824 阅读 · 0 评论 -
java8新特性以及guava用法
1、提取list集合中bean的某一属性List<Integer> uniqueList = result.stream().map(ComplaintsPdMappingSource::getSourceId).distinct().collect(Collectors.toList());2、判断某一个值是否存在list集合中:/** * 转换字符串为b...原创 2019-04-08 21:04:45 · 791 阅读 · 0 评论 -
fastjson解决反序列化字符串和bean字段不一致时如何反序列化
一、首先我们来看一下正常的反序列化的用法,我们有一个Person类:1、Person类:@Dataclass Person{ String name; int age;}下面通过一个字符串反序列化成一个java对象;public class Test { public static void main(String[] args) { ...原创 2019-09-12 19:39:47 · 4612 阅读 · 0 评论 -
java设计模式之观察者模式
观察者模式的定义:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,他的所有依赖都会收到通知并自动更新;观察模式的设计原则:为了交互对象之间的松耦合而努力,观察者模式为什么能实现对象之间的松耦合,因为被观察者(或者叫主题Subject)Observable和观察者Observer之间是不直接进行交互的,改变被观察者和观察者任何一方的代码改变并不会影响另一方。现实的类比:观察者模式...原创 2018-10-15 20:47:22 · 143 阅读 · 0 评论 -
Java正则 Mathcer 获取第N次出现某个字符的位置
public static void main(String[] args){ String string = "213213/13123/14432432"; //这里是获取"/"符号的位置 Matcher slashMatcher = Pattern.compile("/1").matcher(string);...转载 2018-09-20 20:16:03 · 1706 阅读 · 0 评论 -
利用Runtime.getRuntime().addShutdownHook添加钩子程序,做好程序退出前的打扫工作
Runtime.getRuntime().addShutdownHook钩子程序的作用是什么?一般程序自然关闭时可能需要做一些打扫的工作,比如资源的释放啊、告诉外部系统程序要关闭了啊等等一系列的操作,这时候只要通过Runtime.getRuntime().addShutdownHook,就可以简单的添加一个钩子,然后实现这些功能;简单的例子:public class TestHook { ...原创 2018-07-06 13:56:31 · 651 阅读 · 0 评论 -
Effective_java边读边总结
13条:使类和成员的可访问性最小化:1、如果一个子类覆盖了父类的一个方法,子类中的方法访问级别必须高于父类中方法的访问级别,这样可以确保任何使用父类的实例的地方也都可以使用子类的实例:eg:父类:public class PerSon { protected void print(){ System.out.println(" this is a per...原创 2018-08-03 18:19:29 · 389 阅读 · 0 评论 -
java NIO示例以及流程详解
服务端:package nio;import org.springframework.util.StringUtils;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.SelectionKey;imp...原创 2018-08-10 10:18:44 · 6807 阅读 · 2 评论 -
java AIO示例以及流程详解
服务器端:package nio;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.channels.AsynchronousServerSocketChannel;import java.util.concurrent.CountDownLatch;public class...原创 2018-08-10 17:20:01 · 5669 阅读 · 1 评论 -
Java netty MessagePack编解码(粘包/拆包支持)
EchoServer:package messagepack;import io.netty.bootstrap.ServerBootstrap;import io.netty.buffer.ByteBuf;import io.netty.buffer.Unpooled;import io.netty.channel.ChannelFuture;import io.netty.c...原创 2018-08-14 16:20:27 · 1224 阅读 · 0 评论 -
Java NIO的netty实现
服务端:package netty;import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.ChannelOption;import io...原创 2018-08-13 15:37:09 · 422 阅读 · 0 评论 -
java Mail发送电子邮件的客户端
第一步:引入maven依赖:<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version></dependency>第二原创 2018-08-16 16:29:35 · 1003 阅读 · 0 评论 -
分布式环境下生成唯一id
分布式环境下通过last_insert_id生成唯一id:1、首先建一个表:CREATE TABLE `t_sequence` ( `id` int(11) NOT NULL AUTO_INCREMENT, `table_name` varchar(255) DEFAULT NULL, `counter` bigint(20) DEFAULT NULL, PRIMARY K...原创 2018-08-23 15:26:19 · 488 阅读 · 0 评论 -
java 通过企业微信推送消息
首先我们要知道企业微信推送消息的步骤,企业微信官方提供了多个API供我们调用,这里我们只讲我们需要的API;企业微信的官方开放的API地址:https://work.weixin.qq.com/api/doc推送企业微信消息分为这么几步:1、建立一个企业应用,我们只能给应用里面的成员发送消息;2、获取accss_token,这是通过企业微信的获取token的接口获取的请求方式:...原创 2018-08-24 10:20:43 · 16239 阅读 · 20 评论 -
java设计模式之代理模式
抽象类:package proxy;/** * 抽象接口 */public interface Subject { void proxyMethod1(); void proxyMethod2();}真实对象:package proxy;/** * 真实的对象 */public class RealObject implements ...原创 2018-09-18 18:57:34 · 124 阅读 · 0 评论 -
Serializable序列化中serialVersionUId的作用
Serializable是java所提供的一个序列化接口,它是一个空接口,为对象提供标准的序列化和反序列化操作,使用Serializable来实现序列化很简单,只要在类的声明中指定一个类似下面的标识即可自动实现默认的序列化过程。 private static final long serialVersionUID=2656653232L想让一个对象实现序列化,只要这个类实现Seria...转载 2018-09-26 10:18:47 · 1393 阅读 · 0 评论 -
slf4j+log4j输出日志
log4j是一个日志输出的具体实现,而slf4j是一个日志输出框架的api接口,是一个规范;示例:引入maven依赖:<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7...原创 2018-07-09 18:00:21 · 927 阅读 · 0 评论