- 博客(53)
- 收藏
- 关注
原创 多级缓存、OpenResty缓存、Redis分布式缓存、进程缓存
布隆过滤器其实采用的是哈希思想来解决这个问题,通过一个庞大的二进制数组,走哈希思想去判断当前这个要查询的这个数据是否存在,如果布隆过滤器判断存在,则放行,这个请求会去访问redis,哪怕此时redis中的数据过期了,但是数据库中一定存在这个数据,在数据库中查询出来这个数据后,再将其放入到redis中,假设布隆过滤器判断这个数据不存在,则直接返回。可以看到【缓存命中0,错过1,最大缓存数10,已缓存数1】,这个错过1就是我们刚发的这个请求,请求来了但是进程缓存里没有这个key,只能往下去数据库查询。
2024-01-04 21:36:56 1114
原创 【项目】web服务器
socket 套接字:所谓 socket(套接字),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象,一个套接字就是网络上进程通信的一端,是应用程序通过网络协议进行通信的接口。socket 可以看成是两个网络应用程序进行通信时,各自通信连接中逻辑上的端点,是网络环境中进程间通信的一套 API。大端字节序是指一个整数的最高位字节存储在内存的低地址处,低位字节存储在内存的高地址处;小端字节序则是指整数的高位字节存储在内存的高地址处,而低位字节则存储在内存的低地址处。
2023-10-02 18:37:44 188
原创 cmu15-445课程笔记
总结起来,cmake …用于配置并生成构建文件,而 make 用于实际执行构建,根据构建文件中的规则进行编译和链接。cmake:将 CMakeLists.txt 文件中的配置指令解析为适用于所选构建系统的构建文件。接下来我们可以在本机的编译器编写我们的代码。然后在服务器上编译和运行我们的代码。make: 在生成了构建文件后,编译项目的源代码并生成最终的可执行文件。1、下载安装Clion,安装C++编译环境。2、服务器装依赖包,安装Cmake。Clion远程连接服务器。
2023-08-23 19:22:46 195
原创 【redis设计原理】
Redis 是一种基于内存的数据库,它对数据的读写操作都是在内存中完成,所以它的读写速度非常快,常用于缓存,消息队列这些场景。Redis 提供了多种数据类型来支持不同的业务场景,比如 String(字符串)、Hash(哈希)、 List (列表)、Set(集合)、Zset(有序集合)、Bitmaps(位图)等等,并且对数据类型的操作都是原子性的,因为执行命令由单线程负责的,不存在并发竞争的问题。除此之外,Redis 还支持事务 、持久化、过期删除机制等等。
2023-08-20 11:35:09 193
原创 【MySQL】阅读笔记
我们常说的索引数据结构,就是由存储引擎层实现的,不同的存储引擎支持的索引类型也不相同,比如 InnoDB 支持索引类型是 B+树 ,且是默认使用,也就是说在数据表中创建的主键索引和二级索引默认使用的是 B+ 树索引。之所以要逆序,是因为记录头信息中指向下一个记录的指针,指向的是下一条记录的「记录头信息」和「真实数据」之间的位置,这样的好处是向左读就是记录头信息,向右读就是真实数据,比较方便。但其实对于更新比较频繁的表,查询缓存的命中率很低的,因为只要一个表有更新操作,那么这个表的查询缓存就会被清空。
2023-08-08 14:56:49 144
原创 网络是怎样连接的
除此之外,互联网里还有一个根域,它里面保存着com、jp等DNS服务器的信息,互联网里所有DNS服务器里都保存着根域服务器的信息。当我们的浏览器调用DNS解析器时,解析器生成一条[告诉我www.baidu.com的IP地址]这种消息,因为解析器不具备使用网络收发数据的功能,所以它会把这条信息委托给操作系统的协议栈来执行,协议栈是操作系统内部的网络控制软件,协议栈就会通过网卡把消息发送给最近的DNS服务器,DNS服务器的IP地址已经是提前设置好的,不用再去查询了,DNS服务器查到之后就会返回具体的IP地址。
2023-07-22 17:30:36 165
原创 【计算机网络】笔记
它的主要功能是在数据链路层提供的数据帧传送功能上,控制数据链路层和传输层之间的信息转发,然后建立、维护网络的连接,把数据从源端经过若干个中间节点安全传送到目的端,从而向传输层提供最基本的端到端的数据传输服务。传输层主要起承上启下的作用,它向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输,同时向高层屏蔽下层数据通信的细节,即向用户透明地传送报文。表示层是OSI模型的第六层,它的主要功能是充当应用程序和网络之间的翻译角色,它要处理用户信息的表示问题,如数据的编码、数据格式转换、加密解密等问题。
2023-07-22 11:20:43 458
原创 【操作系统】读书笔记
线程又叫轻量级进程,它从属于进程,是程序的实际执行者,一个进程可以包含多个线程,它是CPU调度的最小单位。首先我们都知道,现代的计算机软件都是基于操作系统来运行的,操作系统封装了计算机底层的硬件资源,比如磁盘、键盘、显示器等等,那当我们的应用程序想要访问使用这些计算机资源的时候,就需要调用操作系统提供的服务。如果有的员工在上班时临时空闲,比如等待机器启动什么的,现在没有事情,那么可以让这名工人利用这个时间去做其它的事情,也如果一个线程等待某些条件,可以充分利用这个时间去做其它事情,那这就是协程。
2023-07-03 14:59:42 295
原创 【C++】(五)11新特性
所以在刚才的例子里,我们可以用weak_ptr声明链表节点的pre和next两个指针,那么节点在指向前一个或后一个节点后并且不会改变shared_ptr的引用计数,当node1计数为0时,node1指向的空间就会被销毁掉。auto是C++11新增的一个关键字,auto也叫类型说明符,它可以让编译器替我们去分析表达式所属的类型,它仅仅是一个占位符,在编译期间它会进行类型推导,然后被真正的类型所替代。我们需要一个指针对象,需要一个引用计数的指针设定对象的值,并将引用计数计为1,需要一个构造函数。
2023-07-02 17:42:37 284
原创 【C++】(四)内存状态
实际上每个元素在放的时候都是有一个偏移量的,第一个元素的偏移量是0,其他元素的偏移量是对齐数的整数倍(那么所谓这个对齐数,指的是当前元素大小和当前编译器默认对齐数,它们两个之间的最小值),偏移了之后就开始放元素,当元素都放完之后,还需要看一下当前总的存储单元是不是这些元素中最大对齐数的整数倍,如果不是的话需要补成整数倍,也就是后面会空几个位置。我们都知道在内存中放数据之后CPU会来读取,但是CPU从内存中读取数据的时候并不是一个字节一个字节来读,而是以块儿的形式来读的,这个块儿的大小是内存的读取粒度。
2023-07-02 17:34:42 177
原创 【C++】(三)STL
STL(Standard Template Library),即标准模板库。它是94年被正式纳入C++标准,是 C++ 标准库的重要组成部分。它不仅仅是一个可复用的组件库,而且是一个包含了许多常用的数据结构和算法的软件框架。STL的第一个比较重要的特点是数据结构和算法的分离。STL构成STL提供了六大组件,彼此之间可以组合套用,这六大组件分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器。首先vector的扩容原理是申请新空间,拷贝元素,释放旧空间。
2023-07-02 17:27:26 317
原创 【C++】(二)函数、类、模板
继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类, 新的类能吸收已有类的数据属性和行为,并能扩展新的能力。继承缺点:耦合度高,因为继承了父类的东西,所以想分开就很难了,藕断必定丝连。增减的代码维护难度,尤其是多重继承和兄弟关系继承,毕竟家族历史长派生类中包含并且可以使用它从基类继承而来的成员,为了使用这些成员,派生类必须知道他们是什么。所以必须定义而非声明。模板是c++的一种特性,它可以让类或者函数在对应不同的类型的时候正常工作,而不用为每一种类型分别写一份代码。
2023-07-02 17:26:04 355
原创 【C++】(一)基础语法
实际上每个元素在放的时候都是有一个偏移量的,第一个元素的偏移量是0,其他元素的偏移量是对齐数的整数倍(所谓对齐数是当前这个元素大小和当前编译器默认对齐数,它们两个之间的最小值),而且存放元素完成之后,还需要看一下当前总的存储单元是不是这些元素中最大对齐数的整数倍,如果不是的话需要补成整数倍,也就是后面会空几个位置。我们都知道在内存中放数据之后CPU会来读取,但是CPU从内存中读取数据的时候并不是一个字节一个字节来读,而是一块一块来读的,这个块的大小叫做内存的读取粒度。那这就是结构体的内存对齐。
2023-06-01 17:10:19 487
原创 《计算机是怎样跑起来的》
如果仅仅把技术当作一个黑盒,只把时间花在学习其表面上,而并没有探索到其本质,就绝不应该认为自己已经"懂"了。带着问题阅读正文的内容。
2023-05-30 16:27:48 2033
原创 【STL】
STL(Standard Template Library),即标准模板库,它在1994年被正式纳入C++标准,是 C++ 标准库的重要组成部分。它不仅仅是一个可复用的组件库,而且是一个包含了许多在计算机科学领域里常用的基本数据结构和基本算法的软件框架。
2023-05-18 16:48:58 442
原创 OCR处理步骤
什么是人工智能、机器学习和深度学习?首先人工智能的英文是ArtificialIntelligence也就是常说AI,它是一个比较宽泛的概念,是研发用于模拟和扩展人类智能的理论和方法技术的一门新学科。因为这个定义只阐述了目标,而没有限定具体的实现方法,因此要实现人工智能的话就存在很多方法和分支。然后是机器学习,机器学习是现在比较有效的一种实现人工智能的方式,它是专门研究计算机怎样模拟和实现人类的学习行为,以此来获取新的知识技能,然后不断改善自身的性能这样的一种方法。机器学习的实现一般是分成两步先训练再预
2022-03-06 15:53:23 1438
原创 端口被占用
1. 找出是哪个进程占用端口netstat -ano | findstr 端口号2. 杀死进程任务管理器 -> 详细信息 -> 找出对应PID结束或taskkill -PID 进程号 -F
2022-02-17 12:00:34 969
转载 partition by
转载地址:https://blog.csdn.net/dwt1415403329/article/details/878353831>建表并插入数据,因为over是开窗函数,mysql不支持开窗函数,其他如oracle,sql server,db2...等新版本都支持(这里借用他人的数据) CREATE TABLE Employee( ID number(10) not null primary key, EmpName varchar(20), EmpSalary varchar(10)
2020-10-14 10:58:48 17316
原创 request.getParameter(“参名”) 中文乱码解决方法
原:String groupName = getRequest().getParameter("groupName"); 新:String groupName = StringUtils.isEmpty(getRequest().getParameter("groupName")) ? "" : new String(getRequest().getParameter("groupName").getBytes("iso-8859-1"), "utf-8"); 分析:原因:Http请求传输.
2020-10-09 12:06:34 1578
原创 windows安装RabbitMQ的坑
装了好久的RabbitMQ,一直有问题。现在终于已经好了。来总结一下遇到的坑首先,安装Rabbit时,计算机主机名是不能为汉语的,我开始就一直犯了这个坑,我以为我的主机名不是汉字。两个方法鉴别是否为汉字 1.看到后缀就知道了。2.看文件名,如果是汉字,解决方法:打开注册表regedit搜ProfileList改了之后直接重启,再进入电脑时 会显示为电脑初始状态,进user目录,直接把以前的汉字主机名改为上图中你自己填的英文 重启BINGO第二个坑,erLang和RabbitMQ的版本
2020-09-28 23:45:06 1221
原创 JAVA类加载机制
文章目录类加载过程1. 加载2. 验证(了解)3. 准备3.1 内存分配3.2 初始化类型4. 解析(了解)5. 初始化6. 使用(了解)7. 卸载(了解)接口与类加载过程区别例题学习类加载过程类加载过程:即JVM虚拟机把.class文件中类信息加载进内存,并进行解析生成对应的class对象的过程。比如:JVM在执行某段代码时,遇到了class A, 然而此时内存中并没有class A的相关信息,于是JVM就会到相应的class文件中去寻找class A的类信息,并加载进内存中,这就是我们所说的类加
2020-07-31 14:17:01 893
原创 java读取配置文件
pro.propertiesclassName=cn.itcast.domain.StudentmethodName=sleepReflectTest.java //1.加载配置文件 //1.1创建Properties对象 Properties pro = new Properties(); //1.2加载配置文件,转换为一个集合,随后获取class目录下的配置文件 ClassLoader classLoader = ReflectT
2020-07-30 15:07:16 125
原创 JAVA反射
文章目录概念优点:使用方式1. 获取Class对象方式1.1 Class.forName("全类名")1.2 类名.class1.3 对象.getClass()2. Class API2.1 获取成员变量s2.2 获取构造方法s2.3 获取成员方法s2.4 获取全类名3. 使用途径概念反射:将类的各个组成部分封装为其他对象,此为反射机制优点:可以在程序运行过程中,操作这些对象。可以解耦,提高程序的可扩展性。使用方式1. 获取Class对象方式1.1 Class.forName(“全类名”
2020-07-30 14:49:12 120
原创 in关键字中参数超过最大值的解决方法
前台页面查询时报错定位到具体sql,放到PL SQL中查询也就是in关键字默认参数数量大于1000时,就会报错解决方法:/***@Description: sql查询中使用in关键字时 参数数量大于900则分段查询 *@param1: in中参数列表LIST *@param2: 需要查询的字段 *@author: V_US9Y3S *@date: 2020-7-6 */public static String getInParameter(List<String> l
2020-07-20 16:33:24 2335
原创 Lamda表达式
文章目录为什么要用Lamda表达式?我的理解是 化繁为简函数式接口:任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。首先定义一个函数式接口interface ILike { void lambda(); //这个接口中只包含此一个抽象方法}实现上面的接口class Like implements ILike { @Override public void lambda () { System.out.println("Hello Lambda"); }}
2020-07-20 11:41:36 941
原创 group by与order by的区别
1. order byorder by比较简单,作用就是排序asc 从上到下慢慢升序desc 从上到下慢慢降序默认为升序(就是你sql不写order by 它就是升序)order by后面跟多个字段时,排序按就近原则依次而来2. group byorder by 我的理解是:聚合分组聚合的意思就是聚合函数:例如 sum()、avg()、count()等等直接上个栗子:...
2020-07-08 14:11:33 38908 5
原创 索引
文章目录1. 索引是什么2. 索引分类3. 索引语法4. 索引结构分类5. 建立索引情况5.1 哪些情况要建索引5.2 哪些情况不要建索引6. 索引注意点1. 索引是什么索引是帮助MySQL高效获取数据的数据结构,也可以理解为:排好序的快速查找数据结构。大部分索引都是B+树索引,也有的是哈希索引优势:1.提高数据检索效率,降低数据库的IO成本。2. 提高数据排序效率,降低CPU的消耗。劣势:实际上索引也是一张表,该表保存了主键与索引字段 并指向实体表的记录,所以索引列也是要占空间的
2020-07-08 11:07:50 188
原创 数据库事务隔离级别
文章目录三种读取问题1. 脏读2. 不可重复读3. 幻读事务隔离级别三种数据读取问题出现的根本原因:并发访问三种读取问题1. 脏读读取未提交数据A事务读取B事务尚未提交的数据,此时如果B事务发生错误并执行回滚操作,那么A事务读取到的数据就是脏数据。就好像原本的数据是艾希 比较干净、纯粹。B事务更改艾希为盖伦,A事务在之后读取了这个数据(盖伦)。然后B又把数据回滚为艾希,而事务A却什么都不知道,傻傻的以为盖伦就是正确的值。最终结果就是事务A读取了此次的脏数据,称为脏读。2. 不可重复读前后
2020-07-07 14:23:26 994
原创 JVM和GC
文章目录1 虚拟机内部构造1.1 何为虚拟机1.2 虚拟机中的线程1.3 虚拟机中的内存区域2 垃圾回收(GC)2.1 如何确定垃圾2.1.1 引用计数法2.1.2 可达性分析2.2 四种垃圾回收算法2.2.1 标记清除算法(Mark-Sweep)2.2.2 复制算法(copying)2.2.3 标记整理算法(Mark-Compact)2.2.4 分区收集算法(目前用的不多)2.3 分代收集算法2.3.1 新生代2.3.2 老年代2.3.2 永久代2.4 垃圾回收总结1 虚拟机内部构造1.1 何为虚拟机
2020-07-02 17:33:58 1134
原创 数据库explain指令
文章目录explain指令覆盖索引explain指令mysql> explain select * from Dm_Dealer t where t.row_id = '20200630';+----+-------------+----------+------+---------------+------+---------+------+------+-------------+| id | select_type | table | type | possible_keys |
2020-06-30 10:19:43 902
原创 静态变量与非静态变量的区别?
文章目录静态变量与非静态变量的区别JAVA中初始化的顺序静态变量与非静态变量的区别java类中的变量有两种: 一种是被 static 关键字修饰的变量,叫类变量或者静态变量: 类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类的所有实例共享。静态变量可以直接通过类名进行访问,其生命周期取决于类的生命周期。 另一种没有 static 修饰,为成员变量: 而实例变量取决于类的实例。每创建一个实例,java虚拟机就会为实例变量分配一次内存,
2020-06-28 14:58:43 1234
原创 为什么ArrayList增删效率低,及其扩容机制
文章目录1. 为什么ArrayList增删效率低2. ArrayList扩容机制1. 为什么ArrayList增删效率低首先,modCount是ArrayList的父类AbstractList中的变量,记录的是关于元素的数目被修改的次数,默认值为0。1, 增与删操作时, modCount一定会进行修改。改和查时modCount一定不会修改。2, 扩容操作会导致数组复制,批量删除会有找出两个集合交集的操作及数组复制操作,因此,增、删都相对低效。 而 改、查比较高效。2. ArrayList扩
2020-06-28 14:39:13 1993
原创 String, StringBuffer与StringBuilder的区别?
文章目录StringStringBufferStringBuilderJava9的改进大部分情况下:StringBuilder > StringBuffer > StringStringString类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。如果对 String 类型进行改变,其实等同于生成了一个新的 String 对象,原对象如果没有被再次引用 则会被GCStringBufferStringBuffer对象则
2020-06-24 11:35:27 934
原创 foreach删除元素为什么会报错?
2020-06-23foreach删除元素为什么会报错Math.max() 返回两个数中大的那个,源码里是一个三元运算符final: final修饰的类不能被继承。(Sting就是一个被final修饰的类,我们只能用,不用继承) final修饰的变量,是一个常量,只能赋值一次。protected: 可以被子类,同package下类使用,不对外公开的访问修饰符 在非static修饰下,子类不能通过new父类对象直接调用default(不写修饰符) 在一个包下的能访问transient :
2020-06-23 18:14:00 1276
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人