-
云原生
什么是云原生?云原生是一种构建和运行应用程序的方法,它利用云计算的优势,使应用程序能够更好地适应云环境的动态性、弹性和分布式特性。云原生技术体系包含容器、容器编排、微服务、服务网格、不可变基础设施等一系列技术和理念。 弹性伸缩:能够根据业务负载的变化自动调整资源,实现快速的扩缩容,以确保应用程序始终能够以最佳性能运行 高可用性:通过多副本、故障转移等机制,保证应用程序在部分组件出现故障时仍能正常运行,提供持续的服务 敏捷开发与部署:支持快速迭代和频繁部署,开发团队可以更高效地进行应用...…
-
python + django + drf
python语法文件类型相关python 是动态类型语言,存在三种文件类型:python file、python unit test 和 python stub python file:普通的 Python 脚本文件,用于编写常规的 Python 代码,如业务逻辑、工具脚本、程序主体等 python unit test:专门用于编写单元测试的文件,通常与测试框架(如 unittest、pytest)配合使用,用于验证代码功能的正确性 python stub:存根文件(.pyi),用于...…
-
随便写写,感觉更像日记
前言暑期拿到了白月光腾讯的 offer,和面试我的三位面试官都聊的很开心,去实习前随便写点啥~4/17这一天先后加了leader 、hr 和 mentor 的微信,leader 超级热情!mentor 也有问必答4/18mentor 早上和我说看我博客主页背景和头像,发现我是 key 社粉丝,聊起了二次元哈哈哈哈,mt 本人也超级健谈,肯定会有一个不错的实习体验!虽然还没去上班,但组内氛围一定特别特别好,很想很想转正!!4/24翻到了 leader 的博客,看了好久发现 leader 居然...…
-
记录暑期和秋招
前言这篇博客用来记录本人暑期实习 + 秋招全过程,主要应该是面经吧,可能会有些其他的碎碎念。这篇博客的内容我在牛客也会同步更新:https://www.nowcoder.com/users/2098381512024/11/23写完点评项目,将点评 + 外卖缝合到一起,总结学过的技术栈与各种经历,完成第一版简历2024/12/01开始投递简历,总的投递公司数量不多,有:腾讯、字节、快手、百度、美团、小红书、小米后续:字节美团小米泡池子,快手投一次挂一次(听说是没有实习经历不给过简历,也可能...…
-
复盘总结
[TOC]OS 进程、线程和协程三者的区别?各自有什么优势? 进程是操作系统资源调度的基本单位,拥有独立的内存空间和系统资源。每个进程有独立的内存空间,互不干扰,创建和切换进程的开销比较大,进程间通信较复杂 线程是进程内的执行单元,共享进程的内存和资源。创建和切换线程的开销较小,但同步比较复杂 协程是用户态的轻量级线程,由程序员控制调度,无需操作系统介入。创建和切换协程的开销非常小,适合高并发的场景 线程同步方式有哪些? ...…
-
Redis 集群方案
1.主从复制经典的 一主多从 模式实现方案。就是将原来的一台 redis 服务器,同步数据到多台从 redis 服务器上,主从服务器之间采用的是 读写分离 的方式。主服务器可以进行 读写操作,当发生写操作时,自动将写操作同步给从服务器,从服务器一般是 只读 的,并接受主服务器同步过来的写操作命令。也就是说,所有的数据修改只在主服务器上进行,然后将最新的数据同步给从服务器,这样就达到主从一致。注意,主从服务器之间的命令复制是 异步 进行的。由于主从同步是 异步 的,这就导致了主从复制方案无法...…
-
OOMALL相关扩展思考
1.电商往往会涉及到资金的流转,在后端方面如何保证资金在电商平台上的安全? 如何确保用户账户、支付信息不被篡改或盗用? 可以采用双重身份验证,引入短信验证码、邮箱验证码进行二次验证 用户支付密码需要避免明文存储,可以采用 PBKDF2 或者 Argon2 哈希存储 防止暴力破解,限制支付密码输入错误次数,超过阈值后进行账户锁定或额外验证 ...…
-
分布式相关:CAP和BASE
1.CAP 理论CAP 原则又称为 CAP 定理,指的是在一个分布式系统中,Consistency(一致性) 、Availability(可用性) 、Partition tolerance(分区容错性) 这三个基本需求,最多只能同时满足其中的两个。那么 CAP 分别是什么? 一致性(C):数据在多个副本之间能够保持一致的特性 可用性(A):系统提供的服务一直处于可用的状态,每次请求都能获得正确的响应 分区容错性(P):分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性...…
-
Linux常用命令
1.文件与目录操作 命令 作用 使用场景 ls -lh 显示目录文件列表 查看文件大小、权限、修改时间等 cd 切换目录 进入代码目录、日志目录等 pwd 显示当前路径 确认当前工作目录 mkdir -p dir 创建目录 创建不存在的目录(含父级) ...…
-
RocketMQ
[TOC]消息队列为什么会出现?消息队列顾名思义就是存放消息的队列,我们需要理解的问题并不是消息队列是什么,而是消息队列为什么会出现?消息队列能用来干什么?会带来哪些好处和副作用?对于一个分布式应用,必定涉及到各个系统之间的通信问题,这个时候消息队列也应运而生了,可以说分布式的产生是消息队列的基础。消息队列能用来干什么?异步在刚开始学习分布式相关知识时,我们往往不太明白为什么好好的通信为什么中间非要插一个消息队列呢?我们不能直接进行通信吗?如果我们的应用之间直接进行通信,就会涉及到一个概念...…
-
TCP超时重传机制的底层原理
什么是 TCP 的超时重传?我们先回顾一下 TCP 的三个特点:面向连接、可靠、基于字节流,那么 TCP 的可靠传输是如何实现的呢?超时重传机制就是保证 TCP 可靠传输的一种手段。超时重传能确保数据在传输过程中,即使因为丢包、网络延迟或其他原因导致数据包没有成功到达接收方,依然能够重新发送,从而实现可靠的数据传输。通俗来讲,超时重传就是发送方在发送数据后,会等待接收方的确认(回传的 ACK 报文)。如果没有在规定的时间内收到确认,就会重新发送数据包。注意:ACK 报文是不会重传的。超时重...…
-
RPC vs HTTP
HTTP 协议和 RPC 协议是两种广泛使用的通信协议,它们在分布式系统、微服务架构和跨语言应用中扮演着重要角色。这两种协议有一个共同的特点:它们都是由 TCP 协议 衍生而来的。从 TCP 聊起在日常开发中,常常会遇到网络编程,比如我们需要在 A 电脑的进程发一段数据给 B 电脑的进程,我们一般都会在代码里使用 Socket 进行编程。大多数情况下,可选项就两个:TCP 和 UDP 。这两个协议的区别简单来讲:TCP 可靠,UDP 不可靠。所以只要我们的程序对可靠性有些要求,无脑选 TC...…
-
微服务体系结构、Nacos和熔断器
微服务四大设计原则独立部署每个微服务都应该能够独立部署、升级和扩展,而不影响其他微服务的正常运行。独立部署使得微服务架构能够灵活应对变化,无论是业务需求变化、性能优化,还是技术更新,都能以最小的代价进行。 减少系统间的依赖:一个微服务的更新或部署不会影响到其他服务,避免了传统单体应用中常见的“大规模部署”问题。 更高的开发和运维效率:可以根据需求,独立迭代、测试和发布某个微服务。 弹性扩展:某些高负载的微服务可以独立扩展,其他微服务不受影响。比如,在一个电商系统中,订单服务和支付服务...…
-
Go基础学习笔记
[TOC]主要特征 语法简单,自带 gc 静态编译,编译好后在服务器直接运行 简单的思想,没有继承、多态、类等 语法层支持并发,拥有同步并发的 channel 类型,使并发开发变得非常方便 内置类型丰富,函数多返回值 反射Golang 内置类型和函数内置类型值类型boolint(32 or 64), int8, int16, int32, int64uint(32 or 64), uint8(byte), uint16, uint32, uint64float32, float...…
-
什么是强引用、软引用、弱引用和虚引用?
1. 强引用(Strong Reference)强引用是最普通的引用,比如 Object obj = new Object();。只要强引用存在,对象就不会被垃圾回收。强引用特点: 绝不回收:只要强引用存在,即使内存不足(OOM),JVM 宁可抛出内存错误,也不回收对象。 常见场景:日常代码中的普通对象都是强引用。2. 软引用(Soft References)软引用通过 SoftReference 类实现,比如 SoftReference<Object> softRef =...…
-
死锁产生的条件?如何诊断死锁?
死锁产生的条件在操作系统中,死锁只有同时满足以下四个条件才会发生: 互斥条件 持有并等待条件 不可剥夺条件 环路等待条件在 java 程序中,由于 java 自带线程,因此自己编写的两条线程也可能出现死锁的情况。具体而言,java 程序里死锁产生的条件是两条线程分别持有两个锁,并且都在尝试获取对方所持有的锁,这样就造成了死锁。以下面的程序为例:public class Main { public static void main(String[] args) { ...…
-
在MySQL集群中,在从库已经读到了最新值的情况下,主库还有可能读到旧值吗?
参考:https://golangguide.top/对于 MySQL 数据库,为了得到更高的性能,一般会搭建 MySQL 集群实现读写分离,主库用于写操作,从库用于读操作。虽然主库一般用于写,但也是能读的。那么就有这样一个问题:在 MySQL 集群中,在从库已经读到了最新值的情况下,主库还有可能读到旧值吗?正常的主从更新流程假设在主库和从库中都有一张 user 表,此时有以下数据: id name age 1 ...…
-
线程崩溃后为什么不会导致 JVM 崩溃?
要弄明白这个问题,我们从以下几点进行分析: 线程崩溃后,进程一定会崩溃吗? 进程是如何崩溃的?——信号机制简介 为什么在 JVM 中线程崩溃不会导致 JVM 进程崩溃?线程崩溃后,进程一定会崩溃吗?一般来说如果线程是因为非法访问内存引起的崩溃,那么进程肯定会崩溃。这主要是因为在进程中,各个线程的地址空间是共享的,既然是共享,那么某个线程对地址的非法访问就会导致内存的不确定性,进而会影响到其他线程,可能导致一系列严重的后果,于是操作系统干脆让整个进程崩溃。在一个进程中,所有的线程共享代...…
-
一致性哈希
1. 什么是一致性哈希?一致性哈希是一种特殊的哈希算法,主要用于分布式系统中,用于将数据分配到多个节点上,保证数据在节点变动时能够尽可能少地重新分配,提高系统的稳定性和扩展性。它的核心思想是通过将数据和节点映射到一个虚拟的环形空间(哈希环)中,根据数据的位置决定存储在哪个节点上。当节点发生增删时,尽量减少数据的迁移量。2. 背景与问题在分布式系统中,数据存储在多个服务器(节点)上,为了实现负载均衡,我们通常需要通过哈希算法将数据映射到不同的节点。例如:传统的哈希分布:假设有 4 个服务器节...…
-
Docker 和虚拟机的区别?Docker 是如何实现隔离的?
1. 两者的区别是什么?首先,Docker 和虚拟机(Virtual Machine, VM)都是用来实现隔离和资源管理的技术,主要目的是让不同的应用程序能够运行在相互独立的环境中,互不干扰。但它们的实现方式、性能和使用场景有很大的区别。我们用独立的房子和公寓大楼来类比着理解 Docker 和虚拟机的区别: 虚拟机:可以把虚拟机比作一套完整的“独立房子”: 每个虚拟机都像一栋完整的房子,带有自己的地基(操作系统内核)、墙(硬件模拟)和房间(运行的应用程序)。 ...…