http和https的区别? 我知道https更加安全,问题是怎么个安全法? 比如,我现在有一个纯的静态页面,就是做信息展示,就是我们说的marketing site,这里面也没有什么ajax请求啥的,是不是就http/https从安全角度就没有区别了???? 但是浏览器还是标记Http not secure呢?哪里不安全了? 为什么感觉redis队列不如mysql稳定,容易丢数据,原因何在? 目前的开发环境:php7.2 | thinkphp 1.用mysql实现的架构: 生产者:大量数据先存入mysql中间表(mysql中间表用唯一索引约束唯一性) 多个消费者:循环从mysql中间表中取数据,进行计算后存入mysql结果表 2.用redis实现的架构: 生产者:大量数据先进入redis集合(为了保证重复数据不入队列),确定能进入集合的数据再塞入redis队列 多个生产者:循环从redis队列中取数据,每取一条数据后将该数据从redis集合中删除,对数据进行计算,计算后的数据存入mysql结果表 两种架构在实际使用中发现,用纯mysql的方式实现,结果数据很稳定,没有出现丢失的情况。 而用redis的方式实现,会发现存在数据丢失的情况(即结果表里缺少数据),而且还找不到数据丢失的原因,trycatch和redis日志均无问题。用redis集合加redis队列作为中间过度的方式为什么会不稳定?原因在哪里? JS 中通过apply实现数组中,查找最大值的方法原理是什么? JS数组中无法直接通过`Math.max`查找数组中元素的最大值,但可以通过`apply`方法实现,底层实现逻辑及原理是什么样的呢? ``` Math.max.apply(null, [1,2,3]); ``` 为什么mysql的依赖scope是runtime? 如题,runtime意味着打包时不包含mysql依赖,没有mysql驱动发布后的项目如何正常连接数据库呢? chrome控制台调试:f9 和 f11 有何区别? f10(跳过下一个函数调用)、f11(进入下一个函数调用)用的很熟,但f9(单步调试)没用过,经过测试感觉和f11一样,遇到函数就进入函数里边执行。那么f9 和 f11 有何区别? 函数传入的值,作为对象的 key 返回,TS 应该如何写? 返回的 `ts` 一定有 `a` 这个 `key`: ``` function test(a:string, b:object){ return { [a]:b[a] } } ``` 如果一次网页操作本身就只会触发一次回流/重绘,那么虚拟 dom 还有优势吗? 按照我目前的理解,虚拟dom的优势在于把当前的变化打包给浏览器,让浏览器一次性更新,而不是来一个更新一个,减少页面的回流和重绘. 但是如果只有一个按钮, 点一下文字变色或者改变某个元素的显隐性,那么这种操作浏览器应该本身就是只回流/重绘一次,这个时候虚拟dom还有优势吗? #### 还有个小问题: 默认浏览器是怎么更新元素的? 如果我一次 display:none 了页面中的9个元素,那么在没有虚拟dom的情况下,浏览器会回流/重绘9次吗 来个 js 算法大牛看看这个题,有没有优雅点的代码? `源数据` ``` const data = [ { city:'浙江', children:[ { city:'宁波', children:[{ city:'鄞州区', children:[] },{ city:'江北区', children:[] }] }, { city:'杭州', children:[{ city:'富阳', children:[] },{ city:'上城区', children:[] }] } ] }, { city:'上海', children:[ { city:'黄浦区', children:[] } ] } ] ``` `目标结构` ``` [ "浙江,宁波,鄞州区", "浙江,宁波,江北区", "浙江,杭州,富阳", "浙江,杭州,上城区", "上海,黄浦区" ] ``` 怎么让 a == 1 && a==2 && a==3 的结果为 true? 让 a == 1 && a==2 && a==3 的结果为 true js 函数 return false 跳出外部函数,怎么写? ``` function a(){ if(true) return false; } ``` 这是没有任何问题的,如果我改成这种 ``` function Test(){ a(); b(); c(); } ``` js 函数a() return false 跳出外部函数Test(),怎么写? 判断一个字符串,A-Z对应输出0-25,a-z对应输出26-51,有什么简洁的写法吗? 比如:'AZaz' => '0 25 26 51' 我目前的做法: ``` function Words(words){ let strArray = [] for (let s of words){ if(/[A-Z]/.test(s)) strArray.push(s.charCodeAt(0)-65) else if(/[a-z]/.test(s)) strArray.push(s.charCodeAt(0)-71) } return(strArray.join(' ')) } Words('AZaz') ``` 来个 js 大牛,如何简洁的处理这种数组转换成对象? 有这样一个 Array, `[{key:xxx},{value:xxx}]` `key` `value`是固定的属性 ``` [ {key:'alan',value:12}, {key:'mike',value:18} ] ``` 期望值 ``` {alan:12,mike:18} ``` 希望不借助新的变量,简洁优雅一些~ Vue如何动态修改template? 先上代码: ``` ``` 我在使用vue做一个工具,需要输入框中的markdown代码转为html,然后展示出来。 其中我想做的一个功能是,当用户输入: ``` ![pic](www.example.com/img.jpg "title") ``` 使用marked的自定义渲染函数,转换成html(已经实现): ``` title' ``` 现在的问题是,在展示的时候,使用v-html无法完成函数绑定。有没有好的方法? 简洁的说法是,我需要自己生成一段vue格式的html字符串,然后将这个字符串渲染出来,里面有各种vue指令需要绑定,该怎么做呢? 怎么判断一个数组里是否嵌套子数组 我怎么判断一个数组是不是双层呢,判断后返回true和false,比如[1,1,1,1]就是false,[1,[2,2,2],1,1,1]就是true,有啥方法么,如果是三层,怎么判断呢 Mysql 为什么要有最左前缀的要求,优化器不能自己优化调整顺序吗 比如一个联合索引 `index('user_id', 'created_at')` ,我写了下面的 `SQL` 语句 ``` select * from tweet where created_at < '2021-11-11' and user_id = 1 ``` 优化器会把上面的语句优化为下面的语句吗? ``` select * from tweet where user_id = 1 and created_at < '2021-11-11' ``` 请问大家,这个小算法问题,怎么改? [ ``` { "categoryId": "373", "parentId": "3", "categoryName": "张三", "sunCategorys": [ { "categoryId": "374", "parentId": "373", "categoryName": "张三一", }, { "categoryId": "375", "parentId": "373", "categoryName": "张三二", } ] }, { "categoryId": "374", "parentId": "3", "categoryName": "李四", "sunCategorys": [ { "categoryId": "375", "parentId": "374", "categoryName": "李四一", }, { "categoryId": "376", "parentId": "374", "categoryName": "李四二", } ] } ``` ] 我想把上面数据的categoryName 和 sunCategorys里面的categoryName,categoryId的id的值取出来,组合成这样的形式,请问应该如何去写 [ ``` { "text": "张三", "children": [ { "text": "张三一", "id": 374 }, { "text": "张三二", "id": 375 } ] }, { "text": "李四", "children": [ { "text": "李四一", "id": 375 }, { "text": "李四二", "id": 376 } ] } ``` ] vue的nextTick为什么一定会比promise更先执行? nextTick内部打比按照promise进行,那么是怎么做到比逻辑中的promise更早执行的?看源码写的是Promise.resolve().then(callback)执行回调代码callback ``` if (typeof Promise !== 'undefined' && isNative(Promise)) { const p = Promise.resolve() timerFunc = () => { p.then(flushCallbacks) // In problematic UIWebViews, Promise.then doesn't completely break, but // it can get stuck in a weird state where callbacks are pushed into the // microtask queue but the queue isn't being flushed, until the browser // needs to do some other work, e.g. handle a timer. Therefore we can // "force" the microtask queue to be flushed by adding an empty timer. if (isIOS) setTimeout(noop) } isUsingMicroTask = true } ``` 在 JavaScript 中,如何实现 const a = [...5] 就可以创建一个 [1, 2, 3, 4, 5] 数组 如何实现在编写 JavaScript 项目时,可以以下面这样的方式,创建一个新的数组: ``` const a = [...5]; // a = [1, 2, 3, 4, 5]; ``` 请问 prettier 与 EditorConfig 功能是不是重复了? prettier 与 EditorConfig 都是代码格式化工具,他们到底有什么区别?我只知道他们的配置文件不同,一个是.prettierrc文件,而另外一个是.editorconfig文件,但感觉他们功能一样,在网上看别人教程,为何都是两个一起使用的?不是功能重复了吗?求解答? 请求返回的是 字符串 格式的 js代码,我要怎么 import 到内部的 模块呢 手动@大佬回答 @边城 如题 后端接口返回给我的是 字符串格式的 ``` var a = 1 function setA(v){ a = v } export function getA(){ return a } ``` 我要怎么 `import` 到内部的 `getA` 模块呢 使用的 `vue` vue怎么监听数组项? 如下数组,其中ccc属性值根据bbb属性和ddd属性计算得到的,我需要监听数据项的变化,动态计算ccc属性值 ``` export default { data() { return { aaa: [{ bbb: "xxx", ddd: "xxx", ccc: "" }, { bbb: "yyy", ddd: "yyy", ccc: "" }] } } } ``` 于是我使用了watch监听 ``` watch: { aaa: { deep: true, handler(newValue, oldValue) { for (let i = 0; i < newValue.length; i++) { newValue[i].ccc = newValue[i].bbb + newValue[i].ddd; } } } } ``` 这种方法会导致每个数据项的变动,需要所有数据项都计算一次,有没有什么好的方式? 而且,还有个问题,监听数组并没法获取到旧值,也就是newValue和oldValue是一模一样的,都是新的值。 这个问题主要是讨论性能问题,比如每个数组有100个属性项,又或者ccc是通过耗性能的计算得到的,那么每次数据项的变动都导致所有数据项重新计算一次,这耗费的性能不可想象,所以大家可以想一下,看有没有好的实现方案?? 实现目标是只对变动的数据项进行计算 JS的onclick在Chrome和Safari中均不能被触发 写了一段很简单的源码,就是最基本的使用 ``` JS 源码如下: ``` var btn = document.getElementsByTagName("button") btn.onclick = function () { alert("Successfully Triggered an Event !"); console.log("Good"); } ``` 在浏览器中解析后,调试时发现 btn 中选择到了