摘要:
传统的读写文件 一般来说,修改一个文件的内容需要如下3个步骤: 把文件内容读入到内存中。 修改内存中的内容。 把内存的数据写入到文件中。 如果使用代码来实现上面的过程,代码如下: read(fd, buf, 1024); // 读取文件的内容到buf ... // 修改buf的内容 write(fd
阅读全文
posted @ 2024-07-10 21:49
Duancf
阅读(92)
推荐(0)
摘要:
什么是数据复制/数据拷贝(Copy)? 拷贝(Copy)数据,主要包括两种:CPU拷贝/ DMA拷贝。 第一类拷贝:CPU 拷贝(CPU Copy) 在 CPU 拷贝中,数据的传输是由中央处理器(CPU)直接进行的。当数据需要从一个内存区域拷贝到另一个内存区域时,CPU 首先将数据从源内存区域读取到
阅读全文
posted @ 2024-07-10 10:01
Duancf
阅读(352)
推荐(0)
摘要:
SQL优化 避免使用select * 很多时候,为了方便,喜欢直接使用select *,一次性查出表中所有列的数据。 反例: select * from user where id=1; 在实际业务场景中,可能我们真正需要使用的只有其中一两列。查了很多数据,但是不用,白白浪费了数据库资源,比如:内存
阅读全文
posted @ 2024-07-09 21:36
Duancf
阅读(45)
推荐(0)
摘要:
反射 获取任意对象的数据 对对象一无所知的情况下 public class Student { private String name; private Integer age; public Student(String name, Integer age) { this.name = name;
阅读全文
posted @ 2024-07-09 19:27
Duancf
阅读(21)
推荐(0)
摘要:
拷贝类型 引用拷贝,浅拷贝,深拷贝 引用拷贝 在Java中,对象的引用拷贝是指将一个对象的引用赋值给另一个变量。通过引用拷贝,两个变量将指向同一个对象,它们共享同一块内存空间。当修改其中一个变量指向的对象时,另一个变量也会受到影响。 下面是一个简单的示例代码,演示了对象引用拷贝的概念: public
阅读全文
posted @ 2024-07-09 19:26
Duancf
阅读(38)
推荐(0)
摘要:
面向对象 访问控制修饰符 Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。 public : 对所有类可见。使用对象:类、接口、变量、方法 protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部
阅读全文
posted @ 2024-07-09 19:25
Duancf
阅读(45)
推荐(0)
摘要:
懒汉式 public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) {
阅读全文
posted @ 2024-07-09 19:18
Duancf
阅读(19)
推荐(0)
摘要:
很多人说BIO不好,会block,但到底什么是IO的Block呢?考虑下面两种情况: 用系统调用read从socket里读取一段数据 用系统调用read从一个磁盘文件读取一段数据到内存 如果你的直觉告诉你,这两种都算Block,那么很遗憾,你的理解与Linux不同。Linux认为: 对于第一种情况,
阅读全文
posted @ 2024-07-09 19:13
Duancf
阅读(83)
推荐(0)
摘要:
锁 锁的分类 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁 公平锁/非公平锁 公平锁是指多个线程按照申请锁的顺序来获取锁。 非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。有
阅读全文
posted @ 2024-07-09 19:10
Duancf
阅读(20)
推荐(0)
摘要:
public class AtomicTest01 { public static int i = 0; public static void main(String[] args) { Runnable task = new Runnable(){ @Override public void ru
阅读全文
posted @ 2024-07-09 19:08
Duancf
阅读(19)
推荐(0)
摘要:
HashMap 建议使用不可变对象作为Key,终极目的就是避免hashcode的改变 HashMap的数据结构 HashMap是:数组+链表/红黑树(JDK1.8增加了红黑树部分) 数据底层具体存储的是什么? Node<k,v> 数据结构 // 默认初始容量(数组默认大小):16,2的整数次方 st
阅读全文
posted @ 2024-07-09 19:03
Duancf
阅读(63)
推荐(0)
摘要:
Java内存模型 概述 多任务处理在现代计算机操作系统中几乎已是一项必备的功能了。在许多场景下,让计算机同时去做几件事情,不仅是因为计算机的运算能力强大了,还有一个很重要的原因是计算机的运算速度与它的存储和通信子系统(磁盘io和网络io)的速度差距太大,大量的时间都花费在磁盘I/O、网络通信或者数据
阅读全文
posted @ 2024-07-09 17:17
Duancf
阅读(797)
推荐(0)
摘要:
CAP 理论 CAP 理论/定理起源于 2000 年,由加州大学伯克利分校的 Eric Brewer 教授在分布式计算原理研讨会(PODC)上提出,因此 CAP 定理又被称作 布鲁尔定理(Brewer’s theorem)。2 年后,麻省理工学院的 Seth Gilbert 和 Nancy Lync
阅读全文
posted @ 2024-07-08 20:36
Duancf
阅读(76)
推荐(0)
摘要:
一致性哈希解决了分布式系统在服务器节点动态伸缩时的数据迁移问题 一致性哈希算法(Consistent Hashing)最早在论文《Consistent Hashing and Random Trees: Distributed Caching Protocols for Relieving Hot
阅读全文
posted @ 2024-07-07 23:40
Duancf
阅读(58)
推荐(0)
摘要:
端口范围 1~65535知名端口(Well-Known Ports): 范围: 0-1023 用途: 分配给常用的服务和协议(如 HTTP、FTP、SSH 等)。这些端口通常由系统或根用户使用。 示例: HTTP: 80 HTTPS: 443 FTP: 21 SSH: 22 注册端口(Registe
阅读全文
posted @ 2024-07-07 23:09
Duancf
阅读(35)
推荐(0)
摘要:
建堆的两种方式 自上而下 这种方式的思路是,每插入一个节点,就向上比较,判断是否需要与其父节点进行交换, 分析这种方式的时间复杂度,假设树的高度为h,以下均考虑最坏情况,也就是每一个节点都调整到根 第一层的1个节点不需要调整 第二层的2个节点,每个节点向上调整1次,2*1, 第三层的4个节点,每个节
阅读全文
posted @ 2024-07-07 15:22
Duancf
阅读(16)
推荐(0)
摘要:
递归写法 class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right node1 = TreeNode(1) node2 =
阅读全文
posted @ 2024-07-07 15:09
Duancf
阅读(34)
推荐(0)
摘要:
 
阅读全文
posted @ 2024-07-07 11:37
Duancf
阅读(7)
推荐(0)
摘要:
持久化 Redis的数据全部在内存里,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证Redis的数据不会因为故障而丢失,这种机制就是Redis的持久化机制。 Redis的持久化机制有两种,第一种是快照,第二种是AOF日志(Append only file)。 快照是一次全量备份,AOF日志
阅读全文
posted @ 2024-07-06 23:32
Duancf
阅读(35)
推荐(0)
摘要:
字典扩容 Java 中的 HashMap 有扩容的概念,当 LoadFactor 达到阈值时,需要重新分配一个新的 2 倍大小的数组,然后将所有的元素全部 rehash 挂到新的数组下面。 rehash就是将元素的 hash 值对数组长度进行取模运算,因为长度变了,所以每个元素挂接的槽位可能也发生了
阅读全文
posted @ 2024-07-06 22:51
Duancf
阅读(120)
推荐(0)
摘要:
ZSet底层有两种实现,一种是ZipList,另一种是SkipList+HashTable
阅读全文
posted @ 2024-07-06 21:37
Duancf
阅读(38)
推荐(0)
摘要:
代理模式PROXY 静态代理 定义一个代理规范,规定代理和目标对象实现同样的方法 举个例子,银行柜员和银行都要有取钱的方法,我们才能通过银行柜员去取银行的钱 public interface Proxy { void withdraw(); } public class Bank implement
阅读全文
posted @ 2024-07-06 21:06
Duancf
阅读(24)
推荐(0)
摘要:
在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),localStorage中一般浏览器支持的是5M大小,这个在不同的浏览器中localStorage会有所不同。 二
阅读全文
posted @ 2024-07-06 19:02
Duancf
阅读(116)
推荐(0)
摘要:
HTTP 和 RPC 有什么区别,我们来看看 RPC 和 HTTP 区别比较明显的几个点。 服务发现 首先要向某个服务器发起请求,你得先建立连接,而建立连接的前提是,你得知道 IP 地址和端口。这个找到服务对应的 IP 端口的过程,其实就是服务发现。 在 HTTP 中,你知道服务的域名,就可以通过
阅读全文
posted @ 2024-07-05 21:50
Duancf
阅读(38)
推荐(0)
posted @ 2024-07-05 21:39
Duancf
阅读(14)
推荐(0)
posted @ 2024-07-05 17:00
Duancf
阅读(16)
推荐(0)
摘要:
多版本并发控制 MVCC MVCC 只在 读取已提交(Read Committed)和 可重复读(Repeatable Read)两个事务级别下有效, 依靠ReadView,undo log,记录的隐藏字段实现, 用一句话概括MVVC的原理就是,在创建事务或者select的时候生成readview快
阅读全文
posted @ 2024-07-05 14:15
Duancf
阅读(48)
推荐(0)
摘要:
事务 在理解事务的概念之前,接触数据库系统的其他高级特性还言之过早。事务就是一组原子性的SQL查询,或者说一个独立的工作单元。如果数据库引擎能够成功地对数据库应用该组查询的全部语句,那么就执行该组查询。如果其中有任何一条语句因为崩溃或其他原因无法执行,那么所有的语句都不会执行。也就是说,事务内的语句
阅读全文
posted @ 2024-07-05 14:12
Duancf
阅读(28)
推荐(0)
摘要:
地址转换 访问内存 内存 在程序中得到逻辑地址,先通过地址转换机构得到物理地址, 也就是通过查找页表找到对应的物理地址,请注意,这里有一个TLB用于加快查找页表的过程 页表中存储的是逻辑页和物理页的映射。物理页地址加上页内地址才是完整的地址 TLB中存储的是最近访问的页表项,如果TLB命中就停止去内
阅读全文
posted @ 2024-07-05 14:06
Duancf
阅读(37)
推荐(0)
摘要:
数据库优化 1)从设计层面,在数据库设计阶段需要遵从数据库设计的范式,避免冗余数据。对于大表,可以采用拆表的方式,将一个大表拆分为多个小表,减少单表的数据量。同时避免数据类型不当、字段过多等原因导致数据库查询效率降低。 2)从索引层面,需要优化索引的数量、字段选择、索引类型等。应该将经常查询的字段,
阅读全文
posted @ 2024-07-05 11:57
Duancf
阅读(84)
推荐(0)
摘要:
慢查询 如何找到慢查询语句 要找出项目中的慢查询语句,可以通过几种方法,主要取决于你使用的数据库系统。以下是一些通用的步骤和针对MySQL和PostgreSQL数据库的具体方法: 通用步骤: 启用慢查询日志:大多数数据库管理系统都支持慢查询日志,通过配置可以记录执行时间超过指定阈值的查询。 分析日志
阅读全文
posted @ 2024-07-05 11:56
Duancf
阅读(194)
推荐(0)
摘要:
Log undo log(回滚日志):是 Innodb 存储引擎层生成的日志,实现了事务中的原子性,主要用于事务回滚和 MVCC; redo log(重做日志):是 Innodb 存储引擎层生成的日志,实现了事务中的持久性,主要用于掉电等故障恢复; binlog (归档日志):是 Server 层生
阅读全文
posted @ 2024-07-05 11:55
Duancf
阅读(51)
推荐(0)
摘要:
MySQL索引详解 索引介绍 索引是一种用于快速查询和检索数据的数据结构,其本质可以看成是一种排序好的数据结构。索引的作用就相当于书的目录。打个比方: 我们在查字典的时候,如果没有目录,那我们就只能一页一页的去找我们需要查的那个字,速度很慢。如果有目录了,我们只需要先去目录里查找字的位置,然后直接翻
阅读全文
posted @ 2024-07-05 11:52
Duancf
阅读(35)
推荐(0)
摘要:
索引失效 https://mp.weixin.qq.com/s/mwME3qukHBFul57WQLkOYg 未遵循最左匹配原则 由于构建一棵 B+树只能根据一个值来确定索引关系,所以联合索引的B+树依赖联合索引最左侧的元素建立树结构。所以如果想要利用B+树进行数据筛选,必须要提供联合索引的最左列。
阅读全文
posted @ 2024-07-05 11:49
Duancf
阅读(43)
推荐(0)
摘要:
Explain执行计划分析 什么是执行计划? 执行计划 是指一条 SQL 语句在经过 MySQL 查询优化器 的优化后,具体的执行方式。 执行计划通常用于 SQL 性能分析、优化等场景。通过 EXPLAIN 的结果,可以了解到如数据表的查询顺序、数据查询操作的操作类型、哪些索引可以被命中、哪些索引实
阅读全文
posted @ 2024-07-05 11:48
Duancf
阅读(36)
推荐(0)
摘要:
GET post get不同之处 GET方法用于从Web服务器请求数据。 在使用GET方法时,浏览器向Web服务器发送一个请求,Web服务器将响应数据发送回浏览器。 GET方法是无状态的,也就是说每个请求都是独立的,没有前后关系。GET方法通常用于请求静态数据,如HTML页面、图片和CSS文件等。
阅读全文
posted @ 2024-07-05 11:37
Duancf
阅读(140)
推荐(0)
摘要:
常见状态码 HTTP状态码(响应码)是用来表示HTTP请求是否已经完成,HTTP状态类型一个分为五大类“消息响应、成功响应、重定响应、客户端错误”,所有状态码第一个数字代表了响应的五种状态之一。 概述 1xx (Informational) 信息性状态码,表示正在处理。 2xx (Success)
阅读全文
posted @ 2024-07-05 11:36
Duancf
阅读(703)
推荐(1)
摘要:
单点登录 在 B/S 系统中,登录功能通常都是基于 Cookie 来实现的。当用户登录成功后,一般会将登录状态记录到 Session 中,或者是给用户签发一个 Token,无论哪一种方式,都需要在客户端保存一些信息(Session ID 或 Token ),并要求客户端在之后的每次请求中携带它们。
阅读全文
posted @ 2024-07-05 11:31
Duancf
阅读(81)
推荐(0)
摘要:
JWT 头部(Header) 头部用于描述关于该 JWT 的最基本的信息,例如其类型以及签名所用的算法等,也可以被表示成一个 JSON 对象。例如: {"typ":"JWT","alg":"HS256"} 在头部指明了签名算法是 HS256 算法。 经过 Base64 编码得到:eyJ0eXAiOi
阅读全文
posted @ 2024-07-05 11:20
Duancf
阅读(45)
推荐(0)
摘要:
redis在项目中的主要作用 缓存,速度比较快 计数器,incr decr 消息队列,消息的订阅和发布机制 排行榜,zset 分布式锁,set 数据结构 String(emdstr,raw) List(quicklist) HashMap(hashtable ziplist) Set(intset
阅读全文
posted @ 2024-07-04 16:38
Duancf
阅读(21)
推荐(0)