————【java基础】
文章平均质量分 87
g-Jack
硕士毕业于北京交通大学,拥有6年开发工作经验,热爱编程,乐于分享,擅长微服务和中间件。
展开
-
synchronized详解
说说自己对于synchronized关键字的了解 synchronized关键字的三种使用 synchronized关键字的底层原理 JDK1.6之后对synchronized关键字进行的优化 Java对象头的组成 MarkWord的组成 锁升级的过程 偏向锁 偏向锁的适用场景 偏向锁的加锁 偏向锁的撤销 偏向锁的关闭 轻量级锁 轻量级锁的加锁 轻量级锁的解锁 轻量级锁的适用场景 锁的优缺点对比 总结 synchroni转载 2021-11-12 18:36:22 · 1174 阅读 · 0 评论 -
深入理解CAS
一、问题引入package com.jack.juc.cas;/** * @Description * @Author zhenghao * @Date 2021/11/11 22:11 **/public class CasTest { private volatile static int sum = 0; public static void main(String[] args) { for (int i = 0; i < 10; i+原创 2021-11-11 23:33:16 · 1450 阅读 · 0 评论 -
quartz集群部署方式解决方案
需求最近有一个项目需要从原来的单机部署修改为 集群方式部署,因为银行要求所有的的服务不能有单点的情况,所以我们需要 对该项目就行改造,别的需求改造还是比较容易的,但是项目中采用了quartz执行定时任务,所以我们需要改造这个地方,在本文中采用quartz自身支持的基于DB的集群部署方案。版本2.2.3创建DBsql文件地址:https://download.csdn.net/download/u013045437/15534461数据字段说明:https://blog.csdn.ne原创 2021-03-02 18:17:55 · 1949 阅读 · 3 评论 -
quartz-2.2.3集群部署使用到的数据库字段说明
1|0qrtz_job_detailsqrtz_job_details 存储每一个已配置的 jobDetail 的详细信息表字段 含义 sched_name 调度名称 job_name 集群中job的名字 job_group 集群中job的所属组的名字 description 详细描述信息 job_class_name 集群中个notejob实现类的全限定名,quartz就是根据这个路径到classpath找到该job类 is_durab.原创 2021-03-02 18:16:59 · 669 阅读 · 2 评论 -
java动态代理
1、引言最近在看一些技术源码的时候,发现很多地方都是动态代理, 真可谓是一切皆代理啊,所以我们需要弄明白代理模式这样在看源码的时候会好受很多。2、基本概念代理(Proxy)模式提供了间接访问目标对象的方式,即通过代理对象访问目标对象,这样做的好处是:可以在目标对象的功能上,增加额外的功能补充,即扩展目标对象的功能。这就符合了设计模式低开闭原则,即在对既有代码不改动的情况下进行功能扩展。举个我们平常非常常见的例子, 明星和经纪人就是被代理和代理的关系,明细出演活动的时候,明细就是一个目标对原创 2020-12-14 17:59:02 · 50405 阅读 · 1 评论 -
java8中的map与flatmap
问题假如我们有这样一个需求给定单词列表["Hello","World"],你想要返回列表["H","e","l", "o","W","r","d"],如果我们使用java实现这个需求,你会怎么实现呢?可能我们第一个想法是下面这种写法:words.stream().map(word -> word.split("")).distinct().collect(toList());但是如果我们运行会发现这样的写法是不正确的,这个方法的问题在于,传递给map方法的Lambda为每个单词返回原创 2020-12-06 20:55:52 · 53745 阅读 · 1 评论 -
java8新特性—— Lambda表达式
Lambda表达式用来替代匿名函数,可以将一个函数赋值给一个变量作为参数传入另一个函数,java的闭包原则:可推导就是可省略,比如说参数类型,返回值// 1. 不需要参数,返回值为 5 {}只有一行代码,可以省略() -> 5 // 2. 接收一个参数(数字类型),返回其2倍的值,()只有一个参数可以省略 x -> 2 * x // 3. 接受2个参数(数字),并返回他们的差值 (x, y) -> x – y // 4. 接收2个int原创 2020-12-06 19:18:06 · 50162 阅读 · 2 评论 -
JAVA实现接入企业微信报警
引言原来系统中报警采用短信和邮件方式,短信采用阿里的短信,近期由于 一些原因,项目中想将报警信息发送到 企业微信中,由于之前小编玩zabbix的时候实现过这个需求,所以认为通过java应该比较简单, 下面分享接入代码,直接上干货。一、创建应用1)、登录企业微信后台管理页面,选择应用管理2)、在最下面 创建应用这里面可以控制那些人收到报警信息,其中质量的Secret 就是...原创 2020-03-05 17:51:03 · 145716 阅读 · 0 评论 -
JVM之内存结构详解
对于开发人员来说,如果不了解Java的JVM,那真的是很难写得一手好代码,很难查得一手好bug。同时,JVM也是面试环节的中重灾区。今天开始,《JVM详解》系列开启,带大家深入了解JVM相关知识。 我们不能为了面试而面试,但是学习会这些核心知识你必定会成为面试与工作中“最亮的一颗星”。本系列首发于微信公众号“程序新视界”。下面,开启我们的第一篇文章《JVM之内存结构详解》。思考一下...原创 2019-11-27 23:40:17 · 39484 阅读 · 2 评论 -
快速定位线上CPU100%原因
引言最近项目部门反应有个系统特别卡顿,很多页面都打不开了,开发人员告诉我说最近没有进行代码升级,我登录到对应的服务器上执行了top命令,发现cpu飙升到100%,对于这种问题我们应该快速的定位到问题,否则会影响线上系统的正常作业。对于造成这种问题的可能原因,迅速的在头脑中闪过四种情况: 1、某个接口响应时间超长,并且可能被频繁调用 2、产生了过大的对象,造成频繁FGC 3...原创 2019-11-26 22:56:31 · 43163 阅读 · 6 评论 -
解决Spring工具类BeanUtils copyProperties方法复制null的问题
引言最近在解决问题时候发现,BeanUtils copyProperties 方法会将值为null的字段也进行复制, 这有时候会不能满足我们的需求,所以为了解决复制null问题, 小编对该方法就行了重写。其中重要的代码就是加入null判断,不为null时进行复制。*************************************下面工具类可以直接使用*************...原创 2019-11-24 22:59:41 · 44354 阅读 · 2 评论 -
java积累——数据库手动控制事务工具类
引言 在项目中对数据库操作的时候保证事务的完整性是非常重要的,尤其是一个功能中需要对数据库多次操作的时候更是需要小心,其实简单的说:只要保证多次操作使用一个Connection就可以使他们在一个事务中,但是数据库jdbc默认在执行完executeQuery、executeUpdate等方法以后会自动提交事务,这样我们多次操作的时候就不能保证事务的原创 2016-08-07 11:29:44 · 5344 阅读 · 14 评论 -
idea debug模式启动特别慢问题
工程没有做什么大的改动,近期Idea在debug模式下启动耗时800s +,run模式下200s。Idea debug模式启动的时候会有这样的提示: 方法断点会戏剧性的降低debug的速度。当时并没有在意,因为并不清晰这个方法断点是个什么概念。。。。。看了网友的帖子,才知道这个method breakpoints就是方法签名上的断点。idea的这个提示能否更人性化点,就叫method signat...原创 2018-05-18 10:20:59 · 8829 阅读 · 7 评论 -
java8 stream 操作map根据key或者value排序
引言最近小编自己一个人在负责一个项目的后台开发,其中有一部分是统计相关的功能,所以需要一些排序或者分组的操作,之前这种操作小编觉得还是比较麻烦的,虽热有一些现成的工具类,但是工具类的写法也是比较复杂的,但是如果使用java8 stream流的话就比较简单了,并且代码量会大大的减少,下面总结几个对map的操作。1、map 根据value排序Map<String,BigDecimal> m...原创 2018-06-23 09:51:38 · 47165 阅读 · 5 评论 -
List中根据某个实体的属性去重或者排序
引言最近在在项目中对list的一些操作还是比较多的,其中有很多内置的工具类都很强大,但是这些都是对于基本类型的操作,但是我们在项目中操作最多的是我们自定义的对象,所以一些操作还是需要我们自己来封装的,下面以排序和去重为例子。一、去重实体如下:public class RobotCase implements Serializable { /** * 案件id */ ...原创 2018-06-19 20:58:06 · 17271 阅读 · 10 评论 -
List 集合去除 null 元素
在 JavaWeb 开发过程中,我们有时候会遇到 jsp 以集合的形式向后台传输数据,这时候如果集合中有几个 null 元素,我们后台就必须对数据进行非空处理,总结了 2 种处理这种情况的方法,方便参考。一)使用 for 循环处理集合思路:这种处理方式是把要处理的集合进行遍历,取出其中不为空的元素,添加到新的集合中,代码如下:public static <T> List<T>...原创 2018-06-27 18:33:28 · 4517 阅读 · 1 评论 -
记录一次调线的心路历程
引言 最近小编刚介入了一个上线三、四个月的项目,我直接负责调线上用户反馈的问题,主要的问题是最近一些数据频繁出现问题,用户已经还款,但是系统不显示,系统每天早上异常的卡。由于公司一些人事变动,之前参与这个项目开发的后台人员都撤了,现在交到我这里负责,还有很多新需求,我想尽快的close掉这个项目,新需求就直接交给我另一个同事负责开发,我直接介入线上问题,下面总结一下这一周来踩过的...原创 2018-08-12 12:12:56 · 642 阅读 · 6 评论 -
centos 快速设置 swap分区
linux centos 如何设置swap大小?swap的值都是安装系统的时候设置好的,一般设置为内存的两倍大小。使用过程中发现swap值过小只能添加。用free -m 命令查看当前swap大小1、使用下面的命令创建2G的空间dd if=/dev/zero of=/var/swap bs=1024 count=2048000if 表示infile,of表示outfile,bs...原创 2018-08-28 22:26:54 · 5916 阅读 · 2 评论 -
如何使用 Idea 远程调试 Java 代码
引言最近有一个语音质检项目线上环境出现问题了,因为整个项目的核心是解析第三方生成的xml文件,所以这些文件都在服务器上,本地是没有这些文件的,所以如果我们想在本地debug,需要申请将文件下载下来,非常的麻烦,所以只能通过在代码中添加log来逐步排查问题,每次添加都需要部署,非常的浪费 时间。所以小编心想如果可以直接debug线上就好了,果然网上有类似的教程,通过idea直接debug线上,下...原创 2018-08-25 13:28:15 · 7209 阅读 · 10 评论 -
【JDK8之旅】——Optional
我们知道 Java 8 增加了一些很有用的 API, 其中一个就是 Optional. 如果对它不稍假探索, 只是轻描淡写的认为它可以优雅的解决 NullPointException 的问题, 于是代码就开始这么写了Optional<User> user = ...... if (user.isPresent()) { return user.getOrders(); ...原创 2018-10-24 16:45:32 · 1425 阅读 · 2 评论 -
线上Java程序导致服务器CPU占用率过高的问题排除过程
1、故障现象客服同事反馈平台系统运行缓慢,网页卡顿严重,多次重启系统后问题依然存在,使用top命令查看服务器情况,发现CPU占用率过高。2、CPU占用过高问题定位2.1、定位问题进程使用top命令查看资源占用情况,发现pid为14063的进程占用了大量的CPU资源,CPU占用率高达776.1%,内存占用率也达到了29.8%[ylp@ylp-web-01 ~]$ topto...转载 2018-11-19 14:49:21 · 1166 阅读 · 1 评论 -
jasypt与Spring结合使用解决配置文件中数据库密码加密问题
引言最近公司给银行做了一个项目,在进行本地化部署的时候,银行的科技部门对我们的源码进行了安全扫描,在检测报告中有这么一个问题,要求我们的数据库密码不能以明文的 形式出现在配置文件中,所以小编需要解决这个问题,但是第一个想法就是,自己重写一个配置文件加载的那个方法,这样我们就可以在拿到密文以后,首先解密然后在使用。但是查询了一些资料以后发现,这个问题已经有成熟的解决方案了,就是利用jasyp...原创 2019-08-14 11:23:01 · 4249 阅读 · 0 评论 -
dubbo-source error getPropertyValue
因为项目中服务之间都是通过dubbo来调用的,今天我给负责任务的服务提供了一个接口,接口名称为 getRankCount(),我觉得很简单的一个接口,但是提供了以后,服务报错:查了一些资料说可能是dubbo版本问题,这种答案基本上否定,因为之前项目是正常运行的,第二种答案就是存在getxxx()的方法被错误识别。我看了一下代码,的确是我提供的服务接口是getRankCount()以get开头并且没...原创 2018-03-30 17:02:49 · 3383 阅读 · 3 评论 -
java 8 Hashmap深入解析 —— put get 方法源码
每个java程序员都知道,HashMap是java中最重要的集合类之一,也是找工作面试中非常常见的考点,因为HashMap的实现本身确实蕴含了很多精妙的代码设计。 对于普通的程序员,可能仅仅能说出HashMap线程不安全,允许key、value为null,以及不要求线程安全时,效率上比HashTable要快一些。稍微好一些的,会对具体实现有过大概了解,能说出HashMap由数组+链表+RBT转载 2017-08-28 20:17:40 · 2256 阅读 · 7 评论 -
springMVC学习总结
引言 现在springMVC这个框架是比较流行的,我们在项目中使用的也是比价多的,但是在项目中的使用并不能很全面的了解springMVC这个框架的全貌,所以小编就系统的学习了一下这个知识点,下面是一些总结,和大家分享: 原图请点我 上面总结了springMVC的基本知识点,下面在分享一下几个重点的知识点: springMVC 处理请求流原创 2017-07-29 20:02:12 · 2723 阅读 · 18 评论 -
JDK与jre你知道多少?
最近在学习JVM的时候遇到了下面这张图,引发了小编对JDK和JRE的思考,这两个东西到底分别起到什么作用? 下面先来看一张图: 我们在上图可以看到在整个java平台逻辑结构中,JDK和jre明显处在不同的位置,这就可以说明我们他们在正java程序的生命周期中起着不同的作用,下面就简单的来总结一下他们之间的不同: 定义原创 2016-10-23 23:19:45 · 4823 阅读 · 31 评论 -
servlet学习总结(二)—图片下载和读取属性文件
引言 在上一篇博客中给大家介绍了一些servlet中的学习收获,在这篇博客中接着给大家分享servlet中图片的下载和属性文件的读取。 先看一下整个demo的目录结构; 1、图片的下载 package com.itheima.sc;import java.io.File;原创 2016-10-10 21:34:55 · 840 阅读 · 19 评论 -
servlet 学习总结
最近在学习项目的底层的时候发现有很多功能的封装都是基于servlet进行的,但是有一些自己并不是非常的明白,所以小编再次回过头来对servlet的知识进行了学习和总结,在这记录下学习收获和大家共勉。 1、什么是servlet? Servlet是一个运行在服务端的java小程序,通过HTTP协议用于接收来自客户端请求,并发出响应。 2、Servlet中的方法 public void service(ServletRequest req,ServletR原创 2016-10-09 23:01:01 · 1482 阅读 · 18 评论 -
解决eclipse中tomcat提示404问题
引言 在配置项目环境的时候遇到这么一个问题,在jdk maven tomcat都配置完成以后,在浏览器中输入:localhost:8080来准备启动tomcat的时候,提示404错误。重新检查所有的配置仍然没有解决问题,其实在这我们习惯性的忘记了检查Tomcat服务器的server location的配置。因为之前我们使用的myeclipse帮助我们开发人员原创 2016-09-08 09:39:57 · 55028 阅读 · 32 评论 -
java积累——apache commons fileupload 实现文件上传
引言 之前在做.net项目的时候经常会遇到文件上传和下载的需求,现在在java中同样有了这样的需求,其实做法和.net差不多都是采用了第三方的东西来实现,今天就利用apache commons fileupload来实现文件的上传。 jar包引入 1、commons-fileupload-1.1.1.jar需要引入 2、co原创 2016-08-20 20:14:58 · 4453 阅读 · 22 评论 -
java积累——load-on-startup在web.xml中的作用
如果没有设置loadOnStartup,则第一次请求的时候实例化 分三种情况: loadOnStartup < 0 即负数的情况下,web容器启动的时候不做实例化处理,servlet首次被调用时做实例化这种情况和没有设置loadOnStartup是一样的。 loadOnStartup > 0 web容器启动的时候做实例化处理,顺序是由小到大,正整数小的先被实例化 loadOnStartup = 0原创 2016-07-17 22:08:11 · 805 阅读 · 2 评论 -
java积累——dom4j读取xml文件
引言 xml是我们在项目开发中经常用到的一个东西,我们将一些比较容易改变的东西配置在xml文件里面,方便以后改变,尤其是我们的系统部署以后。那么我们就需要掌握一门技术来读取xml文件中的内容,在java学习中小编采用dom4j来是先xml文件的读取,dom4j就是一个读取java的xml文件非常好的API,里面非常多的用法需要我们查询他的官方文档原创 2016-08-07 09:44:59 · 3606 阅读 · 14 评论 -
JAVA菜鸟成长记——JNDI
JNDI简介 JNDI(Java Naming and Directory Interface,Java命名和目录接口)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI服务供应接口(SPI)的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务原创 2016-01-15 11:30:49 · 2756 阅读 · 17 评论 -
J2EE的常用十三规范——java菜鸟成长记
引言 通过这一段时间的学习,美其名曰是看完了j2ee的学习视频,然而并没有什么卵用,视频中将的都是个什么东西啊,反正我是没有看明白,无奈,只能是一边看视频,一边看书,一边百度,其实起到作用最大的还是百度,有什么不清楚的名词什么的,都是靠这个东西来解决的。视频中最为关键的就是j2ee中的十三个规范,这也是学习视频的一个最为重要的目的,既然这样,下面就来总结一下jav原创 2016-01-16 11:46:15 · 1450 阅读 · 28 评论 -
spring创建bean的三种方式
引言 近几年在java web项目中到处都是spring的身影,的确spring的出现给我的编程带来了翻天覆地的变化,尤其是在AOP出现以后spring的地位更是独占鳌头了,所以对于java小白的小编来说spring是个学习的必经之路,下面就现在总结一些,spring 创建bean的三种方式 1、调用构造器来创建bean 首先在在application.xml文件中配置下面代码: <bean id="helloWorld" class="com.itheim原创 2016-10-16 20:50:27 · 2322 阅读 · 22 评论 -
Could not resolve archetype org.apache.maven.archetypes:maven-archetype-quickstart
在用eclipse创建maven项目的时候,选择Archetype为下面图片上红框中的类型是,提示下面的错误 如果开始在All Catalogs下面是一片空白,我们可以试着先选择其他的Catalog,然后在选择All Catalogs. 错误如下: 我们仔细看上面的错误提示会发现,造成错原创 2016-11-13 20:56:14 · 2481 阅读 · 24 评论 -
【RabbitMQ】——centos7安装rabbitmq教程
引言 消息队列现在在互联网项目中应用的还是非常多的,在接下来的博客中小编会深入的了解MQ的实现过程,在此博客中将介绍如何在centos7下面安装MQ以及遇到的问题。 第一步:安装Erlang 因为rabbitMQ是Erlang语言编写的,所以我们首先需要安装Erlang rpm -Uvh http://www.rabbitmq.com/releases/erlan原创 2017-05-09 23:00:15 · 10939 阅读 · 23 评论 -
springBoot 由jar包转换为war包
引言 我们都知道springBoot中已经内置了tomcat,是不需要我们额外的配置tomcat服务器的,但是有时这也可能是我们的一个瓶颈,因为如果我们需要对tomcat做集群或者一些优化的话是非常不方便的,所以我们仍然需要将springBoot的项目部署到外在的tomcat中,下面小编就介绍一下如何将jar包转换成war包。 第一步、将SpringBoot的项目的打包方式设置原创 2017-05-08 23:03:55 · 13249 阅读 · 15 评论 -
postman测试post请求参数为json类型
引言 Postman 是一个用来测试Web API的Chrome 外挂软件,可由google store 免费取得并安装于Chrome里,对于有在开发Web API的开发者相当有用,省掉不少写测试页面呼叫的工作,通常我们看到的使用情境多数是直接呼叫Web API而未随着Request发送相关所需参数,本篇就来说明如果我们想要在呼叫Web API时一并夹带JSON数据时,该如何使用Post原创 2017-05-07 19:33:27 · 73693 阅读 · 22 评论 -
maven手动将本地jar包加入到本地maven仓库
引言 你以为的就是你以为的,这句话有把小编坑了一顿啊,昨天在搭建项目的时候,利用maven管理jar包,但是在应用hibernate核心包的时候,小编的项目中需要用到3.6.10版本,当写好配置文件以后就一直报错,后来发现本地仓库没有对应的jar包,但是可能由于网络的原因在公司的私服上面又下载不下来,于是小编手动的到私服上面下载了一个单独的jar包放在对应的路径下面,但是还是一直报错。换成4原创 2017-01-21 16:50:03 · 9152 阅读 · 16 评论