首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

前端20个真正灵魂拷问,吃透这些你就是中级前端工程师 【上篇】

元素字体大小变化 添加或者删除可见DOM元素 激活CSS伪类(例如::hover) 查询某些属性或调用某些方法 一些常用且导致回流属性和方法: clientWidth、clientHeight...这点是前端性能优化基础,性能优化是前端最重要核心基础技能点,也是面试官最看中基础之一 2.你对This了解自己实现过call,apply,bind?...50行javaScript代码实现call,apply,bind 这是一个很基础技能点,考察你对闭包,函数调用理解程度,感觉写得比较简单容易懂 3.如何减少重绘和回流次数: 4.你对前端异步编程哪些了解呢...标记整理是为了解决标记清除后留下内存碎片问题。...浏览器会话存储和持久性存储 4.浏览器缓存实现机制实现 10.同源策略是什么,跨域解决办法,cookie可以跨域? 跨域解决办法 Q:为什么出现跨域问题

1.2K30

nginx源码阅读(5)Master进程浅析

实时信号是通过队列来实现,所以,假设在阻塞等待时候,多个相同信号到来,最终解除阻塞时候,传递多次信号。 信号处理器 信号处理器是指当捕获指定信号(传递给进程)将会调用一个函数。...(主程序在执行某一个系统调用时候,可能被信号打断,当信号处理器返回可以通过参数控制是否重启这个系统调用)。...这个问题本质是,解除阻塞和等待信号这2步操作不是原子出现了竞态条件。这个竞态条件发生在主程序和信号处理器对同一个被解除信号竞争关系。 要避免这个问题可以通过sigsuspend调用来等待信号。...当主循环检测到这个标记时,置ngx_noaccepting为1,表示master进程下worker进程陆续都会退出,不再对外服务了。...当我们发现binary问题,如果master进程被我干掉了,我们还要使用backupbinary再启动,这个切换时间一旦过长,造成比较严重影响,可能更糟糕情况是你根本没有对binary

1.6K21
您找到你想要的搜索结果了吗?
是的
没有找到

Go GC 二三事

我们写代码,除了全局变量声明,我们实际编写逻辑,全部都是包在一个个函数,比如程序是从main()函数开始执行函数之间调用,总体上是: A函数调用B函数 B函数调用D函数 D函数执行完毕返回到...要解决这个问题,最简单做法就是在扫描阶段STW,但是STW性能损耗太大,怎么样能做到不STW地对对象引用关系进行扫描呢? 答案是,我们想办法破坏掉上面的两个条件就可以了。...但是因为STW要求把所有的goroutine停下来,而为了保证goroutine停下处于一个比较安全状态,go垃圾收集器观察goroutine,一般是在goroutine进行函数调用时将其暂停。...这里问题,就是如果有什么逻辑导致一个goroutine一直在运行没有进入想函数调用这种可以安全暂停状态【比如你写个流程极长循环累加什么】就会导致其他goroutine都被停下来等待这一个没能暂停...那如果我们把设置改为200,那就是堆内存占用达到6M触发GC,以此类推 需要注意是,将这个值调大并不一定是一个好选择,确实我们允许程序占用空间变多,这能减少GC频率,但也导致每次GC需要扫描和清理内存变大

33810

那你讲一下并发可达性分析

好了,到这里就可以把话语权交给面试官了。因为到这里,他接下来可以很多,你不知道他什么,比如: 你刚刚谈到了根节点,那你知道哪些对象可以作为根对象?...上面的这些问题都太常规了,任何一份面经里面都会有这样几个问题本文要解决是下面这个稍微不那么常见,但是你答题过程中一定会提到点“并发标记”、“浮动垃圾”。...CMS和G1都是一个并发标记过程,并发标记解决什么问题?带来了什么问题?怎么解决这些问题呢? ? 并发标记解决什么问题?...他可能问:你刚刚说第二种情况,"把原本存活对象错误标记为已消亡"能具体说明一下?怎么消亡?垃圾回收器是怎么解决这个问题?...一个大佬叫Wilson,他在1994年在理论上证明了,当且仅当以下两个条件同时满足产生"对象消失"问题,原来应该是黑色对象被误标为了白色: 条件一:赋值器插入了一条或者多条从黑色对象到白色对象引用

98931

vue高频面试题合集(一)附答案

vue3.0 特性你什么了解?...,主要用来做虚拟DOM渲染优化(优化器)第三步是 使用 element ASTs 生成 render 函数代码字符串(代码生成器)Vue 初始化页面闪动问题如何解决?...key是为Vue中vnode标记唯一id,通过这个key,我们diff操作可以更准确、更快速diff算法过程中,先会进行新旧节点首尾交叉对比,当无法匹配时候会用节点key与节点进行比对...、尾、头、尾.准确: 如果不加key,那么vue会选择复用节点(Vue就地更新策略),导致之前节点状态被保留下来,产生一系列bug.快速: key唯一性可以被Map数据结构充分利用...过程中调用对应钩子4.当执行指令对应钩子函数调用对应指令定义方法Vue为什么没有类似于React中shouldComponentUpdate生命周期?

93430

前端工程师vue面试题笔记

key是为Vue中vnode标记唯一id,通过这个key,我们diff操作可以更准确、更快速diff算法过程中,先会进行新旧节点首尾交叉对比,当无法匹配时候会用节点key与节点进行比对...、尾、头、尾.准确: 如果不加key,那么vue会选择复用节点(Vue就地更新策略),导致之前节点状态被保留下来,产生一系列bug.快速: key唯一性可以被Map数据结构充分利用...常见配置选项 deep 和 immediate,对应原理如下deep:深度监听对象,为对象每一个属性创建一个 watcher,从而确保对象每一个属性更新都会触发传入回调函数。...主要原因在于对象属于引用类型,单个属性更新并不会触发对象 setter,因此引入 deep 能够很好地解决监听对象问题。同时也引入判断机制,确保在多个属性更新回调函数仅触发一次,避免性能浪费。...immediate:在初始化时直接调用回调函数可以通过在 created 阶段手动调用回调函数实现相同效果Vue模版编译原理知道,能简单说一下

65630

Node理论笔记:内存控制

1.1 V8内存限制与对象分配 一般后端语言基本在内存上是没什么限制,然而node中通过JavaScript使用内存可以发现只能使用部分内存。...但是Mark-Sweep问题,就是在标记清除回收后,内存空间会出现不连续状态,这种内存碎片会对后续内存分配造成问题,因为很可能出现分配一个大对象情况,这时所有的碎片空间都无法完成此次分配,就会提前触发垃圾回收...想要释放掉常驻内存对象,可以调用delete命令或者将变量重新赋值,让对象脱离引用关系,接下来老生代内存清除和整理过程中会被回收释放。 同样,在非全局作用域中也可以这么操作。...2.2 闭包 由于JavaScript链式作用域,外部作用域是无法访问内部作用域实现外部作用域可以访问内部作用域中变量方法叫做闭包。闭包是得益于高阶函数。...如果用数据库来记录日志就会存在问题,日志通常海量数据库是构建在文件系统之上,写入效率是远远低于文件直接写入,于是形成数据库写入操作堆积,JavaScript中相关应用作用域也不会得到释放

56720

2022必会vue高频面试题(附答案)

为了解决这个问题,经过 vue 内部处理后可以使用以下几种方法来监听数组push();pop();shift();unshift();splice();sort();reverse();复制代码由于只针对了以上...对象为引用类型,当复用组件,由于数据对象都指向同一个data对象,当在一个组件中修改data,其他重用组件中data会同时被修改;而使用返回对象函数,由于每次返回都是一个对象(Object...实例),引用地址不同,则不会出现这个问题。...,移动到后之后)后与前(尾与头比,此种发生了,涉及移动节点,那么前指向节点,移动到前之前)--- 问完上面这些如果都能很清楚的话,基本O了 ---以下这些简单概念,你肯定也是没有问题啦...destroyed:实例销毁之后调用调用后,Vue实例指示所有东西都会解绑,所有事件监听器和所有子实例都会被移除每个生命周期内部可以什么

2.7K40

飞书前端提到竞态问题,在 Android 上怎么解决

,竞态问题可能会展示类型数据,或重复展现多个状态数据; 3、下拉刷新: 在加载分页数据同时下拉刷新,竞态问题可能导致刷新后展示分页数据,不是最新数据。...,与状态无关或与调用顺序无关场景说明能够容忍混乱结果,不考虑竞态问题(例如,页面分步加载,哪个请求先返回都可以,不存在竞争); 必要条件 3 - 响应不稳定: 当请求响应时延不稳定才可能出现竞争...提供了打标记 API,那么我们可以给同位竞争请求都打上相同 TAG 标记,在每次发起请求先批量取消所有相同 TAG 请求,这样就不需要维护请求 Call 对象了。...后面了解到方法 2 之后,就没必要走这个思路了。相比之下,自定义拦截器更灵活,将来特殊需求可以考虑往这个思路上靠。...小彭之前还不知道 Retrofit @TAG 这个注解,所以在使用 Retrofit 都是采用 方法 1 维护 Call 对象方式来取消请求,也算有所收获。关注,我们下次见。

1.2K20

面试官最喜欢问几个react相关问题

在回调中你可以使用箭头函数,但问题每次组件渲染都会创建一个回调。...Element 函数 cloneElement 则是用于复制某个元素并传入 Props在 ReactNative中,如何解决8081端口号被占用而提示无法访问问题?...source参数,默认在每次 render 都会优先调用上次保存回调中返回函数,后再重新调用回调;useEffect(() => { // 组件挂载后执行事件绑定 console.log...;引用传递 : 如果需要传递元组件 refs 引用,可以使用React.forwardRef;静态方法 : 元组件上静态方法并无法被自动传出,导致业务层无法调用解决:函数导出静态方法赋值重新渲染...图片这就意味着,如果 dom 节点发生了跨层级移动,react 删除节点,生成节点,不会复用。

4K20

vue面试提整理偏原理

我们可以判断key是否为当前被代理对象target自身属性,也可以判断值与值是否相等,只有满足以上两个条件之一,才有可能执行trigger。...使用Watch深度监听可能带来性能问题,优化的话可以使用字符串形式监听,如果没有写到组件中,也就是使用vm.watch来设置监听时候,这个vm.watch是返回一个取消观察函数调用这个函数可以手动注销监听了...本来也不难就当一个装逼知识点吧 12. 组件中data为什么是一个函数这个问题 确实问错不及防 ,但是这还是个事? 一个组件被复用多次的话,也就会创建多个实例。...如果一方子节点,一方没有,相当于子节点替代了原来没有的节点;同理,如果一方没有子节点,一方,相当于要把老节点删除。 • 再来比较都有子节点情况,这里是diff核心。...虚拟Dom以及key属性作用 这个问题在 某友 面试 , 记忆犹新,面试官非说错了 ,不上辩解只能屈服 由于在浏览器中操作DOM是很昂贵。频繁操作DOM,产生一定性能问题

9410

JVM笔记-HotSpot算法细节实现

什么程序会长时间执行呢? 最明显特征就是指令序列复用,如方法调用、循环跳转、异常跳转等,只有具备这些功能指令才会产生安全点。...虚拟机发起垃圾收集,不必理会已声明在安全区域线程;当线程离开安全区域检查虚拟机是否已经完成根节点枚举(或者其他暂停用户线程阶段): 若完成,则继续执行; 否则就必须等待,直至收到可以离开安全区域信号...5.1 伪共享问题 5.1.1 伪共享 除了写屏障开销,高并发场景下还存在“伪共享(False Sharing)”问题:即,多线程修改互相独立变量,如果这些变量恰好共享一个缓存行,彼此影响导致性能降低...程序因此报错,这是个严重问题。 6.3 如何解决对象消失 如何解决上述“对象消失”问题呢?...做法:黑色对象(A)插入指向白色对象(C)引用关系(A→C),就将这个插入引用记录下来,待并发扫描结束之后,再以这些记录过引用关系中黑色为根,重新扫描一次。

1K10

提示react hook——你可能不是“”所认识useEffect前言class组件生命周期模拟useEffect & useLayoutEffect区别

第二个参数是一个数组,传入内部执行副作用函数需要依赖,当这几个依赖一个要更新,effect里面也重新生成一个副作用并执行副作用。如果没有更新,则不会执行。...如果要区分生命周期,不传第二个参数,每次都会跑,相当于didupdate。...加个mount标记一下,里面用if判断一下,即可以达到模拟生命周期效果" 很多人都会想到这个办法模拟,于是我们试一下看看: let mount; function useForceUpdate()...这样子,我们拆成两个useEffect调用,就可以解决问题: function UnmountTest() { useEffect(() => { if (mount) {...问题,很自然想到异步,说到异步又想到了requestIdleCallback,这个函数就是浏览器空闲时候执行callback。

2.6K20

垃圾收集算法及细节

如此庞大空间要在每次垃圾回收肯定是不能遍历整个引用链,就好比系统用户量百万以上级别的,用户列表还能每次从硬盘读取?我们当然不会这么做。为了解决这一问题最早是用保守式GC和后来准确式GC。...在源代码里面每个变量都是类型,但是编译之后代码就只有变量在栈上位置了。OopMap就是一个附加信息,告诉你栈上哪个位置本来是个什么东西。这个信息是在JIT编译跟机器码一起产生。...就是持续执行下去意思,例如方法调用、循环、异常跳转等这些节点上。...安全点上有OopMap,是有利于垃圾回收所用信息,所以,在发生GC就要尽量让所有用户线程跑到离安全点更近地方停下来,这里两种方法:抢先式中断和主动式中断。...,HotSpot从对象生成那一刻、到开始内存回收、如何快速准确回收做了很多工作,在实现上,从GC Roots快速扫描、记忆集、卡表、又用卡页中元素维护堆中包含跨代引用对象以及三色标记解决并发标记带来问题

29320

react hook——你可能不是“”所认识useEffect

第二个参数是一个数组,传入内部执行副作用函数需要依赖,当这几个依赖一个要更新,effect里面也重新生成一个副作用并执行副作用。如果没有更新,则不会执行。...如果要区分生命周期,不传第二个参数,每次都会跑,相当于didupdate。...加个mount标记一下,里面用if判断一下,即可以达到模拟生命周期效果" 很多人都会想到这个办法模拟,于是我们试一下看看: let mount; function useForceUpdate()...这样子,我们拆成两个useEffect调用,就可以解决问题: function UnmountTest() { useEffect(() => { if (mount) {...问题,很自然想到异步,说到异步又想到了requestIdleCallback,这个函数就是浏览器空闲时候执行callback。

1.3K20

如何准备好一场vue面试

需要注意是 ViewModel 所封装出来数据模型包括视图状态和行为两部分, Model 层数据模型是只包含状态,比如页面的这一块展示什么页面加载进来时发生什么,点击这一块发生什么,这一块滚动发生什么这些都属于视图行为...用任何方式生成数据,如果接收变量是一个proxy代理对象,就都会导致watch这个对象,watch回调里无法正确获取值。...这些被标记节点(静态节点)我们就可以跳过对它们比对,对运行时模板起到很大优化作用。编译最后一步是将优化后AST树转换为可执行代码。子组件可以直接改变父组件数据?...属性一个get方法和一个set方法,当数据发生变化时,会调用set方法。...这个可以这个节点唯一标识,告诉diff 算法,在更改前后它们是同一个DOM节点扩展v-for 为什么要有key ,没有key 暴力复用,举例子的话随便说一个比如移动节点或者增加节点(修改DOM),

50920

阿里前端二面必会react面试题指南_2023-02-24

这段代码什么问题?...雪球效应,虽然一个组件还是使用着同一个 mixin,但是一个 mixin 会被多个组件使用,可能会存在需求使得 mixin 修改原本函数或者新增更多函数,这样可能就会产生一个维护成本HOC 解决了这些问题...一旦这个DOM树,为了弄清DOM是如何响应状态改变, React会将这个树与上一个虚拟DOM树比较。...子组件render执行会影响性能,这时就可以使用shouldComponentUpdate来解决这个问题。...面对这个问题可以使用如下方法进行解决:(1)使用setState改变数据之前,先采用ES6中assgin进行拷贝,但是assgin只深拷贝数据第一层,所以说不是最完美的解决办法:const o2

1.8K30

react面试题总结一波,以备不时之需

React组件构造函数什么作用?它是必须?...在回调中你可以使用箭头函数,但问题每次组件渲染都会创建一个回调。什么原因促使你脱离 create-react-app 依赖当你想去配置 webpack 或 babel presets。...图片这就意味着,如果 dom 节点发生了跨层级移动,react 删除节点,生成节点,不会复用。...,减少节点创建和删除操作render函数中减少类似onClick={() => {doSomething()}}写法,每次调用render函数均会创建一个函数,即使内容没有发生任何变化,也导致节点没必要重渲染...为了解决这个问题,Hook 将组件中相互关联部分拆分成更小函数(比如设置订阅或请求数据),并非强制按照生命周期划分。你还可以使用 reducer 来管理组件内部状态,使其更加可预测。

63830

一口气问了18个JVM问题

这个问题前置条件是你得知道 GC 分代,为什么分代。这个在之前文章提了,不清楚可以去看看。 现在我们来回答一下这个问题。...还有 Minor GC,其指就是年轻代 gc。 young gc 触发条件是什么? 大致上可以认为在年轻代 eden 快要被占满时候触发 young gc。 为什么要说大致上呢?...那 PLAB 知道可以看到和 TLAB 很像,PLAB 即 Promotion Local Allocation Buffers。 用在年轻代对象晋升到老年代。...这个方法中被调用。...卡表其实只有一份,又得用来支持 YGC 又得支持 CMS 并发增量更新肯定是不够每次 YGC 都会扫描重置卡表,这样增量更新记录就被清理了。

24110
领券