- 博客(194)
- 资源 (4)
- 收藏
- 关注
原创 【物联网】一篇文章带你认识RFID(射频识别技术)
无源标签由一块小芯片和天线组成,无需电池,依靠读卡器产生的电磁场(无线电波)获取工作所需的能量,当进入阅读器的电磁场范围内,将从天线获得感应电流,经升压电路后转换为芯片的电源,同时感应电流所获取的能量通过射频前端电路变为数字信号送入逻辑控制电路进行处理,需要回复的信息则从标签存储器中发出,经逻辑控制电路送回射频前端电路,最后通过天线发回读写器。据统计RFID技术运用于物流管理领域,准确率能达到甚至超过99%,减少了企业的资源浪费,并且所有的商品物流都会被记录下来并生成文档,方便追踪和进一步优化识别。
2024-09-15 14:35:47 958
原创 【保姆级】使用Java注解和反射实现JSON字段自动重命名
不知道有没有同学遇到过对接业务方代码非常“独具一格”(不符合通用规范且不愿意配合修改emmmm。。。),于是就只能“被迫”按他的格式来,但是又不想因为他的不规范导致我们自己创建的接收对象也非常的“一言难尽”。。。今天这篇帮你解决这个问题~(老规矩:附完整可执行代码)先给初学Java的同学补下基础,涉及到一些实现这个功能需要的知识点(了解的朋友可以直接跳过~)
2024-09-08 17:52:40 236
原创 启动正常但无法Debug?解决ERROR: transport library not found: dt_socket
项目启动类的jre环境与项目设置里jdk环境配置未统一。项目启动时正常,但是Debug就报错,如下图。① 项目设置里jdk环境配置。② 启动类的jre环境。
2024-05-24 12:57:53 556
原创 【保姆级】Protobuf详解及入门指南
Protobuf(Protocol Buffers)协议😉 Protobuf 是一种由 Google 开发的二进制序列化格式和相关的技术,它用于高效地序列化和反序列化结构化数据,通常用于网络通信、数据存储等场景。
2024-03-11 16:45:22 26394
原创 【Redis】深入理解 Redis 常用数据类型源码及底层实现(6.详解Set和ZSet数据结构)
本文是深入理解 Redis 常用数据类型源码及底层实现系列的第6篇~前5篇可移步( ̄∇ ̄)/
2024-02-29 10:45:04 1045 1
原创 【Redis】深入理解 Redis 常用数据类型源码及底层实现(5.详解List数据结构)
本文是深入理解 Redis 常用数据类型源码及底层实现系列的第5篇~前4篇可移步( ̄∇ ̄)/正文开始~在Redis 3之前,List数据结构底层ziplist和linkedlist双向链表(当列表对象中元素的长度比较小或者数量比较少的时候,采用ziplist来存储(内存紧凑,访问效率高,但是更新效率低,当数据量较大时,可能导致大量的内存复制)当列表对像中元素的长度比较大或者数据数量比较多的时候会使用linkedlist(修改效率高,但是内存开销大,当节点较多时,会产生大量的内存碎片)。
2024-02-28 10:29:35 802
原创 【数据结构与算法】“黑白标记法”带你彻底吃透二叉树的前中后序遍历(超好记的迭代法模版)
做过二叉树前中后序遍历的同学应该有些印象,这三种遍历方式的递归法非常的简单,并且非常的相似,只需要稍微调整下处理逻辑(这里指将节点值添加进集合)的位置即可。
2024-02-20 17:58:11 1060 2
原创 【Redis】深入理解 Redis 常用数据类型源码及底层实现(4.详解Hash数据结构)
在Redis 6及其以前的版本中,ziplist为了节省内存而采用了紧凑的连续存储方式,ziplist是一个双向链表,可以在时间复杂度O(1)下从头部或者尾部进行插入/删除。
2024-02-18 18:47:38 1273
原创 【Redis】深入理解 Redis 常用数据类型源码及底层实现(3.详解String数据结构)
type都是string,但是encoding不同int:保存长整型(long)的64位(8个字节)的符号整数只有整数才会使用int,如果是浮点数,Redis内部会先将浮点数转换为字符串值,然后再保存最小值是-2^63(-9,223,372,036,854,775,808)最小值是2^63-1(9,223,372,036,854,775,807)默认值是0Lembstr:保存长度小于44字节的字符串或者长度大于19。
2024-02-05 17:22:38 991
原创 【自制小工具】如何给你的图片添加自定义水印(附完整代码)?
这段代码用到了Graphics2D,Graphics2D是Java中用于绘图的工具类,是Graphics类的扩展,可以绘制形状、图像、文本等各种二维内容,上面的代码的逻辑是先搜索你电脑里都安装了哪些字体,然后依次用这些字体在特定的位置给特定地址的图片加上特定的文字水印~当然这只是其中一部分字体,,,我也是今天才发现我电脑里居然装了那么多字体 ==这是一篇关于怎么尽可能的用尽你电脑里的所有字体给你的图片加水印。搞定撒花*★,°*:.☆( ̄▽ ̄)/$:*.°★*。就是在原有的基础上添加了透明度和循环。
2023-12-31 20:36:51 593 4
原创 【Redis】深入理解 Redis 常用数据类型源码及底层实现(2.版本区别+dictEntry & redisObject详解)
在关于这些底层数据结构是如何构成我们熟悉的Set、Sorted Set 、List、Hash……的Redis和7并不完全一致,我们来看看两个版本之间的区别。
2023-12-26 10:02:52 1967 6
原创 【Redis】深入理解 Redis 常用数据类型源码及底层实现(1.结构与源码概述)
在文章中我们介绍了Redis常用的10大数据类型,这10大数据类型可并不是直接在底层通过代码实现的,而是通过不同的组合起来的,这篇我们介绍下Redis常用数据类型的底层数据结构( ̄∇ ̄)/
2023-12-12 14:22:34 1426 6
原创 【GIS】1.什么是空间分析?
空间分析不仅仅是指做一个地图这么简单,而是为这些位置空间添加实际的值,并通过对这些值的转换、计算等操作,以及应用一些分析方法来获取/发现更深层面的地理空间知识,使这些数据超越地图🗺️本身。从原始数据转化成信息,然后演变成知识,甚至有可能演变智慧。简单地说就是地理和科学的结合。如果,那么这就定义了空间数据科学。
2023-12-12 14:14:12 1210 6
原创 【JUC】Java并发编程从挖坑到入土全解(4-一文讲通LockSupport与线程中断->长图预警)
首先,一个线程不应该由其他线程强制中断或停止,而是应该由线程自己自行停止,自己来决定自己的命运(所以,Thread的stop()、suspend()、resume()都已经废弃了)其次,在Java中没有办法立即停止一条线程,然而停止线程又显得那么重要(比如需要取消一个耗时/错误操作)。因此,Java提供了一种用于停止线程的协商机制——中断,也即中断标识协商机制。中断只是一种协作协商机制,Java没有给中断增加任何语法,中断的过程完成完全要求程序员自己实现。
2023-10-10 15:46:15 443 11
原创 【JUC】Java并发编程从挖坑到入土全解(3-线程池源码分析)
在web开发中,服务器会为每一个请求分配一个线程来处理,如果每次请求都要创建一个线程的话,实现起来虽然简单,但是存在一个问题:如果开发的请求数量非常多,但每个线程执行的时间很短,这样就会频繁的创建和销毁线程,如此会大大降低系统的效率,很有可能出现服务器在创建和销毁线程上花费的时间和消耗的系统资源比实际处理的用户请求的时间和资源还多。于是,线程池应运而生,线程池满足了一个线程执行完一个任务不会被销毁,而是可以继续执行其他任务的目的。
2023-09-28 11:34:39 359 13
原创 【JUC】Java并发编程从挖坑到入土全解(2-当我们聊锁时,锁的到底是什么)
当对方法加synchronized关键字时,锁的是当前对象(this),所以即使是多线程只要调用的是同一个对象的synchronized方法,就需要串行执行(案例1和案例2),未被synchronized修饰的普通方法则不受影响(案例3)如果是不同对象则不受影响(案例4),分别在自己的对象上加锁,不会影响到别的对象当在带有“static”的方法上加了synchronized关键字时,锁的是当前类,无论几个对象,都要抢类的这一把锁,因而是否使用同一对象都会串行执行。
2023-09-17 18:35:37 159 2
原创 【JUC】Java并发编程从挖坑到入土全解(1-直达底层源码的线程基础)
JUC全称java.util.concurrent ,是在并发编程中使用的工具包。
2023-09-12 18:01:35 153 1
原创 【填坑向】MySQL常见报错及处理系列(Communications link failure & Access denied for user ‘root‘@‘localhost‘)
翻一下大致的意思就是默认会按照如下的顺序读取配置文件,我上面贴出的配置文件就是第一个/etc/my.cnf,但显然目前在运行的MySQL并不是使用的这个配置文件,保险起见,我依次查看了列出的所有位置的my.cnf,看是否存在,存在的话内容是什么,于是发现/usr/local/etc/my.cnf也存在,并且未配置端口信息,我在该位置的my.cnf中添加了端口配置(port = 3306)并重启后,再次执行lsof -i:3306。执行brew services list可以看到MySQL是启动成功了的。
2023-08-24 14:12:02 528
原创 【填坑向】MySQL常见报错及处理系列(Navicat:2002 - Can‘t connect to MySQL server on ‘127.0.0.1‘ & 获取配置文件my.cnf路径)
由于不同版本的MySQL可能默认的配置文件位置不同,并且有些版本的MySQL在安装时并不会自动创建my.cnf文件,需要用户手动创建。上面命令返回的路径+--verbose --help |grep -A 1 'Default options',然后回车后显示的就是my.cnf的路径。上面红框框内的就是读取配置文件my.cnf的路径的顺序(MySQL在启动时将按照列出的顺序读取这些文件中的配置,即优先级从左到右依次降低)可以尝试右键选择“高级”,勾选“使用套接字文件”
2023-08-24 13:37:04 1469
原创 【填坑向】MySQL常见报错及处理系列(ERROR! The server quit without updating PID file)
MySQL 数据文件通常位于 /usr/local/var/mysql 目录中,可以使用sudo rm -rf /usr/local/var/mysql进行删除;如果只有这意味着只有 grep mysql 这一个进程与mysql相关,即MySQL 服务器当前并没有在运行,说明 MySQL 服务器已经停止了,无需再手动删除。删除 MySQL 安装文件和数据文件,MySQL 的默认安装位置是/usr/local/mysql,可以使用sudo rm -rf /usr/local/mysql删除它。
2023-08-22 15:18:55 952 1
原创 【保姆级】Redis集群(cluster)本地案例手把手操作指南(含常见问题以及处理方式)
本案例源自Redis官网,有兴趣的朋友可以直接访问。
2023-08-08 16:53:19 841 2
原创 【Redis】使用Docker镜像配置集群时的Operation timed out问题
在 Docker 容器内运行的程序可能会使用与程序认为正在使用的端口不同的端口来公开。但是紧接着,官网也提出了这么操作并不安全,并建议如果想让一个容器可供其他容器访问,则无需发布该容器的端口。172.17.0.2是我其中一个Redis实例的IP和端口号,并且我用主机ping 172.17.0.2是可以ping通的。而Docker使用技术的就是端口映射:在Docker容器内运行的程序可能会使用与程序认为正在使用的端口不同的端口来公开。为了让Docker兼容Redis Cluster,需要使用Docker的。
2023-08-08 15:41:14 545 1
原创 【Redis】高级篇: 一篇文章讲清楚Redis的单线程和多线程
一种同步的IO模型,实现一个线程监视多个文件句柄,一旦某个文件句柄就绪,就能通知到对应程序进行相应的读写操作,没有文件句柄就绪时,就会阻塞应用程序,从而释放CPU资源。I/O网络I/O,尤其在操作系统层面指数据在内核态和用户态之间的读写操作多路多个客户端连接(连接就是套接字描述符,即socket或者channel)复用复用一个或者几个线程连接IO多路复用也就是说一个或者一组线程处理多个TCP,使用单进程就能实现同时处理多个客户端的连接,无需创建或者维护过多的进程/线程总结。
2023-07-26 17:55:21 3583 29
原创 【Redis】高可用之三:集群(cluster)
官网地址由于数据量过大,单个Master复制集难以承担,因此需要对多个复制集进行集群,形成水平扩展。每个数据集只负责存储整个数据集的一部分,这就是Redis的集群,其作用是提供在多个Redis节点间共享数据的程序集。Redis集群可以支持多个Master,从哨兵到集群。
2023-07-19 16:48:52 2074 12
原创 【Redis】高可用之二:哨兵(sentinel)
哨兵会巡查监控后台master主机,查看是否存在故障,如果故障了,就会根据投票数自动将某一个从库转换为新主库,继续对外服务(解决复制的痛点)官方网址简单来讲,哨兵就是一种无人值守的运维机制3个哨兵自动监控和维护集群,不存放数据,只是“吹哨人”1主2从用于数据读取和存放主机宕机,从机数据还在会从剩下的两台主机中选出新的主机如果宕机的主机恢复,不会出现主机冲突,恢复的主机将变为新主机的从机。
2023-07-07 14:14:36 2096 22
原创 【Redis】高可用之一:复制(replica)
官网地址: https://redis.io/docs/management/replication/其实就是主从复制,master以写为主,slave以读为主当master数据变化的时候,自动将新的数据异步同步到其它slave数据库主机(master)能读能写,从机(slave)只能读无论主机已经写了多少数据,从机一旦启动,就会全部复制过来,后续主机写,从机跟配置文件🆚命令配置使用配置文件进行主从配置时,如果主机挂了,从机不会变化,还可以提供读的功能,等待主机恢复(重启后主从关系仍在)
2023-07-04 11:51:29 616 3
原创 【Redis】不卡壳的 Redis 学习之路:事务
数据库中的事务是指在一次与数据库连接的会话中,所有的SQL语句,要么都成功,要么都失败。在Redis中,事务是指可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会被序列化,按顺序地串行执行而不会被其他命令插入开启:以MULTI开始一个事务入队:将多个命令入队到事务中,接到这些命令并不会立即执行,而是放到等待执行的事务队列里面执行:由EXEC命令触发事务。
2023-06-30 13:03:15 430
原创 【多线程】ConcurrentHashMap1.8源码保姆级解析
基于一个while循环,先去判断数组初始化了没有,如果没有,会再次比较sizeCtl的情况,如果正在初始化,则会通过Thread.yield()让出CPU资源,如果没有初始化,则会通过CAS的方式修改sizeCtl的值为-1,修改过后还会再次判断数组是否被初始化了(DCL,以免在当前线程修改sizeCtl的值的时候,已经有别的线程对当前数组完成了初始化),如果当前数组仍然没有被初始化,才会真正开始初始化。>0:代表当前数组已经初始化完成,此时sizeCtl的值代表当前数组的扩容阈值,或者数组的初始化大小。
2023-06-26 18:41:12 1488 16
原创 一篇文章搞定Java中常用集合的排序方法
最近在做算法题的时候,发现排序在大部分题中都不可或缺,今天心血来潮,总结下Java中集合排序常用的方法,基本覆盖了大部分的排序场景(特别是自定义比较器,太好用叻( ̄▽ ̄)/)文中提到的自然顺序排序,对于可比较大小的数据类型,一般按照从小到大的顺序,无法比较大小的,一般指按字典序升序排列。
2023-06-07 17:57:22 5665 10
原创 【保姆级】拯救“爆红”C盘,轻松清出30G
打开一个程序,发现等它启动好了咖啡都凉叻。。访问个文件,都要转个圈圈。。不、转好几个圈圈⭕️⭕️⭕️⭕️⭕️⭕️⭕️更新、安装新软件时,提示“安装失败”=[,,_,,]:3一点开我的电脑 =_= 就看到C盘“爆红”的“进度条”。。。
2023-05-29 10:52:01 557 8
原创 【JMM】并发编程Bug的源头——可见性/有序性/原子性问题
synchronized内置锁是一种对象锁,锁的是对象,而非引用,作用粒度是对象,可以用来实现对临界资源的同步互斥访问,并且可重入。在 Java 早期版本中,synchronized属于重量级锁,效率低下,因为内部对象Monitor(监视器锁)是依赖于底层的操作系统的Mutex Lock实现的,Java 的线程是映射到操作系统的原生线程之上的。如果要挂起或者唤醒一个线程,都需要切换到操作系统的内核态来完成,这个状态切换导致早期的 synchronized 效率较低。
2023-05-23 16:31:17 923 14
原创 【JMM】保证线程间的可见性,还只知道volatile?
volatile保证线程之间的可见性依靠的是内存屏障我们先介绍下volatile在hotspot虚拟机中的实现。
2023-05-12 13:56:07 960 22
原创 【操作系统】从操作系统底层出发,成为更好的程序员
首先,我们从一个问题开始( ̄∇ ̄)/为什么需要程序员?早期的计算机程序是硬件化的,即使用各种门电路组装出一个固定的电路板,这个电路板只能用于执行某个特定的程序,如果需要修改程序功能,就要新组装一个电路板。而一位叫做冯诺依曼的老爷子的出现,提出了一种指令数据化的思想,使得程序和数据一样,可以存储起来,组合调用,至此,程序脱离了电路板的桎梏,成为了可以人为组合的指令集,程序员应运而生。当然,我们需要郑重地介绍下这位冯老爷子,1903年12月28日—1957年2月8日),原名),出生于的籍与的奠基者,在和。
2023-05-09 17:56:41 867 28
原创 【Redis】持久化机制详解:从RDB到AOF,你需要知道的一切
持久化其实就4个单词:加强数据安全Redis支持两种不同的持久化机制,RDB和AOF。
2023-05-04 10:03:34 1204 38
原创 【Redis】不卡壳的 Redis 学习之路:从十大数据类型开始入手
关于Redis的数据类型,各个文章总有些小不同,我们这里讨论的是Redis 7.0,为确保准确,我们直接看官网。
2023-04-25 16:20:31 3034 33
原创 【MySQL】记录锁?间隙锁?临键锁?到底锁了些什么?这一篇帮你捋清楚( ̄∇ ̄)/
LOCK_MODE列中为X,即加了临键锁,锁住的范围是LOCK_DATA中的行数据以及其前间隙(左开右闭)LOCK_MODE列中为X,REC_NOT_GAP,锁住的是LOCK_DATA中的行数据LOCK_MODE列中为X,GAP,锁住的是LOCK_DATA中的行数据前面的间隙(左开右开)
2023-04-15 22:09:16 250877 56
原创 【MySQL】锁详解——从结构分类到适用场景
我们要学习锁首先要了解下我们想了解的锁到底是什么🤔而在MySQL中给某个数据加锁的本质其实就是,而这个锁结构就是我们常提到的MySQL的锁🔒那么接下来的问题就是,这个锁结构长啥样呢?
2023-04-03 10:18:54 250260 42
原创 【MySQL】MySQL索引优化——从原理分析到实践对比
嵌套循环连接算法 Nested-Loop Join(NLJ)使用索引字段进行关联的关联查询一般会使用NLJ简单理解就是拿一张表(驱动表)中的所有数据,一次一次的去另一张表(被驱动表)中查找对应行,最后取出两张表的结果合集把b表中读取一行数据(b表有过滤条件会从过滤后的结果中读取)取出关联字段(id)去a表中查找较取出a表中满足条件的行,和b表中获取到的结果合并,返回重复上面👆3个步骤基于块的嵌套循环连接算法 Block Nested Loop Join(BNL)使用非索引字段。
2023-03-30 16:57:30 249736 19
原创 【MySQL】了解MySQL的Explain,读这一篇够了( ̄∇ ̄)/
EXPLAIN提供MySQL如何执行语句的信息,举个例子就是在你要执行的查询语句前加一个EXPLAIN,就可以查看执行当前语句的具体信息,比如属于什么查询类型啦~走了什么索引啦(具体如下图)~我们在碰到一些类型“慢查询”问题时,一般会使用EXPLAIN来分析我们的SQL还有哪些地方可以做优化,具体就是根据上图中列表字段进行分析的,本篇就把EXPLAIN的关键字段挖个地儿朝天,👩再也不用担心要如何对SQL进行优化叻( ̄∇ ̄)/
2023-03-27 14:47:03 248174 16
原创 【实测版】联合索引,最左匹配原则,走?不走?
联合索引的各个字段可以不按顺序出现(原因是WHERE后面字段的顺序会被优化器优化为符合最左前缀的顺序),但是第一个字段必须出现,否则不走索引(最左前缀匹配,即WHERE条件必须有联合索引的第一个字段,以最左边的为起点任何连续的索引都能匹配上),当SELECT后需要查询的字段被联合索引覆盖,也会走索引,但方式是进行全索引扫描,效率并不高。
2023-03-24 15:01:44 241173 3
Spring源码(5.2.21版本,包含zip和tar.gz两种格式,JDK8可用)
2022-04-20
Cesium ion 官网的示例文件AGI_HQ.zip
2020-04-02
Cesium.rar
2020-03-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人