自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 数据库三大范式

前言范式是具有最小冗余的表结构。一、第一范式存在非主属性对码的部分依赖关系 R(A,B,C) AB是主键 C是非主属性 B–>C B决定C C部分依赖于B概念:如果关系R 中所有属性的值域都是单纯域(列不可再分),那么关系模式R是第一范式特点:1)有主关键字2)主键不能为空,3)主键不能重复,4)字段不可以再分举例说明:主键重复,cantact可再分应改为:二、第二范式存在非主属性对码的传递性依赖 R(A,B,C) A是码 A -->B ,B–>C定义:如

2021-03-30 12:11:23 470 2

原创 Redis分布式锁和Redlock实现方式

前言随着互联网的兴起,现代软件发生了翻天覆地的变化,以前单机的程序,已经支撑不了现代的业务。无论是在抗压,还是在高可用等方面都需要多台计算机协同工作来解决问题。现代的互联网系统都是分布式部署的,分布式部署确实能带来性能和效率上的提升,但为此,我们就需要多解决一个分布式环境下,数据一致性的问题。当某个资源在多系统之间共享的时候,为了保证大家访问这个资源数据是一致的,那么就必须要求在同一时刻只能被一个客户端处理,不能并发的执行,否者就会出现同一时刻有人写有人读,大家访问到的数据就不一致了(比如:当宝贝库存接

2021-03-29 18:22:05 577

原创 Redis的主从复制和 哨兵模式

前言持久化解决了单机redis的数据保存问题,但是redis还是存在以下两个问题:(1)假如某天这台redis服务器挂了,redis服务将彻底丧失(2)redis的读和写都集中到一台机上,如果请求量比较大时,将可能被击溃解决为了解决上述两个问题,redis提供了主从架构,在主从架构中,主服务器负责写服务,多台从服务器负责读服务,缓解了单个redis服务器的压力;主服务器将所有数据源源不断的同步到从服务器上,一旦主服务器挂了,还有从服务器可以提供服务,redis服务将不会间断。一、主从复制1.概

2021-03-29 17:10:07 158

原创 IO多路复用(select,poll,epoll)详解

前言学习多路复用之前,搞清楚同步,异步,阻塞 非阻塞。点击见详情清楚一些概念:(1) fd全称是file descriptor,是进程独有的文件描述符表的索引(2)recv:int recv(int sockfd,void* buf,int len,unsigned int flags);第一个参数是要读取的套接口文件描述符。第二个参数是保存读入信息的地址。第三个参数是缓冲区的最大长度。第四个参数设置为0。系统调用recv()返回实际读取到缓冲区的字节数,如果出错则返回-1。这样使用上面

2021-03-29 11:22:31 543

原创 Redis的线程模型

前言Redis 快的原因其中有一个是因为使用了合适的线程模型:多路复用单线程一、IO多路复用多路复用是指:I/O :网络 I/O多路:多个 TCP 连接复用:共用一个线程或进程生产环境中的使用,通常是多个客户端连接 Redis,然后各自发送命令至 Redis 服务器,最后服务端处理这些请求返回结果;如图:应对大量的请求,Redis 中使用 I/O 多路复用程序同时监听多个套接字,并将这些事件推送到一个队列里,然后逐个被执行。最终将结果返回给客户端。二、单线程模型1.Redis 中使

2021-03-28 23:40:29 106

原创 综合场景搞清楚同步 异步 阻塞 非阻塞

一、同步和异步同步和异步是指访问数据的一种机制,关注点在于消息通信机制。1.同步(1)描述:发送一个请求,等待返回,再发送下一个请求,同步可以避免出现死锁,脏读的发生。(2)概念:同步就是一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才能算完成,这是一种可靠的任务序列。要么成功都成功,失败都失败,两个任务的状态可以保持一致。简单来说就是 想要完成B任务,必须先完成 A任务。(3)消息通知:当一个同步调用发出后,调用者要一直等待返回消息(结果)通知后,才能进行后续

2021-03-28 23:08:06 220

原创 Redis高效的数据结构及特殊性

前言一、简单动态字符串1.字符串长度处理字符串在 C 语言中的存储方式,想要获取 字符串的长度,需要从头开始遍历,直到遇到 ‘\0’ 为止redis中用一个 len 字段记录当前字符串的长度。想要获取长度只需要获取 len 字段即可。你看,差距不言自明。前者遍历的时间复杂度为 O(n),Redis 中 O(1) 就能拿到,速度明显提升。如图所示:2.内存重新分配空间预分配对 SDS 修改及空间扩充时,除了分配所必须的空间外,还会额外分配未使用的空间。具体分配规则是这样的:SDS 修改后

2021-03-28 13:12:22 221 1

原创 Java泛型

一、泛型基础说明泛型是JDK1.5的一种新特性,它的本质是参数化类型的应用,也就是说操作的数据类型被指定为一个参数,在用到的时候再指定具体的类型。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类,泛型接口和泛型方法。Java语言中的泛型,它只在程序源码中存在,在编译后的字节码文件中,就已经被替换为原来的原始类型(Raw Type,也称为裸类型)了,并且在相应的地方插入了强制转型代码,因此对于运行期的Java语言来说,ArrayList与ArrayList就是同一个类。所以说泛型技术实际上是Ja

2021-03-27 22:26:00 87

原创 Redis的过期键删除策略和内存淘汰机制

一、过期键的判定通过过期字典,程序可以用以下步骤检查一个给定键的过期时间:(1)检查给定键是否存在于过期字典;如果存在就取出来过期时间;(2)检查当前的UNIX时间戳是否大于键的过期时间,如果是的话,那么键过期,否则键未过期。伪代码过程:二、过期键删除策略1.定时删除(主动删除)需要让服务器创建大量定时器,从而达到定时删除,不现实。一般不用概念:在设计过期时间的时候,创建一个定时器,让定时器在键过期时间来临的时候,执行删除操作。优点:对内存友好,保证内存被尽快释放。缺点:1)若过期k

2021-03-27 15:00:46 301 4

原创 Redis与数据库缓存一致性问题

一、Redis 数据一致性问题产生的原因对 Redis和数据库的操作有 2 种方案:1、先操作(删除) Redis,再操作数据库2、先操作数据库,再操作(删除) Redis上述二种方案,都希望数据操作要么都成功,要么都失败,也就是最好是一个原子操作,我们不希望看到一个失败,一个成功的结果,因为这样就产生了数据不一致的问题。举例说明:假设 Redis 里缓存了一个热点商品数据,有个 key 为 1 的商品名称为“衣服”,数据库里这个 1号的商品名称也是衣服;此时商家觉得商品名称叫衣服有点宽泛,需

2021-03-26 21:40:49 605

原创 jwt实现单点登录,基础讲解加实战!!!

前言1.了解token模式:token (令牌)是一串字符串,通常因为作为鉴权凭据,最常用的使用场景是 API 鉴权。token 通过一次登录验证,得到一个鉴权字符串,然后以后带着这个鉴权字符串进行后续操作,这样就可以解决每次请求都要带账号密码的问题,而且也不需要反复使用账号和密码。一、JWT是什么?1.概念JWT 全称 JSON Web Tokens ,是一种规范化的 token2.组成一个 JWT token 是一个字符串,它由三部分组成,头部、载荷与签名,中间用 . 分隔(1)头部

2021-03-22 11:22:10 1221 6

原创 springBoot自动配置原理

一、自动装配是什么?自动装配就是spring容器启动后,一些自动配置类就自动装配的IOC容器中,不需要我们手动去注入。二、自动配置原理SPI:是server provider interface 的简写,字面意思是服务发现接口,我理解就是第三方拓展API,他是java提出的,即开箱即用的思想。在spring的生态中已经运用得非常多,比如springMVC中官方推荐的去web.xml的方式,用一个onStart的方法就将dispatcherServlet到IOC的容器中,这也是利用了tomcat的SPI

2021-03-20 11:33:41 10261 11

原创 springmvc的运行流程

流程图:整体流程:(1)客户端(浏览器)发送请求,直接请求到 DispatcherServlet(前端控制器)。(2)DispatcherServlet 根据请求信息调用 HandlerMapping,解析请求对应的 Handler(Controller 控制器)。(3)解析到对应的 Handler(即 Controller 控制器)后,返回给DispatcherServlet(前端控制器),开始由 HandlerAdapter(控制器适配器)处理。(4)HandlerAdapter 会根据 H

2021-03-19 23:47:11 90

原创 反向代理服务器nginx负载均衡的策略及原理

一、nginx概述1、概念Nginx是一款轻量级的网页服务器、反向代理器以及电子邮件代理服务器。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2、核心特点(1)跨平台:Nginx 可以在大多数 Unix like OS编译运行,而且也有Windows的移植版本;(2)配置异常简单:非常容易上手。配置风格跟程序开发一样,神一般的配置;(3)非阻塞、高并发连接:数据复制时,磁盘I/O的第一阶段是非阻塞的。官方测试能够支撑5万并发连接,在实际生

2021-03-19 12:20:09 452

原创 死锁精讲

一、死锁的定义及原因1.定义多个进程因竞争资源形成的一种僵局(互相等待),若无外力作用,这些进程将无法向前推进。2.原因不可剥夺资源的竞争通常系统中拥有的不可剥夺资源,其数量不足以满足多个进程运行的需要,使得进程在 运行过程中,会因争夺资源而陷入僵局,如磁带机、打印机等。只有对不可剥夺资源的竞争 才可能产生死锁,对可剥夺资源的竞争是不会引起死锁的。进程推进顺序非法进程在运行过程中,请求和释放资源的顺序不当,也同样会导致死锁。例如,并发进程 P1、P2分别保持了资源R1、R2,而进程P1申请资

2021-03-18 20:16:41 99 3

原创 程序 进程 线程的区别、联系及通信方式

一、程序是什么?程序(Program)告诉计算机应如何完成一个计算任务,这里的计算可以是数学运算,比如解方程,也可以是符号运算,比如查找和替换文档中的某个单词。从根本上说,计算机是由数字电路组成的运算机器,只能对数字做运算,程序之所以能做符号运算,是因为符号在计算机内部也是用数字表示的。此外,程序还可以处理声音和图像,声音和图像在计算机内部必然也是用数字表示的,这些数字经过专门的硬件设备转换成人可以听到、看到的声音和图像。(做基本了解)二、进程1.概念进程是一个具有一定独立功能的程序在一个数据集上的

2021-03-18 12:30:11 248

原创 UDP \TCP详详详详解,你想要的全都有(呕心沥血)

前言因特网为应用层提供了两种截然不同的可用运输层协议,一个是UDP(用户数据报协议),一个是TCP(传输控制协议),这两种协议无论是在开发过程中,还是面试问答中,都相当重要!!!先了解两个定义:多路分解:将运输层报文段中的数据交付到正确的套接字。多路复用:在源主机从不同的套接字中收集数据块,并位每个数据块加上首部信息(将在以后进行分解)从而生成报文段,并将报文段传递到网络层。一、UDP1.定义UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。并且它是将应用程序发来的数据在收到的那一

2021-03-17 17:15:54 2807 1

原创 DNS详解

前言DNS:因特网的目录服务因特网的主机和人类一样都有标识信息,主机的标识信息就是主机名,比如:www.facebook.nom。这个名字比较容易记。但因为主机名可能由不定长的字母组成,路由器难以处理,主机也可以用IP地址标识。所以识别主机由两种方式;主机名和IP地址。人们喜欢记忆主机名,路由器喜欢ip地址,便于处理。为了这种不同的偏好,我们需要一种能进行主机名和IP地址转换的目录服务,这就是**域名服务(DNS)**的主要任务。一、DNS提供的服务1、主要服务DNS:(1)一个由分层的DN

2021-03-15 15:59:41 991

原创 JDK1.8的新特性详解

前言现在开发用的最多的就是jdk1.8;因为它具备很多优点:1、速度更快由于底层结构和JVM的改变,使得JDK1.8的速度提高。2、代码更少(增加了新的语法 Lambda 表达式)增加新特性Lambda表达式的内部类改造,使得代码在书写上变得更加简洁3、强大的 Stream API增加了核心功能,使得代码调用方式变得更加简洁4、便于并行5、最大化减少空指针异常 Optional下面说一下它的新特性:一、Lambda 表达式Lambda表达式是jdk1.8里面的一个重要的更新,这意味着

2021-03-13 23:27:27 3075 2

原创 面向对象的理解及相关概念(封装,继承,多态)

前言面向对象程序设计(OOP)是当今主流的程序设计范性,它取代了结构化或过程式编程技术。一、面向对象是什么?1、定义:面向对象就是:把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象。对同类对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。程序流程由用户在使用中决定。对象即为人对各种具体物体抽象后的一个概念,人们每天都要接触各种各样的对象,如手机就是一个对象。java中有一个概念就是万物皆可对

2021-03-13 10:43:34 3712 2

原创 深度优先,广度优先,拓扑排序(实战题解)

前言深度遍历和广度遍历在算法占比很大,主要是解决图的问题(树也是图的一种)一、深度优先遍历1、深度遍历(DFS)解决什么问题DFS解决的是连通性的问题,即给定两⼀个起始点(或某种起始状态)和⼀个终点(或某种最终状态),判断是否有⼀条路径能从起点连接到终点。很多情况下,连通的路径有很多条,只需要找出⼀条即可,DFS 只关⼼路径存在与否,不在乎其⻓短。所以dfs一般都是找路径的2、算法思想:图的深度优先搜索(Depth First Search),和树的先序遍历比较类似。它的思想:假设初始状态是

2021-03-12 10:20:44 3569

原创 String StringBuilder StringBuffer详解

一、String1、基础知识:String不是8种基本类型之一,String是一个对象,因为对象默认值为null,则String默认值也为空,同时也是一个特殊的对象,具备一些特性;(String s=new String()创建的是空串而不是null)。String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的(被finall修饰),所以可以共享。2

2021-03-09 17:13:56 629

原创 https及核心SSL

前言http协议是明文传输的,我们在网络中通常会填写账号密码,个人信息,账户金额,交易信息,敏感信息等等都属于需要保护的信息,如果我们在http协议中进行信息传输,那么很显然是不安全的,网络中各个设备都可以看到这些信息,如果有不法分子把这些信息提取出来,这样就会造成信息泄露等。所以HTTP具有一些缺点:●通信使用明文(不加密),内容可能会被窃听●不验证通信方的身份,因此有可能遭遇伪装●无法证明报文的完整性,所以有可能已遭篡改因为HTTP存在这些缺点,所以推出更为安全的HTTPS一、https是什

2021-03-08 02:46:48 583 2

原创 java中栈和队列

一、栈(stack)1、栈的创建和使用栈是Vector的一个子类,标准:后进先出创建:Stack st = new Stack();//Integer 类型的栈方法:1 boolean empty()测试堆栈是否为空。2 Object peek( )查看堆栈顶部的对象,但不从堆栈中移除它。3 Object pop( )移除堆栈顶部的对象,并作为此函数的值返回该对象。4 Object push(Object element)把项压入堆栈顶部。5 int search(Object

2021-03-06 21:32:27 633 2

原创 回溯算法 思路清晰,通俗易懂!!!!!!!

一、回溯算法是什么?回溯算法是⼀种试探算法,与暴⼒搜索最⼤的区别:在回溯算法中,是⼀步步向前试探,对每⼀步探测的情况评估,再决定是否继续,可避免⾛弯路回溯算法的精华:出现⾮法的情况时,可退到之前的情景,可返回⼀步或多步再去尝试别的路径和办法想要采⽤回溯算法,就必须保证:每次都有多种尝试的可能二、解题思路1.决策树:下面讲解题会细说解决一个回溯问题,实际上就是一个决策树的遍历过程。你只需要思考 3 个问题:1、路径:也就是已经做出的选择。2、选择列表:也就是你当前可以做的选择。3、结束

2021-03-06 17:10:42 1199

原创 不得不看的cookie和session

尽最大努力的网络干货前言HTTP服务器是无状态的,这简化了服务器的设计,并且允许工程师们去开发同时处理数以万计的tcp连接的高性能web服务器。然而一个web站点希望能够识别用户,可能是服务器希望限制用户的访问,或者是希望把内容和用户身份联系起来。为此HTTP使用了会话跟踪;会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。一、co

2021-03-06 15:01:58 299 8

原创 HTTP超超超详解

前言web的应用层的协议是:超文本传输协议(HTTP),它是web的核心。http有服务端程序和客服端程序实现,它们在不同的端系统中,通过交换http报文进行会话。http定义了它们进行报文格式的方式,和报文结构。相关术语:web页面(文档)是由对象组成。一个对象只是一个文件(诸如HTML文件,JPEG图片)且它们通过一个url寻址。多数web页面含有一个HTML基本文件和几个对象。HTML基本文件通过url地址引用页面其他对象。url地址由两部分组成:存放对象的主机名和对象的路径名;一般格式<协

2021-03-06 02:05:22 651

原创 网关gateway解决跨域问题

Gateway前言API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题:(1)客户端会多次请求不同的微服务,增加了客户端的复杂性。(2)存在跨域请求,在一定场景下处理相对复杂。(3)认证复杂,每个服务都需要独立认证。(4)难以重构,随着项目的迭代,可能需要重新划分微服务。例如,可能将多个服务合并成一个或者将一个服务拆分成多个。如果客户端直接与微服务通信,那么重构将

2021-03-05 21:34:50 8418

原创 数据表的创建(一对多,多对多)

数据库创建提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、实例一对一关系实例:一对多关系实例:多对多关系实例:二、关系处理:1.一对一:2.一对多:3.多对多:前言项目开发过程中,数据库表会出现很多映射关系,不只有一对多,还有一对多,多对多。则数据库实体间有三种对应关系:一对一,一对多,多对多。一、实例一对一关系实例:一个学生对应

2021-03-04 23:46:59 4106 3

原创 springcloud服务调用以及整合Hystrix

Feign(服务调用):前提条件:把互相调用的服务在Nacos进行注册;1)引入相关依赖<!--服务调用--><dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId></dependency>2)在调用端的启动类添加注解:@En

2021-03-03 19:56:24 146 2

原创 SpringSecurity的认识和整合流程

springsecurity认证和执行思路:整合过程:总结:在项目中实现权限登录和认证,首先创建权限整理模块,进行权限分配,将菜单分配给角色,将角色分配给用户。然后配置springsecurity,通过实现里面的接口,配置好springsecurity。将依赖注入到权限管理模块,并在模块中实现UserDetailService。执行流程就是:进入认证(登录)过滤器获取用户名和密码;根据获得的 查询用户信息和用户具有的权限(依靠权限管理模块的实现UserDetailsService);并通过sec

2021-03-03 13:26:59 264

原创 递归

递归一、递归是什么? 在数学与计算机科学中,递归(Recursion)是指在函数的定义中使用函数自身的方法。实际上,递归,顾名思义,其包含了两个意思:递 和 归,这正是递归思想的精华所在;基本性质就是把⼤规模的问题不断地变⼩,再进⾏推导的过程;可以使⼀个看似复杂的问题变得简洁和易于理解。 举例说明:你打开面前这扇门,看到屋里面还有一扇门。你走过去,发现手中的钥匙还可以打开它,你推开门,发现里面还有一扇门,你继续打开它。若干次之后,你打开面前的门后,发现只有一间屋子,没有门了。然后,你开始原路返回,每走

2021-03-03 00:09:47 455

空空如也

空空如也

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

TA关注的人

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