从LongAdder看更高效的无锁实现
接触到AtomicLong的原因是在看guava的LoadingCache相关代码时,关于LoadingCache,其实思路也非常简单清晰:用模板模式解决了缓存不命中时获取数据的逻辑,这个思路我早前也正好在项目中使用到。
低噪声、高可扫读;标题、摘要、来源、标签一目了然。
采集自各技术站点的近期文章。
接触到AtomicLong的原因是在看guava的LoadingCache相关代码时,关于LoadingCache,其实思路也非常简单清晰:用模板模式解决了缓存不命中时获取数据的逻辑,这个思路我早前也正好在项目中使用到。
这里的Bash脚本技术技巧最初是来自谷歌的“Testing on the Toilet” (TOTT)。这里是一个修订和扩增版本。
上篇中,我们介绍了TCP的协议头、状态机、数据重传中的东西。但是TCP要解决一个很大的事,那就是要在一个网络根据不同的情况来动态调整自己的发包的速度,小则让自己的连接更稳定,大则让整个网络更稳定。在你阅读下篇之前,你需要做好准备,本篇文章有好些算法和策略,可能会引发你的各种思考,让你的大脑分配很多内存和计算资源,所以,不适合在厕所中阅读。
TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面。所以学习TCP本身是个比较痛苦的过程,但对于学习的过程却能让人有很多收获。关于TCP这个协议的细节,我还是推荐你去看W.Richard Stevens的《TCP/IP 详解 卷1:协议》(当然,你也可以去读一下RFC793以及后面N多的RFC)。另外,本文我会使用英文术语,这样方便你通过这些英文关键词来查找相关的技术文档。
从其他语言转向Javascript时,通常都会遇到一些困惑性问题。比如,Java中的HashMap在Javascript中如何实现?Javascript面向对象式编程如何实现继承?如何实现通用的iterator对集合对象做遍历?如何对Array实现快速排序?….
HTML head 头部分的标签、元素有很多,涉及到浏览器对网页的渲染,SEO 等等,而各个浏览器内核以及各个国内浏览器厂商都有些自己的标签元素,这就造成了很多差异性。移动互联网时代,head 头部结构,移动端的 meta 元素,显得更为重要。了解每个标签的意义,写出满足自己需求的 head 头标签,是本文的目的。
有时候搭建一个FTP是很麻烦的事情,还有权限管理和用户配置等,在要求不高的情况下Linux自带的sftp可以更好更方便的完成ftp的工作。另外,FTP密码是明文传输的,存在一定的安全隐患,而使用ssh协议22号端口的sftp就没有这个问题!
在苹果手机浏览器点击一个a链接或者带有点击效果的链接的时候常常都出现高亮的提示颜色快,这相当于一个提醒,提醒用户你已经点击到这个按钮了,按钮反馈一个状态给用户,告知用户,但是有时候我们往往也不需要这样的功能。那么可以使用针对webkit写一个叫做tap-lighlight-color的属性值让其消失~
有用户反馈内部MIS系统慢,页面加载耗时长。前端同学们开组会提及此事,如何解决慢的问题。 最致命的是:偶发!你不能准确知道它抽风的时间点,无法在想要追查问题的时候必现它。 这只是一方面,另外,慢的可能实在太多了,那么问题来了,是前端导致的还是后端的问题? 对慢的定义也有待商榷,多久算慢?如果这个页面加载大量数据耗时增加那我认为这是正常的。但这个时限超过了一个合理的自然值,就变得不那么正常了,比如四五十秒,一分多钟。 最奇葩的是,如此久的耗时居然不会报超时错误,而是拿到正确返回后将页面呈现了出来!
著作权其实是一个很搞的东西。比如说,这个信息网络传播权,其实质是覆盖到前述的复制权和发行权的,但却要单列出来,这和我国著作权法一路沿袭过来有关。其它权利又是个活门,几乎就是个“不管权”,看着就像什么都能装的样子,一点也不符合法的“精准”,倒像个什么什么衙门的红头文件。其它权利是用于未来的发展的,不过在现实操作中,也有权利出现过,比如“收回权”:著作权人声明本作品收回,以后不许公开传播。
2011年前我写过一篇文章,讲到自己发现的两大趋势:第一是人与人之间的沟通越来越少地采用“同步”(电话)的方式,而更多采用“异步”(邮件、短信等,当时还没有微信);第二是有越来越多的人“实名上网”,不一定用自己的真名,但是希望在网络上建立通行的“身份”。当时我也好奇:随着时代的发展,我们的生活还会发生哪些变化? 后来我才逐渐认识到,这些变化都只是表象,实质是两个字:互联。
解释器引擎最终执行op的函数是zend_execute,实际上zend_execute是一个函数指针,在引擎初始化的时候zend_execute默认指向了execute,这个execute定义在{PHPSRC}/Zend/zend_vm_execute.h
所谓的千分位形式,即从个位数起,每三位之间加一个逗号。例如“10,000”。针对这个需求,做了两个方案,方法一和方法二的强烈对比表明,字符串操作的效率比数组操作的效率要高得多;方法六的测试结果告诉我们,代码长短跟性能高低没有关系。方法四的综合性能是最好的(但为何num为100的时候,性能有所降低呢,这个实在不解)。
整型溢出有点老生常谈了,bla, bla, bla… 但似乎没有引起多少人的重视。整型溢出会有可能导致缓冲区溢出,缓冲区溢出会导致各种黑客攻击,比如最近OpenSSL的heartbleed事件,就是一个buffer overread的事件。在这里写下这篇文章,希望大家都了解一下整型溢出,编译器的行为,以及如何防范,以写出更安全的代码。
在Wealthfront我们是一个函数式编程的超级粉丝。强调不变性和函数式风格意味着更少的“意外”(surprises),因为副作用是有限的或不存在的。我们能将独立的组件迅速构建出大型系统,通过组合的方式组合组件。函数式编程原则直接应用在大多数语言中,即使他们不是被定义为函数式。同样适用非函数式的css。让我们看下我们最喜欢的(和最讨厌的)一些特性在样式语言中。
我对函数的核心思路:我提出代码最小处理单元的概念:一个基本操作(赋值,比较等),一个函数调用(包括调用后判断返回值进行判断)都看成一个最小处理单元。那么,一个函数,最小处理单元合理的个数范围在7以内。如果超过了7,你就要考虑把他们拆分成多个函数了(为什么是7?人同时能够处理的信息不超过7个)。
利用text-shadow我们可以构建很多不可思议的进类似3D的文字效果,还可以当做一个伪按钮。利用shadow中的值重复投影产生绚丽的效果,感觉像吃了炫迈一样。
SSDB 的网络协议非常简单, 而且是业务无关的, 所以你可以把 SSDB 的网络协议应用于几乎所有类型的应用! 只要遵循 SSDB 的网络协议, 你就可以使用 ssdb-cli 命令行工具来连接, 与服务器交互, 或者方便调试. 你甚至可以使用 nc 命令来和任何一个支持 SSDB 网络协议的服务器交互.
在知乎上,有个人问了这样的一个问题——为什么vfork的子进程里用return,整个程序会挂掉,而且exit()不会?并给出了如下的代码,下面的代码一运行就挂掉了,但如果把子进程的return改成exit(0)就没事。
传统EDSM最常见的方式就是I/O事件的异步回调。基本上都会有一个叫做dispatcher的单线程主循环(又叫event loop),用户通过向dispatcher注册回调函数(又叫event handler)来实现异步通知,从而不必在原地空耗资源干等,在dispatcher主循环中通过select()/poll()系统调用来等待各种I/O事件的发生,当内核检测到事件触发并且数据可达或可用时,select()/poll()会返回从而使dispatcher调用相应的回调函数来对处理用户的请求。所以异步回调与其说是通知,不如说用委托更恰当。