当前位置: 首页 > Linux

每日问题每周-全栈面试总结-Issue2

时间:2023-04-06 23:32:15 Linux

勤奋学习,就像春天里发芽的幼苗。我在github上新建了一个仓库,每天问,每天至少问一个问题。对于full-stack、graphql、devops、微服务和软技能,促进职业发展,欢迎交流。以诸葛武侯箴言勉励夫君同行,静以修身,俭以养德。没有淡泊就没有志向,没有宁静就没有距离。夫须静学,才学必学。不学则不能广才,无志则不能学。懒惰和缓慢不能激发能量,进取不能治愈性欲。岁月随时光流逝,意随日去,而后枯萎,与世隔绝,黯然呆在寒舍中,又将何去何从!【Q037】linux有哪些发行版,你喜欢哪一个?原文链接?一个release版本...[Q036]http状态码中的301、302、307有什么区别?永久重定向,这个操作是危险的,需要小心操作:如果你设置了301,但是过了一段时间想取消,但是浏览器中已经有缓存了,还是会被重定向。302,喷泉。临时重定向,但是重定向的时候会改变方法:把POST改成GET,所以就有了307307,TemporaryRedirect。临时重定向,重定向时不会改变方法[Q035]常见的http状态码原文链接有哪些,欢迎讨论:[Q035]常见的http状态码有哪些[Q034]如何实现一个loading动画原文链接,欢迎讨论:【Q034】如何实现一个加载动画【Q033】如何限制界面的流量】链接原文,欢迎讨论:【Q033】一般如何限制界面的流量使用漏桶算法:漏桶最初是空的,API调用是在向漏桶中注水漏桶会以一定的速度出水。当水满时,API拒绝调用。可以使用redis的计数器来实现,计数器最初是空的。API调用计数器增加并设置计数器的过期时间。它会按一定的速率清零,按一定的速率会被视为流水计数器。当达到上限时,呼叫被拒绝。当然,这只是一个大概的想法。这时候就会有两个问题需要注意。最坏情况下的电流限制是额定电流限制率的两倍。条件竞争问题。不过在实际实现中注意以下几点还是不错的(一般来说都是用现有的三方库来限流的。。。),可以参考我之前的文章https://shanyue.tech/post/rat...[Q032]js中什么是softbind,如何实现原文链接,欢迎讨论:[Q032]js中softbind是什么,如何实现[Q031]如何实现在js中绑定你不会在Function.prototype.fakeBind=function(obj){return(...args)=>this.apply(obj,args)}Testfunctionf(arg){console.log(this.a,arg)}//输出:3,4f.bind({a:3})(4)//输出:3,4f.fakeBind({a:3})(4)【Q030】如何在linux中打印所有网络接口原文链接,欢迎讨论:[Q030]如何在linuxifconfig中打印所有网络接口ifconfig最简单最常用,但是打印信息太多$ifconfignetstatnetstat和ip也很有用,特别是他们还可以打印路由表$netstat-iip$iplink$ipaddr【Q029】websocket如何向特定用户群推送消息?在redis维护一个对象,记录每个组对应的connections/sockets{'Class:201901':[student1Socket,student2Socket]}当客户端刚连接到服务器时,它会加入一个特定的组,或者房间,比如student01,刚开始连接服务器,可能要加入房间:学生:01,班级:201901,组:10086[Q028]如何获取登录用户【Q028】如何获取Linux登录用户$who$last【Q027】前端开发中,如何获取浏览器的唯一标识fingerprintjs2【Q026】如何接口进行一个压力测试【Q025】简述socket建立过程一图胜千言[Q024]在postgres中如何格式化jsonb数据使用jsonb_pretty函数,例子如下>selectjsonb_pretty('{"a":{"b":4}}'::jsonb)+----------------+|jsonb_pretty||----------------||{||“一个”:{||“b”:4||}||}|+----------------+SELECT1Time:0.018s[Q023]多节点部署websocket服务会出现什么问题,如何解决【Q022】如何实现一个简单的Promise一个简单的PromisePromise的粗略实现,重点是pending时,thenable函数由一个队列维护。当状态变为已解决(已完成)时,将执行队列中所有可用的函数。resolve时直接执行thenable函数。被拒绝的状态同classProm{staticresolve(value){if(value&&value.then){returnvalue}returnnewProm(resolve=>resolve(value))}constructor(fn){this.value=undefinedthis.reason=undefinedthis.status='PENDING'//维护一个resolve/pending函数队列this.resolveFns=[]this.rejectFns=[]constresolve=(value)=>{//注意这里的setTimeoutsetTimeout(()=>{this.status='RESOLVED'this.value=valuethis.resolveFns.forEach(({fn,resolve:res,reject:rej})=>res(fn(value)))})}constreject=(e)=>{setTimeout(()=>{this.status='REJECTED'this.reason=ethis.rejectFns.forEach(({fn,resolve:res,reject:rej})=>rej(fn(e)))})}fn(resolve,reject)}then(fn){if(this.status==='RESOLVED'){constresult=fn(this.value)//必需ReturnaPromise//如果状态为resolved,直接执行returnProm.resolve(result)}if(this.status==='PENDING'){//同样返回一个PromisereturnnewProm((resolve,reject)=>{//在推送队列中,this.resolveFns.push({fn,resolve,reject})})}}catch(fn){if(this.status==='REJECTED'){constresult=fn(this.value)returnProm.resolve(result)}if(this.status==='PENDING'){returnnewProm((resolve,reject)=>{this.rejectFns.push({fn,resolve,reject})})}}}Prom.resolve(10).then(o=>o*10).then(o=>o+10).then(o=>{console.log(o)})returnnewProm((resolve,reject)=>reject('Error')).catch(e=>{console.log('Error',e)})[Q021]React中cloneElement和createElement是什么,有什么区别?第一个参数不一样,直接上APIReact.cloneElement(element,[props],[...children])React.createElement(type,[props],[...children])[Q020]如何实现分布式锁【Q019】如何实现选中复制功能一般可以使用第三方库clipboard.js来实现。源代码非常简单。你可以阅读它。主要有两点。SelectionAPI选择的代码如下选择.toString();未选中代码如下window.getSelection().removeAllRanges();有现成的第三方库可以使用:select.js复制比较简单,execCommanddocument.exec('copy')我是山月,一个喜欢跑步爬山的程序员。我会定期在我的个人公众号分享全栈文章。如果你有全栈面试、前端工程、graphql、devops,如果你对个人服务器运维和微服务感兴趣,可以关注我