• 缓存淘汰算法--LRU算法
  • 一个用hash表作为底层结构的数据库,当然少不了缓存淘汰算法。LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。1、新数据插入到链表头部;2、每当缓存命中(即缓存数据被访问),则将数据移到链表头部;3、当链表满的时候,将链表尾部的数据丢弃。过程如下:1、最开始时,内存空间是空的,因此依次进入A、B、C是没有问题的2、当加入D时,就出现了问题,内存空间不够了,因此根据LRU算法,...
  •  2020-06-15  |    程成  |    1763  |    1  |    其他  |   LRU  算法  缓存淘汰  
  • Redis 的操作为什么是的原子性的详解
  • 原子性原子性是数据库的事务中的特性。在数据库事务的情景下,原子性指的是:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。对于Redis而言,命令的原子性指的是:一个操作的不可以再分,操作要么执行,要么不执行。Redis操作原子性的原因Redis的操作之所以是原子性的,是因为Redis是单线程的。由于对操作系统相关的知识不是很熟悉,从上面这句话并不能真正理解Redis操作是原子性的原因,进一步查阅进程与线程的概念及其区别。进程与线程进程计算机中...
  •  2020-06-15  |    程成  |    1857  |    0  |    数据库  |   redis  原子性  事务  
  • 阻塞与非阻塞的区别
  • 简单点说:阻塞就是干不完不准回来,   非阻塞就是你先干,我现看看有其他事没有,完了告诉我一声我们拿最常用的send和recv两个函数来说吧...比如你调用send函数发送一定的Byte,在系统内部send做的工作其实只是把数据传输(Copy)到TCP/IP协议栈的输出缓冲区,它执行成功并不代表数据已经成功的发送出去了,如果TCP/IP协议栈没有足够的可用缓冲区来保存你Copy过来的数据的话...这时候就体现出阻塞和非阻塞的不同之处了:对于阻塞模式的socket s...
  •  2020-06-15  |    程成  |    1607  |    0  |    其他  |   阻塞  区别  
  • java异常 java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
  • 错误的原因是因为缺少slf4j日志组件jar包造成的,slf4j是一个开源的日志组件,和log4j类似,都是用来记录日志的开源组件。    SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。    实际上,SLF4J所提供的核心API是一些接口以及一...
  •  2020-06-13  |    程成  |    1700  |    0  |    Java  |   异常  Java  error  
  • MAC使用homeBrew安装Redis
  • 一般买了macbook第一件事就是把homeBrew和iterm2装上,它们俩的组合可以实现绝大多数的软件安装。网上有很多教程安装它们的,关于homeBrew的操作命令如下:brew search **  //查找某个软件包brew list  //列出已经安装的软件的包brew install ** //安装某个软件包,默认安装的是稳定版本brew uninstall **/...
  •  2020-06-13  |    程成  |    1737  |    1  |    数据库  |   Mac  Redis  homeBrew  启动  
  • Java中堆内存和栈内存详解
  • Java把内存分成两种,一种叫做栈内存,一种叫做堆内存在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。堆内存用于存放由new创建的对象和数组。在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象在堆内存中的首...
  •  2020-06-13  |    程成  |    1422  |    0  |    Java  |   Java  堆内存  栈内存  
  • Servlet——ServletContext 对象
  • ServletContext提两个问题:1.大家在访问某个网站的时候,往往都会看到网站的首页面显示您是第几位浏览者(网站计数器),这是怎么实现的?2.我们在访问某个bbs网站的时候,往往会显示有多少人在线,这是怎么实现的?可能我们会想到的常规实现思路:数据库或者文件。这种做法比较简单,但是却会对数据库或者文件访问过于频繁,开销比较大。解决之道是用ServletContext什么是ServletContext要理解ServletContext就必须和Cookie、Session做一个对比,如下图:...
  •  2020-06-12  |    程成  |    1474  |    0  |    Java  |   ServletContext  Servlet  
  • 进程和线程、协程的区别
  • 现在多进程多线程已经是老生常谈了,协程也在最近几年流行起来。python中有协程库gevent,go里面的goroutine也是一个非常棒的协程库。本文主要介绍进程、线程和协程三者之间的区别。概念进程进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,也是基本的执行单元,是操作系统结构的基础。每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句...
  •  2020-06-12  |    程成  |    1738  |    1  |    其他  |   进程  协程  线程  
  • Java并发编程:volatile关键字解析
  • volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。  volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一下与内存模型相关的概念和知识,然后分析了volatile关键字的实现原理,最后给出了几个使用vol...
  •  2020-06-12  |    程成  |    1532  |    0  |    Java  |   并发  volatile  Java  
  • 线程和进程的关系及区别
  • 1.定义一个程序至少有一个进程,一个进程至少有一个线程。进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.2.关系一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.相对进程而...
  •  2020-06-12  |    程成  |    1369  |    0  |    其他  |   线程  进程  
  • 解决项目运行时,xxx cannot be cast to xxx.xxx.xxx报错
  • 当 Maven 一键构建时(一键构建的意思就是:我们不再使用本地安装的 Tomcat,而是使用 Maven 自身集成的 Tomcat 插件对项目进行构建),注意,这个时候大家都知道 Maven 自身具有 Tomcat 插件,既然是 Tomcat 插件,那么Tomcat 所依赖的包就是 Maven 应该有的包。你本地的 Tomcat 所在的包和你项目导入的包,包名一样时,就是相冲的,名称一模一样,所以就有了冲突。我们需要修改导入包的作用域,Maven 作于专业的包管理工具,我们只要让导入包只在编译...
  •  2020-06-07  |    程成  |    1335  |    0  |    Java  |   冲突  maven  servlet  
  • Mac 上如何安装 Tomcat
  • 首先保证brew命令能够正常使用;1、搜索tomcat是否存在:brew search tomcat2、安装tomcat:brew install tomcat3、检查是否安装成功:catalina -h4、运行tomcat:catalina runTomcat的默认端口是8080,如果运行成功可通过http://localhost:8080访问webapp的根目录(CATALINA_HOME)为:/usr/local/Cellar/tomcat/7.0.33/libexec/webapps/R...
  •  2020-06-05  |    程成  |    1191  |    0  |    Java  |   Mac  Tomcat  
  • Servlet 是什么
  • Servlet 在 Java Web 中非常重要,整个 Java Web 的核心知识体系都是围绕 Servlet 来转的。虽然很重要,但不是很难。什么是 Servlet ?概念:官方翻译是 server applet,运行在服务器端的小程序。从下图中可以看出:Servlet 就是一个接口,定义了 Java 类被浏览器访问到(tomcat)识别的规则。将来我们自定义一个类,实现 Servlet 接口,复写方法。快速入门:创建 JavaEE 项目定义一个类,实现 Servlet 接口实现接口中的抽象...
  •  2020-06-05  |    程成  |    1677  |    0  |    Java  |   java  servlet  
  • xml 配置文件中 xmlns 作用是什么
  •     做WEB页面的人经常会碰到形如<html xmlns="http://www.w3.org/1999/xhtml">这样的代码,那后面的xmlns是表示什么意思呢?    官方概念:xmlns是xml namespace的缩写,也就是XML命名空间,xmlns 属性可以在文档中定义一个或多个可供选择的命名空间。该属性可以放置在文档内任何元素的开始标签中。该属性的值类似于 URL...
  •  2020-06-04  |    程成  |    2281  |    0  |    Java  |   xmlns  命名空间  xml