JetBrains申请学生认证
申请JetBrains学生认证有什么作用?申请学生认证后即可获得JetBrains 出品的所有开发者工具的免费访问权限!包括但不限于Idea、Pycharm等等
为什么要申请JetBrains学生认证?JetBrains正版软件价格昂贵,一般情况下使用只能通过破解的方式,然而破解也并不是一劳永逸,有时候会出现掉注册、不稳定的情况。JetBrains学生认证后,只需一个账号即可登录所有旗下开发者工具,还能享受最新的补丁更新,且在大学期间可以一直使用,可谓是香得不能再香。
如何进行JetBrains学生认证?
打开JetBrains学生认证官网
学生认证链接
选择[适用于学生和教师],点击立即申请
填写基本信息,记住邮箱要填写我们学校的学生邮箱(edu.cn结尾)
前往学生邮箱验证邮件
接下来前往学校的邮箱系统验证邮件,如果进去发现收件箱里没有邮件,那是因为被拦截了,因此要到垃圾邮箱里去找。 验证成功之后如下
通过链接跳转到官网去注册账号
再次去学生邮箱验证邮件,然后就注册成功!
若注册/验证失败可能学校邮箱被屏蔽
for循环里的异步操作
这周遇到的问题也不少,选一个比较有代表性的出来讲一下,需求是这样的,有一个地方需要循环调用接口来获取数据,一开始我就理所当然地用for循环,两三下就写完了,但当我开始测试的时候就发现不太对劲,获取到的数据出现重复,通过查看后端控制台,发现有几次请求的参数竟然是相同的。
这时候我注意到异步操作在for循环里使用或许会导致程序出现错误,百度了一下,确实如我所想:单线程的js在操作时,对于这种异步操作,会先进行一次“保存”,即把异步操作放到堆栈中,等所有的同步任务执行完成之后才会执行。说白了就是,for大哥并不会停下来等异步兄弟做完他的事情再进行下个循环,这就导致for大哥都跑完循环了,异步兄弟才来找他要值,结果就是拿到了循环结束后的值…
那怎样解决这个问题呢?1、使用递归,将递归的下级入口放在异步操作里,这样子异步操作完才会进入下一层递归。2、使用async、await,在异步操作前加一个await,这就很好理解了,把异步操作变成同步操作,整个代码的易读性也比使用第一种方式要好很多。
这次我明白了原来js里没有真正的异步,因为JavaScript的一大特点就 ...
什么叫四象限法则
我们在工作中难免会碰到各种琐碎、杂乱的事情纠缠在一起,若不懂得按轻重缓急处理事情,这些繁杂的工作就会使你焦头烂额,不但耗费时间和精力,还没有完成重要的工作,导致工作效率低下。著名管理学家史蒂芬·柯维提出的一个时间管理理论,即四象限法则。
按照该法则,我们每天面对的复杂的事务,均可按照重要和紧急两个不同的程度进行衡量,基本上可以将事务分为四个象限:重要又紧急、重要但不紧急、紧急但不重要、不紧急也不重要。
1、第一象限是重要且紧急。
重要且紧急的事情立即去做,因为我们工作中的主要压力来自于第一象限,我们生活中的主要危机也来自于第一象限。它表现为重大项目的谈判,重要的会议工作等。
2、第二象限是重要但不紧急。
重要但不紧急的事情包括编写公司下季度的工作计划、制定家庭的投资理财策略、参加课程培训等等。但是需要注意的是,这些事情虽然看起来不紧急,但如果置之不理,就会发展成重要而且紧急的事情。
3、第三象限是紧急但不重要。
这些事情很紧急但并不重要,因此这一象限的事件具有很大的欺骗性。很多人认识上有误区,认为紧急的事情都显得重要,实际上,像无谓的电话、附和别人期望的事、打麻将三缺一等事件都并不重 ...
回调地狱
这周学到一个新的词,叫做callback hell,中文名:回调地狱。说到回调,首先想到就是js里经常会用到的大量异步回调,其中例如使用axios请求,或者setTimeout的函数。通常情况下回调函数的写法就是在将一个函数作为参数传递给另个函数,可是当回调的次数多了,这就会导致有多层嵌套,代码看起来很混乱,这就是回调地狱。
如何解决回调地狱呢?我经常用的是ES6中的Promise,中文翻译过来是承诺,就是承诺了你会在未来某一个时间点返回数据给你。Promise写法获取数据可以用then,当我调用完一个接口后,在后面加上.then(),括号里写下回调函数,这样子代码逻辑看起来也比较明了。
但是.then依旧不是最完美的方法,我发现当我请求完一个接口,还要接着请求的时候,又得继续在里面写下一层then,作为一个完美主义者来说这样看起来有点不舒服,于是我就请出了ES7新增的async/await(异步/等待)
多么贴切的名字!以后对于Promise对象,不用再在屁股后面跟上then了,直接在前面加个await,意 ...
简单学一下Vuex
众所周知在vue中,组件之间传递数据需要一步一步接着传递,这样写起来很麻烦,也会使代码晦涩难懂。因此,vuex诞生了!
vuex is what?Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
说白了,vuex就是一个仓库,用来存储状态(也就是数据),这些状态可以在不同组件中很方便地获取到。
vuex的使用目录先来看vuex的目录基本结构。先建一个store文件夹,文件夹下有两个主要的文件(夹),一个是index.js,一个是modules文件夹。
index.js:vuex的入口,用于注册module,常规的写法通常将store分成几个模块(module),再在入口文件里统一注册
modules:每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块
123456const moduleA = { state: () => ({ ... }), mutations: { ... ...
踩坑记录(三)
上周解决了一个对象的拷贝问题,这周本来可以开开心心地继续写了,没想到上周解决的bug又生出了一个新的bug!!
困扰了我五一假期后的三四天,具体是从一个组件的显示错误开始,我按照问题反反复复看了几遍,都没有看出来我写的代码问题在哪里,但是他就是不显示出来,到最后实在没办法了,我打算求助公司的技术人员。
当我把代码发给技术人员的时候,她给我的反馈就像是看了一份晦涩难懂的代码(捂脸),第二天给我答复:“我不知道你为什么要写这么复杂”,“明明可以很简单的写,你写这么复杂[捂脸]”,“你这个问题,我昨晚看了一晚,也没找出问题”….
好吧,不仅有bug,而且我的代码规范也严重不达标,这方面我还得继续加强一下。当我准备放弃的时候,一个不起眼的地方引起了我的注意,这是一个warning:Failed to mount component: template or render function not defined.
令人百思不得其解的是,如果不强制路由,直接使用组件,页面却可以正确显示,为什么这里会提示“ ...
踩坑记录(二)
起因折腾了几天,客户的需求终于敲定下来了,今天高高兴兴地在撸代码(Bug),突然遇到一个奇怪的问题,自从考试后已经很久没撸代码了,遇到这个问题还一时摸不着头脑
具体是这样的:
需求是要根据我所处的不同menu来获取对应的导航bar,我查了半天决定用动态路由来解决这个需求,做法是事先定义好一张路由表,再从后端传来的值从路由表里找对应的路由进行渲染。于是就先写了路由表和这么一个方法:
然后再调用,因为有多个菜单,每个菜单可能含有相同的bar,为了避免组件名重复,又多加了一句:
123let data = findRouterMap(topBar.name)data.name = data.name + "_" + name // 避免组件名重复router.push(...[data]); // 将data(变为数组)添加到router里边
诶,写完心情还美滋滋,准备运行测试的时候,问题就出现了QAQ
发展仔细看这个报错,发现是data.name = data.name + "_" + name 这句的位置报错了,console.log(dat ...
Js数组拼接、判断包含字符串
JavaScript中两个数组的拼接方法一:使用for循环12345678var arr = ['tom', 'jerry'];var arr2 = [1, 2];for(var i=0; i<arr2.length; i++){ arr.push(arr2[i])}console.log(arr);// ['tom', 'jerry', 1, 2]
方法二:使用concat()注意concat()方法生成了一个新的数组,并不改变原来的数组。
123456var arr = ['tom', 'jerry'];var arr2 = [1, 2];var newArr = arr.concat(arr2);console.log(newArr);// ["tom", "jerry", 1, 2]
方法三: 使用apply劫持数组的push方法123456var arr = ['tom& ...
async与await
async作为一个关键字放在函数的前面,表示该函数是一个异步函数,意味着该函数的执行不会阻塞后面代码的执行 异步函数的调用跟普通函数一样。
异步函数返回的是一个Promise对象
123456789async function timeout(){ return "helloworld";}console.log(timeout()); // Promise { 'helloworld' }timeout().then((result)=>{ console.log(result); // helloworld});
async的内部实现原理就是:如果该函数中有一个返回值,当调用该函数时,默认会在内部调用Promise.solve() 方法把它转化成一个Promise 对象作为返回,若函数内部抛出错误,则调用Promise.reject()返回一个Promise 对象
await
await即等待,用于等待一个Promise对象。它只能在异步函数 async f ...
Vue vm.$attrs使用场景详解
场景介绍vue中一个比较令人烦恼的事情是属性只能从父组件传递给子组件。这也就意味着当你想向嵌套层级比较深组件数据传递,只能由父组件传递给子组件,子组件再传递给孙子组件…像下面这样:
12345678<parent-component :passdown="passdown"> // 父组件<child-component :passdown="passdown"> // 子组件<grand-child-component :passdown="passdown"> // 孙子组件....
就这样一层一层的往下传递passdown这个变量,最后才能用。
vm.$attrs这时候出现了vm.$attrs,好家伙,直接起飞。$attrs可以让孙子组件获取到父组件传给子组件但子组件没有用到的属性。
示例:
123456789101112131415161718192021222324252627282930<template> <div class="home&quo ...