35道面向初中级前端的基础面试题
-
新鲜出炉的8月前端面试题
-
跨域资源共享 CORS 阮一峰
3. JSONP 是什么?
这是我认为写得比较通俗易懂的一篇文章jsonp原理详解——终于搞清楚jsonp是啥了。
4. 事件绑定的方式
- 嵌入dom
按钮
- 直接绑定
btn.onclick = function(){}
- 事件监听
btn.addEventListener(‘click’,function(){})
5. 事件委托
事件委托利用了事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。所有用到按钮的事件(多数鼠标事件和键盘事件)都适合采用事件委托技术, 使用事件委托可以节省内存。
-
苹果
-
香蕉
-
凤梨
-
// good
document.querySelector(‘ul’).onclick = (event) => {
let target = event.target
if (target.nodeName === ‘LI’) {
console.log(target.innerHTML)
}
}
// bad
document.querySelectorAll(‘li’).forEach((e) => {
e.onclick = function() {
console.log(this.innerHTML)
}
})
6. 事件循环
事件循环是一个单线程循环,用于监视调用堆栈并检查是否有工作即将在任务队列中完成。如果调用堆栈为空并且任务队列中有回调函数,则将回调函数出队并推送到调用堆栈中执行。
7. 如何自定义事件
新模式
const div = document.createElement(‘div’) // 不创建元素,直接用 window 对象也可以
const event = new Event(‘build’)
div.addEventListener(‘build’, function(e) {
console.log(111)
})
div.dispatchEvent(event)
过时的模式
-
原生提供了3个方法实现自定义事件
-
document.createEvent('Event')
创建事件 -
initEvent
初始化事件 -
dispatchEvent
触发事件
const events = {}
function registerEvent(name) {
const event = document.createEvent(‘Event’)
event.initEvent(name, true, true) // 事件名称,是否允许冒泡,该事件的默认动作是否可以被取消
events[name] = event
}
function triggerEvent(name) {
window.dispatchEvent(events[name])
}
registerEvent(‘resize’) // 注册 resize 事件
triggerEvent(‘resize’) // 触发 resize 事件
MDN
8. target 和 currentTarget 区别
-
event.target 返回触发事件的元素
-
event.currentTarget 返回绑定事件的元素
9. prototype 和 proto 的关系是什么
-
prototype
用于访问函数的原型对象。 -
__proto__
用于访问对象实例的原型对象(或者使用Object.getPrototypeOf()
)。
function Test() {}
const test = new Test()
test.proto == Test.prototype // true
也就是说,函数拥有
prototype
属性,对象实例拥有__proto__
属性,它们都是用来访问原型对象的。函数有点特别,它不仅是个函数,还是个对象。所以它也有
__proto__
属性。为什么会这样呢?因为函数是内置构造函数
Function
的实例:const test = new Function(‘function Test(){}’)
test.proto == Function.prototype // true
所以函数能通过
__proto__
访问它的原型对象。由于
prototype
是一个对象,所以它也可以通过__proto__
访问它的原型对象。对象的原型对象,那自然是Object.prototype
了。function Test() {}
Test.prototype.proto == Object.prototype // true
这样看起来好像有点复杂,我们可以换个角度来看。
Object
其实也是内置构造函数:const obj = new Object()
obj.proto == Object.prototype // true
从这一点来看,是不是更好理解一点。
为了防止无休止的循环下去,所以
Object.prototype.__proto__
是指向null
的,null
是万物的终点。Object.prototype.proto == null // true
既然
null
是万物的终点,那使用Object.create(null)
创建的对象是没有__proto__
属性的,也没有prototype
属性。10. 原型继承
所有的 JS 对象(JS 函数是 prototype)都有一个
__proto__
属性,指向它的原型对象。当试图访问一个对象的属性时,如果没有在该对象上找到,它还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾。11. 继承
寄生组合式继承
function SuperType(name) {
this.name = name
this.colors = [‘red’]
}
SuperType.prototype.sayName = function() {
console.log(this.name)
}
// 继承实例属性
function SubType(name, age) {
SuperType.call(this, name)
this.age = age
}
function inheritPrototype(subType, superType) {
let prototype = Object.create(superType.prototype)
prototype.constructor = subType
subType.prototype = prototype
}
// 继承原型方法
inheritPrototype(SubType, SuperType)
// 定义自己的原型方法
SubType.prototype.sayAge = function() {
console.log(this.age)
}
12. 闭包
闭包是指有权访问另一个函数作用域中的变量的函数。
function sayHi(name) {
return () => {
console.log(
Hi! ${name}
)}
}
const test = sayHi(‘xiaoming’)
test() // Hi! xiaoming
虽然sayHi函数已经执行完毕,但是其活动对象也不会被销毁,因为test函数仍然引用着sayHi函数中的变量name,这就是闭包。
但也因为闭包引用着另一个函数的变量,导致另一个函数即使不使用了也无法销毁,所以闭包使用过多,会占用较多的内存,这也是一个副作用。
利用闭包实现私有属性
const test = (function () {
let value = 0
return {
getVal() { return value },
setVal(val) { value = val }
}
})()
上面的代码实现了一个私有属性
value
,它只能用过getVal()
来取值,通过setVal(val)
来设置值。13. 内存回收
在 JS 中,有两种内存回收算法。第一种是引用计数垃圾收集,第二种是标记-清除算法(从2012年起,所有现代浏览器都使用了标记-清除垃圾回收算法)。
引用计数垃圾收集
如果一个对象没有被其他对象引用,那它将被垃圾回收机制回收。
let o = { a: 1 }
一个对象被创建,并被 o 引用。
o = null
刚才被 o 引用的对象现在是零引用,将会被回收。
循环引用
引用计数垃圾收集有一个缺点,就是循环引用会造成对象无法被回收。
function f(){
var o = {};
var o2 = {};
o.a = o2; // o 引用 o2
o2.a = o; // o2 引用 o
return “azerty”;
}
f();
在 f() 执行后,函数的局部变量已经没用了,一般来说,这些局部变量都会被回收。但上述例子中,o 和 o2 形成了循环引用,导致无法被回收。
标记-清除算法
这个算法假定设置一个叫做根(root)的对象(在Javascript里,根是全局对象)。垃圾回收器将定期从根开始,找所有从根开始引用的对象,然后找这些对象引用的对象……从根开始,垃圾回收器将找到所有可以获得的对象和收集所有不能获得的对象。
对于刚才的例子来说,在 f() 执行后,由于 o 和 o2 从全局对象出发无法获取到,所以它们将会被回收。
高效使用内存
在 JS 中能形成作用域的有函数、全局作用域、with,在 es6 还有块作用域。局部变量随着函数作用域销毁而被释放,全局作用域需要进程退出才能释放或者使用 delete 和赋空值
null
undefined
。在 V8 中用 delete 删除对象可能会干扰 V8 的优化,所以最好通过赋值方式解除引用。
参考资料:
- 内存管理
14. 有一个函数,参数是一个函数,返回值也是一个函数,返回的函数功能和入参的函数相似,但这个函数只能执行3次,再次执行无效,如何实现
这个题目是考察闭包的使用
function sayHi() {
console.log(‘hi’)
}
function threeTimes(fn) {
let times = 0
return () => {
if (times++ < 3) {
fn()
}
}
}
const newFn = threeTimes(sayHi)
newFn()
newFn()
newFn()
newFn()
newFn() // 后面两次执行都无任何反应
通过闭包变量
times
来控制函数的执行15. 实现add函数,让add(a)(b)和add(a,b)两种调用结果相同
实现1
function add(a, b) {
if (b === undefined) {
return function(x) {
return a + x
}
}
return a + b
}
实现2——柯里化
function curry(fn, …args1) {
// length 是函数对象的一个属性值,指该函数有多少个必须要传入的参数,即形参的个数。
if (fn.length == args1.length) {
return fn(…args1)
}
return function(…args2) {
return curry(fn, …args1, …args2)
}
}
function add(a, b) {
return a + b
}
console.log(curry(add, 1)(2)) // 3
console.log(curry(add, 1, 2)) // 3
16. 使用Ajax的优缺点分别是什么
优点
-
交互性更好。来自服务器的新内容可以动态更改,无需重新加载整个页面。
-
减少与服务器的连接,因为脚本和样式只需要被请求一次。
-
状态可以维护在一个页面上。JavaScript 变量和 DOM 状态将得到保持,因为主容器页面未被重新加载。
-
基本上包括大部分 SPA 的优点。
缺点
-
动态网页很难收藏。
-
如果 JavaScript 已在浏览器中被禁用,则不起作用。
-
有些网络爬虫不执行 JavaScript,也不会看到 JavaScript 加载的内容。
-
基本上包括大部分 SPA 的缺点。
参考资料:
- 使用 Ajax 的优缺点分别是什么?
17. Ajax和Fetch区别
-
ajax是使用XMLHttpRequest对象发起的,但是用起来很麻烦,所以ES6新规范就有了fetch,fetch发一个请求不用像ajax那样写一大堆代码。
-
使用fetch无法取消一个请求,这是因为fetch基于Promise,而Promise无法做到这一点。
-
在默认情况下,fetch不会接受或者发送cookies
-
fetch没有办法原生监测请求的进度,而XMLHttpRequest可以
-
fetch只对网络请求报错,对400,500都当做成功的请求,需要封装去处理
-
fetch由于是ES6规范,兼容性上比不上XMLHttpRequest
18. 变量提升
var会使变量提升,这意味着变量可以在声明之前使用。let和const不会使变量提升,提前使用会报错。
变量提升(hoisting)是用于解释代码中变量声明行为的术语。使用var关键字声明或初始化的变量,会将声明语句“提升”到当前作用域的顶部。 但是,只有声明才会触发提升,赋值语句(如果有的话)将保持原样。
19. 使用let、var和const创建变量有什么区别
用 var 声明的变量的作用域是它当前的执行上下文,它可以是嵌套的函数,也可以是声明在任何函数外的变量。let 和 const 是块级作用域,意味着它们只能在最近的一组花括号(function、if-else 代码块或 for 循环中)中访问。
var 声明的全局变量和函数都会成为 window 对象的属性和方法。使用 let 和 const 的顶级声明不会定义在全局上下文中,但在作用域链解析上效果是一样的。
function foo() {
// 所有变量在函数中都可访问
var bar = ‘bar’;
let baz = ‘baz’;
const qux = ‘qux’;
console.log(bar); // bar
console.log(baz); // baz
console.log(qux); // qux
}
console.log(bar); // ReferenceError: bar is not defined
console.log(baz); // ReferenceError: baz is not defined
console.log(qux); // ReferenceError: qux is not defined
if (true) {
var bar = ‘bar’;
let baz = ‘baz’;
const qux = ‘qux’;
}
// 用 var 声明的变量在函数作用域上都可访问
console.log(bar); // bar
// let 和 const 定义的变量在它们被定义的语句块之外不可访问
console.log(baz); // ReferenceError: baz is not defined
console.log(qux); // ReferenceError: qux is not defined
var会使变量提升,这意味着变量可以在声明之前使用。let和const不会使变量提升,提前使用会报错。
console.log(foo); // undefined
var foo = ‘foo’;
console.log(baz); // ReferenceError: can’t access lexical declaration ‘baz’ before initialization
let baz = ‘baz’;
console.log(bar); // ReferenceError: can’t access lexical declaration ‘bar’ before initialization
const bar = ‘bar’;
用var重复声明不会报错,但let和const会。
var foo = ‘foo’;
var foo = ‘bar’;
console.log(foo); // “bar”
let baz = ‘baz’;
let baz = ‘qux’; // Uncaught SyntaxError: Identifier ‘baz’ has already been declared
let和const的区别在于:let允许多次赋值,而const只允许一次。
// 这样不会报错。
let foo = ‘foo’;
foo = ‘bar’;
// 这样会报错。
const baz = ‘baz’;
baz = ‘qux’;
20. 对象浅拷贝和深拷贝有什么区别
在
JS
中,除了基本数据类型,还存在对象、数组这种引用类型。 基本数据类型,拷贝是直接拷贝变量的值,而引用类型拷贝的其实是变量的地址。let o1 = {a: 1}
let o2 = o1
在这种情况下,如果改变
o1
或o2
其中一个值的话,另一个也会变,因为它们都指向同一个地址。o2.a = 3
console.log(o1.a) // 3
而浅拷贝和深拷贝就是在这个基础之上做的区分,如果在拷贝这个对象的时候,只对基本数据类型进行了拷贝,而对引用数据类型只是进行了引用的传递,而没有重新创建一个新的对象,则认为是浅拷贝。反之,在对引用数据类型进行拷贝的时候,创建了一个新的对象,并且复制其内的成员变量,则认为是深拷贝。
21. 怎么实现对象深拷贝
这种方法有缺陷,详情请看关于JSON.parse(JSON.stringify(obj))实现深拷贝应该注意的坑
let o1 = {a:{
b:1
}
}
let o2 = JSON.parse(JSON.stringify(o1))
基础版
function deepCopy(target) {
if (typeof target == ‘object’) {
const result = Array.isArray(target) [] : {}
for (const key in target) {
if (typeof target[key] == ‘object’) {
result[key] = deepCopy(target[key])
} else {
result[key] = target[key]
}
}
return result
} else if (typeof target == ‘function’) {
return eval(‘(’ + test.toString() + ‘)’)
} else {
return target
}
}
完整版
const mapTag = ‘[object Map]’
const setTag = ‘[object Set]’
const arrayTag = ‘[object Array]’
const objectTag = ‘[object Object]’
const symbolTag = ‘[object Symbol]’
function deepCopy(origin, map = new WeakMap()) {
if (!origin || !isObject(origin)) return origin
if (typeof origin == ‘function’) {
return eval(‘(’ + origin.toString() + ‘)’)
}
const objType = getObjType(origin)
const result = createObj(origin, objType)
// 防止循环引用,不会遍历已经在 map 中的对象,因为在上一层正在遍历
if (map.get(origin)) {
return map.get(origin)
}
map.set(origin, result)
// set
if (objType == setTag) {
for (const value of origin) {
result.add(deepCopy(value, map))
}
return result
}
// map
if (objType == mapTag) {
for (const [key, value] of origin) {
result.set(key, deepCopy(value, map))
}
return result
}
// 对象或数组
if (objType == objectTag || objType == arrayTag) {
for (const key in origin) {
result[key] = deepCopy(origin[key], map)
}
return result
}
return result
}
function getObjType(obj) {
return Object.prototype.toString.call(obj)
}
function createObj(obj, type) {
if (type == objectTag) return {}
if (type == arrayTag) return []
if (type == symbolTag) return Object(Symbol.prototype.valueOf.call(obj))
return new obj.constructor(obj)
}
function isObject(origin) {
return typeof origin == ‘object’ || typeof origin == ‘function’
}
如何写出一个惊艳面试官的深拷贝?
22. 数组去重
ES5
function unique(arry) {
const temp = []
arry.forEach(function(item) {
if (temp.indexOf(item) == -1) {
temp.push(item)
}
})
return temp
}
ES6
function unique(arry) {
return Array.from(new Set(arry))
}
23. 数据类型
-
Undefined
-
Null
-
Boolean
-
Number
-
String
-
Object
-
symbol(ES6新增)
24. 内置函数(原生函数)
-
String
-
Number
-
Boolean
-
Object
-
Function
-
Array
-
Date
-
RegExp
-
Error
-
Symbol
原始值 “I am a string” 并不是一个对象,它只是一个字面量,并且是一个不可变的值。
如果要在这个字面量上执行一些操作,比如获取长度、访问其中某个字符等,那需要将其转换为 String 对象。
幸好,在必要时语言会自动把字符串字面量转换成一个 String 对象,也就是说你并不需要显式创建一个对象。
25. 如何判断数组与对象
Array.isArray([]) // true
Array.isArray({}) // false
typeof [] // “object”
typeof {} // “object”
Object.prototype == [].proto // false
Object.prototype == {}.proto // true
Array.prototype == [].proto // true
Array.prototype == {}.proto // false
26. 自动分号
有时 JavaScript 会自动为代码行补上缺失的分号,即自动分号插入(Automatic SemicolonInsertion,ASI)。
因为如果缺失了必要的 ; ,代码将无法运行,语言的容错性也会降低。ASI 能让我们忽略那些不必要的
;
。请注意,ASI 只在换行符处起作用,而不会在代码行的中间插入分号。
如果 JavaScript 解析器发现代码行可能因为缺失分号而导致错误,那么它就会自动补上分号。并且,只有在代码行末尾与换行符之间除了空格和注释之外没有别的内容时,它才会这样做。
27. 浮点数精度
www.css88.com/archives/73…
28. cookie、localStorage、sessionStorage区别
| 特性 | cookie | localStorage | sessionStorage |
| — | — | — | — |
| 由谁初始化 | 客户端或服务器,服务器可以使用
Set-Cookie
请求头。 | 客户端 | 客户端 || 数据的生命周期 | 一般由服务器生成,可设置失效时间,如果在浏览器生成,默认是关闭浏览器之后失效 | 永久保存,可清除 | 仅在当前会话有效,关闭页面后清除 |
| 存放数据大小 | 4KB | 5MB | 5MB |
| 与服务器通信 | 每次都会携带在HTTP头中,如果使用cookie保存过多数据会带来性能问题 | 仅在客户端保存 | 仅在客户端保存 |
| 用途 | 一般由服务器生成,用于标识用户身份 | 用于浏览器缓存数据 | 用于浏览器缓存数据 |
| 访问权限 | 任意窗口 | 任意窗口 | 当前页面窗口 |
29. 自执行函数用于什么场景?好处
自执行函数:
-
声明一个匿名函数
-
马上调用这个匿名函数。
作用:创建一个独立的作用域。
好处
-
防止变量弥散到全局,以免各种js库冲突。
-
隔离作用域避免污染,或者截断作用域链,避免闭包造成引用变量无法释放。
-
利用立即执行特性,返回需要的业务函数或对象,避免每次通过条件判断来处理。
场景
一般用于框架、插件等场景
30. 多个页面之间如何进行通信
有如下几个方式:
-
cookie
-
web worker
-
localeStorage和sessionStorage
31. css动画和js动画的差异
-
相关文章:
35道面向初中级前端的基础面试题
新鲜出炉的8月前端面试题 跨域资源共享 CORS 阮一峰 3. JSONP 是什么? 这是我认为写得比较通俗易懂的一篇文章jsonp原理详解——终于搞清楚jsonp是啥了。 4. 事件绑定的方式 嵌入dom 按钮 直接绑定 btn.onclick function(){} 事件监听 btn.addEventList…...
自动驾驶控制算法-横向误差微分方程LQR前馈控制
本文是学习自动驾驶控制算法第六讲 前馈控制与航向误差以及前两节的学习笔记。 1 横向误差微分方程 以规划的轨迹作为自然坐标系,计算自车在轨迹上的投影点,进而计算误差: 如图所示,横向误差为 d d d,航向误差为 θ…...
灭屏情况下,飞行模式+静音模式+插耳,播放音乐,电流异常
1. 功耗现象 灭屏情况下,飞行模式静音模式插耳,播放音乐,电流异常 1.1测试数据 飞行模式静音模式插耳机 原生音乐播放器 DriverOnly 32.5mA User版本 45mA 1.2 电流波形现象 上述看怀疑 CPU 未进入 Deep idle 导致? 2. …...
jsp | servlet | spring forEach读取不了对象List
导致这个问题的原因有很多的,这里讲到的只是原因之一 原因 taglib不认识forEach 解决办法 添加<% taglib uri"http://java.sun.com/jsp/jstl/core" prefix"c" %> (我忘写这个东西了哈哈哈)...
Taro小程序开发性能优化实践
我们团队在利用Taro进行秒送频道小程序的同时,一直在探索性能优化的最佳实践。随着需求的不断迭代,项目中的性能问题难免日积月累,逐渐暴露出来影响用户体验。适逢双十一大促,我们趁着这个机会统一进行了Taro性能优化实践…...
数据结构:栈(顺序栈)
目录 1.栈的定义 2.栈的结构 3.栈的接口 3.1初始化 3.2栈的销毁 3.3压栈 3.4判断栈是否为空 3.5出栈 3.6得到栈顶元素 3.7栈的大小 1.栈的定义 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端…...
【Maven】Maven的快照库和发行库
1、分类 Maven 支持两种类型的仓库:快照库(Snapshot Repository)和发行库(Release Repository),用于存储不同性质的构件(Artifacts)。 (1) 快照库 (Snapshot Repository)ÿ…...
如何给负载均衡平台做好安全防御
在现代网络架构中,负载均衡(Load Balancing)扮演着至关重要的角色。它不仅负责将流量分配到多个服务器以确保高效的服务交付,还作为第一道防线来抵御外部攻击。为了保护您的应用程序和服务免受潜在威胁,必须对负载均衡…...
AI应用-本地模型实现AI生成PPT(简易版)
文章目录 前言技术栈效果展示 一、实现思路二、实现步骤1.本地安装marp-cli2.后端实现3.前端实现 三、代码地址及说明 前言 在许多项目中,生成 PPT 是常见的需求,尤其在教育和报告展示中。传统的生成 PPT 的方法需要手动创建,而使用生成模型…...
JavaScript 数组方法完整指南
JavaScript 数组方法完整指南 1. 数组操作方法 1.1 添加/删除元素 push() 用途: 在数组末尾添加一个或多个元素返回值: 新数组的长度 const fruits [apple, banana]; const newLength fruits.push(orange, grape); console.log(fruits); // [apple, banana, orange, gra…...
基于自定义注解与 AOP 切面实现接口日志全面数据库存储
基于自定义注解与 AOP 切面实现接口日志全面数据库存储 一、引言 在当今复杂的软件系统开发与运维过程中,详细且精准地记录接口的各项信息对于系统性能监测、问题排查、安全审计以及业务分析都有着极为关键的意义。本文将深入讲解如何运用自定义注解与 AOP&#x…...
xcode15 报错 does not contain ‘libarclite‘
新建pod私有库 在xcode15 无法运行 报错 SDK does not contain libarclite at the path /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a; try increasing the minimum deployment target 下载 资源文件…...
c# 实现一个简单的异常日志记录(异常迭代+分片+定时清理)+AOP Rougamo全局注入
1. 日志目录和文件管理 日志目录:日志文件存储在 ./Exceptions 目录下。日志文件命名:日志文件的命名格式为 yyyy_MM_dd.log,表示当天的日期。如果当天的日志文件大小超过 maxFileSizeBytes(3KB),则会创建…...
python 定时任务管理封装
主逻辑代码 # -*- coding: utf-8 -*- # import apscheduler import pandas as pd from datetime import datetime # 导入调度器,此处使用BackgroundScheduler阻塞调度器 from apscheduler.schedulers.background import BackgroundScheduler # 导入触发器…...
GIS数据处理/程序/指导,街景百度热力图POI路网建筑物AOI等
简介其他数据处理/程序/指导!!!(1)街景数据获取(2)街景语义分割后像素提取,指标计算代码(绿视率,天空开阔度、视觉熵/景观多样性等)(3…...
【落羽的落羽 C语言篇】自定义类型——结构体
文章目录 一、结构体1. 结构体类型的概念和声明2. 结构体变量的创建和初始化3. 结构体成员的访问3.1 直接访问3.2 间接访问 4. 结构体的内存对齐4.1 内存对齐的规则4.2 内存对齐的原因4.3 修改默认对齐数 5. 结构体传参6. 结构体实现位段 在C语言中,已经提供了一些基…...
【WPS安装】WPS编译错误总结:WPS编译失败+仅编译成功ungrib等
WPS编译错误总结:WPS编译失败仅编译成功ungrib等 WPS编译过程问题1:WPS编译失败错误1:gfortran: error: unrecognized command-line option ‘-convert’; did you mean ‘-fconvert’?解决方案 问题2:WPS编译三个exe文件只出现u…...
【Python入门】文件读写
文章一览 一、什么是文件二、文件形态三、文件组成要素四、文件操作五、文件路径六、文件读写操作6.1 文件打开模式6.2 文件的打开6.3 正确关闭文件6.3.1 读文件方法6.3.2 写文件 七、CSV 文件读取7.1 CSV 数据存储格式7.2 CSV 文件特点7.3 使用记事本创建 CSV 文件7.4 用 csv …...
基于变异策略的模糊测试:seed与mutation的含义
1. 引入 最早期的模糊测试(fuzz),是生成一些随机的文本序列,对unix系统的命令行输入进行测试。这种古老的方式,也发现了不少漏洞。 但完全随机的fuzz,存在如下问题: (1)…...
制造研发企业与IPD管理体系
芯片/半导体/制造研发型企业,大都知道华为使用过的IPD管理体系,但大家用到什么程度,那就是参差不齐了。 因为IPD管理体系它只是一个管理理念,是一个方法论。它需要有相应的组织架构来承载,它有很复杂的流程需要有IT系统…...
电子应用设计方案68:智能晾衣架系统设计
智能晾衣架系统设计 一、引言 智能晾衣架作为智能家居的一部分,为用户提供了更便捷、高效和舒适的衣物晾晒体验。本设计方案旨在打造一款功能丰富、性能稳定且易于操作的智能晾衣架系统。 二、系统概述 1. 系统目标 - 实现晾衣架的自动升降,方便衣物的…...
如何实现圆形头像功能
文章目录 1 概念介绍2 使用方法3 示例代码我们在上一章回中介绍了Stack Widget,本章回中将介绍CircleAvatar这种Widget,闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 在上一回中我们使用了CircleAvatar Widget,之前也没有介绍过此Widget,因此有些看官希望对它做一些介绍…...
【python自动化六】UI自动化基础-selenium的使用
selenium是目前用得比较多的UI自动化测试框架,支持java,python等多种语言,目前我们就选用selenium来做UI自动化。 1.selenium安装 安装命令 pip install selenium2.selenium的简单使用 本文以chrome浏览器为例,配套selenium中c…...
时间复杂度和空间复杂度理解
空间复杂度和时间复杂度是算法分析中两个重要的概念,用于评估算法的性能。在前端 JavaScript 中,时间复杂度用于评估算法在最坏情况下的运行时间;空间复杂度描述了算法在执行过程中所需的内存空间的增长率,它包括算法所需的临时空…...
详细解读sedex验厂
SEDEX验厂,即供货商商业道德信息交流认证(Supplier Ethical Data Exchange),是一种表明企业遵守商业道德的认证。以下是对SEDEX验厂的详细解读: 一、SEDEX验厂概述 SEDEX是一家总部位于英国伦敦的非营利组织…...
IOT、MES、WMS、MOM 和 EPMS 系统综合技术与业务文档
IOT、MES、WMS、MOM 和 EPMS 系统综合技术与业务文档 一、引言 在现代制造业和工业管理领域,IOT(物联网)、MES(制造执行系统)、WMS(仓库管理系统)、MOM(制造运营管理系统ÿ…...
ESP32S3 使用LVGL驱动LCD屏(ST7789主控)
ESP32S3 使用LVGL驱动LCD屏(ST7789主控) 目录 1 分析原理图 2 驱动、点亮LCD(ST7789) 2.1 在工程中添加目录、文件 2.2 添加esp_lvgl_port组件 2.3 对工程进行必要的配置 2.4 编写必要代码 3 烧录、验证 1 分析原理图 要使用SOC驱动LCD屏&#…...
Zed调试宏 C语言错误日志 异常错误调试信息
1、C中的错误码 在C语言中通过返回错误码或设置全局的errno值来反馈错误问题。errno.h是一个头文件,它定义了一个全局变量errno,用于在程序中记录和报告错误的原因。这个机制主要用于处理系统调用或标准库函数出错时的错误反馈。当系统调用或库函数…...
GitCode 光引计划征文|JavaVision:引领全能视觉智能识别新纪元
在人工智能技术飞速发展的今天,计算机视觉作为AI领域的重要分支,正逐渐渗透到各行各业中。JavaVision,作为[光引计划]的一部分,致力于提供一个基于Java的全能视觉智能识别解决方案。同时它集成了MilvusPlus,旨在提供一…...
数据分析思维(五):分析方法——假设检验分析方法
数据分析并非只是简单的数据分析工具三板斧——Excel、SQL、Python,更重要的是数据分析思维。没有数据分析思维和业务知识,就算拿到一堆数据,也不知道如何下手。 推荐书本《数据分析思维——分析方法和业务知识》,本文内容就是提取…...
《OpenCV计算机视觉》--介绍及基础操作
文章目录 《OpenCV计算机视觉》--介绍及基础操作一.OpenCV介绍二.下载OpenCV三.基础操作1.调用OpenCV2.读取图片信息3.读取图片的灰度图4.视频文件读取5.对图片进行切片6.提取RGB颜色通道7.合并颜色通道8.图片修改图片打码图片组合 9.cv2.resize10.图形运算图像加法运算cv2.add…...
利用Java爬虫获取苏宁易购商品详情
在数字化时代,电商平台的商品信息对于市场分析、价格监控和消费者决策至关重要。苏宁易购作为中国领先的电商平台之一,提供了丰富的商品信息。本文将介绍如何使用Java语言开发爬虫,获取苏宁易购商品的详细信息。 Java爬虫技术简介 Java作为一…...
【CVE-2024-53375】TP-Link Archer系列路由器认证操作系统命令注入(内附远离和代码利用)
CVE-2024-53375 TP-Link Archer系列路由器认证操作系统命令注入 受影响的设备 使用 HomeShield 功能的 TP-Link 设备容易受到此漏洞的影响。这包括 TP-Link Archer 系列的多款路由器。 经过测试 Archer AXE75(EU)_V1_1.2.2 Build 20240827(发布日期 2024 年 11 月 4 日)…...
DP动态规划(装箱问题)
# [NOIP2001 普及组] 装箱问题 ## 题目描述 有一个箱子容量为 $V$,同时有 $n$ 个物品,每个物品有一个体积。 现在从 $n$ 个物品中,任取若干个装入箱内(也可以不取),使箱子的剩余空间最小。输出这个最小值。…...
selenium学习笔记(一)
文章目录 前言一、selenium的简介java使用seleniumPython使用selenium常用的浏览器selenium的功能 二、chromeDriver的安装查看本机的chrome版本?匹配对应的chromedriver并下载在服务器上例如Centos如何安装Chrome 三、selenium内容详解chrome启动chrome启动参数元素…...
jest expect().resolves和expect().rejects原理
假设存在如下代码 export default function fetchData(fn) {return Axios.get(http://www.dell-lee.com/react/api/demo.json) } 接口返回的数据为 {"success": true } 那么对于测试代码 test(fetchData, async () > {await expect(fetchData()).resolves.to…...
大语言模型驱动的Agent:定义、工作原理与应用
文章目录 引言什么是大语言模型? Agent的概念LLM Agent的工作原理 Dify平台上的AgentLLM Agent的应用场景挑战与展望结论 引言 随着人工智能(AI)技术的发展,特别是自然语言处理(NLP)领域的进步,…...
写作词汇积累:纰漏、坎肩、颠三倒四、隔阂
纰漏 【纰漏】是指因粗心而产生的差错、小事故或漏洞 1. 在准备这次会议的过程中,我们反复核对资料,力求不出现任何【纰漏】。2. 在这次重要的项目汇报中,他小心翼翼地检查每一页 PPT,生怕出现任何【纰漏】。3. 尽管她工作一向细…...
一种简易的免杀绕过方法
一种简易的免杀绕过方法 这里我们直接参考师兄的项目https://github.com/snnxyss/In-Swor exe-shellcode-加密-运行 话不多说直接上图 这里我们用geacon作为本次实验 从这里我们可以看到 geacon已经不行了 这里我们将exe转shellcode 生成之后将123.txt放到config目录下 利…...
CTF web解题 [NISACTF 2022]popchains PHP反序列化 pop链
不积跬步无以至千里 不积小流无以成江海 对web方向有了更近一步的了解,根据一道题目来学习PHP反序列化及pop链 [NISACTF 2022]popchains flag:NSSCTF{3096663a-4b18-4567-bdfb-8403f9414704} Happy New Year~ MAKE A WISH <?php echo?Happy?Ne…...
重温设计模式--单例模式
文章目录 单例模式(Singleton Pattern)概述单例模式的实现方式及代码示例1. 饿汉式单例(在程序启动时就创建实例)2. 懒汉式单例(在第一次使用时才创建实例) 单例模式的注意事项应用场景 C代码懒汉模式-经典…...
AI的进阶之路:从机器学习到深度学习的演变(一)
AI的进阶之路:从机器学习到深度学习的演变 在当今科技迅猛发展的时代,人工智能(AI)、机器学习(ML)和深度学习(DL)已成为推动创新的核心力量。这三个领域虽然紧密相连,却…...
WPF+MVVM案例实战与特效(四十七)-实现一个路径绘图的自定义按钮控件
文章目录 1、案例效果2、创建自定义 PathButton 控件1、定义 PathButton 类2、设计样式与控件模板3、代码解释3、控件使用4、直接在 XAML 中绑定命令3、源代码获取4、总结1、案例效果 2、创建自定义 PathButton 控件 1、定义 PathButton 类 首先,我们需要创建一个新的类 Pat…...
Python 写的 智慧记 进销存 辅助 程序 导入导出 excel 可打印
图样: 就可以导入了 上代码 import tkinter as tk from tkinter import ttk import sqlite3 from datetime import datetime from tkinter import messagebox, filedialog import pandas as pd import reclass OrderSystem:def __init__(self, root):self.root r…...
【电商搜索】CRM: 具有可控条件的检索模型
【电商搜索】CRM: 具有可控条件的检索模型 目录 文章目录 【电商搜索】CRM: 具有可控条件的检索模型目录文章信息摘要研究背景问题与挑战如何解决核心创新点算法模型实验效果(包含重要数据与结论)相关工作后续优化方向 后记 https://arxiv.org/pdf/2412.…...
python使用pip进行库的下载
前言 现如今有太多的python编译软件,其库的下载也是五花八门,但在作者看来,无论是哪种方法都是万变不离其宗,即pip下载。 pip是python的包管理工具,无论你是用的什么python软件,都可以用pip进行库的下载。 …...
Golang 的并发优势
在如今的编程领域,一个程序能够同时处理多个任务的能力非常重要,这就是所谓的并发处理。而 Golang 在并发编程方面表现十分出色,具有很多独特的优势,简直不要太简单。 一、轻量级的协程(Goroutine) 在传统…...
5G学习笔记之Non-Public Network
目录 0. NPN系列 1. 概述 2. SNPN 2.1 SNPN概述 2.2 SNPN架构 2.3 SNPN部署 2.3.1 完全独立 2.3.2 共享PLMN基站 2.3.3 共享PLMN基站和PLMN频谱 3. PNI-NPN 3.1 PNI-NPN概述 3.2 PNI-NPN部署 3.2.1 UPF独立 3.2.2 完全共享 0. NPN系列 1. NPN概述 2. NPN R18 3. 【SNPN系列】S…...
SpringBoot——核心概念
文章目录 一.核心概念IoC/DI思想2.Ioc容器3.Bean 二.IoC入门案例三.DI入门案例分析四.bean基础配置五.bean的实例化(创建)六.bean实例化——静态工厂七.bean实例化——示例工程与FactoryBean八.bean的生命周期九.依赖注入的两种方式十.构造器注入十一.依…...
【HarmonyOs学习日志(14)】计算机网络之域名系统DNS
域名系统DNS 域名系统DNS——从域名解析出IP地址 文章目录 域名系统DNS概述域名到IP地址的解析 互联网的域名结构命名标准 域名服务器域名的解析过程 概述 域名系统DNS(Domain Name System)是互联网使用的命名系统,用来把便于人们使用的机器…...