自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lz710117239的博客

java程序员的博客

  • 博客(323)
  • 收藏
  • 关注

原创 怎么在本地debug使用idea计算对象内存

在工作的过程中,我们遇到一个觉得比较大的对象的时候,经常需要判断,以此来决定是将数据放在内存还是缓存来提升性能,我看到现在很多文章介绍的,因此打算自己写一篇,准确完善的文章。以下示例以intellijIDEA编译器,java代码为例。

2024-04-20 11:41:20 1418

原创 Chrome 设置在新窗口中打开链接(已登录google账号版)

Chrome在新窗口中打开链接(已登录账号)

2024-03-30 13:30:56 1605

原创 程序人生(二)在这个信息爆炸的时代程序员怎么去学习

网络上的知识纷繁复杂、千奇百怪,良莠不齐,在这样一个知识可以随意戳取,网络上什么都可以学习到的时代,相比之下最宝贵的,反而成为了你有限的时间和生命,相比于学习什么知识,你需要做的是克制自己不去学什么,在这个年末,我想跟你聊聊新的一年该怎么学习。

2023-01-14 13:26:31 1143

原创 DDD与云原生时代的微服务拆分

在服务拆分的时候,拆到多大最为合适?以什么样的维度进行服务划分?带着这些问题,我们开始探索云原生时代的微服务如何进行拆分。

2022-09-27 19:01:17 699

原创 架构师该不该写代码?

架构师不写代码会怎样1. 不能准确感知自己设计的架构是否有问题:如果仅依赖于“验证->反馈”,这样一个过程,会出现 + 反馈的结果可能是错误的 + 在出现问题的时候可能没人反馈2. 长期的疏离代码,会让架构师的技术判断力下降,感知力的缺乏,会让架构师的架构能力越来越弱

2022-09-20 22:10:00 2977

原创 磁盘IO-为什么说IO密集型很少消耗CPU资源?

我们都知道磁盘io,网络io,是不会消耗cpu资源的,但是说原理,你说得清么?今天我们就从底层原理,简单直白的说清楚,为什么磁盘io很少消耗CPU资源。一、内核缓冲区与用户缓冲区我们知道应用程序因为调用权限限制,分为用户态和内核态。当我们需要把应用程序里面的数据写入到磁盘或者网络的时候,就需要将数据从用户空间,写入到内核空间,图示:第一步cpu复制,是用户缓冲区,到内核缓冲区是cpu来操作的。第二部从内核缓冲区到磁盘,是交给了DMA(Direct Memory Access)直接内存访问。

2022-03-20 18:45:00 3004 1

原创 内存屏障(Memory Barrier)(三)volatile关键字是怎么实现的?

目录一、Java平台的兼容二、volatile关键字其实每个系统的内存屏障可能都不一定相同。一、Java平台的兼容为了兼容不同平台的内存屏障的实现,JVM基于自己的模型做了内存屏障:LoadLoad屏障:对于这样的语句Load1; LoadLoad; Load2,在Load2及后续读取操作要读取的数据被访问前,保证Load1要读取的数据被读取完毕。StoreStore屏障:对于这样的语句Store1; StoreStore; Store2,在Store2及后续写入操作执行前,保证Store1的写

2022-03-13 16:49:31 1341

原创 内存屏障(Memory Barrier)(二)什么是读屏障?

我们知道了写屏障的由来,下面我们说下读屏障一、Store Buffer的性能瓶颈我们在写屏障那篇文章中说了Store Buffer,但是如果Store Buffer满了,说明是在等待Invalidate Acknowledge,导致不能及时刷新到cache。而cpu返回Invalidate Ack需要这样一个流程#mermaid-svg-kyTweTG41NnTrtLX {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16

2022-03-13 15:42:42 2990

原创 内存屏障(Memory Barrier)(一)什么是写屏障?

目录为什么要有写屏障1、Store Buffer提升MESI性能2、Store Buffer导致读写乱序3、写屏障总结关于内存屏障,我翻阅了很多文章,都没有给人讲的比较明白,因为我看了许多文章之后,仍然有以下几个疑问:为什么要有内存屏障?什么是LoadLoad,LoadStore,StoreStore,StoreLoad?他们之间的区别到底是什么?Load和Store有什么不同?为什么要加Load和Store?带着这样的疑问,在这一系列文章中,我想从原理开始一点一点说清楚。为什么要有写屏障

2022-03-13 14:58:44 4242

原创 JDK源码之CompletableFuture(三)anyOf,allOf是怎么实现的?

CompletableFuture实现原理,源码解读

2022-02-26 18:20:33 1440 2

原创 JDK源码之CompletableFuture(二)链式调用原理

CompletableFuture的链式调用,其原理是如何实现的,从源码角度讲解,让你一次性搞懂

2022-02-26 16:50:23 1238 1

原创 JDK源码之CompletableFuture(一)结果返回原理

会了这个CompletableFuture,并掌握其原理,你基本可以应付你工作中所有的并发问题

2022-02-26 15:15:57 2085

原创 SpringBoot源码解析(十四)一个Bean实现多个接口,注入时源码是怎样的?

在用Spring框架写Service层服务的时候,我们一般都习惯定义一个service接口,再定义一个service实现类,在引用的时候我们就通过一个@Resource注解或者@Autowired注解,此时Spring会根据名称优先或类型优先注入Spring的Bean。如果一个service实现类,实现了两个Service接口,Spring是怎么处理注入的呢?一、代码示例我们就通过如下代码示例,看看一个Service实现类实现两个接口源码是怎么加载的:public class Achievement

2022-01-04 20:06:06 972

原创 软件管理(六)平行沟通

目录一、利益点不同二、沟通方式语气很重要在之前我们说了,怎么让你在公司内争取资源,在领导支持下做成事情的向上沟通:软件管理(四)向上沟通怎么影响你的职业发展机会以及怎么让你的团队高效工作与成长的向下沟通软件管理(五)向下沟通怎么让你的团队高效工作与成长?,今日就来说说怎么更好地协调跨部门工作的平行沟通。一、利益点不同首先明确一点,因为是不同的团队,其利益点就可能不一致,如果有大的项目,上曾明确各团队协作的,这种利益点一致的还好说,相关方会积极配合。但是很多时候是你团队的工作,其他团队只是稍微需要协作

2021-11-12 10:50:49 490

原创 程序人生(一)从“道·法·术·器“”的角度来谈谈程序的境界

作为一个程序研发人员,平时你会为掌握了一门新技术而沾沾自喜;觉得自己会用了一个研发相关的工具,觉得自己无往而不胜;掌握了mysql的原理,掌握了一个框架的源码觉得自己变牛了。关于一个程序员,自己的人生优先级是什么样的,怎么去区分轻重缓急,今天就借一借一点哲学的东西,说说程序人生中的道法术器。一、器器是什么呢?就是你使用的工具,比如你用idea写代码,效率明显比使用txt要高你用navicat明显比使用bash命令要直观查看数据你用google,明显比你自己研究原理效率要好很多这就是器的应用

2021-09-22 22:41:26 815

原创 软件管理(五)向下沟通怎么让你的团队高效工作与成长?

关于怎么提升团队的凝聚力、创新力、战斗力,作为领导者又怎么提升自己在团队中的威信,受人尊重是一件不容易的事情,继上一篇《软件管理(四)向上沟通怎么影响你的职业发展机会》后,我们来聊聊向下沟通,怎么增加你的团队凝聚力。一、什么是向下沟通指管理者与团队成员之间的沟通与互动,目的是让团队成员充分运用自己所长,高效地完成组织目标。二、技术人总是免不了要带团队你可能想说,我就是个搞技术的,喜欢研究技术,做管理带团队,no!我拒绝。但我想告诉你的是,你无法拒绝,随着时间的积累,你在领导面前展示了你的技术水平还

2021-09-22 14:00:41 958

原创 java开发工具(17)实战讲解:用arthas排查真实遇到的问题

目录一、内存溢出二、cpu过高三、线程阻塞四、支持表达式五、调试神器watch六、排查程序耗时在何处七、查看你的cpu都耗在哪里八、总结我们知道了arthas的原理和功能后(通过上一篇《java开发工具(16)问题排查arthas到底怎么用?》),那么这一篇文章,我们就通过实战来真实讲解下,怎么使用arthas排查问题。一、内存溢出内存溢出通过dashboard命令,可以一眼就看出来,主要有下面几个特征:memory:内存区满了thread:如果GC频繁,GC线程可能一直在工作,导致cpu升高。

2021-09-08 16:45:20 5930

原创 java开发工具(16)问题排查arthas到底怎么用?

目录一、arthas工作原理二、安装三、重要命令四、总结你是否在你的项目中遇到过如下问题:线程block掉了,但是不知道是哪个线程阻塞了线上出了问题,想加日志排查,但是线上是不能随便修改代码发布的项目的一些方法,耗时比较久,怎么确定是哪块逻辑耗时比较长arthas就是针对各种不方便的情况对线上问题排查的这么一个工具。一、arthas工作原理那么你们可能好奇了Arthas是如何实现如此强大的功能的,说到这个就不得不提JDK5开始提供的高级特性了,那就是Java Instrumentation

2021-09-07 18:43:28 3194

原创 软件管理(四)向上沟通怎么影响你的职业发展机会

什么是向上管理?就是管理你的上司,你的老板,其实当然不是真的让你去指挥你的上司和老板干活,否则你距离玩完也不远了。所以后面我们就从定义开始讲起,什么是向上管理,已经如何做向上管理。一、什么是向上管理?大多数人把管理看成了权力。但管理的本质,不是权力和头衔,而是资源的争取与调配。一个人的管理对象其实只有一个人,就是你的直接上司。因为管理者需要资源,而资源的分配权在你的上司手中。–《管理的尝试》也就是说向上管理就是在配合领导的工作的基础上,为了推动自己的项目积极向领导争取资源。为什么要进行向上管理

2021-08-18 16:51:02 299

原创 java开发工具(15)mysql客户端Navicat还有这些好用功能你知道么?

目录一、怎么快速连接项目中的数据库二、怎么将某条数据从一个库复制到另一个库?三、怎么让多个环境数据机构一致?作为一个后端程序员,一定经常与数据库打交道,mysql是最常用的数据库语言,不知道你使用的是什么mysql客户端,不过我所见过的,最常用的客户端工具也是我使用的客户端工具,就是Navicat。一、怎么快速连接项目中的数据库作为一个开发人员你一定遇到过如下场景之一:刚到一家公司,部门...

2021-08-05 14:00:24 437

转载 java堆外内存排查方式

堆外内存泄漏”排查及经验总结https://zhuanlan.zhihu.com/p/60976273

2021-04-22 20:07:24 357

原创 restTemplate做长连接

restTemplate是springboot自带的http请求客户端,里面包装了HttpClient,是在SpringBoot项目中进行http请求常用的方式,本篇文章主要是讲解怎么进行restTemplate的长连接。一、普通情况下的RestTemplate配置 @Bean public RestTemplate AchiementTemplateLongConnection(RestTemplateBuilder builder) { return builder.

2021-03-17 20:15:14 5125 2

原创 怎么做code review

我们现在的code review的方式是在提测前甚至在提测后,开始review,这样有几个弊端:一次性进行很大批量的code review,是review不出来什么东西的,只能看看最表面在提测之前或者提测之后进行code review,如果是比较大的问题,或者review出来的问题比较多,相关开发修改的时间是有限的因此,更加推荐使用pr(mr)级别的code review。先介绍一下code review的好处团队知识共享:通过代码审查,高手可以直接指出新手代码中的问题,新手可以马上从高手的反

2021-03-15 20:40:21 3282

原创 多核cpu怎么保证数据一致性(四)volatile关键字、happens-before原则、内存屏障

系列文章目录文章目录系列文章目录前言一、java的数据不一致问题二、内存屏障三、happens-before原则总结前言上篇文章《多核cpu怎么保证数据一致性(三)MESI缓存一致性协议》我们说了怎么保证缓存的一致性的MESI协议,这样的情况下cpu层面是不会出现缓存不一致的问题的,那么java为什么还有volatile等关键字来保证缓存的一致性呢。一、java的数据不一致问题如下一段代码public class VolatileTest { private static int

2020-11-08 15:34:29 1442

原创 多核cpu怎么保证数据一致性(三)MESI缓存一致性协议

系列文章目录多核cpu怎么保证数据一致性(一)为什么要做指令重排序?多核cpu怎么保证数据一致性(二)cpu为什么要用高速缓存?L1,L2,L3 cache文章目录系列文章目录前言一、MESI缓存一致性协议二、MESI协议怎么保证数据一致性的呢?三、cpu是怎么更新这4种状态的呢?总结前言上篇文章《多核cpu怎么保证数据一致性(二)cpu为什么要用高速缓存?L1,L2,L3 cache》我们说了为什么要用多核cpu,以及为什么要用cpu高速缓存,但是因为L1,L2cache是每个cpu的核独有

2020-11-03 23:06:25 2237

原创 多核cpu怎么保证数据一致性(二)cpu为什么要用高速缓存?L1,L2,L3 cache

系列文章目录多核cpu怎么保证数据一致性(一)为什么要做指令重排序?文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤

2020-11-02 22:28:46 4790 2

原创 多核cpu怎么保证数据一致性(一)为什么要做指令重排序?

系列文章目录系列前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言其实一直想写一篇关于cpu的指令运算与java代码相结合的文章,今天,它来了,本文主要介绍java的指令怎么在最高的运用电脑cpu性能的情况下保证正确的执行,提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):import numpy as npim

2020-10-31 17:29:57 2212

原创 mysql(十二)一图带你看懂组合索引的索引结构

在网络上有很多MySQL的索引的结构的介绍,相信你对索引的结构已经非常了解了,关于组合索引呢?组合索引是在B+树中的结构是怎么样的?怎么排序的?索引中相同的值,存储的id是什么结构?在本篇文章中就跟你一一说明一、组合索引的图示话不多说,直接上图上面是根据身高年龄建立的组合索引(height,age)二、组合索引在B+树中的排序以上图索引为例,组合索引在B+树中是两个字段进行排序的,索引的key是身高和年龄,值是主键id,先按照身高排序,身高一样的按照年龄排序三、索引的key相同结构是怎么样的

2020-06-20 19:27:40 3168 1

原创 MyBatis源码分析(二)prepareStatement预编译的执行流程

通常我们如果自己写建立数据库连接的代码的时候,都会这么写pstmt = conn.prepareStatement(sql);pstmt.setString(1, email);result = pstmt.executeQuery();而Mybatis是怎么封装,又是怎么进行预编译的呢,今天就一文让你理解Mybatis的原理一、获取Executor我们之前一篇文章《MyBatis源码分析(一)基本请求流程》讲了Mybatis执行的基本流程,包括Plugin插件。其实在执行过程中,所有的sq

2020-06-16 22:17:02 3337

原创 Calendar的内部实现

我们平时操作时间都用common包中的DateUtils类,可以对时间增加天数,月份,小时,分钟等,你知道么,其实DateUtils只是一个工具类,它的内部是通过Calendar类来进行操作的。例如,如下代码,我们获取一个当前时间增加两天的时间:DateUtils.addDays(new Date(), 2);它的内部是这么实现的: public static Date add(Date date, int calendarField, int amount) { if (d

2020-06-06 13:20:28 159

原创 java开发工具(14)与其他git工具相比,SourceTree有哪些更多功能?(下)

在上一篇文章java开发工具(13)最好用SourceTree解决冲突方案,我们讲了使用SourceTree解决冲突和回滚代码的方式。最后一篇,我想告诉你更多SourceTree好用的功能,让你可以在开发过程中出了问题,也可以有备份,分别是贮藏、搜索、标签、基于节点创建分支,掌握了这几个技巧,你再开发过程中,就不会再有难题。

2020-04-18 14:18:42 364 1

原创 java开发工具(12)与其他git工具相比,SourceTree有哪些更多功能?(中)

目录一、整体操作界面二、提交1、待定的文件、已按照路径排序三、排列四、暂存文件视图1、提交操作2、右键点击更多操作上篇博文《java开发工具(11)与其他git工具相比,SourceTree有哪些更多功能?(上)》中,我们介绍了SourceTree的列表页面使用的功能,针对列表中的某个项目,我们是需要进行提交,拉取代码等一些操作的,SourceTree有什么强大的功能,可以对项目做哪些操作呢?...

2020-04-15 22:44:03 281

原创 java开发工具(13)最好用SourceTree解决冲突方案

目录一、产生冲突的原因二、冲突文件标识三、SourceTree提供的冲突解决办法四、启用外部合并工具五、Araxis Merge上篇博文,我们讲了SourceTree提交代码的方式,其中涉及到提交的时候,如果有代码冲突,我们如何解决,在本篇博文,就细细道来,希望通过此篇博文,你能完全掌握SourceTree解决冲突的方案。

2020-04-15 21:47:44 1079

原创 java开发工具(11)与其他git工具相比,SourceTree有哪些更多功能?(上)

在代码开发的过程中,每个人使用git管理工具的方式各不相同,有使用IntellijIdea自带的git管理工具的,有使用命令行的,有使用SourceTree的。可能说每种工具的使用方式各有优缺点,而我一直是使用的SourceTree。在这里就介绍下sourceTree的各种使用方式把

2020-04-13 22:41:48 731

原创 java开发工具(10)查日志,你还在用vim,grep,sed么?告诉你真正好用的less命令

目录一、grep命令查看日志有什么不便?二、vim很好用,但也有缺陷vim的优点vim的缺点三、less命令用法进入后的使用四、总结我想现在许多人查日志,刚开始的时候,都是直接使用grep命令,后面又接触了vim,sed等命令,这些命令都是查看日志的利器,但是其中也有部分缺陷,怎么样用正确的姿势去又快又好地查看问题,这里我将为你介绍less命令,希望藉此,让你查看问题的时间缩短,查看问题的效率升...

2020-04-11 16:34:23 582

原创 java开发工具(8)你还在手动写代码修改出参格式么?快用注解方式吧

目录一、怎么引入fastJson的转换二、怎么使用三、如果不引入可否使用注解呢?在你的代码中,你一定修改过出参格式把,例如把Date格式转换成年月日时分秒返回给前端,例如,因为Long型在前端有精度缺失的问题,把Long型转换为String类型返回给前端。如果你用代码手动去转,例如这样DateUtils.format(new Date(),"YYYY-MM-DD");再把值设置进去,挺耗费...

2020-04-09 23:18:31 209

原创 java开发工具(9)fastJson注解是如何映射成指定出参格式的(源码解析)

fastJson源码目录一、FastJsonHttpMessageConverter二、JavaBeanSerializer三、总结在上篇博客java开发工具(8)中,我们说了使用fastJson的注解进行出参映射的方式。那么这个映射方式如何实现的呢?下面我们就通过源码去看下一、FastJsonHttpMessageConverter我们在上一篇博文中定义了FastJsonHttpMessa...

2020-04-09 23:01:23 503

原创 java开发工具(6)你还在写代码校验入参么?快使用Bean validation

在上一篇博客《java开发工具(5)你的代码规范么?快用阿里规约插件扫描下吧》.中,我讲了怎么校验你的代码规范,在代码规范中就有一条是,必须对入参进行校验,也许你平时也会对入参进行校验,是自己写代码,现在有个Bean Validation,快解放你的双手,使用注解校验起来把 ...

2020-03-01 17:59:53 448

原创 java开发工具(7)Bean validation校验源码解析

因为上一篇博文讲到了Bean Validation在SpringBoot中的使用,为了让你知其然而知其所以然,我决定写一篇相关的源码解读,在这里让你完全理解Bean Validation的使用原理。

2020-03-01 17:31:52 576

原创 java开发工具(5)你的代码规范么?快用阿里规约插件扫描下吧

在写代码的过程中,我们为了业务需要快速迭代,快速开发,但是一个不规范的代码会让代码的易读性,可复用性,可维护性都大打折扣。一个公司如果想长久发展,而不是写了一次业务便不再变更,规范代码是非常重要的。写这一篇文章的目的是因为,许多的程序员并不注重编码规范,仅仅是将编码规范当做是可有可无的东西,原因很简单,利不关己,但是却事关整个公司。所以编码规范的推行只能是从公司层面,技术总监支持,由上到下,降维打击,才可施行。关于规约插件的安装与使用,非常简单,重要的是要理解为什么要这么做。

2020-02-22 18:41:15 399

空空如也

空空如也

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

TA关注的人

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