- 博客(57)
- 收藏
- 关注
原创 4.Docker容器命令
在学习docker入门过程中有些时候容易把容器和镜像这两个概念记混淆;下面说下我自己的理解不对望指正!有镜像才能创建容器这是根本前提!IMAGE镜像就好比我们的Java实体工程代码;在服务器上这套Java实体代码可以运行启动多份工程。依靠Java实体代码启动的一个个工程就相当于是容器;
2025-02-26 15:15:15
852
原创 3.Docker常用命令
1.启动Docker2.停止Docker3.重启Docker4.查看Docker状态5.设置开机自启(执行此命令后每次Linux重启后将自启动Docker)
2025-02-20 15:13:12
481
原创 2.Docker安装
如下在CentOS7环境中安装Docker,由于CentOS在2024年6月30日停止维护,官方 yum 源已失效,导致无法直接使用yum命令安装软件,此处我们需要将yum源替换为国内镜像源(如:阿里云源);
2025-02-12 17:03:14
396
转载 1.Docker概述
Docker是基于Go语言实现的云开源项目。,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP及其运行环境能做到。
2025-02-12 11:30:48
18
原创 (二)Optional
在编写代码的时候出现最多的就是空指针异常。所以在很多情况下我们需要做各种非空的判断。JDK8中引入了Optional,使用Optional可以更优雅的避免空指针异常;
2024-09-26 22:19:32
575
原创 (一)Lambda-Stream流
Java8的Stream使用的是函数式编程模式,它可以被用来对集合或数组进行链状流式的操作,可以更方便地让我们对集合或数组操作。创建流 -> 中间操作 -> 终结操作;必须要有终结操作否则中间操作不生效;
2024-09-22 22:46:54
969
原创 (十五)SpringCloudAlibaba-Sentinel持久化到Nacos
在前面我们已经将Sentinel配置的规则持久化到系统的文件中。本章节我们将Sentinel持久化到Nacos中;
2024-09-03 15:31:22
1442
1
原创 Java GUI + exe4j制作加解密桌面程序
1.创建Maven项目而非普通Java项目;方便引入依赖,后期打包时将其它依赖一并打入jar中;2.安装exe4j将jar文件转换成exe可执行文件;3.JDK1.8。
2024-04-18 17:20:14
955
原创 简单工厂模式&&抽象工厂模式
工厂模式的核心就是把对象的生产过程交给工厂来完成,当外部需要一个对象时,由工厂提供接口来获取对象,这样一来即使生产对象的过程变了,仍然不影响外部对对象的获取和使用。它把对象的创建过程封装起来,隐藏了对象创建的细节,根据外部传入的参数来决定返回哪一种对象,它的缺点就是如果要增加对象类型,或者修改某一个对象的创建方法时,就必须修改工厂类,这不符合对象编程设计原则之一的“开闭原则对扩展开放,对修改封闭。在实现新的需求的时候,最好能够只是扩展而不去修改已经写好的代码,这样能够把新需求带来的风险降到最低。
2024-04-16 11:11:56
1030
原创 BeanUtil.copyProperties(source,target)拷贝List注意事项
方法拷贝List属性时只是将source中List的引用拷贝给target中的List(source和target对象中的List本质上为同一个对象);已知上面对target对象中的List数据修改时会影响到source对象中的List数据;也清楚了出现这个问题的原因在于使用。
2024-01-31 23:13:24
2016
原创 ThreadLocal详解
比如在拦截器中获取用户信息并保存到ThreadLocal中,保存在ThreadLocal中的用户信息在本次请求的“任何方法”中都可以获取到这个用户信息。除了当前线程新开一个子线程去执行其它业务那么在这个子线程中是不能获取到上面存储的用户信息的,因为ThreadLocal是将当前线程作为Key去存取数据的,如果新开一个线程因为保存用户信息的线程和新开的线程不是同一个线程所以在新开的线程中是获取不到这个用户信息的,除非你将当前保存用户信息的线程也传递到子线程业务中使用保存用户信息的线程去获取用户信息;
2023-12-29 15:49:53
968
原创 线程池原理及使用
1.反复创建线程开销大;2.过多线程会占用太多内存(执行任务易出现“内存溢出”);3.加快程序响应速度;4.合理利用CPU和内存;5.统一管理线程;
2023-12-27 17:14:31
1173
原创 JVM内存结构&Java内存模型&Java对象模型
JMM是一组规范,需要各个JVM的实现来遵循JMM规范,以便开发者可以利用这些规范更方便的开发多线程程序;如果没有这样一个JMM内存模型来规范,那么很可能经过了不同JVM的不同规则的重排序后,导致不同虚拟机上运行的结果不一样;JMM不仅仅作为一组规范它同时还是“工具类”、“synchronized”、“Lock”等的原理;代码在JVM中的执行顺序和在Java代码中的顺序不一致;(代码指令执行顺序并不是严格按照语句顺序执行的,这就是重排序);指一个线程对共享变量的修改对于其它线程是可见的;
2023-12-25 09:47:45
1484
原创 线程活跃性问题(死锁、活锁、饥饿)
活锁表示执行任务的线程没有被阻塞,但由于某些条件没有被满足导致重复的去尝试执行任务(失败->尝试->失败),“活锁”与“死锁”的区别在于“死锁”线程一直处于等待状态而“活锁”执行线程在不断的执行;“饥饿”是指线程执行时无法获取到它所需要的资源比如(CPU),一种情况是“线程”优先级分配不合理导致部分线程一直无法被CPU调度执行;另一种情况是某线程持有某个操作的“锁”但其又处于无限循环而又不释放锁,此时其它等待获取此锁的线程获取不到就出现了饥饿问题;饥饿问题会导致服务器响应变差;详见本章序号1、7、8;
2023-12-22 14:16:36
1189
原创 volatile关键字
5.1.volatile适用于一个共享变量自始至终只被各个线程赋值,而没有其它操作(运算或取反等操作),那么就可以使用volatile代替synchronized或者“原子变量”,因为赋值本身是原子性的,而volatile又保证了可见性所以是线程安全的;或者也可以使用volatile作为触发器实现轻量数据同步;5.2.volatile属性的读写操作都是无锁的,它不能替代synchronized因为它没有提供原子性和互斥性因为无锁所以不需要花时间在获取锁和释放锁上所以它是轻量级。
2023-12-21 14:25:51
543
原创 单例模式的七种写法
如果不使用volatile修饰instance实例,则创建对象时被JVM重排序后的执行流程可能如下(“空指针问题”),若创建出来的对象为null,由于“可见性”问题,下次去获取实例时还是会创建多个对象;若不用双重检查也可以使用synchronized去修饰获取实例方法来保证线程安全(类似于懒汉式的同步方法);使用static定义的,所以枚举的本质就是一个静态编译的对象;使用volatile目的在于,禁止创建对象时的3个步骤发生重排序,防止创建出的对象空指针问题;使用枚举的方式实现单例最好;
2023-12-21 13:48:50
773
原创 线程三(线程属性 && 线程未捕获异常 && 线程安全问题)
true(守护线程)/false(非守护线程也称为:“用户线程”)设置守护线程方法:thread.setDaemon(true)
2023-12-18 14:22:17
402
原创 线程二(生命周期 && Object和Thread类方法详解)
1.线程的六种状态 NEW(创建) 线程已创建但还未执行start()方法; Runnable(可运行) 线程调用start()方法便会进入Runnable状态; 备注:线程运行中的状态也是Runnable Blocked(阻塞) 当一个线程进入到被synchronized修饰的代码块时,并且该锁已经被其它线程拿走时,
2023-12-18 09:50:35
843
原创 sleep()方法平替写法
在使用sleep()方法休眠时,一般需要传入休眠时间的毫秒值;如果休眠时间为(2小时53分10秒)这样需要对这个时间转换为毫秒值,对于这些时间的转换是很琐碎的,且sleep()方法如果休眠时间为“负数”时还会抛出异常;下面有一个平替sleep()方法解决了这些问题;
2023-12-15 13:55:30
525
原创 线程一(创建 && 启动 && 中断)
响应中断:即程序在执行下面这些方法时可以感知到中断信号,如果收到中断信号会响应中断。如sleep()方法当执行sleep方法时收到中断信号则线程会抛异常来响应中断java.nio.channels.InterruptibleChannel的相关方法java.nio.channels.Selector的相关方法。
2023-12-06 16:04:19
813
原创 JSR303 + 全局异常处理
*** 参数校验*//*** 封装校验方法、方便在Service中进行参数校验*/// 此处的data为前面验签后转JSONObject对象,非加密字符或JSON字符串if(set!= null &&!return r;
2023-11-26 22:24:50
516
原创 swagger暴露指定包下的实体作为Model
1.接口入参对象,被swagger扫描到自动生成Model;2.接口响应对象被swaggere扫描到自动生成Model;
2023-11-26 16:34:42
1160
原创 Ubuntu18搭建FastDFS
跟踪服务器(Tracker Server):192.168.201.128存储服务器(Storage Server):192.168.201.128。
2023-11-13 11:05:54
168
原创 ElasticSearch(七)-面试题
倒排索引是搜索引擎的核心。搜索引擎的主要目标是在查找发生搜索条件的文档时提供快速搜索。ES中的倒排索引其实就是 lucene 的倒排索引,区别于传统的正向索引(Mysql根据索引匹配内容), 倒排索引会在存储数据时将关键词(数据分词)和数据进行关联,保存到倒排表中,然后查询时,将查询内容进行分词后在倒排表中进行查询,最后匹配数据即可;
2023-11-07 10:39:28
85
原创 ElasticSearch(六)-优化
Elasticsearch的基础是Lucene,所有的“索引”和“文档”数据都存储在磁盘中,配置数据存储在哪块磁盘可通过修改elasticsearch.yml文件;磁盘在现代服务器上通常都是瓶颈,Elasticsearch重度使用磁盘,磁盘处理的吞吐量越大,节点就越稳定,如下有一些优化磁盘I/O的技巧;1.1.使用SSD(固态硬盘)。它相比较机械硬盘性能好太多;1.2.使用RAID 0。
2023-11-06 11:14:03
308
原创 ElasticSearch(五)-SpringBoot集成
Data@Document(indexName = "product", shards = 3, replicas = 1) // indexName指定索引名称、shards指定索引分片数、replicas指定分片数@Id/* ID */@Field(type = FieldType.Text) /* text 分词 *//* 标题 */@Field(type = FieldType.Keyword) /* keyword 不分词 *//* 品牌 *//* 价格 */
2023-11-02 14:04:12
136
原创 ElasticSearch(四)-进阶之深入学习
分片是ElasticSearch中最小的工作单元,之所以会分片是因为当一个索引中数据量太大时会影 响ES的检索效率,所以把一个大的索引拆成几个部分每个部分就是一个分片,当所有分片组合在一块时就是一个完整的索引数据。当在创建索引时不仅可以指定索引的分片数,还可以指定每个分片的副本数,副本不仅可以起到备份数据提高系统可靠性的作用还可以参与检索,计算数据,从而提高整体的检索效率;1.默认情况下创建一个索引默认一个分片,一个副本;2.创建索引时指定分片数及副本数(创建后分片数不能修改,副本数可以动态修改);
2023-10-31 16:32:15
247
转载 ElasticSearch(三)-基于Mysql热更新IK词典
眼前有景道不得,崔颢题诗在上头;在IK分词器中添加扩展词典或远程扩展词典,每次词典更新后都需要重启ES服务器,这在生产环境中是绝对不被允许的;如果我们把扩展词典数据存放在三方组件中如Redis、Mysql中ElasticSearch每隔一分钟去Redis或Mysql中同步最新的词典数据来更新词库,这样每次更新词库时不用重启ElasticSeach服务器就可以达到IK词典数据热更新;热更新是全量更新还是增量更新?
2023-10-31 15:46:34
844
原创 ElasticSearch(二)-入门之集群搭建
1.三台Linux虚拟机IP分别为2.准备elasticsearch-8.1.0-linux-x86_64.tar.gz压缩包3.关闭三台服务器防火墙(service firewalld stop)4.虚拟机做端口映射方便外部主机访问到虚拟机ES应用1. elasticsearch版本为8.1.0,不同ES版本在配置elasticsearch.yml上语法有差异;初次搭建建议使用8.1.0版本,如下相关配置均在8.1.0版本上测试过;
2023-10-26 15:00:52
308
原创 ElasticSearch(一)-入门之基础语法
映射关系(即创建索引时为“字段”指定是否分词,是否支持检索)单条件查询&取指定字段&排序&分页(单条件使用match)多条件查询&范围查询(多条件使用bool)创建索引(创建索引相当于创建数据库)创建文档(即为索引写入一条记录)在ES中每条记录就是一个Document对象。全文检索&完全匹配&高亮查询。根据索引名称 获取索引信息。根据索引名称 删除索引。查询索引下面的所有记录。根据主键查询文档记录。
2023-10-23 14:45:40
101
原创 Nginx一个server中配置多个前端项目
以前使用Nginx配置前端一般是这样(配置多少个前端就开启多少个端口定义多少个server)一个server中配置多个前端项目要使用alias,不要使用root;现在要求在一个server中配置类似二级域名的形式配置多个前端。
2023-10-13 17:01:25
2306
原创 Java接口提供方与调用方数据交互加密规则
在生产活动中接口数据安全性是一个非常重要的模块。假如发起一个支付请求A向B转账100元,在支付请求传输过程中请求被劫持,将转账金额由100元修改为10000元。这种情况是不被允许的为了防止接口传输数据被篡改,我们就必须要对接口提供方调用方数据进行加签/验签操作用来验证数据的真实性;
2023-09-18 11:08:06
389
原创 IDEA打工具类jar包(包含将Maven下的依赖打入工具类Jar中)
前段时间需要给接口对接方提供一个Jar包,其内容包含接口调用方参数加签,服务提供方响应验签,以及为调用方组装服务提供方需要的入参格式。打工具类Jar实现的目标:1.工具类项目使用Maven管理方便在项目中引入其它需要的依赖;2.工具类项目打好Jar后,此Jar可直接在其它地方导入使用(类似于JDBC驱动Jar);3.打好的工具类Jar中,包含工具类项目使用到的Maven依赖对应的源码包;4.使用IDEA自带的打包方式,不使用Maven打包插件进行打包;
2023-09-14 14:35:21
667
原创 如何定位慢SQL
优化SQL的前提是你已经发现了那些执行起来有问题或耗时很长的SQL。总有面试官会问你在平时生产/开发过程中你们是如何定位慢SQL的。
2023-05-30 10:43:21
1965
(十三)SpringCloudAlibaba-Seata(分布式事务使用)附本章代码及Seata压缩包
2024-08-13
(十一)SpringCloud-Nacos Config(服务配置中心&动态更新配置&共享配置)本章代码
2024-08-04
(九)SpringCloud-Gateway(Gateway+Sentinel实现网关限流)本章代码
2024-08-03
(八)SpringCloud-Gateway(网关配置&路由断言工厂&自定义路由断言工厂)本章代码
2024-08-01
(七)SpringCloudAlibaba-Sentinel(Feign整合Sentinel实现容错) + 本章代码
2024-07-30
Sentinel(规则配置&自定义异常返回&@SentinelResource注解&持久化)本章代码 + Jmeter
2024-07-30
(五)SpringCloudAlibaba-Sentinel(本章代码&sentinel控制台jar)
2024-07-27
(五)SpringCloudAlibaba-Sentinel(本章代码&&Sentinel控制台jar)
2024-07-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人