前端面试练习24.3.1

一.进程和线程的区别

进程:是程序的一次执行过程,拥有独立的内存空间

线程:是进程中的一个执行单元,共享所属进程的内存空间和系统资源

进程(Process)和线程(Thread)是操作系统中的重要概念,它们是实现并发执行的基本单位,但它们有一些关键的区别:

  1. 定义

    • 进程:是程序的一次执行过程,是操作系统进行资源分配和调度的基本单位。一个进程可以包含多个线程。
    • 线程:是进程中的一个执行单元,是操作系统进行运算调度的基本单位。一个进程中至少包含一个线程,可以包含多个线程。
  2. 资源分配

    • 进程:拥有独立的内存空间、文件句柄、设备和其他系统资源。
    • 线程:共享所属进程的内存空间和系统资源,包括文件句柄、设备等。
  3. 切换代价

    • 进程:切换代价相对较高,因为需要切换整个内存空间和系统资源。
    • 线程:切换代价相对较低,因为线程共享所属进程的资源,只需要切换执行上下文即可。
  4. 通信和同步

    • 进程:进程间通信(IPC)相对复杂,通常需要借助操作系统提供的机制,如管道、消息队列、信号量等。
    • 线程:线程间通信和同步相对简单,可以通过共享内存、信号量、互斥锁等机制实现。
  5. 独立性

    • 进程:各个进程之间相对独立,一个进程崩溃通常不会影响其他进程。
    • 线程:同一进程中的线程共享相同的地址空间和资源,一个线程的崩溃可能会影响到其他线程。
  6. 创建和销毁开销

    • 进程:创建和销毁进程的开销较大,因为需要分配和释放独立的内存空间、系统资源。
    • 线程:创建和销毁线程的开销较小,因为线程共享所属进程的资源,只需要分配和释放少量的内存空间。

总的来说,进程是系统资源分配的基本单位,而线程是操作系统进行调度的基本单位。进程之间相对独立,线程共享进程的资源。在设计并发应用程序时,需要根据具体的需求和场景选择合适的并发模型,合理地利用进程和线程来实现任务的并发执行。

二.懒加载如何实现的

1.图片的懒加载

src部分使用默认图片占位,然后等待接口数据请求到或是图片到达视口区域时,通过js代码将src替换

2.无限滚动懒加载

假如一次接口只返回十条信息,那么,就通过代码进行滚动条的检测,当滚动条到达页面底部时,新将page+1,然后发送请求,然后每次到达底部都重新发送请求获取数据,以此达到滚动条的懒加载

3.组件懒加载

动态导入

在代码中通过import()函数进行组件的引入加载

 

路由懒加载

这里就是单页面的应用了,就拿vue来说,指的就是vue-router的使用,在路由文件里引入了相关的组件,只有当用户点击或是进行相关操作才会进入相应的组件页面

4.音视频懒加载

类似图片懒加载的原理,可以将视频和音频的 src 属性设置为占位符,当它们进入视窗范围时,再动态加载真实的媒体资源。

三.重绘/重排(回流),哪些操作会引起对应的流程

重绘:指的是页面的元素非几何样式发生改变或是不影响其他元素布局的改变,从而引起的当前元素的重新渲染,这个过程是重绘

重排(回流):指的是元素的几何属性发生了变化,或是新增/删除等操作元素使得页面的布局发生了变化,从而引起的整个页面元素的重新渲染,这个过程是重排

  1. 改变元素的样式

    • 例如修改元素的颜色、背景、字体大小、边框等样式属性会触发重绘。
    • 修改元素的尺寸、位置、显示状态等会触发重排。
  2. DOM 操作

    • 添加、删除、修改 DOM 元素的结构会触发重排。
    • 获取某些 DOM 属性(例如宽度、高度、偏移量等)也会导致重排。
  3. 改变窗口尺寸

    • 浏览器窗口大小改变会影响页面的布局,从而触发重排和重绘。
  4. 激活 CSS 伪类

    • 激活某些 CSS 伪类,如 :hover:active 等,会改变元素的样式,可能会触发重绘。
  5. 修改 CSS 样式表

    • 修改 CSS 样式表会影响整个页面的样式,可能会触发重绘和重排。

 

四.双向数据绑定的原理

vue2 与 vue3 的双向绑定原理略有不同

vue2是通过指令“v-model”绑定数据,然后基于Object.definedProperty()方法,对“data”里的数据进行劫持,添加相应的getter()与setter方法,然后在数据变化时更新视图

vue3 是基于 ES6 的原生 Proxy 对象和 Reflect 对象的响应式系统,使用 Proxy 对象来监听数据的变化,并在数据变化时触发视图的更新,从而实现了双向数据绑定

拓展

下面是 Vue.js 2 中对数据进行监听的基本过程:

  1. 初始化阶段:当创建一个 Vue 实例时,Vue 会遍历数据对象中的每个属性,并使用 Object.defineProperty() 方法为每个属性设置 getter 和 setter。这样一来,当这些属性被访问或者修改时,Vue 能够捕获到这些操作,并触发相应的 getter 和 setter。

  2. 数据劫持:Vue 通过递归遍历数据对象的每个属性,为每个属性设置 getter 和 setter,从而实现对数据的劫持。这样一来,当属性被访问或者修改时,Vue 能够拦截这些操作,并触发相应的 getter 和 setter。

  3. 依赖收集:在模板编译阶段,Vue 会解析模板中的表达式,并为每个表达式创建一个 Watcher 对象。Watcher 对象会在数据被访问时收集依赖,当数据发生变化时,Watcher 对象会触发更新。

  4. 发布-订阅模式:当数据发生变化时,Vue 会使用发布-订阅模式通知所有相关的 Watcher 对象进行更新。这些 Watcher 对象负责更新视图中与数据相关的部分,从而实现视图的更新。

在 Vue.js 3 中,双向数据绑定的实现基于 ES6 的原生 Proxy 对象和 Reflect 对象。下面是 Vue.js 3 中实现双向数据绑定的大致步骤:

  1. 数据劫持:在 Vue.js 3 中,当创建一个 Vue 实例时,Vue 会使用 Proxy 对象来代理数据对象。这样一来,当访问或修改数据对象的属性时,Proxy 对象会拦截这些操作,并触发相应的处理。

  2. 创建 Proxy:Vue 在内部会使用 Proxy 对象来代理数据对象,这样就能够捕获到对数据的读取和修改操作。

  3. 设置拦截器:在创建 Proxy 对象时,需要提供一个 handler 对象,其中包含一组拦截器,用于拦截对数据对象的不同操作,比如 get 用于拦截属性的读取操作,set 用于拦截属性的修改操作等。

  4. 依赖追踪:与 Vue.js 2.x 类似,在 Vue.js 3 中,当访问数据对象的属性时,Proxy 对象会触发相应的 get 拦截器。在 get 拦截器中,Vue 会收集依赖关系,即建立属性与对应 Watcher 对象之间的关系。

  5. 更新视图:当数据对象的属性被修改时,Proxy 对象会触发相应的 set 拦截器。在 set 拦截器中,Vue 会通知相关的 Watcher 对象进行更新,从而更新视图。

 

五.vue3为什么要用proxy

1.拦截功能更加强大

这就要对比vue2 的Object.defineProperty(),它只是通过拦截数据,添加getter()与setter()方法,这样只能够实现对属性的读取和赋值操作的拦截,对于数组,它就无法通过这种方式实现双向绑定,它就只能是在底层重写数组的一些方法,比如push()或是pop(),shift()等方法,当使用时它会先执行对应的原生方法,然后再通知 Vue 去更新视图。

而vue3就没有这么麻烦,Proxy 对象提供了更多的拦截器(例如 get、set、deleteProperty 等),可以监听更多类型的操作,如属性的删除、原型链上的属性访问等,从而提供了更丰富和灵活的数据监听能力。

2.代码更加简洁

这部分体现在底层代码,如上。

3.更高的性能:

Proxy 对象的性能通常比 Object.defineProperty() 方法更高。Proxy 对象是 JavaScript 引擎的内置对象,其底层实现和性能优化更为高效,能够更快地捕获对对象的操作并触发相应的拦截器,从而提高数据监听的效率。

Object.defineProperty() 方法需要为每个属性分别设置 getter 和 setter,而 Proxy 对象则能够一次性为整个对象设置拦截器。这使得 Proxy 对象能够更快地捕获到对象的操作,并触发相应的拦截器,从而提高了数据监听的效率。

Proxy 对象的拦截器能够直接在引擎层面进行处理,而不需要额外的中间层来实现数据的监听和拦截。这使得 Proxy 对象的性能更高,能够更快地捕获到对象的操作并触发相应的拦截器。

4.更好的扩展性:

Proxy 对象提供了更多的拦截器,可以拦截更多类型的操作,同时也支持动态增加和删除拦截器,使得 Vue.js 的响应式系统更加灵活和可扩展。这样一来,开发者可以根据实际需求定制拦截器,实现自定义的数据监听和响应逻辑。

示例

我们可以自行修改,而如果想要在 Vue.js 2 中实现类似于 Vue.js 3 中动态添加和删除拦截器的功能,需要使用 Vue.set() 和 Vue.delete() 方法来手动触发响应式更新,或者使用 $set() 和 $delete() 在组件中操作数据。这些方法可以触发 Vue.js 2 的响应式系统进行更新,但不同于 Proxy,它们只是手动触发更新,而不是动态地修改拦截器。

let proxy = new Proxy(data, {// 定义一个拦截器,在获取属性时触发get(target, property) {console.log(`Getting ${property}`);return target[property]; // 返回原始数据对象的属性值},// 定义一个拦截器,在设置属性时触发set(target, property, value) {console.log(`Setting ${property} to ${value}`);target[property] = value; // 更新原始数据对象的属性值return true; // 表示设置成功}
});

六.vue2劫持的单个属性,那是怎么更新整个对象的?

在 Vue.js 2 中,当一个对象被响应式地劫持(即通过 Vue.observable() 或者在组件中声明的 data 属性),Vue.js 会为对象的每个属性都设置 getter 和 setter,以便在属性被访问或者修改时触发更新。这样的劫持是针对对象的每个属性而不是对象本身。

当你修改了对象中的一个属性时,Vue.js 2 的响应式系统会自动检测到属性的变化,并触发更新,从而更新整个组件或者视图中依赖于该属性的部分。这意味着,尽管 Vue.js 2 对象劫持的是单个属性,但其影响会传播到整个组件或者视图中依赖于该属性的部分,从而实现了整个对象的更新。

具体来说,当你修改了对象的一个属性时,Vue.js 2 会首先检测到属性的变化,然后根据该属性所属的组件或者视图进行更新。这个更新过程可能会涉及到虚拟 DOM 的重新渲染和比对,以及实际 DOM 的更新操作,最终将最新的数据反映到用户界面上。

总的来说,Vue.js 2 的响应式系统通过为对象的每个属性设置 getter 和 setter,实现了对单个属性的劫持,并通过属性的变化来触发整个组件或者视图的更新,从而实现了对整个对象的更新。

七.vue中key的作用

在vue中key是很重要的,它主要用于优化vue的虚拟DOM树,当我们的DOM更新时,它会去对比key值,比如当key值发生变化时,它会认为这是一个新的元素,而不是一个需要更新的元素,它会去删除旧的元素,创建一个新的元素,并添加到DOM树里,这样最大程度地减少了DOM的操作,提高了页面的渲染能力。

另外,在使用Vue的过程中,key还可以用于在同一个组件中切换不同的数据源,例如在使用v-for指令循环渲染列表时,可以使用key来确保每个子组件的唯一性,从而避免出现数据混乱的问题。

key 的作用是帮助 Vue 优化虚拟 DOM 的 diff 过程,通过精确比对节点的 key 值,最小化对真实 DOM 的操作,提高页面的渲染性能

八.组件之间通信方式

在 Vue 中,组件之间有多种通信方式,以下是其中的几种:

Props 和事件:父组件可以通过 Props 将数据传递给子组件,在子组件中通过事件将数据传递回父组件。

Vuex:Vuex 是一个状态管理库,用于管理 Vue 应用程序中的全局状态。组件可以使用 Vuex 的 store 来获取和更新共享状态。

$emit 和 $on:$emit 和 $on 是 Vue 实例提供的方法,可以用于在组件之间进行事件通信。$emit 用于触发事件,而 $on 用于监听事件。

$parent 和 $children:$parent 和 $children 可以访问组件的父组件和子组件,这样就可以在组件之间传递数据。

$refs:$refs 可以用于在组件之间传递引用。通过给组件设置 ref 属性,就可以在父组件中访问该组件的实例。

这些方法可以根据应用程序的需求来选择使用哪种方法来实现组件之间的通信。

九.vue为什么要mutation、 action操作

Vue是一款响应式的前端框架,它提供了一种非常简单且直观的方式来管理应用程序的状态。而这种状态管理是通过使用Vuex这个状态管理库来实现的。在Vuex中,有一个核心概念叫做store,它是一个包含了应用程序中所有状态的容器,而mutation和action就是用来修改和操作store中的状态的。

具体来说,mutation是用来直接修改store中的状态的方法,它只能进行同步操作,也就是说不能进行异步操作。而action则是用来提交mutation的方法,它可以进行异步操作,比如发起一个网络请求等。当action执行时,它可以在操作完成之后再调用一个mutation来修改store中的状态。

这种将状态管理和业务逻辑分离的方式可以使得我们的应用程序更加清晰和易于维护,而且也可以使得我们的代码更加可测试和可复用。所以,Vue之所以要使用mutation和action,主要是为了更好地管理和控制应用程序的状态,让我们的代码更加健壮、可维护和可扩展。

十.插槽、具名插槽、作用域插槽

在Vue中,插槽(slot)是一种功能,用于在组件中分发内容。通过使用插槽,我们可以将组件的某些部分替换为父组件传递的内容。

Vue中的插槽有三种类型:默认插槽、具名插槽和作用域插槽。

默认插槽: 默认插槽是最基本的插槽类型。当我们在父组件中使用子组件时,可以在子组件内部使用默认插槽,将父组件中的内容插入到子组件中的特定位置。默认插槽可以没有名字,直接使用“slot”作为插槽的名称。

具名插槽: 当子组件需要在不同位置接收不同内容时,我们可以使用具名插槽。具名插槽允许我们在父组件中使用不同名称的插槽,以便在子组件中将内容分发到正确的位置。在子组件中,我们可以使用“slot”元素的“name”属性来定义具名插槽。

作用域插槽: 作用域插槽是一种特殊类型的插槽,允许子组件将数据传递到父组件中。使用作用域插槽,我们可以在父组件中定义一个插槽,然后在子组件中使用一个具有特定属性的“template”元素,来向插槽中传递数据。在父组件中,我们可以使用特殊的“slot-scope”属性来定义插槽的作用域。

十一.树用js如何实现?

在JavaScript中,可以通过创建节点对象的方式来构建一棵树。下面是一个示例:

class TreeNode {constructor(val) {this.val = val;this.left = null;this.right = null;}
} // 创建树的根节点let root = new TreeNode(1); // 添加子节点
root.left = new TreeNode(2);
root.right = new TreeNode(3); // 添加子节点的子节点
root.left.left = new TreeNode(4);
root.left.right = new TreeNode(5);

在这个示例中,我们使用TreeNode类来定义每个节点,每个节点包含一个值val和两个指向左右子节点的指针left和right。我们可以通过创建节点实例来构建树,然后使用指针来链接各个节点。在这个示例中,我们创建了一个根节点,然后添加了两个子节点和两个子节点的子节点,从而创建了一棵具有5个节点的树。 需要注意的是,这种方式构建的树是二叉树,即每个节点最多有两个子节点。如果要构建其他类型的树,可以使用不同的节点定义。

十二.用set求两个数组的交集

具体思路如下: 将一个数组转为 Set 类型 遍历另一个数组,判断该元素是否在 Set 中 如果在,则将该元素加入结果集中

代码示例:

function intersection(arr1, arr2) {const set1 = new Set(arr1); const result = [];for (let i = 0; i < arr2.length; i++) {if (set1.has(arr2[i])) {result.push(arr2[i]);}}return result;
}
// Example usage: const arr1 = [1, 2, 3, 4, 5]; const arr2 = [2, 4, 6, 8]; console.log(intersection(arr1, arr2));
// [2, 4]

十三.求数据的最长不重复子串

const fun1 = (data) => {let str = '';if (typeof data === 'object') {if (Array.isArray(data)) {str = data.join('');} else if (data instanceof Set || data instanceof Map) {str = Array.from(data.values()).join('');} else {str = JSON.stringify(data);}} else {str = data.toString();}let length = str.lengthlet maxLength = 0let dp = Array(length).fill(0)let charIndex = {}let start = 0let end = 0for (let i = 0; i < length; i++) {let checkIndex = charIndex[str[i]] === undefined ? -1 : charIndex[str[i]]dp[i] = Math.min(i - checkIndex, dp[i - 1] === undefined ? 1 : dp[i - 1] + 1)charIndex[str[i]] = i;if (dp[i] > maxLength) {maxLength = dp[i]start = checkIndex === -1 ? 0 : checkIndex + 1end = i}}return {maxLength: maxLength,start: start,end: end,substring: str.substring(start, end + 1)}
}
let str = 'qweqrwetgdgasdgfdhh'
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 3, 2, 1, 23, 12, 41, 4, 4, 241, 4, 3424, 24, , 23412, 3]
let set = new Set([1, 2, 3, 4, 3, 2, 1]);
let map = new Map([['a', 1], ['b', 2], ['c', 3], ['d', 1], ['e', 2]]);
console.log(fun1(str));
console.log(fun1(arr));
console.log(fun1(set));
console.log(fun1(map));

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis 之五:Redis 的主从复制

概念 主从复制&#xff0c;是指将一台 Redis 服务器的数据&#xff0c;复制到其他的Redis服务器。前者称为主节点(master)&#xff0c;后者称为从节点(slave)&#xff1b;数据的复制是单向的&#xff0c;只能由主节点到从节点。 默认情况下&#xff0c;每台Redis服务器都是主节…

【0272】postgres内核分配 MyBackendId 实现原理(MyBackendId、MyProc、shmInvalBuffer)(三)

相关文章: 【0255】揭晓pg内核中MyBackendId的分配机制(后端进程Id,BackendId)(一) 【0256】揭晓pg内核中MyBackendId的分配机制(后端进程Id,BackendId)(二) 第一个backend process前,shmInvalBuffer的值情况 (gdb) p *shmInvalBuffer $153 = {minMsgNum =

webpack-cli

webpack-cli做了什么 webpack-cli 是 Webpack 提供的命令行工具&#xff0c;用于在命令行中执行 Webpack 相关的操作。webpack-cli 主要完成以下几项工作&#xff1a; 解析和处理命令行参数&#xff1a;webpack-cli 负责解析用户在命令行中输入的参数&#xff0c;包括配置文件…

云天励飞战略投资神州云海,布局机器人市场

日前,AI上市企业云天励飞(688343.SH)完成了对深圳市神州云海智能科技有限公司(以下简称“神州云海”)的B轮战略投资。 公开资料显示,自2015年于深圳创立以来,神州云海始终聚焦人工智能与服务机器人广阔的应用市场,依托自主的核心算法能力,深耕机器人硬件本体研发,整合上下游产…

Java学习笔记001——入门基础知识

Java语言是一种高级编程语言&#xff0c;它采用了面向对象编程的思想&#xff0c;具有跨平台性和安全性等优点。现如今&#xff0c;Java语言成为了世界上最流行的编程语言之一。 前一段学习Python语言&#xff0c;本文是学习java的第一篇笔记。 1. java运行环境搭建&#xff…

RabbitMQ-TTL/死信队列/延迟队列高级特性

文章目录 TTL死信队列消息成为死信的三种情况队列如何绑定死信交换机 延迟队列RabbitMQ如何实现延迟队列 总结来源B站黑马程序员 TTL TTLTTL(Time To Live):存活时间/过期时间当信息到达存活时间后&#xff0c;还没有被消费&#xff0c;会被自动清除。RabbitMQ可以对消息设置过…

Win10系統如何重置系统

Win10系統如何重置 大家可以使用Win10內建的重設電腦設定&#xff0c;如以下操作&#xff1a; 首先&#xff0c;可以先到桌面左下角的【開始】 選擇【設定】 在【設定】裡找到【更新與安全性】 在左側欄有一項【復原】 在復原的標題下&#xff0c;副標題有一項【重設此電腦】…

【algorithm】算法基础课---排序算法(附笔记 | 建议收藏)

&#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石. &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f4e3;系列专栏&#xff1a;AcWing算法学习笔记 &#x1f4ac;总结&#xff1a;希望你看完…

tvm交叉编译参考资料整理

环境 ubuntu20.04&#xff0c;ndk交叉编译部署到adnroid手机 参考&#xff1a; TVM部署神经网络模型到android端_tvm android-CSDN博客 使用TVM在android中进行Mobilenet SSD部署 - 知乎

深度探析低代码:助力“数智转型”赋能中国制造

随着数字化和智能化技术的飞速发展&#xff0c;我国制造业正面临着从传统制造向智能制造的转型升级。在这个过程中&#xff0c;低代码技术作为一种创新性的软件开发模式&#xff0c;逐渐成为助力我国制造业数智转型的关键驱动力。本文将从低代码技术的原理、应用场景以及在我国…

​The Sandbox的南极之旅|链接世界:从南极洲到元宇宙

真正的发现之旅不在于寻找新的景观&#xff0c;而在于拥有新的眼光。 - 马塞尔-普鲁斯特 在这个数字世界和物理世界日益交织的时代&#xff0c;The Sandbox 的联合创始人 Arthur Madrid 和 Sebastien Borget 踏上了远离数字空间的旅程&#xff0c;前往地球上未被开发的宝藏地点…

无用工作、UBI与AI

有些隐晦和黑暗的事实无法陈述&#xff0c;因为任何的系统中“无用”的结局都是被无情的抛弃和淘汰&#xff0c;AI监督下的人类结局更是如此。 什么是无用工作&#xff1f; 无用无效工作通常指的是那些看似忙碌但实际上对社会或个人没有实质性贡献的工作。这类工作可能包括以下…

2024环境工程、能源系统与化学材料国际会议(ICEEESCM 2024)

2024环境工程、能源系统与化学材料国际会议&#xff08;ICEEESCM 2024) 一、【会议简介】 2024环境工程、能源系统与化学材料国际会议&#xff08;ICEEESCM 2024)将于2024年在西安举行。会议将围绕环境工程、能源系统与化学材料等议题展开讨论&#xff0c;旨在为从事环境工程…

ABB双语言共享充电宝投资理财源码/共享充电宝系统源码/共享充电宝市场分析/五级分销返利+地图显示模式

ABB双语言共享充电宝投资理财源码/五级分销返利地图显示模式/vue编译后前端 测试环境&#xff1a;Linux系统CentOS7.6、宝塔、PHP7.3、MySQL5.6&#xff0c;根目录public&#xff0c;伪静态laravel5&#xff0c; 源码下载&#xff1a;https://download.csdn.net/download/m0_…

人脸高清算法GFPGAN之TensorRT推理

1. 综述 最近由于做数字人项目&#xff0c;采用的是wav2lip GFPGAN进行人脸面部高清&#xff0c;但GFPGAN模型本身比较大&#xff0c;所以想着使用TensorRT来代替原始的pth推理看看能否提升运行速度&#xff0c;于是便开始了这趟windows1之下进行GFPGAN的trt推理的折腾之旅。…

varFormatter 数据格式化库 以性能优先的 快速的 内存对象格式转换

varFormatter 数据格式化 技术 开源技术栏 对象/变量格式化工具库&#xff0c;其支持将一个对象进行按照 JSON XML HTML 等格式进行转换&#xff0c;并获取到结果字符串&#xff01; 目录 文章目录 varFormatter 数据格式化 技术目录介绍获取方式 使用实例格式化组件的基本使…

图书推荐||Word文稿之美

让你的文档从平凡到出众&#xff01; 本书内容 《Word文稿之美》是一本全面介绍Word排版技巧和应用的实用指南。从初步认识数字排版到高效利用模板、图文配置和表格与图表的排版技巧&#xff0c;再到快速修正错误和保护文件&#xff0c;全面系统地讲解数字排版的技术和能力&…

靶机渗透之My File Server: 1

Name: My File Server: 1Date release: 21 Feb 2020Author: Akanksha Sachin VermaSeries: My File ServerDownload: https://drive.google.com/uc?id1w0grAomPuFaIohBcUwDiI3QIi4fj4kje&exportdownload 对于vulnhub中的靶机&#xff0c;我们都需先下载镜像&#xff0c;然…

Redis 在 Linux 系统下安装部署的两种方式详细说明

小伙伴们好&#xff0c;欢迎关注&#xff0c;一起学习&#xff0c;无限进步 Redis安装和配置 1、首先在官网下载好redis-6.0.9.tar.gzhttp://redis.io/ 或者使用 wget 命令下载&#xff1a;wget http://download.redis.io/releases/redis-6.0.9.tar.gz 2、下载使用上传到阿里…

Entry First Day 入职恩孚第一天

入职第一天&#xff0c;电脑还没配置好就去了工厂。 熟悉了一下设备&#xff0c;切了几个小玩意&#xff0c; hello world 一下。 了解了串行端口的Nodejs的库 https://github.com/serialport/node-serialport&#xff0c;以后要用这个东西和硬件通讯&#xff0c;安装&#…