#英文技术文章翻译# Nitro框架(原Go Micro)介绍文档

GoLangzkbhj 发表了文章 • 0 个评论 • 14 次浏览 • 2 天前 • 来自相关话题

原文地址:https://github.com/asim/nitro 






Nitro (formerly known as Go Micro) is a future framework for distributed app development, IoT, edge and p2p.
Nitro(原来以Go Micro为大家所熟知)是一个面向未来的适用于分布式应用、IoT(物联网)边缘计算和P2P的框架。
 
Overview 综述
 
Nitro will provide the core requirements for distributed app development, IoT, edge and p2p including RPC and Event driven communication. The Nitro mantra is in-memory defaults with a pluggable architecture. Blaze with pure in-memory development and swap out as needed to go multi-process or multi-host.
Nitro将会为分布式应用、IoT(物联网)边缘计算和P2P的应用开发提供核心所需要的功能包括RPC和事件驱动通信。Nitro是一个默认内存式的可插拔的架构。纯内存式编程并且可以随时根据需要切换到go 的多进程或多线程模式上。

Note: Nitro is currently undergoing a complete rewrite and is considered unstable for use.
提示:Nitro目前正在经历全面的重写并且在真正使用到正式项目中时需要深思熟虑它的安全性问题。
 
Features 特性
 
Now focusing on dapps, IoT, edge and p2p. Features include:
现在(框架)只专注于分布式应用、物联网、边缘计算和P2P。特性包括:
Lightweight RPC based communicationsEvent broadcasting and notificationsCRDT Data synchronisation and storageConsensus protocol and execution engineWebAssembly target compilation supportUnique randomized token generation aka BLSP2P gossip networking defined in user space
 
基于轻量级的RPC通信事件驱动和消息通知CRDT数据同步和存储(CRDT是Conflict-free Replicated Data Type的简称,也称为a passive synchronisation,即免冲突的可复制的数据类型)一致的协议和执行引擎实验性的编译器支持唯一token生成器BLS用户空间自定义P2P网络
 
Future 未来
 
In the future there's the potential to launch a live network based on Nitro. More on that soon.
在未来开启一个基于Nitro的在线网络服务是可能的。很快就会实现了。

FAQ QA环节

What happened to Go Micro?
Go Micro发生了什么?

Go Micro has now been renamed to Nitro. Go Micro moved back to being a personal project and no longer lives under the organisation github.com/micro. The company is now doubling down on Micro itself and has pulled in the needed interfaces to consolidate a Server, Framework and CLI into one tool. Go Micro is now no longer maintained by a company. Yet it continued to create confusion even as a personal repo. So for that reason, we're renaming to Nitro. Go Micro V2 has been archived at microhq/go-micro and the plugins at microhq/plugins.
Go Micro现在已经被重新命名为Nitro。Go Micro项目已经变成了一个个人项目并且不再是一个团队(github.com/micro.)负责的项目。公司正在加倍使用Micro并且引入了必要的接口使之成为一个服务、框架和CLI的工具(上云提供商业服务,见 m3o.com)。Go Micro现在已经不再被任何公司维护。但是使用Go Micro作为名字的话依然会产生困惑,即使作为一个个人回收的项目。基于上面的原因,我们考虑把它重新命名为Nitro。Go Micro V2版本已经被归档在 microhq/go-micro ,插件归档在microhq/plugins。What's the new direction of Nitro?Nitro新的方向是什么?

Nitro will now focus on distributed app development using the Go standard library. It will continue to define abstractions for distributed systems but will only do so without external dependencies. In this manner the hope is Nitro can be picked up with minimal overhead for all sorts of new applications that have a low memory or low resource footprint. The assumption is there are places which would like to use distributed apps just as embedded systems or web assembly, unikernels, and related targets that would benefit from a framework that defined these as primitives for such use.
Nitro从现在开始将聚焦在用Go标准库来开发分布式应用。框架会持续为分布式系统定义抽象但是仅限于在没有外部依赖的情况下。通过这种方式,我们希望Nitro可以以最小的开销为那些内存或资源占有率低的程序使用。假设有些场景下更喜欢用分布式应用,像是嵌入式系统或者实验性系统,unikernels,和其他目标系统,他们将会从这个被定义为专为这些应用而生的基础框架中受益。
 
How do Nitro and Micro now differ?
现在Nitro和Micro有什么不同?

Micro is a platform for cloud native development. A complete experience that includes a server, framework and multi-language clients. Beyond that it also include environments, multi-tenancy and many more features which push it towards being a hosted Micro as a Service offering. It is a complete platform.
Micro是一个为云原生应用开发的平台框架。是一个完整的经验包括服务端,框架和多种语言客户端。除了上面提到的它也包括环境,多客端和未来更多的特性,这些特性把它推向成为一个提供服务的Micro托管产品。它是一个完整的平台框架。

Nitro is more of a embeddable framework for distributed app development and now once again a purely personal project maintained by me and perhaps others who still find use for it commercially or noncommercially. It's of sentimental value and something I'd like to carry on for personal projects such as things related to edge, IoT, embedded systems, p2p, web assembly, etc.
Nitro是一个为分布式应用提供的可嵌入式的框架,并且再一次成为一个完全的个人项目被我维护,也许会有人会发现把它并把它用于商业用途或非商业用途。这个框架充满了感情色彩以及我可能希望和喜欢的一些东西带入到这个个人项目中,比如像是一些跟边缘计算、物联网、嵌入式系统、P2P和实验性的东西等等。
 
I used Go Micro to build microservices. What should I do now?
我曾经用Go Micro来构建微服务应用。我现在应该做些什么?

You should quite honestly go look at Micro and then consider the hosted offering at m3o.com which starts as a purely free dev environment in the cloud. Micro continues to address many of the concerns and requirements you had if not more. It is likely you managed metrics, tracing, logging and much other boilerplate that needed to be plugged in. Micro will now take this complete platform story approach and help you in that journey e.gyou're probably running managed kubernetes on a major cloud provider with many other things. We're doing that for you instead as a company and platform team.
你应该非常诚恳的看一看 Micro这个项目然后考虑m3o.com提供的托管产品,这个托管产品开始会在云上提供一个完全免费的开发环境。Micro将会继续设法解决你有的问题和需求如果不太多的话。就像你管理的应用性能,链路追踪,日志和许多其他的组件包被引入的。Micro会采用这种完整的平台托管方式来帮助你解决迁移过程中你可能遇到的问题,比如管理在一个核心的云服务提供上运行的项目或者其他一些事情。我们代替公司或者平台团队为你做这些事情。
 
I want to use Go Micro version 2.0 for my company. Can I still do that?
我想使用Go Micro 2.0版本为我们公司的项目。我可以一直这么做吗?

Yes. Go Micro 2.0 is still Apache 2.0 licensed which means you can still freely use it for everything you were using before. If you're a new user you can do the same. These things are using go modules so you're import path is simply github.com/micro/go-micro/v2 as it was before. Because GitHub handles redirects this should not break. Please continue to use it if you like, but my own support for 2.0 is now end of life.
当然。Go Micro 2.0 将一直是一个Apache 2.0 授权的,这意味着你可以一直免费使用它来做任何事情就像你以前用它一样。如果你是一个新用户,你也可以这么做。可以用go modules来做这些事,所以你可以通过import 这个路径  github.com/micro/go-micro/v2 就像以前一样。因为GitHub上面的链接不会被失效掉。如果你喜欢,请继续使用它。但是我从现在开始不会再继续支持和维护这个2.0版本了。
 
Why has the license changed from Apache 2.0 to Polyform Noncommercial?
为什么授权许可从Apache 2.0变成了Polyform Noncommercia?

Go Micro was largely a solo maintained effort for the entirety of its lifetime. It has enabled the creation of a company called Micro Services, Inc. which now focuses on Micro as a Service and has consolidated any interfaces here into a service library in that project. For the most part, Go Micro was underfunded and in some ways under appreciated. In version 3.0, going back to something of a personal project of more than 6 years I have made the hard decision to relicense as a noncommercial project.
Go Micro 很大程度上在它的整个生命周期中都是一个单独维护的项目。它使一家名为Micro Services的公司成立成为可能,这家公司目前主要聚焦在Micro作为一个服务来提供,然后把所有的接口都整合成一个服务库。在很大程度上,Go Micro项目资金不足且在一定程度上没有得到重视。在3.0版本中,追忆这个超过6年的个人项目的一些事情的情况下我做了一个艰难的决定就是重新作为一个非商业项目获得授权。
 
  查看全部
原文地址:https://github.com/asim/nitro 

73709577.png


Nitro (formerly known as Go Micro) is a future framework for distributed app development, IoT, edge and p2p.
Nitro(原来以Go Micro为大家所熟知)是一个面向未来的适用于分布式应用、IoT(物联网)边缘计算和P2P的框架。
 
Overview 综述
 
Nitro will provide the core requirements for distributed app development, IoT, edge and p2p including RPC and Event driven communication. The Nitro mantra is in-memory defaults with a pluggable architecture. Blaze with pure in-memory development and swap out as needed to go multi-process or multi-host.
Nitro将会为分布式应用、IoT(物联网)边缘计算和P2P的应用开发提供核心所需要的功能包括RPC和事件驱动通信。Nitro是一个默认内存式的可插拔的架构。纯内存式编程并且可以随时根据需要切换到go 的多进程或多线程模式上。

Note: Nitro is currently undergoing a complete rewrite and is considered unstable for use.
提示:Nitro目前正在经历全面的重写并且在真正使用到正式项目中时需要深思熟虑它的安全性问题。
 
Features 特性
 
Now focusing on dapps, IoT, edge and p2p. Features include:
现在(框架)只专注于分布式应用、物联网、边缘计算和P2P。特性包括:
  • Lightweight RPC based communications
  • Event broadcasting and notifications
  • CRDT Data synchronisation and storage
  • Consensus protocol and execution engine
  • WebAssembly target compilation support
  • Unique randomized token generation aka BLS
  • P2P gossip networking defined in user space

 
  • 基于轻量级的RPC通信
  • 事件驱动和消息通知
  • CRDT数据同步和存储(CRDT是Conflict-free Replicated Data Type的简称,也称为a passive synchronisation,即免冲突的可复制的数据类型)
  • 一致的协议和执行引擎
  • 实验性的编译器支持
  • 唯一token生成器BLS
  • 用户空间自定义P2P网络

 
Future 未来
 
In the future there's the potential to launch a live network based on Nitro. More on that soon.
在未来开启一个基于Nitro的在线网络服务是可能的。很快就会实现了。

FAQ QA环节

What happened to Go Micro?
Go Micro发生了什么?

Go Micro has now been renamed to Nitro. Go Micro moved back to being a personal project and no longer lives under the organisation github.com/micro. The company is now doubling down on Micro itself and has pulled in the needed interfaces to consolidate a Server, Framework and CLI into one tool. Go Micro is now no longer maintained by a company. Yet it continued to create confusion even as a personal repo. So for that reason, we're renaming to Nitro. Go Micro V2 has been archived at microhq/go-micro and the plugins at microhq/plugins.
Go Micro现在已经被重新命名为Nitro。Go Micro项目已经变成了一个个人项目并且不再是一个团队(github.com/micro.)负责的项目。公司正在加倍使用Micro并且引入了必要的接口使之成为一个服务、框架和CLI的工具(上云提供商业服务,见 m3o.com)。Go Micro现在已经不再被任何公司维护。但是使用Go Micro作为名字的话依然会产生困惑,即使作为一个个人回收的项目。基于上面的原因,我们考虑把它重新命名为Nitro。Go Micro V2版本已经被归档在 microhq/go-micro ,插件归档在microhq/plugins。What's the new direction of Nitro?Nitro新的方向是什么?

Nitro will now focus on distributed app development using the Go standard library. It will continue to define abstractions for distributed systems but will only do so without external dependencies. In this manner the hope is Nitro can be picked up with minimal overhead for all sorts of new applications that have a low memory or low resource footprint. The assumption is there are places which would like to use distributed apps just as embedded systems or web assembly, unikernels, and related targets that would benefit from a framework that defined these as primitives for such use.
Nitro从现在开始将聚焦在用Go标准库来开发分布式应用。框架会持续为分布式系统定义抽象但是仅限于在没有外部依赖的情况下。通过这种方式,我们希望Nitro可以以最小的开销为那些内存或资源占有率低的程序使用。假设有些场景下更喜欢用分布式应用,像是嵌入式系统或者实验性系统,unikernels,和其他目标系统,他们将会从这个被定义为专为这些应用而生的基础框架中受益。
 
How do Nitro and Micro now differ?
现在Nitro和Micro有什么不同?

Micro is a platform for cloud native development. A complete experience that includes a server, framework and multi-language clients. Beyond that it also include environments, multi-tenancy and many more features which push it towards being a hosted Micro as a Service offering. It is a complete platform.
Micro是一个为云原生应用开发的平台框架。是一个完整的经验包括服务端,框架和多种语言客户端。除了上面提到的它也包括环境,多客端和未来更多的特性,这些特性把它推向成为一个提供服务的Micro托管产品。它是一个完整的平台框架。

Nitro is more of a embeddable framework for distributed app development and now once again a purely personal project maintained by me and perhaps others who still find use for it commercially or noncommercially. It's of sentimental value and something I'd like to carry on for personal projects such as things related to edge, IoT, embedded systems, p2p, web assembly, etc.
Nitro是一个为分布式应用提供的可嵌入式的框架,并且再一次成为一个完全的个人项目被我维护,也许会有人会发现把它并把它用于商业用途或非商业用途。这个框架充满了感情色彩以及我可能希望和喜欢的一些东西带入到这个个人项目中,比如像是一些跟边缘计算、物联网、嵌入式系统、P2P和实验性的东西等等。
 
I used Go Micro to build microservices. What should I do now?
我曾经用Go Micro来构建微服务应用。我现在应该做些什么?

You should quite honestly go look at Micro and then consider the hosted offering at m3o.com which starts as a purely free dev environment in the cloud. Micro continues to address many of the concerns and requirements you had if not more. It is likely you managed metrics, tracing, logging and much other boilerplate that needed to be plugged in. Micro will now take this complete platform story approach and help you in that journey e.gyou're probably running managed kubernetes on a major cloud provider with many other things. We're doing that for you instead as a company and platform team.
你应该非常诚恳的看一看 Micro这个项目然后考虑m3o.com提供的托管产品,这个托管产品开始会在云上提供一个完全免费的开发环境。Micro将会继续设法解决你有的问题和需求如果不太多的话。就像你管理的应用性能,链路追踪,日志和许多其他的组件包被引入的。Micro会采用这种完整的平台托管方式来帮助你解决迁移过程中你可能遇到的问题,比如管理在一个核心的云服务提供上运行的项目或者其他一些事情。我们代替公司或者平台团队为你做这些事情。
 
I want to use Go Micro version 2.0 for my company. Can I still do that?
我想使用Go Micro 2.0版本为我们公司的项目。我可以一直这么做吗?

Yes. Go Micro 2.0 is still Apache 2.0 licensed which means you can still freely use it for everything you were using before. If you're a new user you can do the same. These things are using go modules so you're import path is simply github.com/micro/go-micro/v2 as it was before. Because GitHub handles redirects this should not break. Please continue to use it if you like, but my own support for 2.0 is now end of life.
当然。Go Micro 2.0 将一直是一个Apache 2.0 授权的,这意味着你可以一直免费使用它来做任何事情就像你以前用它一样。如果你是一个新用户,你也可以这么做。可以用go modules来做这些事,所以你可以通过import 这个路径  github.com/micro/go-micro/v2 就像以前一样。因为GitHub上面的链接不会被失效掉。如果你喜欢,请继续使用它。但是我从现在开始不会再继续支持和维护这个2.0版本了。
 
Why has the license changed from Apache 2.0 to Polyform Noncommercial?
为什么授权许可从Apache 2.0变成了Polyform Noncommercia?

Go Micro was largely a solo maintained effort for the entirety of its lifetime. It has enabled the creation of a company called Micro Services, Inc. which now focuses on Micro as a Service and has consolidated any interfaces here into a service library in that project. For the most part, Go Micro was underfunded and in some ways under appreciated. In version 3.0, going back to something of a personal project of more than 6 years I have made the hard decision to relicense as a noncommercial project.
Go Micro 很大程度上在它的整个生命周期中都是一个单独维护的项目。它使一家名为Micro Services的公司成立成为可能,这家公司目前主要聚焦在Micro作为一个服务来提供,然后把所有的接口都整合成一个服务库。在很大程度上,Go Micro项目资金不足且在一定程度上没有得到重视。在3.0版本中,追忆这个超过6年的个人项目的一些事情的情况下我做了一个艰难的决定就是重新作为一个非商业项目获得授权。
 
 

什么是RCEP?对我们普通人来讲有什么影响?

专业名词zkbhj 发表了文章 • 0 个评论 • 182 次浏览 • 2020-11-17 16:44 • 来自相关话题

一、概念
 
 
RCEP,英文全称 Regional Comprehensive Economic Partnership ,中文全称 区域全面经济伙伴关系协定。是2012年由东盟发起,历时八年,成员包括中国、日本、韩国、澳大利亚、新西兰和东盟十国共15方而制定的协定。东盟十国分别是:印度尼西亚、马来西亚、菲律宾、泰国、新加坡、文莱、柬埔寨、老挝、缅甸、越南。
 
2020年11月15日,区域全面经济伙伴关系协定签署仪式以视频方式进行,15个RCEP成员国经贸部长将在仪式上正式签署该协定。标志着当前世界上人口最多、经贸规模最大、最具发展潜力的自由贸易区正式启航。
 
协议共含20个章节,分为四大板块,包括货物贸易协定、投资协定、21世纪新议题和争端解决机制。
 原本应该有16国,包括印度在内,但是最后印度2019年因“有重要问题尚未得到解决”而没有加入协定。
 




 
二、意义
 
在疫情肆虐、世界经济严重衰退、国际贸易投资萎缩、保护主义单边主义加剧的特殊背景下,各方能够就RCEP达成共识,宣告了多边主义和自由贸易的胜利,将有力提振各方对经济增长的信心。将为区域和全球经济增长注入强劲动力。
 
世界正面临百年未有之大变局,RCEP的达成为亚太自贸区(FTAAP)进程提供了实现路径,进一步提升亚太地区今后在全球发展格局中的分量。
 三、全球经济格局现状
 
在RCEP签署之前,全球从洲际合作角度,最大的三个自贸区为北美自贸区(USMCA),欧盟(EU)和中国-东盟自贸区(CAFTA)。RCEP的诞生意味着全球最大自贸区形成,全球贸易格局正式演化为北美、欧盟、亚洲三足鼎立。
 
四、对普通人来讲,有哪些影响
 
RCEP协议的签署,就意味着在15国之内,商品流动、技术流动、服务流动、资本流动,包括人员跨境流动都会更加流畅。将会有超九成商品或纳入零关税范围,会极大地降低各成员国内流通商品的销售价格。当然更顺畅的贸易往来,也会带动更多的就业和创业机会。
 
但这些影响实际发生也需要等到2年之后,因为协议签订之后2年内,各个国家需要完成批准程序,协议才正式生效。 查看全部
一、概念
 
 
RCEP,英文全称 Regional Comprehensive Economic Partnership ,中文全称 区域全面经济伙伴关系协定。是2012年由东盟发起,历时八年,成员包括中国、日本、韩国、澳大利亚、新西兰和东盟十国共15方而制定的协定。东盟十国分别是:印度尼西亚、马来西亚、菲律宾、泰国、新加坡、文莱、柬埔寨、老挝、缅甸、越南。
 
2020年11月15日,区域全面经济伙伴关系协定签署仪式以视频方式进行,15个RCEP成员国经贸部长将在仪式上正式签署该协定。标志着当前世界上人口最多、经贸规模最大、最具发展潜力的自由贸易区正式启航。
 
协议共含20个章节,分为四大板块,包括货物贸易协定、投资协定、21世纪新议题和争端解决机制。
 原本应该有16国,包括印度在内,但是最后印度2019年因“有重要问题尚未得到解决”而没有加入协定。
 
timg.jpeg

 
二、意义
 
在疫情肆虐、世界经济严重衰退、国际贸易投资萎缩、保护主义单边主义加剧的特殊背景下,各方能够就RCEP达成共识,宣告了多边主义和自由贸易的胜利,将有力提振各方对经济增长的信心。将为区域和全球经济增长注入强劲动力。
 
世界正面临百年未有之大变局,RCEP的达成为亚太自贸区(FTAAP)进程提供了实现路径,进一步提升亚太地区今后在全球发展格局中的分量。
 三、全球经济格局现状
 
在RCEP签署之前,全球从洲际合作角度,最大的三个自贸区为北美自贸区(USMCA),欧盟(EU)和中国-东盟自贸区(CAFTA)。RCEP的诞生意味着全球最大自贸区形成,全球贸易格局正式演化为北美、欧盟、亚洲三足鼎立。
 
四、对普通人来讲,有哪些影响
 
RCEP协议的签署,就意味着在15国之内,商品流动、技术流动、服务流动、资本流动,包括人员跨境流动都会更加流畅。将会有超九成商品或纳入零关税范围,会极大地降低各成员国内流通商品的销售价格。当然更顺畅的贸易往来,也会带动更多的就业和创业机会。
 
但这些影响实际发生也需要等到2年之后,因为协议签订之后2年内,各个国家需要完成批准程序,协议才正式生效。

我的阅读分享:《人鼠之间》

读后感zkbhj 发表了文章 • 0 个评论 • 45 次浏览 • 2020-11-14 23:16 • 来自相关话题

阅读书目:《人鼠之间》
作者: [美] 约翰·斯坦倍克 著
书籍类型:寓言故事
页数:193页
阅读开始时间:2020年11月14日
阅读结束时间:2020年11月14日10:36:11
如何发现这本书:京东热销书单
阅读次数:第1次
阅读类型:精读
推荐等级:★★★★★
阅读建议:

今天花了2个小时读完的《人鼠之间》,这也是我读书以来第一次一气下来把整本书读完的。

其实这是一个中篇的寓言故事,作者约翰•斯坦贝克是二十世纪美国文学代表作家,1962年凭《人鼠之间》获得诺贝尔文学奖。当地读完这本故事之后,你会觉得虽然没有特别精彩跌宕的故事情节,但是每一个画面,每一个细节,无不在轻轻触动你的心弦,撩动你的神经。

一段金子般的友谊,一个海市蜃楼般的梦想。

人鼠之间,隐喻了人和人之间的人际关系。孤独是人类永恒而无奈的选择。人与人之间的隔膜犹如人与鼠之间不可避免的隔离,让你想到白人与黑人之间,主人与奴隶之间,富人与穷人之间,男人与女人之间……心灵的交融是一种可望而不可即的奢侈!

人类在命运面前,无能为力!

豆瓣地址:https://book.douban.com/subject/33445298/






  查看全部


阅读书目:《人鼠之间》
作者: [美] 约翰·斯坦倍克 著
书籍类型:寓言故事
页数:193页
阅读开始时间:2020年11月14日
阅读结束时间:2020年11月14日10:36:11
如何发现这本书:京东热销书单
阅读次数:第1次
阅读类型:精读
推荐等级:★★★★★
阅读建议:

今天花了2个小时读完的《人鼠之间》,这也是我读书以来第一次一气下来把整本书读完的。

其实这是一个中篇的寓言故事,作者约翰•斯坦贝克是二十世纪美国文学代表作家,1962年凭《人鼠之间》获得诺贝尔文学奖。当地读完这本故事之后,你会觉得虽然没有特别精彩跌宕的故事情节,但是每一个画面,每一个细节,无不在轻轻触动你的心弦,撩动你的神经。

一段金子般的友谊,一个海市蜃楼般的梦想。

人鼠之间,隐喻了人和人之间的人际关系。孤独是人类永恒而无奈的选择。人与人之间的隔膜犹如人与鼠之间不可避免的隔离,让你想到白人与黑人之间,主人与奴隶之间,富人与穷人之间,男人与女人之间……心灵的交融是一种可望而不可即的奢侈!

人类在命运面前,无能为力!

豆瓣地址:https://book.douban.com/subject/33445298/



s33755985.jpg

 

我的阅读分享:《幽灵》

读后感zkbhj 发表了文章 • 0 个评论 • 49 次浏览 • 2020-11-14 23:14 • 来自相关话题

阅读书目:《幽灵》
作者:[挪] 尤·奈斯博 著
书籍类型:侦探犯罪小说
页数:464页
阅读开始时间:2020年10月1日
阅读结束时间:2020年11月12日
如何发现这本书:京东热销书单
阅读次数:第1次
阅读类型:精读
推荐等级:★★★★★
阅读建议:

《幽灵》这本书是北欧悬疑小说天王尤•奈斯博的著作,入围英国犯罪小说作家协会国际匕首奖决选,荣登 《纽约时报》《出版人周刊》《洛杉矶时报》畅销榜 。讲述了两个孤独少年 × 一位孤勇警探,如父如子的亲情,失而复得的挚爱和触不可及的未来充满血性和反转的精彩故事。

生命唯一教会大家的一件事就是:时光无法倒流!

联想到昨天看到李诞说的一句话:“喜剧的内核是喜剧,人生的内核是悲剧。” 人终有一死,生命的终止注定每一个人的人生都是“悲剧”收场,无论你是惊天动地的英雄,还是默默无闻的平凡人。但又有谁来定义何为喜,何为悲呢?如果再给你一次重新来过的机会,你还会怎样过你的人生呢。

故事很精彩,推荐你可以读一读。

https://book.douban.com/subject/27042830/






  查看全部


阅读书目:《幽灵》
作者:[挪] 尤·奈斯博 著
书籍类型:侦探犯罪小说
页数:464页
阅读开始时间:2020年10月1日
阅读结束时间:2020年11月12日
如何发现这本书:京东热销书单
阅读次数:第1次
阅读类型:精读
推荐等级:★★★★★
阅读建议:

《幽灵》这本书是北欧悬疑小说天王尤•奈斯博的著作,入围英国犯罪小说作家协会国际匕首奖决选,荣登 《纽约时报》《出版人周刊》《洛杉矶时报》畅销榜 。讲述了两个孤独少年 × 一位孤勇警探,如父如子的亲情,失而复得的挚爱和触不可及的未来充满血性和反转的精彩故事。

生命唯一教会大家的一件事就是:时光无法倒流!

联想到昨天看到李诞说的一句话:“喜剧的内核是喜剧,人生的内核是悲剧。” 人终有一死,生命的终止注定每一个人的人生都是“悲剧”收场,无论你是惊天动地的英雄,还是默默无闻的平凡人。但又有谁来定义何为喜,何为悲呢?如果再给你一次重新来过的机会,你还会怎样过你的人生呢。

故事很精彩,推荐你可以读一读。

https://book.douban.com/subject/27042830/



s29450044.jpg

 

美国大选的投票制度是怎么样的?

回复

常识zkbhj 回复了问题 • 1 人关注 • 1 个回复 • 206 次浏览 • 2020-11-05 19:37 • 来自相关话题

LeetCode刷题Day2:两数相加

LeetCodezkbhj 发表了文章 • 0 个评论 • 164 次浏览 • 2020-09-22 20:57 • 来自相关话题

两数相加

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 
输出:7 -> 0 -> 8
原因:342 + 465 = 807LeetCode

 首先发一下我的思路已经给出的最初答案(大部分情况是正确的,但是超出数字范围就会和预期结果不一致),总之先把分析思路分享出来。


思路一:常规思路

分别循环两个链表,因为高位是个位,所以不断乘以10的n次方,n代表循环次数,从0开始,直到循环结束,就得到了两个无符号整数。所以,这就要求对输入数字有范围限制的要求,否则数字太大,超出整数的最大范围,得到的结果会因为发生溢出而不符合预期。

然后将两个整数进行加法运算,得到最终结果对应的int数字。

然后再将这个整数转化成字符串,循环字符串,得到字符对应的ASCII码点,然后减去48即可“间接“得到对应的数字。并按序生成链表。
 
func myPow(a,n int) int {
result := int(1)
for i:= n; i >0 ; i >>= 1 {
if i&1 != 0 {
result *=a
}
a *=a
}
return result
}

func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
var a,b,c,i,j int
p1 := l1
for p1!= nil {
a = a + p1.Val * myPow(10,i)
i++
p1 = p1.Next
}
p2 := l2
for p2!= nil {
b = b + p2.Val * myPow(10,j)
j++
p2 = p2.Next
}
c = a + b

str := strconv.Itoa(c)
headNode := new(ListNode)
current := headNode
current.Next = nil
for _,one := range str {
preNode := current
current.Val = int(one-48)
current = new(ListNode)
current.Next = preNode

}

return current.Next
}
思路一:高级思路(学习)
对应位置的数字相加,跟10取模,即可得到该位置上十进制数相加之后的数字,然后和10进行整除,如果两个数相加小于10,则整除之后是0,否则是1,即要进位的1,所以直到两个链表都循环完,或者最后没有进位时,停止循环,最终返回。
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
headList := new(ListNode)
head := headList
num := 0

for (l1 != nil || l2 != nil || num > 0) {
headList.Next = new(ListNode)
headList = headList.Next
if l1 != nil {
num = num + l1.Val
l1 = l1.Next
}
if l2 != nil {
num = num + l2.Val
l2 = l2.Next
}
headList.Val = (num) % 10
num = num / 10
}

return head.Next
}
  查看全部


两数相加

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 
输出:7 -> 0 -> 8
原因:342 + 465 = 807LeetCode


 首先发一下我的思路已经给出的最初答案(大部分情况是正确的,但是超出数字范围就会和预期结果不一致),总之先把分析思路分享出来。


思路一:常规思路

分别循环两个链表,因为高位是个位,所以不断乘以10的n次方,n代表循环次数,从0开始,直到循环结束,就得到了两个无符号整数。所以,这就要求对输入数字有范围限制的要求,否则数字太大,超出整数的最大范围,得到的结果会因为发生溢出而不符合预期。

然后将两个整数进行加法运算,得到最终结果对应的int数字。

然后再将这个整数转化成字符串,循环字符串,得到字符对应的ASCII码点,然后减去48即可“间接“得到对应的数字。并按序生成链表。
 
func myPow(a,n int) int {
result := int(1)
for i:= n; i >0 ; i >>= 1 {
if i&1 != 0 {
result *=a
}
a *=a
}
return result
}

func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
var a,b,c,i,j int
p1 := l1
for p1!= nil {
a = a + p1.Val * myPow(10,i)
i++
p1 = p1.Next
}
p2 := l2
for p2!= nil {
b = b + p2.Val * myPow(10,j)
j++
p2 = p2.Next
}
c = a + b

str := strconv.Itoa(c)
headNode := new(ListNode)
current := headNode
current.Next = nil
for _,one := range str {
preNode := current
current.Val = int(one-48)
current = new(ListNode)
current.Next = preNode

}

return current.Next
}

思路一:高级思路(学习)
对应位置的数字相加,跟10取模,即可得到该位置上十进制数相加之后的数字,然后和10进行整除,如果两个数相加小于10,则整除之后是0,否则是1,即要进位的1,所以直到两个链表都循环完,或者最后没有进位时,停止循环,最终返回。

func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
headList := new(ListNode)
head := headList
num := 0

for (l1 != nil || l2 != nil || num > 0) {
headList.Next = new(ListNode)
headList = headList.Next
if l1 != nil {
num = num + l1.Val
l1 = l1.Next
}
if l2 != nil {
num = num + l2.Val
l2 = l2.Next
}
headList.Val = (num) % 10
num = num / 10
}

return head.Next
}

 

LeetCode刷题Day1:两数之和

LeetCodezkbhj 发表了文章 • 0 个评论 • 160 次浏览 • 2020-09-22 20:55 • 来自相关话题

从今天开始,把LeetCode刷题作为每天日常计划的一项。尽早做准备,同时也每天对算法和相关的技能知识通过刷题的形式进行潜移默化的提升和加深理解。其实身边已经有很多程序猿朋友都在LeetCode刷题了,再不参与进来,都要出圈儿了呀。

今天是Day1,从第一道题目开始:
 

两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 

示例: 

给定 nums = [2, 7, 11, 15], target = 9 

因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]LeetCode
 

 
思路一:暴力遍历

也是最简单最原始的未经优化的方案思路。

首先明确题目要求,可以假设每种输入只会对应一个答案,即一定会有且只有一对符合要求的数据。

所以得到数组的长度,然后从第一个开始进行循环,将目标值target减去当前被循环的值,得到与之可以配对的值,然后在数组中进行寻找,如果找到,就返回2个符合要求的值的索引,否则继续下一次寻找,直到找到。

最外层循环的条件中 x&y异或之后如果为1,说明已经找到对应的结果,就不再循环。时间复杂度是O(n²),空间复杂度是O(1)。
func twoSum(nums []int, target int) []int {
len := len(nums)
var x,y int

for i:=0; i < len && x|y == 0; i++ {
findNum := target - nums[i]
for j:=0; j < len; j++ {
if findNum == nums[j] {
x = i;
y = j;
}
}

}

return []int{x,y}
}
思路二:进一步提升效率,可以利用哈希表
从第一个思路中,可以看到其实在判断一个值在一个“表”中是否存在的时候,我们采用了遍历的方式,这样的话时间复杂度就是O(n),但是大家肯定都知道,哈希表是最擅长做这个事情的。它可以把时间复杂度降到O(1)。所以,这样思路就很清晰了,我们需要先把传过来的数组生成对应的哈希结构,也就是Go里面的map字典,这样我们就可以快速的找到某值在还是不在了。我们把数组的value作为map的key,index作为map的value。代码实现如下。
 
func twoSum(nums []int, target int) []int {
var hashMap map[int]int
len := len(nums)
var x,y,found int

//初始化字典
hashMap = make(map[int]int)
for i:=0; i < len; i++ {
hashMap[nums[i]] = i
}

for j:=0; j < len && found == 0; j++ {
findNum := target - nums[j]
v, ok := hashMap[findNum]
if ok && v != j {
found = 1
x = j
y = v
}

}

return []int{x,y}
}
今天这道题的难度级别是简单,但是带我回顾了Go语言的数组、map的相关知识和用法,以及哈希表这一知识点。 查看全部
从今天开始,把LeetCode刷题作为每天日常计划的一项。尽早做准备,同时也每天对算法和相关的技能知识通过刷题的形式进行潜移默化的提升和加深理解。其实身边已经有很多程序猿朋友都在LeetCode刷题了,再不参与进来,都要出圈儿了呀。

今天是Day1,从第一道题目开始:
 


两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 

示例: 

给定 nums = [2, 7, 11, 15], target = 9 

因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]LeetCode
 


 
思路一:暴力遍历

也是最简单最原始的未经优化的方案思路。

首先明确题目要求,可以假设每种输入只会对应一个答案,即一定会有且只有一对符合要求的数据。

所以得到数组的长度,然后从第一个开始进行循环,将目标值target减去当前被循环的值,得到与之可以配对的值,然后在数组中进行寻找,如果找到,就返回2个符合要求的值的索引,否则继续下一次寻找,直到找到。

最外层循环的条件中 x&y异或之后如果为1,说明已经找到对应的结果,就不再循环。时间复杂度是O(n²),空间复杂度是O(1)。

func twoSum(nums []int, target int) []int {
len := len(nums)
var x,y int

for i:=0; i < len && x|y == 0; i++ {
findNum := target - nums[i]
for j:=0; j < len; j++ {
if findNum == nums[j] {
x = i;
y = j;
}
}

}

return []int{x,y}
}

思路二:进一步提升效率,可以利用哈希表
从第一个思路中,可以看到其实在判断一个值在一个“表”中是否存在的时候,我们采用了遍历的方式,这样的话时间复杂度就是O(n),但是大家肯定都知道,哈希表是最擅长做这个事情的。它可以把时间复杂度降到O(1)。所以,这样思路就很清晰了,我们需要先把传过来的数组生成对应的哈希结构,也就是Go里面的map字典,这样我们就可以快速的找到某值在还是不在了。我们把数组的value作为map的key,index作为map的value。代码实现如下。
 

func twoSum(nums []int, target int) []int {
var hashMap map[int]int
len := len(nums)
var x,y,found int

//初始化字典
hashMap = make(map[int]int)
for i:=0; i < len; i++ {
hashMap[nums[i]] = i
}

for j:=0; j < len && found == 0; j++ {
findNum := target - nums[j]
v, ok := hashMap[findNum]
if ok && v != j {
found = 1
x = j
y = v
}

}

return []int{x,y}
}

今天这道题的难度级别是简单,但是带我回顾了Go语言的数组、map的相关知识和用法,以及哈希表这一知识点。

我的阅读分享:《名侦探的守则》

读后感zkbhj 发表了文章 • 0 个评论 • 162 次浏览 • 2020-09-22 17:22 • 来自相关话题

阅读书目:《名侦探的守则》
作者:[日]东野圭吾 著
书籍类型:侦探推理小说
页数:256页
阅读开始时间:2020年9月19日
阅读结束时间:2020年9月20日18:18:11
如何发现这本书:京东热销书单
阅读次数:第1次
阅读类型:精读
推荐等级:★★★★★
阅读建议:
这个周末2天的空闲时间,读完了《名侦探的守则》这本看似是“侦探推理”类型小说的小说,这也是我读了这么多东野圭吾作品里,最特别的一本。说它是“侦探推理小说”,它确实也是,因为里面全部都是围绕“名侦探”天下一大五郎展开的“本格推理”典型案件。
说它又不像是“侦探推理小说”,是因为它跟以前读过的所有侦探推理小说都不一样,无论从叙事方式,还是人物描写。太不一样了。
它用一种幽默讽刺的口吻,解构了本格推理小说的创作模式,把大家在侦探小说里能够见到的本格推理的各种诡计和作案手法都彻底进行了颠覆,让你感到完全不按“套路”出牌!
推荐一看!
所以到这里,有一个概念就要弄清楚,读了这么多侦探推理类型的小说,什么是“本格推理”?

本格推理,又称古典推理,指与注重写实的社会派推理小说相对,以推理解谜为主要走向,让读者和侦探拥有同样线索、站在同一平面的推理小说主流类型。常有密室杀人或孤岛杀人等诡计类型。
 
比如之前读过的阿加莎·克里斯蒂的经典之作《无人生还》,就是孤岛杀人的典型代表作,而东野圭吾的《放学后》、《嫌疑人X的献身》等都是密室杀人的典型代表作。

看了下这部作品还拍了10集的电视剧,有机会去看看。

豆瓣地址:https://book.douban.com/subject/26926528/
 






  查看全部


阅读书目:《名侦探的守则》
作者:[日]东野圭吾 著
书籍类型:侦探推理小说
页数:256页
阅读开始时间:2020年9月19日
阅读结束时间:2020年9月20日18:18:11
如何发现这本书:京东热销书单
阅读次数:第1次
阅读类型:精读
推荐等级:★★★★★
阅读建议:
这个周末2天的空闲时间,读完了《名侦探的守则》这本看似是“侦探推理”类型小说的小说,这也是我读了这么多东野圭吾作品里,最特别的一本。说它是“侦探推理小说”,它确实也是,因为里面全部都是围绕“名侦探”天下一大五郎展开的“本格推理”典型案件。
说它又不像是“侦探推理小说”,是因为它跟以前读过的所有侦探推理小说都不一样,无论从叙事方式,还是人物描写。太不一样了。
它用一种幽默讽刺的口吻,解构了本格推理小说的创作模式,把大家在侦探小说里能够见到的本格推理的各种诡计和作案手法都彻底进行了颠覆,让你感到完全不按“套路”出牌!
推荐一看!
所以到这里,有一个概念就要弄清楚,读了这么多侦探推理类型的小说,什么是“本格推理”?

本格推理,又称古典推理,指与注重写实的社会派推理小说相对,以推理解谜为主要走向,让读者和侦探拥有同样线索、站在同一平面的推理小说主流类型。常有密室杀人或孤岛杀人等诡计类型。
 
比如之前读过的阿加莎·克里斯蒂的经典之作《无人生还》,就是孤岛杀人的典型代表作,而东野圭吾的《放学后》、《嫌疑人X的献身》等都是密室杀人的典型代表作。

看了下这部作品还拍了10集的电视剧,有机会去看看。

豆瓣地址:https://book.douban.com/subject/26926528/
 



586b3518N17890c29.jpg

 

我的阅读分享:《祈念守护人》

读后感zkbhj 发表了文章 • 0 个评论 • 174 次浏览 • 2020-09-18 13:23 • 来自相关话题

阅读书目:《祈念守护人》
作者:[日]东野圭吾 著
书籍类型:人情温暖小说
页数:314页
阅读开始时间:2020年9月10日
阅读结束时间:2020年9月18日13:18:11
如何发现这本书:京东热销书单
阅读次数:第1次
阅读类型:精读
推荐等级:★★★★★
阅读建议:就算世界冷漠疏离,《祈念守护人》为你找回人情温暖。祈念,就跟字面要传达的含义一样,他不是简简单单的祈祷或者许愿,念,则包含很多东西,更多的则是一种真情,给人以温暖,给人以力量。很治愈的小说构思,可以一读。稍稍运用了一些简单的推理,整部作品算不上是推理小说。

豆瓣地址:https://book.douban.com/subject/35017604/






  查看全部


阅读书目:《祈念守护人》
作者:[日]东野圭吾 著
书籍类型:人情温暖小说
页数:314页
阅读开始时间:2020年9月10日
阅读结束时间:2020年9月18日13:18:11
如何发现这本书:京东热销书单
阅读次数:第1次
阅读类型:精读
推荐等级:★★★★★
阅读建议:就算世界冷漠疏离,《祈念守护人》为你找回人情温暖。祈念,就跟字面要传达的含义一样,他不是简简单单的祈祷或者许愿,念,则包含很多东西,更多的则是一种真情,给人以温暖,给人以力量。很治愈的小说构思,可以一读。稍稍运用了一些简单的推理,整部作品算不上是推理小说。

豆瓣地址:https://book.douban.com/subject/35017604/



529c6762c3d0544a.jpg

 

使用了Go mod管理的项目里如何添加新的第三方包?

回复

GoLangzkbhj 回复了问题 • 1 人关注 • 1 个回复 • 474 次浏览 • 2020-09-17 11:32 • 来自相关话题