
所有文章
文章平均质量分 81
工作日记本,仅记录工作痕迹,如有错误的地方,希望友友指出,勿让其他友友误入歧途!
刻苦的樊同学
希望和博客的大牛们一起进步,欢迎批评指正!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
计算机组成原理和计算机网络的复习
一台可以正常使用的电脑,除了齐全的硬件,还要有完善的软件,两者是相辅相成的,硬件指的就是硬件,很多朋友以为软件指的就是我们使用的操作系统,其实电脑主板上面还有一个系统,这也就是我们说的BIOS系统,这个系统我们一般情况下用不到的,正常是在安装系统,硬件超频的时候才能用得到,BIOS其实是英文Basic Input Output System的缩写,意思是基本输入输出系统,它是电脑启动时加载的第一个软件,它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序。原创 2024-11-14 10:20:16 · 1023 阅读 · 0 评论 -
轻量级分布式任务调度平台(XXL-JOB介绍、原理、工作流程、XXL-JOB环境搭建集成springboot)
XXL-JOB是一个轻量级分布式任务调度平台,主打特点是平台化,易部署,开发迅速、学习简单、轻量级、易扩展,代码仍在持续更新中。调度中心任务调度控制台,平台自身并不承担业务逻辑,只是负责任务的统一管理和调度执行,并且提供任务管理平台执行器负责接收“调度中心”的调度并执行,可直接部署执行器,也可以将执行器集成到现有业务项目中。通过将任务的调度控制和任务的执行解耦,业务使用只需要关注业务逻辑的开发。XXL-JOB主要提供了任务的动态配置管理、任务监控和统计报表以及调度日志几大功能模块,原创 2024-11-14 10:19:36 · 1529 阅读 · 0 评论 -
深入浅出MappedByteBuffer多线程 Map映射 快速处理大文件
java io操作中通常采用BufferedReader,BufferedInputStream等带缓冲的IO类处理大文件,不过java nio中引入了一种基于MappedByteBuffer操作大文件的方式,其读写性能极高,本文会介绍其性能如此高的内部实现原理。内存管理MMU:CPU的内存管理单元。物理内存:即内存条的内存空间。虚拟内存:计算机系统内存管理的一种技术。原创 2024-11-14 10:18:30 · 1041 阅读 · 0 评论 -
实现一个任务调度引擎系统
【代码】实现一个任务调度引擎系统。原创 2024-11-14 10:13:55 · 402 阅读 · 0 评论 -
使用binlog对mysql进行数据恢复或迁移
可以看到 log_bin 已经开启, 同时可以看到存储的位置在 /daba/mysql 目录 , 前缀是 binlog。以前的方式通常是导出数据的sql文件,再导入,或备份文件,恢复备份,这里使用binlog文件恢复数据库。查看/etc/my.cnf文件,dataDir指定的路径就是binlog的日志位置。这里为了备份,把B数据库的所有数据文件打包存起来即可,然后删除所有文件。如果没有开启bin_log,只有直接拷贝数据文件的办法了。进入B数据库,查看mysql的安装路径。A数据库的数据迁移到B数据库。原创 2024-11-14 10:13:00 · 498 阅读 · 0 评论 -
关于Iceberg数据湖的正确使用方式 转载大佬的博客就不声明了,在此标题处声明,非全原创,感谢!
说明 如果写数据时,遇到异常提示return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask,应该找不到fb303相关类路径,可以在Hive命令行中手动执行命令 add jar /Users/XXX/cloudera/cdh5.7/hive/lib/libfb303-0.9.3.jar。下载地址:https://dlcdn.apache.org/hive/hive-2.3.9/apache-hive-2.3.9-bin.tar.gz。原创 2024-11-14 10:10:39 · 693 阅读 · 0 评论 -
gateway网关结合nacos动态路由
网关路由请求过后,如果我们希望拦截请求,做自己的业务逻辑则可以使用GlobalFilter 全局过滤器。全局过滤器的作用也是处理一切进入网关的请求和微服务响应,与 GatewayFilter 的作用一样。区别在于 GlobalFilter 的逻辑可以写代码来自定义规则;而 GatewayFilter 通过配置定义,处理逻辑是固定的。**需求:**定义全局过滤器,拦截请求,判断请求的参数是否满足下面条件参数中是否有 authorizationauthorization 参数值是否为 admin。原创 2024-11-14 10:09:38 · 1534 阅读 · 0 评论 -
大数据开发之Kafka和Kafka Restful Proxy的入门教程
消费者会定期将自己消费分区的offset提交给__consumer_offsets,key是consumerGroupId+topic+分区号,value就是当前offset的值,并且kafka会定期清理topic里的消息仅保留最新的那条数据,通过如下公式可以选出consumer消费的offset要提交到__consumer_offsets的哪个分区。新消费组中的消费者在启动以后,默认会从当前分区的最后⼀条消息的offset+1开始消费(消费新消息)。可以通过以下的设置,让新的消费者第⼀次从头开始消费。原创 2024-11-14 10:08:48 · 1334 阅读 · 0 评论 -
难难难难难难难!美团追魂七连问!关于Object o = new Object()创建对象的问题
看下图,比如thread1第一次进来,判断是否为空,为空,拿到锁之后创建对象,但是创建对象有三步(申请空间,初始化,关联),但是这里发生了指令重排序,申请了空间,并进行了关联,但此刻并未初始化(对象有了,数据为空),此时thread2进来了,判断是否为空,不为空,不为空的话,直接就拿走对象用了,其实这个对象的数据都是未初始化的数据,因此就错了。有同学想问,字符串的长度不一样长,为何字节一直是4个字节?默认压缩,占4个字节,不压缩占8个字节,实例数据有多少就占多少,类型指针指向创建的类,此处指针指向。原创 2024-11-14 10:07:43 · 442 阅读 · 0 评论 -
自己手动写一个红黑树&&红黑树原理分析
*2.左旋:**以某个结点作为支点(旋转结点),其右子结点变为旋转结点的父结点,右子结点的左子结点变为旋转结点的右子结点,左子结点保持不变。**3.右旋:**以某个结点作为支点(旋转结点),其左子结点变为旋转结点的父结点,左子结点的右子结点变为旋转结点的左子结点,右子结点保持不变。但左子树和右子树的黑结点的层数是相等的,也即任意一个结点到到每个叶子结点的路径都包含数量相同的黑结点(性质5)。由于插入的结点是红色的,当插入结点的黑色时,并不会影响红黑树的平衡,直接插入即可,无需做自平衡。原创 2024-11-14 10:06:24 · 620 阅读 · 0 评论 -
自己手动写一个基于LinkedList的消息队列(监听机制&&实时消费)
其实到这里,消息注册和消息消费已经实现了,但是我们想要做到的是一个可以自动消费消息的队列,所以思路是,我们要在项目启动时,就将消费者处于就绪状态,提供者发送消息后,消费者可以实时进行消费。首先我们想要设计一个方案的时候,要先捋清楚思路,想一下现有的,别人已经实现的方案,然后思考自己如何才能实现。我们看到,当项目启动的时候,消费者已经处于就绪状态,队列中没有消息,所以处于堵塞状态,当监听到消息后,立马工作进行消费。可以看到,提供者第一次注册消息时,将队列唤醒,并注册到队列中,消费者监听到消息,立马开始工作。原创 2024-11-14 10:05:19 · 419 阅读 · 0 评论 -
自己手动写一个HashMap
【代码】自己手动写一个HashMap。原创 2024-11-14 10:04:30 · 434 阅读 · 0 评论 -
自己手动写一个RPC框架
然后把接口和实现类注册到RPC的注册中心,然后通过RPC的RPCServer开启一个serversocket,监听某一个端口。创建RemoteInvocationHandler(自定义的名称),重写invoke方法,写代理类要执行的逻辑。RpcServer,用来创建serversocket,接收client发来的内容(此处线程池只是用来提高效率)创建RpcRequest,装载信息,也要序列化,也是网络传输的一员。新建Product类,记得实现序列化,因为要在网络中进行传输。原创 2024-11-14 10:03:53 · 459 阅读 · 0 评论 -
手写一个@Transactional注解,实现事务回滚
*** 自定义事务注解* 空注解,用来标识*//*** 将自定义的事务注解,使用AOP的方式,来增强它的功能*/@Aspect@Component@Autowired/*** 让标记着@myTransactional注解的方法,不直接调用,而是在该方法前后增加代码,增强该方法功能。原创 2024-11-14 10:03:14 · 308 阅读 · 0 评论 -
尚硅谷MySQL数据库高级,mysql优化,数据库优化视频配套笔记
索引是什么?索引(INDEX)是帮助MySQL高效获取数据的数据结果。索引是排好序的快速查找数据结构。索引的目的在于提高查询效率,可以类比字典的目录。如果要查mysql这个这个单词,我们肯定要先定位到m字母,然后从上往下找y字母,再找剩下的sql。如果没有索引,那么可能需要a---z,这样全字典扫描,如果我想找Java开头的单词呢?如果我想找Oracle开头的单词呢???重点:索引会影响到MySQL查找(WHERE的查询条件)和排序(ORDER BY)两大功能!原创 2024-11-14 10:02:21 · 1121 阅读 · 0 评论 -
手撸一个ThreadPool线程池(源码简化版)
线程池由任务队列和工作线程组成,它可以重用线程来避免线程创建的开销,在任务过多时通过排队避免创建过多线程来减少系统资源消耗和竞争,确保任务有序完成。更多介绍参考文章:https://www.imooc.com/article/51147B站视频地址:https://space.bilibili.com/512437822。原创 2024-11-13 10:28:41 · 387 阅读 · 0 评论 -
Apache Camel的认识和应用详解
apache camel官网:https://camel.apache.org/apache camel 是轻量级ESB框架(什么是ESB框架?endpoint,所谓的endpoint,就是一种可以接收或发送数据的组件。可以支持多种协议,如jms,http,file等。processor,它是用来处理具体业务逻辑的组件。route,用来路由,指示数据从哪里来到哪里去,中间用哪个processor处理。原创 2024-11-13 10:28:00 · 3555 阅读 · 0 评论 -
Netty实现FTP服务器(少点儿罗嗦,多点儿干货)
【代码】Netty实现FTP服务器(少点儿罗嗦,多点儿干货)原创 2024-11-13 10:27:06 · 447 阅读 · 0 评论 -
手写一个AQS队列同步器锁 高仿AbstractQueuedSynchronizer抽象队列同步器 AQS同步器核心原理剖析(自旋+LockSupport+CAS)
现在有一个场景,就是很经典的减库存高并发的场景,以下是伪代码//查询库存//如果库存数量>0,库存减1//如果库存数量<0,减库存失败假如数据库的库存数量是5,如果是高并发的情况下(30个线程同时减库存),没有加synchronize同步锁,结果将如何?结果是,下单成功的数量远远大于5,为什么?原创 2024-11-13 10:24:47 · 760 阅读 · 0 评论 -
记一次springboot下载Excel模板,Excel表损坏问题
当前开发一个Excel表模板下载功能,模板读取和模板下载都是么有问题的,但打开Excel表示提示,文件已损坏。{db.url},那么如果配置了db.url=aaa的话,在项目编译的时候,就会自动的把${db.url}替换为aaa。问题根因是在maven编译时Excel模板表就已经被损坏了,下载一个已经被损坏的Excel表肯定是无法打开的。这里就有新问题了,为啥Excel表在编译后会被损坏,这里就涉及到maven resource标签的使用。主要用来替换项目中的资源文件(.properties)当中的。原创 2024-11-13 10:24:00 · 405 阅读 · 0 评论 -
Neo4j图形数据库和Cypher查询语言的学习与应用
Cypher是一种是一种声明式图查询语言,类似于关系型数据库的sql语言。常用的语句:MATCH:匹配图模式,从图中获取数据的常见方式WHERE:不是独立的语句,而是MATCH,OPTION MATCH 和 WITH 的一部分,用于给模式添加约束或者过滤传递给WITH的中间结果CREATE和DELETE:创建和删除节点关系SET和REMOVE:使用SET设置属性值和给节点添加标签,使用REMOVE移除他们MERGE:匹配已经存在的或者创建新节点和模式,对于有唯一性约束的时候非常有用。原创 2024-11-13 10:23:09 · 1013 阅读 · 0 评论 -
项目-无侵入代码方式使用Redis实现缓存功能
公司新需求,在查询接口的manager层要加入redis缓存,只要通过manager层的增删改查方法,统统进行缓存处理。基于这个需求,我写了一个aop切面,具体实现逻辑如下ProceedingJoinPoint的操作见文章:https://www.cnblogs.com/draymond/p/12670123.html@Retention(RetentionPolicy.RUNTIME)//选择运行环境//查询条件(查询详情的主键)/*** 方法操作。原创 2024-11-13 10:22:29 · 288 阅读 · 0 评论 -
手写一个基于redis的分布式锁(watch dog看门狗 / redisson分布式锁的底层原理)
首先看一下锁的主体,首先在过期时间上采取一个比较折中的策略:默认30s,目前直接在代码写死,后期优化成可配置的形式,这样程序宕掉也不至于长时间的不可用;其次,关于业务线程可能阻塞导致的执行时间过长的问题,这边可以看到在lock的时候会启动一个WatchDog线程,此线程的作用是用于监视key的剩余过期时间,发现过小时完成自动续约,以此来保证锁不会被提前释放。Redisson分布式锁的底层原理:https://www.cnblogs.com/windpoplar/p/11964088.html。原创 2024-11-13 10:21:37 · 473 阅读 · 0 评论 -
用JAVA实现大文件上传及显示进度信息
文章转自:https://www.cnblogs.com/darkprince/p/5114936.html原创源码(参考):https://gitee.com/fanjiangfeng/UploadBigFile我的源码:https://gitee.com/fanjiangfeng/xxx_edu。原创 2024-11-13 10:20:38 · 1516 阅读 · 0 评论 -
Java设计模式的分析与实践(23种设计模式)
1,设计模式概述1.1 软件设计模式的产生背景"设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中。1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫·亚历山大(Christopher Alexander)在他的著作《建筑模式语言:城镇、建筑、构造》中描述了一些常见的建筑设计问题,并提出了 253 种关于对城镇、邻里、住宅、花园和房间等进行设计的基本模式。1990年软件工程界开始研讨设计模式的话题,后来召开了多次关于设计模式的研讨会。直到1995 年,艾瑞克原创 2024-11-13 10:18:24 · 700 阅读 · 0 评论 -
EFK日志收集系统的设计与实现
primary shard(建立索引时一次设置,不能修改,默认5个),replica shard(随时修改数量,默认1个),默认每个索引10个shard,5个primary shard,5个replica shard,最小的高可用配置,是2台服务器。上面已经分析了文档路由机制,默认的这种路由模式,最大的优势在于负载均衡,这种方式可以保证平均分配在不同的分片上,但是他有一个很大的劣势,就是查询时候无法确定文档的位置,此时它会请求广播到所有的分片上去执行,另一方面,使用默认的路由模式,后期修改分片数量不方便。原创 2024-11-13 10:15:42 · 986 阅读 · 0 评论 -
JVM (Java Virtual Machine) 基础篇(原创:坤哥)
当前线程所执行字节码的行号指示器,指向下一个要执行的指令代码。原创 2024-11-13 10:10:14 · 710 阅读 · 0 评论 -
Linux_Shell脚本的艰辛之路(初级篇)
定义变量:变量名=变量值,变量名必须以字母或下划线开头,区分大小写 ip=1引用变量:$变量名 或 ${变量名}查看变量:echo $变量名 set(所有变量:包括自定义变量和环境变量)取消变量:unset 变量名作用范围:仅在当前shell中有效环境变量:方法一:export dir=/home/test方法二:export dir 将自定义变量转换成环境变量变量名或变量名或变量名或{变量名}原创 2024-11-13 10:09:32 · 589 阅读 · 0 评论 -
大厂秒杀系统后端Redis高并发分布式锁实战
比如说tomcat1和tomcat2是同一个下单系统,springboot项目,分布式处理在两台机器上,使用nginx进行负载,然后商品数量存储在redis中,对nginx请求且高并发压测。在redis处理之前,先存一个K,V,这里的K的作用就是作为一个锁,使用redisTemplate的setIfAbsent方法可以实现锁机制。设置超时时间的目的:如果后端服务器宕机,当加了锁之后宕机了,那么其他线程就进不来这个方法了,就这么简单!redission内部优化了上面的锁机制,解决了超时时间的设置问题。原创 2024-11-13 10:07:36 · 873 阅读 · 0 评论 -
CentOS系统漏洞的修复历程
下载地址:https://mirrors.sonic.net/pub/OpenBSD/OpenSSH/portable/openssh-7.6p1.tar.gz。把Type=notify换成Type=simple,这个解决shell阻塞的问题(通俗讲就是有时连接成功有时拒绝连接,不稳定)帮助:可以使用cat /var/log/messages查看systemctl命令启动失败的日志!说明:以上安装是保留系统原来的sshd_config 配置文件。如果重启sshd时无法重启或重启失败,输入命令。原创 2024-11-13 10:06:20 · 860 阅读 · 0 评论 -
对Jar包的启动指定Jre环境(用于配置单体应用或单机版项目)
一个Java应用用到的JRE版本可能不同,也没毛病,可是如果换一台机器就要装一次环境,换一台装一次,太累了,确实太累了。今天就说一个贼简单的方法,来实现spring boot 应用指定jre 环境 启动,不依赖于java_home 或 path。第一种是在jar包的同一目录下建一个config文件夹,然后把配置文件放到这个文件夹下。elasticsearch-1.0.jar >> 这个是我springboot 的应用了。jre1.8.0_151 >> 这个是我的应用yila依赖的环境。原创 2024-11-12 10:31:30 · 735 阅读 · 0 评论 -
Linux搭建Jenkins持续集成并给出连接gogs仓库对springboot工程自动部署的所需内容
Linux安装Jenkins:https://www.cnblogs.com/wintest/p/12182067.htmlJenkins可选插件为空怎么办?如果在插件列表找不到插件或者安装插件失败,可以选择手动下载插件并在高级页进行上传。这里maven-plugin.hpi文件就是下载手动上传安装的。Linux安装配置Maven:https://blog.csdn.net/zjh_746140129/article/details/79017448。原创 2024-11-12 10:30:47 · 437 阅读 · 0 评论 -
史上最简单的 SpringCloud 教程系列
Spring Cloud Alibaba教程Spring Cloud Alibaba教程:使用Nacos作为服务注册发现组件Spring Cloud Alibaba教程:使用Nacos作为配置中心Spring Cloud Alibaba教程:Sentinel的使用Greenwich版本Spring Cloud Consul 之Greenwich版本全攻略spring cloud config将配置存储在数据库中Spring Cloud Sleuth 之Greenwich版本全攻略Spring Boot Ad原创 2024-11-12 10:30:13 · 314 阅读 · 0 评论 -
python爬虫从基础到实战一站式服务
问题:什么是selenium?selinium和爬虫之间具有怎样的关联?便捷的获取网站中动态加载的数据便捷实现模拟登录基于浏览器自动化的一个模块(可以直接操作浏览器,类似无人驾驶去自动驾驶的效果)selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器。原创 2024-11-12 10:29:40 · 893 阅读 · 0 评论 -
file和multipartfile相互转化及其poi提取图片
上传的excel其中有一个byte数组转为MultipartFile的过程。原创 2024-11-12 10:28:47 · 502 阅读 · 0 评论 -
写一个自己的platEntity模块-自定义加密注解实现dao层和数据库交互时对指定属性进行加解密
有一些场景,比如新增一个用户,实体类User类其中密码字段是要加密之后存储到数据库的,我们平时的操作是什么?从前台传来的password字段取出并手动进行加密,然后存入User表,取出的时候还需要进行解密,然后返回明文密码的列表。platEntity简化了这一切加解密的过程,使用platEntity之后再也不用手动加解密,只需要一个注解就可以实现复杂的逻辑,而且使用灵活方便,可以控制加密方式,是否加密,返回的列表中的字段值是否要解密。原创 2024-11-12 10:26:31 · 319 阅读 · 0 评论 -
request请求的body中的参数(json对象)只能取出一次,参数丢失问题的解决方式(防sql注入过滤器的应用)
在项目即将上线的渗透测试报告中检测出了sql注入的问题,关于这个问题的解决方案,最初的思路是写一个全局的过滤器,对所有请求的参数进行过滤拦截,如果存在和sql注入相关的特殊字符则拦截掉,具体细节展开以下讨论!(当然要提供一个白名单,白名单里的请求不给予过滤)原创 2024-11-12 10:25:47 · 549 阅读 · 0 评论 -
干掉了传统if-else的竟然是它!太长见识了![策略模式的具体实现]
Inherited凡事都有他的两面性,if-else多层嵌套和也都有其各自的优缺点:if-else的优点就是简单,想快速迭代功能,逻辑嵌套少且不会持续增加,if-else更好些,缺点也是显而易见,代码臃肿繁琐不便于维护。策略模式 将各个场景的逻辑剥离出来维护,同一抽象类有多个子类,需要使用if-else 或者 switch-case 来选择具体子类时,建议选策略模式,他的缺点就是会产生比较多的策略类文件。原创 2024-11-12 10:25:12 · 290 阅读 · 0 评论 -
基于python的opencv的学习和实战
版本说明:这里使用的python版本是3.8.3,opencv版本4.4.0,opencv-contrib-python版本是4.5.1.48(都是高版本,所以会踩坑,虽然LZ会踩坑,但总会把问题解决掉的)pip命令直接安装检验方法(这里的版本是4.4.0)还需要安装配套使用的opencv-contrib-python(最好版本一致)原创 2024-11-12 10:24:18 · 779 阅读 · 0 评论 -
Flask框架从0到1实现博客网站(请以学习的目的观看,博主也是以学习为主)
GitHub地址:https://github.com/fantongxue666/Python-Projects。原创 2024-11-12 10:23:13 · 429 阅读 · 0 评论