- 博客(66)
- 资源 (11)
- 收藏
- 关注
原创 Redis(12)| 过期删除策略和内存淘汰策略
Redis 是可以对 key 设置过期时间的,因此需要有相应的机制将已过期的键值对删除,而做这个工作的就是过期键值删除策略。
2023-11-11 15:25:31 387
原创 Redis(11)| 持久化AOF和RDB
Redis 每执行一条写操作命令,就把该命令以追加的方式写入到一个文件里,然后重启 Redis 的时候,先去读取这个文件里的命令,并且执行它。注意:只会记录写操作命令,读操作命令是不会被记录的,因为没意义。AOF 日志文件其实就是普通的文本,我们可以通过 cat 命令查看里面的内容,不过里面的内容如果不知道一定的规则的话,可能会看不懂。我这里给大家解释下。「*3」表示当前命令有三个部分,每部分都是以「$+数字」开头,后面紧跟着具体的命令、键或值。
2023-11-02 18:45:00 131
原创 Redis(10)| I/O多路复用(mutiplexing)
看上图,通俗讲就是I/O multiplexing 这里面的 multiplexing 指的其实是在单个线程通过记录跟踪每一个Sock(I/O流)的状态(对应空管塔里面的Fight progress strip槽)来同时管理多个I/O流. 发明它的原因,是尽量多的提高服务器的吞吐能力。那么什么是IO多路复用机制呢,Linux 中的 IO 多路复用机制是指一个线程处理多个 IO 流,就是我们经常听到的 select/epoll 机制。
2023-10-30 20:45:00 148
原创 Redis(09)| Reactor模式
通过select/poll/epoll/kqueue这些I/O多路复用函数库,我们解决了一个线程处理多个连接的问题,但整个Reactor模式的完整框架是怎样的呢?参考这篇paper,我们可以对Reactor模式有个完整的描述。Handles:表示操作系统管理的资源,我们可以理解为fd。:同步事件分离器,阻塞等待Handles中的事件发生。:初始分派器,作用为添加Event handler(事件处理器)、删除Event handler以及分派事件给Event handler。
2023-10-29 12:00:00 208
原创 Redis(07)| 数据结构-跳表
Redis 只有 Zset 对象的底层实现用到了跳表,跳表的优势是能支持平均 O(logN) 复杂度的节点查找。zset 结构体里有两个数据结构:一个是跳表,一个是哈希表。这样的好处是既能进行高效的范围查询,也能进行高效单点查询。Zset 对象在执行数据插入或是数据更新的过程中,会依次在跳表和哈希表中插入或更新相应的数据,从而保证了跳表和哈希表中记录的信息一致。
2023-10-29 08:30:00 89
原创 JVM调优(10)JVM的运行时数据区
对于 C C++ 来说,在内存管理领域,JVM既拥有最高的权利,但是同时他们又是从事最基础工作的劳动人员,因为他们担负着每一个对象从开始到结束的维护责任。而对于Java来说,再虚拟机自动内存管理的帮助下,不再需要为每一个new操作去分配内存,不容易出现内存泄漏和内存溢出的情况,但是因为我们Java程序员 不用管理内存,所以一旦出现内存问题,很容易让我们手忙脚乱,所以呢我们必须要了解Java虚拟器的内存管理机制,以便我们能更好的处理各种各样的问题。
2023-10-28 20:54:10 572
原创 Redis(06)| 数据结构-整数集合
整数集合是 Set 对象的底层实现之一。当一个 Set 对象只包含整数值元素,并且元素数量不大时,就会使用整数集这个数据结构作为底层实现。
2023-10-28 17:30:00 90
原创 Redis(05)| 数据结构-哈希表
哈希表是一种保存键值对(key-value)的数据结构。哈希表中的每一个 key 都是独一无二的,程序可以根据 key 查找到与之关联的 value,或者通过 key 来更新 value,又或者根据 key 来删除整个 key-value等等。在讲压缩列表的时候,提到过 Redis 的 Hash 对象的底层实现之一是压缩列表(最新 Redis 代码已将压缩列表替换成 listpack)。Hash 对象的另外一个底层实现就是哈希表。哈希表优点在于,它能以 O(1) 的复杂度快速查询数据。
2023-10-28 12:44:56 211
原创 Redis(08)| 线程模型
redis 内部使用文件事件处理器 file event handler,它是单线程的,所以redis才叫做单线程模型。它采用IO多路复用机制同时监听多个 socket,将产生事件的 socket 压入内存队列中,事件分派器根据 socket 上的事件类型来选择对应的事件处理器进行处理。
2023-10-28 11:51:13 408
原创 Redis(04)| 数据结构-压缩列表
压缩列表的最大特点,就是它被设计成一种内存紧凑型的数据结构,占用一块连续的内存空间,不仅可以利用 CPU 缓存,而且会针对不同长度的数据,进行相应编码,这种方法可以有效地节省内存开销。
2023-10-27 21:46:18 586
原创 Redis(03)| 数据结构-链表
大家最熟悉的数据结构除了数组之外,我相信就是链表了。Redis 的 List 对象的底层实现之一就是链表。C 语言本身没有链表这个数据结构的,所以 Redis 自己设计了一个链表数据结构。
2023-10-27 12:30:00 198
原创 Redis(02)| 数据结构-SDS
在开始讲数据结构之前,先给介绍下 Redis 是怎样实现键值对(key-value)数据库的。Redis 的键值对中的 key 就是字符串对象,而 value 可以是字符串对象,也可以是集合数据类型的对象,比如 List 对象、Hash 对象、Set 对象和 Zset 对象。这些命令代表着:● 第一条命令:name 是一个字符串键,因为键的值是一个字符串对象;● 第二条命令:person 是一个哈希表键,因为键的值是一个包含两个键值对的哈希表对象;
2023-10-26 22:53:21 481
原创 Redis(01)| 数据结构
Redis 速度快的原因除了它是内存数据库,使得所有的操作都在内存上进行之外,还有一个重要因素,它实现的数据结构,使得我们对数据进行增删查改操作时,Redis 能高效的处理。因此,这次我们就来好好聊一下 Redis 数据结构,这个在面试中太常问了。
2023-10-26 22:23:53 801
原创 数据结构与算法之红黑树
在上一篇我们说到2-3树在某些情况插入后的平衡操作可能会使得效率降低,在2-3查找树基础上改进的红黑树不仅具有较高的效率。那么红黑树是如何操作的呢?定义红黑树是一种近似平衡的二叉查找树,它能够确保任何一个节点的左右子树的高度差不会超过二者中较低那个的一陪。具体来说,红黑树是满足如下条件的二叉查找树(binary search tree):每个节点要么是黑色要么是红色根节点是黑色每个叶子节点是黑色,并且为空节点(还有另外一种说法就是,每个叶子结点都带有两个空的黑色结点(被称为黑哨兵),如果一个结点
2021-07-25 18:06:58 210
原创 数据结构与算法之2-3树
我们在上篇二叉查找树中曾介绍过二叉查找树有可能会出现其中一个极端情况,所有的结点变成了一条链。如图我们当然希望我们能保存二叉查找树的平衡性,但是在动态插入过程中保证树的完美平衡代价太大了。我们退而求其次,学习一种新的数据结构。定义2-3查找树是一种平衡树的思想,我们可以将标准二叉查找树的结点称为2-结点(含有一个键和两条链),而现在我们引入3-结点,它含有两个键和三条链,每一条链就是一个分区。一棵2-3查找树要么为空,要么满足满足下面两个要求:A、2-结点:含有一个键(及对应值)和两条链接,左链接
2021-07-25 10:58:17 369
原创 数据结构与算法之二叉搜索树
目录一、定义和特性二、复杂度2.1 查找复杂度2.1.1两种极端情况完全二叉树单节点2.1.2 前序遍历2.1.3 中序遍历2.1.4 后续遍历2.1.5 查找一个节点2.2 构造复杂度2.3 删除复杂度三、完整代码一、定义和特性二叉查找树(BST:Binary Search Tree)是一种特殊的二叉树,它改善了二叉树节点查找的效率。二叉查找树有以下性质:若左子树不空,则左子树上所有节点的值均小于它的根节点的值;若右子树不空,则右子树上所有节点的值均大于它的根节点的值;左、右子树也分别为二叉排
2021-07-25 00:05:31 630
原创 人喜欢逃避 | 读书 | 被讨厌的勇气
选择逃避,是因为我没有面对复杂人际交往的勇气我们知道的佛学和中庸之道都讲究因果,而我们在生活也会碰到这种现象,比如:无法给喜欢的人表白,是因为给ta说话就紧张和脸红。因为小明抽烟,所以不喜欢他。因为别人不小心撒在了我们身上汤汁,所以大发雷霆,大声呵斥。现在对某件事特别反感,是因为小时候受过某个创伤。我不喜欢现在的自己,性格孤僻,生活不幸福,好多人不喜欢我。想成为某某,他和很多人谈笑风生。等等这些生活中常见的场景,在追究其原因时,我们都是不约而同的想到,因为以往的某种原因,而导致的现在的.
2021-04-09 19:19:02 231 1
原创 详谈左晖 | 泡读
因为公司CEO在2021年春节,给全体员工的一封信中,提到公司的战略规划调整,其中提到了这本书。以前也思考一个问题,作为技术人员要不要思考业务。这个可能也是大部分程序员疑惑的问题吧,认为业务是产品和运营思考的,我只需要接收需求,使用技术提供需求功能就可以了。一个按钮,一个报表,一个平台。在看这本书之前,我确定业务分析和洞察能力,也同样是一个优秀的技术人员基本品质。因为总要知道这个需求用户是谁,场景是什么,易变点是什么,和其他差异和相同之处是什么。这决定了代码的抽象程度和复用能力。除了确定自己以后多思考业务外
2021-04-09 16:29:14 1180
原创 《向上生长》九边 读后感
国庆期间,在附近的咖啡馆发现了这本书,本以为是关于“向上管理”理念的书,就开始阅读起来,这本书是作者成长过程中的感悟和心得;可以说这是一个关于生活习惯经验之谈。如果自己本来就是自律的人,或者有一套正在实施且有收获的成长计划,对于本书可以略过了(我就不能略过了),作为北漂者,而且可能大部分的计划都付之东流了(除了跑步),耐心的读完。那么既然看完了,无论是什么书都有它的可挖掘之处。本书大概从下面几点进行讲解(个人理解,不喜勿喷)承认自己的无知从现象看本质,从自身找原因,认识自我的不足(保持这种状态),因.
2020-10-26 17:51:19 1923
原创 Tomcat启动过程简述
Tomcat简介Servlet(server applet 服务端小程序)是一种国际组织的协议、约定.Tomcat只是针对Servlet协议的规范做了封装,其他这样的软件还有jetty等.启动过程如何启动进入Tomcat本目录的bin文件夹下。执行startup.bat或者sudo ./startup.sh start启动startup.bat脚本文件,就可以启动默认端口为8080...
2019-06-23 11:06:51 860
原创 Tomcat之请求处理响应过程
经过上篇Tomcat架构简述,我们了解到Tomcat的结构和模块化,模块之间的关系。因此,到这里,就像我们已经盖好一座大楼,并将其装饰成了酒店。分配了前台(Connector),其他工作服务人员(Container),已经对每层(Host),每个房间(Context)和房间布局装饰成不同的格局(Wrapper)。那么,该如何开业,进行接收旅客,给他们分配房间,并提供完美的服务后退回房间,这样一个...
2019-06-15 19:27:09 1869
原创 Tomcat架构简述
文章目录Tomcat体系结构架构模块说明ServerConnector和ContainerHost、Context和Wrapper为什么这么设计?ValveLifecycleTomcat体系结构我们可以从 server.xml 中就能够看出 Tomcat 各组件的层次结构,具体结构图如下:Server:代表整个容器,接收客户端发来的请求数据并进行解析,完成相关业务处理,然后把处理结果作为...
2019-06-15 10:23:44 473 1
原创 Tomcat之NIO和APR性能对比
寄上一篇Tomcat的接收请求方式:BIO/NIO/APR继续环境介绍version:Apache Tomcat 8.5操作系统:Mac OS X 10.14.5JVM:1.8.0测试数据场景:获取一个电商系统中的一个商品首页数据测试工具:ab压力测试环境配置在一台或者环境一样两台机器上搭配两个Tomcat,我是一台Mac OS X 10.14.5,所以一台机器同时运行两个Tom...
2019-06-13 23:28:56 4108
原创 Tomcat的接收请求方式:BIO/NIO/APR
文章目录定义bionioapr启动效果BIONIOAPRAPR安装APR的Tomcat配置定义biobio(blocking I/O),顾名思义,即阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作(即java.io包及其子包)。Tomcat在默认情况下,就是以bio模式运行的。遗憾的是,就一般而言,bio模式是三种运行模式中性能最低的一种。我们可以通过Tomcat Man...
2019-06-13 12:51:31 885
原创 Tomcat涉及的设计模式
一、门面设计模式门面设计模式在 Tomcat 中有多处使用,在 Request 和 Response 对象封装中、Standard Wrapper 到 ServletConfig 封装中、ApplicationContext 到 ServletContext 封装中等都用到了这种设计模式。1.1 原理这么多场合都用到了这种设计模式,那这种设计模式究竟能有什么作用呢?顾名思义,就是将一个东西封...
2019-06-08 19:01:34 899
原创 Http请求工具类HttpUtil
package com.helijia.merchant.common;import com.alibaba.fastjson.JSONObject;import com.helijia.merchant.modules.item.vo.ApplyArtworkGroup;import com.helijia.merchant.modules.item.web.ItemController...
2019-03-23 16:40:17 1316
原创 Python中的作用域和global用法
如果想在一个函数中要为一个定义在函数外的「变量」赋值,也即是为全局变量赋值。我们使用global关键字。如果不适用global,就会报错。main方法是个例外场景在函数内部修改全局变量,报错# -*- coding: utf-8 -*-age = 18def add_age(): age+=1 print "age {}, happy birthday ~".form...
2019-03-17 19:03:54 988
原创 Python(3)基本语法
标识符和Java一样,在Python里,标识符由字母、数字、下划线组成。所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。而且区分大小写。保留字保留字不能用作常数或变数,或任何其他标识符名称。所有 Python 的关键字只包含小写字母。andexecnotassertfinallyorbreakforpassclassfr...
2019-01-06 16:54:45 590
原创 Python(2)编码
在学习的各种计算机的语言中,都遇到过中文编码问题,而现在学习的Python也不例外,也会出现中文编码问题。Python 文件中如果未指定编码,在执行过程会出现报错如下图:Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。解决方法为只要在文件开头加入 # -*- coding: UTF-8 -*-或者 #coding=utf-8 就...
2019-01-05 12:39:23 189 1
原创 Python(1)初识
原由我主要从事JAVA后台开发的码农,因工作需要及个人的一点点对脚本语言如Lua,Python爱好(实话说吧,是有个妹子问我能不能抓取评分在90分以上的电影)才学习Python,当然JAVA也能抓取。至于为什么选择Python,主要是因为Python功能强大(后面会介绍一些主要的功能应用)。爬虫这个东西,如:八爪鱼、火车头、集搜客、神箭手、java爬虫、php爬虫、python爬虫等。初步用了...
2019-01-05 12:30:08 298 3
原创 初级排序算法
定义首先, 找到数组中最小的那个元素。 其次, 将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换) 。 再次, 在剩下的元素中找到最小的元素, 将它与数组的第二个元素交换位置。 如此往复, 直到将整个数组排序。 这种方法叫做选择排序, 因为它在不断地选择剩余元素之中的最小者。选择排序的内循环只是在比较当前元素与目前已知的最小元素(以及将当前索引加 1 和检查是否代码...
2019-01-04 16:14:04 196 1
原创 单链表反转(Java实现递归)
要求很简单,输入一个链表,反转链表后,输出新链表的表头。使用递归实现package com.lyh.seckill.test;public class ReLinkedList { private static class Node{ private int val; private Node next; public Node(int...
2019-01-03 14:27:38 2789
原创 JVM调优(9)jstack定位死循环、线程阻塞、死锁等问题
当我们运行java程序时,可能会出现死循环,IO阻塞,线程死锁等问题,导致程序无法进行下去,但从代码上有无法确定问题出现的具体原因或者地方。可以使用JDK自带的jstack工具去简单定位;死循环程序如下:/** * @Author Ralph * 死循环定位 */public class Test01 { public static void main(String[] ar...
2019-01-02 18:45:08 2202
原创 JVM调优(8)Java的内存泄漏
内存溢出和内存泄漏内存溢出out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;内存泄露memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。memory leak会最终会导致out of memory!以发生的方式来分类,内存泄漏可...
2018-12-19 18:41:38 368
原创 Java容器类(2)List源码解析
定义在Java API中,官方给出的前两段话如下:An ordered collection (also known as a sequence). The user of this interface has precise control over where in the list each element is inserted. The user can access elemen...
2018-12-12 11:31:04 287
原创 Java容器类(1)初识
Java容器类库的简化图下面是集合类库更加完备的图。包括抽象类和遗留构件(不包括Queue的实现):ArrayList和Vector初始化ArrayListArrayList初始化时不可指定容量,如果以new ArrayList()方式创建时,初始容量为10个;如果以new ArrayList(Collection c)初始化时,容量为c.size()*1.1,即增加10%的容量;当向A...
2018-12-12 10:09:48 240 1
原创 RabbitMQ(1)MAC环境安装RabbitMQ
1、安装在Mac下安装RabbitMQ是非常简单的,一般默认RabbitMQ服务器依赖的Erlang已经安装,只需要用下面两个命令就可以完成RabbitMQ的安装(前提是homebrew已经被安装 见https://brew.sh/):2、使用brew来安装 RabbitMQbrew install rabbitmq看到如下的代码表示RabbitMQ安装成功localhost:~ al...
2018-12-11 17:37:12 717
原创 JVM调优(7)问题定位和信息打印
1.找到对应进程的pid ps -ef | grep tomcat #或者使用jps jps -lvm #查看当前机器上运行的Java进程jps命令格式如下:命令格式 jps [options] [hostid]注:如果不指定hostid就默认为当前主机或服务器。命令行参数选项说明如下:-q 不输出类名、Jar名和传入main方法的参数-m 输出传入main方法的参数-l 输...
2018-12-11 14:44:51 363
转载 《罗生门》读后感
芥川龙之介的《罗生门》有好多个版本,大都收录了他的一些中短篇作品,内容不尽相同。我读的这本来自北京联合出版社,包含了《罗生门》、《竹林中》、《地狱变》、《鼻子》、《山药粥》、《河童》与《侏儒的话》七篇文章。之所以选择这个版本,在于它只有短短的220页,而我是个懒人,但读完后才发觉意犹未尽,今后还会阅读更多的版本。
2018-09-27 10:27:04 836
原创 算法——把二元查找树转变成排序的双向链表(JAVA)
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。 转换成双向链表 1=2=3=4=5=6=7=8=9=10=11=12=13=14=15。代码如下public class BinaryTree2LinkedTree { private static TreeNode head,tail; static...
2018-09-12 16:25:37 385
Bulletproof Ajax中文版
2015-08-13
easyui_api-demo-themes
2014-12-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人