Java
文章平均质量分 64
饭一碗
Java工程师
展开
-
(转)深拷贝与浅拷贝详解
1.拷贝的引入(1)引用拷贝创建一个指向对象的引用变量的拷贝。例1:转载 2021-05-29 12:20:20 · 821 阅读 · 0 评论 -
解决Kafka消费端错误:o.s.kafka.listener.LoggingErrorHandler : Error while processing: null
简单记录下使用kafka遇到的问题,万一也会有小伙伴遇到了呢。程序端使用springboot服务消费kafka,某天出现消息大量堆积,经过定位到错误日志如下:2020-05-12 10:22:36.500 ERROR 5171 --- [org.springframework.kafka.KafkaListenerEndpointContainer#0-0-C-1] o.s.kafka.listener.LoggingErrorHandler : Error while processing:原创 2020-05-12 12:06:41 · 10584 阅读 · 0 评论 -
【转】重写equals方法和hashcode方法那些事
重要声明:本文内容转载自知乎:看似简单的hashCode和equals面试题,竟然有这么多坑!单纯觉得写得好,所以转载。如有侵权,请联系删除。hashCode()方法和equals()区别与联系这到面试题,看似简单,根据以往面试星友的情况来说,绝大部分人都不能很好的回答出来,要么没有逻辑,想到一句就说一句,要么抓不住重点,答非所问。从这个很小的面试题上我们就可以看出来,对于任何一个面试题来说,...转载 2020-04-23 22:19:15 · 1043 阅读 · 0 评论 -
CopyOnWriteArrayLis简单使用
背景Collections.synchronizedList()、Vector虽然线程安全,但是使用的synchronized锁实现,锁粒度较粗,且迭代时候不允许修改,否则会抛出异常,鉴于这种情况,java.util.concurrent包下提供了CopyOnWriteArrayList、CopyOnWriteSet一类的并发集合,本文以CopyOnWriteArrayList为例,简单聊聊这...原创 2020-03-24 18:11:23 · 1228 阅读 · 1 评论 -
优雅的替换if-else语句
场景日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段:优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...原创 2020-03-18 23:09:30 · 28781 阅读 · 33 评论 -
RestTemplate调用post方式接口
场景~我的服务是应用层,要调用其它项目组的搜索接口,接口访问方式是HTTP POST,搜索接口中用了@RequestBody注解修饰入参,希望接收到的参数格式为:按照正常思路,噌噌噌的写了如下代码:HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON_U...原创 2020-03-18 22:03:26 · 3444 阅读 · 1 评论 -
Java中的共享锁和排他锁(以读写锁ReentrantReadWriteLock为例)
重要声明:本人之前对java中的读写锁也不是非常了解,用的也不是很多,尤其在读写锁的策略原理一块没有深究过,本篇文章是在学习【玩转Java并发工具,精通JUC,成为并发多面手】课程后写的,故文章类型选择为"转载",因为本文的很多结论都是来自于那门课程,请知悉~。希望对各位同仁有帮助~读写锁的基本使用在【ReentrantLock锁详解】一文中讲到了java中锁的划分,本篇主要讲述共享锁和...转载 2020-02-14 16:11:41 · 4937 阅读 · 1 评论 -
CAS原理详解
本文包含知识点CAS是什么? CAS应用场景及原理 CAS的不足1.CAS是什么?CAS是Compare And Swap的缩写,比较并更新,是非阻塞同步的实现原理,它是CPU硬件层面的一种指令,从CPU层面能保证"比较并更新"两个操作的原子性。CAS指令操作包括三个参数:内存值(内存地址值)V、预期值A、新值B,当CAS指令执行时,当且仅当预期值A和内存值V相同时,才更新内存值...原创 2020-02-12 22:46:20 · 1757 阅读 · 0 评论 -
ThreadLocal类(线程本地存储)详解
本文包含知识点ThreadLocal是什么? ThreadLocal使用场景 ThreadLocal的具体使用 ThreadLocal注意事项1.ThreadLocal是什么?从广义上来说实现线程安全的方式包括:互斥同步、非阻塞同步、无同步方案三种,ThreadLocal就属于无同步方案中的一种。ThreadLocal被称为线程本地存储,顾名思义就将共享的数据存储到每个线程本...原创 2020-02-11 13:07:09 · 4360 阅读 · 4 评论 -
记录一次pre环境OOM异常解决过程
问题发现部署在客户机器上的程序经常发生OOM异常:java.lang.OutOfMemoryError: GC overhead limit exceeded。初步排查1、系统本身代码问题;2、系统大量调用了第三方接口http超时或者被第三方服务超量调用;3、机器问题;这个程序的主要作用就是拉取kafka里的消息落地到mysql,外加两个kafka消息写入及堆积的监控接口,不涉及到被其...原创 2020-01-10 14:04:06 · 3686 阅读 · 2 评论 -
Java的自旋锁
Java线程原创 2017-04-09 20:44:06 · 451 阅读 · 0 评论 -
线程范围内共享数据(二)
本篇讲述通过ThreadLocal类来实现线程范围内共享数据代码如下:public class ThreadLocalShare { private static ThreadLocal threadLocal=new ThreadLocal(); public static void main(String[] args) { for(int i=0;i<2;i+原创 2017-04-10 20:14:18 · 358 阅读 · 0 评论 -
线程范围内共享数据(一)
Java开发过程中,若单个线程需要在多个对象与模块中访问同一个变量,则通过静态变量就可以实现,那么问题来了,当存在多个线程,多个对象与模块去访问同一变量时,就不行了。例如public class ThreadShare { private static int data = 0; public static void main(String[] args) { for(int原创 2017-04-10 18:54:17 · 542 阅读 · 0 评论 -
多线程间共享对象和数据方式
(一)若每个线程执行的代码相同,可以用同一个Runnable对象,Runnable里面有共享的对象和数据,例如卖票系统,5个线程共同卖100张票public class ThreadTest2 { public static void main(String[] args) { ShareTicket shareTicket=new ShareTicket(); new Th原创 2017-04-12 12:33:00 · 2655 阅读 · 0 评论 -
JSONObject、Gson、FastJson的使用
json格式校验日常开发经常涉及到和json的交互,以下原因会常常会使json格式错误:1、json串的非数字型的键值没有双引号2、json中存在\t这样的表符,这个比较难发现3、json中缺少{}或[]导致结构不完整可以通过FE助手或网页版的json校验json格式正确与否,本篇使用json示例如下两个实体类定义如下(如下注解参考博文lombok的使用):@Se...原创 2017-10-16 10:13:22 · 1498 阅读 · 0 评论 -
nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
项目中使用的mybatis执行SQL后报错:nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)本人项目中使用到的mybatis的逆向生成工具类在单独的一个项目中(因为项目生产环境中非常不建议将mybatis-generator集成到业务项目中...原创 2017-11-01 20:07:35 · 1348 阅读 · 0 评论 -
Java反射机制详解
首先,我们在开始前提出一个问题:1.在运行时,对于一个java类,能否知道属性和方法;能否去调用它的任意方法? 答案是肯定的。本节所有目录如下:什么是JAVA的反射机制JDK中提供的Reflection APIJAVA反射机制提供了什么功能获取类的Class对象获取类的Fields获取类的Method获取类的Constructor新建类的实例转载 2017-10-31 20:20:45 · 312 阅读 · 0 评论 -
Java定时器(一)Timer和TimerTask
方式一:设定指定任务task在指定时间time执行 schedule(TimerTask task, Date date) public static void main(String[] args) throws Exception { // TODO Auto-generated method stub new Timer()....原创 2017-04-09 22:09:41 · 5173 阅读 · 0 评论 -
main方法中调用持久层service或dao
后台经常需要单独写个test类来测试业务方法或进行其他涉及到持久层的操作,有时更简单就直接在main方法中测,这时候是无法直接调用已经写好的持久层(例如service或dao层),controller中如下写@Autowiredprivate RedisService redisService;这样的话需要部署到容器或maven启动项目,非最佳实践,因为有的时候就只想要简单的测试某个功能点方式一...原创 2017-10-15 22:42:41 · 23072 阅读 · 0 评论 -
Http Invoker实现RPC调用
Http Invoker简介Http Invoker实现一、Http Invoker使用HTTP协议,允许穿透防火墙,使用JAVA系列化方式,但仅限于Spring应用之间使用,即调用者与被调用者都必须是使用Spring框架的应用使用Http Invoker实现RPC调用,例如A项目要调用B项目的某些方法。这里涉及到一些基本概念问题:客户端:理解为务消费者,调用别人的服务原创 2017-11-01 11:27:53 · 790 阅读 · 0 评论 -
Zookeeper分布式锁实现
一、锁设计 获取锁实现思路:1. 首先创建一个作为锁目录(znode),通常用它来描述锁定的实体,称为:/lock_node2. 希望获得锁的客户端在锁目录下创建znode,作为锁/lock_node的子节点,并且节点类型为有序临时节点(EPHEMERAL_SEQUENTIAL);例如:有两个客户端创建znode,分别为/lock_node/lock-1和/lock_node转载 2017-11-01 16:47:50 · 729 阅读 · 0 评论 -
Java读取资源文件(properties、xml等)
对于一些公用常量,有时会放到properties文件中方便统一管理. 如下为两种方式读取properties文件的公用工具类封装.import org.apache.commons.lang3.StringUtils;import org.apache.tomcat.util.http.fileupload.IOUtils;import org.slf4j.Logger;import ...原创 2017-10-15 22:23:57 · 578 阅读 · 0 评论 -
Cors解决跨域问题
当一个资源从与该资源本身所在的服务器不同的域或端口请求一个资源时,资源会发起一个跨域 HTTP 请求(下图来源网络)。出于安全性考虑,浏览器会限制或拦截跨域的请求,这样的场景非常多,同时也衍生了许多解决跨域的方法。例如我在http://localhost:8080上面的ajax请求http://localhost:9090上面的服务,报错如下jquery.min.js:4 Failed to lo...原创 2017-11-28 15:19:06 · 2038 阅读 · 0 评论 -
secrurecrt experenced a fatal error and must close.A crash dump file has been created in
前两天,由于机子上SecureCRT是英文版本,无法显示汉语,在网上下了个绿色汉化版的。然后将英文版删除。结果在使用汉化版是提示错误:SecureCRT experienced a fatal error and must close.A crash dump file has been created in:‘ C:\\*** ’.汉语为 SecureCRT 遇到一个致命的错误且必须关闭转载 2017-11-30 14:25:26 · 1010 阅读 · 0 评论 -
QPS从0到4000请求每秒,谈达达后台架构演化之路
文章转自:http://www.infoq.com/cn/articles/imdada-high-performance-server-optimization业务场景达达是全国领先的最后三公里物流配送平台。 达达的业务模式与滴滴以及Uber很相似,以众包的方式利用社会闲散人力资源,解决O2O最后三公里即时性配送难题。 达达业务主要包含两部分:商家发单,配送员接单配送,如转载 2017-12-11 16:51:00 · 1699 阅读 · 0 评论 -
Java定时器(二)之Spring定时任务、Quartz实现
使用基于注解配置的spring定时器基于注解会相对简单的多,直接编写任务类Mytask@EnableScheduling@Componentpublic class Mytask { @Scheduled(cron = "*/5 * * * * ?") public void execute(){ System.out.println("基于注解配置的spring定时...原创 2017-04-09 22:47:15 · 8602 阅读 · 0 评论 -
轻松搞定Httpclient服务调用
HttpClient简介HttpClient是Apache jakarta common下维护的子项目,封装在 commons-httpclient jar包中,是一个能提供高效、功能丰富的支持http协议的客户端工具包,在java中的应用主要体现在模拟客户端请求,例如同其他系统或项目进行API数据的交互等。为解决并发量大问题,建议升级到高版本,如3.0以上maven项目直接引入jar依赖 ...原创 2017-12-06 18:27:09 · 2358 阅读 · 0 评论 -
Java获取客户端、本机IP
获取客户端IP某些情况下需要或取用户客户端的ip,用来统计或者拦截,比如有些网站是需要屏蔽海外ip的访问的,这就需要获取客户端的访问ip。一般情况下用HttpServletRequest对象的getRemoteAddr()方法即可获取。但是当请求经过HTTP代理或反向代理(如ngrok、nginx等)后这样获取ip是不正确的,这有点类似于跳板机。服务经过反向代理后拿到的IP已经不是"第一层"IP了...原创 2017-11-11 17:16:48 · 5238 阅读 · 0 评论 -
Md5的使用
引言开发中经常涉及MD5(中文信息摘要、非对称性)的加密,用于确保信息传递过程中的完整一致性。它将数字、字母、汉字甚至是文件等解析为一串固定的字符值。场景有密码加密、接口参数加密、文件上传时判断文件是否重复等MD5算法特点1、压缩性:任意长度的数据,算出的MD5值长度都是固定的2、容易计算:原数据很容易生成MD5值3、抗修改性:对原数据有任何的改动,生成的MD5值都不一样4、强抗碰撞:不同原数据生...原创 2017-11-03 18:44:10 · 1850 阅读 · 0 评论 -
数字签名算法RSA
文章转自:http://blog.csdn.net/kongqz/article/details/6305548一、概述1、数字签名算法可以看做是一个带有密钥的消息摘要算法,并且这个密钥包括了公钥和私钥。他是非对称加密算法和消息摘要算法的结合体2、数字签名算法是公钥基础设施(PKI),以及许多网络安全机制的基础3、数字签名算法有抗否认的作用4、遵循“私钥转载 2017-12-18 10:54:35 · 993 阅读 · 0 评论 -
lombok使用
引言定义bean时,对private类型的属性生成get/set方法;实例化对象方法之一就是利用构造函数,于是又要生成构造函数;或者toString方法、equals、hashcode方法等,这些使得代码变的极其臃肿.使用lombok即可简化代码,减少重复造轮子的工作.lombok简介lombok是一个可以使用注解来消除冗余代码的java库,使用了lombok会在编译时直接生成对应的方法。使用lo...原创 2017-10-23 15:57:57 · 722 阅读 · 0 评论 -
java中instanceof用法
java中instanceof用法转载 2017-11-28 17:21:33 · 1032 阅读 · 0 评论 -
HashMap结构图及特点
HashMap基于Map接口,其提供了Map接口中几乎所有的操作,允许空值和空键,不保证元素的次序,线程不安全。由于数组查询操作速度快,链表插入更改操作快,hashmap底层即采用这两种数据结构来实现。截图取自《java编程思想》jdk 1.7版本HashMap put()方法结合put源码来看下,调用map.put()方法时候到底做了哪些事情:核心步骤:1、判断存放e...原创 2018-03-15 14:18:40 · 2608 阅读 · 0 评论 -
Java反射:运行时的类信息
java中的反射首先要获取到反射类的字节码,然后将字节码中的变量、方法、构造函数等映射成Field、Method、Constructor类,接着便可以使用这些反射生成的类了。获取类的字节码有如下三种方法public class Demo { public static void main(String[] args) throws ClassNotFoundException {...原创 2018-03-15 16:45:22 · 725 阅读 · 0 评论 -
Java注解及自定义注解的使用
1、为什么要注解?无注解时,我们这样做:public class PersonImpl implements Person { private PersonIDao personIDao; public void setUserDao(){ this.personIDao=personIDao; } ……}<beans> <be...原创 2018-03-15 17:32:59 · 818 阅读 · 0 评论 -
java枚举
1、 enum关键字(java 5+)可以将一组具名的值得有限集合创建为 一种新的类型,而这些具名的值可以供常规的程序组件使用。按照命名规范,枚举实例一般为大写字母表示,若存在多个单词,则用"_"分隔,如:ORDER_STATUS;Enum提供了hashCode()和equals()方法,可以用==判断enum实例是否相等,同时也实现了Comparable接口,具备compareTo()方法;显然...原创 2018-03-15 17:51:43 · 367 阅读 · 0 评论 -
git使用总结及常用命令
常用命令1、切换分支:git checkout 分支名(分支名前面加个 -b 参数,新建分支并切出)2、拉取:git pull3、提交:git commit -am "注释"4、推送:git push5、合并:git merge 分支名 (先切到master分支)6、查看当前分支文件修改状态:git status7、克隆项目:git clone "url"本地项目(初始化)第一...原创 2018-03-30 15:58:47 · 426 阅读 · 0 评论 -
Java线程池详解
本文包含知识点为什么需要使用线程池? 线程池的创建及重要参数 springboot中使用线程池1.为什么需要线程池?java中经常需要用到多线程来处理一些业务,我们非常不建议单纯使用继承Thread或者实现Runnable接口的方式来创建线程,那样势必有创建及销毁线程耗费资源、线程上下文切换问题。同时创建过多的线程也会占用过多的内存,这个时候引入线程池比较合理,方便线程任务的管理...原创 2018-04-08 19:07:23 · 62634 阅读 · 14 评论 -
ArrayList集合源码解读
引言:最近帮其它部门面试了几位java开发人员,简历上写的都是3/4年开发经验,经过面试下来发现他们所体现出来的技术深度和广度最多均在1.5年以内,具体有多少包装成分也不去深究,我面试是一定会问到集合的,由浅至深,基本套路就是:你最常用的集合有哪些(大部分人应该都是ArrayList和HashMap吧)?说说你对ArrayList的理解?平时使用ArrayList遇到过什么问题?ArrayList...原创 2018-03-27 14:00:11 · 528 阅读 · 1 评论 -
CountDownLatch(闭锁)的简单使用
CountDownLatch简介有这么一种场景,某个线程需要等待其他线程任务完成后才能继续执行,比如,需要统计计算三个sheet页面上的数据,于是我就需要开启三个线程来做这个事情,一个线程计算一个sheet页,最后三个线程都计算完了再汇总结果。java.util.concurrent包下的CountDownLatch允许一个或多个线程等待,直到其它线程组操作完成(就是N计数器变为0)后才执行,...原创 2018-04-09 22:13:03 · 1214 阅读 · 0 评论