blog icon indicating copy to clipboard operation
blog copied to clipboard

该repo的issue为这个博客的数据源:

Results 21 blog issues
Sort by recently updated
recently updated
newest added

[intro]: 团队一个小伙伴儿提了个问题,二维数组交叉组合分组算法怎么实现?一听这怎么着复杂度都是一个O(n^n)的算法实现了,什么业务场景需要这么折腾? 团队一个小伙伴儿提了个问题,二维数组交叉组合分组算法怎么实现?一听这怎么着复杂度都是一个O(n^n)的算法实现了,什么业务场景需要这么折腾? 了解了下,背景是这样:一个用户可能有N个标签组,每个标签组有不同的标签属性;需求是,需要根据这N个标签组的属性组合生成用户组。 把业务抽象之后,也可以这么描述: > 给定一个不定长的二维数组,例如:`[['A1', 'A2', 'A3'], ['B1', 'B2']]` > 实现一个方法输出:`[['A1', 'B1'],['A1', 'B2'],['A2', 'B1'],['A2', 'B2'],['A3', 'B1'],['A3', 'B2']]`。 这确实就不可避免的需要n的n方算法实现了。 ### 场景一:矩阵的行列式展开(又叫笛卡尔乘积) 以上场景类似矩阵的行列式展开算法实现,实现细节如下;但涉及核心线性代数基础(比如矩阵的连乘实现)需再探究。 ```javascript /** * 二维数组交叉组合分组算法实现 * * @param...

Tools&Framework

[intro]: PM2是一个带有负载均衡功能的Node应用的进程管理器。PM2可以利用服务器上的所有CPU,并保证进程永远都活着,0秒的重载,部署管理多个Node项目。PM2是Node线上部署完美的管理工具…… > 本文来源:[https://github.com/jawil/blog/issues/7](https://github.com/jawil/blog/issues/7/) `PM2`是一个带有**负载均衡**功能的`Node`应用的进程管理器。`PM2`可以利用服务器上的**所有CPU**,并保证进程永远都活着,**0秒的重载**,部署管理**多个**Node项目。`PM2`是`Node`线上部署完美的管理工具。 #### 1、基本指令 ``` npm install pm2 -g : 全局安装。 pm2 start app.js : 启动服务,入口文件是app.js。 pm2 start app.js -i [n] --name [name] : 启动n个进程,名字命名为name。 npm restart...

Nodejs

[intro]: 很多Node.js初学者都会有这样的疑惑,Node.js到底是单线程的还是多线程的?本文解释了Node.js对于单/多线程的关系和支持情况。 > 转自:https://github.com/DoubleSpout/threadAndPackage/blob/master/chapter.7.thread_and_process.md ,有改动 ## 前言 很多Node.js初学者都会有这样的疑惑,Node.js到底是单线程的还是多线程的?本文解释了Node.js对于单/多线程的关系和支持情况。同时本文还将列举一些让Node.js的web服务器线程阻塞的例子,最后会提供Node.js碰到这类cpu密集型问题的解决方案。 阅读本文前,你需要对Node.js有一个初步的认识,熟悉Node.js基本语法、`cluster`模块、`child_process`模块和`express`框架;接触过`apache`的`http`压力测试工具`ab`;了解一般web服务器对于静态文件的处理流程。 ## Node.js和PHP 早期有很多关于Node.js争论的焦点都在它的单线程模型方面,在由Jani Hartikainen写的一篇著名的文章[《PHP优于Node.js的五大理由》](https://codeutopia.net/blog/2012/04/24/5-ways-how-php-is-better-than-node-js/)中,更有一条矛头直接指向Node.js单线程脆弱的问题。 > 如果PHP代码损坏,不会拖垮整个服务器。 PHP代码只运行在自己的进程范围中,当某个请求显示错误时,它只对特定的请求产生影响。而在Node.js环境中,所有的请求均在单一的进程服务中,当某个请求导致未知错误时,整个服务器都会受到影响。 Node.js和Apache+PHP还有一个非常不同的地方就是进程的运行时间长短,当然这一点也被此文作为一个PHP优于Node.js的理由来写了。 > PHP进程短暂。 在PHP中,每个进程对请求持续的时间很短暂,这就意味着你不必为资源配置和内存而担忧。而Node.js的进程需要运行很长一段时间,你需要小心并妥善管理好内存。比如,如果你忘记从全局数据中删除条目,这会轻易的导致内存泄露。 在这里我们并不想引起一次关于PHP和Node.js孰优孰劣的口水仗,PHP和Node.js各代表着一个互联网时代的开发语言,就如同我们讨论跑车和越野车谁更好一样,它们都有自己所擅长和适用的场景。 我们可以通过下面这两张图深入理解一下PHP和Node.js对处理Http请求时的区别。 PHP的模型: ![apache php](http://farm4.staticflickr.com/3738/10973346514_f6f21452e7_o.png) Node.js的模型: ![Node.js Request](http://farm3.staticflickr.com/2831/10973175075_d5e9e46ba5_o.png) 所以你在编写Node.js代码时,要保持清醒的头脑,任何一个隐藏着的异常被触发后,都会将整个Node.js进程击溃。但是这样的特性也为我们编写代码带来便利,比如同样要实现一个简单的网站访问次数统计,Node.js只需要在内存里定义一个变量`var count=0;`,每次有用户请求过来执行`count++;`即可。...

Nodejs

[intro]: 如何通过周密的计划,协调一切资源,通过超强的执行力完成项目目标,并及时复盘迭代优化 [type]: slider [theme]: night ### 什么是项目管理 ![假如你是这个餐厅的老板,你只有两个员工,你会怎么安排这些工作?](https://img002.qufenqi.com/products/f5/b4/f5b446b566028affc6a54752eca84ff8.jpg) 假如你是这个餐厅的老板,你只有两个员工,你会怎么安排这些工作? ### 问题 - 怎么给排期是合理的? - 什么情况下需要参与到产品决策? - 老板究竟想知道什么?想要什么? - 如何对待零散的需求?很忙但不知道在忙啥? - 项目难度好像有点大,排期怎么排? > 通过周密的计划,协调一切资源,通过超强的执行力完成项目目标,并及时复盘迭代优化 ### 关键词 - 计划 - 资源...

Tools&Framework

[intro]: 在通过Nodejs做中间件服务,实现的前后端彻底分离架构下,前端需要更多关注以前很少关注的问题,比如,CSRF;这类的架构下CSRF防御会有哪些问题呢? [image]: https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1492116940392&di=39388c32bf98779461bd036c6c04586e&imgtype=0&src=http%3A%2F%2Fi0.hdslb.com%2Fbfs%2Farchive%2Fba340b1b33e22f70ff02b41a1faad56d2eb7c21a.jpg ## 背景 ### 1、什么是CSRF攻击? 这里不再介绍CSRF,已经了解CSRF原理的同学可以直接跳到:“3、前后端分离下有何不同?”。 不太了解的同学可以看这两篇对CSRF介绍比较详细的参考文章: * [CSRF 攻击的应对之道](https://www.ibm.com/developerworks/cn/web/1102_niugang_csrf/) * [浅谈CSRF攻击方式](http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html) 如果来不及了解CSRF的原理,可以这么理解:**有一个人发给你一个搞(mei)笑(nv)图片链接,你打开这个链接之后,便立刻收到了短信:你的银行里的钱已经转移到这个人的帐户了**。 ### 2、有哪些防御方案? 上面这个例子当然有点危言耸听,当然可以确定的是确实会有这样的漏洞:你打开了一个未知域名的链接,然后你就自动发了条广告帖子、你的Gmail的邮件内容就泄露了、你的百度登录状态就没了…… 防御方案在上面的两篇文章里也有提到,总结下,无外乎三种: 1. 用户操作限制,比如验证码; 2. 请求来源限制,比如限制HTTP Referer才能完成操作; 3. token验证机制,比如请求数据字段中添加一个token,响应请求时校验其有效性; 第一种方案明显严重影响了用户体验,而且还有额外的开发成本;第二种方案成本最低,但是并不能保证100%安全,而且很有可能会埋坑;第三种方案,可取! **token验证的CSRF防御机制**是公认最合适的方案,也是本文讨论的重点。 ###...

Backend
Nodejs

[intro]: 有一种工作流,在mergerequest的钩子中完成代码规范监测、单元测试、codereview之后,merged后需要自动打tag,然后用tag上线;这个工具就是用以自动完成打tag的动作的…… > **项目地址:** https://github.com/xiongwilee/gitlab-autotag ### 示例 Merge Request 自动打tag例如: ``` online_20171221195930 ``` 钉钉群里通知的内容,参考: ``` MR合并提示 MR仓储: auto_store 上线信息: upd : 测试tag 合并分支: f_wenqi_master 上线Tag: online_20171221195930 开发人员: luowenqi 合并人员: luowenqi...

Tools&Framework

[intro]: 整理了下2018年想看的和看过了的书单,有星星标记的是看过了的;“★★★”标记是强烈推荐,有兴趣的小伙伴儿可以参考 [image]: https://img002.qufenqi.com/products/61/15/61150afbf487e51408d192a6e2eae95b.jpg [TOC] ## 2018年书单 * 经济 * 文一:《伟大的中国工业革命:“发展政治经济学”一般原理批判纲要》 ★★☆ * 野口悠纪雄:《战后日本经济史》#值得二刷# ★★★ * 廖连中:《企业融资:从天使投资到IPO》★★★ * Michael Lewis:《大空头》 * 克里斯蒂娜·柯利娅:《3G资本帝国》 * 安德鲁·罗斯·索尔金:《大而不倒》 * 本杰明·格雷厄姆:《聪明的投资者》 * 政治&社科&历史 * 傅高义:《邓小平时代》#有机会看英文原版#...

Tools&Framework

[intro]: 现在已经有一些开源的基于issues博客方案了,但基本都是在客户端完成githubApi的调用,但是基于浏览器的调用方案基本不能绕过api访问频次的问题。Gracejs作为前后端分离框架,具备强悍的数据代理功能,结合github的API,不仅能实现博客系统,还能完成登录和评论功能…… [image]: https://img003.qufenqi.com/products/8a/0e/8a0efc50e00e4e45c42be793d3aee883.jpg **iBlog** 是完全基于[github API](https://developer.github.com/v3/) 并充分利用 [gracejs](https://github.com/xiongwilee/koa-grace) 数据代理特性实现的全功能博客方案。 * **项目地址:** [https://github.com/xiongwilee/iblog](https://github.com/xiongwilee/iblog) * **体验地址:** [https://iblog.wilee.me](https://iblog.wilee.me) *(访问比较慢是因为用的最最低配的aws ECS服务)* ## 简介 github作为全球最大同性交友网站,已经有人在其上面做了很多匪夷所思的事情,利用issues功能写博客就是其中之一…… ### 背景 现在已经有一些开源的基于github issues的博客系统了,例如: [cms.js](https://github.com/cdmedia/cms.js)等。但这些在客户端(浏览器)对github api调用的实现方案,有几个问题: 1. github api...

Nodejs

[intro]:在角色分工明确的团队里,什么样的条件才算是最优雅的联调和测试环境?在大厂里肯定都有很多高级的解决方案,比如这些…… > **项目地址:** https://github.com/xiongwilee/docker-compose-boilerplate > **基本特性:** > 1. 快捷部署多人nginx+php的开发测试环境,也可以扩展构建其他语言; > 2. 基于Docker和docker-compose,不依赖K8S等高级编排工具,成本低廉、部署简单; > 3. Docker内置集成jenkins,一键添加开发测试角色,无需额外配置; > 4. 支持微服务架构,适用于小公司or敏捷项目团队,**也可以作为Docker学习入门的case**; ## 一、背景 在角色分工明确的团队里,什么样的条件才算是最优雅的联调和测试环境?在大厂里肯定都有很多高级的解决方案,比如这些: - [docker搭建大规模测试环境的实践](https://yq.aliyun.com/articles/163420) / [测试开发之路--k8s 下的大规模持续集成与环境治理](https://testerhome.com/topics/15058) - [DevOps落地实践:BAT系列:CICD:iPipe vs CCI](https://blog.csdn.net/liumiaocn/article/details/77869653)...

Tools&Framework

[intro]: 本文介绍了在Docker容器中构建平滑重启Nodejs服务会遇到的两个问题;文章比较长,如时间宝贵,可以直接跳转到文末看结论即可。本文翻译自:@becintec/building-graceful-node-applications-in-docker-4d2cd4d5d392 > 原文:https://medium.com/@becintec/building-graceful-node-applications-in-docker-4d2cd4d5d392 当你有一个启动了并稳定运行,而且能提供流量的Node应用,你可能无法做到高枕无忧。比如有些时候你的应用会出现一些意外,比如,数据库链接超时、内存溢出、部署会迫使Nodejs服务需要重新启动。**这个时候,你需要关注的是这个时候正在提供服务的进程会发生什么情况?不言而喻,随着进程终止,正在提供服务的请求也会终止服务。** **Graceful exiting(译者注:下文称“平滑退出”)**就是处理这类的问题的方法,它允许Nodejs应用完成对所有正常请求的响应之后然后再关闭进程。虽然Nodejs应用添加平滑退出机制相对比较容易,但Docker和npm启动子进程并处理信号的方式,会导致本地直接启动和Dockerized启动两种方式出现一些意想不到的差异。 ![请求生命周期与优雅退出(正在进行的请求仍将中止,但处理请求将完成)](https://cdn-images-1.medium.com/max/1600/1*vT7WmOn6nzU5rBlOFG2MQw.jpeg) ## 平滑退出 为了测试平滑退出功能,我们来创建一个非常简单的Nodejs应用。 package.json: ``` { "name": "simple_node_app", "main": "server.js", "scripts": { "start": "node server.js" }, "dependencies": { "express": "^4.13.3" } }...

Nodejs