- 博客(33)
- 资源 (1)
- 收藏
- 关注
原创 CI/CD发布方式-蓝绿发布、灰度发布和滚动发布
蓝绿发布:两套环境交替升级,旧版本保留一定时间便于回滚。滚动发布:按批次停止老版本实例,启动新版本实例。灰度发布:根据比例将老版本升级,例如80%用户访问是老版本,20%用户访问是新版本。
2023-03-21 21:12:01
623
原创 Java OOM认识
Java 堆用于存储对象实例,我们只要不断的创建对象,并且保证 GC Roots 到对象之间有可达路径来避免 GC 清除这些对象,那随着对象数量的增加,总容量触及堆的最大容量限制后就会产生内存溢出异常。内存泄露( memory leak),是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。JVM 虚拟机栈是有深度的,在执行方法的时候会伴随着入栈和出栈,上边的方法可以看到,main 方法执行后不停的递归,迟早把栈撑爆了。
2023-03-18 15:50:06
497
原创 Java方法调用细节
JVM中,类加载过程链接阶段的解析步骤包含将符号引用转换为调用方法的直接引用过程,该过程与方法的绑定机制有关,这节记录下Java方法调用的一些细节。
2023-02-25 10:12:47
206
原创 Java内存分配与回收策略
对象的内存分配,就是在堆上分配(也可能经过 JIT 编译后被拆散为标量类型并间接在栈上分配),对象主要分配在新生代的 Eden 区上,少数情况下可能直接分配在老年代,,取决于当前使用的垃圾收集器组合以及相关的参数配置。以下列举几条最普遍的内存分配规则。
2023-02-08 18:07:24
137
原创 Edge浏览器扩展开发入门
Microsoft Edge 扩展是开发人员用来添加或修改 Microsoft Edge 功能以改进用户的浏览体验的小型应用,扩展提供对目标受众很重要的利基体验或功能。
2023-02-03 12:35:43
4304
原创 推荐----手绘风格UI组件,可视化CSS阴影效果神器
手绘风格独特有趣,是很多 UI 设计师喜欢的风格,Wired Elements 给他们带来了很大的创作空间。如果是非现代浏览器,需要注意绘制的兼容性。Wired Elements 是一款手绘线框风格的 web UI 组件库,包含了web 开发常见的基本 UI 元素,能够满足快速构建自然的手绘产品界面。
2023-02-01 13:06:57
314
1
原创 Java 锁详解
公平锁:是指多个线程按照申请锁的顺序来获取锁,线程直接进入队列中排队,队列中的第一个线程才能获得锁。类似排队打饭,先来后到。非公平锁:是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。公平锁,就是很公平,在并发环境中,每个线程在获取锁时会先查看此锁维护的等待队列,如果为空,或者当前线程是等待队列的第一个,就占有锁,否则就会加入到等待队列中,以后会按照 FIFO 的规则从队列中取到自己。非公平锁,比较粗鲁,上来就直接尝试占有锁,如果尝试失败,就再采用类似公平锁的方式。
2022-07-06 00:01:28
331
原创 Spring-@Lazy注解
如果我们想要 Spring 在启动的时候延迟加载 bean,即在调用某个 bean 的时候再去初始化,那么就可以使用 @Lazy 注解。
2022-07-04 14:36:00
350
原创 推荐一个学习SQL的网站-自学SQL网
自学SQL网自学SQL网一个适合小白学SQL的网站,由浅入深的介绍所有有关 SQL 的知识, 每一个章节是一组相关的SQL知识点; 并且会配备一组动手练习任务。这个网站特别适合学完某种知识就想马上动手的 实践党。如果您在学习其他相关的SQL课程或已经在工作中展开了SQL实践,也可以把它作为巩固SQL知识的小工具。内容如其名,这是一个非常适合小白自学SQL的网站,它由浅入深地介绍所有有关SQL的知识,每一个章节是一组SQL知识点,文字讲解通俗易懂,并且在每一章后面都配备有一组动手练习任务,页面上部分是
2021-09-20 21:53:25
958
原创 Spring 自带工具类使用学习
我们项目大多数都是基于Spring架构,Spring自身包含了许多实用的工具类,学习这些工具类的使用不仅能让我们达到事半功倍的效果,而且还能减少不必要的额外的工具类的引入。查看这些工具类的源码时发现它们都是abstract类型的,这是因为工具类的方法一般都是static静态方法,静态方法和类绑定,类加载后就能使用了,无需实例化(刚好abstract类不能直接实例化,并且可以定义非抽象方法),所以工具类定义为abstract类型再合适不过。
2021-09-20 21:49:55
1010
原创 Java ------- URL 和 URLConnection
java.net.URL 类将 URL 地址进行了封装,并提供了解析 URL 地址的基本方法,比如获取 URL 的主机名和端口号。java.net.URLConnection 则代表了应用程序和 URL 之间的通信链接,可用于读取和写入此 URL 引用的资源。URI = Universal Resource Identifier,中文释义为统一资源标志符URL = Universal Resource Locator,中文释义为统一资源定位符URN = Universal Resource Name
2021-09-20 21:46:11
130
原创 SpringBoot 文件上传与下载
前端页面<!DOCTYPE html><html xmlns:th="http://www.thymeleaf.org"> <head> <meta http-equiv="Content-type" content="text/html; charset=UTF-8"> <title>文件上传</title> </head> <body> <form method=
2021-09-20 21:42:24
132
原创 Toolbox - 在线制作CSS玻璃形态和拟物形态的工具箱
Toolbox - 在线制作CSS玻璃形态和拟物形态的工具箱走起 >>>> Toolbox 网页设计不仅要创意设计、还有充分利用在线工具,那么如何提高 Web 网页设计工作效率减轻繁琐的工作呢?今天分享一个在线 Web 制作工具箱,两种在线 CSS 风格制作的工具。 集合了新潮流 CSS 风
2021-09-20 21:39:45
567
1
原创 jetbrains系列IDE启动壁纸
自己制作或下载jetbrains系列IDE启动壁纸Desktop Art,软件启动壁纸叫splash screen。自己生成一个 IDEA 风格的启动图进入 Desktop Art 网站编辑界面可以调整一些参数, 可以导出 png 图片或者 mp4 视频, mp4 视频导出后可以使用 wallpaper engine 等做成动态壁纸. 不过后渲染等待的时间有点久。美中不足是不能自定义文字和 logo, 只能选择显示或不显示。下载官方历史版本图片资源还是在 desktop-art 的这个网站在
2021-09-08 21:05:30
763
2
原创 Java代码块执行顺序
先说总结父类静态字段 —> 父类静态代码块 —> 子类静态字段 —> 子类静态代码块 —> 父类成员变量和非静态块(顺序加载) —> 父类构造函数 —> 子类成员变量和非静态块(顺序加载) —> 子类构造函数静态代码块:用staitc声明,jvm加载类时执行,仅执行一次。构造代码块:类中直接用{}定义,每一次创建对象时执行。执行顺序优先级:静态块,main(),构造块,构造方法。构造函数public HelloA(){/
2021-09-01 18:19:24
125
原创 ArrayList实现原理及基本方法
ArrayList是开发中非常常用的数据存储容器之一,其底层是数组实现的,我们可以在集合中存储任意类型的数据,ArrayList是线程不安全的,擅长随机访问元素,插入和删除较慢。1、ArrayList的数据结构ArrayList的底层数据结构就是一个数组,数组元素的类型为Object类型,对ArrayList的所有操作底层都是基于数组的。2、ArrayList是线程不安全的对ArrayList进行添加元素的操作的时候是分两个步骤进行的:先在object[size]的位置上存放需要添加的元素;将
2021-07-06 18:16:37
390
2
原创 SpringBoot集成ElasticSearch 7
本文基于Java High Level REST Client 7.12一、引入依赖<!-- elasticsearch版本,保持与本地版本一致 --><elasticsearch.version>7.12.1</elasticsearch.version><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spr
2021-05-11 15:05:36
572
原创 ElasticSearch 7 入门
一、ElasticSearch介绍Elasticsearch 是一个基于JSON的分布式、高扩展、高实时、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。 作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。Elasticsearch是与名为Logstash的数据收集和日志解析引擎以及名为Kibana的分析和可视化平台一起开发的。这三个产品被设计成一个集成解决方案,称为“Elastic Stack”(以前称为“ELK stack”)
2021-05-11 15:01:23
2233
原创 SpringBoot整合Redis
RedisRedis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU ev
2021-04-25 22:37:55
235
原创 SpringBoot声明式事务
所有数据访问技术都有事务机制,这些技术提供了API来开启事务、提交事务完成数据操作,或者在发生错误的时候回滚数据。Spring采用统一的机制来处理不同的数据访问技术的事务, Spring的事务提供一个PlatformTransactionManager的接口,不同的数据访问技术使用不同的接口实现。Data Tech实现JDBCDataSourceTransactionManagerJPAJPATransactionManagerHibernateHibernateT
2021-04-25 22:35:58
935
原创 SpringBoot配置文件详解
Spring Boot针对我们常用的开发场景提供了一系列自动化配置来减少原本复杂而又几乎很少改动的模板化配置内容。但是,我们还是需要去了解如何在Spring Boot中修改这些自动化的配置内容,以应对一些特殊的场景需求,比如:我们在同一台主机上需要启动多个基于Spring Boot的web应用,若我们不为每个应用指定特别的端口号,那么默认的8080端口必将导致冲突。配置基础在Spring Boot中src/main/resources目录是Spring Boot的配置目录,所以我们要为应用创建配置个性化
2021-04-25 22:32:28
347
原创 Shiro权限管理
Apache Shiro是Java的一个安全框架。目前,使用Apache Shiro的人越来越多,相比Spring Security而言相当简单, 可能没有Spring Security做的功能强大,但是在实际工作时可能并不需要那么复杂的东西, 所以使用小而简单的Shiro就足够了。对于它俩到底哪个好,这个不必纠结,能更简单的解决项目问题就好了。本文只介绍基本的Shiro使用,不会过多分析源码等,重在使用。Shiro架构Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以
2021-04-25 22:27:03
686
1
原创 缓存更新策略
缓存一般是为了应对高并发场景、缓解数据库读写压力,而将数据存储在读写更快的某种存储介质中(如内存),以加快读取数据的速度。缓存一般分为本地缓存(如java堆内存缓存)、分布式缓存(如Redis)等。既然是缓存,就意味着缓存中暂存的数据只是个副本,也就意味着需要保证副本和主数据之间的数据一致性,这就是接下来要分析的缓存的更新。常见的缓存更新策略有:先删缓存,再更新数据库先更新数据库,再删缓存先更新数据库,再更新缓存read/write through写回。在更新数据的时候,只更新缓存,不更新数
2021-04-25 22:19:55
279
原创 SpringBoot跨域问题
一、同源策略同源策略是由Netscape提出的一个著名的安全策略,它是浏览器最核心也最基本的安全功能,现在所有支持JavaScript的浏览器都会使用这个策略。所谓同源是指协议、域名以及端口要相同。同源策略是基于安全方面的考虑提出来的,这个策略本身没问题,但是我们在实际开发中,由于各种原因又经常有跨域的需求,传统的跨域方案是JSONP,JSONP虽然能解决跨域但是有一个很大的局限性,那就是只支持GET请求,不支持其他类型的请求,而今天我们说的CORS(跨域源资源共享)(CORS,Cross-origin
2021-04-25 22:16:02
90
原创 序列化与反序列化
一、序列化与反序列化序列化:把对象转换为字节序列的过程称为对象的序列化。反序列化:把字节序列恢复为对象的过程称为对象的反序列化。二、什么时候需要用到序列化和反序列化当我们只在本地 JVM 里运行下 Java 实例,这个时候是不需要什么序列化和反序列化的,但当我们需要将内存中的对象持久化到磁盘,数据库中时, 当我们需要与浏览器进行交互时,当我们需要实现 RPC 时, 这个时候就需要序列化和反序列化了。前两个需要用到序列化和反序列化的场景, 是不是让我们有一个很大的疑问? 我们在与浏览器交互时,
2021-04-10 18:08:28
112
原创 java操作Execl
一、介绍在平时的业务系统开发中,少不了需要用到导出、导入excel功能,今天来总结一下,如果你正为此需求感到困惑,那么阅读完本文,你一定会有所收获!本文对比apache poi,easypoi,easyExecl,给出它们的基本应用方式。二、apache poiApache POIApache POI是一种流行的API,它允许程序员使用Java程序创建,修改和显示MS Office文件。这由Apache软件基金会开发使用Java分布式设计或修改Microsoft Office文件的开源库。它包含类
2021-04-10 18:06:04
330
原创 重定向和转发
Spring MVC 重定向和转发重定向和转发重定向经过客户端,而转发没有,因此相对来说转发更快速。但有时采用重定向更方便,如:重定向到外部网站;避免用户重新加载页面时再次调用同样的动作。return "redirect:/view/"+saveUser.getId();这里使用重定向来防止当前用户重新加载页面时’’‘saveUser’’'被二次调用。但是使用重定向无法轻松地给目标页面传值,因此,在Spring3.1后提供了Flash属性,详情见后文。常用处理方式Controlle
2021-02-26 15:57:53
101
原创 Spring中AOP简介及AspectJ五大通知注解
Spring中AOP简介及AspectJ五大通知注解本文以一个简单计算器为代码例子基本概念AOP(Aspect-Oriented Programming, 面向切面编程): 是一种新的方法论,是对传统 -OOP(Object-Oriented Programming, 面向对象编程) 的补充。AOP 的主要编程对象是切面(aspect), 切面模块化横切关注点。在应用 AOP 编程时, 仍然需要定义公共功能, 但可以明确的定义这个功能用在哪里,以什么方式应用,并且不必修改受影响的类,这样一来横切关
2020-10-26 18:19:57
558
2
原创 Hibernate主键生成策略与property标签
Hibernate主键生成策略与<property>标签- 主键的分类定义hbm.xml映射文件和POJO类时都需要定义主键自然主键代理主键1、自然主键(业务主键)主键本身就是表中的一个字段(实体中的一个具体属性),也即不具有业务含义的字段作为主键。比如说创建一个人员表,人员都会有一个身份证号(唯一的不可重复的),如果使用了身份证号作为主键,那么这种主键就称为是自然主键;2、代理主键(逻辑主键)主键的本身不是我们表中必须的一个字段(不是实体中的某个具体属性),也即不具有业务含
2020-06-15 18:55:49
239
原创 Hibernate入门详细教程
Hibernate入门1、下载HibernateHibernate官网链接本文以 hibernate-release-5.3.16.Final 为例(1)下载好解压后如下图所示:(2)打开 lib(3)打开 required2、编写第一个程序(1)开发工具IDEA(2)创建项目Hibernate,导入 jar 包导入上面 required 中的所有 jar 包导入 Mysql 驱动包 mysql-connector-java-8.0.19.jar(说明:Mysql版本
2020-06-03 14:40:24
1940
1
原创 java编写时钟
java编写时钟//java编写时钟package test;import java.awt.Color;import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Ellipse2D; import java.awt.geom.Line2D; import java.util.Cal...
2019-12-19 18:49:32
516
原创 java图形功能 大笑脸
java图形功能 大笑脸import java.awt.Color;import java.awt.Font;import java.awt.Frame;import java.awt.Graphics;import java.awt.GridLayout;import java.awt.Image;import java.awt.Panel;import java.awt.e...
2019-12-07 18:13:42
296
原创 模拟登录幸运抽奖(java)
任务:模拟登录幸运抽奖功能:1、注册2、登录(3次机会)3、幸运抽奖一、实现菜单的输出显示说明:输出菜单、选择菜单编号,输出菜单信息 如果编号选择错误,输出“您的输入有误!”二、实现循环执行功能说明:系统询问用户是否继续,如果用户选择继续,则可以继续选择菜单,否则程序结束,退出系统三、实现注册功能说明:输入用户名和密码,系统产生4位随机数作为卡号。 注册成功,提示。四、实现登...
2019-10-25 23:46:44
1707
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人