自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Java进阶营】Java 堆外内存回收原理

堆外内存简介DirectByteBuffer 这个类是 JDK 提供使用堆外内存的一种途径,当然常见的业务开发一般不会接触到,即使涉及到也可能是框架(如 Netty、RPC 等)使用的,对框架使用者来说也是透明的。堆外内存优势堆外内存优势在 IO 操作上,对于网络 IO,使用 Socket 发送数据时,能够节省堆内存到堆外内存的数据拷贝,所以性能更高。看过 Netty 源码的同学应该了解,Netty 使用堆外内存来实现零拷贝技术。对于磁盘 IO 时,也可以使用内存映射,来提升性能。另外,更重要的几乎不

2022-05-02 19:26:57 224

原创 【Java进阶营】Java集合与泛型中的几个陷阱,你掉进了几个?

下面我总结了集合、泛型、数组转集合等一些常见的陷进,认真看完,相信你绝对有所收获。一、List ,List<?> 与 List 有区别吗?说实话,我敢保证很多人是不知道 List, List<?> 与 List 之间的区别的。1、我们先来看看 List 与 List很多可能觉得 List的用法与 List 是一样的,例如很多人认为List<Object> list;与List list;这两种定义方法是一模一样的,然而他们是不一样的。看下面一段代码

2022-05-02 19:26:16 161

原创 【Java进阶营】Java 面试:投行的 15 个多线程和并发面试题

多线程和并发问题已成为各种 Java 面试中必不可少的一部分。如果你准备参加投行的 Java 开发岗位面试,比如巴克莱银行(Barclays)、花旗银行(Citibank)、摩根史坦利投资公司(Morgan Stanley),你会遇到很多有关多线程的面试题。多线程和并发是投行面试的热门知识点,尤其是在面试有关电子交易开发工作时,他们喜欢用棘手的 Java 线程面试题轰炸面试者。他们希望确保面试者对 Java 多线程和并发有扎实的知识基础,因为他们大多数关注高性能带来的竞争优势。举个例子,直接市场准入模式(

2022-05-02 00:39:57 135

原创 【Java进阶营】谈谈我们为什么要前后端分离

随着不同终端的兴起,对开发人员的要求越来越高,纯浏览器端的响应式已经不能满足用户体验的高要求,我们往往需要针对不同的终端开发定制的版本,为了提升开发效率,前后端分离的需求越来越被重视,前端主要负责页面的展现和交互逻辑,后端主要负责业务和数据接口,同一份数据接口,我们可以定制开发多个版本。前后端不分离:在之前的开发方法,php代码写在HTML中,不存在纯粹的PHP文件和HTML文件,这就是前后端的不分离,也就是php和HTML你中有我我中有你,而在前后端不分离的应用模式中,前端页面看到的都是由后端控制,由

2022-05-02 00:39:24 144

原创 【Java进阶营】【精】使用各种场景彻底明白mysql的MVCC原理

1. 多个undo log形成的链表InnoDB存储引擎中,它的聚簇索引记录中都包含两个必要的隐藏列,分别是:trx_id:事务Id,每次一个事务对某条聚簇索引记录进行改动时,都会把该事务的事务id赋值给trx_id隐藏列。roll_pointer:回滚指针,每次对某条聚簇索引记录进行改动时,都会把旧的版本写入到undo log中,然后这个隐藏列就相当于一个指针,可以通过它来找到该记录修改前的信息。每个事务都会修改一组Undo Record,这些Undo Record首位相连就组成了这个事

2022-05-01 19:57:54 1103

原创 【Java进阶营】Java项目开发规范(1)—方法命名规范

编程5分钟,起名2小时。场景实战方法应该具有单一职责特效,通过一个比较好的命名来实现较高的可读性。即实现less is more。那么平时在开发中如何对一些常见的方法来进行命名?方法命名采用小驼峰的形式,首字小写,往后的每个单词首字母都要大写。和类名不同的是,方法命名一般为动词或动词短语,与参数或参数名共同组成动宾短语,即动词 + 名词。一个好的函数名一般能通过名字直接获知该函数实现什么样的功能。举几个常见的例子:例如checkXxx或者validateXx方法,给人的职责便是校验业务,不推荐

2022-05-01 19:56:58 1848

原创 【Java进阶营】Java并发工具AbstractQueuedSynchronizer实现详解

AbstractQueuedSynchronizer(以下简称AQS或AQS锁)是ReentrantLock的底层实现,它提供了自旋、FIFO线程等待队列和阻塞等功能。Java常见并发同步工具如Semaphore、CountDownLatch、ReentrantLock等都是基于AQS实现的。AQS的实现要点总结如下:1. 用一个原子int变量代表同步状态AQS内部有一个原子int变量(命名为state),它是AQS的核心状态,也是唯一跟同步有关的变量。例如,ReentrantLock中state≠0

2022-04-30 16:49:38 96

原创 【Java进阶营】Java 中初始化 List 集合的 6 种方式

List 是 Java 开发中经常会使用的集合,你们知道有哪些方式可以初始化一个 List 吗?这其中不缺乏一些坑,今天栈长我给大家一一普及一下。1、常规方式List languages = new ArrayList<>();languages.add(“Java”);languages.add(“PHP”);languages.add(“Python”);System.out.println(languages);这种就是我们平常用的最多最平常的方式了,没什么好说的,后面缺失的

2022-04-30 16:47:33 1833

原创 【Java进阶营】一道有意思的面试题目

(一)背景介绍经常遇到产品同学更改需求的情况,在产品同学看来这是一个小小的改动而已,而且往往会理直气壮地说:这么小的改动,不会影响排期的。可需求的稍微改动,对于已经做好排期的开发同学来说,这不亚于一场恶梦。而开发同学比较木纳,往往难以为自己辩护,只能默默忍受开发量增大带来的压力。我在想,如何通过一个小小的例子来证明给产品同学呢?让产品同学心服口服的认识到:一个小小的改动,往往对于计算机来说,会产生很大的结果差异。所以,产生了下面的面试题目。这不仅仅是一道面试题目,也是开发过程中的陷阱,不知道有多少人

2022-04-30 16:46:04 68

原创 【Java进阶营】进阶阿里架构师:设计模式+微服务+Spring源码+结构算法

阿里架构师必备技能一、设计模式结构型模式创建型模式行为模式等重用性高易维护二、微服务架构技能总汇随着业务的发展,代码量的膨胀和团队成员的增加,传统单体式架构的弊端越来越凸显,严重制约了业务的快速创新和敏捷交付。为了解决传统单体架构面临的挑战,先后演进出了SOA服务化架构、RPC框架、分布式服务框架,最后就是当今非常流行的微服务架构。微服务化架构并非银弹,它的实施本身就会面临很多陷阱和挑战,涉及到设计、开发、测试、部署、运行和运维等各个方面,一旦使用不当,则会导致整个微服务架构改造的效果大打折

2022-04-29 19:46:22 552

原创 【Java进阶营】都说2022是Java程序员的危机年,却不断有人跳槽拿30K+,为什么

从 2018 年上旬开始触发的经济危机逐渐蔓延到普通人的生活中,裁员、倒闭、跑路俨然已成为刷爆朋友圈的高频热词。随之而来的是一系列因舆论所牵动的各种焦虑感弥漫在人群中,无论是大公司还是之前处于风口浪尖的明星创业公司,几乎无一幸免。聊天宝直接团队解散,京东将淘汰 10% 的员工,人人车经理以下的被“暴力”辞退,网易预计裁员 2000 人,阿里、滴滴、美团、知乎、新浪、58 到家等等叫得上名的大厂连隐瞒的心都没有了。斗鱼裁员事件即使我们早已习惯了不断升温的焦虑感,但这次因资本寒冬所带来的一波又一波的打击让

2022-04-29 19:45:01 137

原创 【Java进阶营】都说2022是Java程序员的危机年,却不断有人跳槽拿30K+,为什么

从 2018 年上旬开始触发的经济危机逐渐蔓延到普通人的生活中,裁员、倒闭、跑路俨然已成为刷爆朋友圈的高频热词。随之而来的是一系列因舆论所牵动的各种焦虑感弥漫在人群中,无论是大公司还是之前处于风口浪尖的明星创业公司,几乎无一幸免。聊天宝直接团队解散,京东将淘汰 10% 的员工,人人车经理以下的被“暴力”辞退,网易预计裁员 2000 人,阿里、滴滴、美团、知乎、新浪、58 到家等等叫得上名的大厂连隐瞒的心都没有了。斗鱼裁员事件即使我们早已习惯了不断升温的焦虑感,但这次因资本寒冬所带来的一波又一波的打击让

2022-04-29 19:39:22 174

原创 【Java进阶营】java的HashCode方法

有许多人学了很长时间的Java,但一直不明白hashCode方法的作用, 我来解释一下吧。首先,想要明白hashCode的作用,你必须要先知道Java中的集合。总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set。你知道它们的区别吗?前者集合内的元素是有序的,元素可以重复;后者元素无序,但元素不可重复。那么这里就有一个比较严重的问题了:要想保证元素不重复,可两个元素是否重复应该依据什么来判断呢?这就是Object.equals方法了。但是,如果每增加一个元素就

2022-04-27 21:04:00 115

原创 【Java进阶营】分布式系统理论概述

分布式系统是什么分布式系统:一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统这是分布式系统,在不同的硬件,不同的软件,不同的网络,不同的计算机上,仅仅通过消息来进行通讯与协调这是他的特点,更细致的看这些特点又可以有:分布性、对等性、并发性、缺乏全局时钟、故障随时会发生。分布性既然是分布式系统,最显著的特点肯定就是分布性,从简单来看,如果我们做的是个电商项目,整个项目会分成不同的功能,专业点就不同的微服务,比如用户微服务,产品微服务,订单微服务,这些服务部署

2022-04-27 21:03:07 166

原创 Java开发Spring常见面试题及答案分享

[Spring]是java企业级应用的开源开发框架,在企业中应用较多。作为轻量级的Java开发框架解决企业应用开发的复杂性而创建,【Java进阶营】为大家总结Spring常见面试题及答案,希望可以帮助正在面试的Java程序员。Spring常见面试题及答案分享:一、spring是什么?  Spring是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型

2022-04-26 19:14:01 122

原创 Java开发Spring常见面试题及答案分享

[Spring]是java企业级应用的开源开发框架,在企业中应用较多。作为轻量级的Java开发框架解决企业应用开发的复杂性而创建,【Java进阶营】为大家总结Spring常见面试题及答案,希望可以帮助正在面试的Java程序员。Spring常见面试题及答案分享:一、spring是什么?  Spring是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型

2022-04-26 19:14:01 80

原创 【Java进阶营】阿里一面,说说你了解zookeeper的应用场景有哪些?

1、前言又到了金三银四的时候,大家都按耐不住内心的躁动,我在这里给大家分享下之前面试中遇到的一个知识点(zookeeper应用场景),希望对大家有些帮助。如有不足,欢迎大佬们指点指点。2、zookeeper简介ZooKeeper 是分布式应用程序的分布式开源协调服务。它公开了一组简单的api,分布式应用程序可以基于这些api实现更高级别的同步、配置维护、分组和命名服务。它被设计为易于编程,并使用一种数据模型,该模型以熟悉的文件系统目录树结构为风格。它在 Java 中运行,并具有 Java

2022-04-26 19:13:33 106

原创 【Java进阶营】Redis技术专题系列之你彻底会使用“Redis中最陌生且最强大的集合”(ZSET)【前篇】

前言介绍很多小伙伴都跟我说,redis中,ZSet(有序集合)是他们最陌生的集合,同时也是觉得特别复杂的集合之一,在开发过程中经常会用到它,而且也是大家最不太有把握使用的集合,所以笔者就从ZSet集合开始去讲解Redis的集合的使用指南,希望可以帮助大家!有序集合ZSET(有序集合)的概念有序集合(ZSET):是像集合(SET)一样可以装很多东西,只不过集合装的是字符串而有序集合(ZSET)装的是键值对,从更严谨的角度讲,有序集合和散列更接近。只不过有序集合是有序的,有点像TreeSet。ZS

2022-04-26 19:12:49 340

原创 【Java进阶营】Java技术专题「难点-核心-遗漏」Java线程状态流转及生命周期的技术指南(知识点串烧)

前提介绍本章主要介绍相关线程声明周期的转换机制以及声明周期的流转关系以及相关AQS的实现和相关的基本原理,配合这相关官方文档的中英文互译的介绍。线程状态流转及生命周期当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在线程的生命周期中,它要经过新建(New)、就绪/可运行状态(Runnable)、阻塞(Blocked)和等待(Wait)、时间等待(Time_wait)、终止状态(Terminate)六种状态。尤其是当线程启动以后,它不能一直“霸占”着CPU独自运行,

2022-04-26 19:12:19 93

原创 【Java进阶营】【SpringCloud技术专题】「Eureka源码分析」从源码层面让你认识Eureka工作流程和运作机制(上)

前言介绍了解到了SpringCloud,大家都应该知道注册中心,而对于我们从过去到现在,SpringCloud中用的最多的注册中心就是Eureka了,所以深入Eureka的原理和源码,接下来我们要进行讲解下eureka的源码分析,由此应运而产生的本章节的内容。基本原理Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样Eureka Server中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。Eureka

2022-04-26 19:11:49 188

原创 【Java进阶营】Java技术专题-实战分析线程快照案例

第一部分:Full thread dump identifier这部分内容是最开始的部分,展示快照的生成时间及JVM的版本信息。(解释执行+编译执行)综合版本Full thread dump Java HotSpot™ 64-Bit Server VM (25.60-b23 mixed mode):第二部分:Java EE middleware, third party & custom application Threads这是整个文件的核心部分,里面展示了JavaEE容器(如tomca

2022-04-25 17:30:56 66

原创 【Java进阶营】Java技术专题-虚拟机参数基础学习

JVM参数简介-XX参数被称为不稳定参数,之所以这么叫是因为此类参数的设置很容易引起JVM 性能上的差异,使JVM 存在极大的不稳定性。如果此类参数设置合理将大大提高JVM 的性能及稳定性。例如:-XX:+PrintGCDetail,-XX:+ParallelGC不稳定参数语法规则布尔类型参数值-XX:+ '+'表示启用该选项-XX:- '-'表示关闭该选项数字类型参数值:-XX:= 给选项设置一个数字类型值,可跟随单位,例如:'m’或’M’表示兆字节;'k’或’K’千字

2022-04-25 17:30:25 87

原创 【Java进阶营】Java技术专题-对象创建到引用的过程

对象的创建JVM中创建对象(仅限于普通对象,不含数组和Class对象)大致过程是:1. 创建对象的类加载检查(检查Class文件字节码、版本、常量引用、重载覆盖等是否正确) 为新生对象分配内存(链接【准备+解析转换】) 内存空间初始化为零值(初始化赋值阶段) 对象进行必要的设置(对象头的设置) 虚拟机自定调用<clinit>方法,执行相关的静态方法和静态操作赋值。 执行<init>方法(调用构造器,此处为new创建对象的时候会调用init方

2022-04-25 17:29:52 71

原创 【Java进阶营】Java技术专题-字节码指令集调用机制

调用指令分布invokeinterface(Invoke interface method)用以调用接口方法,在运行时搜索一个实现了这个接口方法的对象,找出适合的方法进行调用。invokevirtual:(Invoke instance method; dispatch based on class)指令用于调用对象的实例方法,根据对象的实际类型进行分派:(静态分派[重载]、动态分派[重写])invokestatic(Invoke a class (static) method )

2022-04-25 17:29:22 90

原创 【Java进阶营】Java技术专题-GC回收器参数

概述Java堆内存被划分为新生代和年老代两部分,新生代主要使用标记-复制和标记-清除垃圾回收算法,年老代主要使用标记-整理垃圾回收算法,因此java虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器。常见垃圾收集器介绍新生代收集器Serial垃圾收集器Serial是最基本、历史最悠久的垃圾收集器,使用复制算法,曾经是JDK1.3.1之前新生代唯一的垃圾收集器。Serial是一个单线程的收集器,它只会使用一个CPU或一条线程去完成垃圾收集工作,并且在进行垃圾收集的同时,必须暂停其他

2022-04-25 17:29:03 112

原创 【Java进阶营】java面试题 --- JVM之体系结构

1. JVM 由哪些区域构成? 由类加载器和运行时数据区构成;运行时数据区又分为线程私有和线程共享两大区域,线程私有的包括程序计数器、虚拟机栈和本地方法栈,线程共享的包括堆和方法区。2. 类加载器的作用是什么? 加载 class 文件,生成类的结构信息,将其存放在方法区。3. 类加载器有哪些种类以及它们之间的关系是什么? Bootstrap ClassLoader,加载 lib 下面的类;Extension ClassLoader,加载扩展类,即 jre/ext 下面的

2022-04-23 17:38:47 56

原创 【Java进阶营】算法 | Java 常见排序算法(纯代码)

目录汇总|1. 冒泡排序每轮循环确定最值;public void bubbleSort(int[] nums){    int temp;    boolean isSort = false; //优化,发现排序好就退出   for (int i = 0; i < nums.length-1; i++) {        for (int j = 0; j < nums.lengt.

2022-04-23 17:38:15 55

空空如也

空空如也

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

TA关注的人

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