- 博客(1566)
- 资源 (16)
- 问答 (4)
- 收藏
- 关注
原创 Linux 集群时钟不同步导致的问题
时钟此处指服务器时间,如果集群中各个服务器时钟不⼀致势必导致⼀系列问题,试想 “集群是各个服务器⼀起团队化作战,⼤家工作都不在⼀个点上,岂不乱了套!举⼀个例⼦,电商网站业务中,新增⼀条订单,那么势必会在订单表中增加了⼀条记录,该条记录中应该会有“下单时间”这样的字段,往往我们会在程序中获取当前系统时间插⼊到数据库或者直接从数据库服务器获取时间。
2023-03-29 16:13:20 64993
原创 Spring源码面试最难问题——循环依赖
问:Spring 如何解决循环依赖?答:Spring 通过提前曝光机制,利用三级缓存解决循环依赖(这原理还是挺简单的,参考:三级缓存、图解循环依赖原理)再问:Spring 通过提前曝光,直接曝光到二级缓存已经可以解决循环依赖问题了,为什么一定要三级缓存?再细问:如果循环依赖的时候,所有类又都需要 Spring AOP 自动代理,那 Spring 如何提前曝光?曝光的是原始 bean 还是代理后的 bean?
2023-03-27 08:00:00 66746 1
原创 基于Prometheus的jvm监控指标详解
使用Prometheus 监控Springboot应用参考下面来看看jvm的监控指标#这是一个Summary指标,与Histogram类似,可以对指标数据进行采样。
2023-03-23 10:03:44 66831 3
转载 Linux 的 TCP 连接数量最大不能超过 65535?那服务器是如何应对百万千万的并发的?
首先,问题中描述的65535个连接指的是客户端连接数的限制。在tcp应用中,server事先在某个固定端口监听,client主动发起连接,经过三次握手后建立tcp连接。那么对单机,其最大并发tcp连接数是多少呢?
2023-03-21 13:17:36 47522
原创 k8s 磁盘不够用,docker数据迁移 导致 /tmp Permission denied,docker优化日志 日志切割, 日志自动删除
K8s 集群 随着pod运行服务的越来越多,运行时间越来越大,docker目录占用磁盘空间也在逐渐变大,终于在最近磁盘彻底占满导致容器启动不起来并提示"no device space left"。为了防止以后出现docker占用磁盘容量不够的情况决定对docker数据目录迁移。
2023-03-18 21:42:02 68350 4
原创 nginx 优化 为 nginx 配置超时时间,保护服务器的系统资源
配置Nginx的超时时间,提高服务器的性能,降低客户端的等待时间。同时,在受到DOS攻击时,可以起到缓解作用。特殊情况下,请根据具体性能需求进行调优。
2023-03-17 13:22:00 48660
原创 mysql 5.7+ 安装 错误 GPG key retrieval failed: [Errno 14] curl#37Couldn‘t open file /etc/pki/rpm-gpg/RPM
在安装mysql过程中出现一下错误。
2023-03-13 11:23:56 48320
原创 MySQL 中的 distinct 和 group by 哪个效率更高?
group bydistinctdistinctgroup bygroup bygroup bygroup bydistinctgroup by带着这两个问题找答案。接下来,我们先来看一下distinct和group by的基础使用。
2023-03-09 09:21:22 66966 3
原创 Springboot Maven打包跳过测试的五种方式总结 -Dmaven.test.skip=true
使用Maven打包的时候,可能会因为单元测试打包失败,这时候就需要跳过单元测试。也为了加快打包速度,也需要跳过单元测试。
2023-03-08 09:27:08 72191
原创 Canal实战 canal的坑 CanalParseException: column size is not match for table 错误
异常现象截图canal的坑:CanalParseException: column size is not match for table (表结构缓存异常阻塞问题)
2023-03-07 09:00:00 54480
原创 Kubernetes 上 Java 应用的最佳实践
了解 Kubernetes 中的 liveness 和 readiness 探针之间的区别至关重要。如果这两个探针都没有仔细实施,它们可能会降低服务的整体运行,例如导致不必要的重启。第三种类型的探针,启动探针,是 Kubernetes 中一个相对较新的特性。它允许我们避免在 liveness 或 readiness 探针上设置 initialDelaySeconds ,因此如果您的应用程序启动需要很长时间,它特别有用。有关 Kubernetes 探针的一般和最佳实践的更多详细信息,我可以推荐。
2023-03-06 08:30:00 52688
原创 Spring AOP CGLib与JDKProxy的区别与示例
综上所述,JDK动态代理适用于代理接口实现类的场景,而CGLIB代理适用于代理没有实现接口的类的场景。如果你需要代理接口实现类,而且不想引入额外的依赖,那么JDK动态代理是一个不错的选择;如果你需要代理没有实现接口的类,那么CGLIB代理可能更适合你的需求。JDK动态代理和CGLIB代理都有它们自己的优缺点。
2023-03-02 06:45:00 48491
原创 百亿数据,毫秒级返回查询优化
与其说上面列的这些点是 MySQL 的不足,倒不如说 MySQL 本身就不是为海量数据查询而设计的,术业有专攻,海量数据查询还得用专门的搜索引擎,这其中 ES 是其中当之无愧的王者,它是基于 Lucene 引擎构建的开源分布式搜索分析引擎,可以提供针对 PB 数据的近实时查询,广泛用在全文检索、日志分析、监控分析等场景。轻松支持各种复杂的查询条件: 它是分布式实时文件存储,会把每一个字段。
2023-02-28 08:45:00 55529
原创 换掉 Maven,我就用Gradle,急速编译
init.gradle文件在build开始之前执行,所以你可以在这个文件配置一些你想预先加载的操作,例如配置build日志输出、配置你的机器信息,比如jdk安装目录,配置在build时的账户鉴权信息(比如仓库或者数据库的认证信息)等等启用init.gradle文件的方法:你可以多次输入此命令来指定多个init文件。2、把以.gradle文件放到USER_HOME/.gradle/目录下。例如init.gradle文件。
2023-02-27 07:00:00 54396
原创 在 4G 内存的机器上,申请 8G 内存会怎么样?
至此, 验证完成了。简单总结下:在 32 位操作系统,因为进程理论上最大能申请 3 GB 大小的虚拟内存,所以直接申请 8G 内存,会申请失败,报错 Cannot allocate memory在 64位 位操作系统,因为进程理论上最大能申请 128 TB 大小的虚拟内存,即使物理内存只有 4GB,申请 8G 内存也是没问题,因为申请的内存是虚拟内存。如果没有 Swap 分区,因为物理空间不够,进程会被操作系统杀掉,原因是 OOM(内存溢出);
2023-02-21 09:58:40 65527 7
原创 【java 高并发编程之JUC】高阶JUC特性总结
方法是一个实例方法它通知目标线程中断,也就是设置目标线程的中断标志位为true,中断标志位表示当前线程已经被中断了。方法也是一个实例方法它判断当前线程是否被中断(通过检查中断标志位)并获取中断标志Thread类的静态方法interrupted()返回当前线程的中断状态(boolean类型)且将当前线程的中断状态设为false,此方法调用之后会清除当前线程的中断标志位的状态(将中断标志置为false了),返回当前值并清零置false谈谈Java多线程离不开的AQS。
2023-02-17 08:00:00 55495
原创 【java 高并发编程之JUC】2w字带你JUC从入门到精通
wait()是让获得对象锁的线程实现等待,会自动释放当前线程占有的对象锁。每个对象(Object)都拥有对象锁,既然要释放当前线程占有的对象锁并让其进入 WAITING 状态,自然是要操作对应的对象(Object)而非当前的线程(Thread为什么sleep()方法定义在Thread中?因为sleep()是让当前线程暂停执行,不涉及到对象类,也不需要获得对象锁。java JUC 中 Object里wait()、notify() 实现原理及实战讲解。
2023-02-16 09:00:00 58277 1
原创 synchronized和Lock的区别
9.Lock也提供了类似的解决办法,首先通过lock对象得到一个Condition对象,然后分别调用这个Condition对象的:await, signal,signalAll 方法;3.与 synchronized (someObject) 类似的,lock()方法,表示当前线程占用lock对象,一旦占用,其他线程就不能占用了;1.synchronized是关键字,Lock是接口,synchronized是JVM层实现,Lock是JDK中JUC包下的实现;如果时间到了,还占用不成功,就选择放弃;
2023-02-15 09:00:00 56477
原创 Java高频面试题,ReentrantLock 是如何实现锁公平和非公平性的?
我先解释一下个公平和非公平的概念。公平,指的是竞争锁资源的线程,严格按照请求顺序来分配锁。非公平,表示竞争锁资源的线程,允许插队来抢占锁资源。默认采用了非公平锁的策略来实现锁的竞争逻辑。其次,内部使用了AQS来实现锁资源的竞争,没有竞争到锁资源的线程,会加入到AQS的同步队列里面,这个队列是一个FIFO的双向链表。在这样的一个背景下,公平锁的实现方式就是,线程在竞争锁资源的时候判断AQS同步队列里面有没有等待的线程。如果有,就加入到队列的尾部等待。
2023-02-15 06:15:00 52890
原创 谈谈Java多线程离不开的AQS
AQS,全名,是一个抽象类的队列式同步器,它是实现同步器的基础组件,如常用的等。AQS定义了一套多线程访问共享资源的同步模板,解决了实现同步器时涉及的大量细节问题,能够极大地减少实现工作。下面是AQS的组成结构。主要由三部分组成,state同步状态、Node组成的CLH队列、条件变量(包含Node组成的条件单向队列),下面会分别对这三部分做介绍。先了解下提供的核心函数。
2023-02-14 08:30:00 59535 1
原创 史上最详细JUC教程之Synchronized与锁升级详解
在Java早期版本中,synchronized属于重量级锁,效率低下,因为监视器锁(monitor)是依赖于底层的操作系统的Mutex Lock来实现的,挂起线程和恢复线程都需要转入内核态去完成,阻塞或唤醒一个Java线程需要操作系统切换CPU状态来完成(用户态和内核态之间的切换),这种状态切换需要耗费处理器时间,如果同步代码块中内容过于简单,这种切换的时间可能比用户代码执行的时间还长”,时间成本相对较高,这也是为什么早期的synchronized效率低的原因Java 6之后,为了减少获得锁和释放锁所带来
2023-02-13 06:45:00 53416
原创 Java对象内存布局及对象头详解
在HotSpot虚拟机里,对象在堆内存中的存储布局可以划分为三个部分:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。
2023-02-13 06:30:00 54374
原创 ThreadLocal 源码级别详解
稍微翻译一下:ThreadLocal提供线程局部变量。这些变量与正常的变量不同,因为每一个线程在访问ThreadLocal实例的时候(通过其get或set方法)都有自己的、独立初始化的变量副本。ThreadLocal实例通常是类中的私有静态字段,使用它的目的是希望将状态(例如,用户ID或事务ID)与线程关联起来。实现(自己用自己的变量不麻烦别人,不和其他人共享,人人有份,人各一份),
2023-02-10 08:00:00 52820
原创 源码级别的讲解JAVA 中的CAS
的缩写,中文翻译成比较并交换,实现并发算法时常用到的一种技术。它包含三个操作数——内存位置、预期原值及更新值。执行CAS操作的时候,将内存位置的值与预期原值比较:如果相匹配,那么处理器会自动将该位置值更新为新值,如果不匹配,处理器不做任何操作,多个线程同时执行CAS操作只有一个会成功。CAS (CompareAndSwap) 有3个操作数,位置内存值V,旧的预期值A,要修改的更新值B。当且仅当旧的预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做或重来。
2023-02-09 13:24:49 56423
原创 万字总结什么是JMM、内存屏障及其原理
1 线程之间的共享变量存储在主内存中(从硬件角度来说就是内存条)2 每个线程都有一个私有的本地工作内存,本地工作内存中存储了该线程用来读/写共享变量的副本(从硬件角度来说就是CPU的缓存,比如寄存器、L1、L2、L3缓存等)3 线程对变量的所有操作都必须在本地内存中进行,而不能直接读写主内存。4 不同的线程之间无法直接访问对方本地内存中的变量。我们定义的所有共享变量都储存在物理主内存中每个线程都有自己独立的工作内存,里面保存该线程使用到的变量的副本(主内存中该变量的一份拷贝)
2023-02-08 08:40:40 57587
原创 java JUC 中 Object里wait()、notify() 实现原理及实战讲解
在多核环境下,多个线程有可能同时执行monitorenter指令,并获取lock对象关联的monitor,但只有一个线程可以和monitor建立关联,这个线程执行到wait方法时,wait方法会将当前线程放入wait set,使其进行等待直到被唤醒,并放弃lock对象上的所有同步声明,意味着该线程释放了锁,其他线程可以重新执行加锁操作,notify方法会选择wait set中任意一个线程进行唤醒,notifyAll方法会唤醒monitor的wait set中所有线程。4、最终底层的park方法会挂起线程。
2023-01-16 10:16:33 57816
原创 MySQL语句中过滤条件放在哪?on、where还是having,他们区别和联系
SQL语句中,过滤条件放在不同筛选器on、where和having的区别和联系。蚂蚁金服的一道如下:**SQL语句中,过滤条件放在on和where子句中的区别是什么?**当时满脑子是left join和inner join等,觉得没区别啊!当天晚上细思极恐,故梳理一下。在多表连接查询语法中,最令人迷惑的非on和where这两个筛选器的区别莫属了。在编写查询SQL脚本的时候,筛选条件无论是放在on子句还是where子句,查询到的结果集总是一模一样的,既然如此,为什么还要让sql查询支持两种筛选器呢?
2023-01-11 16:00:14 61660 4
原创 k8s 实战 常见异常事件 event 及解决方案分享
重启集群中的coredns组件发生重启(重新创建),一般是由于coredns组件压力较大导致oom,请检查业务是否异常,是否存在应用容器无法解析域名的异常。如果是local-dns重启,说明local-dns的性能也不够了,需要优化。
2023-01-06 08:15:00 60550
原创 【JVM 从入门到精通系列】 JVM 字节码指令篇 之 Class文件结构
跨平台的语言当Java源代码成功编译成字节码后,如果想在不同平台上运行,则无需再次编译。这个优势已经不再那么吸引人了,Python、PHP、Perl、Ruby、Lisp等有强大的编译器。跨平台似乎已经快成为一门语言必选的特性。跨语言的平台。
2023-01-05 10:15:00 57192
原创 Jvm 系列(十二) JVM的执行引擎全面讲解
一般来讲,JIT编译出来的机器码性能比解释器高,C2编译器启动时长比C1编译器慢,系统稳定执行以后,C2编译器执行速度远远快于C1编译器。自JDK10起,HotSpot又加入了一个全新的即时编译器:Graal编译器。编译效果短短几年就追评了C2编译器。使用 -XX : +UnlocalExperimentalVMOptions -XX:+UseJVMCICompiler去激活,才可以使用。JDK9引入了AOT编译器(静态提前编译器,Ahead Of Time Compiler)。
2023-01-04 08:30:00 51339 3
原创 实战工作十年的Code Review方法论与实践总结
作为卓越工程文化的一部分,Code Review其实一直在进行中,只是各团队根据自身情况张驰有度,松紧可能也不一,这里简单梳理一下CR的方法和团队实践。
2023-01-03 14:34:39 60296
原创 聊聊最适合程序员的画图工具
没问题,直接坦白讲,我用了 2 年的画图工具是:draw.io。我的图解文章里的图片全是在 draw.io 这个工具画的,写了那么久的图解文章,再加上我工作中也有画图的习惯,累计也有在上面画了接近 1000+ 张图片。选择它的原因很简单,因为是免费的,而且图片的源文件可以直接保存到 Github 的,这样非常方便,相当于直接云备份到了 Github 仓库里。draw.io 画图工具可以在线画图,或者下载应用,或者作为 visual studio code 插件来使用。我比较常用的方式是在线画图,就是直接在网
2023-01-01 17:15:00 55088
原创 分库分表,可能真的会退出历史舞台了?
框架层,驱动层,代理层,在过去很长一段时间里,有无数的互联网公司前赴后继的试水,从 TDDL、Cobar,到 MyCat、ShardingSphere,各种层面的中间件也是层出不穷。很长时间以来,国内互联网的做法普遍是采用加入一个中间件的方式来解决,但随着分布式数据库的技术越来越成熟,这些魔法逐渐下沉到它本应该解决的层面–数据库实现层。当你的业务有了常年累积的复杂数据,你可能会采用复杂的分库分表组件,但如果你的业务比较新,可预见的未来会有大量数据,那一个分布式数据库可能是最合适的。要工具有工具,要人有人。
2022-12-29 09:57:40 57575 8
原创 Prometheus Operator实战—— Prometheus、Alertmanager、Grafana 监控RockectMq
RocketMQ 是一个分布式消息和流数据平台,具有低延迟、高性能、高可靠性、万亿级容量和灵活的可扩展性。简单的来说,它由 Broker 服务器和客户端两部分组成,其中客户端一个是消息发布者客户端(Producer),它负责向 Broker 服务器发送消息;另外一个是消息的消费者客户端(Consumer),多个消费者可以组成一个消费组,来订阅和拉取消费 Broker 服务器上存储的消息。
2022-12-23 10:54:04 47456 3
原创 我在简历里写了TCP长连接架构设计,面试官都被我惊艳了
然后实时计算,得到一个列表排序,这个排序是按照节点数最少的节点排序的。因此在每个接入层节点中的处理上,还有一点非常重要的就是,维持着大量长连接后,如果客户端一直没有请求,或者客户端以为异常导致关闭了连接但是服务端并不知晓,那么这些无用的长连接,服务端肯定是需要清理的,避免占用大量资源。因此,针对 IM 场景,最合理的负载均衡策略,就是根据连接数来负载均衡,客户端新发起连接需要接入的接入层节点一定是连接数最少的,因为每台节点会需要控制最大连接数的限制才能保证最优性能,并且能够及时给压力大的节点减压。
2022-12-22 14:58:49 48096
原创 Prometheus Operator实战—— Prometheus、Alertmanager、Grafana 监控mysql
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle旗下的产品。MySQL是最流行的关系型数据库管理系统之一。数据库的稳定运行是保证业务可用性的关键因素之一。本文将介绍如何使用Prometheus提供的MySQLD Exporter实现对MySQL数据库性能以及资源利用率的监控和度量。
2022-12-22 10:58:28 49144
原创 Prometheus Operator实战—— Prometheus、Alertmanager、Grafana 监控Springboot服务 Tomcat
我们可以利用Prometheus client自定义metric这一步非必要,只是创建业务需要的监控数据@Service// 定义name为prometheus_counter的counter}try {}}}}
2022-12-19 10:40:46 60142 4
原创 Kubernetes 高级篇 k8s Event详述及持久化方案
Kubernetes的事件(Event)是一种资源对象(Resource Object),用于展示集群内发生的情况,Kubernetes系统中的各个组件会将运行时发生的各种事件上报给Kubernetes API Server。例如,调度器做了什么决定,某些Pod为什么被从节点中驱逐。可以通过或命令显示事件,查看Kubernetes集群中发生了哪些事件。执行这些命令后,默认情况下只会显示最近(1小时内)发生的事件。
2022-12-18 08:30:00 62221 1
原创 Kubernetes自定义监控指标——Prometheus Adapter实战演练
kubernetes的监控指标分为两种:Core metrics(核心指标):从 Kubelet、cAdvisor 等获取度量数据,再由提供给 kube-scheduler、HPA、 控制器等使用。Custom Metrics(自定义指标):由Prometheus Adapter提供API custom.metrics.k8s.io,由此可支持任意Prometheus采集到的指标。核心指标只包含node和pod的cpu、内存,
2022-12-17 09:00:00 51066 2
2022图解网络 IPv6 、网络设备、二层交换机、三层交换机、防火墙、无线、设备选型,网络规划和实战
2022-07-04
windows加密器9款加密工具合集:U盘防拷贝、视频加密、PDF文件加密、EXE文件加密等
2022-05-13
Jenkins持续集成从入门到精通.pdf
2021-09-07
Navicat.7z
2020-03-26
Maven基础讲义.zip
2019-07-30
西蒙iPhone-OpenGL ES 教程【中文翻译版PDF】
2017-09-01
SurfaceView
2015-05-05
CameraDemo
2015-05-02
android 选项卡TanHost
2015-05-02
iOS 怎么上架后台持续定位的应用
2016-01-20
求vs2012怎么连接Oracle,大神们求助!!!
2015-05-09
请问Android.mk在哪里,需要自己写吗?求各位大侠指教。
2015-04-08
android获取GPS添加权限后出现问题。求大神给指点。
2015-04-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人