自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Abner_G的博客

万石谷,粒粒积累;千丈布,根根织成。

  • 博客(108)
  • 资源 (5)
  • 问答 (1)
  • 收藏
  • 关注

原创 【AI】用大白话解释Transformer:编码与解码的奇幻之旅

一个现实的例子类比Transformer讨论“人工智能在房地产公司的使用前景”问题背景: 正在讨论“人工智能在房地产公司的使用前景”。多头注意力(互联网公司): 在整个讨论过程中,有6家互联网公司参与。每家公司充当一个“编码器”,并为整体讨论提供独特的视角。这就是多头注意力的体现,每个编码器(公司)关注讨论中的不同议题。

2024-01-30 11:19:05 734

原创 【踩坑日常】解决 ClickHouse 分布式表重建引发的元数据异常问题Existing table metadata in ZooKeeper differs in primary key.

在线上分布式 ClickHouse 数据表结构需要调整,这要求删除现有的分布式表,并重新创建(DDL 发生变化)。然而,删除表后重新创建时可能会出现异常。

2024-01-29 19:58:36 632

原创 优雅处理MyBatis与Apollo集成中的配置加载

通过本文的介绍,你可以了解在不使用传参的情况下,如何在MyBatis的mapper文件中读取Apollo中的配置信息。选择适合你项目的方式,确保能够正确读取到配置,提高系统的灵活性和可维护性。希望这篇博客能对你有所帮助。请注意,这只是一种可能的解决方案,具体实现可能因项目结构和框架不同而有所差异。确保在应用启动时提前加载Apollo配置,以确保其他组件在初始化时能够正确访问到配置信息。

2023-12-06 19:45:57 502

原创 【踩坑日常】解决Eureka启动报错:Network level connection to peer localhost;retrying after delay

在 Spring Framework 中,Profile 是一种用于定义一组 Bean 定义和配置的机制,这些 Bean 定义和配置仅在特定的运行时环境或应用程序配置下生效。通过使用 Profile,你可以根据应用程序运行的环境,如开发环境、测试环境、生产环境等,来灵活地管理不同的配置

2023-12-04 16:56:43 1946

原创 【Linux】 服务器优化之定时任务:自动清理日志,重启服务

服务本地日志没有定时清理,造成机器重启机器重启之后,服务没有自动重启。

2023-11-30 18:30:49 1467

原创 SpringBoot 项目上传文件异常【java.io.IOException: Stream closed】

项目场景:SpringBoot 项目上传文件接口异常。

2022-12-28 17:16:02 1253 4

原创 【Mac 环境配置】--安装git及使用

上传至github:登录账号、点击头像、选择Settings、选择SSH and GPG keys,然后new一个ssh key。创建过程询问密钥位置,可以不用管直接enter就好。注意这里和用户邮箱一致。

2022-11-05 18:29:06 703

原创 【Mac 环境配置】-- 配置JAVA环境

MacOS 安装java 环境

2022-11-05 16:45:00 583

原创 【踩坑日常】-- clickhouse DB::Exception: Division by zero: while executing ‘FUNCTION divide

既然无论条件是什么,都会评估 if() 的 else 参数,那么在扫描的时候,加判断转化为数字,避免报错。原因可能还是跟Decimal底层的存储结构有关,底层应该做了限制,并且在除法运算中。进行判断,依旧还是报错。

2022-11-03 19:40:58 1114

转载 【锁】synchronized(源码c++)

本来是在写面霸系列的,写着写着就写到了这一题:而关于 Synchronized 我去年还专门翻阅 JVM HotSpot 1.8 的源码来研究了一波,那时候我就发现有一个点,一个几乎网上所有文章包括《Java并发编程的艺术》也是这样说的一个点。锁升级想必网上有太多文章说过了,这里提到当轻量级锁 CAS 失败,则当前线程会尝试使用自旋来获取锁。其实起初我也是这样认为的,毕竟都是这样说的,而且也很有道理。因为重量级锁会阻塞线程,所以如果加锁的代码执行的非常快,那么稍微自旋一会儿其他线程就不需要锁了,就可以直接

2022-07-14 01:42:03 1293

原创 【锁】synchronized 锁升级

在Java中,锁可能是我们最早接触的锁了,在 JDK1.5之前synchronized是一个重量级锁,相对于juc包中的Lock,比较笨重。修饰实例方法,反编译之后查看加锁前后对比;在加锁之后,常量池中多了ACC_SYNCHRONIZED标示符;修饰代码块,反编译之后查看加锁前后对比;加锁之后多了,三条指令;monitor对象:监视器锁,每个对象都存在着一个 monitor 与之关联。在Java虚拟机(HotSpot)中,monitor是由ObjectMonitor实现;线程通过 CAS尝试获取锁,如

2022-07-14 01:14:29 302

原创 【TransmittableThreadLocal】源码分析理解

上一篇博客【InheritableThreadLocal】搭配线程池使用存在问题,实际开发中遇到,阿里开源类解决这个问题,本文目的是探究一下TTL的原理;transmittable-thread-local方法是 创建时调用,默认创建一个 WeakHashMap。方法是创建子线程Thread 调用 init 方法,会调用ThreadLocal.createInheritedMap(parent.inheritableThreadLocals),创建ThreadLocalMap调用childValue官

2022-07-09 18:35:04 1040

原创 【InheritableThreadLocal】搭配线程池使用存在问题

服务中多接口报空指针异常,以报错邮件中的接口参数调用接口时,接口调用正常;推断(A接口报空指针,邮件使用的接口信息为B接口信息)能接收到报错邮件,肯定是有空指针异常;报错邮件是根据log4j抓取的异常触发。接口信息使用过滤器在接口请求时,将接口信息存放在MDC中。报错的接口中都是使用的多线程处理,在几个接口处理异常时都打印具体异常标识,重新发版之后;多接口异常信息都指向同一个处理异常处理点;异步调用,异常处理方法可以看到异常处理机制是使用从线程池中拿到的子线程进行异常处理。那就看一下为什么子线程中存放

2022-07-09 15:05:44 1211

原创 【Mysql】online 数据批量处理

因迭代版本升级,Mysql数据存储发生改变,需要批量处理旧版本数据。🎯创建更新数据SQL脚本将上一步生成的SQL脚本,执行🎯比对数据对比备份表和正式表数据量

2022-07-08 17:44:18 201

原创 【Kettle】 Kettle连接Clickhouse自定义插件2.0(升级驱动)

使用Kettle 整合不同Mysql数据库数据,批量插入Clickhouse,会不定时出现错误 。Clickhouse社区给出的答案是驱动问题。社区回答Kettle 官方自定义创建插件文档喜欢吃燕麦粥的KeyL 大佬博客这里使用的还是kettle 8.1的包,9.1也可以使用,这里使用Clickhouse官方最新驱动按照官方文档重写对应方法getURL方法驱动修改getDriverClass打包将所有依赖jar,打包成jar包。存放到新建clickhouse-plugins文件夹下。需

2022-06-29 21:48:27 1401 2

原创 【锁】CAS(Compare And Swap)

【锁】悲观锁与乐观锁实现,中乐观锁,使用的是CAS算法。CAS(Compare And Set 或 Compare And Swap),即比较并修改的意思。CAS技术可以保证操作的原子性,atomic包下的原子类都是基于CAS和volatile实现原子操作的。【Atomic】—JDK 原子计数器AtomicInteger(源码)对java 使用CAS源码进行了分析,从Java1.5开始JDK的atomic包里提供了一个类AtomicStampedReference来解决ABA问题。这个类的compare

2022-06-28 23:29:53 419

原创 【锁】悲观锁与乐观锁实现

锁:在程序中一种保证数据安全的手段和机制。在并发处理共享资源时,可以对共享变量使用关键字。多用户修改表中同一数据时,可以给该行数据上锁保证数据安全。乐观锁和悲观锁,可以理解为因为一种态度,一种思想定义的一类锁。如图使用的方式,保守的保证了数据的安全。两个线程同时去修改id 为1的同一行数据为例,实现悲观锁。如果事务等待获取排他锁的时间超过LockTimeout ,则将抛出LockTimeoutException ,而不会将该事务标记为已回滚;死锁处理:悲观锁会增加死锁的可能性,其中两个(或更多)事务各

2022-06-28 01:44:59 396

原创 【数组】---Leetcode数组大白话

提示:本文题目跟随 代码随想录,刷题顺序。【数组】---Leetcode题目总结🏆 前言⭐️ 数组基础🎯二分查找🍍题目🍋何时考虑🥝Leetcode 题解🎯双指针移除元素🍍题目🍋何时考虑🥝Leetcode 题解🎯有序数组的平方🍍题目🥝Leetcode 题解🎯长度最小的子数组🏆 前言本文题目跟随 代码随想录,刷题顺序。对题目进行自我总结;说的不对的地方,欢迎指正。⭐️ 数组基础存放在连续内存空间不能单个元素删除,只能覆盖二维数组是多条连续的内存空间🎯二分查找Leetcode🍍题目.

2022-05-21 00:03:09 316

原创 【树】--重建二叉树

题目:根据二叉树的前序遍历和中序遍历的结果,重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。分析前序遍历顺序:根节点->左子节点->右子节点中序遍历顺序:左子节点->根节点->右子节点前序中的第一个元素能把中序分成两部分,然后对左右两部分做同样操作,必然使用递归方法,递归出口,在最后只有一个元素,递归结束思路源码package org.example.tree;import org.example.model.TreeNode;

2022-05-14 18:41:39 221

原创 【链表】--从尾到头打印链表

题目:从尾到头打印链表。分析方法A:反向,肯定会想到使用栈来处理方法B:也可以使用双指针将链表逆序方法C:递归遍历思路源码package org.example.linkList;import org.example.model.ListNode;import java.util.ArrayList;import java.util.Stack;/** * 从尾到头打印链表 * @author: [email protected] * @createDa

2022-05-14 15:42:06 191

原创 【双指针】---反转链表

题目:提供单向链表的头节点head,请反转链表,并返回反转后的链表。分析同速指针:链表上两个指针,一个先出发,另一个后出发并以相同的速度跟随通过临时指针让双指针同步前行思路源码package org.example.pointer;/** * 反转链表 * @author Abner G * @date 2022/5/12 22:55 */public class practicePointer02 { /** * 题目 * 提供单向链

2022-05-12 23:33:41 310

原创 【双指针】-- 和为 S 的两个数字

题目: 在有序数组中找出两个数,使得和为给定的数 S。如果有多对数字的和等于 S,输出两个数的乘积最小的。分析乘积最小的规律是:两个数的差尽可能大。要找两个数字,而且是数组,第一感觉就是双指针的策略思路使用双指针,一个指针指向元素较小的值,一个指针指向元素较大的值。指向较小元素的指针从头向尾遍历,指向较大元素的指针从尾向头遍历。如果两个指针指向元素的和 sum == target,那么这两个元素即为所求。如果 sum > target,移动较大的元素,使 sum 变小一些

2022-05-12 22:49:42 134

原创 【Redis】---【选举,渐进式Rehash,Copy On Write】

【Redis】--- 总结前言集群选举原理二、使用步骤前言总结Redis中理论,面试总结集群选举原理当slave发现自己的master变为FAIL状态时,便尝试进行Failover,以期成为新的master。由于挂掉的master可能会有多个slave,从而存在多个slave竞争成为master节点slave发现自己的master变为FAIL将自己记录的集群currentEpoch加1,并广播FAILOVER_AUTH_REQUEST 信息其他节点收到该信息,只有master响应,判断

2022-05-03 18:18:18 508

原创 我的创作纪念日--万石谷,粒粒积累;千丈布,根根织成

☀️机缘习惯了一段时间总结一下工作,之前会总结到自己文档,这样会有一个问题,总结的文章太过主观,CSDN提供了一个平台,这样把自己的总结分享出来,一是逼自己养成这个习惯,二是可以有让别人看到分享,有错误的地方也可以被指正出来。⭐️收获没想到自己写的东西,到目前为止有了687个粉丝不停的总结,自己也对知识点有了更深入的了解「费曼技巧」(Feynman Technique)的体验者日常憧憬提示:职业规划、创作规划等​​...

2022-04-26 09:32:56 512 4

原创 Clickhouse---导入导出文件

Clickhouse---导入导出文件前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言工作中遇到Clickhouse 数据的导入导出操作,当时使用DataGrip应急导出文件。本文总结一下Clickhouse导入导出文件的操作。一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):import numpy as npimport pandas as pdimport

2022-04-07 21:10:45 2675

原创 解耦不同Service实例代码实践

项目场景:对不同数据进行资源整合,规划同一接口返回相同数据结构,底层需要调用不同服务接口来获取数据,基本写法为不同调用服务写各自的方法,再用switch,case,将不同方法整合。问题描述实际开发多人处理不同数据的情况下,代码极容易冲突,解决冲突浪费时间如果调取服务较多,switch,case代码没那么美观简洁解决方案:使用抽象类,规定同一方法,将不同数据调取服务做不同实现,由Spring统一管理,根据bean名称来获取不同数据的不同实例。SpringContextUtil 工

2022-03-21 23:58:52 159

原创 【Redis】--- 集群

【Redis】--- 集群前言集群演变单机架构主从架构哨兵模式CODIS模式高可用集群模式集群搭建前言【Redis】— 不同数据结构命令集群演变单机架构如果Redis宕机,数据没做好持久化,数据会丢失。主从架构相对于单节点,做了主从同步备份,数据安全性上有了一定程度的提高,但是主节点和从节点的切换还需要运维做的切换。哨兵模式相对于主从模式,哨兵模式,哨兵模块来监控Redis集群,当主节点宕机,哨兵会通过选举,选出新的主节点,自动做主从切换。哨兵模式客户端访问Redis的步骤为:

2022-03-21 23:12:46 1013

原创 【Redis】--- 不同数据结构命令

【Redis】--- 不同数据结构命令前言数据结构string (字符串)使用场景命令原子计数list (列表)使用场景命令hash (字典)使用场景命令set (集合)使用场景命令zset (有序集合)使用场景命令高级命令获取全部Key渐进式遍历键参数原理分析前言【Redis】— 概念原理(类比闯关游戏理解持久化)数据结构string (字符串)使用场景一个常见的用途就是缓存用户信息。我们将用户信息结构体使用 JSON 序列化成字符串,然后将序列化后的字符串塞进 Redis 来缓存。同样

2022-03-20 20:20:16 234

原创 【栈】--- 用两个栈实现队列

题目用两个栈来实现一个队列,完成队列的 Push 和 Pop 操作。分析栈特点:先进后出队列特点:先进先出思路in 栈用来处理入栈(push)操作,out 栈用来处理出栈(pop)操作。一个元素进入 in 栈之后,出栈的顺序被反转。当元素要出栈时,需要先进入 out 栈,此时元素出栈顺序再一次被反转,因此出栈顺序就和最开始入栈顺序是相同的,先进入的元素先退出,这就是队列的顺序。正序进(A)->倒序出(A)->倒序进(B)->正序出(B)源码package or

2022-03-17 23:06:19 492

原创 系列文章目录--刷题记录

GitHub 刷题指导个人刷题,解题思路记录系列文章目录--刷题记录系列文章目录数组系列文章目录数组【数组】— 数组中重复的数字

2022-03-16 23:56:19 329

原创 【数组】--- 数组中重复的数字

题目: 在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。分析时间复杂度O(n),空间复杂度O(1)。这样肯定不能新建数组和排序遍历一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内,关键信息点数组下标为0到n-1不重复的数字如果不重复,把每个元素都可以放在对应下标位置思路遍历每个元素,如果元素和对应下标不相等,需要把元素放在元素值的

2022-03-16 23:42:28 417

原创 【Redis】--- 概念原理(类比闯关游戏理解持久化)

【Redis】--- 概念原理前言单线程&高性能单线程为什么快?持久化RDB 快照(snapshot)AOF混合持久化前言前文:单线程&高性能单线程为什么快?所有数据都在内存中,所有级别都是内存级别运算单线程避免多线程切换的性能消耗处理并发客户端连接,使用IO多路复用,使用epoll 俩实现多路复用。 因为单线程,谨慎使用耗时的指令(keys),容易造成redis卡顿。持久化RDB 快照(snapshot)AOF混合持久化...

2022-03-14 22:34:17 4040

原创 【Redis】--- Linux安装Redis

【Redis】--- Linux安装Redis⭐️C环境安装🍋gcc rpm 包下载🍍gcc 环境安装🍅安装验证🏆Redis 安装☀️Redis下载✨上传解压🎉编译🔥配置Redis🌕启动📜参考博客⭐️C环境安装由于redis是由C语言编写的,它的运行需要C环境,因此需要先安装gcc。使用rpm离线安装.🍋gcc rpm 包下载网站下载地址资源下载 (找资源不易,有积分的老板可以赏几个积分)🍍gcc 环境安装上传linux环境,分别执行如下命令rpm -Uvh cpp-4.8.5-4

2022-03-13 23:32:52 2260

原创 【踩坑日常】-- java.net.SocketException: Broken pipe

项目场景:使用Kettle 整合不同Mysql数据库数据,批量插入Clickhouse问题描述Kettle 任务执行过程中,出现偶发性失败报·java.net.SocketException: Broken pipe 异常原因分析:这个问题为偶发性问题,首先排除Kettle脚本问题,Clickhouse 批量插入数据性能优异,所以排除Clikchouse,那就要考虑来源,来源为Mysql数据库,Mysql有一个mysql8小时问题,有可能是Mysql连接的问题。wait_timeout

2022-03-11 11:53:32 3798

原创 JAVA时间工具类【DateTimeFormatter】

☁️前言:【踩坑日常】–SimpleDateFormat,在SimpleDateFormat中踩坑之后,使用DateTimeFormatter改进JAVA时间工具类JDK 版本1.8以上🏆代码:支持 获取开始结束时间区间的【月,季,半年,年】时间List支持 获取指定日期的【月,季,半年,年】开始结束日期获取日期之间的【天,月,年】时间差package test;import java.time.Duration;import java.time.LocalDate;impo

2022-03-10 23:34:17 2614

原创 【踩坑日常】-- Clickhouse批量导入数据报错

☀️项目场景:使用 【insert …select…】语法,批量导入数据。报错Too many partitions for single INSERT block(more than 100)⭐️原因分析:默认一批次写入里包括大于100个分区值clickhouse要求每次写入的数据不能跨越特别多的分区, 具体受max_partitions_per_insert_block控制。🏆解决方案:在用户全局配置文件/etc/clickhouse-server/user.xml,配置<

2022-03-08 21:59:35 2011

原创 【踩坑日常】--SimpleDateFormat

项目场景:很多接口需要入参有时间,为了验证时间格式的正确性,在工具类中写了静态工具类验证,在入参时调用静态方法验证问题描述在单机测试接口接口完全没有问题,但是在并发的情况就会报接口异常明显是验证方法存在并发问题。原因分析:SimpleDateFormat 不是线程安全的查看源码日期格式不同步。建议为每个线程创建单独的格式实例。如果多个线程同时访问一个格式,它必须是同步的。查看parse 方法,底层还是使用 calendar,SimpleDateFormat为static变量

2022-03-08 00:06:07 239

原创 【JDK 1.8】 stream 操作

【JDK 1.8】 stream 操作前言中间过程结果集测试类前言Stream 翻译称为 “流”,是 Java8 的新特性之一。 Stream 将要处理的元素看作是流,这时可以借助 Stream API 对流中的元素进行中间操作,比如:筛选、排序、排序等。中间过程/** * 过滤 */log.warning("过滤");projectList.stream().filter(a->a.getProjectCount()!=null).forEach(System.out::pri

2022-03-06 23:41:43 460

原创 Clickhouse---集群语法

Clickhouse---集群语法⌨️前言🌕创建表⌨️前言在单机语法的基础上,进行集群语法扩充。提示:以下是本篇文章正文内容,下面案例可供参考🌕创建表单机create table house_enterprise_property_temp( enterprise_id Nullable(String) comment '企业id', property_id String comment '项目总期id', create_time

2022-03-04 20:21:30 756

原创 【Atomic】---JDK 原子计数器AtomicInteger(源码)

原子计数器AtomicInteger☁️前言☀️ 应用线程不安全示例使用synchronized 悲观锁AtomicInteger 实现☁️前言在梳理Redis过程中,Redis能实现的原子技术与JDK自带的原子计数的区别有什么?☀️ 应用10个线程对同一资源【count】做加操作,每个线程加10000次,预期count的值为100000。看一下如下不同的实现。线程不安全示例package test;import java.util.concurrent.CountDownLatch;

2022-02-25 00:42:49 1289

Kettle连接Clickhouse自定义插件2.0

- Clickhouse 21.4.5.46 - Kettle 9.1.0 - clickhouse JDBC驱动 com.clickhouse 0.3.2-patch3

2022-06-29

LINUX环境使用gcc 4.8.5 rpm包

LINUX环境使用gcc4.8.5 rpm 整套安装包 安装过程移步【https://blog.csdn.net/Abner_G/article/details/123468345?spm=1001.2014.3001.5501】

2022-03-14

LINUX环境使用gcc 4.8.5 rpm包 云盘地址

LINUX环境使用gcc4.8.5 rpm 整套安装包

2022-03-13

Kettle 压缩包,数据库驱动jar,坐标转换工具类jar,java代码.txt

Kettle 压缩包,数据库驱动jar,坐标转换工具类jar,java代码

2021-08-06

开发基础软件全套下载地址.txt

开发基础软件全套下载地址

2021-07-01

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除