- 博客(16)
- 收藏
- 关注
原创 几率大的Redis面试题(含答案)
本文的面试题如下:Redis 持久化机制缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题热点数据和冷数据是什么Memcache与Redis的区别都有哪些?单线程的redis为什么这么快redis的数据类型,以及每种数据类型的使用场景,Redis 内部结构redis的过期策略以及内存淘汰机制【~】Redis 为什么是单线程的,优点如何解决redis的并发竞争key问题Redis 集群方案应该怎么做?都有哪些方案?有没有尝试进行多机redis 的部署?如何保证数据一致的?对于大量的
2020-10-06 10:54:42 294
原创 单点登录原理
一、单系统登录机制1、http无状态协议web应用采用browser/server架构,http作为通信协议。http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联,这个过程用下图说明,三次请求/响应对之间没有任何联系但这也同时意味着,任何用户都能通过浏览器访问服务器资源,如果想保护服务器的某些资源,必须限制浏览器请求;要限制浏览器请求,必须鉴别浏览器请求,响应合法请求,忽略非法请求;要鉴别浏览器请求,必须清楚浏览器请求状态。既然http协议无状态,那就让服务器和浏
2020-10-16 14:15:24 254
原创 redis的持久化和缓存机制
说道redis,我们可能都会知道了他是一个类似缓存的一个内存数据库,我们从未感知到它的存在是因为他很快,为什么非常快,是因为他的发展到应用很快,还有他的反应速度也是非常快的。上一篇文章我们讲到了缓存以及非关系型数据库的由来,这篇我们来讲讲redis这种非关系型数据库用在什么地方,以及他的特色——持久化是怎么实现的。一、redis的适用环境首先作为一个nosql的key—value组成的数据库,它们能存储的数据结构必须是简单的,因为有关系的数据即使存储进去之后查询也是很困难的,并且对于海量的数据存储还是
2020-10-13 09:53:33 202
原创 将项目发布到多台服务器并解决高并发(Nginx)
1、准备Nginx2、准备多台服务器组成服务器集群(3台为例,最好为奇数)3、高并发的后台搭建 架构描述:服务端搭建好多集群,有nginx集群,服务器集群,数据库集群。是高并发的基本要求。1.准备3台tomcat端口号为:8091,8092,80932.修改端口号1.修改三台服务器配置文件改变端口号4.三台服务器的ip127.0.0.1:8091127.0.0.1:8092127.0.0.1:80933.配置Nginx实现轮询方式Nginx.conf的配置1.#配置多台to
2020-10-12 14:34:36 2222
原创 Nginx动静分离
一、原理Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx 处理静态页面,Tomcat、 Resin 出来动态页面。动静分离从目前实现角度来讲大致分为两种,一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开。这样也是本次课程要讲解的,具体怎么来实现呢,通过 location 指定不
2020-10-12 13:54:10 138
原创 Java编程中 什么是索引,有什么作用?
java 编程中索引bai是对数据库表中一列或多列的du值进行排序的一种结构(B树-平衡多叉树)zhi。创建索引可以大大提高系统dao的性能。第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能
2020-10-11 19:53:21 2592
原创 重写和重载的区别
重写(overwrite) 和 重载(overload)重载:发生在同一个类中相同的方法名参数列表不同不看返回值,如果出现了只有返回值不同的“重载”,是错的。重写:发生在子类与父类中相同的方法名相同的参数列表返回值相同 或者 子类方法的返回值是父类方法返回值类型的子类访问修饰符相同 或者 子类方法的修饰符范围 大于 父类抛出的异常相同 或者 子类方法抛出的异常 小于父类...
2020-10-09 11:19:42 87
原创 synchronized和lock的区别(底层实现)
从使用的角度看 synchronized 和 lock 的区别起初 java 中只有 synchronized 这一种对程序加锁的方式,在 java SE5 之后加入了 Lock 接口(以及相关实现类)用来实现锁的功能,它提供了与 synchronized 关键字类似的同步功能,只是在使用时需要显式的获取和释放锁。Object lock = new Object();synchronized(lock) { //加锁//… 逻辑 …} //解锁Lock lock = new ReentrantL
2020-10-08 09:09:46 947
原创 Java中的同步代码块、同步方法、同步锁
多线程容易出现问题的原因当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,另一个线程参与进来执行。导致共享数据的错误。即多个线程执行的不确定性引起执行结果的不稳定。例:多个线程对账本的共享,会造成操作的不完整性,会破坏数据。火车站售票,多个窗口同时售票。解决办法同步代码块synchronized(obj){//需要被同步的代码块}其中,obj 称为同步监视器,也就是锁,原理是:当线程开始执行同步代码块前,必须先获得对同步代码块的锁定。并且任何时刻只能
2020-10-08 08:44:52 507
原创 Java线程池详解
1、线程池的优势(1)、降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗;(2)、提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行;(3)方便线程并发数的管控。因为线程若是无限制的创建,可能会导致内存占用过多而产生OOM,并且会造成cpu过度切换(cpu切换线程是有时间成本的(需要保持当前执行线程的现场,并恢复要执行线程的现场))。(4)提供更强大的功能,延时定时线程池。2、线程池的主要参数public ThreadPoolExecut
2020-10-07 08:25:58 72
原创 RabbitMQ介绍
RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。消息中间件最主要的作用是解耦,中间件最标准的用法是生产者生产消息传送到队列,消费者从队列中拿取消息并处理,生产者不用关心是谁来消费,消费者不用关心谁在生产消息,从而达到解耦的目的。在分布式的系统中,消息队列也会被用在很多其它的方面,比如:分布式事务的支持,RPC 的调用等等。一、RabbitMQ 介绍RabbitMQ 是实现 AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于
2020-10-05 08:41:10 334 1
原创 主从复制
前面介绍Redis,我们都在一台服务器上进行操作的,也就是说读和写以及备份操作都是在一台Redis服务器上进行的,那么随着项目访问量的增加,对Redis服务器的操作也越加频繁,虽然Redis读写速度都很快,但是一定程度上也会造成一定的延时,那么为了解决访问量大的问题,通常会采取的一种方式是主从架构Master/Slave,Master 以写为主,Slave 以读为主,Master 主节点更新后根据配置,自动同步到从机Slave 节点。接下来我们就来介绍如何进行主从架构的搭建。这里我是在一台机器上模拟多个Re
2020-10-02 15:59:19 119
原创 Thymeleaf 介绍
一、Thymeleaf 介绍Thymeleaf是一款用于渲染XML/XHTML/HTML5内容的模板引擎。类似JSP,Velocity,FreeMaker等,它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用的模板引擎。与其它模板引擎相比,Thymeleaf最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个Web应用。 Thymeleaf是与众不同的,因为它使用了自然的模板技术。这意味着Thymeleaf的模板语法并不会破坏文档的结构,模板依旧是有效的XML文档
2020-10-02 15:55:55 510
原创 JAVA抽象类和抽象方法(abstract)
一、抽象(abstract)的使用当父类的某些方法不确定时,可以用abstract关键字来修饰该方法[抽象方法],用abstract来修饰该类[抽象类]。我们都知道,父类是将子类所共同拥有的属性和方法进行抽取,这些属性和方法中,有的是已经明确实现了的,有的还无法确定,那么我们就可以将其定义成抽象,在后日子类进行重用,进行具体化。这样,抽象类也就诞生了。例如,定义了“动物”父类,其中“动物名称”和“动物年龄”属性已经明确了,但是“动物叫”的方法没有明确,此时就可以将“动物叫”定义为抽象方法。所以,抽象
2020-09-29 15:53:09 134
原创 MVC介绍
MVC介绍1.什么是MVCMVC(Model View Controller)是一种软件设计的框架模式,它采用模型(Model)-视图(View)-控制器(controller)的方法把业务逻辑、数据与界面显示分离。把众多的业务逻辑聚集到一个部件里面,当然这种比较官方的解释是不能让我们足够清晰的理解什么是MVC的。用通俗的话来讲,MVC的理念就是把数据处理、数据展示(界面)和程序/用户的交互三者分离开的一种编程模式。2.为什么要使用MVC程序通过将M(Model)和V(View)的代码分离,实现了
2020-09-28 14:27:13 8342 3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人