java
文章平均质量分 69
经典鸡翅
京东程序员一枚,用心写文章,分享知识。关注我,带你探究大厂的面试套路。
展开
-
Thread.currentThread().getName() 和 this.getName()区别详解
currentThread的详解currentThread方法是Thread类的一个静态方法,用来获取当前运行的代码段,正在被哪个线程调用。我们先来看一眼源码。是一个native方法。直接与系统层面做交互。下面看一段代码 public static void main(String[] args) { String name = Thread.currentThread().getName(); System.out.println(name); }原创 2022-02-20 18:59:17 · 1729 阅读 · 0 评论 -
教你如何用阿里canal
什么是canal?阿里巴巴 B2B 公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了同步杭州和美国异地机房的需求,从 2010 年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务。Canal 是用 Java 开发的基于数据库增量日志解析,提供增量数据订阅&消费的中间件。目前。 Canal 主要支持了 MySQL 的 Binlog 解析,解析完成后才利用 Canal Client 来处理获得的相关数据。原创 2022-01-16 20:57:20 · 2040 阅读 · 0 评论 -
java如何对接企业微信
前言最近实现社群对接企业微信,对接的过程遇到一些点,在此记录。企业微信介绍企业微信具有和微信一样的体验,用于企业内部成员和外部客户的管理,可以由此构建出社群生态。 企业微信提供了丰富的api进行调用获取数据管理,也提供了各种回调事件,当数据发生变化时,可以及时知道。 我们分为两部分进行讲解,第一部分调用企业微信api,第二部分,接收企业微信的回调。调用企业微信apiapi的开发文档地址:work.weixin.qq.com/api/doc/900… 调用企业微信所必须的东西就是企业的原创 2022-01-09 12:23:34 · 3407 阅读 · 0 评论 -
为什么java线程池的submit既可以提交runnable也可以提交callable?
前言大家好,今天鸡翅老哥继续带大家深入了解多线程,我们都知道多线程有两种实现方式,一种是实现runnable接口,一种是实现callable接口。那么线程池的submit提交方式,两种都可以作为参数传递。要知道submit是当需要返回值的情况下才使用,runnable是没有返回值,那么submit为什么可以接收两种呢,我们继续往下看。submit方法解析先看下submit的方法,来确定,确实可以提交两种方式。我们定义一个线程池,来执行两个方法,第一种没有返回值,线程池会自动找到runna原创 2022-01-04 22:43:52 · 2439 阅读 · 1 评论 -
为什么java线程池的submit的不抛出异常
前言大家好,这里是经典鸡翅,最近有人问我线程池的execute和submit,有的抛出异常,有的不抛出异常,这里鸡翅老哥给大家整理下。通过源码跟踪跟大家讲解。两个方法我们先用最普通的方式定义一个线程池。ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5, 10, 5, TimeUnit.SECONDS, new LinkedBlockingDeque<>(1024), new ThreadPoolEx原创 2022-01-03 21:52:56 · 2502 阅读 · 0 评论 -
svn如何创建分支
在建立项目版本库时,可首先建好项目文件夹,并在其中建立trunk, branches, tags三个空的子目录。这样在trunk中开始进行开发:trunk是主分支,是日常开发进行的地方。branches是分支。一些阶段性的release版本,这些版本是可以继续进行开发和维护的,则放在branches目录中。又比如为不同用户客制化的版本,也可以放在分支中进行开发。tags目录一般是只读的,这里存储阶段性的发布版本,只是作为一个里程碑的版本进行存档。在主分支上创建文件结构并提交到SVN版本控制器上原创 2021-01-19 22:57:28 · 13296 阅读 · 0 评论 -
Java 反射修改类的常量值、静态变量值、属性值
前言有的时候,我们需要修改一个变量的值,但变量也许存在于 Jar 包中或其他位置,导致我们不能从代码层面进行修改,于是我们就用到了下面的场景,通过反射来进行修改变量的值。定义一个实体类class Bean{ private static final Integer INT_VALUE = 100; } 利用反射修改私有静态常量方法System.out.println(Bean.INT_VALUE); Field field = Bean.class.getFi原创 2021-01-16 22:35:34 · 1683 阅读 · 0 评论 -
Linux下安装svn教程
前言最近买了新服务器,准备开始弄一些个人的开源项目。有了服务器当然是搞一波svn啦。方便自己的资料上传和下载。于是在此记录搭建svn的方式,方便以后直接使用。安装使用yum源进行安装,十分的方便。yum install subversion配置svn创建仓库我们这里在/home下建立一个名为svn的仓库(repository),以后所有代码都放在这个下面,创建成功后在svn下面多了几个文件夹。[root@localhost /]# cd /home[root@loca原创 2021-01-13 21:56:42 · 588 阅读 · 1 评论 -
震惊!java中日期格式化的大坑!
前言我们都知道在java中进行日期格式化使用simpledateformat。通过格式 yyyy-MM-dd 等来进行格式化,但是你知道其中微小的坑吗?yyyy 和 YYYY示例代码 @Test public void testWeekBasedYear() { Calendar calendar = Calendar.getInstance(); // 2019-12-31 calendar.set(2019, Calenda原创 2021-01-07 22:56:13 · 615 阅读 · 0 评论 -
oracle大数据量更新引发的死锁问题解决方法及oracle分区和存储过程的思考
前言前几天上午在对数据库的一张表进行操作的时候,由于这张表是按照时间的一张统计表,正好到那天没有测试数据了,于是我想将表中所有的时间,统一更新到后一个月,于是对80w条数据的更新开始了。整个过程曲折的一批。同时学到了很多知识,在此进行记录。希望对大家有帮助。首先是大批量更新,由于数据已经进行了分区,开始对分区进行分析,然后大批量操作死锁,对死锁的解决,最后存储过程来解决数据的大批量插入。曲折的过程开始由于测试数据到21号就没了,21号一上去,发现开发的功能,都没有数据了,图表也都空了。查询原原创 2020-09-02 08:44:08 · 1809 阅读 · 0 评论 -
一种简单的redis分布式锁方案
前言用于分布式程序彼此之间不能同时执行的场景。例如计算程序等。代码锁工具类@Componentpublic class RedisLockUtil { @Autowired private RedisTemplate redisTemplate; private static final String CALC_LOCK_KEY = "CalculateLock"; private static final Long CALC_LOCK_TIME = 30L; public b原创 2020-08-28 08:51:25 · 452 阅读 · 0 评论 -
一次mysql数据库连接池泄露的解决经历
前言最近用了公司某框架,部署到现场后,现场运维开始维护现场数据,在不断操作的过程中,系统崩溃,查看后台日志,druid连接池已经获取不到连接。于是开始了排查之旅。在此记录。排查开始首先后台的报错是这样的。exception=org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:### Error querying databas原创 2020-08-24 18:40:50 · 2335 阅读 · 0 评论 -
如何在linux下安装mysql5.7?
前言最近项目上线,开始给用户测试了。搞下来好多台服务器,自然要装一个mysql的服务器。想想广大博友应该都会遇到如何装mysql的问题,就此分享,给大家一个安装指南。供大家以后安装的时候,提高效率,瞬间完事。准备工作当然是准备一个mysql5.7.25的tar包啦!自行百度下载吧!留言找我要也行!安装步骤检查是否有老版本的mysql检查是否有老版本rpm -qa | grep mysql输入后,没有任何信息弹出,证明机器上没有老版本的mysql。如果有,就会展示出mysql的版本。像是这样原创 2020-07-30 08:42:00 · 497 阅读 · 1 评论 -
js如何清空数组最快?
方式1:splice函数arrayObject.splice(index,howmany,element1,.....,elementX)index:必选,规定从何处添加/删除元素。howmany:必选,规定应该删除多少元素。未规定此参数,则删除从 index 开始到原数组结尾的所有元素。element1:可选,规定要添加到数组的新元素。<script type ="text/javascript"> var arr = [1,2,3,4]; arr.sp原创 2020-07-27 08:47:20 · 1232 阅读 · 0 评论 -
Java集合面试题?看这篇就够了!
1.ListList是有序的Collection。Java List一共三个实现类:分别是ArrayList、Vector和LinkedListArrayListArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要将已经有数组的数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它...原创 2020-07-25 08:55:27 · 758 阅读 · 1 评论 -
一文带你学会java的jvm精华知识点
前言本文分为20多个问题,通过问题的方式,来逐渐理解jvm,由浅及深。希望帮助到大家。Java类实例化时,JVM执行顺序?正确的顺序如下:1父类静态代码块2父类静态变量3子类静态代码块3子类静态变量4父类成员变量赋值5父类构造方式开始执行6子类成员变量赋值7子类构造方式开始执行需要注意的地方是静态变量和静态代码块谁在前面谁先执行。看一段代码示例:package com.jdk.learn;/**Created by ricky on 2017/8/25.类加载原创 2020-07-22 17:29:42 · 477 阅读 · 1 评论 -
SpringCloud中Feign的适配器的实现方案
前言最近在做微服务的项目,各个系统之间需要进行调用,然后用一个适配器来实现服务之间的feign调用,使用适配器进行统一管理。实现方案首先我们需要将服务的名称进行单独的配置,可以方便的进行切换和扩展,我们使用bootstrap.yml来进行配置,这样引入jar包的时候,可以将配置互补到我们本身项目的application.yml中。在我们的bootstrap.yml中进行配置。## 配置的服务名称server-name: # 配置在eureka中注册的服务名称 feignDemo: dem原创 2020-07-21 13:15:57 · 534 阅读 · 0 评论 -
SpringCloud中Feign服务调用请求方式及参数总结
前言最近做微服务架构的项目,在用feign来进行服务间的调用。在互调的过程中,难免出现问题,根据错误总结了一下,主要是请求方式的错误和接参数的错误造成的。在此进行一下总结记录。以下通过分为三种情况说明,无参数,单参数,多参数。每种情况再分get和post两种请求方式进行说明。这样的话,6种情况涵盖了feign调用的所有情况。有个建议就是为了保证不必要的麻烦,在写feign接口的时候,与我们的映射方法保持绝对一致,同时请求方式,请求参数注解也都不偷懒的写上。如果遵循这种规范,可以避开90%的调用错误。无原创 2020-07-17 17:28:00 · 2157 阅读 · 0 评论 -
SpringBoot 发送邮件功能实现
背景有个小伙伴问我你以前发邮件功能怎么弄的。然后我就给他找了个demo,正好在此也写一下,分享给大家。理清痛点发送邮件,大家可以想一下,坑的地方在哪?我觉得是三个吧。第一:邮件白名单问题。第二:邮件超时问题。第三:邮件带附件问题。我下面的demo都会介绍这些问题及解决。实现方案准备工作我们先要准备一个可以发送的邮箱,我这里以我的163邮箱为例,现在发送邮件的规则,要求你输入一种叫做授权码的东西,注意这个东西不是密码。获取授权码的步骤:当选择开启,通过验证之后就可以获取到验证码原创 2020-07-16 13:14:21 · 643 阅读 · 1 评论 -
SpringBoot集成Mybatis动态多数据源后,MybatisPlus的IPage失效的问题解决方案
背景之前做数据抽取的时候,搭了一个mybatis动态数据源切换的架子。方便他们写抽取的代码。今天同事问我,架子里面的mybatisplus的IPage失效了是什么问题。想了一下,应该是写动态数据源的时候,我自定义的mybatis的配置覆盖了已有的配置。于是我让他先把我写的配置进行删除,看是否正常。得到回复,删除后正常。那么到此问题原因找到,接下来的解决方法,只要在配置中增加分页器即可。解决方案建立一个分页器的bean配置@Beanpublic PaginationInterceptor pagin原创 2020-07-10 08:42:48 · 3098 阅读 · 0 评论 -
深入理解幂等性及Restful风格API的幂等性问题详解
什么是幂等性HTTP/1.1中对幂等性的定义是:一次和多次请求某一个资源对于资源本身应该具有同样的结果(网络超时等问题除外)。也就是说,其任意多次执行对资源本身所产生的影响均与一次执行的影响相同。这里需要关注几个重点:幂等不仅仅只是一次(或多次)请求对资源没有副作用(比如查询数据库操作,没有增删改,因此没有对数据库有任何影响)。幂等还包括第一次请求的时候对资源产生了副作用,但是以后的多次请求都不会再对资源产生副作用。幂等关注的是以后的多次请求是否对资源产生的副作用,而不关注结果。网络超时等问题,原创 2020-07-07 16:02:09 · 991 阅读 · 0 评论 -
@Autowired注解与@resource注解的区别(十分详细)
背景:今天下班路上看到一个大货车,于是想到了装配,然后脑海里跳出了一个注解@Autowired(自动装配),于是又想到最近工作项目用的都是@Resource注解来进行装配。于是本着学什么东西都要一钻到底才能从菜鸟变大神的精神!!我就认真研究了一下,在此总结一波。以下内容先分别解释一下两个注解,再进行共同点与不同点的总结。@Autowired@Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowi原创 2020-07-04 10:27:22 · 2774 阅读 · 3 评论 -
Java实现上传文件到指定服务器指定目录
前言需求使用freemarker生成的静态文件,统一存储在某个服务器上。本来一开始打算使用ftp实现的,奈何老连接不上,改用jsch。毕竟有现成的就很舒服,在此介绍给大家。具体实现引入的pom<dependency> <groupId>ch.ethz.ganymed</groupId> <artifactId>ganymed-ssh2</artifactId> <version>262</version>&l原创 2020-07-03 08:46:19 · 7648 阅读 · 6 评论 -
java中synchronized修饰静态方法和非静态方法有什么区别?
Synchronized修饰非静态方法Synchronized修饰非静态方法,实际上是对调用该方法的对象加锁,俗称“对象锁”。Java中每个对象都有一个锁,并且是唯一的。假设分配的一个对象空间,里面有多个方法,相当于空间里面有多个小房间,如果我们把所有的小房间都加锁,因为这个对象只有一把钥匙,因此同一时间只能有一个人打开一个小房间,然后用完了还回去,再由JVM 去分配下一个获得钥匙的人。情况1:同一个对象在两个线程中分别访问该对象的两个同步方法结果:会产生互斥。解释:因为锁针对的是对象,原创 2020-06-28 13:13:00 · 1765 阅读 · 0 评论 -
java触发full gc的几种情况概述
前言近期被问及这个问题,在此记录整理一下。System.gc()方法的调用此方法的调用是建议JVM进行Full GC,虽然只是建议而非一定,但很多情况下它会触发 Full GC,从而增加Full GC的频率,也即增加了间歇性停顿的次数。强烈影响系建议能不使用此方法就别使用,让虚拟机自己去管理它的内存,可通过通过-XX:+ DisableExplicitGC来禁止RMI调用System.gc。老年代空间不足老年代空间只有在新生代对象转入及创建为大对象、大数组时才会出现不足的现象,当执行Full GC原创 2020-06-24 15:25:11 · 1195 阅读 · 0 评论 -
不可错过的java面试博客之java集合篇
ListList 是有序的 Collection。Java List 一共三个实现类:分别是 ArrayList、Vector 和 LinkedListArrayListArrayList 是最常用的 List 实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要将已经有数组的数据复制到新的存储空间中。当从 ArrayList 的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查.原创 2020-06-23 16:16:51 · 463 阅读 · 0 评论 -
必会系列之 filter 和 interceptor 的区别
什么是Filter在java的javax.servlet下有一个接口Filter。任何实现了Filter接口的类都可以称之为filter。Filter的主要用途是设置字符集、控制权限、控制转向等等。在使用filter的过程中,如果是传统的web项目,带有web.xml文件这种。我们需要在xml里面进行配置。比如下面这样。 <filter> <description>字符集过滤器</description> <filter-n原创 2020-06-22 08:56:57 · 627 阅读 · 0 评论 -
你还不了解基于session的授权认证吗?
前言在漫长的开发过程中,权限认证是一个永恒不变的话题,随着技术的发展,从以前的基于sessionId的方式,变为如今的token方式。session常用于单体应用,后来由于微服务的兴起,分布式应用占了很大的一部分。本文将为大家介绍基于session的单体应用授权认证方式。后续会介绍基于token的认证方式。什么是认证输入账号和密码登录的过程就是认证,看是否合法。认证是为了保护系统的隐私数据和资源。用户的身份合法才能访问该系统资源。用户认证就是判断一个用户身份是否合法的过程,合法继续访问,不合法拒绝原创 2020-06-13 09:38:35 · 472 阅读 · 0 评论 -
你还不知道 Eureka 和 zookeeper 的区别吗?
前言最近在面试的时候,被问到了这个问题,作答的不是很好,在此进行整理和学习,希望能够帮助大家。CAP理论在了解eureka和zookeeper区别之前,我们先来了解一下这个知识,cap理论。1998年的加州大学的计算机科学家 Eric Brewer 提出,分布式有三个指标。Consistency,Availability,Partition tolerance。简称即为CAP。Eric 提出 CAP 不能全部达到,这就是CAP定理。接下来我们分别说下cap。CConsistency,一致性的原创 2020-06-10 16:20:42 · 645 阅读 · 0 评论 -
一文带你了解Spring核心接口Ordered的实现及应用
前言最近在看框架的时候,发现了这个接口,在此进行总结,希望能够给大家帮助,同时提升自己。order接口的大体介绍Spring框架中有这个一个接口,名字叫Ordered,联想我们在数据库中应用的Ordered,很容易想到它的含义就是用来排序。那么问题来了,Spring中为什么要定义这样一个排序接口呢。我们知道spring框架使用了大量的策略设计模式。策略设计模式意味着我们的同一个接口,会有大量的不同实现。那么这么多实现,先执行哪个,后执行哪个呢。这就产生了一个排序和优先级的问题,于是Ordered接口登原创 2020-06-08 15:07:01 · 2043 阅读 · 2 评论 -
你不知道的事---SringCloud的feign的继承特性
前言说起SpringChoud的feign大家用过的都说好。Feign是Netflix开发的声明式、模板化的HTTP客户端。对于我们微服务来说,微服务之间的api调用,使用feign来说是再方便不过的。本文先介绍一下,传统的feign的调用写法方式,再介绍我们的重点feign的继承特性。feign的继承特性有很多的好处,可以进行参数和方法的统一管理,一次修改,feign和具体的controller都变了。总之好处还是不少的。传统的feign的实现方式传统的feign是怎样的实现的呢,我们先通过s原创 2020-06-04 08:23:11 · 1003 阅读 · 0 评论 -
面试必问!Tomcat 优化篇!
前言Tomcat 服务器是一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet、JSP 程序的首选。相信大家对于 Tomcat 已经是非常熟悉了,本篇将介绍tomcat的常见优化。那么为什么要对tomcat进行优化呢。因为Tomcat默认参数是为开发环境制定,而非适合生产环境,尤其是内存和线程的配置,默认都很低,容易成为性能瓶颈。相信大家看完这篇博客,会有一定的收获。Tomcat连接器协议优化Tomcat 连接器的三种方式: bio、nio 和 ap原创 2020-06-02 22:14:27 · 1657 阅读 · 0 评论 -
一文带你学会基于SpringAop实现操作日志的记录
前言大家好,这里是经典鸡翅,今天给大家带来一篇基于SpringAop实现的操作日志记录的解决的方案。大家可能会说,切,操作日志记录这么简单的东西,老生常谈了。不!网上的操作日志一般就是记录操作人,操作的描述,ip等。好一点的增加了修改的数据和执行时间。那么!我这篇有什么不同呢!今天这种不仅可以记录上方所说的一切,还增加记录了操作前的数据,错误的信息,堆栈信息等。正文开始~~~~~思路介绍记录操作日志的操作前数据是需要思考的重点。我们以修改场景来作为探讨。当我们要完全记录数据的流向的时候,我们必然要记原创 2020-06-01 20:44:17 · 702 阅读 · 0 评论 -
一文带你学会国产加密算法SM4的java实现方案
前言今天给大家带来一个国产SM4加密解密算法的java后端解决方案,代码完整,可以直接使用,希望给大家带来帮助,尤其是做政府系统的开发人员,可以直接应用到项目中进行加密解密。画重点!是SM4哦,不是SM。哈哈,各位要在知识里遨游,不要想歪。正文开始~国产SM4加密解密算法概念介绍SMS4算法是在国内广泛使用的WAPI无线网络标准中使用的加密算法,是一种32轮的迭代非平衡Feistel结构的分组加密算法,其密钥长度和分组长度均为128。SMS4算法的加解密过程中使用的算法是完全相同的,唯一不同点在于原创 2020-05-21 18:37:48 · 9244 阅读 · 6 评论 -
瞬间教你学会使用java中list的retainAll方法
retainAll方法简介当我们有两个list集合的时候,我们可以使用retainAll方法求得两个list集合的子集。retainAll是Collection接口中提供的一个方法,各个实现类有自己的实现方式,我们这里介绍ArrayList的实现方式。retainAll源码深入可以看到collection接口中的retainAll方法,需要传入一个集合。boolean retainAll(Collection<?> c);进入arrayList的方法实现。可以看到如下代码原创 2020-05-16 16:30:01 · 8154 阅读 · 2 评论