前端工作面试(前端应聘面试题)

前端工作面试(前端应聘面试题)p p p span style color fe2c24 需要传达的内容 span p ul li 基本信息 你叫 xxx xx 毕业开始做前端 li ul

大家好,我是讯享网,很高兴认识大家。




讯享网

<p></p> <p><span style="color:#fe2c24;">需要传达的内容&#xff1a;</span></p> <ul><li>基本信息&#xff1a;你叫xxx&#xff0c;xx毕业开始做前端&#xff0c;做了多少年</li><li>职业经历&#xff1a;我在<strong>xxx、xxx公司</strong>(一线互联网大厂)呆过&#xff0c;选择在xx公司担任高阶(前端)&#xff1b;</li></ul> <p><span style="color:#fe2c24;">技术特长&#xff1a;</span></p> <ul><li>对xx方面特别感兴趣 or 擅长&#xff0c;曾经做过xxx技术项目(轮子、性能优化、解决过复杂问题)&#xff1b;</li><li>当下在做什么&#xff0c;特别擅长的点</li><li></li><li>核心&#xff1a;简单明了&#xff0c;把基本情况和核心竞争力传达清楚</li></ul> <p><span style="color:#fe2c24;">怎么突出重点&#xff0c;让自己更有吸引力</span></p> <ul><li>一线互联网大公司&#xff1a;字节、阿里、腾讯、shopee等</li><li>有技术深度的经历&#xff1a;性能优化、解决疑难杂症、优质开源项目作者、有深度的技术博客/分享</li><li>性能、稳定性、开发效率提升</li><li>重要业务冲刺 owner</li></ul> <p><span style="color:#fe2c24;">避免  </span>      </p> <ul><li>事无巨细&#xff0c;抓不到重点        </li><li>平淡如水&#xff1a;        </li><li>逻辑混乱</li></ul> <p style="margin-left:0;text-align:left;"><span style="color:#000000;">举例&#xff1a;</span></p> <p style="margin-left:0;text-align:left;"><span style="color:#000000;">        面试官好&#xff0c;我叫汤姆丁&#xff0c;拥有3年前端开发经验&#xff0c;其中有将近2年带团队经验。是实干型开发选手&#xff0c;vue/react等主流前端框架业务开发是完全没有问题的。node&#xff0c;python搭建简单的服务端写接口也是没问题。node的话使用egg&#xff0c;</span><span style="background-color:#ffffff;"><span style="color:#000000;">Sequelize&#xff08;斯Q奶&#xff09;。python的话用flask这些框架开发服务端。目前工作约20%左右在团队管理上&#xff0c;80%左右还是业务开发。技术上较大的成果就是&#xff0c;把公司业务梳理一遍&#xff0c;使用微前端重构。团队管理上除了技术规范&#xff0c;还有文档沉淀&#xff0c;每月复盘&#xff0c;提测规范等等这些流程的完善。</span></span></p> <p style="margin-left:0;text-align:left;"></p> <h6 style="margin-left:0pt;text-align:left;"><strong><span style="color:#1a1a1a;">如何做优化</span></strong></h6> <p style="margin-left:0;text-align:left;"><span style="color:#000000;">        除了常规的资源优化&#xff0c;体制压缩&#xff0c;gzip&#xff0c;懒加载这些&#xff0c;让可以在nginx那开通一下http2&#xff0c;还有根据业务做一些缓存&#xff0c;使用indexdp。其实这些难就难在怎么定义指标&#xff0c;进行业务&#xff0c;代码逻辑层面的优化&#xff0c;才是难点。我初步是打算Lighthouse配合 sentry 来指定一个流程。比如首页多少秒打开合格&#xff0c;弱环境下要多少秒等。如果有动画是要多少帧等&#xff0c;因为帧数是关电脑hz的&#xff0c;跟配件有关。</span></p> <p style="margin-left:0;text-align:left;"></p> <h6 style="margin-left:0pt;text-align:left;"><strong><span style="color:#ff0000;">vue双向绑定原理</span></strong></h6> <p style="margin-left:0;text-align:left;"><span style="background-color:#ffffff;"><span style="color:#;">        Vue采用数据劫持 结合 发布者-订阅者的方式来实现数据的响应式&#xff0c;通过Object.defineProperty来劫持数据的getter、setter&#xff0c;在数据变动时发布消息给订阅者&#xff0c;订阅者收到消息后进行相应的处理&#xff0c;通过原生js提供的监听数据的API&#xff0c;当数据发生变化的时候&#xff0c;在回调函数中修改DOM。 </span></span></p> <p style="margin-left:0;text-align:left;"><span style="background-color:#ffffff;"><span style="color:#;">缺点:</span></span></p> <p style="margin-left:0;text-align:left;"><span style="background-color:#ffffff;"><span style="color:#;">        一次性递归到底开销很大&#xff0c;如果数据很大&#xff0c;大量的递归导致调用栈溢出、 不能监听对象的新增属性和删除属性 无法正确的监听数组的方法。要使用$set</span></span></p> <h6 style="margin-left:0pt;text-align:left;"><span style="color:#fe2c24;"><strong>vue2和vue3的区别</strong></span></h6> <p style="margin-left:0;text-align:left;"><span style="color:#;">        除了语法&#xff0c;api&#xff0c;比如setUp&#xff0c;最大的不一样就是双向绑定从vue2的defineProperty改成了</span><span style="background-color:#fafafa;"><span style="color:#;">proxy&#xff0c;可以监听数组了&#xff0c;弊端是ie8之类的低版本兼容问题</span></span></p> <h6 style="margin-left:0pt;text-align:left;"><strong><span style="color:#1a1a1a;">什么是闭包</span></strong></h6> <p style="margin-left:0;text-align:left;"><span style="color:#;">        闭包本质还是函数&#xff0c;通俗来讲就是把操作函数暴漏出去&#xff0c;然后细节放在内部。避免污染&#xff0c;增加安全性。简单举个例子&#xff0c;函数a里面定义一个函数B&#xff0c; 外部一个变量引用了函数A&#xff0c;就创建了一个闭包。现在很少用了&#xff0c;因为会占内存&#xff0c;用不好还会造成内存泄漏。比如vue中的数据劫持observer就用到了闭包</span></p> <h6 style="margin-left:0pt;text-align:left;"><strong><span style="color:#1a1a1a;">原型链</span></strong></h6> <p style="margin-left:0;text-align:left;"><span style="color:#;">        他的本质还是对象&#xff0c;但是呢有个上下文&#xff0c;是用他来创建私有变量拿数据的&#xff0c;不同地方调用方法&#xff0c;this.xx就拿上一个。继承等等。反正这么处理的根本原因还是不想做全局污染。因为现在mvvc框架原因&#xff0c;业务上很久没有单独处理过这个了。</span></p> <h6 style="margin-left:0pt;text-align:left;"><strong><span style="color:#1a1a1a;">vue性能优化</span></strong></h6> <p style="margin-left:0;text-align:left;"><span style="color:#;">        除了常规的懒加载&#xff0c;还有keep-alive缓存组件。更多需要多使用函数式组件&#xff0c;还有不要设计太深的响应式数据。组件的颗粒度不能设计太细.&#xff0c;v-if-for不要同时使用。</span></p> <h6 style="margin-left:0pt;text-align:left;"><strong><span style="color:#1a1a1a;">vue计算属性和watch</span></strong></h6> <p style="margin-left:0;text-align:left;"><span style="color:#;">        computed有缓存功能拿不到this,watch主要是监听data里面的定义的量多个属性影响一个属性时&#xff0c;建议使用 computed。 价格&#xff0c;根据订单数量&#xff0c;优惠券等&#xff0c;显示价格当某个值发生变化&#xff0c;引起一系列的业务时&#xff0c;建议使用 watch。 比如input搜索&#xff0c;请求接口&#xff08;记得做防抖&#xff09;&#xff0c;渲染列表。就可以监听input Value值。</span></p> <h6 style="margin-left:0pt;text-align:left;"><strong><span style="color:#1a1a1a;">vue3增加了哪些特性</span></strong></h6> <p style="margin-left:0;text-align:left;"><span style="color:#;">        vue3整体下来感觉更贴进react那种了&#xff0c;比如定义数据使用ref&#xff0c;不再用this.data 还有setpup可以划分逻辑&#xff0c;也支持jsx了</span></p> <h6 style="margin-left:0pt;text-align:left;"><strong><span style="color:#1a1a1a;">React如何避免重复渲染&#xff08;如何优化&#xff09;</span></strong></h6> <p style="margin-left:0;text-align:left;"><span style="background-color:#fafafa;"><span style="color:#;">        以前用shouldComponentsUpdate里面做判断&#xff0c;return false等。现在基本用hook&#xff0c;useMemo。useCallback。</span></span></p> <p style="margin-left:0;text-align:left;"><span style="background-color:#fafafa;"><span style="color:#;">        useMemo场景&#xff1a;父的state变化&#xff0c;用useMemo可避免子重复渲染</span></span></p> <h6 style="margin-left:0px;text-align:left;"><strong><span style="color:#;">用useCallback这个函数重新生成了的话&#xff0c;子组件会不会重新渲染</span></strong></h6> <p style="margin-left:0;text-align:left;"><span style="color:#;">        会&#xff0c;让他不会的就用useRef作为useMemo的依赖</span></p> <h6 style="margin-left:0pt;text-align:left;"><strong><span style="color:#1a1a1a;">UmiJs和dva、roadhog是什么关系&#xff1f;</span></strong></h6> <p style="margin-left:0;text-align:left;"><span style="color:#;">        roadhog 是基于 webpack 的封装工具&#xff0c;目的是简化 webpack 的配置 umi 可以简单地理解为 roadhog &#43; 路由&#xff0c;思路类似 next.js/nuxt.js&#xff0c;辅以一套插件机制&#xff0c;目的是通过框架的方式简化 React 开发 dva 目前是最纯粹的数据流&#xff0c;和 umi 和 roadhog 之间并没有相互的依赖关系&#xff0c;可以分开使用也可以一起使用。</span></p> <h6 style="margin-left:0px;text-align:left;"><span style="color:#;">React 中 keys 的作用是什么&#xff1f;</span></h6> <p style="margin-left:0;text-align:left;"><span style="color:#;">        住要是避免重复计算&#xff0c;增加性能。因为react用到的是diff算法&#xff0c;吧树形结构按层级分解&#xff0c;只比较同级元素。所以列表&#xff0c;循环时候要给个key。</span></p> <h6 style="margin-left:0pt;text-align:left;"><strong><span style="color:#1a1a1a;">react diff 原理</span></strong></h6> <p style="margin-left:0;text-align:left;"><span style="color:#;">        把树形结构按照层级分解&#xff0c;只比较同级元素。所以需要给列表结构的每个单元添加唯一的 key 属性&#xff0c;方便比较&#xff0c;节约性能。基于这个&#xff0c;开发的时候可以重写 shouldComponentUpdate 提高 diff 的性能。当然现在大部分是使用</span><span style="background-color:#fafafa;"><span style="color:#;">useMemo。useCallback。去优化了。</span></span></p> <h6 style="margin-left:0pt;text-align:left;"><strong><span style="color:#1a1a1a;">React.Children.map和js的map有什么区别&#xff1f;</span></strong></h6> <p style="margin-left:0;text-align:left;"><span style="color:#;">        JavaScript中的map不会对为null或者undefined的数据进行处理&#xff0c;而React.Children.map中的map可以处理React.Children为null或者undefined的情况。</span></p> <h6 style="margin-left:0pt;text-align:left;"><strong><span style="color:#1a1a1a;">React高阶组件</span></strong></h6> <p style="margin-left:0;text-align:left;"><span style="color:#;">        高阶组件本质还是组件&#xff0c;</span><span style="background-color:#fafafa;"><span style="color:#;">只是一个包装了另外一个 React 组件的 组件。可以通俗理解成&#xff0c;一个函数里可能有好几种组件。这种形式通常实现为一个函数&#xff0c;本质上是一个类工厂。运用场景&#xff0c;多个组件都用到同一段逻辑时候&#xff0c;就需要吧共同逻辑提取出来&#xff0c;</span></span><span style="color:#;">利用高阶组件的形式将这段逻辑整合到每一个组件中, 从而减少代码的逻辑重复 。</span></p> <p style="margin-left:0;text-align:left;"><span style="color:#;">        需要代码重用时, react如果有多个组件都用到了同一段逻辑, 这时,就可以把共同的逻辑部分提取出来,利用高阶组件的形式将这段逻辑整合到每一个组件中, 从而减少代码的逻辑重复 。又或者需要组件增强优化时, 比如我们在项目中使用的组件有些不是自己写的, 而是从网上撸下来的,但是第三方写的组件可能比较复杂, 有时不能完全满足需求, 但第三方组件不易修改, 此时也可以用高阶组件,在不修改原始组件的前提下, 对组件添加满足实际开发需求的功能</span></p> <h6 style="margin-left:0pt;text-align:left;"><strong><span style="color:#1a1a1a;">哈希和非哈希的区别</span></strong></h6> <p style="margin-left:0;text-align:left;"><span style="color:#;">        有井号没井号&#xff0c;一个是用window里面的</span><span style="background-color:#fafafa;"><span style="color:#;">pushState一个是用onpopstate做进退</span></span></p> <h6 style="margin-left:0pt;text-align:left;"><strong><span style="color:#1a1a1a;">箭头函数</span></strong></h6> <p style="margin-left:0;text-align:left;"><span style="color:#;">        好处就是不用管this了&#xff0c;谁调用就是谁的上下文&#xff0c;不能使用new&#xff0c;没有arguments&#xff0c;也没有原型和super等等。</span></p> <h6 style="margin-left:0pt;text-align:left;"><strong><span style="color:#1a1a1a;">重绘与重排的区别</span></strong></h6> <p style="margin-left:0;text-align:left;"><span style="color:#;">        重排&#xff1a;渲染树中的元素结构&#xff0c;尺寸、属性这些发生改变时候&#xff0c;浏览器就会重新渲染。</span></p> <p style="margin-left:0;text-align:left;"><span style="color:#;">        重绘&#xff1a;页面某些元素发生变化&#xff0c;浏览器就会对元素进行重绘&#xff0c;比如background这些。如果是opacit既出发重排也出发重绘</span></p> <h6 style="margin-left:0pt;text-align:left;"><strong><span style="color:#1a1a1a;">强缓存和协商缓存</span></strong></h6> <p style="margin-left:0;text-align:left;"><span style="color:#;">        强缓存就是根据header的字段&#xff0c;Expires和Cache-Control来判断是否过期再请求服务器&#xff0c;坏处就是服务器更新了&#xff0c;如果还没过期就会主动请求。而协商缓存就是从服务器判断是否重新请求。前端你可以在头部meat标签设置&#xff0c;多少秒刷新文档等。作用就是对http请求缓存&#xff0c;减少请求次数&#xff0c;达到优化效果。</span></p> <h6 style="margin-left:0pt;text-align:left;"><strong><span style="color:#1a1a1a;">防抖/节流</span></strong></h6> <p style="margin-left:0;text-align:left;"><span style="color:#;">        防抖&#xff1a;让 事件 在触发后 N 秒后执行&#xff0c;如果在 N 秒内重新触发&#xff0c;则 重新计算 时间。input的搜索等</span></p> <p style="margin-left:0;text-align:left;"><span style="color:#;">        节流 &#xff1a; 在规范时间内&#xff0c;只能触发一次函数&#xff0c;如果多次触发不会执行。比如支付按钮等。</span></p> <h6 style="margin-left:0pt;text-align:left;"><strong><span style="color:#1a1a1a;">事件循环Event loop&#xff0c; 宏任务、微任务</span></strong></h6> <p style="margin-left:0;text-align:left;"><span style="color:#;">        浏览器的事件循环&#xff1a;执行js代码的时候&#xff0c;遇见同步任务&#xff0c;直接推入调用栈中执行&#xff0c;遇到异步任务&#xff0c;将该任务挂起&#xff0c;等到异步任务有返回之后推入任务队列中&#xff0c;当调用栈中的同步任务全部执行完成&#xff0c;将任务队列中的任务按顺序一个个推入执行&#xff0c;重复执行这一系列的行为&#xff0c; 异步任务又分为宏任务和微任务。</span></p> <p style="margin-left:0;text-align:left;"><span style="color:#;">宏任务&#xff1a; 任务队列中的任务称为宏任务&#xff0c;每个宏任务都包含一个微任务队列</span></p> <p style="margin-left:0;text-align:left;"><span style="color:#;">微任务&#xff1a; 等宏任务中的主要功能都完成后&#xff0c;渲染殷勤不急着去执行下一个宏任务&#xff0c;而是执行当前宏任务中的微任务</span></p> <p style="margin-left:0;text-align:left;"><span style="color:#;">宏任务包括&#xff1a;执行script标签内部代码、setTimeout、ajax请求</span></p> <p style="margin-left:0;text-align:left;"><span style="color:#;">微任务包括&#xff1a;pormise、MutonObserver、Object.observer</span></p> <h6 style="margin-left:0pt;text-align:left;"><strong><span style="color:#1a1a1a;">创造promise实例后&#xff0c;它会立即执行,有等待&#xff0c;失败&#xff0c;成功</span></strong></h6> <h6 style="margin-left:0pt;text-align:left;"><strong><span style="color:#1a1a1a;">严格模式的限制</span></strong></h6> <ul><li style="margin-left:0px;text-align:left;"><span style="color:#;">变量必须声明后再使用</span></li><li style="margin-left:0px;text-align:left;"><span style="color:#;">函数的参数不能有同名属性&#xff0c;否则报错</span></li><li style="margin-left:0px;text-align:left;"><span style="color:#;">不能使用 with 语句</span></li><li style="margin-left:0px;text-align:left;"><span style="color:#;">禁止 this 指向全局对象</span></li></ul> <h6 style="margin-left:0pt;text-align:left;"><strong><span style="color:#1a1a1a;">数组去重</span></strong></h6> <ol><li style="margin-left:0px;text-align:left;"><span style="color:#;">1.利用双重for循环&#xff0c;再利用数组方法splice方法去重&#xff08;es5常用&#xff09;</span></li><li style="margin-left:0px;text-align:left;"><span style="color:#;">2.set去重:准备一个数组&#xff0c;数组解构newset,再准备一个函数存放数组的变量作为函数的判断值&#xff0c;return</span></li><li style="margin-left:0px;text-align:left;"><span style="color:#;">Array.from(new set(arr))即可</span></li><li style="margin-left:0px;text-align:left;"><span style="color:#;">3.数组方法indexof</span></li><li style="margin-left:0px;text-align:left;"><span style="color:#;">4.数组方法sort Obj[a]-Obj[b]</span></li></ol> <h6 style="margin-left:0pt;text-align:left;"><strong><span style="color:#1a1a1a;">跨域</span></strong></h6> <p style="margin-left:0;text-align:left;"><span style="color:#;">        最稳妥最常见的就是服务器开允许访问。剩下就是jsonp,现在很少了每个接口都需要特定处理&#xff0c;一般都用反向代里&#xff0c;proxy这些。我们目前是采用node中间件进行转发。跟nginx反向代理差不多。当然C端的项目原则上是不允许跨域的。而且生产环境也是全部关闭&#xff0c;安全性问题。真需要跨部门也是通过接口去处理&#xff0c;比如小程序内部打开h5进行下单之类</span></p> <h4 style="margin-left:0pt;text-align:left;"><strong><span style="color:#1a1a1a;">如何管理团队等</span></strong></h4> <p style="margin-left:0;text-align:left;"><span style="color:#;">        其实我觉得最大的困难有亮点&#xff0c;第一人才培养&#xff0c;第二就是达成共识。第三文档沉淀。1和3都很好理解&#xff0c;字面意思。第二点达成共识呢&#xff0c;我举个理想的场景。整个团队大家都有明确目标&#xff0c;然后一起使劲往同一个方向前进。又比如领导有需求下来了&#xff0c;大家能明白这个需求的意义&#xff0c;而不是单纯的完成任务。大概就是这种感觉。</span></p> <p style="margin-left:0;text-align:left;"><span style="color:#;">我为了完成上面三个几个目标&#xff0c;做了以下几个措施&#xff1a;每月(项目)复盘&#xff0c;多写注释&#xff0c;拆解需求。复盘包获代码量&#xff0c;还有收集遇到的问题&#xff0c;还有一些技术方案收集。当然代码量不是越高越好&#xff0c;越高就证明复用性可能没做好就帮忙深入去看看。因为组员性格情况可能不同&#xff0c;所以这些可以线上进行。然后再整理一下变成文档沉淀下来。踩过很多坑&#xff0c;分享啥的&#xff0c;最后组员都不积极&#xff0c;采用这种&#xff0c;然后偶尔写写文章。当然根据每个人性格采取</span></p> <p style="margin-left:0;text-align:left;"><span style="color:#;">然后就是需求拆解了这个&#xff0c;举个最简单的例子&#xff0c;产品那边的需求不单单是怎么做怎么做&#xff0c;整个项目有背景的需要说明&#xff0c;然后我会协助拆解成任务&#xff0c;比如登录页&#xff0c;为什么用短信短信验证码&#xff0c;为什么使用按钮要隐藏起来&#xff0c;因为我们只想要客户买&#xff0c;不想让他用等等。当然是极端例子哈&#xff0c;一些简单常规的肯定不讲了。这样拆分后呢&#xff0c;时间评估就准很多了&#xff0c;因为所有都有个对比&#xff0c;比如登录页一天&#xff0c;商品列表页更简单应该半天就好等等。效率自然就高了。</span></p> <p style="margin-left:0;text-align:left;"><span style="color:#;">当然还经历很多&#xff0c;都是一个大前端团队去接任务&#xff0c;后面慢慢改成分成业务组&#xff0c;当然这些我一个人肯定处理不来&#xff0c;需要总监他们协助。反正很深的感悟就是&#xff0c;这些没有标准答案&#xff0c;也没想像中发发任务&#xff0c;故时间&#xff0c;开分享会这么简单。要因人而异&#xff0c;因地适宜</span></p> <h5 style="margin-left:0pt;text-align:left;"><strong><span style="color:#1a1a1a;">为什么要微前端重构项目</span></strong></h5> <p style="margin-left:0;text-align:left;"><span style="color:#;">因为之前公司好几个后台管理系统&#xff0c;每个管理系统都有相同的功能&#xff0c;这样维护起来费时费力&#xff0c;所以我重新梳理了业务逻辑&#xff0c;使用react/umi搭建项目&#xff0c;利用git </span><span style="color:#;">submodule去维护跨项目之间共同的代码方法。使项目更清晰明了&#xff0c;维护成本大大降低。</span></p> <h5 style="margin-left:0pt;text-align:left;"><strong><span style="color:#1a1a1a;">微前端遇到了什么问题</span></strong></h5> <ol><li style="text-align:left;"><span style="color:#;">图片资源丢失&#xff0c;在子应用部署到服务器后&#xff0c;他的路径是找在基座上面的。所以会丢失&#xff0c;采用&#xff0c;base64&#xff0c;太大就网络图片形式</span></li><li style="text-align:left;"><span style="color:#;">路由跳转&#xff0c;子路由跳子路由&#xff0c;后面做了路由的守卫&#xff0c;统一封装了跳转方法&#xff0c;采用了基座那里存起来的history.push 等等</span></li><li style="text-align:left;"><span style="color:#;">数据的传递&#xff0c;跨modal之间调用。利用window</span></li></ol> <h5 style="margin-left:0pt;text-align:left;"><strong><span style="color:#1a1a1a;">做了哪些亮点&#xff1a;</span></strong></h5> <p style="margin-left:0;text-align:left;"><span style="color:#;">最大得亮点还是在业务梳理&#xff0c;推广微前端这个。遇到</span></p> <ol><li style="text-align:left;"><span style="color:#;">配合git submode 抽离很多带业务的页面&#xff0c;方法&#xff0c;样式等。跟组件不同&#xff0c;他是带有很多业务的&#xff0c;会有请求后端接口的一些逻辑。</span></li><li style="text-align:left;"><span style="color:#;">文档的收集&#xff0c;每周收集便利的&#xff0c;和踩过的坑&#xff0c;有分享会演变而来</span></li></ol> <p style="margin-left:0;text-align:left;"><span style="color:#;">核心原理使用react-dnd这个&#xff0c;然后呢一开始的理想是很丰满的&#xff0c;颗粒度非常小&#xff0c;后面越做阻力越大&#xff0c;比如一些层级&#xff0c;如果用定位的话&#xff0c;不好维护。最后是我们跟产品制定好规则&#xff0c;分两一种&#xff0c;一种是页面模板&#xff0c;一种是组件&#xff0c;比如banner&#xff0c;导航栏&#xff0c;可以选择样式类型&#xff0c;然后自己拼成页面&#xff0c;导出来的是一个数组&#xff0c;如果需要后台会生成对应代码&#xff0c;单独部署&#xff0c;就是先去仓库拉去模板代码。然后利用node-fs编写配置文件。再把整体项目打包出来&#xff0c;或者根据钩子&#xff0c;生成到gitlat上。这种场景多半用于需要单独部署维护的项目&#xff0c;比如是某个客户买了我们产品。需要独立部署</span></p> <h4 style="margin-left:0pt;text-align:left;"><strong><span style="color:#1a1a1a;">工作中最大的瓶颈</span></strong></h4> <p style="margin-left:0;text-align:left;"><span style="color:#;">其实还是需要回到人才还有达成共识上面&#xff0c;我做的每月复盘&#xff0c;都是曲线救国&#xff0c;如果他本人不愿意或者摆烂的&#xff0c;就需要指定好情况&#xff0c;当他当作单一的生产单位。然后怎么让技术部门逆推去推动商务&#xff0c;就是赚钱。</span></p> <p style="margin-left:0;text-align:left;"><span style="color:#;">技术上面的话因为不是开发框架又不是手撕底层原理这种&#xff0c;相对棘手的还是类似指定性能优化这种需要根据业务制定&#xff0c;但市场又没有很完善很开源的产品。这种就比较复杂。</span></p> <p style="margin-left:0;text-align:left;"><span style="color:#;">------答案2适用于非管理------</span></p> <p style="margin-left:0;text-align:left;"><span style="color:#;">我个人执行力还有业务开发是完全没问题的&#xff0c;目前的瓶颈在于怎么把个人的能力扩散到团队中&#xff0c;影响和带动他人&#xff0c;为团队带来更多结果和更高收益。</span></p> <h6 style="margin-left:0pt;text-align:left;"><strong><span style="color:#1a1a1a;">低版本的兼容</span></strong></h6> <p style="margin-left:0;text-align:left;"><span style="color:#;">app: 19还是20年把&#xff0c;setupWebViewJavascriptBridge ios升级&#xff0c;要区分安卓或者ios特殊处理&#xff0c;低版本兼容。</span></p> <p style="margin-left:0;text-align:left;"><span style="color:#;">A标签包裹图片&#xff0c;不用A标签的href跳转&#xff0c;点击事加进行window.location.href跳转没出发</span></p> <h6 style="margin-left:0pt;text-align:left;"><strong><span style="color:#1a1a1a;">前端安全&#xff1a;</span></strong></h6> <p style="margin-left:0;text-align:left;"><span style="color:#;">一般攻击手段有xss,csrf,DDoS.xss现在较少了。一般就行方等严格项目有要求&#xff0c;我们都是用转义方式来避免xss攻击。csrf得话采用token&#xff0c;DDoS是服务器那边得&#xff0c;一般采取ip禁止</span></p> 

讯享网
小讯
上一篇 2025-06-02 22:03
下一篇 2025-05-07 17:02

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/178625.html