python高级语法
高级语法 1 浅拷贝与深拷贝 拷贝是 Python 中数据复用的核心手段,核心差异在于是否复制嵌套对象,直接决定数据独立性。理解拷贝机制能避免开发中因数据共享导致的意外修改问题。 1.1 核心概念与适用场景 拷贝类型 核心特点 内存机制 适用场景 直接赋值 仅传递引用,不产生新对象 多个变量指向同一内存地址 无需数据独立,共享原始数据(如只读配置) 浅拷贝 拷贝父对象,嵌套子对象仍共享引用 顶层对象新地址,嵌套对象同地址 单层数据结构(如扁平列表),无需修改嵌套内容 深拷贝 完全拷贝父对象及所有子对象 顶层 + 嵌套对象均为新地址 嵌套数据结构(如列表套字典),需完全独立修改 1.2 浅拷贝实现方式 浅拷贝有 3 种常用实现方式,效果完全一致,可根据场景选择: 切片操作:list2 = list1[:](仅适用于序列类型,如列表、元组) 工厂函数:list2 = list(list1)、set2 = set(set1)(支持序列和集合) copy模块:list2 = copy.copy(list1)(通用型,支持所有可拷贝对象) 1.3 浅拷贝实战...
python线程与进程
进程与线程 程序 (Program):存放在磁盘上的静态指令和数据的集合,是“死”的、尚未运行的代码。 进程 (Process):程序的一次执行实例。操作系统为其分配独立的内存和资源,是系统进行资源分配和调度的基本单位。 线程 (Thread):进程内部的一条执行流,是 CPU 调度的最小单位。同一进程的多个线程共享其资源,并发执行不同任务 进程与线程均可以处理一个任务 1 核心概念:并发与并行 在多任务处理中,并发和并行是两个易混淆但核心的概念,直接决定程序的执行效率和资源利用方式: 1.1 并发(Concurrency)指软件/逻辑层面的任务管理 定义:单个 CPU 核心交替处理多个任务,通过快速切换营造 “同时执行” 的假象。 本质:任务轮流占用 CPU 资源,同一时刻只有一个任务在执行。 适用场景:I/O 密集型任务(如文件读写、网络请求),任务大部分时间在等待外部资源响应。 示例:一个服务员同时接待多个顾客,轮流为每个顾客点单、上菜。 1.2 并行(Parallelism)指硬件层面的真实同时执行 定义:多个 CPU 核心同时处理多个...
python模块与包
模块化与包 1 模块概述 Python 中一个以.py结尾的源文件即为一个模块(Module),内部可包含变量、函数、类、常量等代码实体。将特定功能的代码封装为模块,核心价值在于: 复用性:编写一次可在多个项目中导入使用,避免重复编码 可维护性:单个模块聚焦单一功能,便于调试和迭代 命名隔离:不同模块中可存在同名函数 / 变量,互不干扰 工程化:大型项目通过模块拆分实现分工协作,降低复杂度 模块名遵循标识符命名规则,严禁与 Python 标准库(如os、sys)或第三方库重名,否则会引发命名冲突。 2 模块创建 模块名区分大小写,且不能与 Python 自带的标准模块重名。 命名总结 12345678标准 Python 代码中仍推荐使用蛇形命名法-模块名:module_name.py-函数名:function_name-变量名:variable_name-常量名:CONSTANT_NAME只有类名使用大驼峰-类名:ClassName但是,与其他语言或系统配合时,经常会看到数据命名以小驼峰式命名。所以有些人(尤其是掌握多种语言的人)在写的过程中,可能会习惯性的使用小驼峰式,是可...
Vue
环境配置 下载Node 18.x 配置环境变量:NODE_HOME:C:\WORK\node-v18.14.0-win-x64,NVM_HOME 使用node -v、nvm -v验证 启动ui界面在powershell中vue ui 项目配置信息:package.json 123456789101112131415161718192021222324{ "name": "my-bank-admin-vue2", "version": "0.1.0", "private": true, "scripts": { "dev": "vite", "serve": "vue-cli-service serve", "build": "vue-cli-service build", "lint": "vue-cli-service lint" }, "dependencies": { "vue": "^2.7.0", // Vue 2 核心 "vue-router": "^3.6.5", ...
k8s
概念 Node 一个节点就是一个物理机或者虚拟机 Pod 如图所示:在一个node中有APP应用程序、数据库应用程序 pod是k8s中的最小调度单元,它由node进行管理,一个node中可以有一个或者多个容器的组合。创建之后,k8s一般会给它们分配一个内部的ip地址,注意外部是访问不了的 一般情况下,建议一个pod中只运行一个容器,这样可以更好的实现应用程序的解耦和扩展 如图所示:pod如果发生故障的时候,k8s会销毁故障的pod,重新创建一个新的pod,此时ip地址会发生改变,如果还按照原来的ip进行访问的话,就会发生错误。k8s为了解决这个问题,引入了一个叫做Service的资源对象。 Service Service简称svc svc可以作为pod之间的通讯桥梁。svc将APP应用程序和数据库应用程序分成了两个部分,APP应用程序通过svc来访问数据库。数据库的pod做了集群,当某一个pod故障了,即使这个pod的ip地址发生了变化,svc会将请求发送到其他正常的pod上,因为svc的ip地址不会变 内部服务、外部服务 内部服务:不想暴露给外面的一些...
Java集合八股文
概念 数组和集合的区别 数组是固定长度的数据结构,一旦创建长度就无法改变,而集合是动态长度的数据结构,可以根据需要动态增加或减少元素。 数组可以包含基本数据类型和对象,而集合只能包含对象。 数组可以直接访问元素,而集合需要通过迭代器或其他方法访问元素。 说一说Java中的集合? 常见的List: ArrayList:是容量可变的非线程安全列表,它的底层使用数组实现。当几何扩容时,会创建更大的数组,将原数组复制到新数组。ArrayList支持对元素的快速随机访问,但是插入与删除速度很慢。 LinkedList:本质是一个双向链表,与ArrayList相比,其插入和删除速度更快,但随机访问速度更慢。 Set不允许存在重复元素,与List不同,Set中的元素是无序的,常见的Set: HashSet:通过HashMap实现,HashMap的Key即HashSet存储的元素,所有Key都是用相同的Value,一个Object类型常量。使用Key保证元素唯一性,但不保证有序性。由于HashSet是HashMap实现的,因此线程不安全。 LinkedHashSet:继承自Hash...
Redis八股文
Redis为什么这么快? 基于内存 io 多路复用:一个线程可以管理多个IO网络请求,内置多个API可以监听多个IO请求 单线程架构 为什么是单线程而不是多线程? Redis是内存数据库,性能瓶颈是在内存与网络IO延迟 用单线程极大减少了多线程的上下文切换和锁的竞争 持久化机制 数据结构优化 Redis穿透&击穿&雪崩 穿透 当客户端请求的 key 在 缓存里找不到,而且 数据库里也没有,就会导致每次请求都绕过 Redis 直击数据库 出现的场景: 恶意/异常请求:爬虫、攻击脚本随机构造ID = 99999,但是Redis缓存中没有,导致数据库被频繁打醒 用户传参异常:用户手滑将Id = -1传入,没有击中缓存和数据库 防护措施: 布隆过滤器把所有合法 ID 的集合(或 hash)先“塞”进布隆过滤器;当请求进来先问布隆:“这个 key 可能存在吗?” 优点:大幅削减不可能存在的请求 缺点:有极小误判率,需要定期同步全量数据 缓存空值/占位符 数据库里也没有?那就把 “没有” 这个事实也缓存起来 1234// 查库后发现nullred...
MySQL八股文
存储引擎及架构 数据库的三大范式 第一范式:字段必须是原子性,不能再分 第二范式:每个非主属性必须完全依赖于主键,消除部分依赖 第三范式:非主键之间不能有依赖关系,消除传递依赖 关系型数据库区别 关系型数据库:复杂的数据结构归结为简单二维表格形式 MySQL、Oracle 非关系型数据库:将数据存储为键值对集合,其中键作为唯一标识符 Redis、MongoDB SQL四大类语言 DDL:建库建表、改结构,典型语句:CREATE / ALTER / DROP / TRUNCATE DML:增删改数据行,典型语句:INSERT / UPDATE / DELETE DQL:查数据,典型语句:SELECT DCL:权限/账户控制,CREATE USER / DROP USER 内部架构及作用 连接器:不同语言与数据库进行交互,如java,php 系统管理和控制工具:涵盖:运维监控、数据维护、性能优化、安全管控四大核心场景 连接层 连接时会优先加载全局权限和数据库级权限 连接过程是一个TCP长连接,MySQL服务器和客户端通讯是“半双工”,只能单方面发送...









