自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 int 和 Integer有什么区别,Integer 有哪些函数方法

【基本数据类型对象包装类JDk1.5以后的新特性】——【自动拆箱,装箱】简化书写。Integer i = new Integer(5);基本数据类型对象包装类,对象创建的简化写法Integer i = 5;1. Integer i = 5;(其实在内存中也是通过 new Integer(5)这种方式创建的!)这种方式成为——自动装箱,Integer.valueOf(5)自动完成了对象创建的动作。2. 在进行 i = i + 5,运算时——= 右边的i 会先转成基本数据值(自动拆箱)i.int

2021-05-18 00:03:26 1437

原创 Spring-aop 全面解析(从应用到原理)

Spring-aop 全面解析(从应用到原理)写了很多篇文章了,但写的文章大家都反映平平(但我却感觉是自己的呕心沥血之作),是时候改变一下写作技巧了,希望能通过一种愉快的方式使大家学到最多的知识。以前写的文章直接上源码分析,这会让不了解的人看着很累,得不到想要的效果。本篇文章则从背景-原理-使用-源码的顺序为大家解析。如果不希望深入了解,看到“使用”这个层次就足够了。希望大家能愉快地看完这篇文章,多少给点反馈呗一、AOPAOP 产生的背景“存在即合理”,任何一种理论或技术的产生,必然有它的

2020-09-15 11:02:28 426 1

原创 java 并行化 处理-2

1.前言想必热爱游戏的同学小时候,都幻想过要是自己要是能像鸣人那样会多重影分身之术,就能一边打游戏一边上课了,可惜漫画就是漫画,现实中并没有这个技术,你要么只有老老实实的上课,要么就只有逃课去打游戏了。虽然在现实中我们无法实现多重影分身这样的技术,但是我们可以在计算机世界中实现我们这样的愿望。2.计算机中的分身术计算机中的分身术不是天生就有了。在1971年,1971年,英特尔推出的全球第一颗通用型微处理器4004,由2300个晶体管构成。当时,公司的联合创始人之一戈登摩尔就提出大名鼎鼎的“摩尔定

2020-09-08 11:35:31 705

原创 spring 怎么实现并行化 查询代码

让我们先看个图, Taobao的PDP(Product Detail Page)页.打开Chrome Network面板, 让我们来看taobao是怎么加载这个页面数据的. 根据经验, 一般是异步加载的, 要么是XHR,要么就是js(jsonp), 你应该很快可以找到还能看到这个接口的性能神奇的是, taobao竟然在一次请求中拉下了整个PDP页的完整数据, 而且服务端处理耗时不到125ms首先, 这么做有什么好处?前后端开发对接简单 在...

2020-09-08 10:53:53 605

原创 stream 方法过滤条件的使用

@Data@AllArgsConstructorpublic class User {private Long id; // idprivate Integer age; // 年龄private Byte gentle; // 性别private String name; // 名字private Integer rank; // 排名}User user0 = new User(1L, 18, (byte...

2020-09-01 16:06:31 6954

原创 volatile 伪共享问题

伪共享 false sharing,顾名思义,“伪共享”就是“其实不是共享”。那什么是“共享”?多CPU同时访问同一块内存区域就是“共享”,就会产生冲突,需要控制协议来协调访问。会引起“共享”的最小内存区域大小就是一个cache line。因此,当两个以上CPU都要访问同一个cache line大小的内存区域时,就会引起冲突,这种情况就叫“共享”。但是,这种情况里面又包含了“其实不是共享”的“伪共享”情况。比如,两个处理器各要访问一个word,这两个word却存在于同一个cache line大小的区域里,.

2020-08-20 09:43:45 834

原创 synchronized 的原理

synchronized修饰方法更加准确的说法应该是修饰实例方法,而不包括静态方法。关键字synchronized取得的锁都是对象锁,而不是把一段代码或方法当作锁。原因在于,要调用一个实例方法必须要new一个对应的实例对象,通过此实例对象才能访问实例方法。要实现同步,那么不同线程的锁必须是访问的同一个对象。这也是从设计角度来讲,为何notify, wait等和锁相关的方法定义在Object这个类中,而非Thread类中的原因之一。如果多个线程访问多个对象,则JVM会创建多个锁。牢记:只有共享资.

2020-08-15 17:03:46 184

原创 机器学习大数据学习路线总结

机器学习大数据学习路线总结八月 18, 2019 -机器学习&大数据前言好久好久好久没有更新过博客的内容了,这次把前一段时间给浪潮俱乐部的新成员总结的机器学习和大数据学习路线总结放上来水一篇博客,不管怎么说也算是给其他人一个参考吧。如果你觉得这篇文档的内容有失偏颇,请联系BB酱进行修改。写在前面欢迎大家来到西电浪潮俱乐部,相信对于你们中的大多数同学来说,来到俱乐部是因为被人工智能,大数据的名头所吸引,想要学习相关技术,并且在未来能够有机会从事这些领域的研究或工作。那么,希望BB.

2020-06-29 17:29:54 674

原创 java8 Stream 使用教程

为什么需要 StreamStream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk

2020-06-12 14:21:55 1368

原创 Arthas watch 命令

Arthas watch 命令使用指南阿里巴巴云原生小助手2020-06-1085浏览量简介:Arthas 是我很喜欢的一款 Java 领域的开发调试工具。每次测试遇到问题的时候,当别人为了加一条日志而重发代码,我都会欣慰地拿出我的 Arthas 并且告诉他们:少年,你不用再为了加日志就重发代码而烦恼了。Arthas,你值得拥有。作者 | AgentdArthas watch 命令使用指南Arthas 是我很喜欢的一款 Java 领域的开发调试工具。每次测试遇到问题的时候,当别...

2020-06-11 17:29:34 1301

原创 BeanFactory和ApplicationContext的区别

BeanFactory:是Spring里面最低层的接口,提供了最简单的容器的功能,只提供了实例化对象和拿对象的功能;ApplicationContext:应用上下文,继承BeanFactory接口,它是Spring的一各更高级的容器,提供了更多的有用的功能;1) 国际化(MessageSource)2) 访问资源,如URL和文件(ResourceLoader)3) 载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层 4) 消息发送、..

2020-06-02 19:33:48 203

原创 讲讲springboot自动配置原理

讲讲springboot自动配置原理讲讲springboot自动配置原理上图是springboot自动配置大致流程图,我们都知道springboot框架使用起来非常方便,我们只要引入相关组件的maven包,然后配置少量的配置就可以正常使用了,不用像以前那样配置繁杂的xml配置文件。自动配置jar包这个是springboot自动配置的核心jar包,里面包含了所有的组件自动配置类,例如:RedisAutoConfiguration.java、WebMvcAutoConfigurat.

2020-05-23 14:48:22 321

原创 技术知识图谱

SpringSpring框架的七大模块Spring Core:框架的最基础部分,提供 IoC 容器,对 bean 进行管理。Spring Context:继承BeanFactory,提供上下文信息,扩展出JNDI、EJB、电子邮件、国际化等功能。Spring DAO:提供了JDBC的抽象层,还提供了声明性事务管理方法。Spring ORM:提供了JPA、JDO、Hibernate、MyBatis 等ORM映射层.Spring AOP:集成了所有AOP功能Spring Web:提供

2020-05-19 17:29:41 620

原创 Java 内存泄漏与内存溢出详解

内存泄漏指你用malloc或new申请了一块内存,但是没有通过free或delete将内存释放,导致这块内存一直处于占用状态。内存溢出指你申请了10个字节的空间,但是你在这个空间写入11或以上字节的数据,就是溢出。内存泄露是指程序中间动态分配了内存,但在程序结束时没有释放这部分内存,从而造成那部分内存不可用的情况,重启计算机可以解决,但也有可能再次发生内存泄露,内存泄露和硬件没有关系,...

2020-03-24 16:41:33 2104

原创 docker 安装MySQL

此外,我们还可以用docker search mysql命令来查看可用版本:$ docker search mysqlNAME DESCRIPTION STARS OFFICIAL AUTOMATEDmysql MySQL ...

2020-03-23 18:02:15 186

原创 MySql 8.0.11 客户端连接失败:2059 - Authentication plugin 'caching_sha2_password' cannot be loaded

近期,换了新笔记本,重新安装了MySql数据库和客户端工具Navicat Premium 12。我是从官网上下载的MySql数据库,版本为8.0.11,链接:https://dev.mysql.com/downloads/mysql/当数据库和客户端安装成功后,我使用客户端连接接数据库时,却是登陆失败:2059 - Authentication pl...

2020-03-23 18:01:05 286

原创 单一索引和复合索引区别

单一索引和复合索引区别及联系 - BABY的日志 - 网易博客 http://selectgoodboy.blog.163.com/blog/static/1032120612015191117118/什么是单一索引,什么又是复合索引呢? 何时新建复合索引,复合索引又需要注意些什么呢?本篇文章主要是对网上一些讨论的总结。一.概念单一索引是指索引列为一列的情况,即新建索引的语句只实...

2020-03-20 17:53:55 5755

原创 git 版本分支 管理

2020-03-19 17:59:08 392

原创 char varchar text mysql 数据结构的区别

它们的存储方式和数据的检索方式都不一样。数据的检索效率是:char > varchar > text空间占用方面,就要具体情况具体分析了。1.char:存储定长数据很方便,CHAR字段上的索引效率级高,必须在括号里定义长度,可以有默认值,比如定义char(10),那么不论你存储的数据是否达到了10个字符,都要占去10个字符的空间(自动用空格填充),且在检索的时候后面的空格会隐藏...

2020-03-19 17:11:02 470

原创 mysql 加锁的过程

一、背景MySQL/InnoDB的加锁分析,一直是一个比较困难的话题。我在工作过程中,经常会有同事咨询这方面的问题。同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题。本文,准备就MySQL/InnoDB的加锁问题,展开较为深入的分析与讨论,主要是介绍一种思路,运用此思路,拿到任何一条SQL语句,都能完整的分析出这条语句会加什么锁?会有什么样的使用风险?甚至是分析线上的...

2020-03-16 09:18:41 476

原创 mysql 高并发update导致死锁的 情况

死锁产生的条件:出现循环等待资源。update对锁的流程:当sql发出一个update请求之后,数据库会对表中的每条记录加上U锁。然后数据库会根据where条件,将符合条件的记录转换为X锁。对不满足条件的记录释放U锁。环境模拟1. 创建数据库环境--创建数据库 create database DeadLockTest;--创建数据表 (没有主键) use ...

2020-03-13 17:27:48 7689

原创 ConcurrentHashMap 实现源码

以前写过介绍HashMap的文章,文中提到过HashMap在put的时候,插入的元素超过了容量(由负载因子决定)的范围就会触发扩容操作,就是rehash,这个会重新将原数组的内容重新hash到新的扩容数组中,在多线程的环境下,存在同时其他的元素也在进行put操作,如果hash值相同,可能出现同时在同一数组下用链表表示,造成闭环,导致在get时会出现死循环,所以HashMap是线程不安全的。我们...

2020-03-12 18:06:13 119

原创 ConcurrentHashMap 原理分析

了解ConcurrentHashMap 实现原理,建议首先了解下HashMap实现原理。HashMap 源码解析(JDK1.8)为什么要用ConcurrentHashMapHashMap线程不安全,而Hashtable是线程安全,但是它使用了synchronized进行方法同步,插入、读取数据都使用了synchronized,当插入数据的时候不能进行读取(相当于把整个Hashtable都锁...

2020-03-12 17:18:05 141

原创 HashMap 原理

HashMap是由数组加链表的结合体。如下图:Paste_Image.png图中可以看出HashMap底层就是一个数组结构,每个数组中又存储着链表(链表的引用)JDK1.6实现hashmap的方式是采用位桶(数组)+链表的方式,即散列链表方式。JDK1.8则是采用位桶+链表/红黑树的方式,即当某个位桶的链表长度达到某个阈值(8)的时候,这个链表就转化成红黑树,这样大大减少了查...

2020-03-12 16:35:09 209 1

原创 CAS 原理介绍

概述CAS(Compare-and-Swap),即比较并替换,是一种实现并发算法时常用到的技术,Java并发包中的很多类都使用了CAS技术。CAS也是现在面试经常问的问题,本文将深入的介绍CAS的原理。案例介绍CAS之前,我们先来看一个例子。/** * @author joonwhee * @date 2019/7/6 */public class Volatile...

2020-03-12 10:34:44 291

原创 rocketMQ 教程demo

http://ifeve.com/%E3%80%8Aapache-rocketmq%E7%94%A8%E6%88%B7%E6%8C%87%E5%8D%97%E3%80%8B%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A3/

2020-03-12 10:27:10 160

原创 AQS 原理以及 AQS 同步组件总结

一 面试中关于 synchronized 关键字的 5 连击1.1 说一说自己对于 synchronized 关键字的了解synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。另外,在 Java 早期版本中,synchronized属于重量级锁,效率低下,因为监视器锁(moni...

2020-03-11 22:01:16 348

原创 Java CAS 原理剖析

在Java并发中,我们最初接触的应该就是synchronized关键字了,但是synchronized属于重量级锁,很多时候会引起性能问题,volatile也是个不错的选择,但是volatile不能保证原子性,只能在某些场合下使用。像synchronized这种独占锁属于悲观锁,它是在假设一定会发生冲突的,那么加锁恰好有用,除此之外,还有乐观锁,乐观锁的含义就是假设没有发生冲突,那么我正...

2020-03-11 16:55:04 134

原创 细粒度锁的实现

最近在工作上碰见了一些高并发的场景需要加锁来保证业务逻辑的正确性,并且要求加锁后性能不能受到太大的影响。初步的想法是通过数据的时间戳,id等关键字来加锁,从而保证不同类型数据处理的并发性。而java自身api提供的锁粒度太大,很难同时满足这些需求,于是自己动手写了几个简单的扩展... 1. 分段锁 借鉴concurrentHashMap的分段思想,先生成一定数量的锁,...

2020-03-11 16:25:23 668

原创 RocketMQ 介绍

前言消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。作为一个在互联网公司面一次拿一次Offer的面霸,打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚(请允许我使用一下夸张的修辞手法)。于是在一个寂寞难耐的夜晚,我痛定思痛,决定开始写《吊打面试官》系列,希望能帮助各位读者以后面试势如破竹,...

2020-03-03 16:55:08 1181

原创 常用Linux系统管理命令总结

一、目录指令1、创建目录make directorymkdir目录名称//mkdirspring,创建一个spring文件夹mkdir-pfile/file/file//递归创建多级别关系目录mkdirdir/newdir//不使用递归mkdir-pdir/newdi...

2020-03-03 15:32:08 562

原创 基于shard-jdbc中间件,实现数据分库分表

一、水平分割 1、水平分库 1)、概念: 以字段为依据,按照一定策略,将一个库中的数据拆分到多个库中。 2)、结果 每个库的结构都一样;数据都不一样; 所有库的并集是全量数据; 2、水平分表 1)、概念 以字段为依据,按照一定策略,将一个表中的数据拆分到多个表中。 2)、结果 每个表的结构都一样;数据都不一样; 所有表的并集是全量数据; 二、Shard-jdbc 中间件 1、架构图2、特点...

2020-03-03 14:45:05 448

原创 基于Shard-Jdbc分库分表,数据库扩容方案

一、数据库扩容1、业务场景互联网项目中有很多“数据量大,业务复杂度高,需要分库分表”的业务场景。这样分层的架构(1)上层是业务层biz,实现业务逻辑封装;(2)中间是服务层service,封装数据访问;(3)下层是数据层db,存储业务数据;2、扩容场景和问题当数据量持续新增,面临着这样一些需求,两台数据库无法容纳,需要数据库扩容,这里选择2台—扩容到3台的模式,如下图...

2020-03-03 14:35:51 589

原创 JVM故障分析及性能优化系列之七:使用MAT的Histogram和Dominator Tree定位溢出源

JVM故障分析及性能优化系列文章JVM故障分析及性能优化系列之一:使用jstack定位线程堆栈信息JVM故障分析及性能优化系列之二:jstack生成的Thread Dump日志结构解析JVM故障分析及性能优化系列之三:jstat命令的使用及VM Thread分析JVM故障分析及性能优化系列之四:jstack生成的Thread Dump日志线程状态JVM故障分析及性能优化系列之五:常见的Thre...

2020-02-28 14:10:25 258

原创 调用链跨线程传递ThreadLocal对象

在全链路跟踪框架中,Trace信息的传递功能是基于ThreadLocal的。但实际业务中可能会使用异步调用,这样就会丢失Trace信息,破坏了链路的完整性。在同一线程中trace信息的传递流程使用代码模拟如下:ThreadLocal<String> traceContext = new ThreadLocal<>();String traceId = Trac...

2020-02-26 17:59:39 1829 1

原创 分布式 事务的几种实现方案

背景四月初,去面试了本市的一家之前在做办公室无人货架的公司,虽然他们现在在面临着转型,但是对于我这种想从传统企业往互联网行业走的孩子来说,还是比较有吸引力的。在面试过程中就提到了分布式事务问题。我又一次在没有好好整理的问题上吃了亏,记录一下,还是长记性!!!先看面试过程面试官先是在纸上先画了这样一张图:让我看这张图按照上面的流程走,有没有什么问题?面试官并没有直接说出来这里面...

2020-01-08 17:57:38 453

原创 redis 集群扩容方案

team中的一个同学在其项目中使用了Redis作为缓存,将热点数据存放在Redis中。为了提升性能,写Redis时采用了管道的方式,平时使用时,Redis的性能、资源使用都能符合项目需求,但当访问量增加的时候,Redis的QPS还能满足要求,但CPU使用率高的时候已经达到90%+,平时只有30%+,而众所周知,Redis是单进程的,只能占用1个CPU核,跑满了也就100%,无法利用机器的多核,而当...

2020-01-08 17:06:32 1720 1

原创 分布式事务 全面解析

1 面试题分布式事务了解吗?你们如何解决分布式事务问题的?2 考点分析只要聊到做了分布式系统,必问分布式事务,若你对分布式事务一无所知的话,确实很坑,起码得知道有哪些方案,一般怎么来做,每个方案的优缺点是什么。现在面试,分布式系统成了标配,而分布式系统带来的分布式事务也成了标配.你做系统肯定要用事务,那你用事务的话,分布式系统之后肯定要用分布式事务.先不说你搞过没有,起码你...

2020-01-07 11:39:21 136

原创 springMVC 参数绑定的注解

本文介绍了用于参数绑定的相关注解。绑定:将请求中的字段按照名字匹配的原则填入模型对象。SpringMVC就跟Struts2一样,通过拦截器进行参数匹配。代码在 https://github.com/morethink/MySpringMVCURI模板变量这里指uri template中variable(路径变量),不含queryString部分@PathVariable...

2020-01-04 10:54:06 898

原创 线程池的使用

【线程池简述】线程池中,当需要使用线程时,会从线程池中获取一个空闲线程,线程完成工作时,不会直接关闭线程,而是将这个线程退回到池子,方便其它人使用。简而言之,使用线程池后,原来创建线程变成了从线程池获得空闲线程,关闭线程变成了向池子归还线程。【线程池带来的好处】1.降低资源消耗,通过重复利用已创建的线程降低线程创建和销毁造成的性能消耗。2.提高响应速度,当任务到达时,任务...

2020-01-03 23:13:16 460

空空如也

空空如也

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

TA关注的人

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