自己对JVM的理解
内存模型线程独占:
虚拟机栈:先进后出的 又称方法栈,线程执行方法都是创建一个栈帧,用来存储局部变量表(存放局部变量的),操作数栈(后进先出的操作数栈。负责写入数据和提取数据),动态链接(执行常量池中的方法引用),方法出口等信息,JVM对栈的操作有2种,出栈和入栈。方法调用就是入栈。方法返回就是出栈
本地方法栈:区别是虚拟机栈为执行Java方法服务,而本地方法栈则为Native方法服务 什么是native方法呢 就是非Java方法。与Java环境外交互。因为JVM一些底层是C写的。比如Thread类中的setPrioruty方法
HotspotJVM中 将本地栈和虚拟机栈合二为一的 栈是运行时单位 堆是存储的单位
程序计数器:一块较小的内存空间,是当前线程所执行的字节码的行号指令器,每条线程都要有一个独立的程序计数器,这类内存也被称为线程私有的内存。用来记录程序执行到哪一个地方,下次可以在这个地方继续执行
线程共享:
堆:java虚拟机内存最大的一块,被所有线程共享,几乎所有线程实例都在这里分配内存。
1.7包含新生代、老年代、永久代
1.8只有新生代和老年代(永久代被删 ...
一台mac的开发环境配置
最近买了一台M1的mac,心水的mac终于到手了,先折腾一阵子,打算写个笔记记录一下。整体分为踩坑点、注意点、和一些常用的小Tips…本文持续更新!!!
一些小Tips:
软件如果打不开,提示xxx已损坏,要移到废纸篓
终端输入sudo spctl --master-disable
还不行则使用xattr -cr /Application/程序.app
例如qq打不开 xattr -cr /Application/QQ.app
最新系统更新到了14.2版本发现,还不行的话去设置里的隐私与安全性,拉到最下面,看下是不是被拦截了,允许就可以打开了
使用Vim编辑完成保存退出失败,强制保存也失败
很多命令包括复制权限一样,需要在命令前加上sudo使用管理员权限
mac安装软件很简单,要么去appstore,要么下载安装包,以dmg为后缀的,直接把程序拖到Application,听到叮的一声就完成了
自带的vim编辑器太丑了?
进入用户目录 cd ~
创建vim配置文件 sudo vim .vimrc
将下面三行写入文件保存,torte是你想保存的主题
123>set nu ...
多服务器Kubernetes集群的部署
环境介绍
服务器及系统版本:2台阿里云服务器,Cenos7.8版本
Kubernetes版本:最新版(截止本文时间24年4月1日,最新版为1.29.3)
服务器配置:4核8G
Docker版本:最新版(截止本文时间24年4月1日,最新版为26.0.0)
cri-dockerd版本:最新版(截止本文时间24年4月1日,最新版为0.3.12)
网络插件Calico版本:最新版(截止本文时间24年4月1日,最新版为3.27.2)
前置准备
2台或以上阿里云服务器,配置至少为4核8G
因为需要从GitHub上下载东西,需要可以下载东西的网络
教程内出现的所有命令,如未特殊标注则默认是在每台机器上都要执行!!!
本文会从机器基础配置、基础插件安装、docker及其cri-dockerd、Kubernetes以及最后的可视化kuboard的安装,循序渐进,并且会在每一步进行对应的解析,来更好的帮助理解
机器基础配置1. 集群机器互通首先我们需要确保集群内的网络互通,我们需要从机器内选择一个做为master节点,其余的则是work工作节点,将master机器的名称改为master,其余的改为wo ...
【从零开始的K8s-02】ingress-nginx的认识与使用
认识Ingress-nginx我们先来看一下官网对于ingress的解释:
Ingress提供从集群外部到集群内服务的 HTTP 和 HTTPS 路由。流量路由由 Ingress 资源所定义的规则来控制。下面是 Ingress 的一个简单示例,可将所有流量都发送到同一 Service:
通俗的理解,我们可以将ingress理解为cloud项目里的网关,通过判断请求信息、请求路径后,转发到对应的服务内。
常见的ingress控制器有ingress-nginx、Traefik、HAProxy Ingress等等,但使用最多的还是nginx,本文也会以ingress-nginx来做演示
PS:ingress-nginx 是kubernetes社区维护的,而kubernetes-ingress 是nginx官方维护的,本文使用前者!
minikube安装Ingress-nginx控制器运行下面的命令进行安装
1kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/st ...
(自动化部署,CI/CD)多环境多平台安装并使用Jenkins
前言CI/CD是持续化继承和持续化部署的简称。目的是在开发的过程中,尽可能的降低人工成本,来完成部署操作。通过Jenkins自动流水线工作可以省去很多时间,对于程序开发者而言,将部署jar包、修改环境、日志记录等一系列操作集成到Jenkins任务内,省时又省力,本次将以Jenkins为核心进行从0到1的搭建与使用,并提供了Java单体项目与微服务的通用shell脚本供于使用。
环境说明本文通过两种方式进行演示,第一种是基于Docker完成Jenkins的安装与应用,Docker使用版本为25.0.3;第二种是直接在本机上安装Jenkins(本人主机为Mac,所以使用Mac来安装,Linux基本也是一样的)
基于Docker的Jenkins更多适合训练,因为所有的操作都在容器内、方便后续转移以及迁移。但缺点是Jenkins与宿主机的环境不互通,如在容器打完的jar包只能放在挂载的目录里。而且Java项目需要连接的中间件也非常多、且因为jar包是跑在Jenkins容器内的,所以配置容器间通信又是一个复杂点。(推荐初上手的同学使用,先用docker搭建一个完成的任务进行测试)
而直 ...
mybatis-flex框架的学习与使用
前言最近发现了这个新框架,想着学习一下发现网上的教程几乎全是对官网的复制粘贴…… 很多细节要点都没有告诉你,很容易让人看的一头雾水,所以自己跟着官网文档做了一个示例Demo,写个教程做记录,也分享给需要的各位(后面会使用flex指代mybatis-flex、plus指代mybatis-plus)
常见问题这里我把常见问题放在前面是因为有很多坑,所以我想先把我踩过的坑列出来,提前了解,不然后面问题很多不好解释。这些坑我也都是从官网找的对应解决方法,在这里放出来同时加深一下印象。
如何使用分页
以前我们mybatis-plus会搭配pagehelper-spring-boot-starter依赖来实现分页,但是使用mybatis-flex后,请注意,将分页依赖更换为pagehelper依赖 原因是pagehelper-spring-boot-starter依赖的mybatis-spring-boot-starter会使flex启动异常,导致查询时参数赋值不上,会产生《No value specified for parameter xxxx》错误。当然也可以使用自带的分页,本文使用自带的分 ...
在Java后端实现对xxlJob的任务管理
前言最近需要在Java后端操作xxl任务调度平台来完成任务的加入,在网上找了发现全都需要修改admin服务,对于已经上线的项目来说,明显不好操作切繁琐,修改admin服务的原因也很简单,是因为在外部直接调用添加、修改任务方法时,会被拦截告诉未登陆,因此需要在源码内多补充几个方法同时加上绕过登陆的注解。那么有没有一种办法可以不修改源码也可以操作admin服务内的方法呢。看了xxlJob的源码部分发现是可行的,在页面内我们可以发现登陆xxlJob后会返回一个cookie,那么我们就借助这个cookie来辅助我们登陆!
不了解xxlJob的朋友可以看一下上一篇:项目接入xxl-job
工具类介绍及使用我自己已经封装了一个工具类用来帮助我们操作admin服务,使用也很简单。首先对工具类进行一个简单的介绍,流程框架为 调用登陆方法获取cookie >>> 携带cookie和参数访问指定方法 >>> 返回结果
在使用工具类之前,我们只需要手动修改三个值以及引入一个实体类即可,分别是xxlJob的地址、账号和密码。
实体类如下,主要是帮助我们转换为正确的调度任务对 ...
【从零开始的K8s-01】基于minikube搭建一个本地K8s环境
前言minikube可以做到在本地部署kubernetes(也叫K8s,后面会用K8s指代kubernetes)环境、以单节点集群环境运行,非常方便个人测试和学习。个人也打算使用minikube来当作练手,在差不多搞清楚K8s的运作原理以及各种配置后,再上多台服务器搭建的真正的K8s环境。所以希望本文可以帮助更多人以更轻松的方式学习,并初步了解K8s究竟是什么东西。
多台服务器的Kubernetes搭建
minikube这里先放上源代码,以及K8s的官网
minikube minikube(github) kubenates
正如前面所说,minikube可以在本地计算机上运行单节点 Kubernetes 集群的工具。易于安装和使用,那么我们首先需要在本地安装minikube
安装minikubePS:请先安装好docker再继续下面的步骤,因为minikube需要依赖于虚拟化软件来创建和管理虚拟机;本人只有mac环境是自己走了一遍,windows与linux仅仅是通过官网给的方法得出的,如果有问题可以联系我~
如果下面执行minikuber start发生网络错误,使用 ...
微服务项目基于springdoc快速接入swagger3
环境说明
SpringBoot:3.0.2
SpringCloud:2022.0.0
SpringCloudAlibaba:2022.0.0.0-RC2
jackson:2.15.2
springdoc:2.2.0
这里也放一张官方与SpringBoot的版本关系
本次是基于SpringBoot3搭建的微服务做演示,因为升级SpringBoot3后,重构升级了很多东西,所以重新把swagger的引入记录一下。不过好消息是接入与使用非常简单。
我这里简单说一下我的项目结构,基本上是和ruoyi一样的
主要是common,这里我们也只需要关注swagger模块即可。我在common下新建了一个模块,名为swagger。主要作用是把swagger相关的东西放在这,方便管理。之后其他业务模块只需要引入sora-common即可完成对swagger的引入。后面也会基于此环境进行搭建与演示。
依赖引入在swagger模块内引入springdoc依赖(只需要引入此依赖即可)
12345<dependency> <groupId>org.springdoc</gr ...
okHttp的使用
项目的通信在开发的过程中,我们平时会面临两种通信,一种是项目之间的通信,一种是项目以外的通信。对于前者,我们通常会使用openFeign来解决。而项目以外的通信我们则会有restTemplate、okHttp以及Retrofit等众多通信框架。我之前也是一直使用restTemplate,但最近接触到okHttp发现,用着比restTemplate更省心更方便一点,并且支持异步通信。这次就针对okHttp来简单做一下文章。
为什么选择okHttp从性能方面考虑,其支持HTTP2并且使用链接池复用资源;在实际使用方面,只需要进行一次封装,后续即可直接调用,省心省力;最后就是支持异步通信功能;这些对于日常开发完全够用了,下面直接在项目中进行演示
项目实践引入依赖1234567891011121314151617181920<!--okhttp--><dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> ...