ARTS | 0x002
Algorithm
Leetcode 146 Flip Game II
是一个不太一样的backtrack题目,一般的bt题目都是输出所有答案,从题目需要的输出上会考虑是否有bt暴力更好的方式,发现还是要使用bt来做,根据论坛的一篇神答案时间复杂度是O(n!!),有dp + game theory简化方法太复杂,迟些再进行研究
var canWin = function(s) {
let result = false;
s = s.split('');
let bt = () => {
let win = false
for(let i = 0; i < s.length;i++) {
if(s[i] === s[i + 1] && s[i] === '+') {
s[i] = s[i + 1] = '-';
win = !bt();
s[i] = s[i + 1] = '+';
if(win) return true;
}
}
return false;
}
return bt();
};
Review
(CAP Theorem)[http://robertgreiner.com/2014/08/cap-theorem-revisited/]
经典的CAP原则,讨论了基本的CAP概念的文章
Consistency (一致性) - A read is guaranteed to return the most recent write for a given client.
关于一致性,一般大厂只会完成最终一致性的保证,绝大部分情况够用,但在理论上还是牺牲了C。
Availability - A non-failing node will return a reasonable response within a reasonable amount of time (no error or timeout). 可用性,基本上是最看重
Partition Tolerance - The system will continue to function when network partitions occur. 网络分区保证,对于P一直想不到一个比较好的词来但是基本上来说,P是必须要实现的,所以最终是CP和AP系统中选一个,也就是所谓的software trade off。
Tip && Share
Html5 postMessage的跨域执行,因为处理了一把ionic里的recaptcha问题,做了一些跨域的小操作,进行一下记录
postMessage参数:
targetWindow.postMessage(message, targetOrigin, [transfer]);
父页面
<iframe id='ifr' src="http://iframeurl" hidden frameborder="0"></iframe>
<script>
window.onload = function () {
var ifr = document.querySelector('#ifr');
console.log('postmessage')
ifr.contentWindow.postMessage({a: 1}, '*');
}
var listener = function(e) {
console.log('bar say: '+ e.data);
if(e.data.token) {
window.captchaToken = e.data;
}
}
window.addEventListener('message', listener, false);
</script>
iframe里
<script>
let listener = function (e) {
if (e.data.a) {
console.log('foo say: ' + e.data.a);
e.source.postMessage('get', '*');
}
}
window.addEventListener('message', listener, false)
</script>