java
relife1
人之所恶在好为人师,不实知,谨慎言
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
关于Maven打包的一个坑点------本地改变代码但是jar包代码没有改变
今天在用maven进行打包时,发现当我将代码上传服务器运行时,发现输出文件的文件地址已经存在,所以报了错,这是个无关痛痒的bug,我修改了输出地址后又重新打包上传,但是发现报的还是那个错误,在上传的代码中并没有修改我在本地改过的,这就令我十分奇怪,前前后后上传了很多次,发现还是不行,就开始想为什么会这样,最后终于想到了,原来因为我在修改地址后并没有运行程序,程序并没有发生编译,在我看来是m...原创 2018-05-28 21:21:02 · 4593 阅读 · 0 评论 -
Java线程池的复用理解
前情今天是我第三次看线程池的源码,才敢写下这一点点理解,虽然我的博客一般都是自己学习的笔记和心得,但是毕竟是在互联网上,有需求的同行看到了,还是不能害人.虽说是第三次看,但是对其中一些很细节的条件分支还不是很理解,只是从宏观上稍微理解了作者的一些思路.下面说一下:池化核心在我的理解中,池化技术,无论是连接池还是线程池,核心就是复用二字.池化技术往简单了说,就是重复利用一些比较"昂贵"的资源....原创 2019-01-01 19:05:00 · 1802 阅读 · 1 评论 -
Spring单例和多例
疑惑这是面试中老生常谈的问题,具体的话,类似- spring中默认是单例还是多例?- 什么时候使用单例?什么时候使用多例?- springMVC的的controller是单例还是多例?(为什么是单例?)- …spring默认当然是单例,我想说的是第二条,什么时候使用单例?什么时候使用多例?解惑既然默认是单例,那就先说什么时候使用单例?其实可以就第三个问题作为例子说?为什么Spri...原创 2019-01-15 15:24:54 · 4057 阅读 · 2 评论 -
ThreadLocal
面试准备,无法保证理解正确性,慎,欢迎纠正ThreadLocal为什么需要threadlocal在多线程程序中,线程安全是最重要的一点,其实也就是保证共享变量被合理的共享或保证非共享变量不被共享,threadlocal是解决后者的.最常用的是web服务器中,当多个用户并发访问,某个用户信息肯定不能被其他用户线程获取,这就需要使用threadlocal保存每个用户线程的信息,互不干扰...原创 2019-01-29 16:00:34 · 223 阅读 · 0 评论 -
ReentrantLock等锁原理
面试准备,无法保证理解的正确性,慎,欢迎纠正注意这些锁是并发包下的锁,实现原理全是基于AQS,还使用了CAS操作,先了解一下AQS和CASReentrantLock可重入锁,是一种独占锁,即同时只有一个线程可以获取锁,其他尝试获取锁的线程会被放在锁的AQS阻塞队列中,重入的意思是指同一个线程可以多次获取锁.公平锁和非公平锁. ReentrantLock内部有两个内部类Nonfair...原创 2019-01-29 18:42:30 · 418 阅读 · 0 评论 -
Java并发队列原理
面试准备,无法保证理解正确性,慎,欢迎纠正前言并发队列与普通队列的区别的确就在于并发二字,而并发的的基础就是线程安全,如何实现线程安全是我们最重要的需要理解的部分.线程安全的保证无非就是可见性和原子性(有序性一般不说).接下来的各种队列主要就这两点的实现来说.非阻塞队列非阻塞队列即不使用锁的队列,主要使用CAS操作保证原子性ConcurrentLinkedQueueConcurre...原创 2019-01-30 14:03:34 · 259 阅读 · 0 评论 -
红黑树 笔记
红黑树是一个二叉树,树根为黑,外部节点为黑,其余节点,若为红,其孩子只能为黑从外部节点到根,途中黑节点的数目相等(除外部节点)红黑树是一个4阶B树,也就是(2,4)树,将所有黑色节点的红孩子提升到与其同高,那就形成了一个含1/2/3个节点的超级节点,也就是说(2,4)树的样子接口定义: 查找,插入,搜索,双黑修正,双红修正,更新节点高度(黑高度)插入:...原创 2019-02-25 21:27:47 · 182 阅读 · 0 评论 -
ThreadPoolExecutor线程池如何实现计时回收空闲线程
疑惑说到线程池,其实已经看过很多遍源码,不过大多是复用和阻塞队列获取时的部分,今天突然想到,线程池有个最大空闲时间,即空闲线程最大存活时间,我想知道怎么实现计时的,难道是每一个worker类中一个计时器吗?解惑找了很多博客,都没有找到,只能自己在源码里找了,意外地好找,因为用到keepAliveTime这个变量,整个ThreadPoolExecutor.java中只有一个方法,只看这个方法就...原创 2019-03-05 16:10:51 · 8242 阅读 · 0 评论 -
使用HttpClient连接池出现---java.lang.IllegalStateException: Connection pool shut down
问题我之所以遇到了这个问题,是因为修改了第三方包代码,新增了连接池,但是没有注意到其内部对连接的关闭;这个问题很简单,顾名思义,就是连接关闭引起的问题,为什么连接关闭会引起问题呢,我们选择使用连接池,就是将连接全部交由连接池管理,而我们在程序中使用了httpClient.close();就破坏了这以规则,解决很简单,删除关闭连接的代码...原创 2019-02-26 21:16:56 · 16975 阅读 · 0 评论 -
Java -- protected关键字
疑惑准备面试时,突然想到这个关键字,对于我来说,这个修饰符是最少用的,剩下三个也算是经常用了,但对于protected是真的不熟悉,今天看了详解,还是很懵,多看了几遍,解惑先看一般的介绍被 protected 修饰的成员对于本包和其子类可见,其实要分多种情况先我觉得需要解释一下什么叫可见,并没有严格的定义,但是从我对一些示例的总结,可以看出点端倪,在我的理解中,可见是指调用处,什么意思呢...原创 2019-03-09 20:36:50 · 941 阅读 · 0 评论 -
Java堆外内存
前最近才接触到堆外内存的概念,为什么要使用堆外内存,最大的原因应该就是少一次内存拷贝,因为如果想在内核空间进行数据处理,就必须将数据从Java堆中拷贝到内核控件中,但是Java提供了一种更加直接的方法,就是直接在堆外(内核)申请内存,存储数据,减少数据拷贝,这也就是所谓的零拷贝(zero-copy)APINIO包下的ByteBuffer下的allocateDirect是帮助我们申请直接内存的...原创 2019-03-14 17:29:17 · 431 阅读 · 0 评论 -
Linux网络IO模型和多路复用技术
本文内容有借鉴《Netty权威指南》的部分内容Linux网络IO模型首先说一下一个文件描述符(file descriptor)fd的概念,在Linux中,一切都可以视作文件,对一个文件的读写操作就会调用内核提供的系统命令,返回一个fd,使用socket也会有fd,描述符就是一个数字,指向核内的一个结构体(文件路径,数据区等一些属性)阻塞IO模型最常用的IO模型,也是默认情况下的,详细说...原创 2019-03-27 09:58:09 · 263 阅读 · 0 评论 -
深究synchronized
前情如何使用这个关键字和类锁对象锁什么的,老生常谈了,就不在这里说了,先声明,这篇博客的内容只能算是我从很多博客中总结出的自己的观点,无法保证全部是自己的话,也无法保证绝对正确性,望以谨慎正文存在synchronized在一个程序中以字节码中的指令的形式存在,使用javap工具可以看到synchronized关键字在字节码文件中的存在形式,如果是同步代码块,是monitorenter和m...原创 2019-04-07 20:05:29 · 187 阅读 · 0 评论 -
Java 关于类加载的一些想法
声明本人是个菜鸟,不会写整个加载机制的介绍,其实大部分相关的中文博客都是互相转载,我这里只是说一下自己的学习过程中的疑惑,和如何解决的方法,是为了有相同疑惑的人可以少走点路.疑惑从类加载器开始说起,双亲委派机制大家都知道,但我一般很想知道为什么,为什么使用这个机制,各种博客大同小异,都是说为了避免重复加载,很多说到这里就没了,这完全是误人子弟,怎么避免重复加载了,这明显就像小学生写作文,光...原创 2018-12-24 20:49:15 · 234 阅读 · 0 评论 -
Java上(下)转型对象
上转型对象上转型对象就是声明一个父类的引用指向子类的实例化对象,例如A a = new B();或者B b = new B() ; A a = b ;其中 A 是 B 的父类, 对象 a 就是上转型对象那么为什么需要上转型对象,其实就是满足一种需求,关于这个需求的内容,就是上转型对象的作用,以下:属性 : 上转型对象只能访问父类中的属性,不能访问子类新增的属性,至于子类隐藏的属性,...原创 2018-12-03 18:15:20 · 2376 阅读 · 4 评论 -
Java8 函数式编程
之前因为spark学习了scala,作为同样运行在jvm上的语言,在学习scala的期间,我深深的被震撼到了,因为之前没有学习过函数式编程(其实第一个学习的就是python,但是根本没有用到过它的函数式编程).但是当我看到java8的新特性时,我发现java也可以进行函数式编程.函数式编程的目的意义没有副作用等等这里先不说,就先说说如何将函数作为参数和返回值利用java进行函数式编程主要就...原创 2018-06-20 23:17:38 · 277 阅读 · 0 评论 -
Java 细节记录
1:System.nanoTime():遇到这个函数是在spark的官方实例scala代码中的,虽然能猜到是关于时间的方法,但是并不知道详情,查了后才知道这个函数和System.currentTimeMillis()方法是差不多的,都是返回现在时间,用途也是差不多,都是计算某个时间段的时间,不同的是,nanoTime更加精确一些,它的精度达到纳秒,而currentTimeMillis的精度只是毫秒...原创 2018-05-30 17:19:42 · 305 阅读 · 0 评论 -
Java和Python的参数传递
我之前总结过很多次java的参数传递问题,但是总觉得不够完美,今天再来总结一次,带上pythonjava的参数传递只有值传递,这是首先要声明的.如果传递的参数是基本数据类型,那就是把本身的复制传了过去,不管在方法内部怎样修改这个值,都不会影响到方法外的变量。如果传递的是一个对象,这是十分常见的,就是把这个对象的地址复制一份传递过去,这个时候所谓的值就是地址,这个时候就需要分类讨论了,对对象的常见的...原创 2018-07-11 11:23:08 · 2256 阅读 · 0 评论 -
Java lambda表达式
今天正儿八经地学习一下java8,这里记录一下.(我看的书是《java8实战》,这里举的例子大抵上都是书上的)lambda在很多语言中都有,但是java中一直没有,直到java8中才出现,在我的理解中,lambda就是用来代替匿名类的,而且我认为lambda是一个函数,虽然在java中,它是一个函数式接口的某种意义上的实现,lambda形式首先lambda的形式是这样的 (parame...原创 2018-07-22 17:31:31 · 2324 阅读 · 0 评论 -
scala使用fastjson之JSONObject cannot be cast to JSONArray
这件事一定要好好写一篇博客说一下,它整整折磨了我一天最近在用spark写一个数据分析的项目,源文件是json,所以就使用了fastjson这个包,然后就到了噩梦时刻其实本地都弄好了,运行也没什么问题,但是把jar包上传到master上运行,就会报题目中出的错,一开始,我以为是因为我使用了scala和java结合(其实我内心不觉得会是这个原因,但是没办法),我调用fastjson的代码是用j...原创 2018-08-02 18:11:03 · 6505 阅读 · 0 评论 -
Github Java/Python小工具---终端运行的新华字典,查询字,成语,歇后语
12-1更新接口好像崩了,只能自己写一个接口了新增Python版本今天使用Python做了一下,发现比Java做起来简单很多,已经上传到github上了,使用起来也更加简单了,因为Python本来就是脚本语言,所以就不用再写一个脚本了,直接chmod a+x 新华字典.py ,然后./新华字典 就可以了 今天做了一个小工具,如果经常使用终端,可能会用到很多在终端运行的小工具,比...原创 2018-08-22 21:27:32 · 1107 阅读 · 0 评论 -
java并发编程笔记
这里只是用于记录我学习java并发编程过程中的一些心得和重要的知识点.1:volatile通常被当做表示完成,中断,状态的标记,但是不足以使自增操作原子化(实测,不行),加锁可以保证原子性和可见性,但是volatile只能保证可见性.2:在没有同步的操作中,线程进行读取变量,很有可能读取的是一个过期的量,但是这个量是过程中某个线程实际得出的值,而不是一个凭空而来的值,这样的保证称为"最低限...原创 2018-09-18 21:58:29 · 205 阅读 · 0 评论 -
Java 同步/异步IO,阻塞/非阻塞IO
对于IO,有同步,异步,阻塞,非阻塞的分类,最近才稍微对这些分类有一些理解,下面记录一下:首先,我们需要划分IO,我们对IO操作分为两个步骤,1:程序发出IO请求,2:完成实际IO操作,阻塞、非阻塞是针对第一步划分的,而同步、异步是针对第二部划分的。阻塞/非阻塞:首先,我觉得应该理解一下什么叫阻塞。一个IO请求,在线程中进行,当这个IO请求没有数据或者没有有效数据拉来完成IO操作,那么这个...原创 2018-09-15 14:31:54 · 1357 阅读 · 0 评论 -
SpringBoot使用异步线程池使程序无法关闭
又是一个困扰我在整整一天的难题,到了快23点,终于结束了,虽然很想睡觉,但还是得把它记录下来. 今天在一个springBoot程序中想使用多线程(我的程序不是web),网上的教程有很多,大多都是使用ThreadPoolTaskExecutor配合spring的异步注释@EnableAsync和@As...原创 2018-10-01 23:03:00 · 7866 阅读 · 1 评论 -
Java 类的主动使用和被动使用
JVM规定,每个类或者接口被首次主动使用时才对齐进行初始化,有主动使用,自然就有被动使用,那么这两个使用到底是什么呢,这里简述一下.主动使用:1:通过new关键字被导致类的初始化,这是大家经常使用的初始化一个类的方式,他肯定会导致类的加载并且初始化2:访问类的静态变量,包括读取和更新3:访问类的静态方法4:对某个类进行反射操作,会导致类的初始化5:初始化子类会导致父类的...原创 2018-10-02 19:09:43 · 719 阅读 · 0 评论 -
关于多线程的一些感想
以前的疑惑 接触多线程也有段时间,实话说,自己其实根本没理解,Java的并发编程书籍也看了几本了,什么多线程设计模式,并发工具,线程池源码也都有所了解,一直还自我感觉还不错,但我在想一个问题,多线程是如何提升性能的?cpu同一时刻不是只能运行一个线程吗?如果是在单核的情况下,加上线程上下文切换的时间,那岂不是多线程比单线程还耗时,这些我一直没想通,直...原创 2018-11-25 14:59:29 · 336 阅读 · 0 评论 -
Java8
关于函数式接口如果一个接口只有一个抽象方法,那么该方法就是一个函数式接口(只有一个抽象方法的意义所在是:使得实现类只实现这一个方法,使实现类看上去像一个函数,由此可推出,如果接口中有已经实现的方法(默认方法),或者不用实现类直接实现的方法,那么不管接口中有几个方法,这个接口都是函数式接口))如果我们在某个接口上声明了FunctionalInterface注解,那么编译器就会按照函数式接口的...原创 2018-12-01 21:41:28 · 179 阅读 · 0 评论 -
Java动态代理---只代理指定方法
Java动态代理具体的方法就不说了,网上不知道有多少,我就不献丑了起因在Spring中,我们使用注解的方法实现事务时,事务时可以使用在指定的方法上,很显然,事务的实现是通过代理的方式,在Spring中AOP主要是由Java动态代理和cglib实现,区别在于被代理的类是否实现接口,那么,具体是怎么指定方法实现代理的.我还没有看这方面的源码,所以暂时就自己想到的方法写一写,等看了源码后再写一版...原创 2019-08-19 19:23:34 · 2215 阅读 · 1 评论
分享