用《三体》中的智子来解释并发

突然想到《三体》第一部中的智子可以用来很好的解释并发。

看过《三体》的话应该知道,三体星人为了遏制地球的基础理论研究发展,从四百光年外的三体星向地球发射了两枚智子。(没记错的话,应该是利用了书里提出的恒星加速原理才得以发射到这么远的距离)

智子到达地球之后,由于智子的运动速度接近光速,它们可以在地球上的任意两点之间进行“瞬移”,可以认为它们“无所不在”。

因此三体星人仅以两枚智子的数量对地球上所有的高能粒子对撞机进行实验干扰,使得实验结果出现偏差,从而封锁了地球基础理论科学研究的进步。

如果把能够高速移动的智子看作高速运转的cpu,把地球上的各个粒子对撞机看作计算机中的各个线程,那么就……

阅读更多

浅析多线程编程对程序的性能提升

目录

1. 前言
2. 串行、并发与并行
3. 单线程编程与多线程编程
4. IO密集型程序与CPU密集型程序
5. 实例:利用多线程提升累加程序的性能
    (1)功能描述
    (2)多线程优化思路
    (3)代码实现
    (4)测试结果

1、前言

最近在巩固java多线程编程相关的知识,并且做了一些实验。

今天就用这一篇文章来总结下最近所学到的关于多线程编程方面的知识点,并且用一个实例来具体说明问题。……

阅读更多

SSR服务端配置说明(包括多用户配置)

存放位置

SSR的配置信息存放在vps上的/etc/shadowsocks.json文件中。
可以通过cat命令查看,或者通过vi命令进行编辑

查看
cat /etc/shadowsocks.json
编辑
vi /etc/shadowsocks.json

配置项介绍

当第一次在vps上安装好shadowsocks之后,shadowsocks.json文件的内容大致如下:

{
    "server": "0.0.0.0",                    // 监听地址,不用修改
    "server_ipv6":"[::]",                   //......

阅读更多

使用Foxmail管理qqmail以及gmail

邮箱账号多了以后,就需要一个统一的客户端来管理所有的邮箱。
foxmail就是一个比较好的邮箱客户端工具。

我用foxmail配置了qq邮箱和google邮箱,用于平时的邮件收发。
下文介绍下如何在foxmail配置qq邮箱和google邮箱。

1.foxmail配置qq邮箱

在foxmail中添加新的账号,并且输入qq邮箱以及密码,不出意外的话,会提示如下错误:

提示说请使用授权码登录,那么授权码是什么呢?(其实提示中给出的链接有解释,可以直接访问查看)

打开qq邮箱web端,找到设置–账号:

在这个页面找到如下的设置,开启POP3/SMTP服务:

点击生成授权码……

阅读更多

算法 可配置过滤时间段的有效工时算法

今天分享一下进公司以来我做的最“恶心”的项目中用到的一个算法。

故事背景

之所以说这个项目恶心,是因为从接到需求的那一刻起我就觉得做完这个项目我可能就会被全公司研发人员的唾沫星子给淹没,而且这个项目还映射着一个从华为挖过来的一个高管在公司里的起起落落。

这个项目的全称叫“工时任务填报审批系统”。

项目的功能是员工每日进行工时填报,每天完成了哪些工作内容,每个工作内容用了多少工时,然后提交到直接部门领导那里审批,部门领导也需要填写工时,填写的工时也由其直属领导进行审批。然后每月统计出所有员工的有效工时(领导审批时如果认为你填报的工作内容不值得你填写的那么多工时,还可以扣你的工时。。。……

阅读更多

踩坑 JavaScript循环中的闭包引起的问题

关于for循环中的闭包问题,其实早在之前我学习闭包的时候,就看过不下两篇文章提到过了,算是一个很经典的问题了。

尴尬的是,当同事叫我帮忙看这个问题的时候,我虽然一眼就看出了问题产生的原因,但是却死活想不起来解决方法,没办法只好又去google了一下才解决。

所以今天额外写一篇采坑记录加深印象

问题描述

问题产生的原因就是在for循环中使用了闭包,导致了“出乎意料”的结果。

代码演示:

var funcArr = [];
for(var i=1;i<=10;++i){
    var func = function(){
        console.log("这是第 "......

阅读更多

sprite框架之完全体(包含最新版代码)(终)

从17年的12月,到现在18年的4月,历时5个月,spirte框架从一开始的一个简单雏形,慢慢变得强大起来。

从简单的require+Vue+VueRouter实现了框架的整体骨架,到后来和公司的前端部门一起配合实现了今日校园和微信的SDK初始化,再到跟公司的权限体系结合后实现的页面授权和按钮授权,再到游客模式,再到可配置的页面按需加载的实现,最后又实现了可配置的多入口应用实现,还支持了关于公司的对于移动应用的合并式二开扩展模式。

在这5个月的过程中,我踩了不计其数的坑,框架代码也改的面目全非,我想现在的sprite框架代码基本就代表了我现如今最高的前端水平了。

今天就在这里展示一下这五……

阅读更多

sprite框架之可配置的页面按需加载(六)

如果看过我之前的文章,你会知道我在sprite框架的时候,是把应用中的所有页面js文件一次性全部加载,然后再初始化Vue对象的。

在第一次初始化时就将所有的页面和组件准备好,这是典型的单页应用的做法。

这样做的优点:

  1. 在应用内部切换页面时渲染速度非常快。
  2. 由多组件构成的复杂页面的渲染效果是整体渲染,而不是分块渲染(比如先出现上面的组件再出现下面的组件)。

这样做的缺点:

  1. 当应用的规模比较庞大时,在初始化应用时请求所有的js文件会影响应用的加载速度。
  2. 加载所有的页面,即使用户并不需要访问的页面,这会造成额外的流量消耗。

虽然以目前的网络速度和用户的平均的流量值,这些缺点并不造……

阅读更多

Vue 在使用异步Ajax时mint-ui的懒加载组件InfiniteScroll存在的坑

mint-ui是饿了么提供的一套vue移动组件,使用起来还是很方便的。

其中有一类组件是用于分页加载数据的,比如Infinite Scroll和Loadmore这两个组件。

最近同事在使用Infinite Scroll实现数据分页懒加载时,遇到了一个奇怪的坑,我花了不少时间才定位出来原因,今天就写到博客里记录一下避免以后再次踩坑。

先来看看Infinite Scroll的介绍:

Infinite Scroll的主要属性为v-infinite-scroll和infinite-scroll-distance,v-infinite-scroll为触发加载时执行的函数,infinite……

阅读更多