Mcc_mingchao
码龄4年
关注
提问 私信
  • 博客:66,350
    社区:44
    66,394
    总访问量
  • 53
    原创
  • 591,392
    排名
  • 29
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:浙江省
  • 加入CSDN时间: 2020-10-03
博客简介:

Edward_Mcc的博客

查看详细资料
个人成就
  • 获得53次点赞
  • 内容获得7次评论
  • 获得631次收藏
  • 代码片获得784次分享
创作历程
  • 43篇
    2022年
  • 10篇
    2021年
成就勋章
创作活动更多

如何做好一份技术文档?

无论你是技术大神还是初涉此领域的新手,都欢迎分享你的宝贵经验、独到见解与创新方法,为技术传播之路点亮明灯!

343人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

synchronized在1.6后的底层优化(锁升级)

JDK1.6 对锁的实现引入了大量的优化来减少锁操作的开销,如: 偏向锁、轻量级锁、自旋锁、适应性自旋锁、锁消除、锁粗化 等等技术。锁主要存在四中状态,依次是: 无锁状态 偏向锁状态 轻量级锁状态 重量级锁状态 锁🔐会随着竞争的激烈而逐渐升级。另外,需要注意:锁可以升级不可降级,即 无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁是单向的。 这种策略是为了提高获得锁和释放锁的效率。偏向锁引入偏向锁的目的和引入轻量级锁的目的...
原创
发布博客 2022.04.06 ·
774 阅读 ·
1 点赞 ·
0 评论 ·
4 收藏

java并发总结(面试常问题)

请简要描述线程与进程的关系,区别及优缺点?从 JVM 角度说进程和线程之间的关系图解进程和线程的关系下图是 Java 内存区域,通过下图我们从 JVM 的角度来说一下线程和进程之间的关系。​​从上图可以看出:一个进程中可以有多个线程,多个线程共享进程的堆和方法区 (JDK1.8 之后的元空间)资源,但是每个线程有自己的程序计数器、虚拟机栈 和 本地方法栈。总结: 线程是进程划分成的更小的运行单位。线程和进程最大的不同在于基本上各进程是独立的,而各线程则不一定,因为...
原创
发布博客 2022.04.05 ·
346 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

aqs原理及同步组件

常见问题:AQS 原理?;CountDownLatch 和 CyclicBarrier 了解吗,两者的区别是什么?用过 Semaphore 吗?1 AQS 简单介绍AQS 的全称为(AbstractQueuedSynchronizer),这个类在 java.util.concurrent.locks 包下面。AQS 是一个用来构建锁和同步器的框架,使用 AQS 能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的 ReentrantLock,Semaphore,其他的诸如 Re...
原创
发布博客 2022.04.04 ·
289 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Java 并发进阶问题(syn、volatile面试常考)

1.synchronized 关键字1.1.说一说自己对于 synchronized 关键字的了解synchronized 关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。另外,在 Java 早期版本中,synchronized 属于 重量级锁,效率低下。为什么呢?因为监视器锁(monitor)是依赖于底层的操作系统的 Mutex Lock 来实现的,Java 的线程是映射到操作系统的原.
原创
发布博客 2022.04.04 ·
459 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

java创建对象全过程

java是一门面向对象的编程语言,在程序运行过程中无时无刻都有对象被创建。在语言层面上,创建对象通常(例外:复制、反序列化)仅仅是一个new关键字而已,而在虚拟机中对象的创建又是怎样的一个过程呢?1.检查当Java虚拟机遇到一条字节码new指令时,首先去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。2.分配内存在类加载检查通过后,将为新生对象分配内存。对象所需的内存大小在类加载完成后便可
原创
发布博客 2022.04.04 ·
521 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

java并发编程艺术第四章解析

4.1 线程简介现代操作系统在运行一个程序时,会为其创建一个进程。例如,启动一个Java程序,操作 系统就会创建一个Java进程。现代操作系统调度的最小单元是线程,也叫轻量级进程(Light Weight Process),在一个进程里可以创建多个线程,这些线程都拥有各自的计数器、堆栈和局 部变量等属性,并且能够访问共享的内存变量。处理器在这些线程上高速切换,让使用者感觉 到这些线程在同时执行。使用多线 程的原因主要有以下几点。(1)更多的处理器核心:线程是大多数操作系统调度的基本单元...
原创
发布博客 2022.04.03 ·
672 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JAVA并发编程艺术第三章读书笔记

3.1 Java内存模型的基础3.1.1 并发编程模型的两个关键问题在并发编程中,需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的 线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程 中,线程之间的通信机制有两种:共享内存和消息传递。Java的并发采用的是共享内存模型3.1.2 Java内存模型的抽象结构Java线程之间的通信由Java内存模型(本文简称为JMM)控制,JMM决定一个线程对共享 变量的写入何时对另一个线程可见。从抽象的角度来看..
原创
发布博客 2022.04.02 ·
123 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

java并发编程艺术第二章读书笔记

2.1volatile的应用在多线程并发编程中synchronized和volatile都扮演着重要的角色,volatile是轻量级synchronized(执行成本更低),它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程 修改一个共享变量时,另外一个线程能读到这个修改的值。我们也常说synchronized是读写安全的,volatile是读安全的。 synchronized不能修饰变量,volatile可以!我简单介绍一下这几个术语:1、内存屏障:简单理...
原创
发布博客 2022.04.01 ·
418 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Tomcat详细实现原理

Tomcat需要main方法启动。Tomcat需要监听本机上的某个端口。Tomcat需要抓取此端口上来自客户端的链接并获得请求调用的方法与参数。Tomcat需要根据请求调用的方法,动态地加载方法所在的类,完成累的实例化并通过该实例获得需要的方法最终将请求传入方法执行。将结果返回给客户端(jsp/html页面、json/xml字符串)startup.sh->catalina.sh里面包含bootstrap先扫描webapps,遍历其中的java文件,拿到所有.class文件的路径.
原创
发布博客 2022.04.01 ·
508 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

synchronized锁的升级介绍

1.三种方式加锁1)修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁。2)静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁。3)修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁。2.无锁无锁是指没有对资源进行锁定,所有的线程都能访问并修改同一个资源,但同时只有一个线程能修改成功。特点:修改操作会在循环内进行,线程会不断的尝试修改共享资源。如果没有冲突就修改成功并退出,否则就会继续循环尝试。如果有多个线程修改同一个值,必定会有
原创
发布博客 2022.03.29 ·
154 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Java 核心集合容器全解

什么是集合?顾名思义,集合就是用于存储数据的容器。集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。集合的特点 对象封装数据,多个对象需要用集合存储; 对象的个数可以确定使用数组更高效,不确定个数的情况下可以使用集合,因为集合是可变长度 有哪些常用的集合类 Java 容器分为 Collection 和 Map 两大类,Collection 集合的子接口有 Set、List、Que
原创
发布博客 2022.03.29 ·
1137 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

动态规划力扣题复盘

动态规划力扣题复盘,这道题相较于普通的动态规划创建一个dp数组有更加简单的解法,如果碰到一个负数,则该位置应该等于上一个数字。截下来看一道比较典型的动态规划题首先遍历一下股票数组,在每一次遍历时查看当前数字是否为最小的,最小的我们当作买入的价钱,然后使用状态转移方程,判断dp数组当前位置应该是填入上一个位置的数字还是当前股票数组位置的价格减去买入价格。第11行判断最小买入价格,12行状态转移方程。....
原创
发布博客 2022.03.29 ·
170 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

TCP和UDP

TCPTCP协议是面向链接的,通过TCP协议传输的数据是通过字节流的形式传输,通过TCP传输是可靠的,不过也因此传输速率较慢。TCP一般用于文件传输,接受邮件,远程登录等场景TCP建立连接 三次握手四次挥手机制三次握手四次挥手TCP是如何保证数据的可靠传输的应用数据会被分割成TCP认为最适合发送的数据块TCP会给发送的每一个包进行编号,接收方会对数据包进行排序,将有序数据传送给应用层校验和 : TCP 将保持它首部和数据的检验和。如果收到的段校验和有差错的话,TCP将会丢弃
原创
发布博客 2022.03.26 ·
151 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

深入理解JVM之类加载机制

上一章我们学习了Class文件存储格式的具体细节,在Class文件中描述的各类信息,最终都需要加 载到虚拟机中之后才能被运行和使用。而虚拟机如何加载这些Class文件,Class文件中的信息进入到虚 拟机后会发生什么变化,这些都是本章将要讲解的内容。Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最 终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成 的(..
原创
发布博客 2022.03.18 ·
1154 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

深入理解jvm第六章笔记

Class类Class文件是一组以8个字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在文 件之中,中间没有添加任何分隔符,这使得整个Class文件中存储的内容几乎全部是程序运行的必要数 据,没有空隙存在。当遇到需要占用8个字节以上空间的数据项时,则会按照高位在前[2]的方式分割 成若干个8个字节进行存储。·无符号数属于基本的数据类型,以u1、u2、u4、u8来分别代表1个字节、2个字节、4个字节和8个 字节的无符号数,无符号数可以用来描述数字、索引引用、数量值或者按照UTF-8编码构成
原创
发布博客 2022.03.18 ·
968 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

判断对象已死两方法及应用

本文主要介绍判断对象已死的两个方法:引用计数算法在对象中添加一个引用计数器,每当有一个地方 引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可 能再被使用的。但是,在Java 领域,至少主流的Java虚拟机里面都没有选用引用计数算法来管理内存,主要原因是,这个看似简单 的算法有很多例外情况要考虑,必须要配合大量额外处理才能保证正确地工作,譬如单纯的引用计数 就很难解决对象之间相互循环引用的问题。可达性分析这个算法的...
原创
发布博客 2022.03.13 ·
128 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

深入理解jvm第二章读书笔记

本文直接从第二章的主要内容开始记录(第一章主要是java的发展历程等内容 有兴趣可自查)上图运行时数据区中 方法区和堆是线程共享、虚拟机栈、本地方法去、程序计数器为私有程序计数器程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在Java虚拟机的概念模型里,是通过改变这个计数器的值来选取下一条需要执行的字节码指令,它是程序控制流的指示器。如果线程正在执行的是一个Java方法,这个计数器...
原创
发布博客 2022.03.13 ·
1834 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

java类的初始化顺序

首先要明白各个部分的初始化顺序:(静态变量、静态初始化块)>(变量、初始化块)>构造器。这里要强调一点,程序从main方法进入,首先判断类是否加载过,如果没有加载则先进行类加载。从例子说明class Test{ public static String a="静态变量"; public static Test t1=new Test("t1"); public String b="非静态变量"; static { System.out.
原创
发布博客 2022.02.19 ·
478 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

Spring如何解决循环依赖 三级缓存

首先抛出问题 什么是循环依赖 举个例子 有两个类A和B,其中A类包含一个B类实例,B类包含A类实例,不用测试都能猜到会报错。在Spring项目中,很有可能发生这种相互依赖的情况,所以Spring对此有解决方案。@Servicepublic class TestService1 { @Autowired private TestService2 testService2; public void test1() { }}@Servicepublic
原创
发布博客 2022.02.19 ·
263 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

深入理解 MySQL 的 MVCC 机制

undo logundo log是回滚日志,有两个作用:提供回滚操作和多个行版本控制(MVCC)。在数据修改的时候,不仅记录了redo,还记录了相对应的undo,如果因为某些原因导致事务失败或回滚了,可以借助该undo进行回滚。undo log和redo log记录物理日志不一样。undo log主要记录的是数据的逻辑变化,它是逻辑日志。可以认为当delete一条记录时,undo log中会记录一条对应的insert记录,反之亦然,当update一条记录时,它记录一条对应相反的update记
原创
发布博客 2022.02.13 ·
688 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多