自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

满头秀发的虚竹的博客

学到老,活到老,多敲代码,不掉头发

  • 博客(21)
  • 问答 (1)
  • 收藏
  • 关注

原创 最详细的HashMap的put方法中文解释

点赞再看,养成习惯,微信公众号搜索【虚竹讲程序经】,获取更多技术干货!所有代码已经提交到GitHub上:https://github.com/xuzhuli废话不多说,直接上代码注释public V put(K key, V value) { return putVal(hash(key), key, value, false, true);} final V putVal(int hash, K key, V value, boolean onlyIfAbsent,boole.

2021-05-28 20:56:43 346

原创 JDK源码添加中文注释后编译乱码

点赞再看,养成习惯,微信公众号搜索【虚竹讲程序经】,获取更多技术干货!在进行JDK源码阅读的时候,一般都会加上注释,当我们添加中文注释重新编译源码时,会出现“编码 ascii 的不可映射字符“的错误提示,解决方案如下:// 进入以下目录cd jdk/make/common//编辑文件vi SetupJavaCompilers.gmk // 找到“-encoding ascii“,并删除,然后重新编译笔者下载的是jdk13,不同JDK版本文件可能存在差异,但是基本上都在同一个目录下,.

2021-05-19 16:58:44 529 3

原创 MacOS编译OpenJDK源码

点赞再看,养成习惯,微信公众号搜索【虚竹讲程序经】,获取更多技术干货!当我们搭建完JDK源码阅读环境,如果修改了源码,执行断点的时候会发现出现“source code does not match the bytecode”,其实就是依赖的JDK环境和你修改的不匹配,所以我们需要手动编译JDK,当修改了源码之后,重新编译就不会出现上面的错误信息。基础环境准备不同的软件环境编译执行的结果和报错信息会存在差异macOS Big Sur 11.3.1Xcode 12.5(直接从AppStor.

2021-05-18 11:03:53 309

原创 必须掌握的Docker常用命令

点赞再看,养成习惯,微信公众号搜索【虚竹讲程序经】,获取更多技术干货!今天介绍Docker的常用命令,实际开发中使用频率相对较高。搜索镜像docker search 镜像名称// 搜索nginx镜像,一般STARS最多的就是官方的docker search nginx下载镜像// 如果不加镜像版本,默认下载最新的docker pull 镜像名称:镜像版本// 下载最新版本的nginx镜像docker pull nginx// 下载版本号是5.7的mysql镜像do.

2021-05-14 09:56:27 82

原创 Mac搭建JDK源码阅读环境

点赞再看,养成习惯,微信公众号搜索【虚竹讲程序经】,获取更多技术干货!想要读懂JDK源码,需要在自己电脑上搭建JDK的源码阅读环境,正所谓,工欲善其事,必先利其器。下面演示如何在Mac上结合Idea搭建JDK1.8的源码阅读环境。新建一个空的Java项目在Idea中选择File–>New–>Project–>Java,然后Next到Finish,然后项目就创建完成了。添加源码找到本机JDK安装路径,路径如下:/Library/Java/JavaVirtualMachines.

2021-05-12 22:07:59 515

原创 Netty源码环境搭建

码字不易,点赞关注再看,养成习惯,微信公众号搜索【虚竹讲程序经】,关注获取更多技术干货!首先登陆github网站,搜索netty,选择需要的版本,fork到自己的github上把代码clone到本地,这里clone的是自己github上第一步fork过来的代码克隆完成之后,进入netty目录,执行下面的命令mvn install -DskipTests如果是mac,这里可能会下载不了部分jar包的错误,需要执行以下命令:brew install autoconf aut.

2021-05-09 15:59:46 427

原创 每日涨薪小技巧- Centos防火墙处理技能

开启和关闭防火墙// 开启防火墙systemctl start firewalld.service// 关闭防火墙systemctl stop firewalld.service查看防火墙状态systemctl status firewalld开放关闭指定端口// 开放3306端口firewall-cmd --zone=public --add-port=3306/tcp --permanent// 关闭3306端口firewall-cmd --zone=publi.

2021-05-06 14:28:45 121

原创 每日涨薪小技巧-实现Docker容器间相互通信

查看容器的详细信息,IP地址在NetworkSettings设置中IPAddressdocker inspect 容器ID单向通信使用–link命令实现容器间单向通信link后添加需要通信的容器名称下面的命令实现了web容器对database的单向通信容器启动成功之后,登录web容器,使用ping database可以ping通databasedocker run -d --name web --link database tomcat双向通信列出docker底层网络明细.

2021-05-05 11:25:45 86 1

原创 每日一点涨薪小知识-手写Autowired

上期我们聊到了Java反射的一些基础知识,相信大家对于反射的基本用法应该有一定的了解了。本期我们使用Java反射的知识,手写一个Spring中的Autowired注解。如果还有同学对Java反射不了解的,可以查看上期文章讲解。每日一点涨薪小知识-JAVA反射定义一个名为:Autowired的注解package com.xuzhu.reflect;import java.lang.annotation.ElementType;import java.lang.annotation.Reten.

2021-04-28 09:21:49 208

原创 每日一点涨薪小知识-JAVA反射

什么是反射反射就是把Java类中的各个成分映射成一个个的Java对象。即在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能调用它的任意一个方法和属性。这种动态获取信息及动态调用对象方法的功能叫Java的反射机制。如何获得一个类的字节码文件使用类的全路径Class<?> clazz = Class.forName("com.xuzhu.reflect.Person");类型.classClass clazz = Person.class;对

2021-04-27 14:57:04 108 2

原创 一张图带你彻底了解CAS

什么是CASCAS(compare and swap或者compare and exchange):比较并且替换。直接上图下面解释一下具体的执行流程假设有一个线程A拿到内存中的一个整数N,并对这个N进行加1操作。当执行完计算后,重新放入内存中时,首先会再次从内存中拿出N和之前拿出的N进行比较,如果两次取出的N值相同,则把计算完成的新值放入内存中;如果不同,则使用新值N重新计算,然后放入内存中之前,重复以上比较操作,直到前后两次获得的N值相同,然后写入内存中。对于上面的.

2021-04-25 14:35:50 356

原创 轻松搞定Netty面试,只要掌握这几点

BIO、NIO 和 AIO 的区别?NIO 的组成?Netty 的特点?Netty 的线程模型?TCP 粘包/拆包的原因及解决方法?了解哪几种序列化协议?如何选择序列化协议?Netty 的零拷贝实现?Netty 的高性能表现在哪些方面?NIOEventLoopGroup 源码?BIO:一个连接一个线程,客户端有连接请求时服务器端就需要启动一个线程进行处理。线 程开销大。伪异步 IO:将请求连接放入线程池,一对多,但线程还是很宝贵的资源。NIO:一个请求一个线程,但客户端发送的连接请.

2021-04-11 17:00:42 98 1

原创 docker安装rocketMq教程

本文前提是Linux系统上已经安装了docker环境,且对rocketmq的服务有基本的了解拉取rocketmq镜像docker pull rocketmqinc/rocketmq:4.4.0创建数据存放目录cd /usr/localmkdir rocketmqcd rocketmqmkdir datacd datamkdir namesrvcd namesrvmkdir logsmkdir store启动namesrv容器docker run -d -p 987

2021-03-05 13:45:37 273 2

原创 seata1.3服务端部署

下载seata1.3server包,并解压到/usr/local目录下从GitHub上下载配置文件下载地址:https://github.com/seata/seata/tree/1.3.0选择1.3.0版本的seata,找到目录script/config-center,下载config.txt文件,再进入nacos目录,下载nacos-config.sh文件,把config.txt文件放到/usr/local目录下,nacos-config.sh文件放到/usr/loca/seata目录..

2021-03-04 11:19:32 442 2

原创 一致性Hash原理和实现

一致性Hash原理和实现一、算法背景二、应用场景三、使用Hash算法四、一致性Hash的基本概念五、一致性Hash算法的容错性和可扩展性提示:这里可以添加学习目标例如:一周掌握 Java 入门知识一、算法背景一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用。二、应用场景现在一致

2021-03-03 15:11:06 419

原创 Java泛型简介

泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。Generic有“类的,属性的”之意,在Java中代表泛型。泛型作为一种安全机制而产生。泛型的类或接口在取出对象时将不需要再进行向下类型转换,因为存储的时候就是该类型。泛型的使用让安全问题在编译时就报错而不是运行后抛出异常,这样便于程序员及时准确地发现问题。泛型类定义class ClassName<T> class ClassName<?>表示接收..

2021-02-25 20:11:07 68

原创 Java8新特性之Function

Function是一个接口,在java.util.function包中,下面看一下具体的代码package java.util.function;​import java.util.Objects;​@FunctionalInterfacepublic interface Function<T, R> {​ R apply(T t);​ default <V> Function<V, R> compose(Function<? s.

2021-02-22 16:31:04 356

原创 Java8特性之Lambda表达式

Lambda表达式简介Lambda表达式就是一种匿名函数,如果不了解什么是匿名函数,可以参考:Java匿名内部类Lambda表达式语法:(argument) -> (body),例如:(arg1, arg2) -> {body}(a1 arg1, a2 arg2) -> {body}下面来看一些例子:(int a, int b) -> {return a + b;};​(a, b) -> {return a + b; };​..

2021-02-19 20:32:04 76

原创 Java8特性之接口default和static方法

Java8之前,在编写一个接口时,接口中只定义方法,不能有方法体,方法的实现全部交由实现类去完成。例如:public interface Car { void painting();}public class AudiCar implements Car { @Override public void painting() { System.out.println("奥迪喷漆"); }}public class BMWCar impleme.

2021-02-18 16:43:55 170

原创 安装Docker mysql

下载mysql镜像# 指定下载5.7版本的mysqldocker pull mysql:5.7查看是否下载成功docker images不使用自定义配置启动docker run --name mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7使用自定义方式启动docker run -p 3306:3306 --name mysql \-v /usr/local/docker/mysql/conf:.

2021-01-14 20:52:51 56

原创 安装Docker Redis

安装Docker Redis下载redis镜像# 下载最新的redis镜像docker pull redis启动redisdocker run --name redis -p 6379:6379 -d redis--name 表示给启动的镜像起名字-p 表示端口映射,前面的端口是宿主机的端口,后面是docker的端口-d 表示后台启动验证redis# 登录redisdocker exec -it redis /bin/bash# 登录redis客户端redis-cl

2021-01-14 20:40:40 64

空空如也

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

TA关注的人

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