前端面试基础知识整理(一)

1.vue生命周期

beforeCreate 创建 注入依赖 初始化非响应式数据 beforeCreate created 数据请求,初始化数据
设置全局时间监听 beforeMount挂载 模版编译完成后的调试 操作 dom初始化 操作dom初始化第三方插件 更新 在更新前查看
DOM 状态,不建议修改数据 操作更新后的 DOM,检查更新后的效果 销毁 清理定时器、事件监听、断开 WebSocket
检查销毁状态,调试用途

2.resizeObserver

resizeObserver ResizeObserver 是一个 JavaScript
API,允许你观察一个元素的尺寸变化。当被观察的元素的尺寸(宽度或高度)发生变化时,ResizeObserver 会触发相应的回调函数。这个
API 可以用于响应页面元素的尺寸变化,类似于监听 resize
事件,但它更加精确地关注元素本身的尺寸变化,而不是整个视口或窗口的大小变化。 主要特点:
精确的尺寸变化监听:它可以监控特定元素的大小变化,而不仅仅是浏览器窗口的大小。
回调触发时机:当被观察的元素的尺寸变化时,ResizeObserver 会异步地调用回调函数。这个回调会提供相关的尺寸信息。
避免重复监听:通过 ResizeObserver,你可以精确地检测某个元素的尺寸变化,而不需要频繁地使用像 window.resize
这样的全局事件监听器来监听所有元素。

参数: entries:ResizeObserver 的回调函数接收一个 entries 数组,其中包含所有被观察元素的尺寸变化数据。每个
entry 包含以下信息: target: 发生变化的元素。 contentRect: 该元素的新尺寸,通常包含
width、height、top、left 等属性。 你还可以访问一些其他信息,例如 borderBoxSize 和
contentBoxSize,具体取决于浏览器的实现。 何时使用 ResizeObserver?
动态布局:当页面中某个元素的大小会根据内容或用户交互动态变化时,可以使用 ResizeObserver
来做相应的处理(如重绘、重新布局等)。 响应式设计:监控某些元素的尺寸变化,可以根据元素大小调整页面布局,类似于响应式设计中的布局调整。
元素大小变化的动画或效果:当需要根据元素大小的变化来控制动画或其他动态效果时,ResizeObserver 是一个非常合适的工具。

// 创建 ResizeObserver 实例
const resizeObserver = new ResizeObserver(entries => {
  // 处理尺寸变化的逻辑
  entries.forEach(entry => {
    console.log('Element:', entry.target); // 被观察的元素
    console.log('Content Rect:', entry.contentRect); // 元素的新尺寸
  });
});

// 观察一个元素
const element = document.querySelector('.my-element');
resizeObserver.observe(element);

// 停止观察
// resizeObserver.unobserve(element);

// 创建 ResizeObserver 实例
const resizeObserver = new ResizeObserver(entries => {
  // 处理尺寸变化的逻辑
  entries.forEach(entry => {
    console.log('Element:', entry.target); // 被观察的元素
    console.log('Content Rect:', entry.contentRect); // 元素的新尺寸
  });
});

// 观察一个元素
const element = document.querySelector('.my-element');
resizeObserver.observe(element);

// 停止观察
// resizeObserver.unobserve(element);

参数:
entries:ResizeObserver 的回调函数接收一个 entries 数组,其中包含所有被观察元素的尺寸变化数据。每个 entry 包含以下信息:
target: 发生变化的元素。
contentRect: 该元素的新尺寸,通常包含 width、height、top、left 等属性。
你还可以访问一些其他信息,例如 borderBoxSize 和 contentBoxSize,具体取决于浏览器的实现。
何时使用 ResizeObserver?
动态布局:当页面中某个元素的大小会根据内容或用户交互动态变化时,可以使用 ResizeObserver 来做相应的处理(如重绘、重新布局等)。
响应式设计:监控某些元素的尺寸变化,可以根据元素大小调整页面布局,类似于响应式设计中的布局调整。
元素大小变化的动画或效果:当需要根据元素大小的变化来控制动画或其他动态效果时,ResizeObserver 是一个非常合适的工具。加粗样式

const debounce = (callback: (...args: any[]) => void, delay: number) => {
  let tid: any;
  return function (...args: any[]) {
    const ctx = self;
    tid && clearTimeout(tid);
    tid = setTimeout(() => {
      callback.apply(ctx, args);
    }, delay);
  };
};

const _ = (window as any).ResizeObserver;
(window as any).ResizeObserver = class ResizeObserver extends _ {
  constructor(callback: (...args: any[]) => void) {
    callback = debounce(callback, 20);
    super(callback);
  }
};

// 监听某个元素的尺寸变化并更新其背景颜色

const resizeObserver = new ResizeObserver(entries => {
  entries.forEach(entry => {
    const width = entry.contentRect.width;
    if (width < 500) {
      entry.target.style.backgroundColor = 'lightblue';
    } else {
      entry.target.style.backgroundColor = 'lightgreen';
    }
  });
});

const element = document.querySelector('.resize-element');
resizeObserver.observe(element);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ResizeObserver 和 resize 事件都是用来响应尺寸变化的,但它们的使用场景、触发时机、目标和性能表现有一些显著的区别。

  1. 目标对象不同
    resize 事件:resize 事件是监听 窗口(即浏览器视口)的大小变化。当浏览器窗口的大小发生变化时,resize 事件会被触发。它不关心页面上某个特定元素的大小变化,而是全局监听整个视口的尺寸变化。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    操作
   const arr = [1, 2, 3, 4]
      // const newFilterArray = [...new Set(arr)];
      // console.log("运用Set集合过滤元素",newFilterArray)

      // const newFilterArray = arr.filter((value,index,arr)=>{
      //   return arr.indexOf(value) === index;
      // })
      //reduce + includes: 使用 reduce 和 includes 进行去重

      /*
    array.reduce((accumulator, currentValue, currentIndex, array) => {
    // 回调函数体
    }, initialValue);

    accumulator:累加器,保存上一次调用回调函数时返回的值,第一次调用时是 initialValue(如果提供了)。
    currentValue:当前数组元素的值。
    currentIndex(可选):当前元素的索引。
    array(可选):原始数组。
    initialValue(可选):累加器的初始值。如果未提供,reduce() 会以数组的第一个元素作为初始值。

    const arr = [1, 2, 3, 4, 5];

    const sum = arr.reduce((accumulator, currentValue) => {
      return accumulator + currentValue;
    }, 0);  // 初始值为 0
    
    const sum = srr.reduce((nextSum,currentSum)=>{
         return nextSum + currentSum; 
    },0)
    console.log(sum);  // 输出 15

    示例:求最大值

    const arr = [1, 9, 4, 6, 2];
    const max = arr.reduce((accumulator, currentValue) => {
      return accumulator > currentValue ? accumulator : currentValue;
    }, arr[0]);  // 初始值为数组的第一个元素
    
    解释:
    accumulator 存储当前找到的最大值。
    每次遍历数组时,比较当前元素 currentValue 和 accumulator,并返回较大的值
    console.log(max);  // 输出 9

    const arr = [1, 2, 2, 3, 4, 4, 5];
    const uniqueArr = arr.reduce((accumulator, currentValue) => {
      if (!accumulator.includes(currentValue)) {
        accumulator.push(currentValue);
      }
      return accumulator;
    }, []);

    console.log(uniqueArr);  // 输出 [1, 2, 3, 4, 5]
    考察点:
    如何高效地去重,考虑时间复杂度。
    对于较大的数据集,你如何选择适当的数据结构(比如 Set、Map)来提高效率。
    处理对象去重时如何确保每个对象唯一。
    */

      // console.log("运用Set集合过滤元素",newFilterArray)
      const arrw = [
        { id: 1, name: 'John' },
        { id: 2, name: 'Jane' },
        { id: 1, name: 'John' },
      ]
      // const newFilterArray = Array.from(new Map(arrw.map(item=>[item.id,item])).values())
      // const uniqueArr = Array.from(new Map(arrw.map(item => [item.id, item])).values());
      // console.log(uniqueArr);  // [{ id: 1, name: 'John' }, { id: 2, name: 'Jane' }]

      /*
    数组反转 arr.reverse()
    字符串反转
    字符串本身是不可变的通常将字符串转为数组反转 拼接成字符串
    const str = 'hello'
    const reversedStr = ste.split('').reverse().join('')
    console.log(reverseStr)

    深拷贝(深复制)
    深拷贝和钱拷贝是数据处理中常见的考点 面试中经常会问如何进行正确的使用深拷贝操作 尤其是处理对象和数组
    确保不出现引用问题
    常见方法
    JSON方法 使用JSON.parse()和JSON.stringify()进行深拷贝
    const obj = {a:1,b:{c:2}}
    const cloneObj = JSON.parse(JSON.stringify(obj))
    递归方法: 通过递归遍历对象的每一层并手动进行深拷贝:
    const arr = [3, 1, 4, 1, 5, 9];
    arr.sort((a, b) => a - b);  // 数字升序
    console.log(arr);  // [1, 1, 3, 4, 5, 9]
    const arr = [3, 1, 2, 2, 4, 3];
    const result = [...new Set(arr)].sort((a, b) => a - b);
    console.log(result);  // [1, 2, 3, 4]


3.vue2和vue3生命周期钩子的区别

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.W3C 标准

W3C 标准 概念:由万维网联盟(W3C)制定的 Web 开发标准,确保 HTML、CSS 和其他 Web 技术的兼容性和一致性。 重要性:遵循 W3C 标准可提升网页的可维护性、语义化和搜索引擎优化。 核心点: 使用语义化标签(如
<article>、<section>、<footer>)。 保证 HTML 的结构清晰,避免语法错误。 确保 CSS
样式符合标准(如避免过时的属性)。

为什么要遵循

(1)、因为不管什么浏览器都是遵循HTML的标准来开发的,如果你的网页的HTML不遵循规范,就无法在浏览器中得到正确的呈现
(2)、遵循html标准能够能过让过大浏览器更好的解析;提高可阅读性;

用一个程序语言来说,我们是转换器,我们想方设法让我们的页面、我们的程序能够支持所有浏览器,能够满足尽可能多的用户。我们要满足所有的用户,即使做不到,我们也要满足我们技术范围之内的所有用户。

5.HTML5 和 CSS3比较

HTML5 新特性: 语义化标签:<header>、<footer>、<nav> 等。 多媒体:<audio>、<video>
标签支持本地音视频播放。 表单增强: 的新类型(如 date、email)。 本地存储:localStorage 和
sessionStorage 提供持久数据存储能力。

CSS3

新特性: 选择器:nth-child、not 等高级选择器。 动画:@keyframes 实现复杂动画效果。
过渡与变换:transition、transform 创建交互效果。 响应式设计:@media 媒体查询支持多设备适配。
新布局:flexbox 和 grid 布局提升页面布局效率。

6.盒模型

标准盒模型与怪异盒模型的区别。 标准盒模型:width 和 height 只包括内容区域,不包括 padding 和 border。
怪异盒模型:width 和 height 包括 content + padding + border。

7.什么情况下会使用 border-box?
  1. 固定布局: 当需要确保元素的宽度和高度保持固定,不因 padding 和 border 改变。 适用于复杂的网格或卡片布局。

/* 标准盒模型 */
box-sizing: content-box;

/* 怪异盒模型 */
box-sizing: border-box;
· content-box: 用于需要精确控制内容区域的场景,但要手动计算额外的尺寸。
· border-box: 更适合现代布局需求,简化宽高的计算,同时确保元素大小固定,推荐作为默认

8.Flexbox 布局:

主轴与交叉轴概念。 常用属性:justify-content、align-items、flex-grow。 示例问题:如何实现水平垂直居中
Grid 布局:

定义网格:grid-template-rows、grid-template-columns。 常见用法:实现复杂的二维布局

9.CSS 预处理器的优势

CSS 预处理器(如 Sass、Less、Stylus)扩展了 CSS 的功能,主要有以下优势:
变量(Variables):

使用变量存储颜色、字体、间距等可复用值,方便维护和更新。

$primary-color: #3498db;.button {
    background-color: $primary-color;
}

嵌套规则(Nesting):

通过嵌套编写样式,更贴近 HTML 结构,简化层级关系。

.nav {
    ul {
        li {
            a {
                color: blue;
            }
        }
    }
}

混入(Mixins):

定义可复用的代码块,减少冗余。

@mixin border-radius($radius) {
    border-radius: $radius;
}.box {
    @include border-radius(10px);
}

继承(Extend):

可以继承已有的样式,减少重复代码。

%button-styles {
    padding: 10px;
    border: none;
}.primary-button {
    @extend %button-styles;
    background-color: blue;
}

模块化:

支持将代码分解为多个文件,便于管理。

// 文件 _variables.scss$primary-color: #3498db;
// 文件 main.scss@import 'variables';.button {
    color: $primary-color;
}

数学运算:

支持基本的数学计算,用于动态调整样式。


$base-spacing: 10px;.container {
    margin: $base-spacing * 2;
}

条件与循环:

支持条件语句和循环,生成更复杂的样式。

@for $i from 1 through 3 {
    .col-#{$i} {
        width: 100% / $i;
    }
}
10.如何避免过度使用全局样式?

使用命名空间或前缀:

为类名添加特定的命名空间或前缀,避免与全局样式冲突。

定位布局:
相对定位:position: relative;
绝对定位:position: absolute;
固定定位:position: fixed;
粘性定位:position: sticky;

11.CSS 优化

减少重复样式,使用 Sass、Less 变量或混合。 样式的层叠与优先级: 行内样式 > ID 选择器 > 类选择器 > 元素选择器。 使用 !important 的规则会强制优先级最高,但应谨慎使用。

12.层叠上下文(Z-index)

如何解决 z-index 失效的问题 解决 z-index 失效的问题 z-index 的作用是控制元素在 z
轴上的堆叠顺序,但如果使用不当,会导致它看似“失效”。以下是常见原因和解决方法:

  1. z-index 必须作用在定位上下文中 问题: 如果元素没有设置 position 或者 position 的值为 static(默认值),z-index 将不会生效。 解决方法: 确保目标元素具有定位上下文,使用 position:
    relative;、absolute;、fixed; 或 sticky;。
13.浏览器兼容性

常见问题: IE 不支持 flex 部分功能。 不同浏览器的私有前缀(如 -webkit-)。 解决方法: 使用 Autoprefixer
自动添加兼容前缀。 借助 CSS Polyfill 处理新特性的兼容性。 触发层叠上下文的条件: 设置 position 为
relative、absolute 或 fixed 且定义 z-index。 使用 transform、filter、opacity
等属性。

14.TypeScript (TS) 和 ES6

TypeScript 核心点: 类型系统:string、number、interface、enum。
面向对象编程:class、inheritance、decorators。 工具类型:Partial、Readonly、Pick 等内置工具。
优势: 提高代码可读性和可维护性。 在大型项目中减少运行时错误。 ES6 新特性: 块级作用域:let、const。
箭头函数:简化函数表达式。 模块化:import 和 export。 异步编程:Promise 和 async/await。
解构赋值与展开运算符:简化数组和对象的操作。 模板字符串:通过 `` 提供字符串插值。

15.Sass 预处理器

功能:

嵌套规则:清晰地表达层次关系。 变量:定义可复用的颜色、间距等。 混合(Mixin):封装可复用的样式代码。 函数:动态生成复杂样式。
优势: 提高开发效率,减少代码冗余。 保持样式的模块化和结构化。

16.数据请求(Ajax 和 Axios)

Ajax
概念:使用原生 JavaScript 发起 HTTP 请求。

const xhr = new XMLHttpRequest();
xhr.open('GET', '/api/data');
xhr.onload = () => {
  console.log(xhr.responseText);
};
xhr.send();

Axios
概念:基于 Promise 的 HTTP 库,简化了数据请求。
示例:

axios.get('/api/data').then(response => {
  console.log(response.data);
});
17. UI 框架(Element-UI、Ant Design、UView)

Element-UI:

提供 Vue 的组件库,适合管理后台开发。 组件示例:表单、表格、分页等。

Ant Design:

提供 React 的组件库,也有 Vue 版本。
强调设计语言和可扩展性。

UView:

专为 UniApp 开发的 UI 框架。 提供适配多端的组件,如 u-button、u-calendar。

Vue 和 UniApp
Vue

核心特性: 双向绑定:v-model。 组件化开发:将页面分解为独立组件。 响应式数据:通过 reactive 和 computed
管理状态。 Vue Router:管理页面路由。 Vuex:全局状态管理。

UniApp
特点:

跨平台:一次开发,生成多端(小程序、H5、App)。 内置 API:如 uni.request、uni.navigateTo。
Webpack 功能: 模块打包:整合 JavaScript、CSS、图片等资源。 提供插件系统:如 HtmlWebpackPlugin。
支持代码分割和按需加载。

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'bundle.js',
  },
  module: {
    rules: [
      { test: /\.css$/, use: ['style-loader', 'css-loader'] },
    ],
  },
};
18. Vue生命周期

问:Vue 的生命周期有哪些阶段?每个阶段的用途是什么? o常见生命周期钩子:
1.beforeCreate:实例初始化之前,无法访问 data 和 methods。
2.created:实例创建完成,可以访问 data 和 methods,未挂载 DOM。
3.beforeMount:模板已编译,但尚未挂载到 DOM。
4.mounted:组件挂载完成,可进行 DOM 操作。
5.beforeUpdate:响应式数据更新前触发。
6.updated:响应式数据更新后触发。
7.beforeDestroy:组件销毁前触发,适合清理定时器、事件监听等。
8.destroyed:组件销毁后触发。

19. 双向绑定

Vue 通过 Object.defineProperty 实现数据劫持,结合 发布-订阅模式 来响应视图和数据的变化。
Vue 3 使用 Proxy 代替 Object.defineProperty 提升性能和深度监听能力。

20. const var的区别?

(const定义的变量不可以修改,而且必须初始化。.var定义的变量可以修改,如果不初始化会输出undefined,不会报错。let是块级作用域,函数内部使用let定义后,对函数外部无影响。)

11. 箭头函数的使用?追问this的指向问题,有哪几种?(作为普通函数调用 – 返回window;使用call apply bind被调用 – 传入什么绑定什么;作为对象方法被调用 – 返回对象本身;在class方法中被调用 – 返回当前实例本身;箭头函数 – 永远会找上级作用域this的值来确定)

12. 追问call apply bind的区别?(call 和 apply 都是为了解决改变 this 的指向。call 可以接收一个参数列表,apply 只接受一个参数数组;bind 方法会返回一个函数。bind固定某个函数的参数和this,返回原函数的拷贝)

13.追问闭包是什莫?(函数 A 内部有一个函数 B,函数 B 可以访问到函数 A 中的变量,那么函数 B 就是闭包。闭包存在的意义就是让我们可以间接访问函数内部的变量。)再追问JS作用域有哪些?(三级作用域:全局作用域(全局都可以使用,如document对象)函数作用域(一个函数中定义的只能在当前函数使用)块级作用域(ES新增)(块:包含if while等包含大括号,在大括号外使用会报错)

14.v-if和v-show有什莫区别,分别适用于什么情况?(渲染结果不同,对于v-if只会渲染一个dom元素;对于v-show,data是a就会显示a的dom元素,对于其他的选择会渲染display:none,只是不显示而已。对于一次选择或者数据更新不频繁时,选择v-if;如果需要频繁切换,需要v-show,用display:none控制隐藏和显示效果比较好,否则用v-if会导致dom结点频繁的销毁加载。)

15.兄弟组件通讯的方法有哪些?(我只说了使用事件中心,这个知识点还要总结)

21. Keep-alive 是什么

Keep-alive是vue中的为你之组件 ,能在组件切换中将庄涛保留在内存中 防止重复渲染dom
Keep-alive包裹性动态组件时 会缓存不活动的实例对象 而不是销毁他们
Keep-alive可以设置以下属性 props属性
Include-字符串或正则表达式 只有名称匹配的组件
Exclude 任何符合条件的都不会缓存
Max 最多可以缓存多少组件实例
关于keep-alive的基本用法

/keep-alive>

22. Vue 组件不需要任何 polyfill polyfill是啥意思啊

在 JavaScript 和前端开发中,polyfill 是指一种代码或库,用来为那些不支持某些现代功能的浏览器提供兼容性支持。
当新的 JavaScript 特性或浏览器 API 被引入时,较旧的浏览器可能不支持这些特性。Polyfill 会检测到浏览器是否支持这些功能,如果不支持,就会加载一些额外的代码来模拟这些功能的行为,从而确保代码能够在所有浏览器中正常运行。
例如,Promise 是在 ES6 中引入的一个特性,而较旧的浏览器不支持它。这时我们可以引入一个 polyfill 来让旧版浏览器理解 Promise 的语法和功能。
在你的问题中,“Vue 组件不需要任何 polyfill” 意思是:这些组件不需要使用 polyfill 来兼容不同浏览器,因为它们已经可以在当前环境下正常工作,或者你只打算支持那些已经原生支持相关特性的现代浏览器。
在 Vue 中,property 指的是对象中的属性,而不是特指原型链上的属性。你提到的 “实例 property” 是 Vue 实例自身的属性,它们有 $ 前缀来避免与用户定义的属性冲突。
在 Vue 中,实例的 property 和 methods 是 Vue 实例直接暴露给用户的接口,供开发者调用。例如, e l 、 el、 elrefs、 w a t c h 、 watch、 watchnextTick 等,这些属性和方法并非来自用户定义的 data,而是 Vue 框架提供的功能。

.mapCarPop
原型链和 Vue 实例的关系
虽然 Vue 实例上的这些 $ 开头的 property 和方法是 Vue 提供的功能,但它们实际上也是通过 Vue 的原型链机制实现的。在 JavaScript 中,所有对象都有一个原型对象(prototype),Vue 也不例外。当你访问一个 Vue 实例的属性或方法时,JavaScript 会首先检查实例本身是否有这个属性或方法,如果没有,便会沿着原型链向上查找,直到找到为止。
总结:
property 是指对象(在这里是 Vue 实例)上的属性,而不仅限于原型链上的属性。
Vue 中的 $ 前缀属性和方法是 Vue 框架提供的,便于与用户定义的数据区分。
Vue 实例上的某些方法和属性可能通过原型链提供,但这些方法是 Vue 内部提供的功能。

是的,property(属性)在 JavaScript 中是一个非常常见的概念。它是指对象的键-值对,每个对象都由一组属性构成。

JavaScript 中的 Property
在 JavaScript 中,几乎所有的东西都是对象,而对象是由属性(property)组成的。每个属性都有一个名字(键)和一个对应的值。

属性的类型:
数据属性:表示对象上的某个值。
const obj = {
name: ‘John’, // 这里的 ‘name’ 是属性名,‘John’ 是属性值
age: 30
};
console.log(obj.name); // 输出 ‘John’
访问器属性:不直接包含值,但通过 getter 和 setter 进行访问和修改。
Property 和 Prototype(原型链)
JavaScript 中对象的属性可以存在于自身,也可以从原型链(prototype chain)继承。原型链是 JavaScript 实现继承的一种机制。
自有属性:对象自身定义的属性。
继承属性:通过原型链从另一个对象继承来的属性。
javascript
复制代码
const obj = { a: 1 };console.log(obj.hasOwnProperty(‘a’)); // true
console.log(obj.toString()); // ‘toString’ 是从原型链继承的属性
在这个例子中,obj 具有自有属性 a,而 toString() 是从 Object.prototype 继承来的。
总结
在 JavaScript 中,property 是对象的核心组成部分,它代表了对象的键值对。对象的属性可以直接定义,也可以通过原型链继

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/978272.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【单片机】MSP430MSP432入门

文章目录 0 前言1 开发方式选择2 CCS和开发相关软件3 Keil开发MSP4324 IAR for 430开发MSP4305 总结 0 前言 最近因为想学DSP&#xff0c;所以把之前卸载的CCS给装回来了&#xff0c;手头也还有之前电赛剩下的MSP430和MSP432的板子&#xff0c;由于年代久远&#xff0c;想着花点…

【Linux探索学习】第二十七弹——信号(上):Linux 信号基础详解

Linux学习笔记&#xff1a; https://blog.csdn.net/2301_80220607/category_12805278.html?spm1001.2014.3001.5482 前言&#xff1a; 前面我们已经将进程通信部分讲完了&#xff0c;现在我们来讲一个进程部分也非常重要的知识点——信号&#xff0c;信号也是进程间通信的一…

74道高级Java面试合集,java开发模式面试题

前言 今天我们来说说Redis为什么高性能&#xff1f;如何做高可用&#xff1f; Redis为什么这么快&#xff1f; Redis是单线程的&#xff0c;避免了多线程的上下文切换和并发控制开销&#xff1b;Redis大部分操作时基于内存&#xff0c;读写数据不需要磁盘I/O&#xff0c;所以速…

【江科协-STM32】5. 输出比较

1. 输出比较简介 OC(Output Compare)输出比较。 输出比较可以通过CNT&#xff08;CNT计数器&#xff09;与CCR寄存器值的关系&#xff0c;来对输出电平进行置1、置0或翻转的操作&#xff0c;用于输出一定频率和占空比的PWM波形。 :::tip CNT计数器是正向计数器。它只能正向累…

轻量级日志管理平台Grafana Loki

文章目录 轻量级日志管理平台Grafana Loki背景什么是Loki为什么使用 Grafana Loki&#xff1f;架构Log Storage Grafana部署使用基于 Docker Compose 安装 LokiMinIO K8s集群部署Loki采集Helm 部署方式和案例 参考 轻量级日志管理平台Grafana Loki 背景 在微服务以及云原生时…

使用 Postman 访问 Keycloak 端点

1. 引言 在本教程中&#xff0c;我们将首先快速回顾 OAuth 2.0、OpenID 和 Keycloak。然后&#xff0c;我们将了解 Keycloak REST API 以及如何在 Postman 中调用它们。 2. OAuth 2.0 OAuth 2.0 是一个授权框架&#xff0c;它允许经过身份验证的用户通过令牌向第三方授予访问…

WEB1~6通杀

##解题思路 这六道题&#xff0c;通杀了&#xff0c;只因为是PHP的特性 来&#xff0c;看web6&#xff0c;过滤最复杂的正则&#xff0c;而且不能解析成大于999的值&#xff0c;但是&#xff0c;php是弱类型的语言&#xff0c;我只要输入任意字符数字&#xff0c;最终值就为0&…

I2C协议简介:串行通信的关键技术

目录 一、总线通信基本概念 二、I2C总线协议介绍 1. 时序图解析 &#xff08;1&#xff09;起始信号 &#xff08;2&#xff09;应答信号 &#xff08;3&#xff09;终止信号 &#xff08;4&#xff09;设备地址 &#xff08;5&#xff09;I2C传输方法 ​编辑 &#…

第二十四:5.2【搭建 pinia 环境】axios 异步调用数据

第一步安装&#xff1a;npm install pinia 第二步&#xff1a;操作src/main.ts 改变里面的值的信息&#xff1a; <div class"count"><h2>当前求和为&#xff1a;{{ sum }}</h2><select v-model.number"n">  // .number 这里是…

Web漏洞——命令注入漏洞学习

一、什么是命令注入漏洞 想象一下&#xff0c;你家有一个智能管家机器人。这个机器人可以通过你发出的指令来完成各种任务&#xff0c;比如“请打开电视机、播放音乐、开灯等等”。你只需要对它说&#xff1a;“请打开电视”&#xff0c;它就会去执行这个任务。但是&#xff0…

大模型自动提示优化(APO)综述笔记

自大型语言模型&#xff08;LLMs&#xff09;出现以来&#xff0c;提示工程一直是各种自然语言处理&#xff08;NLP&#xff09;任务中激发期望响应的关键步骤。然而&#xff0c;由于模型的快速进步、任务的多样性和相关最佳实践的变化&#xff0c;提示工程对最终用户来说仍然是…

快速排序(详解)c++

快速排序(Quick Sort)&#xff0c;既然敢起这样的名字&#xff0c;说明它是常⻅排序算法中较为优秀的。事实上&#xff0c;在很多情况下&#xff0c;快排确实是效率较⾼的算法&#xff1b;c的排序是以快排为基础&#xff0c;再加上堆排和插入排序做优化实现的&#xff0c;我们这…

【工具变量】公司企业数字领导力(2004-2023年)

数据简介&#xff1a;企业数字化领导力是指在数字经济时代&#xff0c;领导者通过战略性地使用数字资产、引领组织变革&#xff0c;使企业在数字化环境中获得持续成功的能力。对于上市公司而言&#xff0c;这种领导力尤为重要&#xff0c;因为它直接关系到企业的战略方向、市场…

浅谈新能源汽车充电桩建设问题分析及解决方案

摘要&#xff1a; 在全球倡导低碳减排的大背景下&#xff0c;新能源成为热门行业在全球范围内得以开展。汽车尾气排放会在一定程度上加重温室效应&#xff0c;并且化石能源的日渐紧缺也迫切对新能源汽车发展提出新要求。现阶段的新能源汽车以电力汽车为主&#xff0c;与燃油汽…

seacmsv9报错注入

1、seacms的介绍 ​ seacms中文名&#xff1a;海洋影视管理系统。是一个采用了php5mysql架构的影视网站框架&#xff0c;因此&#xff0c;如果该框架有漏洞&#xff0c;那使用了该框架的各个网站都会有相同问题。 2、源码的分析 漏洞的部分源码如下&#xff1a; <?php …

python学习四

python运算符与表达式 表达式: Python中的表达式是一种计算结果的代码片段。它可以包 含变量、运算符、常数和函数调用,用于执行各种数学、逻辑 和功能操作 算术运算符: 比较(关系)运算符: 赋值运算符: 逻辑运算符: 位运算符: 成员运算符: 身份运算符 <

Nginx面试宝典【刷题系列】

文章目录 1、nginx是如何实现高并发的&#xff1f;2、Nginx如何处理HTTP请求&#xff1f;3、使用“反向代理服务器”的优点是什么?4、列举Nginx服务器的最佳用途。5、Nginx服务器上的Master和Worker进程分别是什么?6、什么是C10K问题?7、请陈述stub_status和sub_filter指令的…

数字可调控开关电源设计(论文+源码)

1 设计要求 在本次数字可调控开关电源设计过程中&#xff0c;对关键参数设定如下&#xff1a; &#xff08;1&#xff09;输入电压&#xff1a;DC24-26V,输出电压&#xff1a;12-24&#xff08;可调&#xff09;&#xff1b; &#xff08;2&#xff09;输出电压误差&#xf…

清华大学《AIGC发展研究3.0》

大家好&#xff0c;我是吾鳴。 AIGC已经爆火好长一段时间了&#xff0c;特别是DeepSeek的爆火&#xff0c;直接让很多之前没有体会过推理模型的人可以免费的使用上推理模型&#xff0c;同时DeepSeek产品形态也是全球首创&#xff0c;就是直接把AI的思考过程展示给你看&#xff…

模型和数据集的平台之在Hugging Face上进行模型下载、上传以及创建专属Space

模型下载 步骤&#xff1a; 注册Hugging Face平台 https://huggingface.co/ 新建一个hf_download_josn.py 文件 touch hf_download_josn.py 编写hf_download_josn.py文件 import os from huggingface_hub import hf_hub_download# 指定模型标识符 repo_id "inter…