
Java
javartisan
年轻人,静下心来做事吧!
展开
-
Java jar命令打可执行的jar包
基础文件结构├── MANIFEST.MF├── Main.class├── Main.java└── com └── javartisan ├── Main.class └── Main.java文件内容├── Main.classpublic class Main { public Main() { } public static void main(String[] var0)...原创 2021-12-24 13:28:32 · 1425 阅读 · 0 评论 -
针对Mac IDEA 安装插件启动失败解决办法
去:/Users/XXXX/Library/Application Support/JetBrains/IntelliJIdea2020.3/plugins 删除对应插件即可原创 2021-05-28 16:00:15 · 2945 阅读 · 2 评论 -
Java中通过Runnable与Thread创建线程的区别
1 、Java中的Thread与Runnable1:在Java并发模型中,Thread是跟操作系统底层的线程一对一对应的,Thread对应一个真实的操作系统线程。2:Runnable只是一个线程执行代码片段的接口标准之外,其余跟线程关系根本不是很大(可以理解:Runnable是一个线程的Task抽象)。Runnable可以理解为线程执行代码的一个单元(juc中Callable也是一个接口标...原创 2020-02-23 17:09:13 · 1586 阅读 · 5 评论 -
Java中集合删除元素时候关于ConcurrentModificationException的迷惑点
本文在本人的cnblog中也有发表,并不是盗文。下面的示例来至于阿里巴巴Java开发手册的集合处理部分的第7条:运行如下代码,会发现正确运行。 public static void hasNotExcption() { List list1 = new ArrayList(); list1.add("1");原创 2017-10-11 17:11:07 · 401 阅读 · 0 评论 -
阿里巴巴Java开发手册要点笔记 (一)
1:【强制】Object 的 equals 方法容易抛空指针异常,应使用常量或确定有值的对象来调用 equals。正例:"test".equals(object);反例:object.equals("test");说明:推荐使用 java.util.Objects#equals(JDK7 引入的工具类)。其就是实例对象equals的一个健壮版本实现:原创 2017-10-11 16:39:07 · 454 阅读 · 0 评论 -
Java 可变参数
可变参数的方法:package com.daxin;/** * * @author daxin * * @email leodaxin@163com * * @date 2017年4月18日 下午6:47:47 * */public class Main1 { static String[] argsStr; static Object[] arg原创 2017-04-18 19:30:46 · 6004 阅读 · 0 评论 -
Scala关于ClassTag 、Manifest、ClassManifest、TypeTag的使用
Scala中ClassTag 、Manifest、ClassManifest、TypeTag是描述运行时类型信息的,由于Scala是运行在JVM之上的,所以首选需要从JVM说起。JVM中的泛型并不会保存泛型的,我们一般在Java开始时候涉及到的泛型都是源码级别的,当我们反编译打开编译之后的class文件会发现并不存在泛型信息。Scala为了在运行时能够获取到泛型信息,就推出了如上关键字。原创 2017-08-10 10:45:26 · 5536 阅读 · 0 评论 -
Spark中的事件循环处理器EventLoop
Spark中的事件循环处理器EventLoop实现原理并不难,虽然自己实现一个大概也不会差太多,但是感觉自己的实现在拓展性方便肯定不如Spark的EventLoop好,所以写一篇博客记录一下。事件循环处理器,顾名思义就是为了处理事件。在Spark中有DAGSchedulerEventProcessLoop事件处理器和JobGenerator的内部匿名实现的事件处理器。该事件循环处理原创 2017-08-08 22:14:49 · 2389 阅读 · 2 评论 -
Java基础复习之StringBuffer和StringBuilder简要记录
无意看到一道面试题目如下:String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的?答: 1、String是字符串常量,StringBuffer和StringBuilder都是字符串变量。后两者的字符内容可变,而前者创建后内容不可变。2、String不可变是因为在JDK中String类被声明为一个final原创 2017-07-23 15:50:43 · 456 阅读 · 0 评论 -
Java并发包中的所有类目录
Java并发包中的所有类目录如下,希望逐个击破每一个并发工具!concurrent:AbstractExecutorServiceArrayBlockingQueueBlockingDequeBlockingQueueCallableCompletionServiceConcurrentHashMapConcurrentLinkedDequeConcur原创 2017-07-06 14:32:24 · 4100 阅读 · 0 评论 -
JDK7中的ConcurrentHashMap实现原理
Java中由于HashMap的线程不安全原因,JDK提供了线程安全的HashTable和SynchronizedMap支持线程安全操作。HashTable线程安全原因:所有存在线程安全的方法都使用synchronized关键字进行修饰,此时获取的是方法调用者this的锁。实现原理和HashMap一样,使用一个table数组作为哈希表。Synchronized原创 2017-07-06 13:38:38 · 852 阅读 · 0 评论 -
Java类加载的一道笔试题目
class A { static { System.out.print("a");//只有在类加载时候会执行一次 } public A() { System.out.print("x"); }}class B extends A { static { System.out.print("b"); } public B() { System.out.prin原创 2017-03-28 15:19:37 · 2840 阅读 · 0 评论 -
Scala的eq,ne,equals,==方法与Java异同
Any是Scala继承关系中的根类,继承关系图如下:Any根类的代码:abstract class Any { def equals(that: Any): Boolean def hashCode(): Int def toString(): String final def getClass(): Class[_] = sys.error("getCla原创 2017-04-24 16:39:27 · 2756 阅读 · 0 评论 -
Java多线程实现生产者消费者程序(Wait,Notify实现和Lock,Condition实现)
package com.daxin;import java.util.ArrayList;import java.util.Random;/** * * 生产者消费者程序 * * @author Daxin * */public class ProducerAndConsumer { private ArrayList values = new ArrayList原创 2017-03-15 14:10:00 · 982 阅读 · 0 评论 -
Java中的HashMap源码记录以及并发环境的几个问题
HashMap源码简单分析:1 一切需要从HashMap属性字段说起: /** The default initial capacity - MUST be a power of two. 初始容量 */ static final int DEFAULT_INITIAL_CAPACITY = 1 // aka 16 /** * The max原创 2017-10-25 16:20:15 · 548 阅读 · 0 评论 -
Java中的调用栈的获取以及在Spring Aop中的应用
最近Spring应用时候接触到了一个Pointcut类叫做org.springframework.aop.support.ControlFlowPointcut,一个根据调用逻辑指定JoinPoint的形式,例如有方法method(),当classA实例调用需要织入逻辑,classB实例不需要织入逻辑增强,此时就可以使用该PointCut。继承结构如下:了解ControlFlowPo...原创 2019-05-18 11:08:56 · 1607 阅读 · 0 评论 -
Java中多层异常包裹时候获取最底层的最真实异常-分析Java异常栈
示例代码:import java.util.concurrent.Callable;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;class AudienceLimitExcption exten...原创 2019-03-28 16:49:03 · 3534 阅读 · 0 评论 -
Java枚举类型在RPC调用时由于版本不一致遇见的问题
场景 一次业务联调测试时候发现,客户端以RPC方式调用服务提供方执行作业,作业类型存在多种,作业类型的区分使用的是Java枚举类表示,在每次调用服务接口时候传入枚举值以表示要执行的作业类型。 问题发现 进行联调测试时候发现每次客户端传入的类型与服务提供方真实执行的作业类型不匹配,便开始进行寻找原因!当时怀疑是服务提供方的业务代码判断逻辑存在问题,经过查看服务提供方代码...原创 2019-04-01 20:36:28 · 2336 阅读 · 0 评论 -
谁说Java中的字符串是不可变的值?只要想变还是可以变的!
经常面试会问到说说为什么String类型是不可以变的?可能很多人第一反应就是因为是final呀!其实个人感觉这个问题很宽泛,导致很多人可能第一反应不知道具体想回答哪一点?1: 为什么String是不可以变的?个人理解并不是不可以变,而是JDK的String类型没有提供可以修改String值的方法而已,相反StringBuilder与StringBuffer就提供了相应...原创 2019-02-18 15:11:43 · 589 阅读 · 0 评论 -
JDK线程池学习笔记-1
之前使用用过线程池,但是就是看看文档接口复制粘贴过来用用而已,没有认真学习过,最近比较好奇线程池想学习一下,所以在此做个笔记。JDK并发包中的线程池有: ExecutorService single = Executors.newSingleThreadExecutor(); ExecutorService fixed = Executors.newFixedThreadPoo...原创 2017-03-05 15:22:59 · 1057 阅读 · 0 评论 -
Aspectj中call与execution区别,织入代码位置不同
call 调用通知的环境是方法调用位置;而execution是方法执行位置,也就是方法签名处。 具体结合一个示例可以更简单跟容易理解:1、pointcut配置: pointcut callPointCut():execution(public void com.javartisan.aspectj1.HelloWorld.say(String));此时是...原创 2018-08-22 15:29:05 · 3308 阅读 · 0 评论 -
AspectJ开发之对现有Jar织入切面
1:安装AspectJ,安装命令:java -jar /Users/liuguangxin/Desktop/aspectj-1.9.1.jar安装即可,之后打开安装目录,将aspectj下面的lib配置到classpath中。2:编写一个HelloWorld程序然后打包为jar,代码如下:package com.javartisan.aspectj;/** * C...原创 2018-08-22 13:29:30 · 3491 阅读 · 2 评论 -
log4j -Dlog4j.configuration指定日志配置文件无法加载问题
可以使用-Dlog4j.debug 参数打印log4j的debug信息,debug信息如下:log4j: Trying to find [/home/bi_polaris/one_eval/log4j.properties] using context classloader sun.misc.Launcher$AppClassLoader@4e25154f.log4j: Trying to f...原创 2018-07-04 17:46:42 · 14422 阅读 · 0 评论 -
Log4j不同任务的日志输出到不同的日志文件中
最近手中任务开发一个数据提取系统,目的是为了将原本手动提取数据的工作进行自动化,提高效率。用户每次可以提交一个job的配置信息到系统中进行数据计算,提取想到的数据。系统支持并行执行多个job,但是由于并行化执行导致原来的日志文件记录变的混乱,当数据提取存在问题时候 不便于诊断,因此如果可以更好的将每一个job的日志存储到单独的日志文件中则排错会高效很多。如下将介绍如何实现,log4j的配置信息如下...原创 2018-06-28 17:32:02 · 1627 阅读 · 0 评论 -
Junit关于并发执行测试的源码简单分析和使用
并发执行测试用例目的很简单:就是为了高效使用资源降低测试时间,俗话说天下武功,唯快不破,对,就是求追速度。Junit中有关并行执行测试的关键组件为ParallelComputer,ParallelComputer的基类为Computer。Computer在Junit项目中是一个执行runners或者suites的角色(Runner是一个执行测试用例的执行器;Suite继承至Runner,Suite...原创 2018-06-09 16:12:41 · 2033 阅读 · 0 评论 -
关于自动装箱与拆箱在反射调用中引起的注意
1:首先先说一下什么是自动装箱与拆箱?太基本的概念就不说了,直接百度就可以,直接丢上来一个例子就可以知道了。int one = 1;// compile error 编译错误就可以确定变量one不是Integer类型,因此Integer类型由getClass方法//System.out.println(one.getClass());Object oneObject = one;//输出:...原创 2018-05-24 19:15:12 · 1024 阅读 · 0 评论 -
JAVA那些“坑”-你以为x+=i就等同于x=x+i?
例1:short x = 1; // 1int i = 1; // 2x += i; // 3x = x + i; // 4此时源码第4行编译器会报错:Type mismatch: cannot convert from int to short那么第3行与第4行有什么区别? 这个只能通过JVM指令分析了,我们可以编译一下前三行代码,即:short x = 1; // 1int ...原创 2018-04-10 20:30:13 · 2083 阅读 · 0 评论 -
Java-使用Callable实现多线程的之JDK源码简单学习实践
当提起Java实现多线程时候,我们一般来说是继承Thread类或者实现Runnable接口两种。如果不是很严格的说,还有一种就是使用JDK的java.util.concurrent.Callable实现多线程,这需要结合Thread或者线程池实现。然而昨天参加某某公司电面时候被问到,由于之前简单使用过,没有自信学习过导致面试回答语无伦次。下面就先简单分析一下实现原理和一个自己非常简陋的实习。原创 2017-03-04 11:16:09 · 647 阅读 · 0 评论 -
Java中的Copy-On-Write容器
尊重作者,注明出处:https://my.oschina.net/xianggao/blog/390390Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用Copy转载 2017-04-06 16:28:47 · 669 阅读 · 0 评论 -
Doug Lea并发编程文章全部译文
尊重原作,转至:http://ifeve.com/doug-lea/Doug Lea’s Home Page如果IT的历史,是以人为主体串接起来的话,那么肯定少不了Doug Lea。这个鼻梁挂着眼镜,留着德王威廉二世的胡子,脸上永远挂着谦逊腼腆笑容,服务于纽约州立大学Oswego分校计算机科学系的老大爷。说他是这个世界上对Java影响力最大的个人,一点也不为过。转载 2017-03-10 09:34:35 · 2462 阅读 · 0 评论 -
Java多线程学习零散笔记
笔记笔记比较零散,后期整理成篇幅多线程中的同步其实是有两成含义的:1:互斥访问(原子性)2:变量的修改对其他线程可见(可见性)synchronized同步关键字就保证了上述两层含义,而volatile只保证了第二条:变量的修改对其他线程可见可见性:可见性是一种复杂的属性。在单个线程的程序中,如果想某个变量写入数值之后,在没有其他写操作的之前一直都原创 2017-03-10 11:29:55 · 386 阅读 · 0 评论 -
Java动态代理模式
即Proxy Pattern,23种java常用设计模式之一。代理模式的定义:对其他对象提供一种代理以控制对这个对象的访问。简介代理模式的主要作用是为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。代理模式的思想是为了提供额外的处理或者不同的操作而在实际对象原创 2017-03-06 13:11:39 · 551 阅读 · 0 评论 -
Java多线程之死锁实现
所谓死锁: 是指两个或两个以上的进程在执行过程中,由于竞争资源造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程所以产生死锁的必要条件是一定有共享资源,一定存在多个(大于2)线程进行竞争。所以可以根据这两点进行实现死锁:使用Key模拟共享资源:public class Key { //原创 2017-03-04 15:02:23 · 696 阅读 · 0 评论 -
Minor GC、Major GC和Full GC之间的区别(收集于网络)
Minor GC从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC。这一定义既清晰又易于理解。但是,当发生Minor GC事件的时候,有一些有趣的地方需要注意到:当 JVM 无法为一个新的对象分配空间时会触发 Minor GC,比如当 Eden 区满了。所以分配率越高,越频繁执行 Minor GC。内存池被填满的时候,其中的内容全部会被复制,转载 2017-02-28 15:51:30 · 684 阅读 · 0 评论 -
fastutil介绍以及使用fastutil优化Spark作业
fastutil介绍:fastutil是扩展了Java标准集合框架(Map、List、Set;HashMap、ArrayList、HashSet)的类库,提供了特殊类型的map、set、list和queue;fastutil能够提供更小的内存占用,更快的存取速度;我们使用fastutil提供的集合类,来替代自己平时使用的JDK的原生的Map、List、Set,好处在于,转载 2017-02-28 10:37:21 · 4572 阅读 · 1 评论 -
浅谈java权限修饰符
1:public由表格可以看出 public 权限是宽泛的,public 权限所有的客户端程序员都可以见,一般设计对外公开的接口都使用 public 权限。 2: protected由表格看出protected权限修饰符有类,子类,包权限。下面逐一介绍这三个权限修饰符。类权限: 对于类权限此处不赘述了。(这个是最小必有的的权限,如果连类权限没有原创 2016-08-28 09:40:43 · 554 阅读 · 0 评论 -
浅谈java标签
由于goto的用法争议较多,因此java中没有引入goto,而是将goto作为保留关键字。在java中可以使用标签来实现类似的功能:标签定义:关键名字 加上 冒号 即可 ,例如 label1 : 就是定义了label1 标签。标签主要使用在多层嵌套循环的直接退出至某一层循环的指定位置。原创 2016-08-28 10:38:42 · 616 阅读 · 0 评论 -
浅谈java继承中对于main方法的继承之奇葩问题
Person类源码:Person的子类SubPerson:Question 1:虽然父类Person实现了main方法,然后子类继承之后不实现自己的main方法是不可以直接run as的。Question 2:虽然父类Person实现了main方法,但是子类SubPerson不可以重写main方法的。编译器报错原创 2016-08-28 19:40:49 · 2295 阅读 · 0 评论 -
浅谈java集成中的final方法重写和重载问题
Question 1:子类是否可以重写父类的final方法,答案是:不可以!父类Person:子类SubPerson:Question 2:子类是否可以重载父类的final方法,答案是可以的!父类Add 子类 SubAdd:Question 3:重载方法中 int ,char 如何自动适配重载函数的!原创 2016-08-28 20:06:54 · 4506 阅读 · 0 评论 -
追本溯源——JAVA中为什么float型最大值大于long型?
最为一个常识,我们都知道浮点型在内存中占用的是4个字节的空间,而long型占用的是8个字节的空间。可是为什么4个字节的float型的最大值会大于long型的最大值呢? 我们都知道,float类型的范围是:一3.403E38~3.403E38。而long类型的范围是:-2^63~2^63-1(大概是9*10^18)。 我以前也是简单的记住就算完事了,对于它为什转载 2016-08-28 20:45:30 · 905 阅读 · 0 评论