JavaScript-原型、原型链详解
一、构造函数
在 JavaScript 中,构造函数是一种特殊的函数,用于创建和初始化对象,它就像一个 “对象模板”。通过 new 关键字调用构造函数时,会创建一个新对象,并将构造函数中的属性和方法 “绑定” 到这个新对象上。
1.构造函数基础示例
// 定义一个构造函数 Star
function Star(uname, age) {// 通过 this 为新创建的对象添加属性this.uname = uname; this.age = age;
}// 使用 new 关键字创建对象实例
const ldh = new Star('刘德华', 18);
const zxy = new Star('张学友', 19); console.log(ldh.uname); // 输出: 刘德华
console.log(zxy.age); // 输出: 19
在这个例子中,Star
是构造函数,每次通过 new Star(...)
创建实例(ldh
、zxy
)时,都会为实例添加 uname
和 age
属性。
2.构造函数的 “方法重复” 问题
如果尝试为构造函数添加方法,会出现内存浪费的问题:
function Star(uname, age) {this.uname = uname;this.age = age;this.sing = function() { // 每个实例都会新建一个 sing 函数console.log('我会唱歌');};
}const ldh = new Star('刘德华', 18);
const zxy = new Star('张学友', 19);console.log(ldh.sing === zxy.sing); // 输出: false(两个不同的函数)
每个实例(ldh
、zxy
)都有独立的 sing
函数,在内存中重复创建相同逻辑的函数,造成浪费。此时,** 原型(prototype
)** 机制就可以解决这个问题 —— 将方法定义在构造函数的原型上,让所有实例共享,避免重复创建。
二、原型(原型对象)的引入
JavaScript 规定,每个构造函数都有一个 prototype
(原型)属性,指向另一个对象(即原型对象)。我们可以把不变的方法挂载到这个原型对象上,让所有实例共享这些方法,避免重复创建。
修改代码如下:
function Star(uname, age) {this.uname = uname;this.age = age;
}// 将 sing 方法定义在 Star 的原型对象上
Star.prototype.sing = function() {console.log('我会唱歌');
};const ldh = new Star('刘德华', 18);
const zxy = new Star('张学友', 19);console.log(ldh.sing === zxy.sing); // true,现在共享同一个函数
此时,所有通过 Star 构造函数创建的实例(ldh、zxy)都会通过原型链共享 Star.prototype.sing 方法,不再重复创建,节约了内存。
1.构造函数this的指向
结论:构造函数里面的this就是实例对象
function Star(uname) {console.log(this)this.uname = uname
}
const ldh = new Star('刘德华')
验证:
2.构造函数里的原型对象的this指向
结论:原型对象里面的函数this指向还是实例对象
<script>let thatfunction Star(uname) {this.uname = uname}Star.prototype.sing = function () {that = thisconsole.log('唱歌')}const ldh = new Star('刘德华')ldh.sing()console.log(that === ldh)</script>
注意:
<script>let that; // 全局变量,初始值为 undefinedfunction Star(uname) {this.uname = uname; // 构造函数中的 this 指向实例,但未赋值给 that}Star.prototype.sing = function () {that = this; // 只有调用 sing 方法时,this 才会指向调用它的实例console.log('唱歌');};const ldh = new Star('刘德华');// ldh.sing(); // 注释掉这行时,sing 方法未被调用,that 保持初始值 undefinedconsole.log(that === ldh); // 输出 false 的原因:
</script>
当 ldh.sing()
被注释时(未调用):
sing
方法从未执行,其中的that = this
代码块没有机会运行- 全局变量
that
保持初始值undefined
(声明时未赋值) - 最终比较
undefined === ldh
为false
(类型和值都不相等)
3.原型对象的constructor 属性
注意:每个原型对象里面都有个construtor属性,该属性指向该原型对象的构造函数
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><script>function Star() {}const ldh = new Star();console.log(Star.prototype)console.log(Star.prototype.constructor === Star);</script>
</body></html>
⑴.constructor使用场景
如果有多个对象的方法,我们可以给原型对象采取对象形式赋值。但是这样就会覆盖构造函数原型对象原来的内容,这样修改后的原型对象 constructor 就不再指向当前构造函数了。
原型对象的定义方式
第一个示例(逐个添加原型方法)
第一个看成方法
此方法不会丢失 constructor
指向
<script>function Star() { }Star.prototype.sing = function () {console.log('唱歌');};Star.prototype.dance = function () {console.log('跳舞');};console.log(Star.prototype);
</script>
- 原型对象引用不变:通过 prototype 属性逐个添加方法时,始终操作的是构造函数默认的原型对象(初始包含 constructor 属性)。
- 保留 constructor 指向:原型对象的 constructor 仍然指向 Star 构造函数,因为未覆盖整个原型对象。
- 打印结果:Star.prototype 会包含 constructor、sing、dance 三个属性。
第二个示例(整体替换原型对象)
第二个看成对象
<script>console.log(Star.prototype); // ①function Star() { }Star.prototype = {sing: function () {console.log('唱歌');},dance: function () {console.log('跳舞');}};console.log(Star.prototype); // ②
</script>
- 原型对象引用改变:直接将 prototype 赋值为一个全新的对象,覆盖了默认的原型对象。
- 丢失 constructor 指向:新对象没有 constructor 属性,此时 Star.prototype.constructor 会指向 Object(默认构造函数),除非手动添加 constructor: Star。
三、对象原型
答:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><script>function Star() {}const ldh = new Star()// 对象原型__proto__ 指向 改构造函数的原型对象console.log(ldh.__proto__)console.log(ldh.__proto__ === Star.prototype)// 对象原型里面也有constructor 指向 构造函数 Starconsole.log(ldh.__proto__.constructor === Star)</script>
</body></html>
注意区分原型对象和对象原型
四、原型继承
1.引入
看以下代码
function Woman() {this.eyes = 2this.head = 1}const red = new Woman()console.log(red)function Man() {this.eyes = 2this.head = 1}const pink = new Man()console.log(pink)
它们除了名字不同,里面都有相同的属性,可以抽取出来
2.封装-抽取公共部分
把男人和女人公共的部分抽取出来放到Person里面,然后公共的部分放原型对象上
const Person = {eyes: 2,head: 1}function Woman() {}Woman.prototype = Personconst red = new Woman()console.log(red)console.log(Woman.prototype)function Man() {}Man.prototype = Personconst pink = new Man()console.log(pink)
存在一个问题:
解决:
3.Woman.prototype和Man.prototype都指向堆中同一块地址
在 JavaScript 中,对象是按引用传递的。当将同一个对象 Person 直接赋值给 Woman.prototype 和 Man.prototype 时,两者会共享同一个对象的引用,因此它们的原型确实指向堆内存中的同一块地址。以下是对代码的详细分析:
⑴. 原型赋值的本质是引用传递
const Person = { eyes: 2, head: 1 }; // 定义一个对象(堆内存中创建)// 原型赋值(传递引用而非复制对象)
Woman.prototype = Person; // Woman 的原型指向 Person 对象
Man.prototype = Person; // Man 的原型也指向同一个 Person 对象
Person
是一个普通对象,存储在堆内存中。Woman.prototype
和Man.prototype
本质上是两个指针,它们被赋值为Person
对象的内存地址。- 结论:两者的原型指向同一块堆内存地址,可通过
===
验证:
console.log(Woman.prototype === Man.prototype); // 输出 true
⑵.实例与原型的关系
const red = new Woman(); // red 的 __proto__ 指向 Woman.prototype(即 Person)
const pink = new Man(); // pink 的 __proto__ 指向 Man.prototype(即 Person)console.log(red.__proto__ === pink.__proto__); // 输出 true(均指向 Person)
- 两个实例的原型链最终都会追溯到同一个
Person
对象,因此它们会共享Person
中定义的所有属性(eyes
、head
)。
⑶.潜在问题:共享原型对象的副作用
由于 Woman.prototype
和 Man.prototype
指向同一个对象,对其中一个原型的修改会影响另一个:
// 为 Woman 的原型添加新方法(实际修改的是 Person 对象)
Woman.prototype.speak = function() { return "Hello"; };// Man 的原型也会自动拥有该方法
console.log(pink.speak()); // 输出 "Hello"(意外共享)
这种行为可能导致预期外的继承关系污染,尤其是在需要独立原型的场景下(如 Woman
和 Man
应属于不同类别)。
⑷.解决方法
把上面的Person写成构造函数,然后类似Java多态的写法;Woman.prototype = new Person()
子类的原型=new 父类
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><script>function Person() {this.eyes = 2this.head = 1}function Woman() {}Woman.prototype = new Person()Woman.prototype.constructor = Womanconst red = new Woman()console.log(red)console.log(Woman.prototype)// 为 Woman 的原型添加新方法(实际修改的是 Person 对象)Woman.prototype.speak = function () { return "Hello"; };// Man 的原型也会自动拥有该方法function Man() {}Man.prototype = new Person()const pink = new Man()console.log(pink)console.log(pink.speak()); // 输出 "Hello"(意外共享)</script>
</body></html>
此时,再用Man调用speak方法就报错了
五、原型链
相关文章:
JavaScript-原型、原型链详解
一、构造函数 在 JavaScript 中,构造函数是一种特殊的函数,用于创建和初始化对象,它就像一个 “对象模板”。通过 new 关键字调用构造函数时,会创建一个新对象,并将构造函数中的属性和方法 “绑定” 到这个新对象上。…...
深度学习框架PyTorch——从入门到精通(3.3)YouTube系列——自动求导基础
这部分是 PyTorch介绍——YouTube系列的内容,每一节都对应一个youtube视频。(可能跟之前的有一定的重复) 我们需要Autograd做什么?一个简单示例训练中的自动求导开启和关闭自动求导自动求导与原地操作 自动求导分析器高级主题&…...
永磁同步电机控制算法-VF控制
一、原理介绍 V/F 控制又称为恒压频比控制,给定VF 控制曲线 电压是频率的tt例函数 即控制电压跟随频率变化而变化以保持磁通恒定不变。 二、仿真模型 在MATLAB/simulink里面验证所提算法,搭建仿真。采用和实验中一致的控制周期1e-4,电机部分计算周期为…...
【Docker 运维】Java 应用在 Docker 容器中启动报错:`unable to allocate file descriptor table`
文章目录 一、根本原因二、判断与排查方法三、解决方法1、限制 Docker 容器的文件描述符上限2、在执行脚本中动态设置ulimit的值3、升级至 Java 11 四、总结 容器内执行脚本时报错如下,Java 进程异常退出: library initialization failed - unable to a…...
SpringBoot + Vue 实现云端图片上传与回显(基于OSS等云存储)
前言 在实际生产环境中,我们通常会将图片等静态资源存储在云端对象存储服务(如阿里云OSS、七牛云、腾讯云COS等)上。本文将介绍如何改造之前的本地存储方案,实现基于云端存储的图片上传与回显功能。 一、技术选型 云存储服务&a…...
Session与Cookie的核心机制、用法及区别
Python中Session与Cookie的核心机制、用法及区别 在Web开发中,Session和Cookie是两种常用的用于跟踪用户状态的技术。它们在实现机制、用途和安全性方面都有显著区别。本文将详细介绍它们的核心机制、用法以及它们之间的主要区别。 一、Cookie的核心机制与用法 1…...
离线安装rabbitmq全流程
在麒麟系统(如银河麒麟)上离线安装 RabbitMQ 的具体操作步骤如下: 一、准备工作 确认系统版本:确认麒麟系统的版本,例如银河麒麟高级服务器 V10。确定 RabbitMQ 及依赖版本:根据系统版本确定兼容的 Rabbi…...
llama-webui docker实现界面部署
1. 启动ollama服务 [nlp server]$ ollama serve 2025/04/21 14:18:23 routes.go:1007: INFO server config env"map[OLLAMA_DEBUG:false OLLAMA_FLASH_ATTENTION:false OLLAMA_HOST: OLLAMA_KEEP_ALIVE:24h OLLAMA_LLM_LIBRARY: OLLAMA_MAX_LOADED_MODELS:4 OLLAMA_MAX_…...
第1 篇:你好,时间序列!—— 开启时间数据探索之旅
第 1 篇:你好,时间序列!—— 开启时间数据探索之旅 (图片来源: Stephen Dawson on Unsplash) 你有没有想过: 明天的天气会是怎样?天气预报是怎么做出来的?某支股票未来的价格走势如何预测?购物…...
C++算法(11):vector作为函数参数的三种传递方式详解
在C中,std::vector是最常用的动态数组容器之一。当我们需要将vector传递给函数时,不同的传递方式会对性能和功能产生显著影响。本文将详细介绍三种常见的传递方式及其适用场景,帮助开发者根据需求选择最合适的方法。 1. 按值传递(…...
版本控制利器——SVN简介
版本控制利器——SVN简介 在软件开发和项目管理的领域中,版本控制是一项至关重要的工作。它能帮助团队成员高效协作,确保代码的安全性和可追溯性。今天,我们就来详细介绍一款经典的版本控制系统——SVN(Subversion)。…...
链式栈和线性栈
1. 线性栈(顺序栈) 结构定义: #include <iostream> using namespace std;#define MAX_SIZE 100 // 预定义最大容量// 线性栈结构体 typedef struct {int* data; // 存储数据的数组int top; // 栈顶指针&…...
消息中间件RabbitMQ:简要介绍及其Windows安装流程
一、简要介绍 定义:RabbitMQ 是一个开源消息中间件,用于实现消息队列和异步通信。 场景:适用于分布式系统、异步任务处理、消息解耦、负载均衡等场景。 比喻:RabbitMQ 就像是快递公司,负责在不同系统间安全快速地传递…...
足球 AI 智能体技术解析:从数据采集到比赛预测的全链路架构
一、引言 在足球运动数字化转型的浪潮中,AI 智能体正成为理解比赛、预测赛果的核心技术引擎。本文从工程实现角度,深度解析足球 AI 的技术架构,涵盖数据采集、特征工程、模型构建、实时计算到决策支持的全链路技术方案,揭示其背后…...
VTK知识学习(53)- 交互与Widget(四)
1、测量类Widget 1)概述 与测量相关的主要 Widget如下: vtkDistanceWidget:用于在二维平面上测量两点之间的距离。vtkAngleWidget:用于二维平面的角度测量。vtkBiDimensionalWidget:用于测量二维平面上任意两个正交方向的轴长。 按照前面提到的步骤创…...
基础服务系列-Windows10 安装AnacondaJupyter
下载 https://www.anaconda.com/products/individual 安装 安装Jupyter 完成安装 启动Jupyter 浏览器访问 默认浏览器打开,IE不兼容,可以换个浏览器 修改密码 运行脚本...
使用c++调用deepseek的api(附带源码)
可以给服务器添加deepseek这样就相当于多了一个智能ai助手 deepseek的api申请地址使用格式测试效果源码 deepseek的api申请地址 这边使用硅基流动的api,注册就有免费额度 硅基流动: link 使用格式 api的调用格式,ds的api调用就是用固定协议然后发送到…...
HarmonyOS-ArkUI: animateTo 显式动画
什么是显式动画 啊, 尽管有点糙,但还是解释一下吧, 显式动画里面的“显式”二字, 是程序员在代码调用的时候,就三令五申,明明白白调用动画API而创建的动画。 这个API的名字就是: animateTo。这就是显式动画。说白了您可以大致理解为,显式动画,就是调用animateTo来完成…...
Spring AI MCP
MCP是什么 MCP是模型上下文协议(Model Context Protocol)的简称,是一个开源协议,由Anthropic(Claude开发公司)开发,旨在让大型语言模型(LLM)能够以标准化的方式连接到外…...
Kubernetes 创建 Jenkins 实现 CICD 配置指南
Kubernetes 创建 Jenkins 实现 CICD 配置指南 拉取 Jenkins 镜像并推送到本地仓库 # 从官方仓库拉取镜像(若网络不通畅可使用国内镜像源) docker pull jenkins/jenkins:lts-jdk11# 国内用户可去下面地址寻找镜像源并拉取: https://docker.a…...
01_Flask快速入门教程介绍
一、课程视频 01_Flask快速入门教程介绍 二、课程特点 讲课风格通俗易懂,理论与实战相结合 教程:视频 配套文档 配套的代码 最新本版,Python版本是3.12,Flask版本是3.10 即使是从没接触过Flsk的小白也看得懂学得会 三、适用人…...
SSH反向代理
SSH反向代理 一、过程 1、 确保树莓派和阿里云服务器的 SSH 服务正常运行 检查树莓派的ssh服务 sudo systemctl status ssh如果未启用,请启动并设置开机自启: sudo systemctl enable ssh sudo systemctl start ssh检查阿里云服务器的SSH服务 sudo …...
第 5 篇:初试牛刀 - 简单的预测方法
第 5 篇:初试牛刀 - 简单的预测方法 经过前面四篇的学习,我们已经具备了处理时间序列数据的基本功:加载、可视化、分解以及处理平稳性。现在,激动人心的时刻到来了——我们要开始尝试预测 (Forecasting) 未来! 预测是…...
深度学习中的归一化技术:从原理到实战全解析
摘要:本文系统解析深度学习中的归一化技术,涵盖批量归一化(BN)、层归一化(LN)、实例归一化(IN)、组归一化(GN)等核心方法。通过数学原理、适用场景、优缺点对…...
流量抓取工具(wireshark)
协议 TCP/IP协议簇 网络接口层(没有特定的协议)PPPOE 物理层数据链路层 网络层: IP(v4/v6) ARP(地址解析协议) RARP ICMP(Internet控制报文协议) IGMP传输层:TCP(传输控制协议)UDP(用户数据报协议)应用层…...
【原创】Ubuntu20.04 安装 Isaac Gym 仿真器
Isaac Gym 是 NVIDIA 开发的一个基于GPU的机器人仿真平台。其高效的 GPU 加速能力和大规模并行仿真性能,成为强化学习训练和机器人控制研究的重要选择。 本文将介绍 Isaac Gym 的安装过程【简易】。 1.配置环境 Ubuntu20.04 安装 NVIDIA 显卡驱动 Ubuntu20.04 安…...
AI 速读 SpecReason:让思考又快又准!
在大模型推理的世界里,速度与精度往往难以兼得。但今天要介绍的这篇论文带来了名为SpecReason的创新系统,它打破常规,能让大模型推理既快速又准确,大幅提升性能。想知道它是如何做到的吗?快来一探究竟! 论…...
从“堆料竞赛”到“体验深耕”,X200 Ultra和X200s打响手机价值升维战
出品 | 何玺 排版 | 叶媛 vivo双旗舰来袭! 4月21日,vivo X系列春季新品发布会盛大开启,带来了一场科技与创新的盛宴。会上,消费者期待已久的X200 Ultra及X200s两款旗舰新品正式发布。 vivo两款旗舰新品发布后,其打破…...
Macbook IntelliJ IDEA终端无法运行mvn命令
一、背景 idea工具里执行Maven命令mvn package,报错提示 zsh: command not found: mvn。 macOS,默认使用的是zsh,环境变量通常配置在 ~/.zshrc 文件中。 而我之前一直是配置在~/.bash_profile文件中。 二、环境变量 vi ~/.zshrc设置MAVE…...
CentOS 7进入救援模式——VirtualBox虚拟机
目录 1. 在`VirtualBox`环境下,开机按F12,进入`VirtualBox temporary boot device selection `界面,按`c`键,选中`CD-ROM `回车。2. 选中`Troubleshooting`(故障排除),进入`Troubleshooting`界面3. 接下来会显示救援模式菜单,通常选择`"1) Continue"`(除非您…...
AI软件栈:LLVM分析(六)
LLVM后端代码生成的关键步骤 文章目录 指令选择指令调度寄存器分配 指令选择 完成从基于LLVM IR的DAG转换为基于特定目标平台的DAG(注意,此时描述格式依然是DAG形态)基于TabGen完成指令重映射(典型的处理包括:指令拆散…...
【第十六届 蓝桥杯 省 C/Python A/Java C 登山】题解
题目链接:P12169 [蓝桥杯 2025 省 C/Python A/Java C] 登山 思路来源 一开始想的其实是记搜,但是发现还有先找更小的再找更大的这种路径,所以这样可能错过某些最优决策,这样不行。 于是我又想能不能从最大值出发往回搜…...
Github 热点项目 Jumpserver开源堡垒机让服务器管理效率翻倍
Jumpserver今日喜提160星,总星飙至2.6万!这个开源堡垒机有三大亮点:① 像哆啦A梦的口袋,支持多云服务器一站式管理;② 安全审计功能超硬核,操作记录随时可回放;③ 网页终端无需装插件࿰…...
5V 1A充电标准的由来与技术演进——从USB诞生到智能手机时代的电力革命
点击下面图片带您领略全新的嵌入式学习路线 🔥爆款热榜 88万阅读 1.6万收藏 一、起源:USB标准与早期电力传输需求 1. USB的诞生背景 1996年,由英特尔、微软、IBM等公司组成的USB-IF(USB Implementers Forum)发布了…...
驱动开发硬核特训 · Day 16:字符设备驱动模型与实战注册流程
🎥 视频教程请关注 B 站:“嵌入式 Jerry” 一、为什么要学习字符设备驱动? 在 Linux 驱动开发中,字符设备(Character Device)驱动 是最基础也是最常见的一类驱动类型。很多设备(如 LED、按键、…...
外网如何连接内网中的mysql数据库服务器
一、MySQL 产品简介 mysql是一款数据库产品,它主要用于存储、管理和检索数据,对用户的数据进行存储管理 二、运维人员遇到的问题 当内网服务器部署好mysql数据库后,外网如何安全的访问数据库进行增删改查,是运维人员遇到的一个…...
你的大模型服务如何压测:首 Token 延迟、并发与 QPS
写在前面 大型语言模型(LLM)API,特别是遵循 OpenAI 规范的接口(无论是 OpenAI 官方、Azure OpenAI,还是 DeepSeek、Moonshot 等众多兼容服务),已成为驱动下一代 AI 应用的核心引擎。然而,随着应用规模的扩大和用户量的增长,仅仅关注模型的功能是不够的,API 的性能表…...
4月谷歌新政 | Google Play今年对“数据安全”的管控将全面升级!
大家好,我是牢鹅!每年的Q2季度是Google Play重要政策更新的时间节点,一般都伴随着重磅政策的更新,今年也不例外。4月10日,谷歌政策迎来2025年第二次更新,本次政策更新内容相较3月政策更新,不管是…...
第十四届蓝桥杯 2023 C/C++组 有奖问答
目录 题目: 题目描述: 题目链接: 思路: 核心思路: 思路详解: 代码: 代码详解: 题目: 题目描述: 题目链接: 蓝桥云课 有奖问答 思路&…...
【Redis】SpringDataRedis
Spring Data Redis 使得开发者能够更容易地与 Redis 数据库进行交互,并且支持不同的 Redis 客户端实现,如 Jedis 和 Lettuce。Spring Data Redis 会自动选择一个客户端,通常情况下,Spring Boot 默认使用 Lettuce 作为 Redis 客户端…...
XAttention
XAttention: Block Sparse Attention with Antidiagonal Scoring 革新Transformer推理的高效注意力机制资源 论文链接:XAttention: Block Sparse Attention with Antidiagonal Scoring 代码开源:GitHub仓库 XAttention是韩松团队提…...
07.Python代码NumPy-排序sort,argsort,lexsort
07.Python代码NumPy-排序sort,argsort,lexsort 提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是NumPy的使用语法。前后每一小节的内容是存在的有:学习and理解的关联性,希望…...
无人机飞控运行在stm32上的RTOS实时操作系统上,而不是linux这种非实时操作系统的必要性
飞控程序需要运行在STM32等微控制器(MCU)的实时操作系统(RTOS)而非Linux等非实时操作系统(如通用Linux内核),主要原因在于实时性、资源占用、硬件适配性以及系统可靠性等方面的实质性差异。以下…...
Leetcode - 周赛446
目录 一、3522. 执行指令后的得分二、3523. 非递减数组的最大长度三、3524. 求出数组的 X 值 I四、3525. 求出数组的 X 值 II 一、3522. 执行指令后的得分 题目链接 本题就是一道模拟题,代码如下: class Solution {public long calculateScore(String…...
Linux——系统安全及应用
目录 一:账号安全控制 1,基本安全措施 系统账号清理 密码安全控制 命令历史,自动注销 2,用户切换与提权 su命令的用法 PAM认证 3,sudo命令——提升执行权限 在配置文件/etc/sudoers中添加授权 通过sudo执行…...
随机面试--<二>
编译安装软件的流程 1-安装所需源代码 2-配置安装环境 3-进行相关设置 4-编译 5-安装 nginx安装新模块的流程 1-准备与原nginx版本相同的源码包,准备模块安装包 2-准备编译安装环境 3-配置参数 来源于nginx -V配置原模块 以及--add-module 增加模块 4-mak…...
LeetCode面试经典 150 题(Java题解)
一、数组、字符串 1、合并两个有序数组 从后往前比较,这样就不需要使用额外的空间 class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int l mn-1, i m-1, j n-1;while(i > 0 && j > 0){if(nums1[i] > nums2[j])…...
【技术追踪】Differential Transformer(ICLR-2025)
Differential Transformer:大语言模型新架构, 提出了 differential attention mechanism,Transformer 又多了一个小 trick~ 论文:Differential Transformer 代码:https://github.com/microsoft/unilm/tree/master/Diff…...
报告系统状态的连续日期 mysql + pandas(连续值判断)
本题用到知识点:row_number(), union, date_sub(), to_timedelta()…… 目录 思路 pandas Mysql 思路 链接:报告系统状态的连续日期 思路: 判断连续性常用的一个方法,增量相同的两个列的差值是固定的。 让日期与行号 * 天数…...
【C++类和数据抽象】类的作用域
目录 一、类的作用域基本概念 1.1 什么是类的作用域 1.2 作用域层次体系 1.3 类作用域的特点 1.4 基本访问规则 二、访问控制三剑客 2.1 public:开放接口 2.2 private:数据封装 2.3 protected:继承通道 2.4 跨作用域访问示例 三…...