
Java技术提高
文章平均质量分 80
徐刘根
微信关注公众号:Java后端技术(ID:JavaITWork),和20万人一起学习Java!
"Java后端技术"微信公众号专注Java相关技术:SSM、Spring全家桶、微服务、MySQL、MyCat、集群、分布式、中间件、Linux、网络、多线程,偶尔讲点运维Jenkins、Nexus、Docker、ELK,偶尔分享些技术干货,致力于Java全栈开发!
展开
-
MapStruct最详细的使用教程,别在用BeanUtils.copyProperties ()
本文转载自:https://blog.csdn.net/qq_40194399/article/details/1101621241.为什么使用MapStruct在开发中你可曾遇到如下这样的问题?MyBtatis从数据库中查询的数据映射到domain的实体类上,然后有时候需要将domain的实体类映射给前端的VO类,用于展示。如下所示,假如Student是domain,而给前端展示的为StudentVO。有没有什么优雅的解决方式呢?可能你的第一反应就是使用Spring的BeanUtils.c转载 2021-08-09 15:55:31 · 2494 阅读 · 0 评论 -
分库分表?如何做到永不迁移数据和避免热点?
本文经授权转载自今日头条号:老顾聊技术原文地址:www.toutiao.com/i6677459303055491597一、前言中大型项目中,一旦遇到数据量比较大,小伙伴应该都知道就应该对数据进行拆分了。有垂直和水平两种。垂直拆分比较简单,也就是本来一个数据库,数据量大之后,从业务角度进行拆分多个库。如下图,独立的拆分出订单库和用户库。水平拆分的概念,是同一个业务数据量大之后,进行水平拆分。上图中订单数据达到了4000万,我们也知道mysql单表存储量推荐是百万级,如果不进行处理,mys..转载 2021-03-12 17:29:17 · 1497 阅读 · 0 评论 -
为什么要谨慎使用Arrays.asList、ArrayList的subList?
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/zwwhnly/article/details/109583990一、使用Arrays.asList的注意事项1.1、可能会踩的坑先来看下Arrays.asList的使用:List<Integer> statusList = Arrays.asList(1, 2);System.out.println(statusList).转载 2021-02-09 11:29:11 · 1395 阅读 · 1 评论 -
招聘季!送你21套经典面试题!助你一臂之力!
一年一度的招聘季已经拉开帷幕,不管你是校招还是社招,大家应该都在忙着刷题,关于面试前到底该不该刷题?我的回答是肯定的,必须要刷题的!有一个共识就是"面试的时候造火箭,工作的时候拧螺丝",很多人或多或少都可能会有这样的误解!我个人的观点有以下几点:第一个方面:刷不刷题是你的态度问题!既然大家都知道,好好刷题可以应对绝大部分的面试,那你为什么不好好刷题哪?你连这个都不好好去准备,难道还能期望你工作以后能给公司做出来多大的贡献吗?第二个方面:面试官往往会对一个问题深入的挖,看你到底掌握到什么程度,虽然这原创 2020-10-28 20:25:34 · 2213 阅读 · 1 评论 -
海量交易订单查询没做“重试”,一哥们"喜提"P3故障!
读超时,写超时- 数据写入成功,返回超时了,数据库已真实变更了这条数据;- 数据未写入,请求超时了,数据库未发生变更;全幂等能,半幂等;服务的调用方和服务的提供方幂等键要保证一致,唯一性,并且不变性;调用方不能单纯的依靠查询来做幂等息幂等是一个比较复杂的场景,因为消息可能存在的无序性、重复性、延迟,都增加了幂等处理的复杂性,guava-retring,spring-retry原创 2020-01-07 09:51:53 · 7620 阅读 · 0 评论 -
幂等的这几个问题没有考虑到,你恐怕是在写Bug吧!
幂等的分类,半幂等、全幂等;服务的调用方和服务的提供方幂等键要保证一致,唯一性,并且不变性;调用方不能单纯的依靠查询来做幂等;调用方幂等键唯一了,但是其他数据却变了,业务做好处理,具体业务具体分析;幂等键跟随数据做好持久化,做到“有据可依”,禁止幂等键纯内存拼接;消息幂等是一个比较复杂的场景,因为消息可能存在的**无序性、重复性、延迟**,都增加了幂等处理的复杂性,其中**重复性**则是幂等的时候需要重点考虑的;Guava-retrying、Spring-retry原创 2020-01-04 22:00:02 · 2475 阅读 · 2 评论 -
格式化时间用了YYYY-MM-dd,元旦当天老板喊我回去改Bug!
具体是什么原因哪?这是因为Java语言中在特定的时间或者数字等数据上,平时你感觉一切都OK!但是在特定时间、特定环境就会出问题的情况!刚好格式化时间就算其中的一个!2020年跨年的时候刚好是2019和2020交换的时候,于是就出现了格式化时间的问题,归其原因就是使用了"YYYY-MM-dd"格式化时间!YYYY 是 week-based-year,现在就已经 2020 年了,yyyy 还是 2019 年!原创 2020-01-02 20:01:04 · 7354 阅读 · 0 评论 -
Java多线程编程-(18)-借ThreadLocal出现OOM内存溢出问题再谈弱引用WeakReference
前两篇:Java多线程编程-(3)-线程本地ThreadLocal的介绍与使用Java多线程编程-(8)-多图深入分析ThreadLocal原理Java多线程编程-(9)-ThreadLocal造成OOM内存溢出案例演示与原理分析一、简单回顾在上几篇的时候,已经简单的介绍了不正当的使用ThreadLocal造成OOM的原因,以及ThreadLocal的基本原理,下边我们首先回顾一下ThreadLoc原创 2017-11-12 18:57:16 · 8955 阅读 · 5 评论 -
Java多线程编程-(9)-ThreadLocal造成OOM内存溢出案例演示与原理分析
前几篇: Java多线程编程-(1)-线程安全和锁Synchronized概念Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性Java多线程编程-(3)-线程本地ThreadLocal的介绍与使用Java多线程编程-(4)-线程间通信机制的介绍与使用Java多线程编程-(5)-使用Lock对象实现同步以及线程间通信Java多线程编程-(6)-两种...原创 2017-10-20 19:53:26 · 21726 阅读 · 21 评论 -
Java多线程编程-(4)-线程间通信机制的介绍与使用
上一篇:Java多线程编程-(1)-线程安全和锁Synchronized概念Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性Java多线程编程-(3)-线程本地ThreadLocal的介绍与使用线程间通信简介我们知道线程是操作系统中独立的个体,但是这个单独的个体之间没有一种特殊的处理方式使之成为一个整体,线程之间没有任何交流和沟通的话,他就是一个个单独的个体,不足以形成原创 2017-10-10 18:25:52 · 7630 阅读 · 14 评论 -
Java多线程编程-(11)-从volatile和synchronized的底层实现原理看Java虚拟机对锁优化所做的努力
一、背景对于Java来说我们知道,Java代码首先会编译成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上进行执行。Java中所使用的并发机制依赖于JVM的实现和CPU的指令。下边我们对常见的实现同步的两个关键字volatile和synchronized进行底层原理的分析,分析之余我们就会了解到JVM在对锁的优化所做的事情,这样的话我们以后在使用这两原创 2017-10-24 10:57:11 · 10930 阅读 · 1 评论 -
Java多线程编程-(12)-Java中的队列同步器AQS和ReentrantLock锁原理简要分析
一、Lock接口在上一篇文章中: Java多线程编程-(5)-使用Lock对象实现同步以及线程间通信 介绍了如何使用Lock实现和synchronized关键字类似的同步功能,只是Lock在使用时需要显式地获取和释放锁,synchronized实现的隐式的获取所和释放锁。虽然Lock它缺少了(通过synchronized块或者方法所提供的)隐式获取释放锁的便捷性,但是却拥有了锁获取与释放的可操作性、原创 2017-10-25 15:01:34 · 3784 阅读 · 0 评论 -
Java多线程编程-(17)-多线程异步调用之Future模式
一、线程计数器回顾在《Java多线程编程-(6)-两种常用的线程计数器CountDownLatch和循环屏障CyclicBarrier》 这一篇中,我们使用线程计数器的方式实现了在主线程中等待计数的线程执行完之后在执行阻塞等待之后的代码。看段代码回顾一下:public class SummonDragonDemo { private static final int THREAD_COUNT原创 2017-10-30 10:27:27 · 17100 阅读 · 3 评论 -
Java多线程编程-(8)-多图深入分析ThreadLocal原理
前几篇:Java多线程编程-(1)-线程安全和锁Synchronized概念Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性Java多线程编程-(3)-线程本地ThreadLocal的介绍与使用Java多线程编程-(4)-线程间通信机制的介绍与使用Java多线程编程-(5)-使用Lock对象实现同步以及线程间通信Java多线程编程-(6)-两种常用的线程计数器Count原创 2017-10-20 17:15:13 · 23367 阅读 · 17 评论 -
Java多线程编程-(6)-两种常用的线程计数器CountDownLatch和循环屏障CyclicBarrier
前几篇:Java多线程编程-(1)-线程安全和锁Synchronized概念Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性Java多线程编程-(3)-线程本地ThreadLocal的介绍与使用Java多线程编程-(4)-线程间通信机制的介绍与使用Java多线程编程-(5)-使用Lock对象实现同步以及线程间通信倒计时CountDownLatchCountDownLat原创 2017-10-12 19:32:49 · 8224 阅读 · 3 评论 -
Java多线程编程-(16)-等待/通知模式接口Condition接口深入分析
前几篇:Java多线程编程-(12)-Java中的队列同步器AQS和ReentrantLock锁原理简要分析Java多线程编程-(15)-读写锁ReentrantReadWriteLock深入分析一、Condition接口简介在上述两篇文章中讲解AQS的时候,我们已经知道了同步队列AQS的内部类ConditionObject实现了Condition接口,使用ReentrantLock和Reentra原创 2017-10-29 10:13:50 · 5149 阅读 · 0 评论 -
Java多线程编程-(15)-读写锁ReentrantReadWriteLock深入分析
上两篇:Java多线程编程-(12)-Java中的队列同步器AQS和ReentrantLock锁原理简要分析Java多线程编程-(13)- 关于锁优化的几点建议一、前言上两篇的内容中已经介绍到了锁的实现主要有ReentrantLock和ReentrantReadWriteLock。ReentrantLock是重入锁,顾名思义就是支持重进入的锁,他表示该锁能够支持一个线程对资源的重复加锁,上文中已经提原创 2017-10-28 15:06:39 · 1984 阅读 · 0 评论 -
Java多线程编程-(10)-单例模式几种写法的错与对
前几篇: Java多线程编程-(1)-线程安全和锁Synchronized概念Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性Java多线程编程-(3)-线程本地ThreadLocal的介绍与使用Java多线程编程-(4)-线程间通信机制的介绍与使用Java多线程编程-(5)-使用Lock对象实现同步以及线程间通信Java多线程编程-(6)-两...原创 2017-10-22 15:33:09 · 3823 阅读 · 4 评论 -
Java多线程编程-(14)-无锁CAS操作以及Java中Atomic并发包的“18罗汉”
对于并发控制而言,锁是一种**悲观的策略**。它总是假设每一次的临界区操作会产生冲突,因此,必须对每次操作都小心翼翼。如果有多个线程同时需要访问临界区资源,就宁可牺牲性能让线程进行等待,所以说锁会阻塞线程执行。 而无锁是一种**乐观的策略**,它会假设对资源的访问是没有冲突的。既然没有冲突,自然不需要等待,所以所有的线程都可以在不停顿的状态下持续执行。那遇到冲突怎么办呢?无锁的策略使用一种叫做**比较交换的技原创 2017-10-27 14:02:58 · 2127 阅读 · 0 评论 -
Java多线程编程-(5)-使用Lock对象实现同步以及线程间通信
前几篇:Java多线程编程-(1)-线程安全和锁Synchronized概念Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性Java多线程编程-(3)-线程本地ThreadLocal的介绍与使用Java多线程编程-(4)-线程间通信机制的介绍与使用在《Java多线程编程-(4)-线程间通信机制的介绍与使用》已经学习了,可以使用方法wait/notify 结合同步关键字s原创 2017-10-10 21:14:50 · 7933 阅读 · 2 评论 -
Java多线程编程-(13)- 关于锁优化的几点建议
上一篇:Java多线程编程-(11)-从volatile和synchronized的底层实现原理看Java虚拟机对锁优化所做的努力Java多线程编程-(12)-Java中的队列同步器AQS和ReentrantLock锁原理简要分析一、背景在《 Java多线程编程-(11)-从volatile和synchronized的底层实现原理看Java虚拟机对锁优化所做的努力》 这一篇文章中,我们大致介绍了Ja原创 2017-10-27 12:37:00 · 7023 阅读 · 0 评论 -
Java多线程编程-(3)-线程本地ThreadLocal的介绍与使用
上一篇:Java多线程编程-(1)-线程安全和锁Synchronized概念Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性ThreadLocal简介我们通过上两篇的学习,我们已经知道了变量值的共享可以使用public static变量的形式,所有的线程都使用同一个被public static修饰的变量。那么如果我们想实现每一个线程都有自己的共享变量该如何解决哪?JDK原创 2017-09-27 16:26:56 · 7993 阅读 · 0 评论 -
为什么要重写hashCode()方法和equals()方法以及如何进行重写
一、前言本篇文章主要探讨的问题有三个:1、首先我们为什么需要重写hashCode()方法和equals()方法? 2、在什么情况下需要重写hashCode()方法和equals()方法? 3、如何重写这两个方法?二、为什么需要重写hashCode()方法和equals()方法首先,为什么要重写equals()方法。我们在定义类时,我们经常会希望两个不同对象的某些属性值相同时就认为他们相同,所以我转载 2017-03-19 14:53:54 · 13500 阅读 · 14 评论 -
Java多线程编程-(7)-使用线程池实现线程的复用和一些坑的避免
前几篇:Java多线程编程-(1)-线程安全和锁Synchronized概念Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性Java多线程编程-(3)-线程本地ThreadLocal的介绍与使用Java多线程编程-(4)-线程间通信机制的介绍与使用Java多线程编程-(5)-使用Lock对象实现同步以及线程间通信Java多线程编程-(6)-两种...原创 2017-10-16 19:20:20 · 13229 阅读 · 4 评论 -
千万不要这样使用Arrays.asList !
作者:flyhero | 微信公众号:码上实战(ID:Push-Code)使用Arrays.asList()的原因无非是想将数组或一些元素转为集合,而你得到的集合并不一定是你想要的那个集合。而一开始asList的设计时用于打印数组而设计的,但jdk1.5开始,有了另一个比较更方便的打印函数Arrays.toString(),于是打印不再使用asList(),而asList()恰巧可用于将数...转载 2019-06-10 14:46:54 · 14299 阅读 · 13 评论 -
多线程,到底该设置多少个线程?
作者:享学课堂老顾微信公众号: 享学课堂online一、前言“不好了,线上服务器超时严重,请求非常慢,好像报连接数too many了,怎么办?“小伙伴们在反馈。一般我们的技术老大的处理方式,把连接数和线程池调大点,重启,再观察。往往这个方式是应急措施,治标不治本,因为不知道问题的原因。有个严重误区,以为线程池设置太小了,调大点请求就会快了。今天就带着小伙伴们沟通一下,线程池的大小应该...转载 2019-06-02 13:26:30 · 10794 阅读 · 0 评论 -
20万用户同时访问一个热点Key,如何优化缓存架构?
来源:石杉的架构笔记(ID:shishan100)这篇文章,咱们来聊聊热点缓存的架构优化问题。使用缓存集群的时候,最怕的就是热 Key、大 Value 这两种情况。一、为什么要用缓存集群啥叫热 Key 和大 Value 呢?简单来说,热 Key,就是你的缓存集群中的某个 Key 瞬间被数万甚至十万的并发请求打爆。大 Value,就是你的某个 Key 对应的 Value 可能有 GB ...转载 2019-06-02 11:48:51 · 1850 阅读 · 0 评论 -
看似简单的hashCode和equals面试题,竟然有这么多坑!
作者:徐刘根,大家都喊我根哥!hashCode()方法和equals()区别与联系这到面试题,看似简单,根据以往面试星友的情况来说,绝大部分人都不能很好的回答出来,要么没有逻辑,想到一句就说一句,要么抓不住重点,答非所问。从这个很小的面试题上我们就可以看出来,对于任何一个面试题来说,都是要清晰有条理的回答。那么如何才能回答到点子上并且让面试官觉得你的逻辑清晰哪?首先,我们要介绍hashC...原创 2019-03-03 14:33:26 · 12268 阅读 · 7 评论 -
2019年互联网高频Java面试题指南!互联网升职加薪方案!
2019年我们只聊面试!让你能够随时准备升职加薪!少刷点抖音头条,少喝点鸡汤毒药,少研究些成功学,这些给不了你什么,你也得到不到什么,多学点技术,这才是王道!最近整理了多达200+的互联网高频面试题提纲,后期也会不断的更新,在接下来的2019年,会逐一讲解和探讨,也希望和大家一起继续探讨交流!也希望大家,有面试的直接扔到星球里边来,大家一起学习和探讨!一、无答案版40页,多达500+面试题集合...原创 2019-03-06 11:41:50 · 5919 阅读 · 7 评论 -
阿里巴巴的26款超神Java开源项目!
来源:https://segmentfault.com/a/11900000173467991、分布式应用服务开发的一站式解决方案 Spring Cloud AlibabaSpring Cloud Alibaba 致力于提供分布式应用服务开发的一站式解决方案。此项目包含开发分布式应用服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。...转载 2019-02-23 12:51:00 · 17699 阅读 · 23 评论 -
线上出故障了!我慌得一匹!教大家如何应对在线故障!
本文作者:飒然Hang原文地址:http://www.rowkey.me/blog/2018/11/22/online-debug线上运行的Java应用突然没有响应、响应缓慢,进程突然消失,遇到这些情况应该如何应对呢?今天教大家如何应对在线故障!热门内容:1、无人不冤,有情皆孽2、【双11狂欢背后】微服务注册中心如何承载大型系统的千万...转载 2018-11-29 12:58:22 · 8859 阅读 · 4 评论 -
阿里的面试官都喜欢问哪些问题?
作者:徐刘根 | 公众号:Java之间金九银十是招聘的旺季,小编在这里也给大家整理了一套阿里面试官最喜欢问的问题或者出场率较高的面试题,助校招或者社招路上的你一臂之力!首先我们需要明白一个事实,招聘的一个很关键的因素是在给自己找未来的同事,同级别下要找比自己优秀的人,面试是一个双向选择的过程,也是一个将心比心去沟通的过程。就像我们有的人感觉自己很牛逼,但是拿不到offer,...原创 2018-08-27 14:34:27 · 15047 阅读 · 5 评论 -
序列化和反序列化的底层实现原理是什么?
序列化和反序列化作为Java里一个较为基础的知识点,大家心里也有那么几句要说的,但我相信很多小伙伴掌握的也就是那么几句而已,如果再深究问一下Java如何实现序列化和反序列化的,就可能不知所措了!遥记当年也被问了这一个问题,自信满满的说了一大堆,什么是序列化、什么是反序列化、什么场景的时候才会用到等,然后面试官说:那你能说一下序列化和反序列化底层是如何实现的吗?一脸懵逼,然后回家等通知!一、...原创 2018-04-07 13:53:41 · 85947 阅读 · 33 评论 -
Spring Cloud技术栈还没有学完!Hystrix又双叒叕停止更新了!
今天无意间翻了一下Hystrix代码仓库,无意间看到最近的一条变更,竟然发现Hystrix也不再进行活跃的更新了,停止开发新功能了!后期只是进行维护了!!!这是继Eureka之后又一个停止更新的Spring Cloud配套技术!可悲的是Spring Cloud技术栈的这么多组件还没学完,一个接一个的都不再继续活跃的更新了!突然感觉没得学了(ps:手动滑稽)!求求你们别停止更新了!我还能学...原创 2018-11-30 10:31:34 · 5804 阅读 · 2 评论 -
Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性
上一篇:Java多线程编程-(1)-线程安全和锁Synchronized概念基本介绍了进程和线程的区别、实现多线程的两种方式、线程安全的概念以及如何使用Synchronized实现线程安全,下边介绍一下关于Synchronized的其他基本特性。一、Synchronized锁重入(1)关键字Synchronized拥有锁重入的功能,也就是在使用Synchronized的时候,当...原创 2017-09-16 18:02:44 · 7983 阅读 · 3 评论 -
Java多线程编程-(1)-线程安全和锁Synchronized概念
一、进程与线程的概念(1)在传统的操作系统中,程序并不能独立运行,作为资源分配和独立运行的基本单位都是进程。在未配置 OS 的系统中,程序的执行方式是顺序执行,即必须在一个程序执行完后,才允许另一个程序执行;在多道程序环境下,则允许多个程序并发执行。程序的这两种执行方式间有着显著的不同。也正是程序并发执行时的这种特征,才导致了在操作系统中引入进程的概念。自从在 20 世纪 60 年代人...原创 2017-09-15 14:51:59 · 26121 阅读 · 17 评论 -
Java提供的排序算法是怎么实现的?
前几天整理的一套面试题,其中有一个问题就是Java的JDK中我们见到的Collections.sort()和Arrays.sort()这两个排序算法的实现方式是什么,很多小伙伴心里边默认的应该是快排,但是不全对或者理解的不够深刻,以下我们从源码的层次一点点解释一下这个问题:一、Arrays.sort()的排序算法先来看看Arrays.sort(),sort方法拥有很多的重载,有十几种,...原创 2018-04-09 11:08:36 · 14073 阅读 · 4 评论 -
Java中枚举类型Enum的一种使用方式
枚举类定义如下:package com.qunar.enumtest;public enum Status { SCUUESS("1", "成功"), FAILED("2", "失败"); private String value; private String desc; public String getValue() { return value;原创 2015-10-16 16:24:13 · 5477 阅读 · 0 评论 -
JAR文件包及jar命令详解
如何把 java 程序编译成 .exe 文件?使用制作可执行 JAR 文件包的方法就是最佳选择了,何况它还能保持Java 的跨平台特性。原创 2014-04-07 20:20:50 · 2219 阅读 · 0 评论 -
泛型的提高代码笔记
package com.lc.fanxing;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import org.junit.Test;pu原创 2014-09-15 16:03:36 · 1498 阅读 · 0 评论