MXOXW

Life always finds a way.

Sublime Text添加右键菜单

| Comments

修改注册表
文件添加右键菜单

1
2
3
4
5
6
7
8
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\Edit with SublimeText]
"Icon"="D:\\Program Files\\SublimeText\\sublime_text.exe,0"
@="Edit with SublimeText"

[HKEY_CLASSES_ROOT\*\shell\Edit with SublimeText\command]
@="\"D:\\Program Files\\SublimeText\\sublime_text.exe\" \"%1\""

文件夹添加右键菜单

1
2
3
4
5
6
7
8
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Folder\shell\Edit with Sublime Text]
"Icon"="D:\\Program Files\\SublimeText\\sublime_text.exe,0"
@="Edit with SublimeText"

[HKEY_CLASSES_ROOT\Folder\shell\Edit with Sublime Text\command]
@="D:\\Program Files\\SublimeText\\sublime_text.exe -a %1"

[-a 在当前窗口打开]

vs code 参数 https://code.visualstudio.com/docs/getstarted/tips-and-tricks#_command-line

附件:
Files_Edit_with_SublimeText
Folder_Edit_with_SublimeText

面试心得与总结---BAT、网易、蘑菇街

| Comments

之前实习的时候就想着写一篇面经,后来忙就给忘了,现在找完工作了,也是该静下心总结一下走过的路程了,我全盘托出,奉上这篇诚意之作,希望能给未来找工作的人一点指引和总结, 也希望能使大家少走点弯路 , 如果能耐心读完,相信对你会找到你需要的东西。

先说一下LZ的基本情况,LZ是四川某985学校通信专业的研究生(非计算机),大学阶段也就学了C语言,根本没想过最后要成为码农。大四才开始学java,研一下开始学android,所以LZ觉得自己开始就是一个小白,慢慢成长起来的。

一、心态

心态很重要!
心态很重要!
心态很重要!

重要的事情说三遍,这一点我觉得是必须放到前面来讲。

找工作之前,有一点你必须清楚,就是找工作是一件看缘分的事情,不是你很牛逼,你就一定能进你想进的公司,都是有一个概率在那。如果你基础好,项目经验足,同时准备充分,那么你拿到offer的概率就会比较高;相反,如果你准备不充分,基础也不好,那么你拿到offer的概率就会比较低,但是你可以多投几家公司,这样拿到offer的几率就要大一点,因为你总有运气好的时候。所以,不要惧怕面试,刚开始失败了没什么的,多投多尝试,面多了你就自然能成面霸了。得失心也不要太重,最后每个人都会有offer的。

还有一个对待工作的心态,有些人可能觉得自己没有动力去找一个好工作。其实你需要明白一件事情,你读了十几二十年的书,为的是什么,最后不就是为了找到一个好工作么。现在到了关键时刻,你为何不努力一把呢,为什么不给自己一个好的未来呢,去一个自己不满意的公司工作,你甘心吗?

想清楚这一点,我相信大多数人都会有一股干劲了,因为LZ刚刚准备开始找实习的时候,BAT这种公司想都不敢想,觉得能进个二线公司就很不错了,后来发现自己不逼自己一把,你真不知道自己有多大能耐,所以请对找工作保持积极与十二分的热情,也请认真对待每一次笔试面试。

eval和(1, eval)的区别

| Comments

eval直接调用时,使用调用时的作用域
eval间接调用时,使用全局作用域

1
2
3
4
5
6
7
var x = 1;
function test(){
var x = 2;
eval('console.log("x: " + x)');
(1, eval)('console.log("x: " + x)');
}
test();

一些间接调用的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
(1, eval)('...')
(eval, eval)('...')
(1 ? eval : 0)('...')
(__ = eval)('...')
var e = eval; e('...')
(function(e) { e('...') })(eval)
(function(e) { return e })(eval)('...')
(function() { arguments[0]('...') })(eval)
this.eval('...')
this['eval']('...')
[eval][0]('...')
eval.call(this, '...')
eval('eval')('...')

直接调用的例子:

1
2
3
4
5
6
7
8
eval('...')
(eval)('...')
(((eval)))('...')
(function() { return eval('...') })()
eval('eval("...")')
(function(eval) { return eval('...'); })(eval)
with({ eval: eval }) eval('...')
with(window) eval('...')

ES5直接调用定义的第一段里 - 是这样一个事实:调用表达式里的 “eval”应当是引用,而不是值

1
2
3
4
5
eval(); // <-- 调用括号左边的表达式 — "eval" — 计算出一个引用
(eval)(); // <-- 调用括号左边的表达式 — "(eval)" — 计算出一个引用
(((eval)))(); // <-- 调用括号左边的表达式 — "(((eval)))" — 计算出一个引用
(1,eval)(); // <-- 调用括号左边的表达式 — "(1, eval)" — 计算出一个值
(eval = eval)(); // <-- 调用括号左边的表达式 — "(eval = eval)" — 计算出一个值

参考:
eval 的一些不为人知道的用法 - 开源中国社区

Global eval. What are the options? — Perfection Kills

H5下拉刷新

| Comments

H5实现下拉刷新, 上拉加载的效果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
<style>
.trantionTop{-webkit-transition:-webkit-transform .6s;-moz-transform:-moz-transform .6s;-ms-transform:-ms-transform .6s; -o-transform:-o-transform .6s;transition:transform .6s;}
.mod_loading{text-align:center;padding:20px 0;text-align:center;color:#000;line-height:21px;}
.mod_loading_inner {margin:0 auto;text-align: center; position: relative; width: 140px; border-radius: 6px; font-size: 14px; padding: 45px 0 10px 0;color:#000; }
.mod_loading_icon { position: absolute; top: 15px; left: 50%; margin-left: -10px; width: 18px; height: 18px; border: 1px solid #FF5A54; -webkit-border-radius: 20px;border-radius: 20px; -webkit-animation: gif 1s infinite linear; animation: gif 1s infinite linear; clip: rect(0 auto 17px 0) }
@keyframes gif {
0% { -webkit-transform: rotate(0deg)
; transform: rotate(0deg); }

100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); }
}
@-webkit-keyframes gif {
0% { -webkit-transform: rotate(0deg); }
100% { -webkit-transform: rotate(360deg); }
}
</style>

</head>
<body>
<div class="mod_container" style="-webkit-transform: translate3d(0,0px,0);-webkit-backface-visibility:hidden;-moz-backface-visibility: hidden; -ms-backface-visibility: hidden; backface-visibility: hidden; -webkit-perspective: 1000; -moz-perspective: 1000; -ms-perspective: 1000; perspective: 1000;">

<div class="mod_loading" id="pullTop" style="position:absolute;top:-50px;z-index:-1;width:100%;margin:0 auto;">下拉可以刷新</div>

<div class="mod_loading" id="pullBottom" style="position: static;">
<div class="mod_loading_inner">
<i class="mod_loading_icon"></i>
正在加载,请稍候…
</div>
</div>
</div>
<script type="text/javascript" src="http://cdn.bootcss.com/zepto/1.1.6/zepto.min.js"></script>
<script type="text/javascript">
// 下拉刷新, 上拉加载
var PulldownRefresh = function(){
this.init.apply(this,arguments);
}

PulldownRefresh.prototype = {
init: function (options){
this.ele = options.ele;

$(document).on({
'touchstart': $.proxy(this.start, this),
'touchmove': $.proxy(this.move, this),
'touchend': $.proxy(this.end, this),
'touchcancel': $.proxy(this.end, this)
});
},
start: function (e) {
this.distance = 0;
this.startY = e.touches[0].clientY;
this._scrollTop = $(window).scrollTop();
this.ele.removeClass('trantionTop');
},
move: function (e){
var currentY = e.changedTouches[0].clientY;
this.isUp = currentY > this.startY;

if (this._scrollTop <= 0 && this.isUp) {
e.preventDefault();
this.distance = currentY - this.startY;
this.distance = Math.floor(this.distance * .4);
if (this.distance >= 20) {
$('#pullTop').html('松开立即刷新');
} else {
$('#pullTop').html('下拉可以刷新');
}

this.ele.css("-webkit-transform", "translate3d(0," + this.distance + "px,0)");
} else if ((this._scrollTop + $(window).height()) >= $('body').height() && !this.isUp) {
e.preventDefault();
this.distance = this.startY - currentY;
this.distance = Math.floor(this.distance * .4);
if (this.distance >= 20) {
$('#pullBottom').html('松开立即加载');
} else {
$('#pullBottom').html('上拉加载更多');
}
this.ele.css("-webkit-transform", "translate3d(0, -" + this.distance + "px,0)");
}
},
end: function (e){
if (this.distance >= 20) {
if (this.isUp) {
this.ele.addClass('trantionTop').css("-webkit-transform", "translate3d(0, 30px,0)");
$('#pullTop').html('正在加载,请稍候…');
setTimeout(function(){
location.reload();
}, 500);
}else{
if ($('.mod_download_lk').length > 3) {
middleTip();
this.ele.addClass('trantionTop').css("-webkit-transform", "translate3d(0,0,0)");
$(window).scrollTop($(window).scrollTop() + 100);
return;
}

$('#pullBottom').html('<div class="mod_loading_inner"><i class="mod_loading_icon"></i>正在加载,请稍候…</div>');
this.ele.addClass('trantionTop').css("-webkit-transform", "translate3d(0,0,0)");
// TODO
$(window).scrollTop($(window).scrollTop() + 100);
}
}else if(this.ele.css("-webkit-transform") != 'translate3d(0px, 0px, 0px)'){
this.ele.addClass('trantionTop').css("-webkit-transform", "translate3d(0,0,0)");
}
}
}

var pulldowntoreload = new PulldownRefresh({
"ele": $('.mod_container')
});
</script>

</body>
</html>