- 博客(33)
- 收藏
- 关注
原创 计算机网络
计算机网络OSI七层协议:三次握手 & 四次挥手TCP&UDPTCP 与UDP的区别TCP如何保证传输可靠性ARQ协议拥塞控制URL输入后HTTP & HTTPSHTTP长连接和短链接cookie和session的区别HTTP1.0 VS HTTP1.1HTTP VS HTTPS补充http报文内容,和tcp的关系HTTP GET 和POST的区别 OSI七层协议: 应用层、表示层、会话层、传输层、网络层、数据链路层、物理层; 应用层:HTTP ,HTTPS,FTP,DNS 传输层:
2021-09-10 16:00:57
247
原创 遇到的有个性的面试题(不定时更新)
Q1. RR级别下能解决幻读嘛 A1:平常情况下RR存在幻读问题;但在InnoDB下,幻读是可以解决的,但解决的不是很完美。 首先是可以通过加锁阻塞另一个线程的insert,也就是next-key。也也可以通过MVCC快照读,但MVCC存在一定的缺陷,也就是一旦某个事务的修改曹组覆盖到了其他事务的插入的“幻行”,就还是会出现幻读现象。 ...
2021-08-24 10:03:43
157
原创 多线程之锁
提高锁性能 减少锁持有时间 减小锁粒度 用读写分离所代替独占锁 锁分离 锁粗化:把多个锁的操作整合成对锁的一次请求,减少对锁的请求的次数。 锁优化 锁偏向:对加锁的优化:如果一个线程获得了锁,那么锁就进入偏向模式。当这个线程再次请求锁事,无需再做任何同步操作。所以几乎没有锁竞争场合。 -XX:+UseBiastedLocking 开启偏向锁。 但是当在竞争激烈的场合,即每次都是不同的线程请求相同的锁,这时候偏向锁就会失败。 轻量级锁:偏向锁失败,线程不会立即挂起,而是使用轻量级锁进行优化。 ...
2021-08-11 15:55:15
136
原创 多线程知识点整理
多线程基础并发相关概念死锁饥饿活锁并发级别JMM:java的内存模型指令重排进程 VS 线程线程的生命周期 基础 并发相关概念 并行与并发: 并行:表示两个或多个任务一起执行; 并发:多个任务交替执行。 临界区 临界区表示一种公共资源或者共享数据,可以被多个线程使用,但每次只能有一个线程使用它。临界区一旦被占用,其他线程就必须等待这个资源的释放。 阻塞和非阻塞 阻塞:线程等待资源释放,就是被阻塞了。 非阻塞:没有一个线程可以妨碍其他线程的执行。 死锁 只两个或两个以上的线程在执行过程中,因为争夺
2021-08-10 15:22:04
241
原创 JVM知识点整理
这里写目录标题java运行时区域线程私有区域线程共享区域其他说明对象的创建过程垃圾收集器和内存分配策略判定对象存活的方法关于引用判断对象死亡的过程方法区的回收垃圾回收算法垃圾收集器 java运行时区域 线程私有区域 程序计数器 程序计数器线程私有的,可以看做是当前线程所执行的字节码行号指示器。字节码解释器工作时就是用过这个程序计数器来选取下一条执行的字节码指令。因为一个处理器只能执行一个线程,所以线程切换时就是通过程序计数器来恢复到正确的执行位置。 如果线程正在执行一个java方法,这个计数器记录的是正
2021-08-03 16:05:53
149
原创 Redis数据结构
SDS:简单动态字符串 数据结构: 杜绝缓存溢出: 当需要对SDS进行修改时,会先检查SDS的空间是否满足要求,如果不能,就会自动将SDS的空间扩展至所需大小,在执行修改工作。 内存分配策略 3.1 空间预分配(用于优化SDS的增长操作) 如果SDS空间需要扩展,redis不仅会给SDS分配所需的空间,还会额外分配未使用的空间。未使用空间的大小由SDS的长度决定。如果SDS长度小于1MB,则未使用空间free = 使用空间len;如果大于1MB,则每次分配1MB的未使用空间。 3.2 惰性空间释放(用于
2021-08-02 10:27:37
160
原创 Mysql面试题整理
Q1. MVCC是什么?如何实现? A1. MVCC:多版本并发控制。MVCC维持一个数据的多个版本,使得读写没有冲突。 MVCC的实现依赖于:3个隐式字段+undo日志+Read View 3个隐式字段: DB_TRX_ID:最近修改(包括插入的)事务ID,记录创建这条记录或者最后一次修改该记录的事务ID; DB_ROLL_PTR:回滚指针。指向这条记录的上一个版本。 DB_ROW_ID:隐含的自增ID(隐藏主键)。如果数据表没有主键,InnoDB会自动以DB_ROW_ID产生一个聚簇索引。 还有一个删
2021-07-27 18:50:13
271
原创 Java反射的学习
反射的概念 java类的执行过程 编译:java文件通过编译生成一个.class文件。 加载:通过类的权限定名获取定义此类的二进制流;将这个字节流所代表的静态存储结构转换成方法区的运行时数据结构;在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个累的各种数据的访问入口。 连接-------------------------------------------- 验证:文件格式的验证;元数据验证;字节码验证;符号引用验证。验证字节流是否符合class文件规范,描述的信息是否符合
2021-07-27 13:32:55
113
原创 动态代理学习
静态代理 代理模式概念:就是为其他对象提供了一个代理,用来控制对某个对象的访问。代理类主要负责为委托类(被代理类)预处理信息、传递消息给被代理类以及事后的时间处理等。 动态代理 动态代理是在运行时创建代理类。 相关说明: 代码例子: public interface Person { void work(); } public class Actor implements Person{ @Override public void work() { Syst
2021-07-27 09:37:58
160
原创 计算机网络——应用层协议
应用层协议DNS域名结构域名解析过程HTTP协议URL & URI请求与响应HTTPS DNS DNS是一个分布式数据库。用于映射域名和IP地址,使人方便访问网址。有三个组成部分:域名空间和资源记录+域名服务器+解析器 DNS是基于TCP和UDO协议的:用户到服务器采用UDP协议;DNS服务器通信采用TCP协议; 域名结构 域名层次 例子 顶级域名 com ; net ; gov ; org ; edu … 二级域名 cctv; baidu; 360; google …
2021-07-22 13:31:13
436
1
原创 计算机网络——传输层协议
传出层协议TCPTCP的基本认识三次握手TCP四次挥手TCP相关 TCP TCP的基本认识 报文格式 TCP特点 TCP是一个面向连接的、可靠的、基于字节流的传输层通信协议。 Q1:有一个 IP 的服务器监听了一个端口,它的 TCP 的最大连接数是多少? 最大TCP连接数 = 客户端IP数 * 客户端的端口数; 但限制于文件描述符和内存 三次握手 三次握手原因: 可以阻止历史重复连接的初始化(主要原因): 由于网络延迟等复杂的原因,使得旧的数据包比新的数据包先到达,这是三次握手情况下,服务端接收到
2021-07-20 16:40:15
549
1
原创 计算机网络——网络层协议
ICMPICMP协议报文格式ICMP类型查询报文类型ping命令查询报文类型应用实现:trancerouteIP协议ARP,RARP协议 ICMP协议 概念:(Internet Control Message Protocol)网络控制报文协议:用于IP主机、路由器之间传递控制信息。即IP包是否送达目的主机,或者IP包在送达过程中被抛弃的原因和改善网络设置等。 报文格式 ICMP报文包含在IP数据包中,格式一般为:IP包头+ICMP报文 ICMP类型 ICMP类型可以分为差错报文类型 和 查询报文类型
2021-07-19 15:26:35
247
原创 MySQL——查询性能优化
慢查询优化1:优化数据访问 从两个方向考虑: 确认应用程序是否存在检索大量超过需要的数据 确认MySQL服务器是否在分析大量超过需要的行数据 是否向数据库请求了不需要的数据. 典型案例 查询不需要的数据:MySQL会先返回全部结果再进行计算,看上去像是只返回了需要的数据 多表关联时返回全部的列:一般用不到全部的列,只取我们需要的列 总是去除全部列:喜欢用select * 是一个不好的习惯! 重复查询相同的数据:可以将重复使用的数据缓存起来 MySQL是否在扫描额外的记录
2021-07-15 15:57:19
137
原创 MySQL——索引
索引的类型 B-Tree索引 索引在没有特别指明时,一般指B-Tree索引。 B-Tree适用于: · 全值匹配:和索引中所有的列进行匹配; · 匹配最左前缀: 和索引的第一列进行匹配; · 匹配列前缀:可以只匹配某一列的值得开头部分; · 匹配范围值: 可以匹配某一列的一个范围; · 精确匹配某一列 且 范围匹配另外一列。 限制: 必须从最左列开始查找,且不能跳过索引中的某列,如果查询中有某个列是范围查询,则它右边的所有列都无法使用索引优化。 – B+树: 哈希索引 ...
2021-07-14 11:24:07
170
原创 MySQL——数据类型的优化
数据选择 更小的通常更好:占用的磁盘、内存、CPU更少; 简单就好,如整型比字符操作代价更低; 尽量避免NULL 尽量使用相同的数据类型存储相似或相关的值,尤其是关联条件使用的列。 具体说明 整型:TINTINT SMALLINT MEDIUMINT INT BIGINT分别使用8,16,24,32,64位内存。对于存储和计算来说,指定大小是没有意义的。 实数类型:DECIMAL FLOAT DOUBLE :DECIMAL支持精确计算,占用空间较大,相对而言,FLOAT 和DOUBLE占用的空间较小,在
2021-07-12 16:31:30
298
原创 Redis设计与实现——Redis的发布与订阅
目录订阅频道——SUBSCRIBE模式订阅——PSUBCRIVE发送消息查看订阅信息: 订阅频道——SUBSCRIBE struct redisServer{ ... dict *pubsub_channels } 字典的键是某个被订阅的频道,字典的值是一个链表,记录所有订阅这个频道的客户端。 订阅命令 SUBSCRIBE 退订命令:UNSUBSCIRBE 如果某个频道对应的值为NULL,即没有客户端了,就会被删除这个键。 模式订阅——PSUBCRIVE strcut redisServer{
2021-07-08 15:38:26
205
原创 Redis设计与实现——Redis集群
集群相关概念节点槽指派键与槽的关联重新分片ASK错误 相关概念 集群:由一个或多个节点组成的,是Redis提供的分布式数据库方案。集群通过分片来进行数据共享,并提供复制和故障转移功能。 节点:一个集群模式下的Redis服务器。 槽:整个集群数据库分为16384个槽 节点 节点通过握手和响应握手来组成一个集群 通过CLUSTER NODES 可以查看集群节点信息。 节点启动 Redis服务器在启动时根据 cluster-enable来决定是否开启集群模式。 相较于普通的服务器,节点会将集群模式下需要的数据
2021-07-08 14:54:30
557
原创 Redis设计与实现——Redis Sentinel(哨兵)
概念 由一个或者多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器。并在被监视的主服务器进入下线状态时,自动将下线的主服务器属下的某个从服务器升级为新的主服务器,并由这个新的主服务代替已下线的主服务器继续处理命令请求。如果已下线的前主服务回复上线,则会被降级这新的主服务器的从服务器。 一个Sentinel可以监视多个主服务器,一个主服务器也可以被多个Sentinel监视。 Sentinel的初始化 初始化服务器:Sentinel本质上是一个特殊模
2021-07-02 16:26:41
298
原创 Redis设计与实现——Redis主从复制
主从复制概念复制实现旧的复制实现(2.8以前)新的复制实现复制的实现 概念 主从服务器:假设有两台服务器,分别为:127.0.0.1:12345和127.0.0.1:6379 127.0.0.1:12345> SLAVEOF 127.0.0.1:6379 OK 通过SLAVEOF命令,使得127.0.0.1:12345成为127.0.0.1:6379从服务器。即此时: 从服务器(slave):127.0.0.1:12345 主服务器(master):127.0.0.1:6379 2. 从服务器复
2021-07-01 15:04:48
141
原创 Redis设计与实现——Redis服务器
服务器命令请求过程具体实现过程serverCron函数初始化服务器 命令请求过程 以SET命令为例 客户端向服务器发送:SET key value;——> 服务端接收并处理请求,并产生OK命令; ——> 服务端向客户端发送命令回复OK;——> 客户端接收并打印 具体实现过程 客户端发送请求命令 服务器执行命令 服务端将命令回复发送给客户端 serverCron函数 serverCron函数默认每隔100ms执行一次 更新服务器时间缓存 struct redisSe
2021-06-30 15:32:15
257
原创 Redis设计与实现——Redis客户端
客户端客户端通用属性普通客户端的创建于关闭伪客户端 客户端 struct redisServer{ …… list *clients; …… } 通用属性 typedef struct redisClient{ …… //通用属性 int fd robj *name int flags sds querybuf robj **argv int argc struct redisCommand *cmd char buf[REDIS_REPLY_CHUNK
2021-06-29 16:44:22
324
原创 Redis设计与实现——Redis 事件
事件文件事件概念文件事件处理器文件事件的类型文件事件处理器时间事件分类组成实例:serverCon函数事件的调度与执行 文件事件 概念 Redis服务器通过套接字与客户端(或者其他Redis服务器)进行链接,而文件事件就是服务器对套接字操作的抽象。服务器与客户端(或其他Redis服务器)的通信会产生相应的文件事件,而服务器则通过监听并处理这些事来完成一系列网络通信操作。 文件事件处理器 用于处理网络事件,以单线程方式运行。 组成部分:套接字 + I/O多路复用程序 + 文件事件分派器 + 事件处理器。 I/
2021-06-29 15:23:25
166
原创 Redis设计与实现——Redis 持久化
持久化Redis持久化概念: Redis持久化 概念: 什么是持久化: 因为Redis是内存数据库,它将自己的数据库状态存储在内存中,如果进程一旦退出aaa
2021-06-28 15:57:04
169
原创 Redis设计与实现——Redis 数据库知识点整理
Redis 数据库知识点整理Redis 数据库整理1. Redis服务器默认创建16个数据库2. 切换数据库3. 数据库中值得保存——以键值对形式保存4. 读写键空间时的维护操作5. 键的生存时间和过期时间6.过期键的判定:7.过期键的删除策略 Redis 数据库整理 1. Redis服务器默认创建16个数据库 db 是一个数组,保存服务器中所有的数据库 dbnum 表示需要创建的数据库数量 2. 切换数据库 SELECT 2 //表示选择的数据库 这时,clientServer中的db就会指向db[
2021-06-25 16:56:12
385
原创 Redis学习一
Redis学习 Redis的作用: 用作缓存:与Memcached相比,首先Redis支持的数据类型更丰富;第二Redis支持数据持久化;第三:Reids有灾难恢复机制;第四:Memcached 过期数据的删除策略只用了惰性删除,而 Redis 同时使用了惰性删除与定期删除。 事件发布或订阅 高速队列 Redis数据结构: 基本数据类型:String ; Hash ; Set ; List ; SortedSet;bitmap 其他: HyperLogLog; Geo; Pub/Sub Redis Mo
2021-06-08 16:19:58
128
原创 String, StringBuffer, StringBuilder区别
String, StringBuffer, StringBuilder 1.String String具有不可变性,是固定长度的,底层是用final修饰的char型数组: String设置为不可变原因: 1.1 运行时常量池的需要:如果常量池已存在所需string数据,就可以直接调用而不需要重新创建,从而节省了空间。 1.2 可以保证String数据的hashcode是唯一的。 1.3 String的不可变可以使得多个线程共享而不会出现问题,保证了线程安全。 1.4 平时我们需要的登录用户名,密码也不会
2021-03-24 14:21:59
141
原创 基于XML的MyBatis的环境搭建(IDEA)
基于XML的MyBatis的环境搭建(IDEA)主要步骤可概括为创建一个Maven导入依赖编写你一个你需要的实体类和一个持久层接口编写一个SqlMapConfig.xml编写映射配置文件编写测试类测试 学习了黑马的mybatis第一天总结 主要步骤可概括为 创建一个Maven 这里选择maven,然后直接点击next 填入自己的工程名,点击Finish,一个maven工程就创建好了。 导入依赖 在pom.xml中,导入需要的依赖。 编写你一个你需要的实体类和一个持久层接口 以User为了(为了实现对数
2020-11-09 14:18:35
312
原创 java 实现mysql 8.0 链接(错误解决)
java实现mysql 8.0链接 一开始的时候,驱动仍旧选择了5.0+的旧版本,导致出现错误!! 这是因为MySQL8.0 版本的身份验证方式为“caching_sha2_passwoed”,而MySQL 5.0 使用的身份验证方式为“mysql_native_password” 然后网上查到这个原因之后,我就下载了8.0的驱动: 下载链接: 链接:https://pan.baidu.com/s/1Dl8Qcxg1gudVHaDA088bsg 提取码:3b05 然后将驱动5.0换成了这个版本; 之后我又
2020-06-11 11:32:43
387
原创 LeetCode 1313题
LeetCode解题 第1313题 解压编码列表题目:给你一个以行程长度编码压缩的整数列表 nums 。自己的思路:别人家的代码 ——简洁高效! 题目:给你一个以行程长度编码压缩的整数列表 nums 。 考虑每对相邻的两个元素 [freq, val] = [nums[2i], nums[2i+1]] (其中 i >= 0 ),每一对都表示解压后子列表中有 freq 个值为 val 的元素,你需要从左到右连接所有子列表以生成解压后的列表。 请你返回解压后的列表。 来源:力扣(LeetCode) 链接:h
2020-05-22 15:51:46
301
原创 LeetCode解题1365
leetcode 解题 第1365题,有多少小于当前数字的数字题目:给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。第一种思路:第一直觉(暴力解决!!)第二种思路:看了别人的解答,高效好用! 题目:给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。 换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。 以数组形式返回答案。
2020-05-22 15:40:25
480
原创 力扣题目,宝石与石头
宝石与石头宝石与石头题目及思路我的答案官方答案 宝石与石头 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 题目及思路 给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。 J...
2020-01-09 08:58:00
243
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅