自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

转载 HashMap put操作都发生了什么

大家都知道,HashMap 的底层在 JDK 1.7 的时候为数组+链表,在JDK 1.8的时候为数组+链表+红黑树。那么当我们在向HashMap中添加元素时,HashMap里面究竟发生了什么呢?让我们一起来一探究竟吧!首先,我们一起来看看JDK 1.8中put的源码:public V put(K key, V value) { //对传入的key做hash return putVal(hash(key), key, value, false, true); }final V

2021-01-08 15:24:06 712

原创 2021-09-22

1、dataX安装及基本使用简介:多种数据库数据互导 同步工具框架设计:reader writer framework工作原理:将job 单个作业划分为若干个task schedule 将task组成组并发执行前置要求:JDK python使用示例:编写json脚本、执行脚本D:\JobSoftware\DataX\datax\bin>python datax.py D:\JobSoftware\DataX\datax\job\jobtest.json2.Sprin

2021-09-22 19:58:12 169 1

原创 学习笔记day12 synchronized底层实现及锁升级机制

原博客:https://blog.csdn.net/weixin_40394952/article/details/118693945一、synchronized使用方法1、修饰实例方法,对当前实例对象this加锁2、修饰静态方法,对当前类的class对象加锁3、修饰代码块,指定加锁对象,对给定对象加锁代码示例:package cn.mrhan.java.thread.synchronize;/** * @Author hanYu * @Date 2021/8/24 *

2021-08-24 18:31:22 157

原创 学习笔记day10(CAS原理)

原博客地址:https://blog.csdn.net/qq_37113604/article/details/815827841、什么是CAS?CAS加volatile关键字是实现并发包的基石。没有CAS就不会有并发包,synchronized是一种独占锁、悲观锁,java.util.concurrent中借助了CAS指令实现了一种区别于synchronized的一种乐观锁。核心是冲突检测和数据更新CAS操作包含三个操作数-内存位置、期望值、和新值,如果内存位置的值与期望值匹配那么处理器会自

2021-08-23 19:54:09 162

原创 9(记一次开发中的小bug)

今天在开发过程中,测试环境报了一个错误,就是通过spring容器获取某个类获取不到,报NoSuchBeanDefinitionException错误,伪代码如下:public interface RepayMessageService { void notifyRepayResult(String message);}public abstract class AbstractRepayMessageHelper implements RepayMessageService ...

2021-08-12 17:50:55 195

原创 学习笔记day07(GC回收机制+JVM优化)

一.java内存1)私有内存区:伴随线程的产生而产生,一旦线程终止,私有内存区也会自动消除2) 程序计数器 :指示当前程序执行到了哪一行,执行java方法时记录正在执行的虚拟机字节码指令地址3)虚拟机栈:用于执行java方法,栈帧存储局部变量表4)Java堆:java虚拟机管理的内存中最大的一块,所有线程共享,几乎所有的对象示例和数组都在这里分配内存,GC主要就是在Java堆中进行的。 堆内存又分为:新生代(新生代又分为Eden80%,Survivor20%)和老年代(Old),并且..

2021-08-05 18:56:13 253 1

原创 学习笔记day06(多线程-多核并发缓存架构+JMM)

一、多核并发缓存jia'g

2021-07-30 14:50:52 126

原创 学习笔记day05(消息队列)

一、消息队列1、消息队列概述消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ2、消息队列应用场景1)、异步处理传统的串行或者并行处理方式并发量、吞吐量、响应时间会有瓶颈,引入消息队列后,将不是必须的业务逻辑,异步处理,如发短信2)、应用解耦比如借据查询的订单状态为成功后需要将订单信息

2021-07-29 19:35:27 260

原创 学习笔记day04(反射、泛型、序列化)

一、反射1.什么是反射?将类的各个部分封装成其他对象,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制2.java代码在计算机中会经历三个阶段源代码阶段:java文件经过编译在硬盘中生成字节码文件 如Student.class类对象阶段:通过类加载器将class文件中的成员变量、构造方法、成员方法加载到内存中运行时阶段:可以创建对象和调用对象里的方法了..

2021-07-27 19:01:42 142

原创 学习笔记day03(apollo)

一、apollo在项目中的应用1、pom引入依赖(此处为公司内部的api) <dependency> <groupId>com.bestpay.framework.apollo</groupId> <artifactId>apollo-client</artifactId> <version>1.3.0.6</version> &lt..

2021-07-23 17:59:19 236

原创 学习笔记day02(线程池ThreadPoolTaskExecutor+流处理之flatMap)

一、ThreadPoolTaskExecutor @Autowired @Qualifier(value = "contractProcessExector") private ThreadPoolTaskExecutor contractProcessExector;@Configurationpublic class ExecutorConfig { @Bean("contractProcessExector") public ThreadPoolTaskExecutor con

2021-07-22 16:10:17 224

原创 学习笔记day1(java对象克隆)

一、java克隆的作用存在一个对象A,此对象中已经有一些初始值,现在我们需要对象和对象A有同样的初始值,如果我们使用Ab = a的方式则改变b引用指向的对象的时候 a的值也会改变因为他们指向同一个对象,而如果使用A b = new A()的方式,此时就不能保证和a对象有相同的初始值。所以此时我们需要使用clone()方法二、深克隆和浅克隆的区别?当一个对象中仅仅有String、int等这些基本类型的变量的时候,使用浅克隆没有问题,但是当一个对象存在引用类型的变量的时候,就需要使用深克隆了..

2021-07-21 17:37:08 60

原创 MongoDB基础

一、NOSQL简介:

2021-06-03 18:39:43 282

原创 SQL优化(二)

一、优化示例:假设有复合索引 idx_a1_a2_a3_a4explain select a1,a2,a3,a4 from test where a1 = 1 and a2 = 2 and a3=3 and a4=4—使用了全部的符合索引explain select a1,a2,a3,a4 from test where a1 = 1 and a2 = 2 and a4=3 order by a3 --a4 因为跨列使用 造成了该索引失效 需要回表查询 因此是using whereexplai

2021-05-17 19:31:40 324 2

原创 SQL优化(一)

一、MySql启动问题、配置文件1.Mysql主流版本 5.x验证 mysql --version启动:service mysql start关闭: service mysql stop重启: service mysql restart设置密码 /user/bin/mysqladmmin -u root password xxx登录: mysql -u - root -p数据库存放目录:ps -ef|grep mysqlmysql字符编码 show variables like ‘

2021-05-11 19:13:33 127

原创 MongoDB学习笔记

一、mongoDB的安装及常用命令1.安装和环境变量mongodb.com/try/download/community?tck=docs_server安装目录:C:\Program Files\MongoDB\Server\4.4\bin2.常用指令新建或打开数据库 mongod --dbpath D:\JobSoftware\MongoDB\db端口 27017连接 mongoshow dbs创建新的数据库 use test显示所有集合 show collections在名为use

2021-05-10 20:18:59 69

原创 SpringBosent框架

1.代码示例/** * 查询合同释放额度历史查询 * * @param dctx 适配器 * @param context 上下文 * @return 结果 * @throws BusinessException 异常 * @author hanyu * @see [类、类#方法、类#成员] */ public static Map<String, Object> queryContract

2021-04-25 21:02:01 1906 3

原创 代码优化(工厂+策略+模板设计模式)

一:优化前的代码public static void noDesign(String name){ if(name.equals("张三")){ //....业务逻辑 System.out.println("张三完成任务A"); }else if(name.equals("李四")){ //....业务逻辑 System.out.println("李四完成任务A"); }else if(name.equals("王五"

2021-03-12 18:46:09 291 2

原创 学习笔记之索引

1.索引类型1)全文索引 : 为了解决where name like 这类针对文本的模糊查询效率较低的问题2)HASH :唯一、类似键值对 适合作为索引HASH索引可以一次定位,不需要像树索引那样逐层查找,因此具有极高的效率,但是这种高效是有条件的只再=和in条件下高效,对于范围查询、排序及组合索引仍然效率不高3)BTREEBTREE索引就是一种将索引值按一定的算法,存入二叉树数据结构中,每次查询都是从书的入口root开始 一次遍历node,获取leaf 这是Mysql里默认和最常用的索引类

2021-03-08 20:21:03 102 1

原创 Dubbo框架学习(一)

一、基本概念1.什么是分布式系统?分布式系统是若干独立计算器的集合随着互联网的发展 网站应用的规模不断扩大,常规的垂直应用架构已无法应对2.应用架构的发展演变1)单一应用架构不易扩展,协同开发不容易,增大服务器的压力2)垂直应用架构将单一应用拆分成互不干扰的几个小应用,易于分工合作、扩展。问题:没有实现界面和业务逻辑的实现分离应用不可能完全独立,大量的应用之间需要交互3)分布式服务架构RPC:远程过程调用 不同服务器之间的服务调用分布式服务框架:dubbo 解决远程调用问题4

2020-11-20 17:51:27 196 1

原创 Redis学习笔记

1.什么是Redis?redis是C语言开发的一个开源的高性能键值对数据库支持的键值数据类型:字符串类型 哈希类型 列表类型 集合类型 有序集合类型redis的应用场景:缓存 :数据查询 短链接 新闻内容 商品内容等聊天室的在线好友列表任务队列:秒杀 抢购 等应用排行榜网站访问统计分布式集群架构的session分离2.hash一致性算法在hash取余算法基础上发展而来的hash取余算法 将key值对服务器节点个数取余hash取余算法有个极大的缺点,如果有节点发生变化时(集群中经常

2020-10-12 22:12:53 183

原创 DataX工具的基本使用

1.简介:多种数据库数据互导 同步工具为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。2.框架设计Reader:Reader为数据采集模块,负责采集数据源的数据,将数据发送给Framework。Writer: Writer为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。Framework

2020-10-02 19:46:49 1109

原创 JVM优化-垃圾回收

一、垃圾回收简介1.什么是垃圾回收?程序的运行必然需要申请内存资源,无效的对象资源如果不及时处理就会一直占用内存资源 最终导致内存溢出 所以对内存资源的管理是非常必要的2.C语言的垃圾回收new关键字申请内存资源 通过delete关键字释放内存资源3.java语言的垃圾回收GC 自动回收机制 自动垃圾回收的算法二、垃圾回收的常见算法引用计数法、标记清除法、标记压缩法 复制算法 分代算法1、引用计数法原理:假设有一个对象A,任何一个对象对A的引用,那么对象A的引用计数器+1,当引

2020-09-29 20:16:52 94

原创 JVM优化-jstack的使用-死锁问题

一、jstack的使用有些时候我们需要查看jvm中的线程执行情况 比如 发现服务器的CPU的负载突然增高了 出现了死锁 死循环等 该如何分析由于程序是正常运行的,没有任何的输出,从日志方面也看不出什么问题,所以就需要看下jvm的内部线程的执行情况,然后再进行分析查找出原因。这个时候,就需要借助于jstack命令了,jstack的作用是将正在运行的jvm的线程情况进行快照,并且打印出来:用法:jstack 二、java中线程状态1)初始状态(NEW):创建一个Thread对象 但还未调用s

2020-09-28 20:33:11 646

原创 JVM优化-内存溢出的定位与分析(MAT工具的使用)

通过MAT工具对dump文件进行分析1.MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁阻止了垃圾收集器的回收工作,并可以通过报表直观的查看到可能造成这种结果的对象。下载地址:https://www.eclipse.org/downloads/download.php二、内存溢出

2020-09-27 21:04:52 607

原创 JVM优化(一)

1.为什么要对JVM做优化?解决应用卡住 日志不输出 程序没有反应 服务器CPU负载突然升高 分配线程数量 等问题2.三种参数类型java -help 查询标准参数3.常用命令java -version 查看jvm版本java -x 查看非标准参数-xx参数也是非标准参数 主要用于jvm的调优和debug操作如:-XX:+DisableExplicitGC 表示禁用手动调用gc操作,也就是说调用System.gc()无效-Xms与-Xmx分别是设置jvm的堆内存的初始大小

2020-09-24 20:56:41 251 1

原创 怎样理解程序的耦合和解耦?

一、什么是程序的耦合?耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。耦合性存在于各个领域,而非软件设计中独有的,但是我们只讨论软件工程中的耦合。在软件工程中,耦合指的就是就是对象之间的依赖性。对象之间的耦合越高,维护成本越高。因此对象的设计

2020-09-03 17:15:08 771

原创 Mybatis一级缓存、二级缓存

一、概述像大多数的持久化框架一样,Mybatis 也提供了缓存策略,通过缓存策略来减少数据库的查询次数,从而提高性能。Mybatis 中缓存分为一级缓存,二级缓存。二、一级缓存一级缓存是 SqlSession 级别的缓存,只要 SqlSession 没有 flush 或 close,它就存在。证明一级缓存的存在:1.编写持久层接口/** * 根据id查询用户信息 * @param userId * @return */User findUserById(Integer userId);

2020-08-31 20:45:37 130

原创 自定义设计一个Mybatis框架

1.创建数据库、表、实体类、持久层接口、配置文件create database study_mybaitsCREATE table `USER`(id int(10),username varchar(20),birthday date,sex varchar(20), address varchar(20))insert into user VALUES (1,'张三',DATE('1994-08-29'),'男','安徽省芜湖市')package com.mrhan.domain;impo

2020-08-26 19:43:40 166

原创 java开发面试题45道(中级)

1.maven 打包的时候需要配置什么才能将包打进去?2.描述下如何反转链表3.如何用 java 的写一个 web 应用,操作数据库,要注意什么4.如果多个应用写同一份儿文件,如何才能够不出错误?5.spring 的 aop 是怎么实现的,用最通俗的话讲明白6.cpp 了解多少,讲讲指针和引用的区别7.智能指针的实现原理8.多态底层是如何实现的9.epoll 这些有印象么10.IO 模型都有哪些11.写一个代码比较版本号,比如 1.1.0 和 1.0.112.内核态和用户态区别13.

2020-08-18 16:44:55 604

原创 spring Controller 单例是否线程安全?

controller默认是单例的,单例的是线程不安全的下面是一个简单的案例:一、先将idea设置为热部署1.在pom文件中导入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional&

2020-08-18 15:39:41 1004

原创 三张图搞懂工厂模式

2020-08-12 10:32:07 146

原创 springCloud简单Demo(二)

一、Hystrix断路器原理:package cn.tedu.controller;import cn.tedu.feign.HelloFeign;import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annota

2020-08-07 16:59:35 120

原创 springCloud简单Demo(一)

一、创建Eureka服务端1、引入依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd

2020-08-06 14:29:32 850

转载 常见java集合面试题

1.ArrayList VS LinkedList1)ArrayList是用一个可扩容的数组来实现的,LinkedList是用链表实现的2)数组和链表之间最大的区别就是数组是可以随机访问的而链表只能从头开始逐个遍历3)两者在增删改查操作上的区别在改查这两个功能上因为数组能够随机访问所以ArrayList效率高在增删这两个功能上如果不考虑找到这个元素的时间数组因为物理上的连续性当要增删元素时在尾部还好但是其他地方就会导致后续元素都要移动所以效率极低 而...

2020-08-03 10:32:43 879

原创 zookeeper简述

https://blog.csdn.net/java_66666/article/details/81015302概念:分布式服务框架 是Apache Hadoop的一个子项目 它主要是用来解决分布式应用中经常遇到的一些数据管理问题 如 统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理简单来说: zookeeper = 文件系统+监听通知机制能做什么?可以实现诸如分布式应用配置管理、统一命名服务、状态同步服务、集群管理等功能 我们这里拿比较简单的分布式应用配置管理为例说明假设我

2020-07-09 20:56:22 212

原创 记录一位java实习生的面试,这些问题你们都会回答吗(转)

1.单例模式的实际应用?单例模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点应用:如回收站、网站的计数器使用场景:1.需要生成唯一序列的环境 2.需要频繁实例化然后销毁的对象3.创建对象时耗时过多或者耗资源 过多,但又经常用到的对象4.方便资源互相通信的环境优点:1.实现了对唯一实例访问的可控 2.对于一些需要频繁创建和销毁的对象来说可以提高i系统的性能缺点:1不适用于变化频繁的对象2.滥用单列将带来一些负面问题 如为了节省资源将数据库连接池对象设计为单例类 可能会导致共享连

2020-07-09 17:24:53 300

原创 缓存雪崩、缓存穿透、缓存击穿

1.缓存处理流程前台请求 后台先从缓存中取数据 取到直接返回结果 取不到时从数据库中取,数据库取到更新缓存 并返回结果数据库也没取到 则直接返回空结果2.缓存穿透描述:缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,会导致数据库压力过大解决方案:1)接口层增加校验,对用户输入做基础校验 拦截等2)从缓存取不到的数据 如果从数据库也查不到 这时可以将 存为 key-null 缓存有效时间可以设置短点这样可以放值攻击用户反复用同一个Id暴力攻击3.缓存击穿描述:缓存击穿是

2020-07-09 09:53:39 102

原创 Mysql基础知识

1.Mysql的基本架构 未命中 ------>优化器--------->执行器---->引擎客户端—>连接器—>查询缓存—>命中缓存----->返回结果2.连接器是啥我们要进行查询 第一步就是先去连接数据库 这个时候就是连接器和我们对接负责跟客户端建立连接 获取权限 维持 和管理连接连接的时候会经过TCP握手 然后身份 验证 验证OK后 就连上了Mysql服务了3.怎么查看空闲连接列表show processl

2020-07-08 09:19:03 118

转载 三大工厂模式的代码实现

简单工厂模式、工厂方法模式、抽象工厂模式,都是属于创建型设计模式。严格上来说,简单工厂模式不属于23设计模式之一,因为它违背了开闭原则。这三种设计模式,名字都包含“工厂”二字,如果没有认真地对它们的设计思想、代码进行认真比较,还真的很难区分出究竟是哪一种模式,很多开发者很容易混淆。接下来,我就将这三种设计模式放在一篇文章,用Java来实现它们并放在一起进行比较。天气很炎热,相信很多人都有着去买跟冰激凌吃的冲动,今天,我们就以冰激凌为例子,来学习这三种设计模式。不过,为了弄清这三种设计模式,可能有些描述和类

2020-07-03 13:30:46 212

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除