当前位置: 首页 > news >正文

JavaScript相关面试题

以下是150道JavaScript相关面试题及详细答案:
JavaScript基础
1.JavaScript是什么?
JavaScript是一种直译式脚本语言,主要用于网页开发,也可用于服务器端开发(如Node.js)。它是一种动态类型、弱类型、基于原型的语言,支持函数式编程和面向对象编程。
2.JavaScript的基本数据类型有哪些?
包括Undefined、Null、Boolean、Number、String、Symbol(ES6新增)、Object。
3.如何声明变量?
使用var、let、const。
•  var:函数作用域,可重复声明,存在变量提升。
•  let:块作用域,不可重复声明,不存在变量提升。
•  const:块作用域,声明时必须初始化,不可重新赋值。
4.==和===的区别?
•  ==允许类型转换,例如1 == '1'返回true。
•  ===不允许类型转换,比较时要求类型和值都相同,例如1 === '1'返回false。
5.NaN的含义?
Not-a-Number,表示不是一个数字的值,例如0 / 0的结果是NaN。
6.如何判断一个变量是否是数组?
可以使用Array.isArray()方法。
7.this的指向如何确定?
•  在普通函数调用中,this指向全局对象(浏览器中是window)。
•  在对象方法中,this指向该对象。
•  使用call、apply、bind可以改变this的指向。
8.什么是闭包?有什么作用?
闭包是指能够读取其他函数内部变量的函数。闭包的作用包括:
•  保持函数内部变量的持久化。
•  实现数据封装和信息隐藏。
•  创建私有变量和方法。
9.如何实现函数的防抖和节流?
•  防抖:在事件被触发后延迟执行回调,若在延迟时间内事件再次被触发则重新计时。
•  节流:在一定时间内只执行一次回调,常用于滚动、调整窗口大小等事件。
10.什么是事件循环?
事件循环是JavaScript处理异步操作的机制。浏览器或Node.js环境维护一个任务队列,当异步操作完成时,将回调函数放入任务队列,等待主线程空闲时依次执行。
JavaScript语法与特性
11.如何创建对象?
可以使用对象字面量、new Object()、构造函数、Object.create()等方法。
12.如何遍历对象的属性?
可以使用for...in循环遍历对象自身的和继承的可枚举属性,或者使用Object.keys()获取对象自身的可枚举属性的键数组。
13.如何判断一个对象是否有某个属性?
可以使用in操作符判断对象或其原型链上是否有某个属性,或者使用hasOwnProperty()判断对象自身是否有某个属性。
14.如何实现对象的深拷贝?
可以使用JSON.parse(JSON.stringify(obj))进行简单深拷贝,但对于包含循环引用、函数、undefined等特殊值的对象,需要使用更复杂的递归方法或第三方库(如Lodash的cloneDeep)。
15.什么是原型链?
每个对象都有一个原型(prototype),对象的属性查找会沿着原型链向上查找,直到找到该属性或到达原型链顶端(null)。
16.如何实现继承?
可以使用构造函数继承、原型链继承、组合继承、寄生组合继承等方法。
17.箭头函数与普通函数的区别?
•  箭头函数没有自己的this、arguments、super、new.target等绑定,这些值从父作用域继承。
•  箭头函数不能作为构造函数使用。
•  箭头函数没有prototype属性。
18.如何实现数组的去重?
可以使用Set、filter、indexOf等方法。
19.如何实现数组的扁平化?
可以使用递归、reduce和concat等方法。
20.如何获取数组中最大值或最小值?
可以使用Math.max()、Math.min()结合apply或spread运算符,或者使用reduce方法。
JavaScript高级
21.Promise的状态有哪些?
Pending(待定)、Fulfilled(已成功,resolved)、Rejected(已失败)。
22.如何使用Promise实现异步操作?
可以使用new Promise()创建Promise实例,使用.then()处理成功情况,使用.catch()处理错误情况,使用.finally()执行完成后的操作。
23.Async/Await的使用方法?
使用async关键字定义异步函数,使用await关键字等待Promise的解决。
24.如何实现防抖函数?
function debounce(func, wait) {
    let timeout;
    return function(...args) {
        const context = this;
        clearTimeout(timeout);
        timeout = setTimeout(() => func.apply(context, args), wait);
    };
}

25.如何实现节流函数?
function throttle(func, wait) {
    let lastTime = 0;
    return function(...args) {
        const context = this;
        const now = Date.now();
        if (now - lastTime >= wait) {
            lastTime = now;
            func.apply(context, args);
        }
    };
}

26.如何实现一个观察者模式?
class Observer {
    constructor() {
        this.observers = [];
    }
    subscribe(fn) {
        this.observers.push(fn);
    }
    unsubscribe(fn) {
        this.observers = this.observers.filter(f => f !== fn);
    }
    notify(...args) {
        this.observers.forEach(fn => fn(...args));
    }
}

27.如何实现一个发布-订阅模式?
class PubSub {
    constructor() {
        this.subscribers = {};
    }
    publish(topic, ...args) {
        if (!this.subscribers[topic]) return;
        this.subscribers[topic].forEach(fn => fn(...args));
    }
    subscribe(topic, fn) {
        if (!this.subscribers[topic]) {
            this.subscribers[topic] = [];
        }
        this.subscribers[topic].push(fn);
    }
    unsubscribe(topic, fn) {
        if (!this.subscribers[topic]) return;
        this.subscribers[topic] = this.subscribers[topic].filter(f => f !== fn);
    }
}

28.如何实现一个单例模式?
class Singleton {
    static instance;
    constructor() {
        if (Singleton.instance) {
            return Singleton.instance;
        }
        Singleton.instance = this;
    }
}

29.如何实现一个工厂模式?
function createObject(type) {
    switch (type) {
        case 'type1':
            return new Type1();
        case 'type2':
            return new Type2();
        default:
            return null;
    }
}

30.如何实现一个代理模式?
class Proxy {
    constructor(subject) {
        this.subject = subject;
    }
    request() {
        this.before();
        this.subject.request();
        this.after();
    }
    before() {
        // 在请求前执行的操作
    }
    after() {
        // 在请求后执行的操作
    }
}

JavaScript应用
31.如何使用JavaScript操作DOM?
可以使用document.getElementById()、document.querySelector()等方法获取DOM元素,然后修改其属性、样式、内容等。
32.如何实现一个简单的AJAX请求?
可以使用XMLHttpRequest或fetch API。
33.如何使用JavaScript实现页面跳转?
可以修改window.location.href属性。
34.如何使用JavaScript实现页面加载进度?
可以监听页面的load、progress等事件,结合资源的加载情况计算加载进度。
35.如何使用JavaScript实现页面性能监控?
可以使用Performance API,如performance.timing获取页面加载时间,performance.memory获取内存使用情况等。
JavaScript优化
36.如何优化JavaScript代码的性能?
•  避免使用全局变量。
•  使用局部变量和函数作用域。
•  避免使用复杂的计算作为循环条件。
•  使用高效的算法和数据结构。
•  避免频繁的DOM操作。
37.如何减少JavaScript文件的大小?
•  使用代码压缩工具(如UglifyJS)。
•  使用模块化开发,按需加载代码。
•  避免使用不必要的库和功能。
38.如何提高JavaScript代码的可维护性?
•  使用模块化开发。
•  编写清晰的注释和文档。
•  遵循一致的编码规范。
•  使用版本控制系统。
39.如何调试JavaScript代码?
可以使用浏览器的开发者工具,设置断点、查看变量值、调用栈等。
40.如何使用JavaScript实现响应式设计?
可以使用CSS媒体查询、窗口大小事件监听等技术,根据不同的屏幕尺寸调整页面布局和样式。
JavaScript框架与库
41.React中如何管理状态?
可以使用useState、useReducer等钩子函数。
42.Vue中如何实现数据绑定?
通过v-model指令实现表单元素和数据的双向绑定。
43.Angular中如何创建服务?
使用ng generate service命令创建服务,然后在组件中通过依赖注入使用。
44.React与Vue的区别?
•  React使用JSX语法,Vue使用模板语法。
•  React的虚拟DOM更新策略与Vue不同。
•  React生态系统更庞大,Vue更轻量级。
45.如何在React中实现组件的生命周期?
可以使用componentDidMount、componentDidUpdate、componentWillUnmount等生命周期方法。
46.如何在Vue中实现组件的通信?
可以使用props、events、Vuex等。
47.Angular中如何实现依赖注入?
通过在构造函数中声明依赖,Angular会自动解析并注入。
48.React中如何优化组件性能?
可以使用React.memo、useMemo、useCallback等钩子函数避免不必要的渲染。
49.Vue中如何实现响应式数据?
通过data函数返回响应式数据,Vue会对其进行劫持,实现数据变化的自动更新。
50.Angular中如何实现表单验证?
可以使用模板驱动表单或响应式表单,定义验证规则如required、minlength等。
JavaScript安全
51.如何防止XSS攻击?
•  对用户输入进行转义,避免直接输出HTML。
•  使用安全的库和框架,如React的自动转义机制。
52.如何防止CSRF攻击?
•  设置CSRF令牌,验证请求的合法性。
•  检查referer头,限制跨域请求。
53.如何实现HTTPS?
在服务器配置中启用HTTPS协议,安装SSL证书。
54.如何管理JavaScript的同源策略?
通过CORS(跨域资源共享)配置允许跨域请求。
55.如何使用JavaScript实现安全的用户认证?
•  使用HTTPS传输用户凭据。
•  使用JWT等令牌机制,避免明文传输用户信息。
•  在服务器端验证和处理用户登录请求。
JavaScript新特性
56.ES6新增了哪些特性?
•  箭头函数
•  解构赋值
•  模块化(import/export)
•  let和const声明
•  Promise对象
•  Symbol类型
•  Proxy和Reflect对象
•  Set和Map数据结构
57.ES7新增了哪些特性?
•  Array.prototype.includes()
•  指数运算符(**)
•  Object方法扩展(如Object.values()、Object.entries())
58.ES8新增了哪些特性?
•  异步函数(async/await)
•  Object.getOwnPropertyDescriptors()
•  String.prototype.padStart()和padEnd()
•  Trailing commas在函数定义和调用中的支持
59.ES9新增了哪些特性?
•  Promise.finally()
•  Object rest/spread properties
•  RegExp命名捕获组
•  Symbol.prototype.description
60.ES10新增了哪些特性?
•  Array.prototype.flat()和flatMap()
•  Object.fromEntries()
•  String.trimStart()和trimEnd()
•  Symbol.species的改进
JavaScript工具与调试
61.如何使用Chrome开发者工具调试JavaScript?
可以使用Sources面板设置断点、查看变量、调用栈等。
62.如何使用Node.js调试JavaScript?
可以使用node --inspect命令启动调试模式,然后在Chrome开发者工具中连接。
63.如何使用JavaScript的错误堆栈信息进行调试?
通过error.stack属性获取错误的堆栈信息,定位问题代码。
64.如何使用JavaScript的性能分析工具?
可以使用console.time()和console.timeEnd()测量代码块的执行时间。
65.如何使用JavaScript的内存分析工具?
可以使用Chrome开发者工具的Memory面板进行内存快照和分析。
JavaScript设计模式
66.什么是单例模式?如何实现?
确保一个类只有一个实例,并提供全局访问点。
67.什么是工厂模式?如何实现?
提供一个创建对象的接口,由子类决定实例化哪个类。
68.什么是代理模式?如何实现?
为其他对象提供一种代理以控制对这个对象的访问。
69.什么是观察者模式?如何实现?
对象之间的一对多依赖关系,当一个对象状态改变时,所有依赖对象都会得到通知。
70.什么是策略模式?如何实现?
定义一系列算法,把它们封装起来,使它们可以互相替换。
JavaScript项目实践
71.如何使用JavaScript实现一个简单的MVVM框架?
可以使用数据劫持(Object.defineProperty)和编译器(compiler)实现数据的双向绑定。
72.如何使用JavaScript实现一个简单的路由系统?
可以监听页面的hashchange或popstate事件,解析URL路径并渲染对应的组件。
73.如何使用JavaScript实现一个简单的状态管理?
可以使用发布-订阅模式或观察者模式,管理应用的全局状态。
74.如何使用JavaScript实现一个简单的组件库?
可以使用模块化开发,将每个组件封装为独立的模块,提供统一的接口和文档。
75.如何使用JavaScript实现一个简单的构建工具?
可以使用webpack、gulp等工具,结合自定义插件和配置,实现代码的打包、压缩、优化等操作。
JavaScript性能优化
76.如何优化JavaScript代码的执行效率?
•  避免使用全局变量。
•  使用局部变量和函数作用域。
•  避免使用复杂的计算作为循环条件。
•  使用高效的算法和数据结构。
•  避免频繁的DOM操作。
77.如何减少JavaScript文件的加载时间?
•  使用代码分割和懒加载。
•  使用CDN加速资源加载。
•  合并和压缩JavaScript文件。
78.如何优化JavaScript的内存使用?
•  避免内存泄漏,及时释放不再使用的对象。
•  使用弱引用(WeakMap、WeakSet)。
•  避免创建过大的数组和对象。
79.如何提高JavaScript代码的响应性?
•  使用异步操作避免阻塞主线程。
•  将耗时操作分解为多个小任务,使用setTimeout或requestIdleCallback分批执行。
80.如何使用JavaScript实现懒加载?
可以监听页面的滚动事件,判断元素是否进入视口,然后动态加载资源。
JavaScript与后端交互
81.如何使用JavaScript实现RESTful API请求?
可以使用fetch或axios等库,发送GET、POST、PUT、DELETE等请求。
82.如何处理跨域问题?
•  使用CORS(跨域资源共享)。
•  使用JSONP(仅支持GET请求)。
•  使用代理服务器。
83.如何使用JavaScript实现WebSocket通信?
可以使用WebSocket API建立实时双向通信。
84.如何使用JavaScript实现文件上传和下载?
可以使用XMLHttpRequest或fetch发送POST请求上传文件,使用Blob和URL.createObjectURL实现文件下载。
85.如何使用JavaScript实现身份验证和授权?
可以使用JWT(JSON Web Token)存储用户认证信息,通过HTTP头传递Token进行授权验证。
JavaScript框架与工具
86.如何使用React创建一个简单的组件?
function Welcome(props) {
    return <h1>Hello, {props.name}</h1>;
}

87.如何使用Vue创建一个简单的实例?
new Vue({
    el: '#app',
    data: {
        message: 'Hello Vue!'
    }
});

88.如何使用Angular创建一个简单的模块?
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

@NgModule({
    declarations: [],
    imports: [BrowserModule],
    providers: [],
    bootstrap: []
})
export class AppModule { }

89.如何使用React Router实现页面导航?
安装react-router-dom,使用BrowserRouter、Route、Link等组件配置路由。
90.如何使用Vue Router实现页面导航?
安装vue-router,创建路由器实例,配置路由规则,使用router-link和router-view组件实现导航和页面展示。
JavaScript测试
91.如何使用Jest进行单元测试?
安装Jest,编写测试用例文件(.test.js),使用describe和it定义测试套件和测试用例,运行jest命令执行测试。
92.如何使用Mocha和Chai进行测试?
安装Mocha和Chai,编写测试用例文件,使用describe、it和assert进行测试,运行mocha命令执行测试。
93.如何使用测试驱动开发(TDD)?
先编写测试用例,确保测试失败,然后编写最小的代码使测试通过,最后重构代码以优化。
94.如何使用JavaScript实现自动化测试?
可以使用Selenium WebDriver结合JavaScript编写自动化测试脚本,模拟用户操作浏览器进行测试。
95.如何使用JavaScript实现持续集成和持续部署(CI/CD)?
可以结合Jenkins、GitLab CI等工具,编写构建、测试、部署脚本,实现自动化流程。
JavaScript安全与认证
96.如何使用JavaScript实现OAuth2.0认证?
通过重定向用户到授权服务器,获取授权码,然后交换访问令牌,最后使用令牌访问受保护资源。
97.如何使用JavaScript实现JWT认证?
在客户端存储JWT令牌(如在localStorage或cookies中),在每个请求的头中传递令牌,服务器验证令牌的有效性。
98.如何防止CSRF攻击?
•  设置CSRF令牌,验证请求的合法性。
•  检查referer头,限制跨域请求。
99.如何实现HTTPS?
在服务器配置中启用HTTPS协议,安装SSL证书。
100.如何管理JavaScript的同源策略?
通过CORS(跨域资源共享)配置允许跨域请求。
JavaScript新特性和趋势
101.什么是ES6模块化?如何使用?
ES6模块化通过import和export语法实现代码的模块化组织和复用。
102.什么是TypeScript?有什么优势?
TypeScript是JavaScript的超集,增加了静态类型检查,提高了代码的可维护性和可读性,适合大型项目开发。
103.什么是WebAssembly?有什么优势?
WebAssembly是一种新的代码格式,可以与JavaScript一起运行在浏览器中,具有接近原生的性能,适合高性能应用场景。
104.什么是Serverless架构?如何与JavaScript结合?
Serverless架构允许开发者无需管理服务器即可运行代码,JavaScript可以通过AWS Lambda、Azure Functions等平台实现Serverless应用。
105.什么是渐进式Web应用(PWA)?如何使用JavaScript实现?
PWA是一种利用现代浏览器特性提供原生应用体验的Web应用,可以使用Service Workers、缓存API、通知API等实现离线支持、推送通知等功能。
JavaScript项目构建与部署
106.如何使用Webpack构建JavaScript项目?
安装Webpack,配置webpack.config.js文件,定义入口、出口、加载器、插件等,运行webpack命令进行构建。
107.如何使用Babel编译JavaScript代码?
安装Babel,配置.babelrc文件,定义预设和插件,运行babel命令进行编译。
108.如何使用npm管理JavaScript项目依赖?
初始化项目(npm init),安装依赖(npm install),使用package.json管理依赖和脚本。
109.如何部署JavaScript单页面应用?
可以使用静态服务器(如Nginx)部署,配置路由规则和资源路径。
110.如何实现JavaScript应用的热更新?
可以使用Webpack的热模块替换(HMR)功能,在开发过程中实现代码更改后的自动更新。
JavaScript函数式编程
111.什么是函数式编程?有什么优势?
函数式编程是一种编程范式,强调使用纯函数和不可变数据,具有易于测试、调试和并行化的优势。
112.如何在JavaScript中实现函数组合?
可以使用compose和pipe函数,将多个函数组合成一个函数。
113.如何在JavaScript中实现柯里化?
可以使用递归函数或bind方法实现柯里化,将多参数函数转换为单参数函数的序列。
114.如何在JavaScript中实现不可变数据?
可以使用Object.freeze方法冻结对象,或者使用Immutable.js等库管理不可变数据结构。
115.如何在JavaScript中实现函数的柯里化?
function curry(fn) {
    return function curried(...args) {
        if (args.length >= fn.length) {
            return fn.apply(this, args);
        } else {
            return function(...args2) {
                return curried.apply(this, args.concat(args2));
            };
        }
    };
}

JavaScript异步编程
116.如何使用Promise实现异步操作?
new Promise((resolve, reject) => {
    // 异步操作
    if (/* 成功 */) {
        resolve(result);
    } else {
        reject(error);
    }
});

117.如何使用Async/Await实现异步操作?
async function fetchData() {
    try {
        const response = await fetch(url);
        const data = await response.json();
        return data;
    } catch (error) {
        console.error(error);
    }
}

118.如何处理Promise的错误?
可以使用.catch()方法或在async函数中使用try...catch语句。
119.如何实现Promise的串行和并行执行?
•  串行:依次等待每个Promise解决。
•  并行:使用Promise.all()等待所有Promise解决。
120.如何使用Generator实现异步流程控制?
function* generator() {
    const result1 = yield fetch(url1);
    const result2 = yield fetch(url2);
    return [result1, result2];
}

const gen = generator();
gen.next().value.then(result1 => {
    gen.next(result1).value.then(result2 => {
        console.log(result1, result2);
    });
});

JavaScript面向对象编程
121.如何定义类和对象?
class MyClass {
    constructor() {
        // 初始化代码
    }
    myMethod() {
        // 方法实现
    }
}

const myObject = new MyClass();

122.如何实现类的继承?
class ParentClass {
    constructor() {
        super();
    }
}

class ChildClass extends ParentClass {
    constructor() {
        super();
    }
}

123.如何实现类的封装?
可以使用#定义私有属性和方法(ES6私有字段)。
124.如何实现类的多态?
通过方法重写和父类引用调用子类方法实现多态。
125.如何实现类的抽象?
可以使用abstract关键字定义抽象类和抽象方法(TypeScript支持)。
JavaScript事件处理
126.如何添加和移除事件监听器?
可以使用addEventListener和removeEventListener方法。
127.如何阻止事件冒泡和默认行为?
可以使用event.stopPropagation()阻止冒泡,event.preventDefault()阻止默认行为。
128.如何实现自定义事件?
可以使用CustomEvent构造函数创建自定义事件,然后使用dispatchEvent触发。
129.如何使用事件委托?
通过在父元素上监听事件,根据目标元素的特性进行处理,减少事件监听器的数量。
130.如何处理键盘事件?
可以监听keydown、keyup、keypress事件,获取按键信息进行处理。
JavaScript数据处理
131.如何实现数组的去重?
const uniqueArray = Array.from(new Set(array));

132.如何实现数组的扁平化?
const flattenedArray = array.flat(Infinity);

133.如何实现数组的交集、并集、差集?
•  交集:const intersection = array1.filter(value => array2.includes(value));
•  并集:const union = [...new Set([...array1, ...array2])];
•  差集:const difference = array1.filter(value => !array2.includes(value));
134.如何实现对象的深拷贝?
const deepCopy = JSON.parse(JSON.stringify(originalObject));

135.如何实现对象的属性描述符?
可以使用Object.defineProperty和Object.defineProperties方法。
JavaScript错误处理
136.如何捕获和处理运行时错误?
可以使用try...catch语句。
137.如何创建自定义错误类型?
class MyError extends Error {
    constructor(message) {
        super(message);
        this.name = 'MyError';
    }
}

138.如何获取错误的堆栈信息?
通过error.stack属性获取。
139.如何实现错误日志记录?
可以将错误信息发送到服务器端日志系统,或者使用第三方日志服务。
140.如何处理异步操作中的错误?
在Promise中使用.catch(),在async函数中使用try...catch。
JavaScript内存管理
141.如何检测内存泄漏?
可以使用性能分析工具监控内存使用情况,观察是否有持续增长的内存未被垃圾回收。
142.如何避免内存泄漏?
•  避免全局变量的滥用。
•  及时解除事件监听器。
•  清除定时器和interval。
•  避免闭包导致的意外引用。
143.如何优化JavaScript的内存使用?
•  避免创建过大的数组和对象。
•  使用弱引用(WeakMap、WeakSet)。
•  及时释放不再使用的对象引用。
144.如何使用JavaScript的垃圾回收机制?
JavaScript的垃圾回收主要通过标记清除和引用计数实现,开发者应遵循内存管理的最佳实践,避免内存泄漏。
145.如何监测JavaScript应用的内存使用?
可以使用浏览器的性能分析工具,如Chrome的Memory面板,进行内存快照和分析。
JavaScript跨浏览器兼容性
146.如何处理浏览器的差异?
可以使用条件注释、特性检测、polyfill等方法。
147.如何使用Babel实现JavaScript的跨浏览器兼容?
Babel可以将ES6+语法转换为兼容的ES5语法,结合polyfill支持旧浏览器。
148.如何使用Modernizr进行特性检测?
安装Modernizr库,使用其API检测浏览器是否支持某些特性,根据检测结果加载相应的资源。
149.如何实现图片的懒加载以提高性能?
可以监听页面的滚动事件,判断图片元素是否进入视口,然后动态设置src属性加载图片。
150.如何使用JavaScript实现浏览器的历史记录管理?
可以使用History API,如pushState、replaceState和popstate事件,管理浏览器的会话历史,实现单页面应用的路由管理。

 

相关文章:

JavaScript相关面试题

以下是150道JavaScript相关面试题及详细答案&#xff1a; JavaScript基础 1.JavaScript是什么&#xff1f; JavaScript是一种直译式脚本语言&#xff0c;主要用于网页开发&#xff0c;也可用于服务器端开发&#xff08;如Node.js&#xff09;。它是一种动态类型、弱类型、基于原…...

常见的数学模型

数学模型的基本原理 简单来说&#xff0c;数学模型就是用数学语言来描述现实世界中的现象或规律。它就像一个“翻译器”&#xff0c;把复杂的现实问题转化成我们可以用数学方法解决的问题。 核心思想&#xff1a; 简化现实&#xff1a;现实世界太复杂&#xff0c;模型会抓住最…...

计算机四级 - 数据库原理 - 第3章 「关系数据库系统概述」

3.1 关系数据库系统概述 关系数据模型的三大要素&#xff1a;关系数据结构、关系操作集合&#xff08;一次一个集合&#xff09;和关系完整性约束 1. 关系语言的特点是高度非过程化的, DBMS会自动帮用户选择存取路径&#xff0c;用户不需要依靠循环和递归完成数据的重复操作。…...

使用PHP进行自动化测试:工具与策略的全面分析

使用PHP进行自动化测试&#xff1a;工具与策略的全面分析 引言 随着软件开发的复杂性不断增加&#xff0c;自动化测试已成为确保软件质量的关键环节。PHP作为一种广泛使用的服务器端脚本语言&#xff0c;拥有丰富的生态系统和工具支持&#xff0c;使其成为自动化测试的理想选…...

discuz门户文章允许游客评论

discuz开启游客评论 1、进入后台&#xff0c;用户--用户组--系统用户组--游客--编辑 2、论坛相关 设置未允许发表回复 3、门户相关--文章评论字数(设置此用户组发表文章评论字数限制&#xff0c;设置为0将禁止此用户组发表评论) 4、验证游客回复 测试站 http://jinzhu.zhaowo.…...

AtCoder Beginner Contest 003(A - 社の給料、B -トランプ、C -プログラミング講座、D - 社の冬 )题目讲解

前言 又更新AtCoder Beginner Contes 的题目讲解啦!! 希望能给诸位带来帮助。 话不多说,开始讲解: A - 社の給料←题目翻译 为了解决这个问题,我们需要计算青木每月完成正好N个任务时的平均工资。通过分析,我们可以发现这个问题可以通过数学公式直接求解,而不需要复…...

代码随想录二刷|图论11

图论 一、基础知识 1 无向图 &#xff08;1&#xff09;度&#xff1a;一个顶点连n条边就度为n &#xff08;2&#xff09;权 加权无向图&#xff1a;有边长的无向图 &#xff08;3&#xff09;通道&#xff1a;两个顶点之间有一些边和点&#xff0c;并且没有重复的边 路…...

农资出入库登记本,农药化肥库存出入库软件,佳易王农资管理庄稼医院开单管理系统操作教程

一、概述 本实例以佳易王农资管理庄稼医院开单管理系统为例说明&#xff0c;其他版本可参考本实例。试用版软件资源可到文章最后了解&#xff0c;下载的文件为压缩包文件&#xff0c;请使用免费版的解压工具解压即可试用。 软件特点&#xff1a; 1、功能实用&#xff0c;操作简…...

串的KMP算法详解

KMP算法深度解析 一、从暴力匹配到智能跳转&#xff1a; 在文本编辑器的搜索功能中&#xff0c;当我们在百万字的文档中查找特定关键词时&#xff0c;传统暴力匹配算法的时间复杂度高达O(mn)。KMP算法通过独创的部分匹配表&#xff08;Partial Match Table&#xff09;&#x…...

软件测试之测试分类

1. 为什么要对软件测试进行分类 软件测试是软件⽣命周期中的⼀个重要环节&#xff0c;具有较⾼的复杂性&#xff0c;对于软件测试&#xff0c;可以从不同的⻆度 加以分类&#xff0c;使开发者在软件开发过程中的不同层次、不同阶段对测试⼯作进⾏更好的执⾏和管理测试 的分类⽅…...

机器学习 : 训练过程

文章目录 概要流程1 . 前向传播2 . 计算损失3 . 后向传播4 . 梯度下降 技术名词解释小结 【全文大纲】 : https://blog.csdn.net/Engineer_LU/article/details/135149485 概要 主要思想拟合数据 流程 1 . 前向传播 y func * (wxb) 2 . 计算损失 y - Y 3 . 后向传播 根据链式法…...

六十天前端强化训练之第二十天React Router 基础详解

欢迎来到编程星辰海的博客讲解 看完可以给一个免费的三连吗&#xff0c;谢谢大佬&#xff01; 目录 一、核心概念 1.1 核心组件 1.2 路由模式对比 二、核心代码示例 2.1 基础路由配置 2.2 动态路由示例 2.3 嵌套路由实现 2.4 完整示例代码 三、关键功能实现效果 四、…...

如何在AVL树中高效插入并保持平衡:一步步掌握旋转与平衡因子 —— 旋转篇

文章目录 AVL树种旋转的规则右单旋右单旋代码左单旋左单旋代码左右双旋左右单旋的代码右左单旋右左单旋的代码 AVL树种旋转的规则 在AVL树中&#xff0c;旋转是为了保持树的平衡性。AVL树是一种自平衡的二叉搜索树&#xff0c;它要求每个节点的左右子树的高度差不能超过1。当插…...

C++Primer学习(7.1 定义抽象数据类型)

类的基本思想是数据抽象(data abstraction)和封装(encapsulation)。数据抽象是种依赖于接口(interface)和实现(implementation)分离的编程(以及设计)技术。类的接口包括用户所能执行的操作:类的实现则包括类的数据成员、负责接口实现的函数体以及定义类所需的各种私有函数。 封…...

Vue 3 Diff 算法深度解析:与 Vue 2 双端比对对比

文章目录 1. 核心算法概述1.1 Vue 2 双端比对算法1.2 Vue 3 快速 Diff 算法 2. 算法复杂度分析2.1 时间复杂度对比2.2 空间复杂度对比 3. 核心实现解析3.1 Vue 2 双端比对代码3.2 Vue 3 快速 Diff 代码 4. 性能优化分析4.1 性能测试数据4.2 内存使用对比 5. 使用场景分析5.1 Vu…...

启动桌面Docker提示虚拟服务未启动

在启动 Docker Desktop 时&#xff0c;可能会遇到以下提示&#xff1a; Docker Desktop - Virtual Machine Platform not enabled Virtual Machine Platform not enabled该错误通常是由于 Windows 未启用 “Virtual Machine Platform” 功能导致的&#xff0c;这是运行 Docker…...

【SpringBoot】实现登录功能

在上一篇博客中&#xff0c;我们讲解了注册页面的实现。在此基础上会跳转到登录页面&#xff0c;今天给大家带来的是使用 SpringBoot&#xff0c;MyBatis&#xff0c;Html&#xff0c;CSS&#xff0c;JavaScript&#xff0c;前后端交互实现一个登录功能。 目录 一、效果 二、…...

DataWhale 速通AI编程开发:(进阶篇)第3章 提示词(Prompts)配置项

学习网址&#xff1a;Datawhale-学用 AI,从此开始 3.1 Roo Code提示词配置了什么 众所周知&#xff0c;提示词&#xff08;Prompt&#xff09;是用户向大语言模型输入的一段文本&#xff0c;用于指导大语言模型生成符合用户要求的输出。在ai编程领域更是如此&#xff0c;提示…...

VUE中VNode(虚拟节点)是个啥?

用 JavaScript 生成 Virtual DOM&#xff08;VNode&#xff09; 在 Vue 中&#xff0c;Virtual DOM&#xff08;虚拟 DOM&#xff09;是一个用 JavaScript 对象表示真实 DOM 结构的抽象层。通过这种方式&#xff0c;Vue 可以通过比较 Virtual DOM 与真实 DOM 的差异来最小化更…...

力扣:3. 无重复字符的最长子串(滑动窗口)

3. 无重复字符的最长子串 - 力扣&#xff08;LeetCode&#xff09;3. 无重复字符的最长子串 - 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1:输入: s "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc"…...

注解+AOP实现权限控制

注解与AOP实战&#xff1a;实现权限控制 在现代Java开发中&#xff0c;注解&#xff08;Annotation&#xff09;和面向切面编程&#xff08;AOP&#xff09;是两种强大的技术&#xff0c;它们能够帮助我们实现代码的解耦&#xff0c;提高代码的可读性和可维护性。本文将通过一…...

2.5 python接口编程

在现代软件开发的复杂生态系统中&#xff0c;不同系统、模块之间的交互协作至关重要。接口编程作为一种关键机制&#xff0c;定义了组件之间的通信规范与交互方式。Python 凭借其卓越的灵活性、丰富的库资源以及简洁易读的语法&#xff0c;在接口编程领域占据了重要地位&#x…...

睡不着运动锻炼贴士

在快节奏的现代生活中&#xff0c;失眠似乎已成为许多人的“夜间伴侣”。夜晚辗转反侧&#xff0c;白天精神不振&#xff0c;这样的恶性循环让许多人苦不堪言。其实&#xff0c;除了调整作息和饮食习惯&#xff0c;适当的运动也是改善睡眠的一剂良药。今天&#xff0c;就让我们…...

【Python入门】一篇掌握Python中的字典(创建、访问、修改、字典方法)【详细版】

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;《Python/PyTorch极简课》_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目…...

深入理解 HTML 表单与输入

在网页开发的广袤领域中&#xff0c;HTML 表单如同搭建用户与服务器沟通桥梁的基石。它是收集用户输入信息的关键渠道&#xff0c;承载着交互的重任。今天&#xff0c;就让我们一同深入探索 HTML 表单与输入的奥秘。​ HTML 表单在文档中划定出一片独特的区域&#xff0c;这片…...

宝塔docker切换存储目录

1、 停止 Docker 服务 sudo systemctl stop docker2、迁移 Docker 数据目录 sudo mkdir -p /newpath/docker sudo rsync -avz /var/lib/docker/ /newpath/docker/3、修改 Docker 配置文件 vi /etc/docker/daemon.json 内容 {"data-root": "/newpath/docker&q…...

IPoIB驱动中RSS与TSS技术的深度解析:多队列机制与性能优化

在高速网络通信中,IP over InfiniBand(IPoIB) 是实现低延迟、高吞吐的关键技术之一。为了充分发挥多核处理器的性能潜力,IPoIB驱动通过 接收侧扩展(RSS) 和 发送侧扩展(TSS) 技术,实现了数据包处理的多队列并行化。本文结合源码实现与性能优化策略,深入解析其核心机制…...

目前人工智能的发展,判断10年、20年后的人工智能发展的主要方向,或者带动的主要产业

根据2025年的最新行业研究和技术演进趋势&#xff0c;结合历史发展轨迹&#xff0c;未来10-20年人工智能发展的主要方向及带动的产业将呈现以下六大核心趋势&#xff1a; 一、算力革命与底层架构优化 核心地位&#xff1a;算力将成为类似“新能源电池”的基础设施&#xff0c;…...

DeepSeek-prompt指令-当DeepSeek答非所问,应该如何准确的表达我们的诉求?

当DeepSeek答非所问&#xff0c;应该如何准确的表达我们的诉求&#xff1f;不同使用场景如何向DeepSeek发问&#xff1f;是否有指令公式&#xff1f; 目录 1、 扮演专家型指令2、 知识蒸馏型指令3、 颗粒度调节型指令4、 时间轴推演型指令5、 极端测试型6、 逆向思维型指令7、…...

并发编程面试题二

1、java线程常见的基本状态有哪些&#xff0c;这些状态分别是做什么的 &#xff08;1&#xff09;创建&#xff08;New&#xff09;&#xff1a;new Thread()&#xff0c;生成线程对象。 &#xff08;2&#xff09;就绪&#xff08;Runnable&#xff09;:当调用线程对象的sta…...

【NLP】 8. 处理常见词(Stopwords)的不同策略

处理常见词&#xff08;Stopwords&#xff09;的不同策略 在自然语言处理 (NLP) 和信息检索 (IR) 任务中&#xff0c;常见词&#xff08;Stopwords&#xff09; 是指在文本中频繁出现但通常对主要任务贡献较小的词&#xff0c;例如 “the”、“is”、“in”、“and” 等。这些…...

【Java基础】java中的lambda表达式

Java Lambda表达式深度解析&#xff1a;语法、简化规则与实战 前言 Java 8的Lambda表达式通过简化匿名内部类和引入函数式编程&#xff0c;极大提升了代码的简洁性和可读性。 一、Lambda表达式的核心语法 Lambda表达式由参数列表、->符号和表达式主体组成&#xff0c;其基…...

【RS】OneRec快手-生成式推荐模型

note 本文提出了一种名为 OneRec 的统一生成式推荐框架&#xff0c;旨在替代传统的多阶段排序策略&#xff0c;通过一个端到端的生成模型直接生成推荐结果。OneRec 的主要贡献包括&#xff1a; 编码器-解码器结构&#xff1a;采用稀疏混合专家&#xff08;MoE&#xff09;架构…...

DQN 玩 2048 实战|第一期!搭建游戏环境(附 PyGame 可视化源码)

视频讲解&#xff1a; DQN 玩 2048 实战&#xff5c;第一期&#xff01;搭建游戏环境&#xff08;附 PyGame 可视化源码&#xff09; 代码仓库&#xff1a;GitHub - LitchiCheng/DRL-learning: 深度强化学习 2048游戏介绍&#xff0c;引用维基百科 《2048》在44的网格上进行。…...

练习题:87

目录 Python题目 题目 题目分析 代码实现 代码解释 列表推导式部分&#xff1a; 变量赋值和输出&#xff1a; 运行思路 结束语 Python题目 题目 使用列表推导式生成一个包含 1 到 100 中所有偶数的列表。 题目分析 本题要求使用 Python 的列表推导式生成一个包含 …...

二叉树的层序遍历(102)

102. 二叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* …...

NVMe集群:加速数据处理

随着大数据和云计算的快速发展&#xff0c;企业面临着前所未有的数据处理挑战。传统的存储技术和架构已经难以满足现代应用对高性能和低延迟的需求。在这种背景下&#xff0c;NVMe&#xff08;Non-Volatile Memory Express&#xff09;集群应运而生&#xff0c;它以其卓越的性能…...

JUC并发编程:共享模型之管程

一、共享带来的问题 &#xff08;1&#xff09;Java的体现 两个线程对初始值为 0 的静态变量一个做自增&#xff0c;一个做自减&#xff0c;各做 5000 次&#xff0c;结果是 0 吗&#xff1f; &#xff08;2&#xff09;问题分析 以上的结果可能是正数、负数、零。为什么呢…...

Java构造方法详解:从入门到实战

目录 一、什么是构造方法&#xff1f; 二、构造方法的作用 三、构造方法分类与使用 1. 默认构造方法 2. 有参构造方法 3. 构造方法重载 四、注意事项&#xff08;避坑指南&#xff09; 五、经典面试题解析 六、实战应用场景 七、总结 一、什么是构造方法&#xff1f; …...

Uniapp 字体加载问题(文件本地存储)

项目场景&#xff1a; 在最近公司开发一款小程序&#xff0c;但是小程序的文字需要用艺术字&#xff0c;就是那种不能用切图绕开的那种&#xff01; 问题描述 我们在使用uni.loadfontface Api请求数据字体文件的时候总是会报错&#xff0c;就是那种网上也找不到解决方法的那种…...

HTML 新手入门:从零基础到搭建第一个静态页面(一)

开启 HTML 学习之旅 在互联网的广袤世界中&#xff0c;网页是我们与信息交互的主要窗口。而 HTML&#xff0c;作为构建网页的基石&#xff0c;就像是搭建房屋的砖块&#xff0c;是网页开发中不可或缺的基础。无论你是对网页开发充满好奇的小白&#xff0c;还是渴望系统学习前端…...

使用multiprocessing实现进程间共享内存

在 Python 中,可以使用多种方法来实现几个进程之间的通信。 简单消息传递:使用 multiprocessing.Queue 或 multiprocessing.Pipe。 共享简单数据:使用 multiprocessing.Value 或 multiprocessing.Array。 共享复杂数据:使用 multiprocessing.Manager。 进程间信号控制:使用…...

在IDEA中连接达梦数据库:详细配置指南

达梦数据库&#xff08;DM Database&#xff09;作为国产关系型数据库的代表&#xff0c;广泛应用于企业级系统开发。本文将详细介绍如何在IntelliJ IDEA中配置并连接达梦数据库&#xff0c;助力开发者高效完成数据库开发工作。 准备工作 1. 下载达梦JDBC驱动 访问达梦官方资…...

docker无法正常拉取镜像问题的解决

目录 1.前言 2.解决方案 1.前言 安装docker后拉取镜像&#xff0c;遇见了如下问题&#xff1a; Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded whil…...

如何在保持安全/合规的同时更快地构建应用程序:DevOps 指南

随着敏捷思维方式的兴起&#xff0c;开发和 DevOps 团队都面临着持续的压力&#xff0c;他们需要以迭代方式缩短发布周期并加快部署速度&#xff0c;以满足不断增长的客户期望。随着这种对速度的追求越来越强烈&#xff0c;维护安全性和合规性标准的复杂性也随之增加。 当今 D…...

SQL Server查询优化

最常用&#xff0c;最有效的数据库优化方式 查询语句层面 避免全表扫描 使用索引&#xff1a;确保查询条件中的字段有索引。例如&#xff0c;查询语句 SELECT * FROM users WHERE age > 20&#xff0c;若 age 字段有索引&#xff0c;数据库会利用索引快速定位符合条件的记…...

iOS底层原理系列04-并发编程

在移动应用开发中&#xff0c;流畅的用户体验至关重要&#xff0c;而并发编程是实现这一目标的关键技术。本文将深入探讨iOS平台上的并发编程和多线程架构&#xff0c;帮助你构建高性能、响应迅速的应用程序。 1. iOS线程调度机制 1.1 线程本质和iOS线程调度机制 线程是操作…...

企业数字化转型数据治理解决方案(119页PPT)(文末有下载方式)

资料解读&#xff1a;企业数字化转型数据治理解决方案 详细资料请看本解读文章的最后内容。 在当今数字化时代&#xff0c;数据已经成为企业最宝贵的资产之一。然而&#xff0c;随着数据量的激增和数据来源的多样化&#xff0c;如何有效管理和利用这些数据成为了企业面临的一…...

git报错:“fatal:refusing to merge unrelated histories“

新建仓库&#xff0c;克隆本地项目到新仓库&#xff0c;首次同步本地已提交的代码到远程时&#xff0c;报错&#xff1a;"fatal:refusing to merge unrelated histories" 。 报错意思是&#xff1a;致命的&#xff1a;拒绝合并无关的历史。 一、问题背景&#xff…...

Jmeter下载及环境配置

Jmeter下载及环境配置 java环境变量配置配置jdk环境变量检查是否配置成功JMeter下载 java环境变量配置 访问地址&#xff1a; https://www.oracle.com/cn/java/technologies/downloads/ 注意&#xff1a;需要自己注册账号 下载完成&#xff0c;解压后的目录为&#xff1a; …...