avatar
Go语言SOLID实践系列一之单一职责原则

Go语言SOLID实践系列一之单一职责原则

星期四,十二月 23 日,2021 年

什么是SOLID?

以下引用wikipedia上的解释:

SOLID指面向对象编程和面向对象设计的五个基本原则。当这些原则被一起应用时,它们使得一个程序员开发一个容易进行软件维护和扩展的系统变得更加可能。SOLID所包含的原则是通过引发编程者进行软件源代码的代码重构进行软件的代码异味清扫,从而使得软件清晰可读以及可扩展时可以应用的指南。SOLID被典型的应用在测试驱动开发上,并且是敏捷开发以及自适应软件开发的基本原则的重要组成部分

avatar归零
3 分钟阅读
Kubernetes最佳实践

Kubernetes最佳实践

星期三,十二月 22 日,2021 年

容器的使用越来越多,导致对Kubernetes等容器编排平台的需求随之上升。使用容器来打包应用程序,极大地简化了应用程序从开发到生产的部署过程。毫无疑问,Kubernetes作为一个平台协调器,通过引入其深奥的方式,进一步简化了这个过程。

今天,我想谈谈我在使用Kubernetes时学到的一些好的做法,这些做法可以实现安全部署并推动集群的效率。 那么,让我们开始吧。

avatar归零
1 分钟阅读
在Kubernetes上gRPC是如何通过Headless Service负载均衡

在Kubernetes上gRPC是如何通过Headless Service负载均衡

星期一,十二月 20 日,2021 年

gRPC 是用于进程间通信的最流行的现代 RPC 框架之一。 它是微服务架构的绝佳选择。 而且,毫无疑问,部署微服务应用程序最流行的方式是 Kubernetes。

Kubernetes部署可以具有相同的后端实例,为许多客户端请求提供服务。 Kubernetes 的 ClusterIP 服务提供负载均衡的IP地址。 但是这种默认的负载平衡不适用于gRPC开箱即用。

如果你使用gRPC并在 Kubernetes 上部署了许多后端服务,那么本文档适合你。

avatar归零
3 分钟阅读
关于Go1.18你想知道的都在这里

关于Go1.18你想知道的都在这里

星期日,十二月 19 日,2021 年

原文:https://betterprogramming.pub/golang-1-18-what-you-need-to-know-a5701f7e14ab 在Go 1.18中,有两件大事是你需要知道的。类型参数(在其他语言中称为泛型)和模糊测试,但为什么它们如此重要? Golang团队正在努力开发Go1.18,该版本将于2022年2月发布,它将是一个大的版本。Go1.18将引入泛型和模糊测试,这有可能彻底改变我们开发和测试Go程序的方式。我们将在下面看一下这两个新特性。 类型参数 类型参数将允许Go程序员用占位符类型名称定义函数和方法。这将允许开发人员编写可以在项目的不同部分重复使用的代码,但仍然可以对他们期望支持的所有数据类型进行通用处理。 让我们来看看一个普通的Go函数(在1.18之前),计算两个数中较小的一个数。 func min(a, b int) int { if a < b { return a } return b } 上面这个方法中,我们把两个整数作为参数,min(1,2)和min(2,1)都将返回1。到目前为止还不错,但是当你想得到两个浮点数的较小值时,怎么办呢?我们将不得不写一个新的函数,它需要两个浮点数作为参数,而且我们不能重复使用第一个函数的代码。函数的主体仍然是完全相同的代码。如果我们想得到两个float64数的较小值,我们将不得不再次编写相同的函数,以float64作为参数。 现在让我们来看看Go的泛型。你现在可以用一个任意的占位符类型名称来定义函数,这个名称将作为其他类型的参数。在Go中,泛型是以类型T的形式来写的。 这意味着你可以用任何占位符类型的名字来定义一个函数,这个名字以后会被另一个参数填入。现在我们用新的泛型方法重构之前的例子。 type numeric interface { type int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64, float32, float64 } func min[T numeric](a, b T) T { if a < b { return a } return b } 如上,这段代码有点长。首先,我们定义一个接口,它将所有的数字类型声明为numeric的新类型。这意味着我们可以在泛型中使用float64和int。然后,像之前一样,我们定义一个新的min函数。 不同的是,现在这个函数在头部有一个类型参数:min[T numeric]…. 这告诉Go,类型T应该是一个数字类型,所以是我们在接口中声明的任何类型。然后,像以前一样我们声明一个函数,只不过我们用T代替了int。 如果新的函数现在被调用,Go会检查用户提供的类型是否符合接口的要求。如果是的话,它将在整个函数中用该类型替换Tw。因此,如果我们输入一个int类型的数字,我们也会得到一个整数的回报。如果我们输入一个float64,我们将得到一个float64的返回值,以此类推。因此,我们现在有了一个单一的 “全能 “函数,而不是写12个内容完全相同的函数,但对Go中的每个数字类型都有不同的参数类型。
@ 归零
1 分钟阅读
“机器学习通用工作流程”

“机器学习通用工作流程”

星期一,六月 10 日,2019 年

机器学习的通用工作流程总结为如下几个步骤:

1. 定义问题,收集数据集

首先我们必须先定义多面对的问题。

  1. 输入的数据是什么?你要预测什么?
  2. 你面对的是什么类型的问题?二分类问题、多分类问题、标量回归问题
    向量回归问题还是其他问题,确定问题类型,有助于选择模型架构,损失函数。
    同时做出如下假设
  • 假设输出可以根据输入进行预测
  • 假设可用数据包含足够多的信息,足以学习输入和输出之间的关系
@ 归零
1 分钟阅读
Pandas

Pandas

星期三,四月 10 日,2019 年

Pandas 速查手册

对于数据科学家,无论是数据分析还是数据挖掘,如果用 Python作为工具,Pandas是一个非常重要的Python包,它不仅提供了很多方法,是的数据处理变得非常简单,同时由于底层使用Numpy,使得数据处理的速度也很快,比Python内置的方法有很大优势。

Pandas包导入

import pandas as pd
import numpy as np
@ 归零
1 分钟阅读
ReactiveCocoa中的基本算子

ReactiveCocoa中的基本算子

星期日,八月 14 日,2016 年

原文链接: Basic Operators

这个文档解释ReactiveCocoa中最常用的Operator,以及一些用例。注意Operators,在这里指的是signal和signal producers之间的转换,不是Swift中的操作符,换句话说,这些是ReactiveCocoa提供处理事件流的组合原语。该文档使用术语“事件流”来描述Signal和SignalProducer的概念。

事件流副作用

观察(Observation)

Signal可以被观察通过observe函数,需要一个Observer作为参数,任何事件流都会发送给它。

signal.observe(Signal.Observer { event in
  switch event {
    case let .Next(next):
      print("Next: \(next)")
    case let .Failed(error):
      print("Failed: \(error)")
    case .Completed:
      print("Completed")
    case .Interrupted:
      print("Interrupted")
  }
})
@ 归零
2 分钟阅读
如何解决retain cycle

如何解决retain cycle

星期三,十月 28 日,2015 年

当遇到retain cycle是,一般我们的解决办法是让一个变为weak reference,而选择让那个变成weak reference是个问题。 我们可以把存在retain cycle的两个对象看成是 父-子 关系。 在这个关系当中,父可以拥有子,但是子不可以拥有父,因此,在这个问题中,我们可以把作为 父 的对象定义为strong, 而作为 子 的对象定义为weak,这样就解决了retain cycle。
@ 归零
1 分钟阅读
一个iOS View crash问题

一个iOS View crash问题

星期四,十月 15 日,2015 年

[2015-10-15] 用xib做了一个简单的界面,程序启动时会crash掉,xcode error打印信息: Terminating app due to uncaught exception ‘UIViewControllerHierarchyInconsistency’, reason: ‘A view can only be associated with at most one view controller at a time! View <UIView: 0x7f914af22610; frame = (0 0; 414 736); autoresize = W+H; layer = <CALayer: 0x7f914af22980» is associated with <UIViewController: 0x7f914ae49a90>. Clear this association before associating this view with <TestViewController: 0x7f914ac7f680>.’
@ 归零
1 分钟阅读

© 2014 - 2022 Lionel's Blog

Powered by Hugo with theme Dream.