自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(334)
  • 资源 (15)
  • 收藏
  • 关注

原创 我的知识树

通过工作中以及业余时间自学,目前接触到了如下这么多知识点。

2020-04-02 08:37:41 395

原创 面试实战题-JVM调优

某个特定的类加载器接收到类加载的请求时,会将加载任务委托给自己的父类,直到最高级父类引导类加载器(bootstrap class loader),如果父类能够加载就加载,不能加载则返回到子类进行加载。如果都不能加载则报错。CMS收集器是一款追求停顿时间的老年代收集器,它在垃圾收集时使得用户线程和GC线程并行执行,因此在垃圾收集过程中用户也不会感受到明显的卡顿。当要进行垃圾收集时,首先估计每个Region中的垃圾数量,每次都从垃圾回收价值最大的Region开始回收,因此可以获得最大的回收效率。

2024-08-12 11:59:56 465

原创 面试实战题-消息中间件

为当客户端发送一条消息的时候,Kafka 并不会立即发送出去,而是要等一会儿攒一批再发送 Kafka 的消费者读取消息是可以重演的(replayable)。更加通用的方法是,给你的数据增加一个版本号属性,每次更数据前,比较当前数据的版本号是否和消息中的版本号一致,如果不一致就拒绝更新数据,更新数据的同时 将版本号+1,一样可以实现幂等更新 2、保证每条消息都有唯一编号且保证消息处理成功与去重表的日志同时出现。如果你的分区数是N,那么最好线程数也保持为N,这样通常能够达到最大的吞吐量。各个消息中间件的比较。

2024-08-12 11:59:23 490

原创 面试实战题-并发异步多线程

● @Target:注解的作用目标 ● @Retention:注解的生命周期 ● @Documented:注解是否应当被包含在 JavaDoc 文档中 ● @Inherited:是否允许子类继承该注解 注解的本质就是一个继承了 Annotation 接口的接口 编译器将在编译期扫描每个类或者方法上的注解,会做一个基本的检查,你的这个注解是否允许作用在当前位置,最后会将注解信息写入元素的属性表。按照双亲委派机制加载类,每当需要加载一个新的类时,当前的类加载器会先委托其父加载器,查询有没有加载该类。

2024-08-12 11:58:53 356

原创 面试实战题-分布式技术

由于 Redis 集群数据同步到各个节点时是异步的,如果在 Master 节点获取到锁后,在没有同步到其它节点时,Master 节点崩溃了,此时新的 Master 节点依然可以获取锁,所以多个应用服务可以同时获取到锁。● Consumer 第 2 步,subscribe 向注册中心订阅服务。Dubbo支持的通信协议:dubbo://(推荐)、rmi://、hessian://、http://、webservice://、thrift://、memcached://、redis://、rest://

2024-08-12 11:58:05 521

原创 面试实战题-Spring技术栈

而当我们请求缓存这些服务的时候,我们可以使用信号量隔离策略,因为这类服务的返回通常会非常的快,不会占用容器线程太长时间,而且也减少了线程切换的一些开销,提高了缓存服务的效率。BeanFactory是接口,提供了IOC容器最基本的形式,给具体的IOC容器的实现提供了规范, FactoryBean也是接口,为IOC容器中Bean的实现提供了更加灵活的方式,FactoryBean在IOC容器的基础上给Bean的实现加上了一个简单工厂模式和装饰模式, 我们可以在getObject()方法中灵活配置。

2024-08-12 11:57:34 271

原创 面试实战题-其他知识(设计模式)

采用多种decoder/encoder 支持,对TCP粘包/分包进行自动化处理 可使用接受/处理线程池,提高连接效率,对重连、心跳检测的简单支持 可配置IO线程数、TCP参数, TCP接收和发送缓冲区使用直接内存代替堆内存,通过内存池的方式循环利用ByteBuf 通过引用计数器及时申请释放不再引用的对象,降低了GC频率 使用单线程串行化的方式,高效的Reactor线程模型 大量使用了volitale、使用了CAS和原子类、线程安全类的使用、读写锁的使用。● 连接的建立是经过三次握手,断开的时候四次挥手。

2024-08-12 11:56:41 506

原创 面试实战题-网上问题处理

这次问题出现的原因为Broker宕机,导致堆积的消息过多,每一批达到500条消息,导致poll之后消费的时间过长(700s),超过max.poll.interval.ms(默认300s)。高并发系统的几大方向 1.请求数据尽量少,从而减少cpu消耗 2.访问路径尽量短,减少节点消耗 3.强依赖尽量少,减少加载时间 4.不要有单点,要有备份 5.减少额外请求,减少加载时间 为了系统的高可用,我们需要B计划,为了使系统仍然可用,我们准备了降级、限流、拒绝服务三件法宝。准备项目描述的说辞、准备好亮点和难点。

2024-08-12 11:55:49 414

原创 面试实战题-数据结构与算法

值按照提供的 Hash 算法算出对应的 Hash 值,然后将 Hash 值对数组长度取模后得到需要计入数组的索引值,并且将数组这个位置的值从 0 改成 1。在判断一个元素是否存在于这个集合中时,你只需要将这个元素按照相同的算法计算出索引值,如果这个位置的值为 1 就认为这个元素在集合中,否则则认为不在集合中。大根堆 解题思路:保持堆的大小为K,然后遍历数组中的数字,遍历的时候做如下判断: * 1. 若目前堆的大小小于K,将当前数字放入堆中。一种通过探索所有可能的候选解来找出所有的解的算法。

2024-08-12 11:54:19 460

原创 面试实战题-Java

● @Target:注解的作用目标 ● @Retention:注解的生命周期 ● @Documented:注解是否应当被包含在 JavaDoc 文档中 ● @Inherited:是否允许子类继承该注解 注解的本质就是一个继承了 Annotation 接口的接口 编译器将在编译期扫描每个类或者方法上的注解,会做一个基本的检查,你的这个注解是否允许作用在当前位置,最后会将注解信息写入元素的属性表。按照双亲委派机制加载类,每当需要加载一个新的类时,当前的类加载器会先委托其父加载器,查询有没有加载该类。

2024-08-12 11:53:32 440

原创 面试实战题-数据库及DAO层

主键索引的叶子节点存的是整行数据。Hibernate的一级缓存是绑定Session的,当获取到一个Session对象,在执行Sessinon里面的方法都能使用Hibernate默认提供的一级缓存,执行完成Session对象消亡即缓存数据也跟着消亡(一级缓存的数据是放在栈中)。垂直分表是基于数据库中的"列"进行,某个表字段较多,可以新建一张扩展表,将不经常用或字段长度较大的字段拆分出去到扩展表中 水平切分分为库内分表和分库分表,是根据表内数据内在的逻辑关系,将同一个表按不同的条件分散到多个数据库或多个表中。

2024-08-12 11:52:38 546

原创 面试实战题-Redis

volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除。● 主从复制,Master宕机后不影响Slave的读,但该集群不再提供对Redis的写入功能 ● 哨兵,哨兵模式是建立在主从模式的基础上,当Master节点宕机之后,哨兵会从Slave节点中选择一个节点作为Master,并修改它们的配置文件,使其他的Slave指向新的Master.但哨兵无法对Slave进行自动故障转移 ● 集群,所有的节点都是主从模式,其中Slave不提供服务,只提供备用。

2024-08-12 11:49:25 438

原创 rabbitmq高可用

rabbitmq高可用2020年12月13日19:30rabbit集群+ 级联 + 镜像队列1、多机多节点集群搭建RabbitMQ集群中的所有节点都会备份所有的元数据信息,包括以下内容:(1)队列元数据:队列的名称及属性(2)交换器:交换器的名称及属性(3)绑定关系元数据:交换器与队列或者交换器与交换器之间的绑定关系(4)vhost元数据:为vhost内的队列、交换器和绑定提供命名空间以及安全属性但是不会备份消息(镜像队列可以解决此问题)!集群中节点...

2020-12-27 15:07:43 519 4

原创 mysql主从搭建

mysql主从搭建2020年12月13日17:06搭建:1、mysqld.cnf 配置文件区分master和slavemysql服务器唯一标识设置:server-id=1 作用:server-id用于标识数据库实例,防止在链式主从、多主多从拓扑中导致SQL语句的无限循环: (1)标记binlog event的源实例 (2)过滤主库binlog,当发现server-id相同时,跳过该event执行,避免无限循环执行。 (3)如果设置了repli...

2020-12-27 15:05:45 389 2

原创 mysql主从复制原理

mysql主从复制原理2020年12月20日11:24MySQL 是以容易学习和方便的高可用架构,被开发人员青睐的。而它的几乎所有的高可用架构,都直接依赖于 binlog参考 <https://time.geekbang.org/column/article/76446> 1、主从复制原理:一条更新语句的执行过程:主库接收到客户端的更新请求后,执行内部事务的更新逻辑,同时写 binlog备库 B 跟主库 A 之间维持了一个长连接。主库 A 内...

2020-12-27 15:03:42 871 2

原创 rabbitMQ级联消费方案验证

参考资料:https://www.rabbitmq.com/federation.html1、开启federation2、配置federation,添加上游mq节点(1)页面方式:(2)命令行方式:rabbitmqctl set_parameter federation-upstream my-upstream \'{"uri":"amqp://server-name","expires":3600000}'(3)Http方式:PUT /api/par..

2020-11-29 12:46:49 600

转载 RAID学习笔记

磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意。[1]磁盘阵列是由很多块独立的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。[1]磁盘阵列还能利用同位检查(Parity Check)的观念,在数组中任意一个硬盘故障时,仍可读出数据,在数据重构时,将数据经计算后重新置入新硬盘中。[1]优点提...

2020-10-23 11:37:56 231

原创 java项目运维手册

1、生成dump文件jmap -dump:live,format=b,file=heap-dump-1829.bin 321712、查看子文件夹磁盘空间占用情况Du -sh *3、实时监控gc情况:jstat -gcutil pid interval(ms)4、开启jmx远程监控:执行foo.jar启动命令java -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.ssl=f.

2020-09-30 08:31:50 1528

原创 http客户端超时重试机制总结

超时设置:Feign_Ribbon超时机制结论一,默认情况下Feign的读取超时是1秒,如此短的读取超时算是坑点一。结论二,也是坑点二,如果要配置Feign的读取超时,就必须同时配置连接超时,才能生效。结论三,单独的超时可以覆盖全局超时,这符合预期,不算坑除了可以配置Feign,也可以配置Ribbon组件的参数来修改两个超时时间。这里的坑点三是,参数首字母要大写,和Feign的配置不同。结论五,同时配置Feign和Ribbon的超时,以Feign为准...

2020-08-24 07:40:06 2069

原创 Spring Security配置(单体springboot项目,前后端不分离)

spring boot集成jwt+spring security的大致流程为:1、使用jwt类库生成token、刷新token、验证token2、创建filter拦截请求,拿到token进行校验3、创建spring security配置类,配置请求拦截(1)拦截动态请求配置如下,以及配置当token验证不通过时返回的状态码和json结构的配置(默认返回302重定向到登陆页面)(2)配置静态文件过滤...

2020-07-25 10:40:09 1427

原创 ThreadLocalRandom的正确用法

java里有伪随机型和安全型两种随机数生成器,伪随机生成器根据特定公式将seed转换成新的伪随机数据的一部分,安全随机生成器在底层依赖到操作系统提供的随机事件来生成数据。安全随机生成器需要生成加密性强的随机数据的时候才用它 生成速度慢 如果需要生成大量的随机数据,可能会产生阻塞需要等待外部中断事件而伪随机生成器,只依赖于“seed”的初始值,如果给生成算法提供相同的seed,可以得到一样的伪随机序列。一般情况下,由于它是计算密集型的(不依赖于任何IO设备),因此生成速度更快。以下是伪随机生成器

2020-06-27 13:21:38 18103 3

原创 Dubbo学习笔记

注册中心宕机情况下,dubbo高可用:1、dubbo客户端可以缓存服务提供者的信息,进行调用2、dubbo配置url进行直连调用

2020-04-10 12:12:51 195 2

原创 大货车燃油盗窃案件管控应用详述

1、项目业务介绍盗窃大货车燃油基本是深夜凌晨在高速服务区、出入口和路边等地作案。 由于夜间监控模糊,监控被大货车遮挡,同时嫌疑人故意绕开有监控的路 段,导致作案车辆监控抓拍线索非常少。因此,在侦查大货车燃油盗窃案 件时,常常会遇到作案车辆发现难,行车轨迹研判难这到两个难题。为此我们开发了几种找车的方法:1、 首先是案件找盗油车,我们利用几个案件发生的时空区域的数据碰撞,加 上 AI ...

2020-03-21 09:36:15 587 4

转载 mysql主从复制原理

主从复制复制功能数据分布 负载均衡(读) 备份 高可用和故障切换 MySQL 升级测试复制原理Mysql 中有一种日志叫做 bin 日志(二进制日志)。这个日志会记录下所有修改了数据库的 SQL 语句(insert,update,delete,ALTER TABLE,grant 等等)。主从复制的原理其实就是把主服务器上的 BIN 日志复制到从服务器上执行一遍,这样从服务...

2020-03-05 15:30:16 183

转载 mysql数据库设计与优化与架构 模拟场景(京东商城)

mysql数据库设计与优化与架构 模拟场景(京东商城)任何优化多需要场景,本次所有的场景为京东商城的数据库设计模拟!有问题或者宝贵意见联系我的QQ,非常希望你的加入!##简介: 设计: 1.数据库开发规范的制定 2.数据库结构与设计 3.mysql执行计划的分析 4.mysql数据库的备份和恢复 5.mysql高性能高可用架构变迁场景说明 用户登录->选购商品...

2020-02-23 15:57:51 777

转载 秒杀tomcat优化

秒杀tomcat优化有问题或者宝贵意见联系我的QQ,非常希望你的加入!要求:本文以tomcat8.5.20为准目标1.内存优化2.并发优化3.APR优化APR优化相关包1.内存优化内存优化catalinaJAVA_OPTS="-server -Xms2048M -Xmx2048M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDum...

2020-02-23 15:52:02 301

转载 秒杀nginx优化

秒杀nginx优化要求:目标1.并发优化2.KeepALive长连接优化3.压缩优化4.配置缓存/docs/tools/nginx nginx优化相关包安装:cdyum install -y gcc gcc-c++./configure --prefix=/usr/local/nginx --with-pcre=/home/qiurunze/下载/pcre-8.38 --...

2020-02-23 15:10:42 651

原创 简单秒杀功能实现思路

秒杀步骤* 1、发送获取验证码请求,后台生成验证码并写入redis* 2、用户填写验证码,发送检验验证码请求,后台校验成功后创建并返回秒杀专属路径* 3、发送秒杀请求,发送商品id和path,后台验证path,验证是否已经秒杀成功(防止重复下单),并预减库存(内存操作)* 4、发送mq消息* 5、监听mq秒杀消息,校验库存,判断是否已经秒杀成功* 6、减库存,创建订单,将秒杀成功信息...

2020-02-23 10:26:40 2371

原创 原子类为何能支持高并发(CAS介绍)

无锁方案相对互斥锁方案,最大的好处就是性能。互斥锁方案为了保证互斥性,需要执行加锁、解锁操作,而加锁、解锁操作本身就消耗性能;同时拿不到锁的线程还会进入阻塞状态,进而触发线程切换,线程切换对性能的消耗也很大。 相比之下,无锁方案则完全没有加锁、解锁的性能消耗,同时还能保证互斥性,既解决了问题,又没有带来新的问题,可谓绝佳方案。其实原子类性能高的秘密很简单,硬件支持而已。CPU 为了解决并发问题...

2020-02-16 22:54:03 318

原创 控制反转和依赖注入

1. 控制反转实际上,控制反转是一个比较笼统的设计思想,并不是一种具体的实现方法,一般用来指导框架层面的设计。这里所说的“控制”指的是对程序执行流程的控制,而“反转”指的是在没有使用框架之前,程序员自己控制整个程序的执行。在使用框架之后,整个程序的执行流程通过框架来控制。流程的控制权从程序员“反转”给了框架。2. 依赖注入依赖注入和控制反转恰恰相反,它是一种具体的编码技巧。我们不通过 ...

2020-02-14 03:37:08 189

原创 Redis的SortedSet为什么使用跳表而不使用红黑树?

为什么 Redis 要用跳表来实现有序集合,而不是红黑树?Redis 中的有序集合是通过跳表来实现的,严格点讲,其实还用到了散列表。如果你去查看 Redis 的开发手册,就会发现,Redis 中的有序集合支持的核心操作主要有下面这几个:插入一个数据;删除一个数据;查找一个数据;按照区间查找数据(比如查找值在 [100, 356] 之间的数据);迭代输出有序序列。其中...

2020-01-13 15:26:10 1879

原创 求数组中第二大的数字

private static int secondMax(int[] arr) { int len = arr.length; int max = Integer.MIN_VALUE, secondMax = Integer.MIN_VALUE; if (len < 2) return secondMax; for (int i = 0; i &lt...

2020-01-05 12:40:43 433

原创 字符串按照字母表顺序排序

private static String sortString2(String string){ char[] str=string.toCharArray(); int n = string.length(); boolean flag = false; for(int i=0;i< n - 1;i++) { ...

2020-01-01 20:14:49 4613 1

原创 JVM相关问题定位

cpu占用过高排查思路2. top 查看占用cpu的进程 pid4. top -Hp pid 查看进程中占用cpu过高的线程id tid6. printf '%x/n' tid 转化为十六进制8. jstack pid |grep tid的十六进制 -A 30 查看堆栈信息定位jvm old区占用过高排查思路2. top查看占用cpu高的进程4. jstat -...

2020-01-01 19:17:58 234

原创 如何避免死锁

避免死锁主要有 3种方式加锁顺序加锁时限死锁检测加锁顺序一个线程如果要获取多个锁,必须按照一定的顺序去获取,比如要获取A B C 三把锁,我们规定,必须获取到了 AB 两把锁,才能去获取 C锁举个例子 现在有两个线程 都要去获取 ABC 三把锁然后 1号 线程 获取到了 A 和 B 两把锁2号 线程获取了 C锁于是 1号线程在等待 2号线程释放锁C锁2号线程在等待...

2019-12-26 11:27:01 369 1

原创 二叉树与散列表的比较

散列表的插入、删除、查找操作的时间复杂度可以做到常量级的 O(1),非常高效。而二叉查找树在比较平衡的情况下,插入、删除、查找操作时间复杂度才是 O(logn),相对散列表,好像并没有什么优势,那我们为什么还要用二叉查找树呢?我认为有下面几个原因:第一,散列表中的数据是无序存储的,如果要输出有序的数据,需要先进行排序。而对于二叉查找树来说,我们只需要中序遍历,就可以在 O(n) 的时间复杂度内...

2019-12-21 11:55:03 534 2

转载 SpringBoot Starter介绍以及实例

一.Spring Boot Starter简介Starter是Spring Boot中的一个非常重要的概念,Starter相当于模块,它能将模块所需的依赖整合起来并对模块内的Bean根据环境( 条件)进行自动配置。使用者只需要依赖相应功能的Starter,无需做过多的配置和依赖,Spring Boot就能自动扫描并加载相应的模块。例如在Maven的依赖中加入spring-boot-star...

2019-12-16 15:25:42 384

转载 redis字符串的实现

本篇会讲以下内容: Redis字符串的实现 Redis字符串的性能优势 Redis字符串的实现Redis虽然是用C语言写的,但却没有直接用C语言的字符串,而是自己实现了一套字符串。目的就是为了提升速度,提升性能,可以看出Redis为了高性能也是煞费苦心。Redis构建了一个叫做简单动态字符串(Simple Dynamic String),简称SDS1.SDS 代码结...

2019-12-10 20:57:17 219

转载 了解什么是 redis 的雪崩、穿透和击穿?redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 redis 的穿透?

面试题了解什么是 redis 的雪崩、穿透和击穿?redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 redis 的穿透?面试官心理分析其实这是问到缓存必问的,因为缓存雪崩和穿透,是缓存最大的两个问题,要么不出现,一旦出现就是致命性的问题,所以面试官一定会问你。面试题剖析缓存雪崩对于系统 A,假设每天高峰期每秒 5000 个请求,本来缓存在高峰期可以扛住每秒 4...

2019-12-10 15:25:35 165

转载 为什么说HashMap是线程不安全的?

我们都知道HashMap是线程不安全的,在多线程环境中不建议使用,但是其线程不安全主要体现在什么地方呢,本文将对该问题进行解密。1.jdk1.7中的HashMap在jdk1.8中对HashMap做了很多优化,这里先分析在jdk1.7中的问题,相信大家都知道在jdk1.7多线程环境下HashMap容易出现死循环,这里我们先用代码来模拟出现死循环的情况:publicclassHash...

2019-12-10 08:26:38 349

apache的dockerfile

这里边的文件是用来构建apache的docker镜像的,大家可以放心使用

2018-07-25

apache镜像dockerfile

这个是用于构建docker镜像的dockerfile文件,构建的是apache镜像

2018-07-25

zookeeper安装包

zookeeper的安装包,用于安装zookeeper,版本为3.4.12

2018-07-12

数据库学习笔记

这是我自己平时学习到的mysql相关知识的一个总结,希望对大家有用

2018-07-01

网络磁盘性能测试工具

自己搭建的一个django管理平台,磁盘和网络性能测试脚本,用于排查网络以及硬件问题

2018-06-25

Java8语法总结

学习java8新特性,尤其是lambda和流式编程,学习过程中总结的笔记

2018-06-04

docker-ce 17.12.0离线安装包套件

docker-ce离线安装包,已知适用于ubuntu16.04,可以放心使用

2018-05-23

单例模式与垃圾回收机制

探索讨论单例模式会不会被垃圾回收机制回收,结论是HotSpot中不会

2018-05-13

单例模式代码实现

这个讲的是单例模式的多种不同实现方式,希望对单例感兴趣的同学看看

2018-05-13

docker安装包-amd64-ubuntu

dockerlasjfdolwsajfldskjalgewiuogjds东方萨规定撒大概撒旦甘洒规定萨嘎

2018-04-04

IP地址、子网划分相关知识

IP地址相关知识,IP地址分类、IP子网划分等等知识的笔记

2018-03-24

网络知识学习笔记

自己学习网络知识尤其是传输层和应用层的一些协议的笔记

2018-03-24

TCP/IP和HTTP协议详解

学习TCP/IP协议基础知识,了解三次握手和四次挥手的含义的意义

2018-03-23

linux学习笔记-2

学习linux的笔记,记录学习的命令和用法,就这样,还不够吗

2018-03-23

Linux学习笔记

自己写的linux笔记,记录学习过程,便于温故而知新,记录了常见的linux命令

2018-03-17

空空如也

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

TA关注的人

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