自己对JVM的理解
内存模型线程独占:
虚拟机栈:先进后出的 又称方法栈,线程执行方法都是创建一个栈帧,用来存储局部变量表(存放局部变量的),操作数栈(后进先出的操作数栈。负责写入数据和提取数据),动态链接(执行常量池中的方法引用),方法出口等信息,JVM对栈的操作有2种,出栈和入栈。方法调用就是入栈。方法返回就是出栈
本地方法栈:区别是虚拟机栈为执行Java方法服务,而本地方法栈则为Native方法服务 什么是native方法呢 就是非Java方法。与Java环境外交互。因为JVM一些底层是C写的。比如Thread类中的setPrioruty方法
HotspotJVM中 将本地栈和虚拟机栈合二为一的 栈是运行时单位 堆是存储的单位
程序计数器:一块较小的内存空间,是当前线程所执行的字节码的行号指令器,每条线程都要有一个独立的程序计数器,这类内存也被称为线程私有的内存。用来记录程序执行到哪一个地方,下次可以在这个地方继续执行
线程共享:
堆:java虚拟机内存最大的一块,被所有线程共享,几乎所有线程实例都在这里分配内存。
1.7包含新生代、老年代、永久代
1.8只有新生代和老年代(永久代被删 ...
在docker上安装Gitlab
gitlab介绍gitlab是一款基于git仓库的代码管理工具,可以帮助我们团队进行版本控制和协作开发。gitlab还提供了完整的持续集成/持续交付平台,能够自动化代码构建、测试、发布等过程,并且是一款开源的平台,公司也可以根据需求来进行定制化,满足不同团队,适应不同的需求和流程。
下载镜像12# 下载gitlab镜像docker pull gitlab/gitlab-ce
编写安装脚本注意我们这里要挂载三个目录,我的目录是在/usr/local/docker/gitlab下面的三个文件夹里面。其中/etc/gitlab为保存gitlab的配置文件,/var/log/gitlab为保存gitlab的日志文件,/var/opt/gitlab为保存gitlab数据文件。这里我用的端口号是9980
123456docker run --name gitlab --restart always \ -p 9980:9980 -p 222:22 \ -v /usr ...
谈谈Java的设计模式
设计模式设计模式是什么?设计模式是我们对问题所提出的解决方案,就像一个个蓝图,通过对问题的一些综合考虑,采用最合适的设计方案来解决问题。就像一个工具箱,我们要看具体的情况,来决定使用哪把工具。那么设计模式是如何诞生的呢,设计模式最开始也是一个解决方案,只不过这个方案在各种项目中得到了验证。最终得到认可,是前辈们一个个试验,一步一个坑踩过来,最终被后人们整理,收纳,所归类的出的一种新领域
设计模式的优点
提高我们的思维能力和设计能力
使程序的设计变得标准化、流程化,增强开发效率
对代码来说,提高了可读性和复用性以及可扩展性
设计模式的六大原则
开闭原则 对扩展开放,对修改关闭
里氏代换原则 任何基类可以出现的地方,子类一定可以出现
依赖倒转原则 对接口编程,依赖于抽象不依赖具体
接口隔离原则 使用多个隔离的接口,比使用单个好
迪米特法则 一个实体类尽量少与其他实体类有相互作用
合成复用原则 尽量使用合成/聚合,不使用继承
设计模式的分类创建型模式:通过提供创建对象的机制,增加已有代码的灵活性和可复用性
创建型有五种模式:工厂方法、抽象工厂、建造者、原型、单例
结构性模式:如 ...
简单谈谈我对ChatGPT的看法
近日,ChatGPT的爆火无疑是科技圈最大亮点。这款人工智能爆火的出现,会对我们的生活有什么帮助,有什么影响。这次我想以一个普通开发者的角度来聊一聊这个人工智能对我的影响。
我们先来看ChatGPT是如何介绍自己的:
它说自己是一个大型语言生成模型,训练了大量的文本数据。据说是有13亿左右。然而最让我震惊的是ChatGPT的上下文联想功能,它可以根据对话的上下文来回答,比如说你给它提了一个需求,它的回答你不满意,那么你可以直接指出它错误的地方,并告诉它正确的思考方向。我们可以完全用真人对话的逻辑完成人工智能的交互,这在以前是想都不敢想的(点名siri和小爱的死亡”抱歉,我没听清楚,请再说一遍”)
它有缺点吗?肯定是有的。如果你让它写一篇论文,它会说出一大堆道理和故事,虽然看着很完美,但是细看漏洞还是有的,什么草船借箭是周瑜的主意,引入的文献也是自己瞎编的,一本正经的胡说八道。但不可否认在某些事情上还是有用的,例如对于程序员来说,你可以说一个简单的需求,让它帮你完成一个简单的示例代码,或者非常复杂的逻辑SQL,你只要告诉它,再利用上下文,修改一些条件,就可以很灵活的完成需求,也可以提 ...
我的hexo备份方案
我们的hexo一般都是上传都github作为服务器,github里面存的都是编译好处理完成后的文件,而我们平时编辑博客则是需要在源码上完成。这会导致我们换一台电脑没有源码就编辑不了博客的问题。这次我来分享一下自己的hexo备份方案。原理很简单。在本地添加GIT,在上传之前把源码先提交推送到GITEE上。这样我们直接可以从GITEE上获取到源码
在GITEE创建私人仓库 使用clone拉下来 将里面的.git文件夹直接拷贝到博客根目录
在根目录运行CMD,然后使用命令推送到GITEE上 这里我的远程分支名字叫master
123git add .git commit -m "描述"git push -u origin master
在GITEE上看到推送上去的源代码了
之后发布博客只需要多加三步操作即可。添加,提交,推送
123456hexo cgit add .git commit -m "Backup"git pushhexo ghexo d
Tip:如果换了一台电脑 把GITEE上的源代码拉完之后执行 来完成he ...
prometheus+grafana实现项目监控
介绍prometheus,也叫普罗米修斯。是目前很流行的开源项目监控框架,在项目中引入即可收集项目的信息,然后通过服务器来完成上传。
grafana则是一个可视化工具。拥有比普罗米修斯更为丰富的功能和直观的页面。还可以做到邮箱报警,异常数据跟踪。
项目引入prometheus
我们加入2个依赖
12345678910111213 <!--普罗米修斯--><dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> <version>1.9.0</version></dependency> <!--将项目内部信息暴露出来--><dependency> <groupId>org.springframework.boot</groupId> <ar ...
SpringCache的理解与使用
前言缓存相信各位都不陌生,作为开发中非常重要的一个组件。是解决高并发与数据库压力的第一方案,目前使用最多的是redis缓存中间件。但对于一些CRUD的缓存,还是有一些人使用的是redisTemplate。开发中经常重复造车轮,以至于没有太多的时间去理解业务和逻辑。而SpringCache就出现了。只需要一行注解,几个配置,缓存的任务就完成了。我们只需要专心写逻辑就可以。使用也十分简单。本次就SpringCache结合当下最常用的redis来实践理解一下
SpringCache的注解首先是三个常用注解
@Cacheable:获取缓存,如果获取不到缓存则执行本方法 将方法的返回值缓存到redis
@CachePut:更新缓存,无论缓存是否存在,都会执行本方法,并且更新到redis
@CacheEvict:删除缓存,缓存存在则删除,不存在自然不会删
下面来看看Cacheable注解中的值
cacheNames:可以理解为缓存容器的名字,也就是缓存要放进的地方
key:理解为redis的key就可以 表示缓存名字
keyGenerator:缓存key的生成策略 后面会详细说明
cac ...
(自动化部署,CI/CD)docker下安装并使用Jenkins
前言CI/CD是持续化继承和持续化部署的简称。目的是在开发的过程中,尽可能的降低人工成本,来完成部署操作。持续集成指的是我们每次开完完成后都会向远程仓库执行push操作。而我们则可以对每一次的push操作,都可以创建一个脚本来构建。
拉取镜像使用docker命令拉取jenkins镜像
1docker pull jenkins/jenkins
编写安装脚本-d后台运行
-p 将容器内的8080端口映射到宿主机的8081端口上
-v 挂载jenkis、maven与和jdk的目录
-e是配置腾讯的下载源,提升下载速度
12345678910docker run -d \-p 8081:8080 \-v /usr/local/docker/jenkins/data:/var/jenkins_home \-v /usr/local/docker/maven/apache-maven-3.8.5:/usr/local/maven \-v /usr/local/java/jdk1.8.0_251:/usr/local/jdk \-e JENKINS_UC=https://mirrors. ...
项目运行时如何拿到控制台上的日志?简单!
前言最近做项目的时候遇到一个问题,那就是程序运行的时候,怎么拿到控制台刚刚打印的日志,来做一些需求。甚至跨服务如何获取别的服务控制台打印的日志。这次我来分享一个非常简单的方法,使用目前最为常用的logback。2分钟即可搞定~
导入依赖依赖只需要导入2个logback的依赖就可以
1234567891011<!--在logback-core基础上扩展的版本--><dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId></dependency><!--logback基础模块--><dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId></dependency>
自定义A ...
评论系统上线辣!
好久不见兄弟们,最近也是好久没更新博文了,一定会补上!!!今晚把之前老想上线的Twikoo评论系统上线了(赞美开源,感谢作者~),用的是MongoDB作数据库。评论上线之后大家就可以留言了。我会在看到的第一时间内回复一起讨论。当然如果对写的地方有疑问欢迎评论区留言,我会认真对待的。
最后也入冬了,看到这篇博文的同学们,注意好保暖哦~