自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(257)
  • 资源 (1)
  • 收藏
  • 关注

原创 java后端面试大全,java后端面试宝典

后端全面知识点学习,java,redis,数据库

2023-05-08 15:33:04 1260 1

原创 java面试,redis面试,java面试大全

LEARNING_CONTENT一个分布式锁的解决方案,另一个是分布式事务的解决方案-2 flink链接:flink参考文章-1 linux of view参考链接: linux常见面试题linux查看占用cup最高的10个进程的命令;参考文章:linux查看cpu占用最高的进程〇、分布式锁 & 分布式事务0-1分布式锁–包含CAP理论模型参考:文章-分布式锁概述随着互联网技术的不断发展,用户量的不断增加,越来越多的业务场景需要用到分布式系统。分布式系统有一个著名的理论CA

2023-05-06 17:21:12 1012 1

原创 git提交代码常用命令

git使用常用命令使用git提交代码命令执行步骤:命令如下:git add . // 使用此种方式提交的一个弊端就是会提交项目中所有新增或者修改的文件,建议使用idea自带的提交方式,选择性的提交文件git commit -m “实现了“abc下载及更新服务”,提供返回目录(文件和文件夹)的接口,可下载相应的文件。”git pullgit push撤销:1. 使用 git log 命令查看commit的历史2. git reset --hard d7aaf3

2021-08-30 15:50:58 5547

原创 oracle的学习、包含SQL的内容

文章目录理论方面实操方面DDLDML 增删改增加批量增加删除数据修改查询例子:运算符:理论方面Oracle服务器 : 一个Oracle数据库和多个Oracle实例组成。实例: 存储在内存当中数据库 : 以二进制的形式保存在硬盘中。网络服务服务名使用Oracle ,首先开服务 services.msc本地登录: sqlplus 用户名/密码远程登录 :sqlplus 用户名/密码@IP地址:端口号/服务解锁账户以超级管理员登录sqlplus / as sysdba解锁账户 alter

2020-11-29 18:18:41 655 3

原创 如何查询慢 SQL 产生的原因

(1)分析 SQL 执行计划(explain extended),思考可能的优化点,是否命中索引等。(2)没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)。(5)是否查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)。(8)I/O 吞吐量小,形成了瓶颈效应。(6)是否返回了不必要的行和列。

2024-01-13 11:24:50 741

原创 undo log 具体怎么回滚事务 ?

(1)对于 insert 类型的 sql,会在 undo log 中记录下方才你 insert 进来的数据的 ID,当你想roll back 时,根据 ID 完成精准的删除。(2)对于 delete 类型的 sql,会在 undo log 中记录方才你删除的数据,当你回滚时会将删除前的数据 insert 进去。(3)对于 update 类型的 sql,会在 undo log 中记录下修改前的数据,回滚时只需要反向。(4)对于 select 类型的 sql,别费心了,select 不需要回滚。

2024-01-13 11:23:53 418

原创 MySQL 索引底层结构为什么使用 B+树

B 树能够在非叶节子点中存储数据,但是这也导致在查询连续数据时可能会带来更多的随机 I/O,而 B+树的所有叶节点可以通过指针相互连接,能够减少顺序遍历时产生的额外随机 I/O;(2)第一,B 树一个节点里存的是数据,而 B+树存储的是索引(地址),所以 B 树里一个节点存不了很多个数据,但是 B+树一个节点能存很多索引,B+树叶子节点存所有的数据。(3)第二,B+树的叶子节点是数据阶段用了一个链表串联起来,便于范围查找。

2024-01-13 11:23:01 374

原创 MySQL 为什么 InnoDB 是默认引擎

聚集索引是指数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同。一个表只能有一个聚簇索引,因为一个表的物理顺序只有一种情况,所以,对应的聚簇索引只能有一个。聚簇索引的叶子节点就是数据节点,既存储索引值,又在叶子节点存储行数据。

2024-01-13 11:22:22 773

原创 java的是堆内存、参数如何设置?

(3)-Xmn, 等价于 -XX:NewSize,使用 G1 垃圾收集器 不应该 设置该选项,在其他的某些业务场景下可以设置。这个内存不包括栈内存,也不包括堆外使用的内存。(5)-XX:MaxMetaspaceSize=size, Java8 默认不限制 Meta 空间, 一般不允许设置该选项。(6)-XX:MaxDirectMemorySize=size,系统可以使用的最大堆外内存,这个参数跟 -在 Java 中,堆内存主要用于分配对象的存储空间,只要拿到对象引用,所有线程都可以访问堆内存。

2024-01-13 11:20:35 456

原创 你有哪些手段来排查 OOM 的问题?

(1)增 加 两 个 参 数 -XX:+HeapDumpOnOutOfMemoryError - XX:HeapDumpPath=/tmp/heapdump.hprof,当 OOM 发生时自动 dump 堆内存信息到指定目录。(3)使用 MAT 工具载入到 dump 文件,分析大对象的占用情况,比如 HashMap 做缓存未清理,时间长了就会内存溢出,可以把改为弱引用。(2)同时 jstat 查看监控 JVM 的内存和 GC 情况,先观察问题大概出在什么区域。

2024-01-13 11:18:47 291

原创 java线程池大小如何设置

(1)CPU 密集型任务(N+1): 这种任务消耗的主要是 CPU 资源,可以将线程数设置为 N(CPU 核心数)+1,比 CPU 核心数多出来的一个线程是为了防止线程偶发的缺页中断, 或者其它原因导致的任务暂停而带来的影响。一旦任务暂停,CPU 就会处于空闲状态,而在这种情况下多出来的一个线程就可以充分利用 CPU 的空闲时间。

2024-01-13 11:17:53 419

原创 RPC 的实现基础是什么

(3)可靠的寻址方式(主要是提供服务的发现),比如可以使用 Zookeeper 来注册服务等等;(1)需要有非常高效的网络通信,比如一般选择 Netty 作为网络通信框架;(2)需要有比较高效的序列化框架,比如谷歌的 Protobuf 序列化框架;(4)如果是带会话(状态)的 RPC 调用,还需要有会话和状态保持的功能;

2024-01-07 11:38:25 355 1

原创 Redis 常见的几种数据结构说一下?各自的使用场景?

Redis 中的 set 类型是一种无序集合,集合中的元素没有先后顺序。当你需要存储一个列表数据,又不希望出现重复数据时,set 是一个很好的选择,并且 set 提供了判断某个成员是否在一个 set 集合内的重要接口,这个也是 list 所不能提供的。介绍:bitmap 存储的是连续的二进制数字(0 和 1),通过 bitmap, 只需要一个 bit 位来表示某个元素对应的值或者状态,key 就是对应元素本身。

2024-01-07 11:35:14 1039

原创 税法相关的基础知识

来和大家聊聊税法相关的基础知识。

2024-01-07 11:29:05 367

原创 税法相关的基础知识

来和大家聊聊税法相关的基础知识。

2024-01-07 11:27:41 454

原创 ThreadLocal 是什么?它的实现原理是什么?

但是加锁会带来性能的下降,所以 ThreadLocal 用了一种空间换时间的设计思想, 也就是说在每个线程里面,都有一个容器来存储共享变量的副本,然后每个线程 只对自己的变量副本来做更新操作,这样既解决了线程安全问题,又避免了多线程竞争加锁的开销。在多线程访问共享变量的场景中,一般的解决办法是对共享变量加锁,从而保证在同一时刻只有一个线程能够对共享变量进行更新,并且基于 Happens-Before 规则里面的监视器锁规则,又保证了数据修改后对其他线程的可见性。

2024-01-01 17:52:55 397

原创 wait 和 notify 这个为什么要在synchronized 代码块中

而 Synchronized 同步关键字就可以实现这样一个互斥条件,也就是在通过共享变量来实现多个线程通信的场景里面,参与通信的线程必须要竞争到这个共享变量的锁资源,才有资格对共享变量做修改,修改完成后就释放锁,那么其他的线程就可以再次来竞争同一个共享变量的锁来获取修改后的数据,从而完成线程之前的通信。在多线程里面,要实现多个线程之间的通信,除了管道流以外,只能通过共享变量的方法来实现,也就是线程 t1 修改共享变量 s,线程 t2 获取修改后的共享变量 s,从而完成数据通信。

2024-01-01 17:36:51 428 1

原创 Spring Boot 中自动装配机制的原理

这个配置类是放在第三方的 jar 包里面,然后通过 SpringBoot 中的约定优于配置思想,把这个配置类的全路径放在 classpath:/META-INF/spring.factories 文件中。@Enable 注解是模块驱动的意思,我们只需要增加某个@Enable 注解,就自动打开某个功能,而不需要针对这个功能去做 Bean 的配置,@Enable 底层也是帮我们去自动完成这个模块相关 Bean 的注入。它的出现,让开发人员更加聚焦在了业务代码的编写上, 而不需要去关心和业务无关的配置。

2024-01-01 17:33:31 1156

原创 网络四元组

今天我们来聊聊 网络四元组。

2024-01-01 17:28:33 491

原创 Dubbo 的服务请求失败怎么处理?

而对于 Dubbo 服务请求失败的场景,默认提供了重试的容错机制,也就是说, 如果基于 Dubbo 进行服务间通信出现异常,服务消费者会对服务提供者集群中其他的节点发起重试,确保这次请求成功,默认的额外重试次数是 2 次。并行调用多个服务策略,就是把这个消息广播给服务提供者集群,只要有任何一个节点返回,就表示请求执行成功。要注意的是,默认基于重试策略的容错机制中,需要注意幂等性的处理,否则在事务型的操作中,容易出现多次数据变更的问题。失败安全策略,如果出现服务通信异常,直接把这个异常吞掉不做任何处理。

2024-01-01 17:23:21 481

原创 CPU 飙高系统反应慢怎么排查

CPU 利用率过高的线程一直是同一个,说明程序中存在线程长期占用 CPU 没有释放的情况,这种情况直接通过 jstack 获得线程的 Dump 日志,定位到线程日志后就可以找到问题的代码。一、CPU 上下文切换过多,对于 CPU 来说,同一时刻下每个 CPU 核心只能运行一个线程,如果有多个线程要执行,CPU 只能通过上下文切换的方式来执行不同的线程。CPU 利用率过高的线程 id 不断变化,说明线程创建过多,需要挑选几个线程 id, 通过 jstack 去线程 dump 日志中排查。

2023-12-31 10:07:33 378

原创 kafka 的零拷贝原理

今天来跟大家聊聊kafka的零拷贝原理是什么?

2023-12-31 09:54:12 745

原创 CompletableFuture是什么?以及CompletableFuture的作用

今天我们来聊聊 CompletableFuture。

2023-12-30 11:40:48 407

原创 什么是 SPI,它有什么用?

SPI 全称是 Service Provider Interface ,它是 JDK 内置的一种动态扩展点的实现。简单来说,就是我们可以定义一个标准的接口,然后第三方的库里面可以实现这个接口。那么,程序在运行的时候,会根据配置信息动态加载第三方实现的类,从而完成功能的动态扩展机制。在 Java 里面, SPI 机制有一个非常典型的实现案例, 就是数据库驱动 java.jdbc.DriverJDK 里面定义了数据库驱动类 Driver,它是一个接口,JDK 并没有提供实现。

2023-12-30 11:33:28 410

原创 为什么引入偏向锁、轻量级锁,介绍下升级流程 Synchronized 引入了锁升级的机制之后,如果有线程去竞争锁:

Synchronized 在 jdk1.6 版本之前,是通过重量级锁的方式来实现线程之间锁的竞争。之所以称它为重量级锁,是因为它的底层底层依赖操作系统的 Mutex Lock 来实现互斥功能。Mutex 是系统方法,由于权限隔离的关系,应用程序调用系统方法时需要切换到内核态来执行。这里涉及到用户态向内核态的切换,这个切换会带来性能的损耗。在 jdk1.6 版本中,synchronized 增加了锁升级的机制,来平衡数据安全性和性能。

2023-12-29 21:51:10 701

原创 TCP 协议为什么要设计三次握手 TCP 协议,是一种可靠的,基于字节流的,面向连接的传输层协议。

今天我们来谈谈tcp的三次握手。

2023-12-29 21:33:51 332

原创 Seata 中封装了四种分布式事务模式,分别是: AT 模式, TCC 模式, Saga 模式, XA 模式,

在微服务架构下,由于数据库和应用服务的拆分,导致原本一个事务单元中的多个 DML 操作,变成了跨进程或者跨数据库的多个事务单元的多个 DML 操作,而传统的数据库事务无法解决这类的问题,所以就引出了分布式事务的概念。分布式事务本质上要解决的就是跨网络节点的多个事务的数据一致性问题,业内常见的解决方法有两种强一致性,就是所有的事务参与者要么全部成功,要么全部失败,全局事务协调 者需要知道每个事务参与者的执行状态,再根据状态来决定数据的提交或者回滚!

2023-12-28 22:57:37 451

原创 什么是受检异常和非受检异常 一、首先是异常的本质 二、然后是对受检异常和非受检异常的定义 三、最后我还可以说下他们优点和缺点) 受检异常优点有两个:

可以从三个方面回答这个问题一、首先是异常的本质)前面说过受检异常和非受检异常均派生自 Exception 这个类。\1. 受检异常的定义是程序在编译阶段必须要主动捕获的异常,遇到该异常有两种处理方法通过 try/catch 捕获该异常或者通过 throw 把异常抛出去\2. 非受检异常的定义是程序不需要主动捕获该异常,一般发生在程序运行期间, 比如 NullPointException第一,它可以响应一个明确的错误机制,这些错误在写代码的时候可以随时捕获并且能很好的提高代码的健壮性。

2023-12-28 22:49:36 592

原创 Zookeeper 和 Redis 哪种更好? 为什么使用分布式锁? 1. 利用 Redis 提供的 第二种,基于 ZK 实现分布式锁的落地方案 对于 redis 的分布式锁而言,它有以下缺点:

如果要在两者之间做选择,就我个人而言的话,比较推崇 ZK 实现的锁,因为对于分布式锁而言,它应该符合 CP 模型,但是 Redis 是 AP 模型,所以在这个点上,Zookeeper 会更加合适。4、如果当前线程创建的节点不是所有节点序号最小的节点,则对节点序号的前一个节点添加一个事件监听,当前一个被监听的节点释放锁之后,触发回调通知, 从而再次去尝试抢占锁。2、线程创建节点后,获取/lock 节点下的所有子节点,判断当前线程创建的节点是否是所有的节点的序号最小的。锁的模型健壮、简单易用、适合做分布式锁。

2023-12-28 22:43:48 977

原创 spripng 三级缓存,三级缓存的作用是什么? Spring 中哪些情况下,不能解决循环依赖问题有哪些

三级缓存是用来存储代理 Bean,当调用 getBean()方法时,发现目标 Bean 需要通过代理工厂来创建,此时会将创建好的实例保存到三级缓存,最终也会将赋值好的 Bean 同步到一级缓存中。3.单例的代理 Bean 通过 Setter 注入的情况,不能解决循环依赖问题。4.设置了@DependsOn 的 Bean 的情况,不能解决循环依赖问题。1.多例 Bean 通过 setter 注入的情况,不能解决循环依赖问题。2.构造器注入的 Bean 的情况,不能解决循环依赖问题。

2023-12-27 23:16:17 604

原创 Spring 是如何解决循环依赖问题的方案

而 Spring 中设计了三级缓存来解决循环依赖问题,当我们去调用 getBean()方法的时候,Spring 会先从一级缓存中去找到目标 Bean,如果发现一级缓存中没有便会去二级缓存中去找,而如果一、二级缓存中都没有找到,意味着该目标 Bean 还没有实例化。如果不存在循环依赖便会将目标 Bean 存入到二级缓存,否则, 便会标记该 Bean 存在循环依赖,然后将等待下一次轮询赋值,也就是解析。循环的依赖将会导致注入死循环。第二种三者间依赖:A 依赖 B,B 依赖 C,C 又依赖 A,形成了循环依赖。

2023-12-27 23:12:06 503

原创 Dubbo 的工作原理是什么样的? 最后在说说 Dubbo 与 Spring Cloud 的区别吧!

Dubbo 是 SOA 时代的产物,它的关注点主要在于服务的调用,流量分发、流量监控和熔断。而 Spring Cloud 诞生于微服务架构时代,考虑的是微服务治理的方方面面,另外由于依托了 Spirng、Spirng Boot 的优势之上,两个框架在开始目标就不一致,Dubbo 定位服务治理、Spirng Cloud 是一个生态。两者最大的区别是 Dubbo 底层是使用 Netty 这样的 NIO 框架,是基于 TCP 协议传输的,配合以 Hession 序列化完成 RPC 通信。

2023-12-24 09:01:37 371

原创 既然说到 Dubbo 的功能,请详细说说 Dubbo 负载均衡的几种策略 Dubbo 有五种负载策略:

每收到一个请求,活跃数加 1,完成请求后则将活跃数减 1。在服务运行一段时间后,性能好的服务提供者处理请求的速度更快, 因此活跃数下降的也越快,此时这样的服务提供者能够优先获取到新的服务请求。现在把这些权重值平铺在一维坐标值上,[0, 5) 区间属于服务器 A,[5, 8) 区间属于服务器 B,[8, 10) 区间属于服。比如服务器 A、B、C 权重比为 5:2:1,那么在 8 次请求中, 服务器 A 将收到其中的 5 次请求,服务器 B 会收到其中的 2 次请求,服务器 C 则收到其中的 1 次请求。

2023-12-24 08:58:41 423

原创 什么是 Dubbo?它有哪些核心功能?

Dubbo 是一款高性能、轻量级的开源 RPC 框架。由 10 层模式构成,整个分层依赖由上至下。通过这张图我们也可以将 Dubbo 理解为三层模式:第一层的 Business 业务逻辑层由我们自己来提供接口和实现还有一些配置信息。第二层的 RPC 调用的核心层负责封装和实现整个 RPC 的调用过程、负载均衡、集群容错、代理等核心功能。Remoting 则是对网络传输协议和数据转换的封装。l 面向接口代理的高性能 RPC 调用。l 智能容错和负载均衡。l 服务自动注册和发现。

2023-12-24 08:56:32 495

原创 1、TCP 和 UDP 区别? 2、TCP/IP 协议涉及哪几层架构? 3、描述下 TCP 连接 4 次挥手的过程?为什么要 4 次挥手?

因为 TCP 是全双工,每个方向都必须进行单独关闭。关闭连接时,当 Server 端收到 FIN 报文时,很可能并不会立即关闭 SOCKET,所以只能先回复一个 ACK 报文,告诉 Client 端,”你发的 FIN 报文我收到了”。只有等到 Server 端所有的报文都发送完了,我才能发送 FIN 报文,因此不能一起发送。(4)TCP 保证数据正确性,UDP 可能丢包。(2)TCP 要求系统资源较多,UDP 较少。(1)TCP 基于连接,UDP 基于无连接。(5)TCP 保证数据顺序,UDP 不保证。

2023-12-23 23:10:23 1226

原创 Redis 主从同步是怎么实现的? 全量同步 增量同步 Redis 主从同步策略

当主从连接断掉之后,slave 服务器隔断时间(默认1s)主动尝试和 master 服务器进行连接,如果从服务器携带的偏移量标识还在 master 服务器上的同步备份日志中,那么就从 slave 发送的偏移量开始继续上次的同步操作,如果 slave 发送的偏移量已经不再 master 的同步备份日志中(可能由于主从之间断掉的时间比较长或者在断掉的短暂时间内 master 服务器接收到大量的写操作),则必须进行一次全量更新。主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。

2023-12-23 22:56:57 612

原创 LRU 是什么?如何实现? 什么是堆内存?参数如何设置?

堆内存是指由程序代码自由分配的内存,与栈内存作区分。在 Java 中,堆内存主要用于分配对象的存储空间,只要拿到对象引用,所有线程都可以访问堆内存。(1)-Xmx, 指定最大堆内存。如 -Xmx4g. 这只是限制了 Heap 部分的最大值为 4g。这个内存不包括栈内存,也不包括堆外使用的内存。(2)-Xms, 指定堆内存空间的初始大小。如 -Xms4g。而且指定的内存大小,并不是操作系统实际分配的初始值,而是 GC 先规划好,用到才分配。

2023-12-23 22:54:35 933

原创 可重复读解决了哪些问题? 对 SQL 慢查询会考虑哪些优化 ?

保证多次读取同一个数据时,其值都和事务开始时候的内容是一致,禁止读取到别的事务未提交的数据,会造成幻读。(2)而事务更新数据的时候,只能用当前读。(2)分析 SQL 执行计划(explain extended),思考可能的优化点,是否命中索引等。(4)可重复读解决的是重复读的问题,可重复读在快照读的情况下是不会有幻读,但当前读的时候会有幻读。(5)按照可能的优化点执行表结构变更、增加索引、SQL 改写等操作。(1)分析语句,是否加载了不必要的字段/数据。(3)查看 SQL 涉及的表结构和索引信息。

2023-12-23 22:52:48 732

原创 java 线程的创建和启动

每个线程的作用是完成一定的任务,实际上就是执行一段程序流。call()**方法将作为线程执行体,并且有返回值。方法的方法体就代表了线程要完成的任务。()方法的方法体同样是该线程的线程执行体。对象的**call()**方法的返回值。()方法来获得子线程执行结束后的返回值。接口的实现类,并实现**call()类代表线程,所有的线程对象都必须是。子类的实例,即创建了线程对象。接口的实现类,并重写该接口的。对象才是真正的线程对象。类的子类,并重写该类的。()方法来启动该线程。()方法来启动该线程。

2023-12-22 08:17:14 1158

原创 1. 线程概述、线程和进程、 并发和并行、多线程的优势 、程序运行原理 、主线程、 线程的 6 种状态

​ 进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位。线程也被称为轻量级进程,线程是进程的组成部分,一个进程可以拥有多个线程,一个线程必须有一个父进程。线程可以拥有自己的堆栈、自己的程序计数器和自己的局部变量,但不拥有系统资源,它与父进程的其它线程共享该进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行。

2023-12-22 08:15:55 362

NO.1 Python 商业爬虫学习内容.rar

这是关于python进行爬虫的代码和学习的步骤以及环境的搭建,只需 一块九 就可以让你掌握.如果你是初学者,这个价格很适合.只要你需要我就提供.

2021-08-06

空空如也

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

TA关注的人

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