- 博客(43)
- 收藏
- 关注
原创 如何在宝塔面板给域名配置 SSL 证书
这里以阿里云为例1. 首先进入到 SSL 证书管理控制台选择个人测试证书,并点击购买免费的可以使用三个月。购买完成之后回到控制台。点击创建证书,将标红的地方填写,其他默认就好。然后提交审核就行。这里需要对域名进行解析配置,因为我是在腾讯云买的域名,所以得去到腾讯云域名解析控制台进行解析。这里没有截图,根据实际阿里的提示操作就行。最后就是这样,实际需要填的值根据要求填写,最后选择校验就等待审核就行。大概几分钟就好了。然后看到已签发然后根据自己网站部署在什么服务器的就下载对应的服务器证书密钥。
2024-07-27 22:08:55 733
原创 简述乐观锁和悲观锁——Java
悲观就是任何事都认为会往坏处发生,乐观就是认为任何事都会往好处发生。打个比方,假如一个公司里只有一台打印机,如果多个人同时打印文件,可能出现混乱的问题,他的资料打印在了我的资料上,悲观锁就是我认为一定会出问题,所以我在使用打印机的时候直接把打印机霸占了,不允许其他人打印文件。这就是悲观锁。同样的,我认为即使是多个人一起打印,打印机也不会出现混乱打印的情况,所以我不对打印机做出处理,而是确认下每次打印的东西即可。
2024-07-18 22:13:29 318
原创 简述设计模式-策略模式
在策略模式中一个类的行为或者算法可以在运行时更改,这种类型的设计模式属于行为型模式。在策略模式中定义了一系列的算法和策略,并将每个算法封装在独立的类中,使得他们能够互相替换,通过使用策略模式可以在运行时选择不同的算法,而不需要修改客户端代码。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象,策略对象改变 context 对象的执行算法。
2024-07-09 10:42:46 554
原创 举例说明深拷贝和浅拷贝
简单描述一下对象的实例化过程。创建对象的时候,或者说在实例化对象的时候 Person 类有年龄和学生类比如此时创建一个 age 对象,一个Student 对象,在虚拟机中,会在堆中开一个对象空间,里面包含了对象的属性信息,当给基本数据类型赋值时,会将赋的值存储在堆中,然后在栈中会创建一个对象名保存着堆中数据的地址。简单说就是指向堆中的对象。给引用数据类型赋值时,会将赋的值存在方法区的常量池中,而堆保存的是方法区的地址,栈中同样保存的是堆中的地址。
2024-07-08 14:04:05 652
原创 简述设计模式-代理模式
代理模式:一个类代表另一个类的功能。代理模式通过引入一个代理对象来控制对员对象的访问。举个例子,就像明星都有经纪公司,商业合作都是直接和经济公司沟通,不会直接和明星沟通。律师和委托人就是代理关系,律师帮助委托人处理事情,其他人不能直接和委托人沟通。
2024-07-02 15:31:39 450
原创 简述设计模式-工厂模式
工厂模式是为了提供创建对象的方式,无需制定要创建的具体类。举个例子,假如我是甲方需要制造一辆车,我可以要油车,可以要电车,也可以油电混动车,如果没有工厂,我需要自己找到对应的制造车的方法来制造。但是有了工厂之后,我不用直接去找对应类型的车的制造方法,我直接告诉工厂我需要什么类型的车,工厂就可以帮助我制造出我想要类型的车。简单来说,我不用关注工厂是怎么造车的,我只管问工厂要就行了。工厂模式又包括工厂方法模式,抽象工厂模式,抽象工厂模式实际像是工厂方法模式的PLUS版本,或者像是套娃版本?
2024-06-29 10:43:40 477
原创 Spring AOP 基于注解实现用户权限校验
interface:继承了 Annotation 接口的自定义注解,定义注释类型。@Target:表示这个注解可以应用的地方,此处做权限校验是用在方法上的,所以此处的值为 @Target(ElementType.METHOD)@Retention:表示这个注解的保留策略,此处定义为 @Retention(RetentionPolicy.RUNTIME)
2024-06-10 14:51:21 697 1
原创 Elastic Search(ES)Java 入门实操(3)数据同步
想要使用 ES 来查询数据,首先得要 ES 里有数据,但是如果是后来引入的 ES,数据库上万条的数据肯定不能通过手动进行同步,需要使用其他方法进行同步。数据同步分为全量同步和增量同步。所谓全量同步,就是引入 ES 时将 MySQL 里的数据全部同步到 ES 里。增量同步就是当数据库的数据发生变化时,将变化的数据同步到 ES 里。
2024-06-08 00:27:14 1282
原创 Elastic Search (ES)Java 入门实操(1)下载安装、概念
Elastic Search 官方描述,是一个分布式的搜素数据分析引擎,可以集中存储数据,快速完成搜索,微调相关性,进行强大的分析。ES 中的索引、映射、文档和字段等概念和传统关系型数据库相似。可以结合数据库去理解。比如索引可以理解为表。ES 使用了倒排索引机制来优化搜索效率。比如”唱跳rap篮球“,根据机制可能会为 唱跳、rap、篮球分别建立索引,当我们搜索其中一个关键词,就能搜索出来相关的结果,然后通过正排索引来详细展示相关文章。
2024-06-07 16:11:40 1568
原创 计算机网络——如何保证 TCP 传输的可靠性
1. 设置传输格式,包括分为 TCP 段、使用校验和、使用序列号2. 数据丢失之后的重传,超时重传、快速重传、SACK 选择确认、D-SACK 重复选择确认3. 流量控制,控制数据包的传输速度,避免接受方处理不及时导致数据丢失,使用的是滑动窗口的方法4. 拥塞控制,控制传输速度,避免传输数据包过多导致网路拥塞,主要算法:慢启动、拥塞避免、拥塞发生、快速恢复
2024-05-31 21:37:05 2442 2
原创 计算机网络--HTTP 协议的请求方式 GET 和 POST
HTTP 协议的常见的请求方式 GET 和 POST,在实际使用中会考虑到底使用哪一种,这就涉及了两者的区别比较。主要区别其实就是安全性和幂等性。所谓安全性,就是通过请求服务端之后获取到数据,会不会造成数据的改变,部分数据的泄露。所谓幂等性,就是多次请求到的数据是否相同,是否有变化,有点像MySQL的并发下出现的重复读问题。GET 在语义上是从服务器获取数据,比如用户信息,图片,视频。比如说搜索视频,分页查询数据等。POST 在语义上是通过请求体对数据进行修改,比如增删改。
2024-05-28 10:51:25 938
原创 计算机网络——在地址栏输入网址(URL)之后都发生了什么
1. 地址栏输入 URL2. 应用层 DNS 协议解析域名的IP地址3. 网络层 TCP 协议发起连接,传输对应的 HTTP 请求报文,通过每层模型的不同的协议,生成最终的请求数据包并发送给服务器4. 服务器接收到了请求数据包后,解析请求,并进行处理,比如读取文件,查询数据库,然后生成响应的 HTTP 报文。
2024-05-28 09:07:55 1345 1
原创 计算机网络——TCP / IP 网络模型
七层模型是国际标准化的一个网络分层模型,大体结构可以分成七层。每层提供不同的功能。图片来源 JavaGuide但是这样七层结构比较复杂,不太实用,所以有了 TCP / IP 模型。
2024-05-27 15:29:35 2406 1
原创 计算机网络——TCP 协议的三次握手 / 四次挥手
TCP 是面向连接的、可靠的、基于字节流的传输层协议。所谓面向连接的,就是必须发送端和接收端必须处于连接状态才能发送数据。可靠的就是无论网路链路出现的什么变化,都可以保证一个报文能够到达接收端。
2024-05-25 11:09:43 1547
原创 MySQL 的 Explain 命令
使用 MySQL 数据库时,经常会有查询效率慢的时候,此时就需要进行优化,Explain 就是用来帮助开发者完成优化分析的重要命令,他能直观的显示出来此时 SQL 语句执行的情况,比如常见的是否使用了索引,用了哪个索引,以及访问了多少条数据才得到结果的数据等。这也是面试当中常见的考点。
2024-05-24 09:44:28 732
原创 RabbitMQ 交换机类型
一个生产者给多个队列发送消息,X 代表交换机。交换机的作用:类似网络路由器,主要提供转发功能,解决怎么把消息转发到不同的队列中,让消费者从不同队列取然后消费。绑定:交换机和队列关联起来发布订阅交换机,队列进行持久化,生产者发布消息,所有消费者都能接收到消息。生产者代码消费者代码channel 频道:理解为操作消息队列的 Client,通过 channel 收发消息,提供了和消息对了 server 建立通信的传输方法方法参数:queue:这是一个字符串参数,代表要声明的队列的名称。
2024-05-18 14:15:40 1318
原创 Redis基于Redisson的限流和限流算法
限流是在高并发或者某个瞬间高并发时,为了保证系统的稳定性,对超出服务处理能力之外的请求进行拦截,对访问服务的流量进行限制。
2024-05-16 13:01:21 1200
原创 Java中的常见的 IO 模型
I/O 就是输入和输出,为了保证操作系统的稳定性和安全性,一个进程的地址空间分为用户空间和内核空间。平时运行的应用程序都是在用户空间内,内核空间进行系统级别的资源有关的操作。比如果文件管理,进行通信等。用户空间的程序不饿能直接访问内核空间。当程序执行 IO 操作时,应用程序发起调用请求让操作系统帮助。开发中接触的比较多的就是磁盘 IO 、文件读写和 网络 IO、网络请求和响应。从应用程序来看,应用程序就是向操作系统的内核空间发起调用请求,操作系统的内核执行实际的 IO 操作。
2024-05-15 09:18:39 738
原创 Java 常见集合类
Java 的集合,也可以叫做容器,根据集合的整体框架可以看出,主要是两大集合接口:第一个是 Collection 接口,主要用来存放单一的元素对象;另一个是 Map 接口,主要用于存储键值对。Collection 接口有三个子类,List、Set、Queue,下面是抽象类和具体实现类,主要说明具体实现类。常见的有 ArrayList、LinkedList、HsahSet、LinkedHashSet、HsahMap、LinkedHshMap等。
2024-05-08 20:51:59 1202
原创 Redis——缓存雪崩、缓存穿透、缓存击穿
在项目中,通常会使用数据库比如 MySQL 存储应用数据,但是当数据太多之后,比如多了几十万条或上百万条的商品信息,这个时候查询商品数据的速度会很慢,影响用户体验。此时一般我们会选择将部分商品信息缓存起来,提高商品的查询速度,比如使用 Redis 将明天参加秒杀活动的商品提前缓存起来,用户直接访问到缓存。速度不会很慢,也不会对数据库产生太大压力。不过,Redis 缓存也会出现问题,最常见的在某个时间点,缓存出现的大量失效的情况,导致大量的数据直接请求到了数据库,就像雪崩一样,给数据库造成巨大压力。
2024-05-07 16:36:47 614
原创 操作系统的死锁
死锁是指在多道程序环境下,若干进程之间因为抢夺资源而完成的进程互相等待现象。从而导致这些进程都没法继续执行,造成进程间的死锁。举个例子。现在有甲乙两个人在修车,甲手里有扳手,乙手里有螺丝刀,甲这个时候需要螺丝刀才能继续工作,相同的,乙需要扳手才能继续工作,此时他们两个都在等待对方将持有的工具放下,然后获取到之后继续工作,于是他们两就僵持住了,导致工作都无法继续执行。
2024-05-07 09:50:11 369
原创 MySQL 事务的隔离级别
1. 原子性。事务内的操作都是原子性的,要么都失败,要么都成功。2. 一致性。事务执行前后的数据是一样的,比如转账前后的总金额都是一样的。3. 隔离性。并发环境下,并发事务之间时相互隔离的,互不影响。4. 持久性。事务提交之后,数据拥有持久性,即使数据库出现故障也不会导致数据丢失。
2024-05-06 21:14:09 1064
原创 MySQL 数据库事务 ACID 特性
将一些对数据库的操作组成一个集合,这个集合就是事务。事务的特点,包含在内的操作要么都执行,要么都失败。关于事务经典的问题就是金融转账了,小明要向小红转账1000元,转账的过程中包含了以下操作。1. 小明发起转账,账户金额 - 1000;2. 小红接收转账,账户金额 + 1000;整个转账的流程就是一个事务,这个事务包含了以上两个操作。此时,如果因为某些原因导致其中一个操作执行失败了,如果不保证事务的全失败或者全成功,那么就是出现小红账户 + 1000,而小明金额不变, 他两的总金额就改变了。
2024-05-06 12:39:51 1041
原创 常见排序算法——快速排序
归并排序,是通过将数组 n / 2 进行分组,然后比较遍历元素之间进行的排序。快速排序在归并排序的基础上,直接在数组中选取一个中心点(基点),以升序为例,将比中心点小的放在左边,比他大的放在右边。特点就是快速排序分的两部分,一部分一定比另一部分小。
2024-05-04 17:44:48 369
原创 常见排序算法——归并排序
分治思想,通过将一个大问题分成小问题,然后将每个小问题解决,合并成最大的问题。将待排序的序列分成小序列,将小序列排序完成后组成大序列,大序列之间再进行排序,直到组成初始的数组。
2024-05-04 16:38:42 143
原创 常见排序算法——希尔排序
希尔排序在插入排序的基础之上,将待排序序列分成组,分成 gap 个组,组的数量通过 length / 2 获得,比如6个元素的序列,那么就是 3 个组,每个组两个元素,然后将每个组的元素进行插入排序即可,此时分组完成之后,将3个组再分,得到1,进行常规插入排序即可。每次插入排序,不是和前一个元素进行比较,而是和前面第 gap 个元素进行比较。
2024-05-03 17:30:52 487 1
原创 常用排序算法——插入算法
插入算法从名字就能理解,可以用玩扑克牌理牌来比喻1. 当摸完牌之后,根据牌的大小进行排序,比如 3,5,7,8,9,4,需要将 4 插入到 3 的后面2. 此时 4 的下标应该改为 index = 1,而从 5 开始的元素就要集体往后移一位3. 所以可以这样:用 4 和前一个元素进行比较,如果比它小,就和他交换,再次和前一位元素比较,如果比他小就再交换,直到 4 比前一个元素比它大时。
2024-05-03 16:44:46 257 1
原创 自定义全局异常处理器
在写代码的过程中,常常会因为需要提前处理上述的异常,就会出现大量的 try / catch 语句,影响代码的可读性。此时使用全局异常处理器就能减少这些冗余的代码。自定义全局异常处理器,可以更清楚返回给客户端异常的原因即相关描述,更加个性化以及更加灵活。学名是 Controller 增强器,作用是给 Controller 控制器添加统一的操作和处理。结合实现全局异常处理。用于处理应用程序中的异常,当程序发生异常时,该注解会将其拦截并处理,并返回结果给前端。
2024-05-02 12:09:01 1041
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人