北极熊爱吃鱼

北极熊爱吃鱼 查看完整档案

北京编辑山东大学  |  计算机信息管理 编辑  |  填写所在公司/组织填写个人主网站
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 个人简介什么都没有

个人动态

北极熊爱吃鱼 回答了问题 · 2月25日

webpack打包时候报错,求大佬解答

已解决,lintstage配置问题npm install显示报错 yarn2没注意到有提示.后来去掉这个钩子的配置就可以了

关注 2 回答 1

北极熊爱吃鱼 提出了问题 · 2月23日

webpack打包时候报错,求大佬解答

执行webpack的时候报错image.png
突然就出现了不知道是升级了什么东西导致的使用webpack-dev-server的时候也会报错,导致模块热更新失败

关注 2 回答 1

北极熊爱吃鱼 收藏了文章 · 2020-04-09

2020年前端面试复习必读精选文章【赠复习导图】

转载请联系,原文链接

前言

之前写过一篇 一年半经验如何准备阿里巴巴前端面试,给大家分享了一个面试复习导图,有很多朋友说希望能够针对每个 case 提供一个参考答案。

写答案就算了,一是精力有限,二是我觉得大家还是需要自己理解总结会比较好

给大家整理了一下每个 case 一些还算不错的文章吧(还包括一些躺在我收藏夹里的好文章),大家可以自己看文章总结一下答案,这样也会理解更深刻。

并不是所有文章都需要看,希望是一个抛砖引玉的作用,大家也可以锻炼一下自己寻找有效资料的能力 ~

( 文章排序不分前后,随机排序 ~


建议收藏文章,结合复习导图食用,效果更佳。

完整复习导图全展开太大了,可关注公众号「前端试炼」回复【面试】获取。

1. JavaScript 基础

1.1 执行上下文/作用域链/闭包

1.2 this/call/apply/bind

1.3 原型/继承

1.4 Promise

async function async1() {
    console.log('async1 start');
    await async2();
    console.log('async1 end');
}

// 相当于
async function async1() {
    console.log('async1 start');
    Promise.resolve(async2()).then(() => {
      console.log('async1 end');
  })
}

1.5 深浅拷贝

1.6 事件机制/Event Loop

这个知识点真的是重在理解,一定要理解彻底

for (const macroTask of macroTaskQueue) {
  handleMacroTask();
  
  for (const microTask of microTaskQueue) {
    handleMicroTask(microTask);
  }
}

1.7 函数式编程

1.8 Service Worker / PWA

1.9 Web Worker

1.10 常用方法

太多了... 总的来说就是 API 一定要熟悉...

2. CSS 基础

3. 框架(Vue 为主)

3.1 MVVM

3.2 生命周期

3.3 数据绑定

3.4 状态管理

3.5 组件通信

3.6 Virtual DOM

3.7 Diff

3.8 Vue 计算属性 VS 侦听属性

3.9 React Hooks

3.10 React Hoc/Vue mixin

3.11 Vue 和 React 有什么不同

从思想、生态、语法、数据、通信、diff等角度自己总结一下吧。

4. 工程化

4.1 Webpack

4.2 Babel

4.3 模板引擎

4.4 前端发布

4.5 weex

4.6 前端监控

5. 性能优化

5.1 打包阶段

5.2 其它优化

6. TypeScript

7. 网络

7.1 HTTP

7.2 HTTPS/HTTP2

7.3 DNS

7.4 TCP

7.5 CDN

7.6 经典题

8. 设计模式

9. 数据结构/算法

10. 安全

11. Node

12. 项目/业务

思考题,自由发挥

13. 其它

14. 面试

15. 书单

推荐一些值得看的书,基本都是我看完或者有翻过几页觉得不错但是还没时间看的书。

15.1 JavaScript

  • JavaScript 高级程序设计(高程就不多说了,第四版有英文版)
  • JavaScript 设计模式
  • 你不知道的 JavaScript
  • JavaScript 语言精粹
  • 高性能 JavaScript
  • Learning TypeScript 中文版
  • 深入理解 ES6
  • ES6 标准入门
  • 深入理解 JavaScript 特性

15.2 CSS

  • CSS 权威指南(建议看英文版)
  • 精通 CSS 高级 Web 标准解决方案
  • CSS 世界(张鑫旭老师的大作,但是建议需要有一定 CSS 实践后再看)

15.3 Node

  • Node.js 实战
  • 了不起的 Node.js

15.4 计算机基础

  • 大话数据结构
  • 图解 HTTP
  • 计算机/程序是怎样跑起来的
  • 学习 JavaScript 数据结构与算法

15.5 工程化/浏览器/软技能

  • 前端工程化体系设计与实践
  • webpack 实战:入门、进阶与优化(了解一下 webpack 的所有会涉及到的知识点)
  • WebKit 技术内幕(讲浏览器的,挺好的)
  • 重构:改善既有代码的涉及
  • 码农翻身
  • 程序员思维修炼
  • 编码:隐匿在计算机软硬件背后的语言
  • 写给大家看的设计书
  • 技术之瞳:阿里巴巴技术笔试心得

结束语

上文整理了网上的一些相关文章和躺在我收藏夹里精选文章,有一些文章还没看,还需要持续学习呀 ~

放弃了假期快落的岛上生活(动森),吐血整理这份资料,希望对大家有所帮助~

欢迎关注公众号「前端试炼」,回复【面试】获取完整复习导图。公众号平时会分享一些实用或者有意思的东西,发现代码之美。专注深度和最佳实践,希望打造一个高质量的公众号。偶尔还会分享一些摄影 ~

扫码_搜索联合传播样式-标准色版.png

也可以扫码加我微信,拉你进交流划水聊天群,有看到好文章/代码都会发在群里。

查看原文

北极熊爱吃鱼 提出了问题 · 2020-01-16

html片段中写的CSS样式,如何做到片段多次加载但是style只加载一次?

如下图
微信截图_20200116113009.png
这是单页应用用卸载一个html片段中的样式,这个片段被页面多个地方使用,加载了多次,这样在页面调试中就会出现多个(使用几次就被加载几次)同样的样式的,name如何解决这种问题(不引入外部css的前提下)
使用场景vue组件/路由,angularjs指令/路由

关注 4 回答 3

北极熊爱吃鱼 赞了回答 · 2020-01-02

解决关于coding中赋值运算和逻辑运算优先级的问题

image.png

||&& 可以理解短路运算符。
如果根据第一个元素就已知结果,那么就不会继续运算。


var isMonittor=(param.viewSetting?param.PageAccessMode:param.PageViewMode)||"Normal"=="Monitor"

拆解一下

var isMonittor;
if(param.viewSetting){
    //param.PageAccessMode
    if(param.PageAccessMode){
        isMonittor=param.PageAccessMode
    }else{
        isMonittor="Normal"=="Monitor"
    }
}else{
    //param.PageViewMode
    if(param.PageViewMode){
        isMonittor=param.PageViewMode
    }else{
        isMonittor="Normal"=="Monitor"
    }
}

关注 2 回答 1

北极熊爱吃鱼 提出了问题 · 2020-01-02

解决关于coding中赋值运算和逻辑运算优先级的问题

var isMonittor=(param.viewSetting?param.PageAccessMode:param.PageViewMode)||"Normal"=="Monitor"

上面这段代码在以下几种情况isMonittor的值
场景一

param.PageAccessMode = "acess";
param.PageViewMode = "view";
param.viewSetting = null;

场景二

param.PageAccessMode = "acess";
param.PageViewMode = "view";
param.viewSetting = "test";

场景三

param.PageAccessMode = null;
param.PageViewMode = "view";
param.viewSetting = null;

场景四

param.PageAccessMode = null;
param.PageViewMode = null;
param.viewSetting = null;

场景四中什么情况下(不加任何代码)可以先赋值"normal"再去做monitor

关注 2 回答 1

北极熊爱吃鱼 收藏了文章 · 2019-10-16

可能是全网最全的http面试答案

HTTP有哪些方法?

  • HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法
  • HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT

这些方法的具体作用是什么?

  • GET: 通常用于请求服务器发送某些资源
  • HEAD: 请求资源的头部信息, 并且这些头部与 HTTP GET 方法请求时返回的一致. 该请求方法的一个使用场景是在下载一个大文件前先获取其大小再决定是否要下载, 以此可以节约带宽资源
  • OPTIONS: 用于获取目的资源所支持的通信选项
  • POST: 发送数据给服务器
  • PUT: 用于新增资源或者使用请求中的有效负载替换目标资源的表现形式
  • DELETE: 用于删除指定的资源
  • PATCH: 用于对资源进行部分修改
  • CONNECT: HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
  • TRACE: 回显服务器收到的请求,主要用于测试或诊断

GET和POST有什么区别?

  • 数据传输方式不同:GET请求通过URL传输数据,而POST的数据通过请求体传输。
  • 安全性不同:POST的数据因为在请求主体内,所以有一定的安全性保证,而GET的数据在URL中,通过历史记录,缓存很容易查到数据信息。
  • 数据类型不同:GET只允许 ASCII 字符,而POST无限制
  • GET无害: 刷新、后退等浏览器操作GET请求是无害的,POST可能重复提交表单
  • 特性不同:GET是安全(这里的安全是指只读特性,就是使用这个方法不会引起服务器状态变化)且幂等(幂等的概念是指同一个请求方法执行多次和仅执行一次的效果完全相同),而POST是非安全非幂等

PUT和POST都是给服务器发送新增资源,有什么区别?

PUT 和POST方法的区别是,PUT方法是幂等的:连续调用一次或者多次的效果相同(无副作用),而POST方法是非幂等的。

除此之外还有一个区别,通常情况下,PUT的URI指向是具体单一资源,而POST可以指向资源集合。

举个例子,我们在开发一个博客系统,当我们要创建一篇文章的时候往往用POST https://www.jianshu.com/articles,这个请求的语义是,在articles的资源集合下创建一篇新的文章,如果我们多次提交这个请求会创建多个文章,这是非幂等的。

PUT https://www.jianshu.com/articles/820357430的语义是更新对应文章下的资源(比如修改作者名称等),这个URI指向的就是单一资源,而且是幂等的,比如你把『刘德华』修改成『蔡徐坤』,提交多少次都是修改成『蔡徐坤』

ps: 『POST表示创建资源,PUT表示更新资源』这种说法是错误的,两个都能创建资源,根本区别就在于幂等性

PUT和PATCH都是给服务器发送修改资源,有什么区别?

PUT和PATCH都是更新资源,而PATCH用来对已知资源进行局部更新。

比如我们有一篇文章的地址https://www.jianshu.com/articles/820357430,这篇文章的可以表示为:

article = {
    author: 'dxy',
    creationDate: '2019-6-12',
    content: '我写文章像蔡徐坤',
    id: 820357430
}

当我们要修改文章的作者时,我们可以直接发送PUT https://www.jianshu.com/articles/820357430,这个时候的数据应该是:

{
    author:'蔡徐坤',
    creationDate: '2019-6-12',
    content: '我写文章像蔡徐坤',
    id: 820357430
}

这种直接覆盖资源的修改方式应该用put,但是你觉得每次都带有这么多无用的信息,那么可以发送PATCH https://www.jianshu.com/articles/820357430,这个时候只需要:

{
    author:'蔡徐坤',
}

http的请求报文是什么样的?

请求报文有4部分组成:

  • 请求行
  • 请求头部
  • 空行
  • 请求体

2019-06-14-11-24-10

  • 请求行包括:请求方法字段、URL字段、HTTP协议版本字段。它们用空格分隔。例如,GET /index.html HTTP/1.1。
  • 请求头部:请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔
  1. User-Agent:产生请求的浏览器类型。
  2. Accept:客户端可识别的内容类型列表。
  3. Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。
  • 请求体: post put等请求携带的数据

2019-06-14-11-33-37

http的响应报文是什么样的?

请求报文有4部分组成:

  • 响应行
  • 响应头
  • 空行
  • 响应体

2019-06-14-11-37-02

  • 响应行: 由协议版本,状态码和状态码的原因短语组成,例如HTTP/1.1 200 OK
  • 响应头:响应部首组成
  • 响应体:服务器响应的数据

聊一聊HTTP的部首有哪些?

内容很多,重点看标『✨』内容

通用首部字段(General Header Fields):请求报文和响应报文两方都会使用的首部

  • Cache-Control  控制缓存 ✨
  • Connection 连接管理、逐条首部 ✨
  • Upgrade  升级为其他协议
  • via 代理服务器的相关信息
  • Wraning 错误和警告通知
  • Transfor-Encoding 报文主体的传输编码格式 ✨
  • Trailer 报文末端的首部一览
  • Pragma 报文指令
  • Date 创建报文的日期

请求首部字段(Reauest Header Fields):客户端向服务器发送请求的报文时使用的首部

  • Accept 客户端或者代理能够处理的媒体类型 ✨
  • Accept-Encoding 优先可处理的编码格式
  • Accept-Language 优先可处理的自然语言
  • Accept-Charset 优先可以处理的字符集
  • If-Match 比较实体标记(ETage) ✨
  • If-None-Match 比较实体标记(ETage)与 If-Match相反 ✨
  • If-Modified-Since 比较资源更新时间(Last-Modified)✨
  • If-Unmodified-Since比较资源更新时间(Last-Modified),与 If-Modified-Since相反 ✨
  • If-Rnages 资源未更新时发送实体byte的范围请求
  • Range 实体的字节范围请求 ✨
  • Authorization web的认证信息 ✨
  • Proxy-Authorization 代理服务器要求web认证信息
  • Host 请求资源所在服务器 ✨
  • From 用户的邮箱地址
  • User-Agent 客户端程序信息 ✨
  • Max-Forwrads 最大的逐跳次数
  • TE 传输编码的优先级
  • Referer 请求原始放的url
  • Expect 期待服务器的特定行为

响应首部字段(Response Header Fields):从服务器向客户端响应时使用的字段

  • Accept-Ranges 能接受的字节范围
  • Age 推算资源创建经过时间
  • Location 令客户端重定向的URI ✨
  • vary  代理服务器的缓存信息
  • ETag 能够表示资源唯一资源的字符串 ✨
  • WWW-Authenticate 服务器要求客户端的验证信息
  • Proxy-Authenticate 代理服务器要求客户端的验证信息
  • Server 服务器的信息 ✨
  • Retry-After 和状态码503 一起使用的首部字段,表示下次请求服务器的时间

实体首部字段(Entiy Header Fields):针对请求报文和响应报文的实体部分使用首部

  • Allow 资源可支持http请求的方法 ✨
  • Content-Language 实体的资源语言
  • Content-Encoding 实体的编码格式
  • Content-Length 实体的大小(字节)
  • Content-Type 实体媒体类型
  • Content-MD5 实体报文的摘要
  • Content-Location 代替资源的yri
  • Content-Rnages 实体主体的位置返回
  • Last-Modified 资源最后的修改资源 ✨
  • Expires 实体主体的过期资源 ✨

聊一聊HTTP的状态码有哪些?

2XX 成功

  • 200 OK,表示从客户端发来的请求在服务器端被正确处理 ✨
  • 201 Created 请求已经被实现,而且有一个新的资源已经依据请求的需要而建立
  • 202 Accepted 请求已接受,但是还没执行,不保证完成请求
  • 204 No content,表示请求成功,但响应报文不含实体的主体部分
  • 206 Partial Content,进行范围请求 ✨

3XX 重定向

  • 301 moved permanently,永久性重定向,表示资源已被分配了新的 URL
  • 302 found,临时性重定向,表示资源临时被分配了新的 URL ✨
  • 303 see other,表示资源存在着另一个 URL,应使用 GET 方法丁香获取资源
  • 304 not modified,表示服务器允许访问资源,但因发生请求未满足条件的情况
  • 307 temporary redirect,临时重定向,和302含义相同

4XX 客户端错误

  • 400 bad request,请求报文存在语法错误 ✨
  • 401 unauthorized,表示发送的请求需要有通过 HTTP 认证的认证信息 ✨
  • 403 forbidden,表示对请求资源的访问被服务器拒绝 ✨
  • 404 not found,表示在服务器上没有找到请求的资源 ✨
  • 408 Request timeout, 客户端请求超时
  • 409 Confict, 请求的资源可能引起冲突

5XX 服务器错误

  • 500 internal sever error,表示服务器端在执行请求时发生了错误 ✨
  • 501 Not Implemented 请求超出服务器能力范围,例如服务器不支持当前请求所需要的某个功能,或者请求是服务器不支持的某个方法
  • 503 service unavailable,表明服务器暂时处于超负载或正在停机维护,无法处理请求
  • 505 http version not supported 服务器不支持,或者拒绝支持在请求中使用的 HTTP 版本

同样是重定向307,303,302的区别?

302是http1.0的协议状态码,在http1.1版本的时候为了细化302状态码又出来了两个303和307。

303明确表示客户端应当采用get方法获取资源,他会把POST请求变为GET请求进行重定向。
307会遵照浏览器标准,不会从post变为get。

HTTP的keep-alive是干什么的?

在早期的HTTP/1.0中,每次http请求都要创建一个连接,而创建连接的过程需要消耗资源和时间,为了减少资源消耗,缩短响应时间,就需要重用连接。在后来的HTTP/1.0中以及HTTP/1.1中,引入了重用连接的机制,就是在http请求头中加入Connection: keep-alive来告诉对方这个请求响应完成后不要关闭,下一次咱们还用这个请求继续交流。协议规定HTTP/1.0如果想要保持长连接,需要在请求头中加上Connection: keep-alive。

keep-alive的优点:

  • 较少的CPU和内存的使用(由于同时打开的连接的减少了)
  • 允许请求和应答的HTTP管线化
  • 降低拥塞控制 (TCP连接减少了)
  • 减少了后续请求的延迟(无需再进行握手)
  • 报告错误无需关闭TCP连

为什么有了HTTP为什么还要HTTPS?

https是安全版的http,因为http协议的数据都是明文进行传输的,所以对于一些敏感信息的传输就很不安全,HTTPS就是为了解决HTTP的不安全而生的。

HTTPS是如何保证安全的?

过程比较复杂,我们得先理解两个概念

对称加密:即通信的双方都使用同一个秘钥进行加解密,比如特务接头的暗号,就属于对称加密

对称加密虽然很简单性能也好,但是无法解决首次把秘钥发给对方的问题,很容易被hacker拦截秘钥。

非对称加密:

  1. 私钥 + 公钥= 密钥对
  2. 即用私钥加密的数据,只有对应的公钥才能解密,用公钥加密的数据,只有对应的私钥才能解密
  3. 因为通信双方的手里都有一套自己的密钥对,通信之前双方会先把自己的公钥都先发给对方
  4. 然后对方再拿着这个公钥来加密数据响应给对方,等到到了对方那里,对方再用自己的私钥进行解密

非对称加密虽然安全性更高,但是带来的问题就是速度很慢,影响性能。

解决方案:

那么结合两种加密方式,将对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通。

此时又带来一个问题,中间人问题:

如果此时在客户端和服务器之间存在一个中间人,这个中间人只需要把原本双方通信互发的公钥,换成自己的公钥,这样中间人就可以轻松解密通信双方所发送的所有数据。

所以这个时候需要一个安全的第三方颁发证书(CA),证明身份的身份,防止被中间人攻击。

证书中包括:签发者、证书用途、使用者公钥、使用者私钥、使用者的HASH算法、证书到期时间等

2019-06-14-12-30-18

但是问题来了,如果中间人篡改了证书,那么身份证明是不是就无效了?这个证明就白买了,这个时候需要一个新的技术,数字签名。

数字签名就是用CA自带的HASH算法对证书的内容进行HASH得到一个摘要,再用CA的私钥加密,最终组成数字签名。

当别人把他的证书发过来的时候,我再用同样的Hash算法,再次生成消息摘要,然后用CA的公钥对数字签名解密,得到CA创建的消息摘要,两者一比,就知道中间有没有被人篡改了。

这个时候就能最大程度保证通信的安全了。

HTTP2相对于HTTP1.x有什么优势和特点?

二进制分帧

帧:HTTP/2 数据通信的最小单位消息:指 HTTP/2 中逻辑上的 HTTP 消息。例如请求和响应等,消息由一个或多个帧组成。

流:存在于连接中的一个虚拟通道。流可以承载双向消息,每个流都有一个唯一的整数ID

HTTP/2 采用二进制格式传输数据,而非 HTTP 1.x 的文本格式,二进制协议解析起来更高效。

服务器推送

服务端可以在发送页面HTML时主动推送其它资源,而不用等到浏览器解析到相应位置,发起请求再响应。例如服务端可以主动把JS和CSS文件推送给客户端,而不需要客户端解析HTML时再发送这些请求。

服务端可以主动推送,客户端也有权利选择是否接收。如果服务端推送的资源已经被浏览器缓存过,浏览器可以通过发送RST_STREAM帧来拒收。主动推送也遵守同源策略,服务器不会随便推送第三方资源给客户端。

头部压缩

HTTP/1.x会在请求和响应中中重复地携带不常改变的、冗长的头部数据,给网络带来额外的负担。

  • HTTP/2在客户端和服务器端使用“首部表”来跟踪和存储之前发送的键-值对,对于相同的数据,不再通过每次请求和响应发送
  • 首部表在HTTP/2的连接存续期内始终存在,由客户端和服务器共同渐进地更新;
  • 每个新的首部键-值对要么被追加到当前表的末尾,要么替换表中之前的值。
你可以理解为只发送差异数据,而不是全部发送,从而减少头部的信息量

2019-06-14-12-52-59

多路复用

HTTP 1.x 中,如果想并发多个请求,必须使用多个 TCP 链接,且浏览器为了控制资源,还会对单个域名有 6-8个的TCP链接请求限制。

HTTP2中:

  • 同域名下所有通信都在单个连接上完成。
  • 单个连接可以承载任意数量的双向数据流。
  • 数据流以消息的形式发送,而消息又由一个或多个帧组成,多个帧之间可以乱序发送,因为根据帧首部的流标识可以重新组装

2019-06-14-12-58-50

拓展阅读:HTTP/2特性及其在实际应用中的表现

公众号

想要实时关注笔者最新的文章和最新的文档更新请关注公众号程序员面试官,后续的文章会优先在公众号更新.

简历模板: 关注公众号回复「模板」获取

《前端面试手册》: 配套于本指南的突击手册,关注公众号回复「fed」获取

2019-08-12-03-18-41

本文由博客一文多发平台 OpenWrite 发布!
查看原文

北极熊爱吃鱼 收藏了文章 · 2019-10-16

InfoWorld 公布 2019 年最佳开源软件

近日 InfoWorld 公布了 2019 年最佳开源软件榜单。InfoWorld 是致力于引领 IT 决策者走在科技前沿的国际科技媒体品牌,每年 InfoWorld 都会根据软件对开源界的贡献,以及在业界的影响力评选出当年的“最佳开源软件”(2019 InfoWorld Bossie Awards,Best of Open Source Software awards),该奖项评选已经延续了十多年。

今年 InfoWorld 还是将目光集中在用于软件开发、云计算、数据分析和机器学习的优秀开源项目。下边一起看看哪些项目入选了。

BPF Compiler Collection(BCC)

clipboard.png

BPF Compiler Collection 是一个 Linux 动态跟踪工具。无第三方模块依赖,该工具继承 BPF 这个强大的内核中虚拟机的功能,可对程序进行高效而且安全的跟踪。

Language Server Protocol

clipboard.png

LSP(Language Server Protocol)是语言服务器协议,由红帽、微软和 Codenvy 联合推出,可以让不同的程序编辑器与集成开发环境(IDE)方便地嵌入各种编程语言,允许开发人员在最喜爱的工具中使用各种语言来编写程序。它通过用于开发工具和语言服务器间通信的 JSON-RPC 标准,能够让编程工具提供实时反馈的详细信息并以此实现多种强大功能,比如符号搜寻、语法分析、代码自动补全、移至定义、描绘轮廓与重构等。

Serverless Framework

clipboard.png

Serverless 架构开发框架 Serverless Framework 使用 AWS Lambda、Azure Functions 与 Google CloudFunctions 等技术,可以构建 Serverless 架构的 Web、移动和 IoT 应用。它不仅允许用户自由选择不同的部署目标,而且能帮助更快更轻松地对事件驱动型函数即服务(FaaS)应用进行测试、部署与管理。在创建函数、定义端点并指定目标云环境之后,Serverless Framework 即可对代码、安全性要求、资源要素以及云部署 YAML 进行打包,从而顺利完成项目部署。

Istio

clipboard.png

Istio 是一款强大的工具,旨在提供一种统一化的微服务连接、安全保障、管理与监控方式。Istio 项目能够为微服务架构提供流量管理机制,同时亦为其它增值功能(包括安全性、监控、路由、连接管理与策略等)创造了基础。该项目利用久经考验的 Lyft Envoy 代理进行构建,可在无需对应用程序代码作出任何发动的前提下实现可视性与控制能力。

Envoy

clipboard.png

Envoy 是开源的边缘和服务代理,用于云原生应用,其最初是在 Lyft 构建的,它是为单一服务和应用程序设计的高性能 C++ 分布式代理,以及为大型微服务 Service Mesh 架构设计的通信总线和通用数据平面。

作为 Kubernetes 的标准服务代理,Envoy 一直在快速发展。在成为首个 CNCF 项目之后(Envoy 也是第三个 CNCF 毕业项目),Envoy 快速进入 Istio 与 AWS App Mesh 等 Service Mesh 的核心,并成为大部分 Kubernetes 设置中不可或缺的组成部分。

Kong

clipboard.png

Kong 是一个可扩展、快速的微服务 API 网关,用于管理、保护与连接混合及云原生架构。Kong 运行于全部服务之前,默认提供断路器、运行状态检查、OAuth、转换、缓存与地理位置复制等功能,并可以通过插件实现各种扩展,例如身份验证、流量控制与可观察性等。Kong 在 1.0 GA 的时候带来了 Service Mesh 能力,用户不仅可以将 Kong 部署为 API 网关,还可以将其部署为独立的 Service Mesh 代理。Kong 插件能为 Service Mesh 提供开箱即用的关键功能,并能与其它云原生技术集成,包括 Prometheus、Zipkin、健康检查、canary 测试与蓝绿测试等。

Pulumi

clipboard.png

Pulumi 是一个架构即代码项目,可在任何云上使用开发者喜欢的语言创建、部署和管理基础架构。不使用 YAML 而是通过使用常规编程语言功能(如循环、函数、类和包管理。)就可以自动配置和管理 AWS、Azure、Google Cloud Platform 与 Kubernetes 资源。

Sysdig

clipboard.png

Sysdig 是一个超级系统工具,比 strace、tcpdump、lsof 加起来还强大。它可用来捕获系统状态信息,保存数据并进行过滤和分析。使用 Lua 开发,提供命令行接口以及强大的交互界面。Sysdig 提供了一组工具,不仅可以用于了解基于容器的应用的实际性能,而且可以及时发现各类异常状况与安全威胁。

Kraken

clipboard.png

Kraken 是一个点对点(P2P)Docker 容器仓库,其旨在为大规模系统提供 Docker 镜像服务,解决跨区域支持、性能瓶颈和混合云环境所面临的挑战。Kraken 大致基于 BitTorrent 协议,与 Docker registry API 兼容,并提供可配置的存储后端,诸如 S3 和 HDFS 等。

Anaconda

clipboard.png

Anaconda 是一个 Python/R 发行版,用于科学计算和信号处理等领域,支持 Linux、Mac 与 Windows,包含了众多流行科学计算与数据分析等 Python/R 包。Anaconda 与其它发行版之间最大的区别在于 Anaconda Navigator(用于启动应用程序与管理软件包的图形化桌面环境)与 Anaconda 的本地软件包管理器 Conda。

Kotlin

clipboard.png

Kotlin 是基于 JVM 的新一代 Android 开发语言,它与 Java 100% 互通,并具备诸多 Java 不支持的特性,相比 Java 更安全与简洁。

Julia

clipboard.png

Julia 是一个新的高性能动态高级编程语言,语法与其它编程语言类似,易于其他语言用户学习。Julia 拥有丰富的函数库,提供了数字精度、精致的增幅器(sophisticated amplifier)和分布式并行运行方式。核心函数库等大多数库是由 Julia 编写,但也用成熟的 C 和 FORTRAN 库来处理线性代数、随机数产生和字符串处理等问题。Julia 语言可定义函数并且根据用户自定义的参数类型组合再进行重载。

Hazelcast Jet

clipboard.png

Hazelcast Jet 是一个分布式计算平台,专为高性能流处理和快速批处理而构建。它在内存数据网格(IMDG)中嵌入Hazelcast,以提供轻量级的处理器包和可扩展的内存存储。

Apache Airflow

clipboard.png

Apache Airflow 是一个数据管道监控工具,任何工作流都可以在这个使用 Python 编写的平台上运行。Airflow 允许工作流开发人员轻松创建、维护和周期性地调度运行工作流(即有向无环图或成为 DAGs)的工具,包括数据存储、增长分析、Email 发送与 A/B 测试等跨越多部门用例。Airflow 可以与 Hive、Presto、MySQL、HDFS、Postgres 和 S3 交互,并且提供了钩子使得系统拥有很好地扩展性。此外它还提供了一个基于 Web 的用户界面,可以可视化地查看管道的依赖关系、监控进度与触发任务等。

GridGain

clipboard.png

GridGain 是一个网格计算框架,专注于提供平行计算能力,能够与 JBoss 和 Spring 相集成,它提供可伸缩集群、本机复制与良好的备份和恢复选项,非常适合立足分布式数据中心为数据密集型应用提供服务。此外,GridGain 还支持本地、云与混合部署方式。

Apache Druid

clipboard.png

Apache Druid 是一个专为事件数据的 OLAP 查询设计的数据存储系统,是一个用于大数据实时查询和分析的高容错、高性能分布式系统,旨在快速处理大规模的数据,并能够实现快速查询和分析。Druid 具有出色的可伸缩性与快速的即时查询响应速度,它将流式摄取与 OLAP 风格的批量摄取以及搜索技术结合在一起,能够轻松对实时及历史数据进行切片、切块与转换。

TensorFlow

clipboard.png

TensorFlow 是当前最强的机器学习与深度学习框架,它内建深度学习的扩展支持,任何能够用计算流图形来表达的计算,都可以使用 TensorFlow,任何基于梯度的机器学习算法都能够受益于 TensorFlow 的自动分化(auto-differentiation)。TensorFlow 2.0 中还带来了 Eager Execution 模式,这是一种命令式接口,类比 PyTorch,开发者在调用其进行计算时可以直接直观地得到结果,这使得基于 TensorFlow 的开发更加简单明了。

TensorWatch

clipboard.png

TensorWatch 是一个调试和可视化工具,专为 Microsoft Research 的数据科学、深度学习和强化学习而设计。它适用于Jupyter Notebook,可显示机器学习培训的实时可视化,并为模型和数据执行其它关键分析任务,此外,它还提供强大的训练前与训练后功能,包括模型图可视化、降维数据探索、模型统计以及用于卷积网络的多种预测解释器。TensorWatch 旨在灵活且可扩展,因此还可以构建自己的自定义可视化 UI 和仪表板。除了传统的“所见即所得”方法外,它还具有针对实时 ML 训练流程执行任意查询的独特功能。

PyTorch

clipboard.png

PyTorch 是一个 Python 深度学习框架,提供强大的 GPU 加速 Tensor 计算(类似 numpy)和构建基于 tape 的自动升级系统上的深度神经网络。开发者可以重用喜欢的 Python 包,如 numpy、scipy 和 Cython,在需要时扩展 PyTorch。

Transformers

clipboard.png

Transformers(以往称为 pytorch-transformers 和 pytorch-pretrained-bert)是用于 TensorFlow 2.0 和 PyTorch 的自然语言处理框架。它提供了用于自然语言理解(NLU,Natural Language Understanding)和自然语言生成(NLG,Natural Language Generation)的最先进的通用架构,包括 BERT、GPT-2、RoBERTa、XLM、DistilBert 与 XLNet 等,具有超过 100 种语言的 32 种以上经过预训练的模型,以及 TensorFlow 2.0 和 PyTorch 之间的深度互操作性。

Ludwig

clipboard.png

Ludwig 是基于 TensorFlow 的深度学习工具箱,它允许用户在无需编写代码的情况下即可训练并测试深度学习模型。Ludwig 的独特之处在于它能够帮助非专家更容易地理解深度学习,并为经验丰富的机器学习开发者和研究人员提供更快的模型改进迭代周期。通过使用 Ludwig,专家和研究人员可以简化原型设计过程及数据处理,可以专注于开发深度学习架构。

RAPIDS

clipboard.png

RAPIDS 是一套数据科学框架,能够在不放弃已有经验与技能的前提下实现机器学习加速。RAPIDS 能够利用内存内处理方式在 GPU 上直接训练机器学习模型,并且相比其它 GPU 训练方法,它的速度高几个数量级。RAPIDS 所使用的数据分析工具与 Python 相关实现方案如 Pandas DataFrames 完全等效,同时又有所不同,在某些情况下只需要变更脚本中的 import 语句即可完成兼容。

MLflow

clipboard.png

MLflow 是一个机器学习平台,它为机器学习项目中的各个主要组成部分及阶段都准备了对应的工具。MLflow Tracking(跟踪组件)提供了一组 API 和用户界面,用于在运行机器学习代码时记录和查询参数、代码版本、指标和输出文件,以便以后可视化它们。MLflow Projects(项目组件)提供了打包可重用数据科学代码的标准格式。MLflow Models(模型组件)提供了一种用多种格式打包机器学习模型的规范。

Kubeflow

clipboard.png

Kubeflow 是一个机器学习工具库,Kubeflow 项目旨在使 Kubernetes 上的机器学习变的轻松、便捷与可扩展,其目标不是重建其它服务,而是提供一种简便的方式找到最好的 OSS 解决方案。Kubeflow 解决了长期以来困扰各类组织的两个现实问题:如何将机器学习研究从开发环境转移到生产环境;如何将遥测技术从生产环境转移回开发环境,以实现深度研究。

Delta Lake

clipboard.png

Delta Lake 是一个存储层,为 Apache Spark 和大数据 workloads 提供 ACID 事务能力,其通过写和快照隔离之间的乐观并发控制(optimistic concurrency control),在写入数据期间提供一致性的读取,从而为构建在 HDFS 和云存储上的数据湖(data lakes)带来可靠性。

Wasmer

Wasmer 是一个 Go 库,用来执行 WebAssembly 二进制程序,它在 WebAssembly 服务器运行时领域居于领先地位,其主要优势体现在接近原生水平的执行速度。

以上就是本次 InfoWorld Bossie Awards 项目,关于每个项目具体的入选评语等详细信息,可以查看网站原文:

https://www.infoworld.com/art...

图片描述

查看原文

北极熊爱吃鱼 关注了专栏 · 2018-12-26

终身学习者

我要先坚持分享20年,大家来一起见证吧。

关注 52380

北极熊爱吃鱼 关注了专栏 · 2018-12-26

而井前端修仙传

而井前端修仙传

关注 1435

认证与成就

  • 获得 1 次点赞
  • 获得 5 枚徽章 获得 0 枚金徽章, 获得 2 枚银徽章, 获得 3 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2017-02-22
个人主页被 198 人浏览