- 博客(122)
- 问答 (1)
- 收藏
- 关注
原创 布隆过滤器——(原理,代码实现,改进,应用场景)
文章目录技术分享-布隆过滤器场景:刷抖音的时候是否曾想过,我们刷过的视频很难再重复刷到那么它到底是如何实现的呢?一、原理1、什么是布隆过滤器?2、原理3、存在的问题及解决方案1、误判2、删除二、代码演示1、基于guava实现布隆过滤器2、基于Redis实现布隆过滤器(分布式环境下)3、改进三、应用场景1、缓存穿透2、爬虫3、去重技术分享-布隆过滤器场景:刷抖音的时候是否曾想过,我们刷过的视频很难再重复刷到那么它到底是如何实现的呢?首先它会推荐给我们视频,但是需要从推荐的这些视频中筛选掉已经看过的视频。
2021-09-03 17:09:35
1201
2
原创 计算机网络(HTTP,HTTPS)
文章目录一、GET和POST的区别二、HTTP请求、响应报文格式?三、HTTP中常见的状态码四、对称加密和非对称加密以及CA?对称加密非对称加密CA证书五、HTTP和HTTPS的不同?1、区别2、HTTPS的工作原理六、HTTP长连接、短连接七、HTTP各个版本之间的区别?一、GET和POST的区别GET参数通过URL传递,POST放在Request body中。GET请求在URL中传送的参数是有长度限制的,而POST么有。GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感
2021-03-29 13:40:32
416
转载 Redis主从同步原理
文章目录1、前言2、全量同步3、命令传播(增量同步)4、重新复制1、前言在redis中为了保证redis的高可用,一般会搭建一种集群模式就是主从模式。主从模式可以保证redis的高可用,那么redis是怎么保证主从服务器的数据一致性的,接下来我们浅谈下redis主(master)从(slave)同步的原理。2、全量同步当一个redis服务器初次向主服务器发送salveof命令时,redis从服务器会进行一次全量同步。salveof:将当前服务器转变为指定服务器的从属服务器,就是给主机加一个从机
2021-03-19 23:58:30
420
原创 容易遗漏的知识点
文章目录一、JAVA的三大特性1、封装2、继承3、多态二、什么是JAVA的序列化以及反序列化?三、cookie和session的区别四、说说你对反射的理解五、说说你对Java中泛型的理解六、说说DoS/DDoS是什么?1、与DoS攻击相关的几个概念2、一些常见DoS攻击的攻击原理SYN泛洪死亡之ping泪滴UDP泛洪Land攻击IP欺骗一、JAVA的三大特性1、封装Java中的封装是指一个类把自己内部的实现细节进行隐藏,只暴露对外的接口。封装又分为属性的封装和方法的封装,把属性定义为私有的,他们通过s
2020-11-30 13:24:12
318
转载 常见的HTTP状态码
文章目录1、三至七种最基本的响应代码2、状态码系列。1XX:通知2XX: 成功3XX 重定向4XX:客户端错误5XX 服务端错误1、三至七种最基本的响应代码200(“OK”)一切正常。实体主体中的文档(若存在的话)是某资源的表示。400(“Bad Request”)客户端方面的问题。实体主题中的文档(若存在的话)是一个错误消息。希望客户端能够理解此错误消息,并改正问题。500(“Internal Server Error”)服务期方面的问题。实体主体中的文档(如果存在的话)是一个错
2020-11-28 16:25:43
624
原创 一个请求在网络各层之间数据流转过程
当在浏览器中输入一个URL:www.baidu.com,h或者鼠标点击了一个超链接时,在网路中所发生的事件解析如下。案例:淘宝买东西1、输入地址当我们开始在浏览器中输入网址的时候,浏览器其实就已经在智能的匹配可能的url了,他会从历史记录、书签等地方,找到已经输入的字符串可能对应的url,然后给出智能提示,让你补全url地址。对于Google的chrome浏览器,它甚至会直接从缓存中把网页展示出来,就是说,你还没有按下enter,页面就出来了。应用层2、DNS解析IP地址请求一旦发起,浏览
2020-11-28 15:59:07
1820
原创 AQS(二)(共享模式)
文章目录1、基本使用2、源码分析1、基本使用场景一:主线程等待子线程任务完成public class CountDownLatchTest01 { private static final int TASK_COUNT = 8; private static final int THREAD_CORE_SIZE = 10; public static void main(String[] args) throws InterruptedException {
2020-11-26 22:24:04
236
原创 AQS(一)(核心思想,独占模式ReentrantLock简单实现)
文章目录1、什么是AQS?2、AQS实现的核心思想及实现?3、基于AQS实现的类4、ReentrantLock(独占模式)5、Condition(共享模式)1、什么是AQS?AQS的全称为(AbstractQueuedSynchronizer),这个类在java.util.concurrent.locks包下面。AQS是一个用来构建锁和同步器的框架,比如ReentrantLock、Semaphore、ReentrantReadWriteLock、SynchronousQueue、FutureTask等等
2020-11-26 09:56:34
450
原创 Redis底层数据结构的实现原理
文章目录1、String——SDS2、list链表压缩列表3、hash字典压缩列表4、set5、Zset1、String——SDS我们都知道redis是用C语言来写的,C语言中的字符串是用字符数组来实现的,但是redis为什么不用C语言中的String,而要自己定义一个动态字符串来存储呢?C语言中存储Stringchar str[]=“redis”; C语言在读取时是以“\0”为结束符作为标志的,但是redis在存储数据的时候万一存储的是“re\0dis”,在读取的时候就会导致数据的丢失。
2020-11-24 20:38:28
623
1
原创 JVM垃圾收集器
文章目录1、什么是Stop the World?2、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?3、说一下JVM有哪些垃圾回收器?1、什么是Stop the World?简称STW,即在执行垃圾收集算法时,Java应用程序的其他所有除了垃圾收集收集器线程之外的线程都被挂起,此时程序只能运行GC线程进行运行,其他线程则会全部暂停,等待GC线程执行完毕后才能再次运行。这些工作都是由虚拟机在后台自动发起和自动完成的,是在用户不可见的情况下把用户正常工的线程全
2020-10-09 16:04:04
226
1
原创 IO多路复用(系统中断、BIO、NIO、select、poll、epoll)
文章目录一、Linux操作系统中断1、什么是中断?2、软中断和硬中断二、同步异步、阻塞和非阻塞三、BIO(同步阻塞)四、NIO(同步非阻塞)1、select2、poll3、epoll一、Linux操作系统中断1、什么是中断?我们知道现代计算机CPU在执行任务是都是将CPU的时间划分为很细粒度的时间片,一个任务每次只能执行这么多的时间,时间到了就必须交出使用权,那么时间到了之后系统做了什么?这就要用到中断了,时间片到了会有定时器触发一个软中断,然后进入相应的的处理历程。当然鼠标、键盘也可以触发中断,这就
2020-10-08 14:16:59
939
原创 Redis中哨兵选举算法
文章目录1、哨兵的三个定时任务2、 主观下线(SDOWN)和客观下线(ODOWN)3、选举Leader哨兵,来进行故障转移(1)Raft简单介绍(2) Term(任期)(3) RPC(4) 选举流程4、主节点选取5、故障转移1、哨兵的三个定时任务1、每个哨兵每10秒会向主节点和从节点发送info命令获取最新的拓扑结构图,哨兵配置时只需要配置对主节点的监控即可,通过向主节点发送info,获取从节点的信息,并当有新的从节点加入时可以马上感知。2、每个哨兵节点每隔2秒会向redis数据节点的指定频道
2020-10-06 16:25:03
10922
原创 ThreadLocal(使用场景,源码解析,面试题)
文章目录一、什么是ThreadLocal?二、使用场景三、源码分析一、什么是ThreadLocal?多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行斜土的时候,为了保证线程安全,一般使用者在访问共享变量的时候需要进行额外的同步措施才能保证线程安全性。ThreadLocal就提供了一种不需要使用同步措施(加锁等)就能保证线程安全的一种机制。ThreadLocal提供了线程内部存储变量的能力,ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己
2020-10-05 16:13:23
522
原创 Mybatis和SpringMVC的相关问题
文章目录一、什么是SpringMVC?二、SpringMVC 的工作原理三、SpringMVC 常用的注解有哪些?四、@Controller和@RestController的区别?五、Mybaties中的#和{}的区别六、当实体类中的属性名和表中的字段名不一样,怎么办?七、模糊查询like语句该怎么写八、MyBatis实现一对一有几种方式?具体怎么操作的?九、MyBatis实现一对多有几种方式,怎么操作的?十、Mybatis是否支持延迟加载?如果支持,它的实现原理是什么十一、什么是MyBatis的接口绑定?
2020-10-02 15:38:52
276
原创 MySQL索引底层面试常问的问题
文章目录一、聚簇索引和非聚簇索在索引树的叶子结点上存储的数据有什么区别?二、覆盖索引三、索引失效的底层原理联合索引排序的原理一、聚簇索引和非聚簇索在索引树的叶子结点上存储的数据有什么区别?聚簇索引:并不是一种单独的索引类型,而是一种数据存储方式,术语“聚簇”表示数据行和和相邻的键值紧凑的存储在一起,因为无法同时把数据行放在两个不同的地方,所以一个表只能有一个聚簇索引。聚簇索引的优点:数据访问更快,聚簇索引将索引和数据保存在同一个索引树中,因此从聚簇索引中获取数据通常比在非聚簇索引中查找更快。Inno
2020-10-02 14:39:38
299
原创 Redis和MySQL中数据一致性问题
文章目录一、数据为什么会不一致?1、单库情况下发生不一致的情况2、主从同步、读写分离的情况下,读从库而产生数据不一致二、解决办法?1、单库情况下的解决方案2、读写分离下的解决方案一、数据为什么会不一致?1、单库情况下发生不一致的情况同一时刻发生了并发读写请求,例如A是写,B是读。1、A请求发送一个写操作到服务端,第一步先淘汰缓存,但是因为一些原因卡住了。2、B请求发送一个读操作,读取缓存,因为缓存淘汰,所以B会请求数据库,但是因为A还没有更新,读取的是脏数据。3、A请求执行完成,写操作完成。但
2020-10-01 17:47:02
501
原创 Redis下分布式锁的简单实现
文章目录一、微服务和分布式的概念二、微服务架构需要解决的四大问题?三、分布式锁一、微服务和分布式的概念1、什么是微服务?\color{green}{1、什么是微服务?}1、什么是微服务?微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成,系统的各个微服务可被独立部署,各个微服务之间是松耦合的,每个微服务仅关注于一件任务并很好的完成该任务。2、什么是分布式?\color{green}{2、什么是分布式?}2、什么是分布式?一个业务分拆多个子业务,部署到不同的服务器上。微服务是架构设
2020-10-01 16:31:21
227
原创 JVM类加载
文章目录一、类加载过程1、加载2、链接(1)验证(2)准备(3)解析3、初始化二、类加载时机1、创建类的实例,也就是new一个对象2、调用类的静态方法3、访问某个类或接口的静态变量,或者对该静态变量赋值。4、反射(Class.forName("com.xxx.xxx"))。5、JV启动时标明的启动类,即文件名和类名相同的那个类。三、类加载器1、根类加载器(启动类)2、扩展类加载器3、系统类加载器四、类加载机制一、类加载过程1、加载加载指的是将类的class文件读入到内存,并为之创建一个java.lan
2020-09-29 23:49:19
2476
原创 Redis的过期策略以及内存淘汰机制
一、Redis的过期策略以及内存淘汰机制?1、过期策略\color{green}{1、过期策略}1、过期策略reids采用的是定期删除+惰性删除策略为什么不用定时删除策略?定时删除:用一个定时器来负责监视key,过期则自动删除,虽然内存及时释放,但是十分消耗CPU资源。在大并发请求下,CPU要将时间应用在处理请求,而不是删除key,因此没有采用这一策略。定期删除+惰性删除时如何工作的?定期删除:redis默认每隔100ms检查,是否有过期key,有过期的key则删除,需要注意的是,re
2020-09-27 13:26:42
162
原创 Spring相关的问题
一、Spring中的IOC、DI、AOP?1、IOC\color{green}{1、IOC}1、IOCIOC:就是控制反转,通俗的说就是我们不用自己创建实例对象,这些都交给Spring的bean工厂帮我们创建管理,通过面向接口编程的方式来实现对业务组件的动态依赖。优点:降低了代码的耦合度,将对象之间的相互依赖关系交给IOC容器来管理,并由IOC容器完成对象的注入,这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。2、DI\color{green}{2、DI}2、DIDI:就是
2020-09-24 11:00:33
398
原创 RabbitMQ如何保证消息不丢失
RabbitMQ一般情况下消息不会发生丢失的问题,但是不能排除意外,为了保证我们自己的系统高可用,我们必须做出更好完善的措施,保证系统的稳定性。1、消息持久化RabbitMQ的消息默认放在内存上面,如果不特别声明设置,消息不会持久化到磁盘上,如果节点重启或者宕机,就会导致消息丢失。(1)Exchange设置持久化:channel.exchangeDeclare(exchangeName, “direct/topic/header/fanout”, true);即在声明的时候讲durable字段设置.
2020-09-20 13:30:49
3159
原创 MySQL高级(五)——(各种读问题,数据库中的各种锁,MVCC,主从复制)
1、主从复制原理一主一从\color{green}{一主一从}一主一从(1)主服务器上面的任何修改都会通过自己的IO线程保存在二进制日志文件中(binary log)。(2)从机上面也启动一个IO线程,通过配置好的用户名和密码,连接到主服务器上面请求读取二进制日志,然后把读取到的二进制日志写到本地的一个中继日志里面(Relay log)。(3)从服务器上面同时开启一个SQL thred定时检查Realy log(二进制),如果发现有更新立即把更新的内容在本机的数据库在上面执行一遍。一主多从\co
2020-09-20 13:30:31
308
原创 计算机网络常见问题
文章目录1、说说三次握手和四次挥手?1、说说三次握手和四次挥手?TCP报文格式简介:(1)序号(sequence number):Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。(2)确认号(acknowledgement):Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。(3)标志位:URG:紧急指针ACK:确认序号有效PSH:接受方应该尽快将这个报文交给应用层RST:重置连接SYN:发起一个连接F
2020-09-12 18:07:05
776
原创 RabbitMQ的基本使用
1、概述什么是MQ?MQ(Message Queue)消息队列,是基础数据结构中“先进先出”的一种数据结构。一般用来解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。MQj就是把要传输的数据(消息)放在队列中,用队列机制来实现消息传递——生产者产生消息并把消息放入队列,然后由消费者去处理。消费者可以到指定队列拉取消息,或者订阅相应的队列,由MQ服务端给其推送消息。什么是AMQP?AMQP,即Advanced Message Queuing Protoco
2020-09-01 14:00:16
222
原创 MySQL高级(四)——(in和exists,order by优化,慢查询日志,show profile,数据库锁)
1、MySQL中in和existsin和exists常用与where表达式中,其作用是查询某个范围内的数据。用法1select *from A where in id(1,2);# 就等同于 select *from A where id=1 and id=2;用法2select *from A where id in(select id from B);# 等价于- select id from B;先执行in中的查询,并且缓存结果集- select *from A where
2020-08-29 22:25:29
444
原创 MySQL高级(三)——索引优化,索引失效
索引分析1、单表索引优化CREATE TABLE IF NOT EXISTS `article`(`id` INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,`author_id` INT (10) UNSIGNED NOT NULL,`category_id` INT(10) UNSIGNED NOT NULL , `views` INT(10) UNSIGNED NOT NULL , `comments` INT(10) UNSIGN
2020-08-27 12:36:50
306
原创 MySQL高级(二)——索引(什么是索引,分类,结构,什么时候适合建立,Explain使用)
1、索引概述(1)索引是什么?MySQL 官方对索引的定义为:索引(Index)是帮助 MySQL 高效获取数据的数据结构。可以得到索引的本质: 索引是数据结构。可以简单理解为排好序的快速查找数据结构。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。下图就是一种可能的索引方式示例:左边是数据表,一共有两列七条记录,最左边的是数据记录的物理地址。 右边维护一个二叉查找树,每个
2020-08-25 15:00:14
632
原创 MySQL高级(一)(逻辑架构,SQL执行顺序,常见的JOIN查询)
1、MySQL Linux的安装下载链接https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar2、MySQL配置文件
2020-08-23 17:37:56
146
原创 Redis(四)(主从复制-搭建环境测试,哨兵模式-测试,缓存穿透,缓存击穿,缓存雪崩)
1、redis.conf配置文件解析网络配置bind 127.0.0.1 # 绑定ipprotected-mode no #保护模式port 6379 #端口号通用配置daemonize yes # 以守护进程的方式运行,默认是no,我们使用时需要将修改为yespidfile /var/run/redis_6379.pid #进程pid文件####日志信息# Specify the server verbosity level.# This can be one of:# debu
2020-07-26 14:02:53
296
原创 Redis(三)(事务,Jedis,SpringBoot集成,redis.conf配置文件,持久化,订阅发布)
1、事务Redis事务本质:一组命令的集合,一个事务中的所有命令都会被序列化,并且会按顺序执行。分为三个阶段:开启事务(multi)命令入队执行事务(exec)(1)正常执行事务127.0.0.1:6379> MULTI #开启事务OK127.0.0.1:6379> set k1 v1 #命令入队QUEUED127.0.0.1:6379> set k2 v2 QUEUED127.0.0.1:6379> get k2QUEUED127.0.0.1:6
2020-07-25 14:20:14
423
原创 Redis(二)(String、List、Set、Hash、Zset、Geospatial、Hyperloglog、Bitmaps数据类型)
五大基本数据类型:String、List、Set、Hash、Zset1、String(字符串)(1)字符串基本操作127.0.0.1:6379> set key helllo #设置值OK127.0.0.1:6379> get key #获取值"helllo"127.0.0.1:6379> APPEND key ,world #追加字符串,如果key不存在,就相当于set key(integer) 12127.0.0.1:6379> get key "helllo
2020-07-25 09:58:51
160
原创 Redis(一)(Nosql,Linux下安装并测试,基本命令)
1、Nosql(1)数据库的技术演进单机MySQL的年代,90年代,那个回收网站的访问量不会太大,单个数据库完全足够。Memcached(缓存)+MySQL+垂直拆分(读写分离)分库分表+水平拆分+MySQL集群如今,随着科技的发展,传统的MySQL等关系型数据库就不够用了,比如一些大的文件、图片、博客,如果能有一种数据库来专门处理这种数据就很好。(2)什么是Nosql?Nosql=Not Only SQL(不仅仅是SQL)关系型数据:表格,行,列。而Nosql就是非关系型数据库,不需要
2020-07-24 17:25:11
127
原创 Swagger(基本信息配置,扫描接口,开关,分组,注释)
前言:Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。作用:接口的文档在线自动生成。功能测试。1、SpringBoot集成Swagger导入依赖<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9
2020-07-23 22:58:48
1729
原创 Shiro(登录拦截,登录认证,请求授权,和Thymeleaf整合)
前言:Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。1、快速入门导入依赖...
2020-07-23 15:52:46
603
原创 SpringSecurity(授权认证,权限控制,注销,记住我)
前言:对于一个程序而言,安全是最重要的,并且在一个程序设计之初,就应该将其考虑到,虽然使用过滤器和拦截器也可以实现需要的功能,但是官方提供了方便开发的安全框架,知名的安全框架有SpringSecurity和Shiro。一、SpringSecurity简介:Spring Security 是针对Spring项目的安全框架,也是Spring Boot底层安全模块默认的技术选型,他可以实现强大的Web安全控制,对于安全控制,我们仅需要引入 spring-boot-starter-security 模块,进行少
2020-07-22 17:45:16
479
原创 SpringBoot(二)(Web开发,页面国际化,拦截器,整合数据库)
1、Web开发(1)静态资源导入webjars:以maven的方式引入静态资源,访问路径http://localhost:8080/webjars/static、public、resources,优先级关系:resources>static(默认)>public,访问路径http://localhost:8080/(2)模板引擎ThymeleofThymeleaf是一个适用于Web和独立环境的现代服务器端Java模板引擎,能够处理HTML,XML,JavaScript,CSS甚至纯
2020-07-22 12:14:55
277
原创 SpringBoot(一)(运行原理、属性赋值、校验、多环境配置)
1、什么是SpringBoot?随着 Spring 不断的发展,涉及的领域越来越多,项目整合开发需要配合各种各样的文件,慢慢变得不那么易用简单,违背了最初的理念,甚至人称配置地狱。Spring Boot 正是在这样的一个背景下被抽象出来的开发框架,目的为了让大家更容易的使用 Spring 、更容易的集成各种常用的中间件、开源软件。简单来说就是SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,spring boot整合了所有的框架 。2
2020-07-19 19:41:25
381
原创 堆排序时间复杂度的计算过程
一、代码实现关于具体实现过程请点 https://blog.csdn.net/weixin_44324174/article/details/104183349本片文章只讲堆排序时间复杂度的计算过程。package com.westmo1.demo2;import java.util.Arrays;import java.util.Scanner;public class MyDemo3 { public static void main(String[] args) {
2020-07-14 13:32:50
2214
1
原创 Linux(Vim编辑器、账号管理、用户组管理、磁盘管理、进程管理、发布项目)
1、Vim编辑器(1)什么是vim?Vim是从Vi发展出来的一个文本编辑器,代码补完、编译及错误跳转等功能,在Linux中,必须学会使用Vim(查看内容、编辑内容、保存内容)。(2)使用方法vim 文件名(如果文件名不存在直接创建并进入命令模式,存在就是修改)按i进入编辑模式编辑完成之后,按ESC退出编辑模式输入**:进入底线模式,输入wq**保存并退出(3)底线模式相关的命令:set nu 显示行号,设定之后,会在每一行的前缀显示该行的行号:set nonu 与 set nu 相
2020-07-08 16:41:56
223
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人