axios
源码阅读了一番。照着axios
的文档进行阅读,事半功倍。一边看源码,一边又顺着把AJAX
和XMLHttpRequest
看了一遍,以下是我的收获。
由于
XMLHttpRequest
很长,我们一般将其简称为XHR
,下面我将会使用简称进行书写。
在写详细的文章之前,可能很多同学不是很清楚axios
和ajax
的区别(清楚的同学可略过~🤪),下面我们来简单讨论一下。
AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。
AJAX 不是新的编程语言,而是一种使用现有标准的新方法。
AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。
从本质上来讲,AJAX是一种技术的简称,使用它的目的就是要在不加载整个页面的情况下修改页面中某一部分的数据。
而axios
则是对这种技术的一种封装,将其不够好的地方加以改进,也更适合现代前端(MVVM架构)的使用场景。
之前看到过一个比喻:AJAX
是飞机,axios
是波音747。相信大家到现在应该能很好地理解两者之间的关系了。
Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。
它有以下特点:(摘自axios官方文档)
通过axios
的文档,我们可以知道,它内部也是通过XHR
进行http
请求的。所以这也就更好地印证了axios
隶属于ajax
。前者是后者更好地一种实现和封装。
那么我们不禁要问,为什么会有axios
,它的出现解决了什么问题?以下我们挨个分析。
一说到回调,我们应该会想到两个东西:callback
和Promise
。
相信在2017年左右参加工作的前端同学,可能对回调地狱这一情况不是特别了解,我也是了解了“前端历史”这一课之后,并亲自写了几个demo才深刻了解到这个。
在 Promise 为出现之前,我们用回调函数来编写异步程序,来满足日常开发的异步需求。随着前端的发展,代码的日益增多,逻辑逐渐复杂,大量使用回调函数的代码,让程序员开始头疼。代码可读性低、维护困难、大量前台回调函数,看的程序员是直接怀疑人生。
为了解决工程师们面临的这个问题,Promise 诞生了。它提供了一些 API,让工程师们可以用一种新的方式来编写异步程序。通过 then 方法来写异步程序执行成功后执行的代码,用 catch 方法来捕捉异常,而且可以链式调用。 函数地狱和回调函数造成的程序可读性差的问题,被解决了,小伙伴们又可以快乐的编程了。
而axios
的一个特点就是支持 Promise API,这让我们不用再使用回调函数去获取接口中返回的数据。尤其是在多个异步请求同时使用时尤其方便。
XMLHttpRequest 是 AJAX 的基础。
使用AJAX
无非就是下面几步:
XHR
对象1 | var xmlhttp = new XMLHttpRequest(); |
1 | xmlhttp.open("GET","http://demo.com/test",true); |
xmlhttp.open()
有3个参数:
参数 | 解释 | 类型 | 值 |
---|---|---|---|
method | 请求的类型 | String | get/post/put等 |
url | 请求的路径 | String | 无 |
async | 请求是否异步 | Boolean | true(异步)/false(同步) |
与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。
然而,在以下情况中,请使用 POST 请求:
xmlhttp.send()
有一个参数,只在post请求时使用。如下:
1 | xmlhttp.open("POST","http://demo.com/test",true); |
setRequestHeader()
用于设置请求头信息。send()
方法中的参数为传递给服务器的请求参数。
要想获取服务器端的响应,我们需要监听onreadystatechange
事件
每当 readyState
改变时,就会触发 onreadystatechange
事件。readyState
属性存有 XMLHttpRequest
的状态信息。
下面是 XMLHttpRequest
对象的三个重要的属性:
属性 | 描述 |
---|---|
onreadystatechange | 存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。 |
readyState | 0: 请求未初始化 1: 服务器连接已建立 2: 请求已接收 3: 请求处理中 4: 请求已完成,且响应已就绪 |
status | 200: “OK” 404: 未找到页面 |
在 onreadystatechange
事件中,我们规定当服务器响应已做好被处理的准备时所执行的任务。
当 readyState
等于 4 且status
为 200 时,表示响应已就绪:
1 | xmlhttp.onreadystatechange=function(){ |
如果存在多个 AJAX 任务,我们可以创建 XMLHttpRequest
对象编写一个标准的函数,并为每个 AJAX 任务调用该函数。
通用的AJAX函数
1 | function xhrRequest(method, url, callback) { |
具体的业务接口
1 | function myFunction2(){ |
虽然axios
使用了很久了,但是一直没有往深里研究。今天也算是简单了解一下其原理,顺便把它用到的XHR
也复习一遍。
打开手机后,看了各路大神各抒己见,于是自己也找了找资料,以下是自己的总结和各路大神的回答。
以下均摘自MDN
async函数是使用
async
关键字声明的函数。 async函数是AsyncFunction
构造函数的实例, 并且其中允许使用await
关键字。async
和await
关键字让我们可以用一种更简洁的方式写出基于Promise
的异步行为,而无需刻意地链式调用promise
。
async函数可能包含0个或者多个
await
表达式。await表达式会暂停整个async函数的执行进程并出让其控制权,只有当其等待的基于promise的异步操作被兑现或被拒绝之后才会恢复进程。promise的解决值会被当作该await表达式的返回值。使用async
/await
关键字就可以在异步代码中使用普通的try
/catch
代码块。
await
关键字只在async函数内有效。如果你在async函数体之外使用它,就会抛出语法错误SyntaxError
。
async
/await
的目的为了简化使用基于promise的API时所需的语法。async
/await
的行为就好像搭配使用了生成器和promise。
async函数一定会返回一个promise对象。如果一个async函数的返回值看起来不是promise,那么它将会被隐式地包装在一个promise中。
promise
的精髓是状态的传递,方法的封装者并不需要关心异步方法的执行结果,方法的封装者通过状态传递拿到执行结果书写自己的逻辑,使得封装者与使用者的真正解耦。这种状态传递有种发布订阅的味道,回调地狱并非书写上的地狱而诟病,promise 的链式调用也会有地狱之感,而回调地狱真正为之诟病的是没有真正解耦。async 是 promise 的语法糖。
在 Promise 为出现之前,我们用回调函数来编写异步程序,来满足日常开发的异步需求。随着前端的发展,代码的日益增多,逻辑逐渐复杂,大量使用回调函数的代码,让程序员开始头疼。代码可读性低、维护困难、大量前台回调函数,看的程序员是直接怀疑人生。
为了解决工程师们面临的这个问题,Promise 诞生了。它提供了一些 API,让工程师们可以用一种新的方式来编写异步程序。通过 then 方法来写异步程序执行成功后执行的代码,用 catch 方法来捕捉异常,而且可以链式调用。 函数地狱和回调函数造成的程序可读性差的问题,被解决了,小伙伴们又可以快乐的编程了。
等等,似乎还有个问题没有被解决。在使用 Promise 的时候,可能会一个 Promise 中有多个 Promise。如果是多个独立的 Promise,可以用 Promise. all 来解决,但是它们之间如果彼此之间有依赖关系,需要有特定的执行顺序,这个时候 Promise 就无法解决了。 Promise 也遇到问题了,怎么办,该怎么解决呢?
就在工程师们发愁的时候,Async/Await“脚踏七彩祥云”出现在了工程师面前,说到:“你的问题我来解决”。 Async/Await 允许异步程序用同步的方式执行,这样两个异步且有依赖关系的程序不仅可以按照先后顺序执行,而且对于其它同步程序来说,它仍然是异步的,不会阻塞主线程。 就这样 Promise 产生的问题,被 Async/Await 解决了,工程师们终于可以放心大胆的去写程序了。
最后说一下,Async/Await 是在 Promise 的基础上实现的,它的返回值仍然是一个 Promise,所以工程师们仍然可以链式的使用 then 或 catch 等 API。
Promise
和 async-await
都是优化异步编程体验的解决方案。Promise
是应用层的解决方案,它有一个规范,不同的语言也可以实现,它只能异步的处理错误,在js
里它本质上是一个对象。
async-await
是语言层的解决方案,它可以说是 Promise
的补充,可以让用户像编写同步代码一样编写异步代码,通过try-catch
可以同步地处理错误。
Promise
更多应用在函数封装中,async
用在函数的使用中。Promise
链式调用相当于一个新的回调地狱, 也不能统一处理异常。 Promise
本身是同步函数,多个不会等待。async-await
用同步的写法使得可读性更强,同时方便 try-catch
捕获异常, async-await
有明确的前后关系,可读性好。我们先写一个全局组件,以供使用。
1 | // now-time.vue |
对全局组件进行注册。在此我们有两种注册方式。
以下代码均写在
main.js
中
1 | // main.js |
注册过后,即可在任意页面直接使用
1 | <!-- 任意页面.vue --> |
我们需要在NowTime
文件夹下新建一个index.js
文件,文件目录如下:
1 | // index.js |
然后在main.js
文件中进行注册
1 | // main.js |
注册完成即可在任意页面使用了。
可能有的同学会问,这第二种注册方式看起来比第一种繁琐多了,还得写一个index.js
,为什么要用这种呢?
接下来我们说说这第二种注册方式的优点:它可以在注册组件的时候,给组件传入一些通用的属性。例如:字体大小、颜色等。具体看如下代码:
我们在组件中设置字体颜色,颜色来源为this.$NOWTIME.color
1 | // now-time.vue |
在index.js
中的install()
方法的第一个参数为Vue
实例,第二个参数为我们在注册时传入的参数。在此处是一个对象,我们可在该对象中设置一些具体的属性。
1 | // index.js |
在main.js
中注册组件,在Vue.use()
方法中传入参数,此处传入color: 'blue'
,组件的字体颜色即为blue
1 | // main.js |
记住全局注册的行为必须在根 Vue 实例 (通过
new Vue
) 创建之前发生
]]>全局注册往往是不够理想的。比如,如果你使用一个像 webpack 这样的构建系统,全局注册所有的组件意味着即便你已经不再使用一个组件了,它仍然会被包含在你最终的构建结果中。这造成了用户下载的 JavaScript 的无谓的增加。
我们首先定义一个promise
方法
1 | function setName(newName) { |
第一次调用,给到参数为“Tom”,promise
异常对调,进入reject
回调中,在catch
中接收回调。
1 | setName('Tom').then(res => { |
第二次调用,给到参数为“jack”,promise
正常对调,进入resolve
回调中,在then
中接收回调。
1 | setName('jack').then(res => { |
async函数是使用
async
关键字声明的函数。 async函数是AsyncFunction
构造函数的实例, 并且其中允许使用await
关键字。async
和await
关键字让我们可以用一种更简洁的方式写出基于Promise
的异步行为,而无需刻意地链式调用promise
。
任意一个名称都是有意义的,先从字面意思来理解。async
是“异步”的简写,而 await
可以认为是 async wait
的简写。所以应该很好理解 async
用于申明一个 function 是异步的,而 await
用于等待一个异步方法执行完成。
await
只能出现在 async
函数中
我们还是以上面的例子做一个演示:
还是定义一个promise
方法
1 | function setName(newName) { |
我们再定义一个带有async
的方法,在该方法中调用setName('jack')
,结果按照我们预料到的一样运行。
1 | async function getName() { |
第二次调用,我们将setName('tom')
的参数换成'tom'
。
1 | async function getName() { |
我们发现,控制台报错了。原因是在第二次调用时,我们给的参数是'tom'
, 这让 promise
函数进入了reject
回调中。
但问题是,我们已经在reject回调中做了异常的处理,为什么还会在控制台上报错呢。
其实我们需要在async
函数中使用try-catch
来捕获异常,如下:
1 | async function getName() { |
我们在try
中执行正常回调的代码,如果有异常发生,则在catch
中捕获异常,做异常处理。
展开操作符可用于对象或数组,示例:
1 | var tom = { |
如果两个对象中有重复的key值,结果是如何呢?
1 | var tom = { |
1 | var tom = { |
从上面的例子中可以看到,后面的key值会覆盖前面的key值。
1 | var arr = [1,2,3,4,5] |
1 | function sum(a, b, ...c) { |
如上所示,参数c
是由剩余参数组成的一个数组。
常用在拼接字符串时。使用${}
将数据包裹,使用`来包裹整个字符串。
1 | const name = 'jack' |
1 | const name = 'jack' |
1 | const name = 'jack' |
1 | var userInfo = { |
在需要获取嵌套的对象数据时,可以这样获取:let { school: { schoolName, grade } } = userInfo
1 | const arr = [1, 2, 3, 4, 5] |
如果我们想间隔取值,可以使用, ,
来获取。也可以使用上面说到的【剩余参数】来获取剩余的数组。
注意:此处的剩余参数需写到最后。
以上几个特性,是我在开发过程中时常会用到的,每个新特性在使用中都会给予我巨大的快乐。不论是写法得简便,还是逻辑得清晰。都让我的开发效率得到了巨大的提升。所以,用起来吧!✊✊✊
]]>先简单描述一下我遇到的问题:
steam账号被盗,由于没有及时发现,导致其中的PUBG,也就是吃鸡游戏被官方封禁。
我的steam账号在2019年年底其实就被盗了,但是由于工作很忙,一直想不起来要去找回账号,于是就拖到了现在。
我在steam上买过两款游戏,一个是《GTA5》当时买的时候打折,¥76入手的。另一个就是《PUBG》了,¥98买入。
我也是找回steam账号,重新登录之后才发现《PUBG》被封了。
废话说完,下面开始介绍找回两个账号的历程。
我们先来找回steam账号。
操作完以上截图的过程后,会建立一个steam客服案件。steam会根据你所描述的问题给予相应的帮助。客服的反应还是很快的,当天就回了邮件。邮件当中有一个连接,点击之后就会跳转到浏览器上并打开该客服案件的详情。你需要按照客服所要求的提供相应的证明。如:购买游戏的付款记录等。以下是我给客服上传支付证明的截图。
此处需要注意一下,由于我当时买游戏时用的是支付宝进行的支付,所以消费证明也是在支付宝(浏览器端)里查到的,样子长这样:
把你购买过的游戏的所有购买记录截图后上传,就可以了。我在找消费记录的时候确实废了挺多时间,凭着模糊的印象,记着大概是在2017年下半年买的游戏,一条记录一条记录的看。不过可以确定的是,只要你消费过,肯定是有消费记录的,慢慢找,总能找到。
至此,steam账号算是找回来了。steam官方还会发一封重置密码的邮件让你重新登录,长下面这样:
如果你经历了上面的过程,并成功登录了你的steam账号,你需要马上修改原始密码,并把所有可以做的安全措施做到完备。如:steam手机令牌
令牌的获取需要你在手机上下载steam客户端,并开启令牌。在这期间你需要游戏加速器对steam进行加速,不然没法操作。我是下载了一个【UU加速器】的手机版,可以免费加速steam,比较方便地打开了steam令牌。如果打开令牌,无论你在任何地方,使用任何机器登录你的steam账号,都需要输入一段令牌密码,该令牌密码只能从你的手机上的steamApp中获取,并且它还会一直刷新。但是它并不需要你一直使用游戏加速器。 令牌不仅可以大大提升你steam账号的安全性,主要是在下面找回《PUBG》账号的时候有大的作用。
经历了以上找回steam的过程,并且成功地重新登录上了steam,但是不幸的是,你的《PUBG》账号被封了。被封的原因很有可能是因为你的steam账号在被盗期间,租用给了其他玩家,这些玩家不用为了账号的安全负责,所以开挂开的肆无忌惮,也就导致了账号被封。
不过不用担心,PUBG官方还是很开明的。只要你提供PUBG被封确实不是自己所导致的就可以完成解封。以下为我的解封过程。
先去PUBG官网,找到官方客服,进行案件的申请 ,官网链接点这里
我在第一次申请时,提供了以下信息:
申请发送后,PUBG官方客服会回复邮件,我是大概在3天后收到的回复邮件,邮件如下:
邮件的内容大体是让我们再继续提供一些证据,如下:
我们只要按照他所说的继续提供相应的截图就可以了。如下:
做完以上步骤,需要做的就是等待。等待官方客服做最后的验证。我大概等了1周多几天,收到了PUBG账号恢复的邮件:
如果你也收到了这封邮件,就证明你的账号恢复了,接下来就麻溜地上号,开始你的吃鸡生涯吧!!!
End
感谢您阅读到此
本文版权归作者所有,欢迎转载
转载必须在醒目位置标明作者与出处
里程 | 机油 | 机滤 | 空气滤芯 | 燃油滤芯 | 空调滤芯 | 刹车油 | 变速箱油 | 防冻液 | 火花塞 | 价格 |
---|---|---|---|---|---|---|---|---|---|---|
5000 | ◉ | ◉ | 每2年更换 | 免费 | ||||||
10000 | ◉ | ◉ | 545 | |||||||
20000 | ◉ | ◉ | ◉ | ◉ | 1065 | |||||
30000 | ◉ | ◉ | ◉ | ◉ | 790 | |||||
40000 | ◉ | ◉ | ◉ | ◉ | 1065 | |||||
50000 | ◉ | ◉ | 545 | |||||||
60000 | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ | 2150 |
里程 | 机油 | 机滤 | 空气滤 | 燃油滤 | 空调滤 | 刹车油 | 变速箱油 | 防冻液 | 火花塞 | 积碳清洗 | 三元催化清洗 | 喷油嘴清洗 | 节气门清洗 | 价格 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
5000 | ◉ | ◉ | 免费 | |||||||||||
10000 | ◉ | ◉ | 暂无 | |||||||||||
20000 | ◉ | ◉ | ◉ | ◉ | ◉ | 473 | ||||||||
30000 | ◉ | ◉ | ◉ | ◉ | ◉ | 893 | ||||||||
40000 | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ | ◉ | 1248 |
机油 | 机滤 | 空气滤 | 燃油滤 | 空调滤 | 积碳清洗 | 三元催化清洗 | 喷油嘴清洗 | |
---|---|---|---|---|---|---|---|---|
型号 | 壳牌/超凡喜力/52-40 SP A3/B4 4L | |||||||
价格 | ||||||||
服务费 | ||||||||
备注 | ||||||||
更换轮胎(前轮 2条)
型号:韩泰 万途仕 K117 225/45R17 91W
价格:478 * 2 = 956
免安装费 / 赠送铝合金气门嘴 / 赠送1年轮胎险
轮胎险:众安在线财产保险股份有限公司承保
保险凭证号:821340106561454890,821340106561454891
本次保养总计花费:956
机油
【壳牌/Shell】【喜力】【灰壳】【全合成】【5W-40】【SN】
价格:299
机滤
【欧菲/UFI】【20微米过滤】
价格: 35
人工费:39(安装机滤 + 机油)
火花塞
【NGK】【双铂金】【PKER7A8EGS】
商品价格: 79 * 4 = 316
人工费:15 * 4 = 60
以上为途虎App下单,满499减150
原价:749
实付:749 - 150 = 599
空气滤
【冠军】【CU410-03】
价格:42
刹车油
【博世】【德国进口】【ENV6】【1L】
价格:198
人工费 :
以上为在店内检查后,需额外更换的。
实付:294
本次保养总计花费:893
机油
【壳牌/Shell】【喜力】【灰壳】【全合成】【5W-40】【SN】
价格:299
机滤
【冠军】【CM107-03】
价格: 19
人工费:39(安装机滤 + 机油)
原价:357
优惠:78
实付:278
以上均在途虎App下单购买
空气滤清器
【马勒】【LX3807】
价格:40
燃油滤清器
【马勒】【KL759】
价格:89
空调滤清器
【马勒】【LAK621】
价格:65
以上项目为到店检测后新增的项目,全部免除人工费
实付:194
]]>本次保养总计花费:473
注:以下叙述是我的亲身经历,如有雷同,望赶紧擦亮自己的双眼,避免再次上当!
上个周日,早上11点多。我上街买菜准备做午饭,顺路去菜鸟驿站取快递。
刚在菜市场买完菜准备走到菜鸟驿站,有个大概35-40岁的中年男人走上前来,问我要不要山地自行车,普通话还算正宗,所以听不出是哪里的人。
这个人介绍自己是跑物流的,刚刚拉了一单山地车,由于在装货的时候多装了一辆自行车,所以想要自己把这台山地车卖掉,挣点外快。还向我展示了收据,证明该车价值1980。
我起初并没有想买的心思,只是想看看是辆什么样的山地车。(好奇心作祟)😐
这个人带着我七拐八拐走到一个路边,墙角上靠着一辆被塑料袋和纸片包着的自行车,车把和前轮都没安上。看样子是新出厂的车子,并不是“赃物”。这让我有了进一步了解的想法。
这个人继续向我推销,说这台车是“美利达”牌的,出厂价1980元,由于是多出来的,想自己便宜出掉,挣点烟钱。
我之前也算是很喜欢山地车,所以认识“美利达”这个品牌,但是我并不是十分了解。只是看到自行车车架上有”MELDA”的字样,稍微有点英语常识的人可以拼一下,确实是“美利达”。事情发展到此,我对这辆车的好奇心进一步加深。
然后我问了他价格,但是他并没有正面回答,只是反问我能给多少。我随口一说300,他满脸的不屑。说是怎么还不给我折一半的价钱啊。我心里也有小九九:这车看起来还可以,但是我并不想花太多钱买它。还是贪小便宜的心态。
随后就是讨价还价的戏码。不得不说,他还是很“痛快”的。我于是动心了,最后以300块成交。我微信转账给他,他转身就走了。
成交之后,我还是丝毫没有发现任何不对的情况,自己满心欢喜地以为捡了个“便宜”,累哼哼地拎着车子取了快递,又回了家。
回家之后,迫不及待地打开包装,自己开始组装。
不得不说,这个山地车山寨得没那么明显,或者也可以说我自己傻的不那么彻底,我完全没有认识到自己已经上当受骗。甚至还很享受自己动手组装车子所带来的成就感。
等我自己已经装好车把和车座时,我才想到要上网搜一搜这个“MELDA”,一搜自己就傻眼了,网上都是网友们痛斥骗子的话语。
如下:
这下我才反应过来,自己掉进了坑里,然后还喜滋滋,满心欢喜地以为自己捡了便宜。嗯~ 蠢得很彻底!😧😧😧
我们回过头来看整个骗局:
该骗子一开始在路边“招揽顾客”,只要跟上他去看车子的,都是像我一样,要么有买山地车需要的,要么特别喜爱山地车,但是都有一个最重要的特征:想要占点小便宜。
在看到自行车后,他会强调这个车子是怎么怎么好,出厂价是怎么怎么高,只是由于多出来一辆,所以想要低价出手,挣点外快。只要不是一眼就看出来这辆车子是山寨货的人都会被吸引,接下来就会问价格。
在谈价格的时候,骗子自己不会要价,会让你给出价格,不论你给出多少,他们都会嫌低。
反正只要不低于100块钱,他们都是不亏的。只要你有一丝丝不想买的意向,他们会立马同意你的要价,并且会不断地强调自己怎么怎么亏了,你占了怎么怎么大的便宜。
最后,你满以为自己捡了个大便宜,兴冲冲地将车子拎回家,不料这车子是做工粗糙、配件尺寸都不对、成本价也许只有100块的山寨货。
我随后在【某鱼】上搜了一下“MELDA”,竟然搜出来好几个闲置的“MELDA”山地车。
我不太清楚这些山地车是从哪里来的,但我猜测,应该有一部分人都是像我一样贪小便宜,买了山寨货“MELDA”之后,发现这辆车根本不像自己买的时候骗子说的那么好,甚至都不能骑。所以才挂上去想补回一点损失。
其实我一开始也有类似的想法,但是想到这里,又有点于心不忍了。这和自己收到假币,再转而将假币花出去的做法有何不同。
劝你善良~ 🙏🙏🙏
后期的话,我打算先动手把车子组装一下,如果可以骑,就当个代步工具吧,以后买个菜取个快递可以骑上。(实在不敢骑长途)如果实在组装不上,就扔到地下室吧,引以为戒!!!
其实,这个山寨车山寨得很明显,通过对比正牌的“美利达”和山寨的“MELDA”,一眼就能分辨出来。
正牌”美利达”的英文拼写是:MERIDA,山寨版的是:MELDA。如下图所示:
正牌美利达:
山寨“MELDA”:
可以通过网上的帖子看出来,这伙人已经猖狂了很久。最早的帖子有17年的,被骗的人遍布河北、天津、山西甚至首都北京。
网上的大部分言论都表明该骗子一般穿一身德邦快递或者顺丰快递的工作服,有的甚至开着德邦和顺丰的运输车。车子的来源都说的是出货时多拉了一辆,想自己卖了挣外快。
他们甚至同意买车子的人用手机拍下他自己身份证的照片,更有甚者会起誓说骗人死全家。
不得不说,现在骗子的功夫越来越高。我是95后,平常也喜欢看一些法制频道的新闻和案例,自以为练出了可以识别这些骗局的火眼金睛。殊不知,只要自己稍微有一点贪小便宜的心思,立马会被骗子抓住加以利用。
我把我的经历写下来并分享出去,只是想让更多的人知道这个骗局,引以为戒!以后路上碰到任何向你推销东西的人,敬而远之。
]]>切莫贪便宜,贪小便宜吃大亏。
下面我们就前后端分离做一个简单的分析和总结,我会就3个方面对其进行说明:为何要进行前后端分离、前后端分离的好处以及如何进行前后端分离。
开发效率低下
我们先简单描述一下在前后端分离出现之前,一个javaWeb项目是如何进行开发的。
产品经理提出需求➡️UI进行页面设计➡️前端将设计图转换为HTML页面➡️将页面交由java开发人员进行数据对接,转为jsp页面➡️需求更改➡️前端返工➡️后端返工➡️再次对接➡️完成
可以看出,在一个项目的开发过程中,涉及到了前后端人员多次的交接。在后台人员接好一个页面之后,是将该页面集成在java项目中的。耦合度极高。如果遇到需求反复修改,前后端人员需要不断地循环对页面进行修改、嵌套数据,极大降低开发效率。
代码可维护性弱
在传统的开发中,页面的代码是集成在javaWeb项目里的。前后端的代码统一保存和修改。不论是前端的代码还是后端的代码出问题,都需要在一个项目中进行查找和修改。在修改时,又会遇到某个页面被其他页面调用,改了A页面,B页面受到了影响等问题。剪不断,理还乱。😔
不论是对前端人员还是后端人员来说,有自己的一亩三分地多好!🤔
无法应对前端复杂的业务需求
时至今日,用户不仅关心一个软件是否能用,而且对于它是否好用提出的更多的要求。用户不仅需要简单直观的数据展示,更需要炫酷、靓丽、个性化的操作界面。这使得前端相比前几年变得越来越重要。现在的前端和前两年的前端已经不可同日而语。他们需要掌握越来越多的技能来满足口味日渐挑剔的用户。并且在进入移动终端时代,前端也还要满足不同终端的适配。
现在的一个Web应用,前端在其中占据了比之前更大的比重,这样的情况使得传统的开发模式不堪重负。
以上是简单列举的几个方面,我们可以看到,造成这些问题的一个最主要的原因就是前后端的代码和开发进度耦合度极高。
就上面所说的三点,我们再来看看前后端分离之后又有哪些好处。
提升开发效率
前后端分离之后,可以实现前后端代码的解耦。我们再来看看分离之后一个javaWeb项目的开发流程:
产品经理提出需求➡️UI进行页面设计➡️前后端并行开发➡️ 前后端对接 ➡️需求更改➡️前端返工或后端返工➡️再次对接➡️完成
在分离之后,只要在开发前期,前后端人员对所需接口以及接口的参数做出约定,就可以并行开发,互不影响。后端人员不再需要等待前端人员的页面,前端人员也不再需要受制于后端项目。极大地提高了开发效率。
增强代码可维护性
前后端分离之后,代码会分成两个项目来进行保存和修改。对于前后端人员,无论是代码的阅读还是和维护都将变得更加轻松。
他们各自终于有了自己的一亩三分地!😄😄😄
可更好地应对日益复杂的前端页面
将前端从原来的整个项目中抽离出来之后,能够更好地专注于前端的开发。开发效率和能力都将带来提升。
现在专人做专事,比之前更加专业,这也催生了目前流行的“大前端”。现在的前端发展得更加系统化,他们也有包管理工具、路由管理、cookies管理等工具。
同样的,后端人员也可以更加专注于数据和业务,而不用再为了前端页面犯愁了。😆😆😆
在文章开头我们也讲了, 前后端分离并非仅仅只是一种开发模式,而是一种架构模式(前后端分离架构)。
千万不要以为只有在敲代码的时候把前端和后端分开就是前后端分离了,前后端分离,需要区分前后端项目。 前端项目与后端项目是两个项目,放在两个不同的服务器,需要独立部署,两个不同的工程,两个不同的代码库,不同的开发人员。
前后端工程师需要约定交互接口,实现并行开发,开发结束后需要进行独立部署,前端通过ajax
来调用http
请求调用后端的restful api
。
前端只需要关注页面的样式与动态数据的解析和渲染,而后端专注于具体业务逻辑和数据地提供。
前后端分离的项目在部署的时候也需要分开来部署,目前流行的方式有以下几种:
对于传统的混合开发模式,历经时间的考验,到现在虽然也能经得起大部分项目的开发,但是放眼未来,我们还是需要将前后分开,让彼此更加专业化、精细化。这便是未来发展的趋势。
End
感谢您阅读到此
本文版权归作者所有,欢迎转载
转载必须在醒目位置标明作者与出处
javaScript
, 有几个常用的JS特性时常会用到,这些特性不仅会给工作带来效率得提升,而且可以大大地简化代码。不论是自己以后修改代码,还是他人日后进行维护,都是大大的好事。下面我们详细地展开来讲每一个特性的使用方法和要注意的地方。
用于对象或数组中的展开操作符(…),将一个结构展开为列表。 演示一下:
合并数组:
1 | let arr = [1,2,3]; |
合并对象:
1 | let obj = { |
在合并对象时要注意,如果是相同的对象,写在后面的会覆盖前面的。切记!
先来看一个例子:
1 | function add(p1, p2){ |
上面的add()
方法,只处理了p1/p2
两个参数,而如果我想临时多加几个参数,完成累加才做,该方法就无法处理。下面将对该方法做出优化,可以完成不定个数的参数累加:
1 | function add(p1, p2, ...p3){ |
在方法定义时,增加一个...p3
参数,在方法体中打印该参数可以看到,p3
参数是除了p1/p2
参数外的剩余参数所组成的一个数组。借助数组中的reduce()
方法,可对剩余参进行操作(此处我进行了累加操作)。这样就可以很简单的完成一个参数个数可变的方法。
在不使用vue/react
等具有数据双向绑定特性框架的前提下,我们渲染页面中的数据时常会用到字符串模板,在从前,我们一般这样使用:
1 | var template = "<div>" + |
我们不得不逐行逐句地重复添加引号和加号,以得到更好代码的阅读性。现在我们可以在拥有完美阅读性的前提下更简单地实现字符串模板,请看演示:
1 | var template = `<div> |
我们只需要借助一对 ` 将相应的字符串包起来,多方便!还可以使用${}在其中动态插入值。如下:
1 | let blogName = '老米的世界'; |
对比一下ES5和ES6即可发现他的好处:
1 | const calculate = { |
1 | const calculate_ = { |
是不是好写多了!
1 | function test(params, type){ |
在test()
方法中,我们需要两行代码来拿到parmas
参数中的name
和url
字段。在使用解构赋值时,则只需一行代码即可。请看以下演示:
1 | function test(params, type){ |
在这里我们可以使用上面说到的剩余参数来获取剩余的数组成员,也可以使用,,
来跳过某一个数组成员。
1 | let arr = [1,2,3,4,5]; |
相关的数组操作可以点击查看我之前总结的2篇文章
End
感谢您阅读到此。
感谢~
欢迎浏览我之前的文章:
]]>之前经常会在电视里的法制节目里看到,一群或便衣或警服的警察在楼梯口整装待发,然后带头的人员会一脚踹开房门,大喊“双手抱头”的场景。
总觉得这样的场景只要我自己不去做违法乱纪的事儿就应该不会遇到,直到上个月中秋节的前一天,也就是9月12日。
那天是中秋小长假的最后一个工作日,虽然内心早已奔向自由,但还是得熬完这最后一天。
大概早上的9点40分,我正在敲着代码,只听到背后很远的地方传来嘈杂声。起初以为是同事之间的争吵,但是回过头细看:只看见一群人黑压压的从公司那边的楼梯口压过来,不断地喊着“不许动!举起手来!不要动手机和电脑!”。
我一脸懵逼,转头看向身边的同事,N脸懵逼~
不由分说,一名女警已经走到我们附近。她虽然没穿警服,但是那种威严感还是很足,我不由得站起身来,举起双手,学着记忆中罪犯的样子,把手交叉靠在了脖子上。
身边的同事也一个接一个站起来,把手背在了脖子后。
懵逼~
这里要简单介绍一下我当时的公司:这家公司规模不算小,员工大约有200人左右。租了一整层的写字楼,并且员工坐的满满的。每层的写字楼除了有一个正门,两边各有一个逃生通道,通向楼梯口。当时警察们来的时候应该是从这3个入口同时发起“进攻”的。一下上来了20-30号警察。
可以想象,这个场景对我的冲击有多大。
不得不说,这些警察的做事很干练。在让我们站起来双手抱头的同时,已经有好几个警察开始盘问我的同事们。详细得询问姓名,并让交出身份证进行核对。
由于我们员工实在是太多了,而且有许多人都没有携带身份证,所以在盘问了一阵之后,警察们改变了策略:让所有员工依次排队站在通道上,并按照有无身份证分成两列。由多个警察进行询问和核对身份证。
在这期间,陆陆续续有10个左右的同事被“揪出来”,并被带到一个办公室里。
初露端倪~
我是从2018年5月份入职的这家公司,当时的公司规模还远没有现在这么大。人事大概在100人左右。从18年下半年开始,公司规模也开始渐渐增加,人数开始增多,最多的时候公司租了整两层写字楼供员工使用。
在被警察“揪出去”的那些人中,我发现一个规律。那些同事都是参与过一个项目的同事,包括前后台、项目经历、运维、测试以及销售人员。一个不落。
这个项目是“信贷项目”。算是这家公司的“顶梁柱”。这个项目在我18年进入公司时就已经在运行了,直到被抓。
万幸的是,我并没有参与这个项目,所以逃过一劫。
万幸~
接下来的整整一天,公司的所有员工无法出去,并且不能使用电子设备。我们失联了。
我们在通道一排排的站到10点半,警察告知可以搬过凳子来坐在通道上,但是明确且严厉地告知不能碰电脑和手机。
悬着的心在这时总算是落下来了,我们三五成群的开始议论这个事情。几个和我差不多进入公司的“老”员工也纷纷明白了个大概。
到中午时分,警察们让每个项目组的负责人给每个人点外卖,我们挨过了午饭。午饭过后,员工们可以坐在各自的工位上了,又是一下午的时间。
在这期间,警察们让每一位员工在一张A4纸上详细地写下自己的个人信息,以及在公司担任的职位,和做了哪些工作及项目。
直到下午6点,由于第二天就是中秋小长假了,有许多员工都定了回家的车票。这些员工开始找负责的警察说明情况,警察们开始落实解散员工们的行动。
期待~
下午6点半,每个想回家的员工都需要拿着写着自己详细信息的A4纸和身份证排队找相关的警察核实,核实之后才可以离开。
并且员工们被告知:收拾并带走自己的私人物品,不能动电脑,该公司将会被查封。
负责核实的警察只有两个,所以现场就和春运期间的火车站一样,大排起了长队。
最后到7点左右,我终于可以走了。
逃生~
回到家之后细想那天发生的事情,这件事情是必然的!
由于我在该公司待了也挺久的了,事后也能想到几个不正常的地方。
其实从去年开始,就能感觉到公司不正常的地方:
除了刚刚所说的信贷项目,其他项目其实是不怎么挣钱的。那么如何支撑全公司200多号人的工资以及两层办公室的租金?
只能说是信贷项目的收益高的可怕。
在8月份的时候,公司很紧急的解散了之前的信贷项目,把所有负责信贷项目的员工全部安插到了其他项目中。
说明到此时,公司高层也已经预感到了信贷项目的危机。
之后和一个做开发的同学聊起这件事,他说他公司对面的那家公司,也在前几天被一群警察查封了。
好巧~
现在的我从这家公司离职了。8月份的工资没法要回来了。
国庆节前夕,我入职了新公司,并且业务正常。
写这篇文章的目的,也是想把自己的遭遇分享出来,并且给让广大的程序员朋友提个醒:我们做开发的,不是你只写代码,就一定不会触犯到法律。
我们在找工作的时候,不要只盯着公司规模、福利待遇,更要详细地了解你要从事的具体项目。
可能很多同学要提问了:我们还没入职,如何得知该公司进行的项目是否违法。
我也承认,在入职前就调查清楚确实很难,我们要做的就是在入职后,擦亮自己的眼睛,我们虽然是公司的员工,但是我们更是父母的孩子,自己爱人的爱人,我们要对自己负责。
如果你在工作期间发现自己的公司所做的业务或者项目,有那么一丝丝违法的迹象,劝你早日离开。这样的公司是对他们自己不负责任,更是对员工不负责任。就算待遇很高,这样的公司不待也罢。
明目~
欢迎浏览我之前的文章:
]]>原始数据类型:Boolean、String、Number、undefined、Null
引用数据类型:对象、数组、函数
this总是指向函数的直接调用者。而非间接调用者。
如果有new关键字,this指向new出来的这个对象。
window是指浏览器打开的窗口
document是指html文档对象,是window的一个属性。
null
一个空对象
表示一个没有值的值,也就是值为空
它的typeof()
是object
undefined
表示一个变量声明了,但是没有赋值
它的typeof()
是undefined
概念:是指在一个函数中创建第二个函数,通过第二个函数来访问第一个函数中的变量和参数。
特性:
作用:严格模式。是ES5发布的一个一个新命令。使得js在更严格的条件下运行,消除js语法的一些不合理、不严谨的语法。
判断某个对象是否属于某个类
一种轻量级的文本数据交换格式,格式简单,易于读写,占用宽带小。
JSON字符串 –> JSON对象
eval('('+str+')')
JSON.parse(str)
JSON对象 –> JSON字符串
JSON.stringify(obj)
document.write()会重新绘制整个页面;innerHTML只会重新绘制一部分。
创建:createElement('div')
查找:getElementById(‘id’)
/ querySelector('#id')
添加/移动:appendChild(node)
/ insertBefore(node, node)
移除:removeChild(noed)
复制:node.cloneNode(deep)
deep为true时,复制该节点下所有节点。否则只复制当前节点
navigator.userAgent
1 | function commafy(num) { |
url举例:https://blog.csdn.net/hannah1116/article/details/80078547
location.href
: 完整链接 location.protocol
:协议 –>https:location.host
:域名 –> blog.csdn.netlocation.pathname
:路径名称 –> /hannah1116/article/details/80078547location.port
:端口号location.search
:从问号 (?) 开始的 URL(查询部分)location.hash
:从井号 (#) 开始的 URL(锚)1 | var xhr = new XMLHttpRequest() |
js中所有函数都有这两个方法
这两个方法都能继承另一个对象的方法和属性,区别在于参数不一样
Function.call(obj, arg1, arg2,...)
和Function.apply(obj, args)
第一个参数都是要调用的函数的对象。call()的剩余参数是传递给要调用的函数的值,而apply()只有两个参数,第一个是对象,第二个是数组,这个数组就是该函数的参数。
1 | function Animal() { |
第一种:
1 | function Cat(name, color) { |
第二种:
1 | Cat.prototype = new Animal() |
当妈的应该都有感触,新出生的婴儿身体抵抗力较弱,比较容易患病。
有时候一个小小的感冒就有可能引发肺炎,住院四五天,几千块就没了。
但大部分的商业医疗险、重疾险,都要求在孩子出生28天之后才能投保。
再加上90天甚至180天的等待期,基本上在孩子半岁之前,商业保险是指望不上的。
所以这段时间,娃儿生了病,就只能靠医保,越早办理就越划算。
大部分地区规定,一般新生儿出生30天之内参保,自出生之日起就能生效,这段时间生病住院产生的费用,都能报销。
超过30天之后才购买的,自缴费到账次月起,才能用这个医保报销。
如果有些家长粗心大意,等孩子过了一岁采取办理,就要等到第二年的1月1日,才能享受医保待遇了。
新生儿办理的这个医保,一般是指城乡居民医保,每年只需要缴纳一次费用就能保障一整年。
价格也不贵,大部分城市只需要220块。少部分地区每年一百来块,比如北京每年160元,上海每年130元,普通家庭也负担得起。
在第一次办理之后,往后每年都得在一个固定的时间段缴费。
一般是每年的9月到12月,去街道的医保服务点,就可以续保下一年的保费。
千万别忘了。
不然孩子的医保断了,即使重新补交,也有等待期。
要是这期间生病了,不能报销就亏大了。
办理的手续也非常简单,
先到派出所,把孩子的户口给上了;然后拿着宝宝的户口本页、孩子的出生证明、父母双方的身份证、结婚证,以及孩子一张一寸照片,到区县医保中心进行办理就好了。
如果不在户籍所在地的,比如说两口子都在北上广深工作,老家在广西湖南之类的,想给孩子办理当地的医保,就稍微麻烦些,需要父母双方至少有一方要有当地的居住证。
上海比较严格一些,不仅要有居住证,还要至少120分的积分。
具体办理的流程如下:
(以最严格的上海为例)有居住证的那个人,请单位开具一个《上海市民居住证积分通知书》,在“同住人信息”那一栏里,填上配偶和孩子的信息。
最后,拿着夫妻双方的身份证、小朋友的出生证、户口本、居住证,以及上面开的那个通知书,去街道医保服务点进行办理。
拿到这个新生儿医保卡之后,一边住院一边统筹,资金周转不要太安心。
医保统筹报销的范围和报销比例,都和一般的居民医保一样,一般是40%-80%。
其他城市办理的流程,大体上类似,可能会有细微的差距,具体可以拨打当地社保热线12333详细咨询。
新生儿医保的政策全国大体类似,但是不同的地区在细节上会有些许差距。
主要体现在费用、办理时间、报销比例上。
大部分城市,新生儿在出生30天之内办理,每年缴费都是220元。
超过这个时间的话,费用会大幅上涨,有的城市是550元,有的是740元,有的甚至要一千多。
如果是因为晚了一天办理,就要多交几百上千块,很吃亏。
有些城市福利比较好的城市,新生儿办理医保甚至不需要缴费,可以随母报销。
什么意思呢?
简单来说,如果新生儿的妈妈办理有新农合,那么新生儿医疗待遇的报销,直接使用妈妈的医保就好了。
比如河南、安徽
这些地区办理随母报销,一般凭出生证、以及母亲参加城镇职工基本医疗保险或居民基本医疗保险的有效证件,宝宝就可以享受出生当年城镇居民基本医疗保险待遇了。
随母报销的流程也不复杂:
去年大部分地区的办理时间要求是,出生之后90天之内。
今年大多数地区都收紧到30天之内,但是部分地区还保留着90天的规定。
为了稳妥起见,建议大家最好都按照30天的标准来要求自己,这样能确保不会漏掉。
虽然今年医保缴费和时间的要求,政策普遍收紧了。
但好消息是,报销比例上涨了。
很多城市,都将最高报销比例,从70%上调到了80%。
比如广州,今年的缴费标准是288元/人(去年是199元/人)。
但在三级医疗机构住院的报销比例,从去年的70%提升到了今年的80%。
总体来说,新生儿医保是国家给的福利,非常实用,必须人手必备。
但是很多家人拖延症一犯,磨磨唧唧就错过了最佳办理时间,损失非常大。
尽量在娃儿出生30天之内,抓紧时间,把这个事儿给办了。
最后再次提醒一下,因为各地具体实施方案不同,具体规定可能会有所差异,各位爸爸妈妈们,可以拨打社保服务电话12333详细咨询。
]]>无论如何,社保都是一定要交的。
因为这不仅是国家给我们的,最基本的社会福利保障。
也是性价比最高、门槛最低的「保险」。
在北上广深这样的一线大城市,买房、买车摇号、小孩上学甚至落户,都对社保缴纳有着一定的要求。
可以说,社保是大多数人立足城市的根本。
具体来说,社保就是我们通常所说的“五险一金”,它包括:
养老保险、医疗保险、失业保险、工伤保险、生育保险和住房公积金。
其中,养老保险、医疗保险、舍也保险、公积金,个人和公司按比例,每个月各交一部分。
每个月具体交多少,以我室友为例,算一笔账。
她在上海税前月薪是1.5W。
每个月五险一金,个人缴纳2625元,公司缴纳5364元。
每个月,社保账户入账7989元,差不多7成的钱是公司交的。
知道为什么很多公司,会偷偷按照最低缴费基数给员工交社保了吧。
因为实在是太!肉!疼!了!
社保断交后,影响最大的是医疗保险。
从断缴第二个月的1号开始,看病就不能再报销医疗费用了。
不过医保卡里,个人账户的钱还可以继续用,不会因为断交就给你清零。
假设,我舍友比较倒霉,断掉社保之后的第二个月突然就生病了。
那么,她去医院看病花的钱,全部都要自己承担,一分钱都报销不了的。
(呸呸呸,这事儿当然是不会发生。)
其次,医保在退休之前,要求男性累计交满25年,女性累计交满20年。
中间如果经常断缴,有可能到退休的时候,累计缴费的时间还不够。
这样退休之后,就不能免费享受医保报销。
在加上,有的城市,如果断缴时间超过3个月,连续缴费时间就会清零,就只能享受最低的医疗报销额度。
这个问题,之前还被谣传说,断交之后,想重新报销必须要等待6个月。
这种说法妥妥就是危言耸听了。
大部分城市,比如北京、上海、广州、郑州,不管中间断了多久,从医保重新续缴的第二个月开始,看病就可以恢复正常报销。
而有的城市,如果断交超过3个月,报销额度和报销时间都会受到影响。
比如深圳,如果断缴3个月以上,年度最高保险限额和门诊大病的报销比例都会大打折扣。
再辛苦下我舍友来举栗子🌰
假设她在深圳连续交了6年医保,中间没断过,那他每年最高能报销160万左右;
但如果中间中断了不管,那么即使重新续上,之后半年内,最高也只能报销11万左右。
(深圳的童鞋想了解具体的影响比例,可以上深圳社保局查询。)
简单来说,就是交的时间越久而且没中断过,报销比例和上限就越高。
还有一些城市,比如太原、重庆、南京,如果断交超过3个月,即使重新续缴,也要等到6个月之后才能报销。
这就意味着,中间这6个月,如果生病的话,就得全部自己掏钱了。
这里顺便科普“连续”和“累计”的区别:
社保断缴后,虽然连续缴费时间会清零,但医保累计缴费年限是不清零的。
也就是说,即使你断缴过社保,但只要你所有缴费的时间,累加在一起超过规定年限(男性25年,女性20年),那在退休后就能享受终身医保待遇。
断交第二大影响的,就是这个安身立命的问题。
想用公积金贷款买房,社保最低要连续缴纳6个月以上。
一些热门城市要求的时间更长。
比如上海,之前规定非沪户籍,只有连续缴满5年的社保,才能在上海买车摇号和买房。
这5年哪怕中断1天,都需要重头开始算。
今年上半年,开始调整为买房前的63个月内,缴满60个月的社保,就放宽了不少。
不仅如此,积分落户、买车摇号、孩子上学等,都要求连续缴纳社保半年以上。
北京、广州、深圳等其他城市,也有各自类似的政策。
社保断缴,有生育计划的女性,就没有办法报销产检、分娩费用,生育后也无法领取生育津贴等。
因为大多数城市,要求在生孩子之前,要连续缴纳9个月,或者累计交满一年,才能享受上述福利。
所以,只要不是在怀孕期间辞职,就不用太担心。
养老保险,只要你退休时,累计交满15年,就可以领取养老金。
虽然说交的时间越长,养老金就越多。
但是少缴一两个月,影响不是很大。
至于失业保险,这个本来就是失业才会启动的保障。
离职之后可以按照当地社保局规定,申请领取在就业失业补贴。
至于工伤保险,完全就没有影响了,因为离职期间,你根本就用不到。
这个要分具体情况来分析:
如果1个月内,就可以无缝衔接入职新东家的话,这个影响不大。
直接在新公司继续缴纳社保就可以。
如果1个月内不能入职下家公司,可以自己交社保。
有两个办法:
灵活就业人员社保
简单来说,就是自己准备好相应的资料,到当地社保服务点或社保局,办理个人缴纳社保。
不过需要注意的是,个人只能缴纳养老保险和医疗保险,且只允许本地户籍人员参加。
每个月大概要交多少钱呢?
以上海为例,灵活就业人口2019年社保缴费上限为24633元,下限是4927元。
养老保险的缴费比例是28%,医疗保险是11.5%。
按照最低4927元来算,
养老保险=4927*28%=1379.56元
医疗保险=4927*11.5%=566.6元
也就是说,每个月需要缴纳1946.16元。
挂靠熟人公司或找社保代缴机构
如果没有当地户口的话,那就只能找熟人公司或者社保代缴机构来。
不过这种情况的话,个人和公司的全部费用,都需要自己承担。
如果我室友找了这种公司,那她每月最低缴费额度为:
养老保险4927元28%+医疗保险4927元11.5%+其他三险≈2054.6元
虽然贵了一点,但图个安心呀。
不过需要注意的是,找代缴机构的话,因为没有真实的劳务关系。
还是有一定风险,在选择上需要注意甄别。
如果离职后,换了另一个城市工作,就需要考虑社保异地转移的问题了。
五险一金中,只有养老保险、医疗保险和住房公积金可以转移,而且可以累积。
失业保险和工伤保险,反正也用不到,所以没什么关系。
至于社保关系转移的具体操作步骤,由于各地政策不同,大家可以在各地社保单位网站查询,或者直接打当地社保局热线12333咨询。
现实生活中,很多像我室友这样的年轻人,一时离职一时爽,一直离职一直爽,压根就不在意社保的问题。
却不知道社保原来那么重要!
毕竟社保可以算是由政府出面,集中一部分社会财富,再扶危济困的“兜底”福利。
该属于社会主义社会羊毛了,该薅还是要薅的。
]]>社保里,有一个特别容易被我们忽略的福利,是生育保险。
很多人以为,生育保险就是用来报销生孩子、产检的医疗费,也没几个钱,作用也不大。
其实呀,这里面的福利可大着呢。
医疗费用是小事,生育津贴才是大头。
你想呀,妈妈们在生了宝宝之后,肯定是要休产假的。
国家规定基础的产假是 98 天,如果是剖腹产的话再加 15 天。
生育多胞胎,每多生育一个宝宝,就多加 15 天。
休产假过程中,还能正常领工资,这些钱全靠生育津贴来支撑。
最开心的是,生育津贴拿多少钱,和自己个人工资完全无关!
和个人工资完全无关!
和个人工资完全无关!
和个人工资完全无关!
重要的事情说三遍!!!
这个钱,是按照单位上一年的月平均工资来计算的。
计算公式是这样的:
生育津贴 = 上一年本单位人均缴费工资 / 30 天 * 产假天数
假设单位上一年的平均工资是 10000 元,
顺产的话,可以领到 10000 / 30 * 98 = 32666 元
剖腹产的话,产假多加 15 天,可以领到 10000 / 30 *(98+15)= 37666 元。
有些单位平均工资高的,能领十来二十万!
同一家公司,不管你是前台小妹,还是公司高层,你们拿的生育津贴是一样的。
对于工资低于公司平均工资的妈妈来说,就是妥妥的赚到啦~
如果你自己的工资高于公司平均工资,也不用担心吃亏。
因为差额的部分,公司必须给你补足。
是不是爽歪歪呀~
发小是剖腹产,一共有 98 + 15 = 113 天产假。
她的工资是 20000 元,上一年单位平均工资是 15000,
生育津贴领了 15000/30*113 = 56500 元。
公司再补给她 18833 元,最后到手 75333 元。
生个娃,在家啥也不干还拿 7 万多,心里美滋滋哒~
想知道公司的平均工资也很简单,一般社保局就可以查到,有的城市微信公众号也能直接查到,还是挺方便的。
这里需要特别注意一点,如果公司是按照最低工资标准交的社保,比如上海,最低社保标准是 4927 元,那你能拿到的钱就只有 1.6W 左右,缩水非常严重。
所以如果是有计划生宝宝的话,在怀孕前,一定要要求公司按你的实际工资来交生育保险。
其他城市的生育保险也是差不多的内容,只是细则稍有不同。
具体可以在当地社保局网站查询,或者直接打 12333 去问。
只要生育保险交满一年,并且怀孕时仍然再正常缴纳费用,没有中断,就可以报销了。
报销的时候,拿上自己和老公的身份证原件及复印件、结婚证、居住证明、《计划生育服务手册》或《生育证》原件及复印件、婴儿出生证、出院证明(大人和宝宝的都需要)、本人银行结算户存折复印件。
到最近的生育保险服务中心填个申请表,资料交完,等着钱到账吧。
这里特别说明一下,有些城市不像上海这样,直接将钱打到个人银行卡里。
而是员工先把相关材料交给公司财务,等生育保险基金把报销的钱打到对公账户之后,公司再发给个人。
二胎政策开放之后,很多妈妈们也很关心,二胎可以报销么?
可以的。
只要是符合政策的二胎,都可以报销,报销方式一样的。
如果工作地与户籍地不一致,去哪里报销?
这个问题不用纠结,在哪里交的生育保险金,就在哪里报销。
至于,男同胞们的终极困惑:男性的生育保险有什么用?
如果老婆已经有了生育保险,那你的生育保险,除了可以报销 15 天的陪产假津贴,其他没啥用!
如果你老婆没有生育保险,那就帮大忙了。
可以用你的生育保险,给没有工作的老婆报销生产医疗费和津贴,能报销 50%,回血不少呢!
生育津贴是国家给我们这些小仙女们的福利,如果因为不了解,白白浪费掉几万甚至几十万的话,那可真真是肝儿疼啦~~
各位小仙女儿们,涉及自己利益的政策 ,一定要多研究多了解多打听呀~
平时付出一点点经历,关键时候没准就能帮上大忙呢~
各位准备喜提宝宝的辣妈虎爸们,速速收藏备用啦~
]]>之前在做【跨境电商】项目时,由于需要使用Facebook进行广告的投放,所以接触到了Facebook像素编码。他的主要功能就是对电商各个页面的各种操作进行统计,如:浏览商品、加入购物车、购买等动作。每个商户都有一个后台监控系统,可以实时看到每个像素编码的的各个“动作”的统计量。
业务上的大体讲这么多,接下来我将展示几个主要的“动作”的具体代码。🙃🙃🙃
在代码上的,其实就是几段javaScript
代码,下面是几个代码片段。
我将以一个完整的购物流程进行说明:
访问电商 ➡️ 查看某个产品 ➡️ 将该产品添加到购物车 ➡️ 完善地址等购物信息 ➡️ 发起结账 ➡️ 完成结账
说明:
在开始进行一系列动作之前,需要先初始化Facebook像素,即引入相关javaScript
代码,https://connect.facebook.net/en_US/fbevents.js(该文件需要开启科学上网才能访问到)。
在引入相关必须的JS
代码之后,需要执行一个fbq('init', facebookID)
方法,即初始化该像素编码。这个facebookID可以通过异步操作从后台获取,也可以是一个固定的像素编码。
建议将初始化的代码放在一个公共方法中。
此处需要注意的是,可以一次性初始化多个像素编码。举个例子:
1 | let facebookIdList = ['1111111111', '2222222222']; |
代码:
1 | function initFacebook(facebookID) { |
说明:
每次访问页面都会执行这个方法。该方法无需参数。
代码:
1 | fbq('track', 'PageView'); |
说明:
点击查看某个产品的详情。
参数:
代码:
1 | fbq('track', 'ViewContent', { |
说明:
将产品加入购物车时执行。
参数:
代码:
1 | fbq('track', 'AddToCart', { |
说明:
在用户将要下单前,需要添加收货地址或者完善其他购物信息时执行。该方法无需传参。
代码:
1 | fbq('track', 'AddPaymentInfo'); |
说明:
从购物车或者产品详情页发起结账时执行。
参数:
代码:
1 | fbq('track', 'InitiateCheckout', { |
说明:
通过线上付款或者货到付款完成结账动作并且生成订单后执行。
参数:
代码:
1 | fbq('track', 'Purchase', { |
上面我们列举了大部分统计方法,相信大家很容易就能掌握并添加到自己的代码中。但是我们添加后,怎么进行测试呢?
大家可以安装一款Chrome
插件??Facebook Pixel Helper
,可以在该插件上看到各个方法的执行过程。该插件也需要科学上网才能起作用。
React
项目中的初始化在React
项目中,初始化时遇到了一些问题,下面是在React
项目中初始化的方法:
1 | let fbq = ''; |
如果你已经创建了你的个人博客,却苦于没有一个好看和好用的主题,就快来学习吧。我将每一个功能需要修改的文件路径都已说明,只要跟着我的教程一步步来配置,相信你的Hexo博客将会焕然一新。
下面让我们来一探究竟!
只需要修改模板/themes/next/layout/_macro/post.swig
,搜索 rel="tag">#
,将 # 换成<i class="fa fa-tag"></i>
在路径 \themes\next\layout\_macro
中新建 passage-end-tag.swig
文件,并添加以下内容:
1 | <div> |
接着打开\themes\next\layout\_macro\post.swig
文件,在post-body
之后(END POST BODY
), post-footer
之前添加如代码:
1 | <div> |
然后打开主题配置文件(_config.yml
),在末尾添加:
1 | # 文章末尾添加“本文结束”标记 |
切换到根目录下,然后运行如下代码,安装hexo-generator-feed
1 | npm install --save hexo-generator-feed |
在hexo
的_config.yml
中,在最后添加如下代码:
1 | # Extensions |
在next
主题的_config.yml
中ctrl + F
找到rss:
,添加代码如下:
(注意在冒号后面要加一个空格)
1 | # Set rss to false to disable feed link. |
重新生成一次,你会在./public
文件夹中看到 atom.xml
文件。然后启动服务器查看是否有效,之后再部署到 github
中。
修改文件 themes\next\source\css\_common\components\post\post.styl
,在末尾添加如下css
样式
1 | // 文章内链接文本样式 |
16px
修改文件 themes\next\source\css\_common\components\post\post.styl
,找到.post-body
,修改其中代码如下:
1 | .post-body { |
打开\themes\next\source\css\_common\components\sidebar\sidebar-author.styl
,在里面添加如下代码:
1 | .site-author-image { |
asd
打开\themes\next\source\css\_custom\custom.styl
,向里面加入:
1 | code { |
较低版本的next
没有内置busuanzi
,推荐以下方法
打开\themes\next\layout\_partials\footer.swig
文件
在一开头加上以下代码:
1 | <script async src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"> |
然后在合适的位置添加显示统计的代码
1 | <div class="powered-by"> |
在这里有两中不同计算方式的统计代码:
pv的方式,单个用户连续点击n篇文章,记录n次访问量
1 | <span id="busuanzi_container_site_pv"> |
uv的方式,单个用户连续点击n篇文章,只记录1次访客数
1 | <span id="busuanzi_container_site_uv"> |
版本较高的内置的busuanzi
只需要在主题配置文件中修改如下:
1 | # Show PV/UV of the website/page with busuanzi. |
asd
针对较低版本的next
,推荐一下方法
切换到根目录下,然后运行如下代码:
1 | npm install hexo-wordcount --save |
在/themes/next/layout/_partials/footer.swig
文件内合适位置加上:
1 | <div class="theme-info"> |
清除缓存,重新加载,搞定。
版本比较高的
打开主题配置文件,找到post_wordcount
,配置如下:
1 | # Post wordcount display settings |
切换到根目录下,然后运行如下代码:
1 | npm install hexo-wordcount --save |
然后在主题的配置文件中,配置如下:
1 | # Post wordcount display settings |
清除缓存,重新加载,搞定。
在目录 next/layout/_macro/下
添加 my-copyright.swig
:
1 | {% if page.copyright %} |
在目录next/source/css/_common/components/post/
下添加my-post-copyright.styl
:
1 | .my_post_copyright { |
修改next/layout/_macro/post.swig
,在代码
1 | <div> |
之前添加增加如下代码:
1 | <div> |
修改next/source/css/_common/components/post/post.styl
文件,在最后一行增加代码:
1 | @import "my-post-copyright" |
保存重新生成即可。
需要在每篇文章的头部添加如下代码:
1 | copyright: true |
打开themes->next->layout->_partials->head.swig
文件,在顶部位置插入这样一段代码:
1 | <script> |
在写文章时,如需对该文章加密,需要在文章头部添加以下代码:
1 | password: ****** |
这样在打开文章时,会自动弹出密码输入框。
修改文件next/source/css/_common/components/post/post-reward.styl
,然后注释其中的函数wechat:hover
和alipay:hover
,如下:
1 | /* 注释文字闪动函数 |
asd
打开主题配置文件修改成这样就行了(links里面写你想要的链接):
1 | links_icon: link |
asd
我使用Valine来进行评论,具体的步骤如下:
在leanCloud)上注册一个账号
注册成功并登录后,你会得到两个数据:
复制并保存
打开主题配置文件,我的版本是v5.1.3,其中已经内置了Valine评论系统,只需要打开即可:
1 | valine: |
Valine 目前使用的是Gravatar 作为评论列表头像。
请自行登录或注册Gravatar,然后修改自己的头像。
评论的时候,留下在Gravatar注册时所使用的邮箱即可。
修改/themes/next/layout/_macro/post.swig
文件,在<span class="post-time">...</span>
标签后添加:
1 | {%if post.updated and post.updated > post.date%} |
在/themes/next/languages/zh_Hans.yml
中新增:
1 | post: |
修改主题配置文件/themes/next/_config.yml
,增加一行
1 | display_updated: true |
写文章的时候可以直接在文章开头设置更新时间:
1 | updated: 2018-01-01 12:30 |
没有参数的话将会默认显示.md
文件的修改日期
根目录下执行:
1 | npm install hexo-generator-searchdb --save |
在主题配置文件/theme/next/_config.yml
中添加配置:
1 | search: |
并修改数据
1 | local_search: |
asd
打开主题配置文件/theme/next/_config.yml
修改配置如下
1 | busuanzi_count: |
由上到下分别是
打开主题配置文件/theme/next/_config.yml
修改配置如下:
1 | # Canvas-nest |
asd
打开\themes\next\source\css\_custom\custom.styl
,向里面加入:
1 | // 主页文章添加阴影效果 |
asd
打开主题配置文件/theme/next/_config.yml
修改配置如下:
1 | # Automatically add list number to toc. |
asd
打开\themes\next\layout\_macro\post.swig
,在合适位置加入:
1 | {% if post.weather%} |
在写博文时,需要在头部新增weather
字段
1 | title: |
asd
]]>if
语句会自带一个弱类型的判断,下面我们来看看他的判断规则。1 | let a = '' |
1 | let a = null |
1 | let a = undefined |
1 | let a = NaN |
{}
1 | let a = {} |
[]
1 | let a = [] |
判断空数组
1 | let a = [] |
判断空对象
使用Object.keys()
方法
1 | let a = {} |
使用Object.getOwnPropertyNames()
方法
1 | let a = {} |
理财,不仅仅是投资,他还包括了你的收支规划、养老安排、子女教育、税务筹划等。它不仅仅是一个简单的工具,更是一种思维习惯和生活方式。
通货膨胀会让物价上涨,让你的钱变得越来越不值钱。通货膨胀会对两类人不友好:
学习理财有两个好处:
理财有3个常见的误区:
被动收入:
被动收入,就是你不用干活还能拿到的收入就是被动收入。当你的被动收入 > 全部支出时,就实现了财务自由
要先搞清楚自己的资产情况,再来确定可以拿出多少钱来去进行理财。可通过下面几点分析自己的资产情况。
资产负债表: 资产、负债、所有者权益
收入支出表:
也就是你的收入和支出的记录。也就是我们平常的记账。
拥有清晰、完整的收支记录,可以帮助我们衡量自己的消费情况,如下:
支出大致分两种:消费和资产
我们着重讲其中的医疗保险,它有如下特点:
不是所有药品都能报销
能提供基本的医疗需求保障,虽然必不可少,但是作用有限,仍旧需要商业保险作为补充。
重疾险:
重大疾病保险。当被保人得了某些重大疾病时,能够拿到一笔理赔金。主要弥补因为生病而带来的收入损失,确保在你生病后,还能保持原来的生活水平。
意外险:
当被保人受到意外伤害,造成了身故或残疾时,而赔付的费用。
医疗险:
主要能报销因为看病而产生的医疗费用。医疗险和医保最好配合使用,医疗险可以报销医保报销不了的部分。
寿险:
当被保人不幸身故,他指定的受益人,可以一次性拿到一笔理赔金。它主要保障自己家人未来的生活质量。
先保障,后理财。
保障型保险和理财型保险应分开购买,要先买保障型,后买理财型。
市场上有一种返还型保险,即“有病治病,没病返钱”。这就是一种理财型保险。往往收益很低,保障也很差。往往两不相顾,不建议在前期没有保障型保险的时候购买。
先大人,后孩子老人
应先保障大人,尤其在家里扮演收入支柱的。
保险,不是保感情,而是保责任。
通过借给他人钱,收取利息,赚的收益。
主要包括:
特点:
通过购买资产,赚的收益。
主要包括:
特点:
通过花钱雇佣专业人士,帮你做投资,获取收益。
主要包括:
特点:
在前一天,我们学到了各种理财产品。其第三类最适合我们小白投资,那就是【雇人投资的产品】。今天我们详细聊聊其中的基金。
基金,就是基金公司,雇佣了一个基金经理,用你的钱,来帮你做投资。
自己炒股费事费力,自己还不专业,容易赔。不如就找一个专业的人士,来帮你做投资。
相比较炒股,有以下优点:
按照基金经理不同的投资理念,可以分为【主动型基金】和【被动型基金】。
主动型基金,就是基金经理根据自己对市场的判断,把资金投资于他认为能赚钱的股票和债券里。希望通过这样的投资组合,跑赢市场。
缺点:
过于依赖基金经理:
如果基金经理的投资水平不高,或者判断失误,就容易亏损。
交易成本偏高:
主动型基金的申购费、赎回费、管理费偏高,这样会拉低你的实际效益。
被动型基金,也被叫做指数型基金。他是根据选择的特定的指数股票作为投资的对象,比如我们新闻中常听到的【上证500】、【沪深300】等。
被动型基金基本上是跟着大盘的走势,市场形势好就能盈利。所以某种程度上,买指数基金就是买国运。
只要中国的经济越来越好,中国的指数基金也会越来越好。
所以对于我们小白,通过投资指数基金是我们投资获利最好的方式。
优点:
管理费用低。
被动型基金的股票一般比较优质。
像【沪深300】指数基金股票,就是沪深股市中比较优质的300只股票。
能把人性弱点的负面影响降到最低。
对比主动型基金,收益完全依靠基金经理的操作。操作的好挣钱,一旦失误,就会赔钱。
而被动型基金,几乎可以忽略人为的因素,只要看指数就行。
对于小白来说,最好的投资方式就是【定投】
定投:就是在固定的时间,投入固定的钱。
如:在每个月发了工资之后,将相应的钱划到你的指数基金里去。
定投的好处:
减轻投资压力:
将你要投资的钱,分散开时间多次去投入。如:每个月投1K和一次性投1w,对你的压力就不同。
分散投资成本,降低风险:
基金的价格也是会波动的。每个月投入固定的钱,就不会相差太多。
变相强制储蓄资金,帮你存钱。
投资基金,是相比较股票等最适合我们小白的投资方式,而基金中的【被动型基金】是最适合我们普通人投资的基金类型。该种基金具有风险小、费用低等优点。最适合普通人去投资。
投资基金时,我们最好使用【定投】的方式。即:在固定的时间,投入固定的钱。
国债,收益高,且稳定。
国债的风险,是由政府来承担的。
国债就是由国家政府发行的债券。相当于是国家向老百姓借钱,并给每一个借了钱的人打了一张借条。在到期之后,国家会向老百姓返回本金,并给予一定数量的利息。一般来说,国债的利息要比银行的定期存款多一点。
国债逆回购,就是需要用钱的企业,把他持有的国债作为抵押物,抵押给你,来向你借钱。在到期之后,再把借来的钱连本带利还给你,我们就是赚取这个利息。
由于国债的稳定性和高收益,就算该借钱的企业最后没有还钱,由于我们持有该企业抵押给我们的国债作为保证,也不会太亏。基本可以认为是没有风险的。
购买国债逆回购的地方主要有2个:
上交所:上海证券交易所——土豪版
一般10W起投,加价也需要是10W的整数倍。他们的代码一般以【GC】开头。由于资金量较大,利率较高。
深交所:深圳证券交易所——平民版
一般1k起投,加价也是1k的整数倍。代码一般以【R】开头。由于资金量较小,利率较低。
一般作为小白的我们,要先选择购买“平民版”的深交所的逆回购,先来学习和练习。
国债逆回购的期限是固定的,分别是:
1天、2天、3天、7天、14天、28天、91天、182天。共9种。
不同期限的品种,收益率也不同,他们会根据市场的需求情况,各自上下浮动。
]]>注:逆回购到期之后,本金和利息将自动回到股票账户。
👇👇👇
首先需要在wxml
文件中写一个<canvas></canvas>
。给一个绝对定位样式,这样会隐藏到页面中。不过我习惯在调试的时候,让其显示出来。等调试ok之后,再将其隐藏起来。
1 | <canvas canvas-id="canvas" style="width:{{cWidth}}px;height:{{cHeight}}px; position: absolute;left:-1000px;top:-1000px;"></canvas> |
首先使用wx.chooseImage()
方法从相册选取一张照片
使用wx.getImageInfo()
拿到该图片信息,包括:
可以通过该原始宽/高来计算该图片在canvas
的大小。
使用wx.createCanvasContext()
来画图。
使用wx.canvasToTempFilePath()
将canvas
画板转化成最终的压缩后的图片路径
1 | wx.chooseImage({ |
在开发过程中,发现一个比较有意思的事情:🤔🤔
在使用wx.chooseImage()
方法时,在success()
回调函数中拿到选择的图片路径,在显示到页面上之后。有的会出现向左偏转90度的问题。而其他都是正常方向显示。
一开始猜测是图片体积大小影响显示方向。在经过若干测试后发现,并不是体积问题。
后来又猜测是图片的尺寸问题,但经过验证后确定,也并不是尺寸影响,😵
在wx.chooseImage()
后,继续使用wx.getImageInfo()
方法。在该方法的success()
回调函数中可以拿到图片的原始尺寸。:
1 | // 来自于微信官网文档 |
我上传的图片都是原始宽度小于原始高度的图片,如960*1920
的照片。在上传该图片后,打印该图片的原始宽高,会发现变成了1920*960
的尺寸。这也就是其“摔倒”的证据。所以可以在wx.getImageInfo()
中判断该图片的宽高。如果他的宽 > 高
,就说明该图片“摔倒了”。需要添加让其转过来的代码。否则不需要操作。
在小程序开发过程中,时常会遇到类似的问题。并且在各大论坛上也找不到相关的解决方法,只能通过自己的小操作来实现业务。
打铁还需自身硬呀~
]]>