Java
迎风奔跑
知耻后勇!
展开
-
线程池参数设计
public class ThreadPoolSelfDefinition2Test { private static final ExecutorService threadPool = new ThreadPoolExecutor( 20, 200, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(200.原创 2021-12-01 16:03:21 · 507 阅读 · 0 评论 -
演示线程池的执行过程
public class ThreadPoolSelfDefinitionTest { private static List<Object> objects = new Vector<>(); public static void main(String[] args) { ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("demo-pool.原创 2021-11-30 12:09:45 · 386 阅读 · 0 评论 -
XlsOrXlsxUtil
两种读写 Xls Or Xlsx 的方式:1.方式一:package com.ting.xls;import com.google.common.collect.Maps;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.userm原创 2021-10-06 11:00:43 · 210 阅读 · 0 评论 -
mvn deploy:deploy-file with status code 401
第三方jar <dependency> <groupId>com.abc</groupId> <artifactId>abc-openapi-sdk</artifactId> <version>2.0</version> </dependency>mvn de.原创 2021-07-15 14:31:48 · 3887 阅读 · 1 评论 -
模板模式使用匿名内部类扩展
模板模式的定义:它定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现,这样子类才可以不改变算法结构的前提下重新定义改算法的某些特定步骤。模板模式的核心:处理的步骤父类中早已定义好,具体的实现延迟到子类中去完成。模板方法的角色:1.抽象模板角色:它一般是一个抽象类或者接口,它抽象出操作算法骨架。2.具体抽象模板角色:...原创 2020-03-10 12:16:06 · 318 阅读 · 0 评论 -
Spring AOP 中 @Aspect 简单用法
package com.ximalaya.business.pay.fee.query.tool.p2.anotationtest;import org.springframework.stereotype.Component;/** * @author * @date 2019/10/22 下午7:07 */@Componentpublic class NoBug {...原创 2019-10-23 14:29:01 · 379 阅读 · 2 评论 -
自定义注解使用
1.定义注解package com.tool.p2;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * ...原创 2019-09-28 17:50:31 · 217 阅读 · 0 评论 -
用lambda表达式如何写多线程
话不多说,直接贴代码,简单的令人发指。两种方式:一种不带返回结果,一种带返回结果。public class lambdaThread { public static void main(String[] args) { List<Callable<Integer>> taskList = new ArrayList<>();...原创 2019-08-27 18:01:40 · 602 阅读 · 0 评论 -
linux下如何查询jdk的安装路径
linux下如何查询jdk的安装路径, 有的人说用whereis或者which, 这是多么扯淡啊。还有人说, 直接echo $JAVA_HOME就行, 这是典型的只copy不思考。 使用echo $JAVA_HOME的前提条件是设置了JAVA_HOME, 如果没设置, 就什么也查不到:ubuntu@VM-0-15-ubuntu:~/taoge$ echo $JAVA_HOMEubuntu@...转载 2019-07-22 15:00:25 · 251 阅读 · 0 评论 -
HBase最佳实践-CMS GC调优
HBase发展到当下,对其进行的各种优化从未停止,而GC优化更是其中的重中之重。从0.94版本提出MemStoreLAB策略、Memstore Chuck Pool策略对写缓存Memstore进行优化开始,到0.96版本提出BucketCache以及堆外内存方案对读缓存BlockCache进行优化,再到后续2.0版本宣称会引入更多堆外内存,可见HBase会将堆外内存的使用作为优化GC的一个战略方向...转载 2019-07-16 14:53:09 · 175 阅读 · 0 评论 -
Optional和Stream的map与flatMap
Optional的map和flatMapOptional存在map和flatMap方法。map源码如下 public<U> Optional<U> map(Function<? super T, ? extends U> mapper) { Objects.requireNonNull(mapper); if (!...转载 2019-07-15 19:08:34 · 1430 阅读 · 0 评论 -
CountDownLatch线程阻塞用法实例
在编写多线程的工作中,有个常见的问题:主线程(main)启动好几个子线程(task)来完成并发任务,主线程要等待所有的子线程完成之后才继续执行main的其它任务。默认主线程退出时其它子线程不会停,如果想让main退出时其它子线程终止,可以用subThread.setDaemon(true)设置子线程为“守护线程”。如果要在主线程等待所有子线程完成后,还要执行其它操作(比如:结果合并)....转载 2019-03-15 16:29:00 · 607 阅读 · 0 评论 -
枚举类要注意的问题
public enum PayMode{ POS(1, "POS支付"), ONLINE_PAY(2, "网银支付"), BALANCE_PAY(3, "资金余额支付"), OTHER(4, "其他支付"); private int code; private String value; private static Map<...原创 2019-03-10 09:56:55 · 885 阅读 · 0 评论 -
重写equals时为什么要重写hashCode
首先看Object对象中是如何定义equals 和 hashcode:public boolean equals(Object obj) { return (this == obj); }/*@return a hash code value for this object.*/public native int hashCode();可以看出,equa...原创 2019-03-06 23:06:09 · 1962 阅读 · 2 评论 -
java 图片与字符串的转换
import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import javax.imageio...转载 2017-05-11 20:52:20 · 6799 阅读 · 1 评论 -
什么是微服务
一、微服务介绍1. 什么是微服务在介绍微服务时,首先得先理解什么是微服务,顾名思义,微服务得从两个方面去理解,什么是"微"、什么是"服务", 微 狭义来讲就是体积小、著名的"2 pizza 团队"很好的诠释了这一解释(2 pizza 团队最早是亚马逊 CEO Bezos提出来的,意思是说单个服务的设计,所有参与人从设计、开发、测试、运维所有人加起来 只需要2个披萨就够了 )。 而所谓服务,...转载 2019-03-06 11:02:21 · 144 阅读 · 0 评论 -
熔断,限流,降级
1 写在前面1.1 名词解释consumer表示服务调用方provider标示服务提供方,dubbo里面一般就这么讲。下面的A调用B服务,一般是泛指调用B服务里面的一个接口。1.2 拓扑图大写字母表示不同的服务,后面的序号表示同一个服务部署在不同机器的实例。2 从微观角度思考2.1 超时(timeout)在接口调用过程中,consu...转载 2019-03-06 10:56:46 · 225 阅读 · 0 评论 -
maven profile切换正式环境和测试环境
有时候,我们在开发和部署的时候,有很多配置文件数据是不一样的,比如连接mysql,连接redis,一些properties文件等等每次部署或者开发都要改配置文件太麻烦了,这个时候,就需要用到maven的profile配置了1,在项目下pom.xml的project节点下创建了开发环境和线上环境的profile <profiles> <p...转载 2019-01-24 15:36:21 · 223 阅读 · 0 评论 -
int和Integer的区别
1、Integer是int的包装类,int则是java的一种基本数据类型 2、Integer变量必须实例化后才能使用,而int变量不需要 3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值 4、Integer的默认值是null,int的默认值是0延伸: 关于Integer和int的比较 1、由于Integer变...转载 2018-11-08 16:23:13 · 192 阅读 · 2 评论 -
分库分表策略
使用Zdal进行分库分表,分库分表策略:以支付业务为例,从前到后有 交易系统、支付前置系统、支付核心系统表结构(为了突出只标示部分字段):交易系统 :Id ,tradeNo;支付前置系统:id,payOrderNo,tradeNo;支付核心系统:id,kernalNo,payOrderNo,tradeNo;也就是每个系统都保留前一个系统的唯一索引编号No,同时都存储trad...原创 2018-08-08 15:39:49 · 322 阅读 · 0 评论 -
深度解析hashcode
1.hashcode的取值范围?2.hashcode和equals的区别?对于第一个问题,hashcode返回类型为int,则知取值范围为: Integer.MIN_VALUE ---- Integer.MAX_VALUEint最大值最小值,根据编译器类型不同而变化:public static void main(String[] args) { ...原创 2018-06-21 13:31:19 · 3818 阅读 · 0 评论 -
mac下安装 rabbitmq 及 rabbitmq知识点
rabbitmq基本原理:https://blog.csdn.net/yingfeng612/article/details/80150592安装过程:https://blog.csdn.net/u010046908/article/details/54773323https://blog.csdn.net/u010442302/article/details/73189152...转载 2018-07-16 19:24:47 · 4559 阅读 · 0 评论 -
简单工厂+反射+配置文件 进行解耦
解耦具体依赖的方法:配置文件+反射+简单工厂(完全可以替代工厂模式)表驱动法解耦依赖注入解耦(spring使用的就是这种方式)惯例优于配置 下面使用第一种方式进行解耦: 通常我们在使用简单工厂模式的时候会由创建方法create通过传入的参数来判断要实例化哪个对象,就像下面这样: public static class ImageSelectFact...转载 2018-07-02 20:03:40 · 650 阅读 · 0 评论 -
JAVA基础知识之Collections工具类
排序操作Collections提供以下方法对List进行排序操作void reverse(List list):反转void shuffle(List list),随机排序void sort(List list),按自然排序的升序排序void sort(List list, Comparator c);定制排序,由Comparator控制排序逻辑void swap(List list, int i...转载 2018-07-03 11:25:40 · 178 阅读 · 0 评论 -
MD5及公私钥数据加密工具类
加签验签代码如下:package com.allinpay.ets.pswd.util;import java.io.BufferedReader;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.FileInputStream;import java.io.I...原创 2018-03-13 14:24:14 · 1398 阅读 · 0 评论 -
JVM内存模型一些知识点
堆区: 1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令) 2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身 栈区: 1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中 2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。 3.栈分...原创 2018-02-24 09:48:26 · 174 阅读 · 3 评论 -
单例模式(Singleton)的同步锁synchronized
单例模式,有“懒汉式”和“饿汉式”两种。懒汉式单例类的实例在第一次被引用时候才被初始化。public class Singleton { private static Singleton instance=null; private Singleton() { } public static Singlet...转载 2018-03-16 17:36:11 · 1065 阅读 · 0 评论 -
如何将一个类改造为线程安全-例如TreeMap
对这个问题,好多人可能第一反应就是使用syschronized关键字,诚然应用这个关键字可以解决问题(仍是有条件线程安全的且低效的),但是在无意中看java源码时,看到了另一种更高效的方式—采用lock的方式。在ReentrantReadWriteLock的源码注释中,作者写了这样一段代码:class RWDictionary { private final Map<String, ...转载 2018-04-11 22:20:53 · 5803 阅读 · 0 评论 -
Mybatis调用Oracle中的存储过程和function
一、Mybatis调用存储过程1 在数据库中创建以下的存储过程create or replace procedure pro_hello(p_user_name in varchar2,p_result out varchar2) isbegin p_result := 'hello,' || p_user_name;end; 2 编写SQL映射文件map转载 2016-11-24 16:51:54 · 4403 阅读 · 4 评论 -
Spring整合Junit4进行单元测试
一.加入依赖包使用spring的测试框架需要加入以下依赖包:JUnit 4 (官方下载:http://www.junit.org/)Spring Test (Spring框架中的test包)Spring 相关其他依赖包(不再赘述了,就是context等包)如果使用maven,在基于spring的项目中添加如下依赖:[html] view plain copy<dependency> ...转载 2018-06-03 18:30:25 · 583 阅读 · 0 评论 -
RabbitMQ的几种典型使用场景
RabbitMQ主页:https://www.rabbitmq.com/AMQPAMQP协议是一个高级抽象层消息通信协议,RabbitMQ是AMQP协议的实现。它主要包括以下组件:1.Server(broker): 接受客户端连接,实现AMQP消息队列和路由功能的进程。2.Virtual Host:其实是一个虚拟概念,类似于权限控制组,一个Virtual Host里面可以有若干个Exchange和...转载 2018-04-30 17:38:24 · 262 阅读 · 0 评论 -
分布式锁的几种实现方式~
目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数的场景中,都需要牺牲强一致...转载 2018-03-27 20:41:24 · 120 阅读 · 0 评论 -
对象锁和类锁---模拟实现Hashtable
核心思想:java中的任何对象都是一把锁,有且只有一把钥匙。多个线程必须共享同一把锁才能互斥。普通方法的锁是当前对象this,静态方法的锁跟当前对象没有关系,它的锁是该类的类类型*.class。public class TestSychoronized { static Hashtable<String,String> a = new Hashtable<>(); ...原创 2018-04-25 22:20:40 · 785 阅读 · 0 评论 -
jvm 性能调优工具之 jps
概述jps 命令类似与 linux 的 ps 命令,但是它只列出系统中所有的 Java 应用程序。 通过 jps 命令可以方便地查看 Java 进程的启动类、传入参数和 Java 虚拟机参数等信息。如果在 linux 中想查看 java 的进程,一般我们都需要 ps -ef | grep java 来获取进程 ID。如果只想获取 Java 程序的进程,可以直接使用 jps 命令来直接查看。jps ...转载 2018-04-25 15:54:32 · 440 阅读 · 0 评论 -
“-Xmx1024m -Xms1024m -Xmn512m -Xss256k”——Java运行参数(转)
年轻代 年老代概念 http://jefferent.iteye.com/blog/1123677 JVM的堆的内存, 是通过下面面两个参数控制的 -Xms 最小堆的大小, 也就是当你的虚拟机启动后, 就会分配这么大的堆内存给你 -Xmx 是最大堆的大小 当最小堆占满后,会尝试进行GC,如果GC之后还不能得到足够的内存(GC未必会收集到所有当前可用内存),分配新的对象,那么就会扩展堆,如果-Xmx...转载 2018-04-25 14:02:30 · 1675 阅读 · 1 评论 -
ArrayList中的数组为什么被transient修饰
Java中的ArrayList底层实现机制是动态扩容数组,最近在看ArrayList源码时发现数组被定义为transient,源代码如下[java] view plain copyprivate transient Object[] elementData; 当时有些想不通,为什么最为重要的数组元素要定义为transient?难道不希望elementData被序列化?后来查阅了一些资料了解到,假...转载 2018-04-04 10:15:15 · 1724 阅读 · 0 评论 -
ExecutorService中submit和execute的区别
Java5 并发学习 在Java5之后,并发线程这块发生了根本的变化,最重要的莫过于新的启动、调度、管理线程的一大堆API了。在Java5以后,通过Executor来启动线程比用Thread的start()更好。在新特征中,可以很容易控制线程的启动、执行和关闭过程,还可以很容易使用线程池的特性。 一、创建任务 任务就是一个实现了Runnable接口的类。创建的时候实run方法即可。 二、执行任务 ...转载 2018-04-18 16:11:55 · 380 阅读 · 0 评论 -
使用无限大小线程池 newCachedThreadPool 可能遇到的问题
看一段测试代码: [java] view plain copypackage com.wenniuwuren.concurrent; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * Created by zhuyb on 16/6/16. */ p...转载 2018-04-18 16:15:10 · 1285 阅读 · 0 评论 -
Java 四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor
介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用。本文是基础篇,后面会分享下线程池一些高级功能。1、new Thread的弊端执行一个异步任务你还只是如下new Thread吗?new Thread(new Runnable() { @Overridepublic void run() {// TODO Auto-generated method stub...转载 2018-04-18 16:08:06 · 178 阅读 · 3 评论 -
简单测试序列化前后对象大小
public static void main(String[] args) throws IOException, ClassNotFoundException { //--ObjectInputStream/ObjectOutputStream--对象输入/输出流 int a = 3; //程序内部创建一个byte型别数组的缓冲区,然后利用Byt...原创 2018-04-11 14:01:00 · 3018 阅读 · 0 评论