- 博客(61)
- 收藏
- 关注
原创 一分钟快速排序
这个quick_sort函数是一个实现快速排序(Quicksort)算法的递归函数。快速排序是一种高效的排序算法,通常用于对大规模数据集进行排序。
2024-05-23 21:05:18 48
原创 一分钟学习LRU和LFU
LRU(最近最少使用)缓存算法基于最近使用的原则来管理缓存。以下是一个示例说明如何在 LRU 缓存中插入和访问元素:当前数组状态:[1, 2, 3, 4, 5]插入元素 6,数组变为:[1, 2, 3, 4, 5, 6]使用元素 2,数组变为:[1, 3, 4, 5, 6, 2](2 被移动到数组末尾,因为它是最近使用的)插入元素 7,数组已经达到最大容量,需要淘汰最久未使用的元素(1)删除元素 1,数组变为:[3, 4, 5, 6, 2, 7]LRU 算法。
2024-05-23 20:49:02 337
原创 CSS常用的两种定位方式
relative定位是相对自身原始位置进行偏移。absolute定位是相对于最近的已定位(relativeabsolutefixedsticky)祖先元素进行偏移。如果没有已定位的祖先元素,则相对于初始包含块(通常是视口)进行定位。相对自身原始位置进行偏移。元素仍占据原始位置的空间。用于微调元素位置,不会影响其他元素的布局。脱离文档流,相对于最近的已定位祖先元素进行定位。不占据空间,其他元素会忽略它的位置。用于精确定位元素,通常与relative定位的祖先元素配合使用。
2024-05-23 17:56:03 268
原创 JS三种for遍历方法
for循环:适用于需要精确控制迭代的情况。可以用于数组和其他需要自定义迭代方式的集合。forEach方法:简洁明了,适用于遍历数组中的每个元素。不支持提前终止循环。for...in循环:用于遍历对象的可枚举属性。可以遍历对象的属性键,但不推荐用于数组遍历。forEach方法是遍历数组元素的简洁方法。它使得代码更简洁易读,但不能中断循环,也不会返回新的数组。如果需要在遍历过程中有更多控制(如提前退出循环),可以考虑使用for循环或其他迭代方法。
2024-05-23 17:30:35 357
原创 CSS实现暗黑模式
通过JavaScript来动态切换暗黑模式和普通模式。使用localStorage保存用户的选择,以便用户刷新页面或重新访问时仍然保持其选择。
2024-05-23 16:49:19 203
原创 hook(post-receive)无法使用
只有一个问题:权限不够,你想想,blog.git是一个中转站,咱们要把上传的东西转到blog下面,肯定要有写入操作呀,这个Git仓库的用户是git(自己设置的用户名),blog主人是root,root没有给git开权限,所以无法写入呀。
2024-01-25 18:16:19 620
原创 Java缓存优化
注解的方法被调用时,Spring 会首先检查缓存中是否已经存在该方法的返回结果,如果存在,则直接返回缓存中的结果,否则,执行方法并将结果存入缓存中。是 Spring 框架中的一个注解,它的主要作用是在指定的缓存中删除条目,以保证缓存中的数据与数据库中的数据保持一致。当这个方法被调用的时候,它会删除数据库中的一条记录,同时也会从 “books” 这个缓存中删除相应的缓存项。只在方法第一次调用时执行实际的方法体,并将结果存入缓存,后续的调用直接从缓存中获取结果,不再执行实际的方法体。注解,以开启缓存注解功能。
2024-01-13 19:02:22 854
原创 docker配置nginx
并将容器的 80 端口映射到宿主机的 80 端口。使用的是 Nginx 1.10 版本的镜像。这个命令只是启动一个 Nginx 实例,用于后续复制配置文件。这一系列命令是为了将容器内的 Nginx 配置文件拷贝到。这次使用更新的配置文件路径启动新的 Nginx 容器。的容器,将宿主机的目录。这个命令启动一个名为。
2024-01-13 19:00:52 598
原创 JVM笔记
程序在运行过程中,会产生大量的内存垃圾(一些没有引用指向的内存对象都属于内存垃圾,因为这些对象已经无法访问,程序用不了它们了,对程序而言它们已经死亡),为了确保程序运行时的性能,java 虚拟机在程序运行的过程中不断地进行自动的垃圾回收(GC)。什么是引用引用是一个对象别名,与被引用的对象共享同一块内存区域。在 Java 中最常见的就是强引用,把一个对象赋给一个引用变量,这个引用变量就是一个强引用。
2023-12-21 18:47:06 697
原创 MySQL的四大主要内容
MySQL支持四种事务隔离级别,分别是Read Uncommitted(读取未提交数据)、Read Committed(读取已提交数据)、Repeatable Read(可重复读)、Serializable(串行化)。不同的隔离级别提供不同程度的数据一致性和并发性。InnoDB存储引擎通过使用行级锁和MVCC机制,实现了高并发性能和事务隔离级别。锁机制保证了数据的一致性,MVCC机制则提高了并发性。事务隔离级别和锁机制可以根据具体的应用场景进行调整,以平衡性能和数据一致性的需求。
2023-12-21 18:39:39 511
原创 `Spring`、`Spring Boot`和`Spring MVC`
、和是Spring框架的不同模块,各自有不同的目标和关注点。Spring:Spring Boot:Spring MVC:总结区别:
2023-12-21 18:38:13 326
原创 多线程的实现方式
运行时异常通常是由程序逻辑错误引起的,例如除零操作、数组越界、空指针引用等。Runnable 接口 run 方法只能抛出运行时异常,且无法捕获处理;Callable 接口 call 方法允许抛出异常,可以获取异常信息。换言之,Runable 比较保守,啥也没有。
2023-12-21 18:34:44 801
原创 粘包和拆包
在客户端中,通过指导者和具体建造者来创建最终的产品。这样的设计允许你通过不同的建造者构建不同的产品,同时保持了产品的构建过程与表示的分离。写一个实现类,这个类里面有一个new好的Product实体类,里面相当于是getter和setter方法,链式调用的话解返回this,最后还有个返回product。在网络通信中,解决粘包和拆包的问题通常需要借助协议或者特定的技术手段。先构建Product的实体类,在写一个接口类,把这个实体类的属性和方法抽离出来,链式调用,相当于一个模板,可以换不同的产品。
2023-12-18 16:02:37 396
原创 TreeMap
TreeMap是 Java 中的一种有序映射表,它基于红黑树(Red-Black Tree)实现。TreeMap继承自类并实现了接口。TreeMap中的元素是有序的,根据键的自然顺序或者通过构造函数提供的Comparator进行排序。这使得TreeMap中的键值对按照一定的顺序存储,便于检索和遍历。TreeMap使用红黑树(Red-Black Tree)作为底层的数据结构,确保了查找、插入和删除操作的对数时间复杂度。TreeMap中的键是唯一的,每个键最多关联一个值。如果键实现了Comparable。
2023-12-18 15:59:45 329
原创 Map.Entry
方法可以获取包含所有键值对的集合,每个元素都是。中的键值对,尤其是在使用迭代器遍历。用指定的值替换与此项对应的值。返回与此项对应的键。返回与此项对应的值。
2023-12-18 15:59:06 342
原创 AtomicInteger
CAS 操作通过硬件指令提供了一种在多线程环境下不需要锁的原子操作,它能够判断某个位置的值是否是预期的值,如果是,则更新为新的值;类型数据的封装,提供了一系列能够以原子方式执行的方法,从而保证了对该整数值的操作是线程安全的。在多线程环境中,对整数值进行诸如自增、自减等运算的操作在默认情况下是线程不安全的。,避免使用锁带来的性能影响。在轻量级的计数器、标记等场景中,它是一个很好的选择。的作用就是提供了一种不需要使用锁的方式来保障这些操作的线程安全性。在需要对一个整数进行多线程安全操作的场景下,可以考虑使用。
2023-12-18 15:58:22 312
原创 接口和抽象类
抽象类可以包含抽象方法和非抽象方法。抽象方法是没有方法体的方法,需要由子类提供具体实现。抽象类可以包含字段、构造方法,可以有访问修饰符,可以有非抽象方法的实现。一个类只能继承一个抽象类,通过extends关键字。提供一个基类,定义一些通用的行为,但不提供完整的实现。允许在抽象类中定义一些非抽象方法,提供一些通用的实现。通过抽象类实现代码的重用,提高代码的可维护性。可以包含字段,可以有构造方法,可以定义访问控制符。
2023-12-18 15:57:50 332
原创 InputStream和OutputStream
监听端口,接受客户端连接,然后通过输入流接收客户端发送的消息,通过输出流发送响应消息。连接到服务器,通过输出流发送消息,通过输入流接收服务器的响应消息。
2023-12-18 15:56:12 362
原创 雪花算法!
序列号的长度为12位,因此在同一毫秒内,最多可以生成2^12=4096个不重复的ID。由于41位的长度,可以表示的时间范围是2^41毫秒,大约69年。在雪花算法中,生成的64位ID的首位是0,这是因为最高位是符号位,0表示正数,1表示负数。在生成ID时,我们通常希望ID是正数,所以首位是0。每个ID都包含了机器标识、时间戳和序列号,确保在同一毫秒内生成的ID不会冲突。ID中包含了时间戳和序列号,因此生成的ID基本上是有序递增的。最高位是符号位,对于正整数而言,固定为0,以保证生成的ID是正数。
2023-12-18 15:54:33 360
原创 InputStream和OutputStream速通
监听端口,接受客户端连接,然后通过输入流接收客户端发送的消息,通过输出流发送响应消息。连接到服务器,通过输出流发送消息,通过输入流接收服务器的响应消息。
2023-12-08 14:15:38 379
原创 接口和抽象类
抽象类可以包含抽象方法和非抽象方法。抽象方法是没有方法体的方法,需要由子类提供具体实现。抽象类可以包含字段、构造方法,可以有访问修饰符,可以有非抽象方法的实现。一个类只能继承一个抽象类,通过extends关键字。提供一个基类,定义一些通用的行为,但不提供完整的实现。允许在抽象类中定义一些非抽象方法,提供一些通用的实现。通过抽象类实现代码的重用,提高代码的可维护性。可以包含字段,可以有构造方法,可以定义访问控制符。
2023-12-07 19:32:14 306
原创 http和https区别
安全性:HTTP是明文传输协议,数据在传输过程中不经过加密处理,容易被恶意攻击者截获和窃听。HTTPS使用SSL(Secure Sockets Layer)或TLS(Transport Layer Security)协议对通信进行加密,确保数据在传输过程中的机密性和完整性,使得数据更加安全。因此,对于处理敏感信息和需要保密性的场景,使用HTTPS是更为推荐的选择。性能:HTTPS的加密和解密过程需要消耗更多的计算资源,因此比起HTTP会稍微慢一些。加密方式:HTTP不使用加密,数据以纯文本形式传输。
2023-12-07 17:46:18 1098
原创 Get和Post的区别
从优势角度看,数据传输使用Post,数据浏览查询使用Get。即查询时使用Get,其他时候使用Post。表单全部使用Post提交。
2023-12-07 17:41:48 312
原创 Git merge 与 Git rebase 与 Git fetch
用于获取远程仓库的最新更改,但不会自动将其合并到当前分支。这使你能够在决定是否合并之前查看和理解远程仓库的更改。是 Git 中的三个不同的命令,它们分别用于不同的目的。在远程仓库中,有一些新的提交,但你的本地仓库并没有跟踪这些更改。这将显示远程仓库的最新提交,你可以选择合并或者进一步处理这些更改。)的最新更改拉取到本地,但并不会自动合并到你的当前分支。这将创建一个新的本地分支,并将其设置为跟踪远程仓库的。这将显示本地分支和远程分支的列表。如果有未提交的更改,可以选择提交或者保存更改。
2023-12-07 17:39:59 634 1
原创 三种单例模式-极简速通流
在需要用到对象时才实例化对象,正确的实现方式是:Double Check + Lock,解决了并发安全和性能低下问题。最优雅的实现方式是使用枚举,其代码精简,没有线程安全问题,且 Enum 类内部防止反射和反序列化时破坏单例。在类加载时已经创建好该单例对象,在获取单例对象时直接返回对象即可,不会存在并发安全和性能问题。在开发中如果对内存要求非常高,那么使用懒汉式写法,可以在特定时候才创建该对象;枚举类型的实例是在类加载时创建的,因此它是线程安全的。,让所有需要调用的地方都共享这一单例对象。
2023-12-07 17:23:59 681
原创 心跳检测解决了什么问题
现在思考一个问题,服务在下线时需要从注册中心移除元数据,那么注册中心怎么才能感知到服务下线呢?我们最先想到的方法就是节点主动通知的实现方式,当节点需要下线时,向注册中心发送下线请求,让注册中心移除自己的元数据信息。但是如果节点异常退出,例如断网、进程崩溃等,那么注册中心将会一直残留异常节点的元数据,从而可能造成服务调用出现问题。为了避免上述问题,实现服务优雅下线比较好的方式是采用主动通知 + 心跳检测的方案。
2023-12-07 17:21:40 357
原创 HashMap、TreeMap和LinkedHashMap速通流
使用HashMap适用于大多数情况,无序性、性能要求较高。使用TreeMap适用于需要有序键值对,对有序性要求较高的情况。使用适用于需要有序性,且希望保留元素插入顺序的情况,性能介于HashMap和TreeMap之间。
2023-12-04 17:53:30 447
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人